CCR/.venv/lib/python3.12/site-packages/pysd/builders/python/python_functions.py

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",),)),
}