Skip to content

Instantly share code, notes, and snippets.

View jaantollander's full-sized avatar

Jaan Tollander de Balsch jaantollander

View GitHub Profile
@jaantollander
jaantollander / decorator.py
Last active December 30, 2023 21:50
Template for Python decorator function and class
import functools
def decorator(function):
"""A general decorator function"""
@functools.wraps(function)
def wrapper(*args, **kwargs):
# Write decorator function logic here
# Before function call
@jaantollander
jaantollander / public.py
Last active February 13, 2017 16:06
Python decorator to add objects to __all__
def public(f):
"""Use a decorator to avoid retyping function/class names. [#]_
* Based on an idea by Duncan Booth:
http://groups.google.com/group/comp.lang.python/msg/11cbb03e09611b8a
* Improved via a suggestion by Dave Angel:
http://groups.google.com/group/comp.lang.python/msg/3d400fb22d8a42e1
References:
.. [#] https://stackoverflow.com/questions/6206089/is-it-a-good-practice-to-add-names-to-all-using-a-decorator
@jaantollander
jaantollander / format_time.py
Last active February 14, 2017 13:25
IPython notebook's timeit time_format function
import math
import sys
def format_time(timespan, precision=3):
"""Formats the timespan in a human readable form
Args:
timespan (float):
Time in seconds.
@jaantollander
jaantollander / quadtree.py
Created March 6, 2017 15:51
Quadtree implementation with Python and Numba
import numpy as np
import numba
from numba import deferred_type, optional, f8
node_type = deferred_type()
spec = (
("value", optional(f8[:, :])),
("center", f8[:]),
("length", f8),
@jaantollander
jaantollander / sphinx-quickstart.sh
Last active March 8, 2017 15:52
Script quick-starting Sphinx
sphinx-quickstart "docs" -p "project" -a "Jaan Tollander de Balsch" -v "0.1" -l "en" --makefile --batchfile --quiet
@jaantollander
jaantollander / compose.py
Last active March 13, 2017 09:22
Python script for composing functions
# Adapted from a comment from:
# https://mathieularose.com/function-composition-in-python/
import functools
def compose(*funcs):
"""Compose functions f, g, h, ... into ...(f(g(h(x))))
Args:
*funcs: Functions to be composed. Fuctions must take only one argument.
@jaantollander
jaantollander / agent.csv
Created March 15, 2017 12:26
Old agent configuration file
name symbol value unit explanation source
size :math:`N` Number of agents (N)
shape :math:`(N, 2)` Shape for arrays
three_circles_flag Boolean indicating if agent is modeled with three circle model
orientable_flag Boolean indicating if agent is orientable
active Boolean indicating if agent is active
goal_reached Boolean indicating if goal is reahed
mass :math:`m` kg Mass fds+evac
radius :math:`r` m Radius fds+evac
r_t :math:`r_t` m Radius of torso fds+evac
@jaantollander
jaantollander / format_numpy.py
Created March 15, 2017 14:42
Setup string formatting of numpy arrays
def format_numpy(precision=5, threshold=6, edgeitems=3, linewidth=None,
suppress=False, nanstr=None, infstr=None, formatter=None):
try:
import numpy as np
np.set_printoptions(precision, threshold, edgeitems, linewidth,
suppress, nanstr, infstr, formatter)
except ImportError:
return
@jaantollander
jaantollander / body.csv
Last active July 23, 2021 08:22
Crowddynamics agent body types
adult male female child eldery Unit explanation
radius 0.255 0.27 0.24 0.21 0.25 m Total radius of the agent
radius_scale 0.035 0.02 0.02 0.015 0.02 m Difference bound for total radius
ratio_rt 0.5882 0.5926 0.5833 0.5714 0.6 1 Ratio of total radius and radius torso
ratio_rs 0.3725 0.3704 0.375 0.3333 0.36 1 Ratio of total radius and radius shoulder
ratio_ts 0.6275 0.6296 0.625 0.6667 0.64 1 Ratio of total radius and distance from torso to shoulder
velocity 1.25 1.35 1.15 0.9 0.8 m/s Walking speed of agent
velocity_scale 0.3 0.2 0.2 0.3 0.3 m/s Difference bound for walking speed
mass 73.5 80 67 57 70 kg Mass of an agent
mass_scale 8 8 6.7 5.7 7 kg Standard deviation of mass of the agent
@jaantollander
jaantollander / yield_from.py
Last active March 19, 2017 05:26
Example of python yield from aka generator delegation syntax
def generator(): return range(10)
# Here f and g does the exactly same thing
# Generator delegation
def f():
yield from generator()
# Legacy python syntax