122 lines
4.7 KiB
Python
122 lines
4.7 KiB
Python
|
|
# functions that can be diretcly applied over an array
|
|
functionspace = {
|
|
# directly build functions without dependencies
|
|
"elmcount": ("len(%(0)s)", ()),
|
|
|
|
# directly build numpy based functions
|
|
"pi": ("np.pi", (("numpy",),)),
|
|
"abs": ("np.abs(%(0)s)", (("numpy",),)),
|
|
"power": ("np.power(%(0)s,%(1)s)", (("numpy",),)),
|
|
"min": ("np.minimum(%(0)s, %(1)s)", (("numpy",),)),
|
|
"max": ("np.maximum(%(0)s, %(1)s)", (("numpy",),)),
|
|
"exp": ("np.exp(%(0)s)", (("numpy",),)),
|
|
"sin": ("np.sin(%(0)s)", (("numpy",),)),
|
|
"cos": ("np.cos(%(0)s)", (("numpy",),)),
|
|
"tan": ("np.tan(%(0)s)", (("numpy",),)),
|
|
"arcsin": ("np.arcsin(%(0)s)", (("numpy",),)),
|
|
"arccos": ("np.arccos(%(0)s)", (("numpy",),)),
|
|
"arctan": ("np.arctan(%(0)s)", (("numpy",),)),
|
|
"sinh": ("np.sinh(%(0)s)", (("numpy",),)),
|
|
"cosh": ("np.cosh(%(0)s)", (("numpy",),)),
|
|
"tanh": ("np.tanh(%(0)s)", (("numpy",),)),
|
|
"sqrt": ("np.sqrt(%(0)s)", (("numpy",),)),
|
|
"ln": ("np.log(%(0)s)", (("numpy",),)),
|
|
"log": ("(np.log(%(0)s)/np.log(%(1)s))", (("numpy",),)),
|
|
# NUMPY: "invert_matrix": ("np.linalg.inv(%(0)s)", (("numpy",),)),
|
|
|
|
# vector functions with axis to apply over
|
|
# NUMPY:
|
|
# "prod": "np.prod(%(0)s, axis=%(axis)s)", (("numpy",),)),
|
|
# "sum": "np.sum(%(0)s, axis=%(axis)s)", (("numpy",),)),
|
|
# "vmax": "np.max(%(0)s, axis=%(axis)s)", ("numpy",),)),
|
|
# "vmin": "np.min(%(0)s, axis=%(axis)s)", (("numpy",),))
|
|
"prod": ("prod(%(0)s, dim=%(axis)s)", (("functions", "prod"),)),
|
|
"sum": ("sum(%(0)s, dim=%(axis)s)", (("functions", "sum"),)),
|
|
"vmax": ("vmax(%(0)s, dim=%(axis)s)", (("functions", "vmax"),)),
|
|
"vmin": ("vmin(%(0)s, dim=%(axis)s)", (("functions", "vmin"),)),
|
|
"vmax_xmile": ("vmax(%(0)s)", (("functions", "vmax"),)),
|
|
"vmin_xmile": ("vmin(%(0)s)", (("functions", "vmin"),)),
|
|
"vector_select": (
|
|
"vector_select(%(0)s, %(1)s, %(axis)s, %(2)s, %(3)s, %(4)s)",
|
|
(("functions", "vector_select"),)
|
|
),
|
|
|
|
# functions defined in pysd.py_bakcend.functions
|
|
"active_initial": (
|
|
"active_initial(__data[\"time\"].stage, lambda: %(0)s, %(1)s)",
|
|
(("functions", "active_initial"),)),
|
|
"if_then_else": (
|
|
"if_then_else(%(0)s, lambda: %(1)s, lambda: %(2)s)",
|
|
(("functions", "if_then_else"),)),
|
|
"integer": (
|
|
"integer(%(0)s)",
|
|
(("functions", "integer"),)),
|
|
"invert_matrix": ( # NUMPY: remove
|
|
"invert_matrix(%(0)s)",
|
|
(("functions", "invert_matrix"),)), # NUMPY: remove
|
|
"modulo": (
|
|
"modulo(%(0)s, %(1)s)",
|
|
(("functions", "modulo"),)),
|
|
"pulse": (
|
|
"pulse(__data['time'], %(0)s, width=%(1)s)",
|
|
(("functions", "pulse"),)),
|
|
"Xpulse": (
|
|
"pulse(__data['time'], %(0)s, magnitude=%(1)s)",
|
|
(("functions", "pulse"),)),
|
|
"pulse_train": (
|
|
"pulse(__data['time'], %(0)s, repeat_time=%(1)s, width=%(2)s, "\
|
|
"end=%(3)s)",
|
|
(("functions", "pulse"),)),
|
|
"Xpulse_train": (
|
|
"pulse(__data['time'], %(0)s, repeat_time=%(1)s, magnitude=%(2)s)",
|
|
(("functions", "pulse"),)),
|
|
"get_time_value": (
|
|
"get_time_value(__data['time'], %(0)s, %(1)s, %(2)s)",
|
|
(("functions", "get_time_value"),)),
|
|
"quantum": (
|
|
"quantum(%(0)s, %(1)s)",
|
|
(("functions", "quantum"),)),
|
|
"Xramp": (
|
|
"ramp(__data['time'], %(0)s, %(1)s)",
|
|
(("functions", "ramp"),)),
|
|
"ramp": (
|
|
"ramp(__data['time'], %(0)s, %(1)s, %(2)s)",
|
|
(("functions", "ramp"),)),
|
|
"step": (
|
|
"step(__data['time'], %(0)s, %(1)s)",
|
|
(("functions", "step"),)),
|
|
"xidz": (
|
|
"xidz(%(0)s, %(1)s, %(2)s)",
|
|
(("functions", "xidz"),)),
|
|
"zidz": (
|
|
"zidz(%(0)s, %(1)s)",
|
|
(("functions", "zidz"),)),
|
|
"vector_sort_order": (
|
|
"vector_sort_order(%(0)s, %(1)s)",
|
|
(("functions", "vector_sort_order"),)),
|
|
"vector_reorder": (
|
|
"vector_reorder(%(0)s, %(1)s)",
|
|
(("functions", "vector_reorder"),)),
|
|
"vector_rank": (
|
|
"vector_rank(%(0)s, %(1)s)",
|
|
(("functions", "vector_rank"),)),
|
|
|
|
# random functions must have the shape of the component subscripts
|
|
# most of them are shifted, scaled and truncated
|
|
"random_0_1": (
|
|
"np.random.uniform(0, 1, size=%(size)s)",
|
|
(("numpy",),)),
|
|
"random_uniform": (
|
|
"np.random.uniform(%(0)s, %(1)s, size=%(size)s)",
|
|
(("numpy",),)),
|
|
"random_normal": (
|
|
"stats.truncnorm.rvs((%(0)s-%(2)s)/%(3)s, (%(1)s-%(2)s)/%(3)s,"
|
|
" loc=%(2)s, scale=%(3)s, size=%(size)s)",
|
|
(("scipy", "stats"),)),
|
|
"random_exponential": (
|
|
"stats.truncexpon.rvs((%(1)s-np.maximum(%(0)s, %(2)s))/%(3)s,"
|
|
" loc=np.maximum(%(0)s, %(2)s), scale=%(3)s, size=%(size)s)",
|
|
(("scipy", "stats"), ("numpy",),)),
|
|
}
|