Basic Output Example
Basic Output Example#
Imagine we want to explore the function scipy.special.eval_jacobi
. It takes four different arguments and we want to get a feel for what each does.
First we wrap it in a Runner
object, that encapsulates how to run all the different combinations of its arguments and automatically labels the output.
[1]:
from xyzpy import *
from scipy.special import eval_jacobi
def jacobi(x, n, alpha, beta):
return eval_jacobi(n, alpha, beta, x)
r = Runner(jacobi, var_names='Pn(x)')
This is as simple as it gets, the function jacobi
has one output variable, which we are calling 'Pn(x)'
.
Now let’s define all the different values we want to try for each argument (the function actually vectorizes over x
so this is overkill, but serves as a good demonstration):
[2]:
import numpy as np
combos = {
'x': np.linspace(0, 1, 101),
'n': [1, 2, 4, 8, 16],
'alpha': np.linspace(0, 2, 3),
'beta': np.linspace(0, 1, 5),
}
Now, let’s run the function for every combination of the above parameters:
[3]:
r.run_combos(combos)
100%|##########| 7575/7575 [00:00<00:00, 168145.97it/s]
[3]:
<xarray.Dataset> Dimensions: (alpha: 3, beta: 5, n: 5, x: 101) Coordinates: * x (x) float64 0.0 0.01 0.02 0.03 0.04 ... 0.96 0.97 0.98 0.99 1.0 * n (n) int64 1 2 4 8 16 * alpha (alpha) float64 0.0 1.0 2.0 * beta (beta) float64 0.0 0.25 0.5 0.75 1.0 Data variables: Pn(x) (x, n, alpha, beta) float64 0.0 -0.125 -0.25 ... 153.0 153.0 153.0
- alpha: 3
- beta: 5
- n: 5
- x: 101
- x(x)float640.0 0.01 0.02 ... 0.98 0.99 1.0
array([0. , 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1 , 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2 , 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.3 , 0.31, 0.32, 0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4 , 0.41, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.5 , 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.6 , 0.61, 0.62, 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.7 , 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.8 , 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89, 0.9 , 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99, 1. ])
- n(n)int641 2 4 8 16
array([ 1, 2, 4, 8, 16])
- alpha(alpha)float640.0 1.0 2.0
array([0., 1., 2.])
- beta(beta)float640.0 0.25 0.5 0.75 1.0
array([0. , 0.25, 0.5 , 0.75, 1. ])
- Pn(x)(x, n, alpha, beta)float640.0 -0.125 -0.25 ... 153.0 153.0
array([[[[ 0.00000000e+00, -1.25000000e-01, -2.50000000e-01, -3.75000000e-01, -5.00000000e-01], [ 5.00000000e-01, 3.75000000e-01, 2.50000000e-01, 1.25000000e-01, 0.00000000e+00], [ 1.00000000e+00, 8.75000000e-01, 7.50000000e-01, 6.25000000e-01, 5.00000000e-01]], [[-5.00000000e-01, -5.23437500e-01, -5.31250000e-01, -5.23437500e-01, -5.00000000e-01], [-5.00000000e-01, -5.85937500e-01, -6.56250000e-01, -7.10937500e-01, -7.50000000e-01], [-2.50000000e-01, -3.98437500e-01, -5.31250000e-01, -6.48437500e-01, -7.50000000e-01]], [[ 3.75000000e-01, 3.96087646e-01, 4.03808594e-01, 3.97064209e-01, 3.75000000e-01], [ 3.75000000e-01, 4.55169678e-01, 5.24902344e-01, 5.82122803e-01, 6.25000000e-01], [ 1.25000000e-01, 2.58392334e-01, 3.88183594e-01, 5.11322021e-01, 6.25000000e-01]], ... [[ 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00], [ 5.00000000e+00, 5.00000000e+00, 5.00000000e+00, 5.00000000e+00, 5.00000000e+00], [ 1.50000000e+01, 1.50000000e+01, 1.50000000e+01, 1.50000000e+01, 1.50000000e+01]], [[ 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00], [ 9.00000000e+00, 9.00000000e+00, 9.00000000e+00, 9.00000000e+00, 9.00000000e+00], [ 4.50000000e+01, 4.50000000e+01, 4.50000000e+01, 4.50000000e+01, 4.50000000e+01]], [[ 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00], [ 1.70000000e+01, 1.70000000e+01, 1.70000000e+01, 1.70000000e+01, 1.70000000e+01], [ 1.53000000e+02, 1.53000000e+02, 1.53000000e+02, 1.53000000e+02, 1.53000000e+02]]]])
The resulting dataset is stored in r.last_ds
and is an automatically labelled n-dimensional xarray.Dataset
. Let’s interactively plot what we have, showing the effect of all four dimensions:
[4]:
r.last_ds.xyz.ilineplot(
x='x', y='Pn(x)', z='beta', col='n', row='alpha', ylims=(-2, 2),
colors=True, colormap='rainbow_r', colorbar=True,
)