Kalman-and-Bayesian-Filters.../book_format.py

101 lines
2.6 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
from IPython.core.display import HTML
import matplotlib.pylab as pylab
import matplotlib.pyplot as plt
import json
import numpy as np
import sys
from contextlib import contextmanager
sys.path.insert(0,'./code') # allow us to import book_format
def test_filterpy_version():
import filterpy
min_version = [0,0,10]
v = filterpy.__version__
tokens = v.split('.')
for i,v in enumerate(tokens):
if int(v) > min_version[i]:
return
i = len(tokens) - 1
if min_version[i] > int(tokens[i]):
raise Exception("Minimum FilterPy version supported is {}.{}.{}.\n"
"Please install a more recent version." .format(
*min_version))
v = int(tokens[0]*1000)
# ensure that we have the correct filterpy loaded. This is
# called when this module is imported at the top of each book
# chapter so the reader can see that they need to update FilterPy.
test_filterpy_version()
def equal_axis():
pylab.rcParams['figure.figsize'] = 10,10
plt.axis('equal')
def reset_axis():
pylab.rcParams['figure.figsize'] = 12, 6
2015-02-18 01:10:24 +01:00
def set_figsize(x, y):
pylab.rcParams['figure.figsize'] = x, y
@contextmanager
def figsize(x,y):
"""Temporarily set the figure size using 'with figsize(a,b):'"""
set_figsize(x,y)
yield
reset_axis()
@contextmanager
def numpy_precision(precision):
old = np.get_printoptions()['precision']
np.set_printoptions(precision=precision)
yield
np.set_printoptions(old)
def _decode_list(data):
rv = []
for item in data:
if isinstance(item, unicode):
item = item.encode('utf-8')
elif isinstance(item, list):
item = _decode_list(item)
elif isinstance(item, dict):
item = _decode_dict(item)
rv.append(item)
return rv
def _decode_dict(data):
rv = {}
for key, value in data.iteritems():
if isinstance(key, unicode):
key = key.encode('utf-8')
if isinstance(value, unicode):
value = value.encode('utf-8')
elif isinstance(value, list):
value = _decode_list(value)
elif isinstance(value, dict):
value = _decode_dict(value)
rv[key] = value
return rv
2015-01-27 18:51:52 +01:00
def load_style(directory = '.', name='/styles/custom2.css'):
if sys.version_info[0] >= 3:
2015-01-27 18:51:52 +01:00
s = json.load(open(directory + "/code/538.json"))
else:
2015-01-27 18:51:52 +01:00
s = json.load(open(directory + "/code/538.json"), object_hook=_decode_dict)
plt.rcParams.update(s)
reset_axis ()
np.set_printoptions(suppress=True)
2015-01-27 18:51:52 +01:00
styles = open(directory + name, 'r').read()
2015-01-27 18:24:52 +01:00
return HTML(styles)