From cc09e1a4a499221826f30784afa814b43fc9b98c Mon Sep 17 00:00:00 2001 From: jcschaff Date: Wed, 4 Mar 2026 16:14:55 -0500 Subject: [PATCH 01/24] documentation as guides and API docs --- docs/getting-started/installation.md | 56 ++++++++ docs/getting-started/quickstart.md | 120 ++++++++++++++++ docs/guides/building-a-model.md | 150 ++++++++++++++++++++ docs/guides/complex-geometries.md | 182 ++++++++++++++++++++++++ docs/guides/field-data.md | 168 ++++++++++++++++++++++ docs/guides/parameter-exploration.md | 140 +++++++++++++++++++ docs/guides/sbml-models.md | 134 ++++++++++++++++++ docs/guides/visualization.md | 199 +++++++++++++++++++++++++++ docs/index.md | 62 ++++++++- docs/modules.md | 10 -- docs/reference/io.md | 157 +++++++++++++++++++++ docs/reference/models.md | 174 +++++++++++++++++++++++ docs/reference/simulation.md | 67 +++++++++ mkdocs.yml | 37 ++++- 14 files changed, 1640 insertions(+), 16 deletions(-) create mode 100644 docs/getting-started/installation.md create mode 100644 docs/getting-started/quickstart.md create mode 100644 docs/guides/building-a-model.md create mode 100644 docs/guides/complex-geometries.md create mode 100644 docs/guides/field-data.md create mode 100644 docs/guides/parameter-exploration.md create mode 100644 docs/guides/sbml-models.md create mode 100644 docs/guides/visualization.md delete mode 100644 docs/modules.md create mode 100644 docs/reference/io.md create mode 100644 docs/reference/models.md create mode 100644 docs/reference/simulation.md diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md new file mode 100644 index 0000000..458c420 --- /dev/null +++ b/docs/getting-started/installation.md @@ -0,0 +1,56 @@ +# Installation + +## Requirements + +- Python 3.11 or later + +## Install from PyPI + +```bash +pip install pyvcell +``` + +## Install with Poetry (for development) + +```bash +git clone https://github.com/virtualcell/pyvcell.git +cd pyvcell +poetry install +``` + +## Verify the installation + +```python +import pyvcell.vcml as vc +print("pyvcell imported successfully") +``` + +## Workspace directory + +pyvcell stores simulation output in a **workspace directory**. By default this is `./workspace` relative to your current working directory. You can change it: + +```python +import pyvcell.vcml as vc + +# Check the current workspace +print(vc.get_workspace_dir()) + +# Set a custom workspace +vc.set_workspace_dir("/path/to/my/workspace") +``` + +The workspace directory is created automatically if it doesn't exist. + +## Optional dependencies + +pyvcell includes visualization tools that depend on: + +- **Matplotlib** — 2D plots and concentration time series +- **VTK / PyVista** — 3D volume rendering and mesh visualization +- **Trame** — Interactive browser-based 3D widgets (for Jupyter notebooks) + +All of these are installed automatically with `pip install pyvcell`. + +## Next steps + +- [Quick Start](quickstart.md) — Load a model, simulate, and plot results diff --git a/docs/getting-started/quickstart.md b/docs/getting-started/quickstart.md new file mode 100644 index 0000000..6fb842d --- /dev/null +++ b/docs/getting-started/quickstart.md @@ -0,0 +1,120 @@ +# Quick Start + +This guide walks you through loading a VCML model, running a simulation, and visualizing results. + +## Load a VCML model + +```python +import pyvcell.vcml as vc + +biomodel = vc.load_vcml_file("path/to/model.vcml") +print(biomodel) +``` + +You can also load models from a URL: + +```python +biomodel = vc.load_vcml_url( + "https://raw.githubusercontent.com/virtualcell/pyvcell/refs/heads/main/" + "examples/models/Tutorial_MultiApp_PDE.vcml" +) +``` + +Output: + +``` +Biomodel(model=Model(compartments=['cyt', 'nuc', 'EC', 'pm', 'nm'], + species=['Ran_cyt', 'C_cyt', 'RanC_nuc', 'RanC_cyt'], + reactions=['r0', 'flux0'], parameters=[]), + applications=['3D pde'], simulations=['Simulation4']) +``` + +## Inspect the model + +```python +model = biomodel.model + +# List species and compartments +print(model.species_names) # ['Ran_cyt', 'C_cyt', 'RanC_nuc', 'RanC_cyt'] +print(model.compartment_names) # ['cyt', 'nuc', 'EC', 'pm', 'nm'] + +# View parameters +print(model.parameter_values) +``` + +## Run a simulation + +Every biomodel contains one or more applications, each with simulations: + +```python +# List available simulations +print(biomodel.simulation_names) # ['Simulation4'] + +# Run the simulation +result = vc.simulate(biomodel, "Simulation4") +``` + +## Visualize results + +```python +# Plot mean concentrations over time +result.plotter.plot_concentrations() + +# Plot a 3D slice at a specific time point +result.plotter.plot_slice_3d(time_index=3, channel_id="Ran_cyt") + +# Plot a 2D slice +result.plotter.plot_slice_2d(time_index=0, channel_name="Ran_cyt", z_index=5) +``` + +## Access raw data + +Results are stored as Zarr arrays, accessible as NumPy arrays: + +```python +# Time points +print(result.time_points) + +# Channel labels +print([c.label for c in result.channel_data]) + +# Get a 3D data slice for a specific channel and time +data = result.get_slice("Ran_cyt", time_index=3) +print(data.shape) +``` + +## Clean up + +Simulation output is stored in the workspace directory. To remove a specific result: + +```python +result.cleanup() +``` + +## Complete example + +```python +import pyvcell.vcml as vc + +# Load model from URL +biomodel = vc.load_vcml_url( + "https://raw.githubusercontent.com/virtualcell/pyvcell/refs/heads/main/" + "examples/models/Tutorial_MultiApp_PDE.vcml" +) + +# Run simulation +result = vc.simulate(biomodel, "Simulation4") + +# Visualize +result.plotter.plot_concentrations() +result.plotter.plot_slice_3d(time_index=3, channel_id="Ran_cyt") + +# Clean up +result.cleanup() +``` + +## Next steps + +- [Building a Model](../guides/building-a-model.md) — Create a model from scratch using Antimony +- [Working with SBML](../guides/sbml-models.md) — Load and simulate SBML spatial models +- [Visualization & Analysis](../guides/visualization.md) — Full guide to plotting and 3D visualization diff --git a/docs/guides/building-a-model.md b/docs/guides/building-a-model.md new file mode 100644 index 0000000..34a89f5 --- /dev/null +++ b/docs/guides/building-a-model.md @@ -0,0 +1,150 @@ +# Building a Model + +This guide shows how to define a reaction network using Antimony, create a 3D geometry, set up an application, and run a spatial simulation. + +## Prerequisites + +- pyvcell installed (`pip install pyvcell`) + +## Define a reaction network with Antimony + +[Antimony](https://tellurium.readthedocs.io/en/latest/antimony.html) is a human-readable language for defining biochemical models. pyvcell can load Antimony strings directly: + +```python +import pyvcell.vcml as vc + +antimony_str = """ + compartment ec = 1; + compartment cell = 2; + compartment pm = 1; + species A in cell; + species B in cell; + J0: A -> B; k1*A - k2*B + J0 in cell; + + k1 = 0.1; k2 = 0.2 + A = 10 +""" + +biomodel = vc.load_antimony_str(antimony_str) +``` + +## Inspect and correct the model + +After import, you may need to adjust compartment dimensions. Membranes should be 2D: + +```python +model = biomodel.model +model.get_compartment("pm").dim = 2 + +print(model) +# Model(compartments=['ec', 'cell', 'pm'], species=['A', 'B'], +# reactions=['J0'], parameters=['k1', 'k2']) + +print(model.parameter_values) +# {'k1': 0.1, 'k2': 0.2} +``` + +## Create a 3D geometry + +Define a geometry with analytic subvolumes. Here we create a sphere inside a box: + +```python +geo = vc.Geometry(name="geo", origin=(0, 0, 0), extent=(10, 10, 10), dim=3) +geo.add_sphere(name="cell_domain", radius=4, center=(5, 5, 5)) +geo.add_background(name="ec_domain") +geo.add_surface(name="pm_domain", sub_volume_1="cell_domain", sub_volume_2="ec_domain") +``` + +The order of `add_sphere` / `add_background` matters — subvolumes added first have higher priority. The sphere is carved out of the background. + +## Create an application + +An application connects the model to the geometry by mapping compartments to geometric domains and species to initial conditions: + +```python +app = biomodel.add_application("app1", geometry=geo) + +# Map compartments to geometry domains +app.map_compartment("cell", "cell_domain") +app.map_compartment("ec", "ec_domain") + +# Map species with initial conditions and diffusion coefficients +app.map_species("A", init_conc="sin(x)", diff_coef=1.0) +app.map_species("B", init_conc="cos(x+y+z)", diff_coef=1.0) +``` + +Initial concentrations can be constants (e.g., `10.0`) or spatial expressions using `x`, `y`, `z` coordinates. + +## Add a simulation and run + +```python +sim = app.add_sim( + name="sim1", + duration=2.0, + output_time_step=0.5, + mesh_size=(50, 50, 50), +) + +results = vc.simulate(biomodel=biomodel, simulation="sim1") +``` + +## Visualize results + +```python +results.plotter.plot_concentrations() +results.plotter.plot_slice_3d(time_index=0, channel_id="A") +results.plotter.plot_slice_3d(time_index=0, channel_id="B") +``` + +## Complete example + +```python +import pyvcell.vcml as vc + +# 1. Define reaction network +antimony_str = """ + compartment ec = 1; + compartment cell = 2; + compartment pm = 1; + species A in cell; + species B in cell; + J0: A -> B; k1*A - k2*B + J0 in cell; + k1 = 0.1; k2 = 0.2 + A = 10 +""" +biomodel = vc.load_antimony_str(antimony_str) +model = biomodel.model +model.get_compartment("pm").dim = 2 + +# 2. Create geometry +geo = vc.Geometry(name="geo", origin=(0, 0, 0), extent=(10, 10, 10), dim=3) +geo.add_sphere(name="cell_domain", radius=4, center=(5, 5, 5)) +geo.add_background(name="ec_domain") +geo.add_surface(name="pm_domain", sub_volume_1="cell_domain", sub_volume_2="ec_domain") + +# 3. Create application +app = biomodel.add_application("app1", geometry=geo) +app.map_compartment("cell", "cell_domain") +app.map_compartment("ec", "ec_domain") +app.map_species("A", init_conc="sin(x)", diff_coef=1.0) +app.map_species("B", init_conc="cos(x+y+z)", diff_coef=1.0) + +# 4. Simulate +sim = app.add_sim(name="sim1", duration=2.0, output_time_step=0.5, mesh_size=(50, 50, 50)) +results = vc.simulate(biomodel=biomodel, simulation="sim1") + +# 5. Visualize +results.plotter.plot_concentrations() +results.plotter.plot_slice_3d(time_index=0, channel_id="A") +``` + +!!! tip "Interactive notebook" + See the [sysbio-1-antimony notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-1-antimony.ipynb) for a runnable version. + +## Next steps + +- [Complex Geometries](complex-geometries.md) — Multi-compartment and reusable geometries +- [Parameter Exploration](parameter-exploration.md) — Run batch simulations with varied parameters +- [Visualization & Analysis](visualization.md) — Full plotting and 3D visualization guide diff --git a/docs/guides/complex-geometries.md b/docs/guides/complex-geometries.md new file mode 100644 index 0000000..d085a00 --- /dev/null +++ b/docs/guides/complex-geometries.md @@ -0,0 +1,182 @@ +# Complex Geometries + +This guide covers multi-compartment geometries, reusing geometries from existing models, and working with image-based geometries. + +## Prerequisites + +- pyvcell installed (`pip install pyvcell`) +- Familiarity with [Building a Model](building-a-model.md) + +## Multi-compartment geometry + +For models with multiple nested compartments (e.g., cell with nucleus), define each subvolume and the surfaces between them: + +```python +import pyvcell.vcml as vc + +antimony_str = """ + compartment ec = 10000; + compartment cell = 5000; + compartment pm = 100; + compartment nuc = 300; + compartment nuc_env = 40; + species A in cell; + species B in cell; + J0: A -> B; k1*A - k2*B + J0 in cell; + k1 = 0.1; k2 = 0.2 + A = 10 +""" + +biomodel = vc.load_antimony_str(antimony_str) +model = biomodel.model + +# Set membrane compartments to 2D +model.get_compartment("pm").dim = 2 +model.get_compartment("nuc_env").dim = 2 +``` + +## Reuse geometry from an existing model + +Instead of building geometry from scratch, you can copy one from another VCML model. This is useful for complex image-based or multi-compartment geometries: + +```python +# Load a model with a pre-built geometry +tutorial_biomodel = vc.load_vcml_url( + "https://raw.githubusercontent.com/virtualcell/pyvcell/refs/heads/main/" + "examples/models/Tutorial_MultiApp_PDE.vcml" +) + +# Extract the geometry +tutorial_geometry = tutorial_biomodel.applications[0].geometry + +# Inspect the geometry structure +print("subvolumes:", tutorial_geometry.subvolume_names) +# ['ec', 'cytosol', 'Nucleus'] + +print("surfaces:", tutorial_geometry.surface_class_names) +# ['cytosol_ec_membrane', 'Nucleus_cytosol_membrane'] +``` + +## Map compartments to the imported geometry + +When using an existing geometry, map each model compartment to the appropriate geometric domain: + +```python +app = biomodel.add_application("app1", geometry=tutorial_geometry) + +# Map volume compartments to subvolumes +app.map_compartment("cell", "cytosol") +app.map_compartment("ec", "ec") +app.map_compartment("nuc", "Nucleus") + +# Map membrane compartments to surface classes +app.map_compartment("nuc_env", "Nucleus_cytosol_membrane") +app.map_compartment("pm", "cytosol_ec_membrane") + +# Set species initial conditions and diffusion +app.map_species("A", init_conc="sin(0.2*x)", diff_coef=1.0) +app.map_species("B", init_conc="cos(0.2*(x+y+z))", diff_coef=1.0) +``` + +## Simulate and visualize + +```python +sim = app.add_sim(name="sim1", duration=2.0, output_time_step=0.5, mesh_size=(50, 50, 50)) + +results = vc.simulate(biomodel=biomodel, simulation="sim1") +results.plotter.plot_concentrations() +results.plotter.plot_slice_3d(time_index=0, channel_id="A") +``` + +## Analytic geometry primitives + +You can build geometries from analytic expressions using the built-in helpers: + +```python +geo = vc.Geometry(name="geo", origin=(0, 0, 0), extent=(10, 10, 10), dim=3) + +# Add a sphere (inner compartment) +geo.add_sphere(name="cell_domain", radius=4, center=(5, 5, 5)) + +# Add background (fills remaining space) +geo.add_background(name="ec_domain") + +# Define the surface between them +geo.add_surface(name="pm_domain", sub_volume_1="cell_domain", sub_volume_2="ec_domain") +``` + +!!! note "Subvolume ordering" + Subvolumes are evaluated in the order they are added. Earlier subvolumes have higher priority — the sphere is carved out of the background. + +## Image-based geometry + +For geometries defined by segmented images, use `Image.from_ndarray_3d_u8`: + +```python +import numpy as np + +# Create a segmented 3D image (uint8 values represent compartments) +image_data = np.zeros((50, 50, 50), dtype=np.uint8) +image_data[15:35, 15:35, 15:35] = 1 # inner compartment + +image = vc.Image.from_ndarray_3d_u8(image_data, name="segmented") +``` + +## Complete example + +```python +import pyvcell.vcml as vc + +# 1. Define model with multiple compartments +antimony_str = """ + compartment ec = 10000; + compartment cell = 5000; + compartment pm = 100; + compartment nuc = 300; + compartment nuc_env = 40; + species A in cell; + species B in cell; + J0: A -> B; k1*A - k2*B + J0 in cell; + k1 = 0.1; k2 = 0.2 + A = 10 +""" +biomodel = vc.load_antimony_str(antimony_str) +model = biomodel.model +model.get_compartment("pm").dim = 2 +model.get_compartment("nuc_env").dim = 2 + +# 2. Import geometry from existing model +tutorial_biomodel = vc.load_vcml_url( + "https://raw.githubusercontent.com/virtualcell/pyvcell/refs/heads/main/" + "examples/models/Tutorial_MultiApp_PDE.vcml" +) +tutorial_geometry = tutorial_biomodel.applications[0].geometry + +# 3. Create application with imported geometry +app = biomodel.add_application("app1", geometry=tutorial_geometry) +app.map_compartment("cell", "cytosol") +app.map_compartment("ec", "ec") +app.map_compartment("nuc", "Nucleus") +app.map_compartment("nuc_env", "Nucleus_cytosol_membrane") +app.map_compartment("pm", "cytosol_ec_membrane") +app.map_species("A", init_conc="sin(0.2*x)", diff_coef=1.0) +app.map_species("B", init_conc="cos(0.2*(x+y+z))", diff_coef=1.0) + +# 4. Simulate +sim = app.add_sim(name="sim1", duration=2.0, output_time_step=0.5, mesh_size=(50, 50, 50)) +results = vc.simulate(biomodel=biomodel, simulation="sim1") + +# 5. Visualize +results.plotter.plot_concentrations() +results.plotter.plot_slice_3d(time_index=0, channel_id="A") +``` + +!!! tip "Interactive notebook" + See the [sysbio-3-geometry notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-3-geometry.ipynb) for a runnable version. + +## Next steps + +- [Parameter Exploration](parameter-exploration.md) — Batch parameter sampling +- [Field Data Workflows](field-data.md) — Chain simulations using field data diff --git a/docs/guides/field-data.md b/docs/guides/field-data.md new file mode 100644 index 0000000..46cd1e6 --- /dev/null +++ b/docs/guides/field-data.md @@ -0,0 +1,168 @@ +# Field Data Workflows + +Field data lets you use results from one simulation as initial conditions for another, or supply synthetic data (e.g., from images) as initial conditions. This guide covers both patterns. + +## Prerequisites + +- pyvcell installed (`pip install pyvcell`) +- Familiarity with [Building a Model](building-a-model.md) + +## Concept: vcField references + +In VCell, the `vcField()` function references external data in species initial condition expressions: + +``` +vcField('dataset_name', 'variable_name', time, 'Volume') +``` + +- **dataset_name** — identifier for the field data source +- **variable_name** — which variable to read from the dataset +- **time** — the time point to sample +- **Volume** — the domain type + +## Chain simulations using field data + +Run one simulation, then use its output as initial conditions for a second run. + +### Step 1: Load a model and run the first simulation + +```python +import pyvcell.vcml as vc + +biomodel = vc.load_vcml_file("path/to/model.vcml") +app = biomodel.applications[0] + +# Set initial conditions for the first run +s0_mapping = next(s for s in app.species_mappings if s.species_name == "s0") +s1_mapping = next(s for s in app.species_mappings if s.species_name == "s1") +s0_mapping.init_conc = "3+sin(x)+cos(y)+sin(z)" +s1_mapping.init_conc = "3+sin(x+y+z)" + +sim = app.add_sim(name="sim1", duration=10.0, output_time_step=0.1, mesh_size=(20, 20, 20)) + +# Run first simulation +sim1_result = vc.simulate(biomodel=biomodel, simulation=sim.name) +sim1_dirname = sim1_result.solver_output_dir.name +``` + +### Step 2: Reference first simulation's output + +Use `vcField()` to set initial conditions from the first run: + +```python +# Use s0 * s1 from the first simulation at t=0 as the new initial condition for s0 +s0_mapping.init_conc = ( + f"vcField('{sim1_dirname}','s0',0.0,'Volume') * " + f"vcField('{sim1_dirname}','s1',0.0,'Volume')" +) +s1_mapping.init_conc = "5.0" + +# Run second simulation +sim2_result = vc.simulate(biomodel=biomodel, simulation=sim.name) +``` + +### Step 3: Visualize both runs + +```python +# First simulation +sim1_result.plotter.plot_slice_3d(time_index=0, channel_id="s0") +sim1_result.plotter.plot_concentrations() + +# Second simulation +sim2_result.plotter.plot_slice_3d(time_index=0, channel_id="s0") +sim2_result.plotter.plot_concentrations() + +# Clean up +sim2_result.cleanup() +``` + +## Synthetic field data from images + +You can also create field data programmatically (e.g., from microscopy images or synthetic functions) and supply it to a simulation. + +### Step 1: Set up vcField references + +```python +import pyvcell.vcml as vc + +biomodel = vc.load_vcml_file("path/to/model.vcml") +app = biomodel.applications[0] + +s0_mapping = next(s for s in app.species_mappings if s.species_name == "s0") +s1_mapping = next(s for s in app.species_mappings if s.species_name == "s1") + +# Reference external field data by name +s0_mapping.init_conc = "vcField('my_dataset', 'species0', 0.5, 'Volume')" +s1_mapping.init_conc = "vcField('checkerboard', 'v', 0.0, 'Volume')" + +sim = app.add_sim(name="sim1", duration=10.0, output_time_step=0.1, mesh_size=(20, 20, 20)) +``` + +### Step 2: Create Field objects + +Use `Field.create_fields()` to generate template Field objects from the model's `vcField` references, then populate them with custom data: + +```python +import numpy as np +from pyvcell._internal.simdata.mesh import CartesianMesh + +# Create empty fields matching the vcField references +fields = vc.Field.create_fields(bio_model=biomodel, sim=sim) + +# Generate coordinate arrays for the mesh +shape = fields[0].data_nD.shape +coords = CartesianMesh.compute_coordinates( + mesh_shape=(shape[0], shape[1], shape[2]), + origin=app.geometry.origin, + extent=app.geometry.extent, +) + +# Fill with synthetic data +fields[0].data_nD = np.cos(0.5 * coords[:,:,:,0]) * np.sin(0.5 * coords[:,:,:,1]) * 8.0 +fields[1].data_nD = np.cos(0.3 * coords[:,:,:,0]) * np.sin(0.3 * coords[:,:,:,1]) * 4.0 +``` + +### Step 3: Run the simulation with field data + +Pass the `fields` argument to `simulate()`: + +```python +result = vc.simulate(biomodel=biomodel, simulation=sim, fields=fields) +result.plotter.plot_slice_3d(time_index=0, channel_id="s0") +result.plotter.plot_concentrations() +``` + +## Complete example: chaining simulations + +```python +import pyvcell.vcml as vc + +biomodel = vc.load_vcml_file("model.vcml") +app = biomodel.applications[0] +s0 = next(s for s in app.species_mappings if s.species_name == "s0") +s1 = next(s for s in app.species_mappings if s.species_name == "s1") + +# First run +s0.init_conc = "3+sin(x)+cos(y)+sin(z)" +s1.init_conc = "3+sin(x+y+z)" +sim = app.add_sim(name="sim1", duration=10.0, output_time_step=0.1, mesh_size=(20, 20, 20)) +result1 = vc.simulate(biomodel=biomodel, simulation=sim.name) + +# Second run using first run's output +dirname = result1.solver_output_dir.name +s0.init_conc = f"vcField('{dirname}','s0',0.0,'Volume') * vcField('{dirname}','s1',0.0,'Volume')" +s1.init_conc = "5.0" +result2 = vc.simulate(biomodel=biomodel, simulation=sim.name) + +# Compare +result1.plotter.plot_concentrations() +result2.plotter.plot_concentrations() +``` + +!!! tip "Example scripts" + See [`fielddata_from_sim_workflow.py`](https://github.com/virtualcell/pyvcell/blob/main/examples/scripts/fielddata_from_sim_workflow.py) and [`fielddata_from_image_workflow.py`](https://github.com/virtualcell/pyvcell/blob/main/examples/scripts/fielddata_from_image_workflow.py) for complete runnable examples. + +## Next steps + +- [Visualization & Analysis](visualization.md) — Full plotting and animation guide +- [Parameter Exploration](parameter-exploration.md) — Batch parameter sweeps diff --git a/docs/guides/parameter-exploration.md b/docs/guides/parameter-exploration.md new file mode 100644 index 0000000..f278b79 --- /dev/null +++ b/docs/guides/parameter-exploration.md @@ -0,0 +1,140 @@ +# Parameter Exploration + +This guide covers modifying model parameters, running batch simulations with sampled parameter values, and comparing results. + +## Prerequisites + +- pyvcell installed (`pip install pyvcell`) +- NumPy (`pip install numpy`) — included with pyvcell + +## Load a model and inspect parameters + +```python +import pyvcell.vcml as vc + +biomodel = vc.load_vcml_url( + "https://raw.githubusercontent.com/virtualcell/pyvcell/refs/heads/main/" + "examples/models/Tutorial_MultiApp_PDE.vcml" +) +model = biomodel.model + +# View all parameter values +print(model.parameter_values) +# {'r0.Kf': 1.0, 'r0.Kr': 1000.0, 'flux0.kfl': 2.0, ...} +``` + +## Modify a parameter + +Use `set_parameter_value` with dot-notation for reaction-specific parameters: + +```python +# Set the forward rate constant for reaction r0 +model.set_parameter_value("r0.Kf", 20.0) +print(model.parameter_values) +# {'r0.Kf': 20.0, ...} +``` + +## Batch parameter sampling + +Run multiple simulations with randomly sampled parameter values: + +```python +import numpy as np + +# Adjust mesh size for faster runs +sim = biomodel.applications[0].simulations[0] +sim.mesh_size = (50, 50, 18) + +# Sample N values from a log-normal distribution +N = 5 +r0_Kf_values = np.random.lognormal(mean=0, sigma=1.0, size=N) + +# Run simulations and collect results +all_results = [] +for val in r0_Kf_values: + model.set_parameter_value("r0.Kf", val) + print(f"running sim with r0.Kf={val:.4f}") + all_results.append(vc.simulate(biomodel, sim.name)) +``` + +## Compare results + +Plot concentration time series for each parameter value: + +```python +for i in range(N): + print(f"r0.Kf = {r0_Kf_values[i]:.4f}") + all_results[i].plotter.plot_concentrations() +``` + +## Sensitivity analysis pattern + +For a systematic sensitivity analysis, sweep a parameter over a range: + +```python +import numpy as np + +param_values = np.linspace(0.1, 10.0, num=10) +results = {} + +for val in param_values: + model.set_parameter_value("r0.Kf", val) + result = vc.simulate(biomodel, sim.name) + results[val] = result +``` + +You can then extract specific metrics from each result for comparison: + +```python +import matplotlib.pyplot as plt + +# Extract mean concentration of a species at the final time point +final_means = [] +for val in param_values: + channel = results[val].plotter.get_channel("Ran_cyt") + final_means.append(channel.mean_values[-1]) + +plt.plot(param_values, final_means, "o-") +plt.xlabel("r0.Kf") +plt.ylabel("Mean [Ran_cyt] at final time") +plt.title("Sensitivity of Ran_cyt to r0.Kf") +plt.show() +``` + +## Complete example + +```python +import numpy as np +import pyvcell.vcml as vc + +# Load model +biomodel = vc.load_vcml_url( + "https://raw.githubusercontent.com/virtualcell/pyvcell/refs/heads/main/" + "examples/models/Tutorial_MultiApp_PDE.vcml" +) +model = biomodel.model +sim = biomodel.applications[0].simulations[0] +sim.mesh_size = (50, 50, 18) + +# Sample parameters and run +N = 5 +r0_Kf_values = np.random.lognormal(mean=0, sigma=1.0, size=N) + +all_results = [] +for val in r0_Kf_values: + model.set_parameter_value("r0.Kf", val) + all_results.append(vc.simulate(biomodel, sim.name)) + +# Compare results +for i in range(N): + print(f"r0.Kf = {r0_Kf_values[i]:.4f}") + all_results[i].plotter.plot_concentrations() +``` + +!!! tip "Interactive notebook" + See the [sysbio-2-params notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-2-params.ipynb) for a runnable version. + +## Next steps + +- [Field Data Workflows](field-data.md) — Use simulation results as initial conditions for subsequent runs +- [Visualization & Analysis](visualization.md) — Advanced plotting and 3D visualization diff --git a/docs/guides/sbml-models.md b/docs/guides/sbml-models.md new file mode 100644 index 0000000..68e4571 --- /dev/null +++ b/docs/guides/sbml-models.md @@ -0,0 +1,134 @@ +# Working with SBML + +This guide covers loading, running, and converting SBML Spatial models with pyvcell. + +## Prerequisites + +- pyvcell installed (`pip install pyvcell`) +- An SBML Spatial model file (`.sbml`) + +## Load and run an SBML Spatial model + +pyvcell can run SBML Spatial models directly using `SbmlSpatialModel` and `SbmlSpatialSimulation`: + +```python +from pathlib import Path +from pyvcell.sbml.sbml_simulation import SbmlSpatialSimulation +from pyvcell.sbml.sbml_spatial_model import SbmlSpatialModel + +model_fp = Path("path/to/model.sbml") + +# Load the SBML model +spatial_model = SbmlSpatialModel(filepath=model_fp) +spatial_model.copy_parameters() + +# Create and run a simulation +simulation = SbmlSpatialSimulation(sbml_model=spatial_model) +result = simulation.run() +``` + +## Visualize SBML results + +The result object has the same plotting API as VCML simulations: + +```python +# 2D slice at a specific z-index +result.plotter.plot_slice_2d(time_index=3, channel_name="s0", z_index=5) + +# 3D volume slice +result.plotter.plot_slice_3d(time_index=3, channel_id="s1") + +# Concentration time series +result.plotter.plot_concentrations() +``` + +## Clean up + +```python +simulation.cleanup() +``` + +## Convert between SBML and VCML + +### SBML to VCML + +Load an SBML file as a VCell Biomodel for further editing: + +```python +import pyvcell.vcml as vc + +# From file +biomodel = vc.load_sbml_file("model.sbml") + +# From string +with open("model.sbml") as f: + biomodel = vc.load_sbml_str(f.read()) + +# From URL +biomodel = vc.load_sbml_url("https://example.com/model.sbml") +``` + +### VCML to SBML + +Export a VCell application as SBML: + +```python +import pyvcell.vcml as vc + +biomodel = vc.load_vcml_file("model.vcml") + +# Export to SBML string +sbml_str = vc.to_sbml_str(bio_model=biomodel, application_name="app1") + +# Write to file +vc.write_sbml_file(bio_model=biomodel, application_name="app1", filepath="exported.sbml") +``` + +## Convert between Antimony and SBML/VCML + +Antimony provides a human-readable format that pyvcell converts through SBML: + +```python +import pyvcell.vcml as vc + +# Load Antimony as a Biomodel +biomodel = vc.load_antimony_str(""" + compartment cell = 1; + species A in cell; + species B in cell; + J0: A -> B; k1*A + k1 = 0.1; A = 10 +""") + +# Export back to Antimony +antimony_str = vc.to_antimony_str(bio_model=biomodel, application_name="app1") +``` + +## Complete example + +```python +from pathlib import Path +from pyvcell.sbml.sbml_simulation import SbmlSpatialSimulation +from pyvcell.sbml.sbml_spatial_model import SbmlSpatialModel + +# Load and run +spatial_model = SbmlSpatialModel(filepath=Path("model.sbml")) +spatial_model.copy_parameters() +simulation = SbmlSpatialSimulation(sbml_model=spatial_model) +result = simulation.run() + +# Visualize +result.plotter.plot_concentrations() +result.plotter.plot_slice_3d(time_index=3, channel_id="s1") + +# Clean up +simulation.cleanup() +``` + +!!! tip "Interactive notebook" + See the [sbml_workflow notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sbml_workflow.ipynb) for a runnable version. + +## Next steps + +- [Building a Model](building-a-model.md) — Create models from Antimony with custom geometries +- [Visualization & Analysis](visualization.md) — Full plotting guide diff --git a/docs/guides/visualization.md b/docs/guides/visualization.md new file mode 100644 index 0000000..e13b5fe --- /dev/null +++ b/docs/guides/visualization.md @@ -0,0 +1,199 @@ +# Visualization & Analysis + +This guide covers pyvcell's built-in visualization tools: concentration time series, 2D/3D slices, animations, and interactive Trame widgets. + +## Prerequisites + +- pyvcell installed (`pip install pyvcell`) +- A simulation result (see [Quick Start](../getting-started/quickstart.md)) + +## The Plotter API + +Every simulation `Result` includes a `plotter` object with methods for common visualizations: + +```python +import pyvcell.vcml as vc + +biomodel = vc.load_vcml_file("model.vcml") +result = vc.simulate(biomodel, "sim1") + +plotter = result.plotter +``` + +## Concentration time series + +Plot mean concentrations of all species over time: + +```python +result.plotter.plot_concentrations() +``` + +This generates a line plot with one curve per species, showing how mean concentration evolves over the simulation duration. + +## Plot averages (post-processing) + +For post-processing variable statistics: + +```python +result.plotter.plot_averages() +``` + +## 2D slices + +View a 2D cross-section of the spatial data at a specific z-index: + +```python +result.plotter.plot_slice_2d( + time_index=0, + channel_name="s0", + z_index=5, +) +``` + +Parameters: + +- `time_index` — which saved time point to display +- `channel_name` — the species/variable name +- `z_index` — the z-plane to slice through + +## 3D volume slices + +Render a 3D orthogonal-slice view of the data: + +```python +result.plotter.plot_slice_3d( + time_index=3, + channel_id="s1", +) +``` + +## Animations + +### 3D slice animation over time + +Create an animation that cycles through time points for a given channel: + +```python +anim = result.plotter.animate_channel_3d(channel_id="s0") +``` + +In Jupyter notebooks, the animation renders inline. In scripts, use Matplotlib's animation saving: + +```python +anim.save("s0_animation.gif", writer="pillow") +``` + +### Image animation + +```python +anim = result.plotter.animate_image(channel_index=4) +``` + +## Accessing raw data + +### Channel metadata + +```python +# List all channels +print([c.label for c in result.channel_data]) + +# Get a specific channel +channel = result.plotter.get_channel("s0") +print(channel.min_values) # min at each time point +print(channel.max_values) # max at each time point +print(channel.mean_values) # mean at each time point +``` + +### Time points + +```python +print(result.time_points) +``` + +### Spatial data as NumPy arrays + +```python +# 3D array for a specific channel and time +data = result.get_slice("s0", time_index=3) +print(data.shape) # e.g., (50, 50, 50) +``` + +### Zarr dataset + +Results are stored as Zarr arrays for efficient access: + +```python +zarr_ds = result.zarr_dataset +print(zarr_ds.shape) # (num_times, num_channels, nz, ny, nx) +``` + +## VTK data and 3D meshes + +For advanced 3D visualization and mesh operations, access the VTK data: + +```python +vtk_data = result.vtk_data + +# Available methods +vtk_data.get_vtk_grid(time_index=0, var_name="s0") +vtk_data.get_vtu_file(time_index=0, var_name="s0") +vtk_data.write_mesh_animation(var_name="s0", output_dir="mesh_anim/") +``` + +## Interactive Trame widgets (Jupyter) + +For interactive 3D visualization in Jupyter notebooks, use the Trame widget: + +```python +from pyvcell.sim_results.widget import App + +app = App(vtk_data=result.vtk_data) +await app.run() +``` + +This launches an interactive 3D viewer in the notebook with controls for time stepping, variable selection, and camera manipulation. + +!!! note "Trame requirements" + The Trame widget requires Jupyter with the `trame-jupyter-extension` installed. + This is included in pyvcell's dev dependencies. + +## Post-processing statistics + +Access variable statistics from the simulation: + +```python +post_processing = result.post_processing +for var in post_processing.variables: + print(f"{var.var_name}: unit={var.stat_var_unit}") +``` + +## Complete example + +```python +import pyvcell.vcml as vc + +biomodel = vc.load_vcml_file("model.vcml") +result = vc.simulate(biomodel, "sim1") + +# Time series +result.plotter.plot_concentrations() + +# Spatial visualization +result.plotter.plot_slice_2d(time_index=0, channel_name="s0", z_index=5) +result.plotter.plot_slice_3d(time_index=3, channel_id="s0") + +# Animation +anim = result.plotter.animate_channel_3d(channel_id="s0") + +# Raw data +data = result.get_slice("s0", time_index=3) +print(f"Data shape: {data.shape}, min={data.min():.2f}, max={data.max():.2f}") +``` + +!!! tip "Interactive notebooks" + See the [widget notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/widget.ipynb) for Trame widget examples, and the [SBML workflow notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sbml_workflow.ipynb) for comprehensive plotting examples. + +## Next steps + +- [Building a Model](building-a-model.md) — Create models to visualize +- [Parameter Exploration](parameter-exploration.md) — Compare results across parameter values diff --git a/docs/index.md b/docs/index.md index b4b1700..d4f9332 100644 --- a/docs/index.md +++ b/docs/index.md @@ -2,7 +2,65 @@ [![Release](https://img.shields.io/github/v/release/virtualcell/pyvcell)](https://img.shields.io/github/v/release/virtualcell/pyvcell) [![Build status](https://img.shields.io/github/actions/workflow/status/virtualcell/pyvcell/main.yml?branch=main)](https://github.com/virtualcell/pyvcell/actions/workflows/main.yml?query=branch%3Amain) -[![Commit activity](https://img.shields.io/github/commit-activity/m/virtualcell/pyvcell)](https://img.shields.io/github/commit-activity/m/virtualcell/pyvcell) [![License](https://img.shields.io/github/license/virtualcell/pyvcell)](https://img.shields.io/github/license/virtualcell/pyvcell) -This is the python wrapper for vcell modeling and simulation +**pyvcell** is the Python interface for [Virtual Cell](https://vcell.org) — enabling spatial modeling, simulation, and analysis of cell biological systems directly from Python. + +## What you can do + +- **Define models** from Antimony, SBML, or VCML, or build them programmatically +- **Create geometries** — analytic shapes, multi-compartment, or image-based +- **Run spatial simulations** locally using the VCell finite volume solver +- **Analyze results** — time-series statistics, spatiotemporal arrays (Zarr/NumPy), 3D mesh data (VTK) +- **Visualize** — built-in plotting (Matplotlib), 3D rendering (VTK/PyVista), interactive widgets (Trame) + +## Quick example + +```python +import pyvcell.vcml as vc + +# Load a model and simulate +biomodel = vc.load_vcml_file("model.vcml") +result = vc.simulate(biomodel, "sim1") + +# Plot results +result.plotter.plot_concentrations() +result.plotter.plot_slice_3d(time_index=3, channel_id="s1") +``` + +## Getting started + +
+ +- **[Installation](getting-started/installation.md)** — Install pyvcell and set up your environment +- **[Quick Start](getting-started/quickstart.md)** — Load a model, run a simulation, and plot results + +
+ +## Guides + +| Guide | Description | +|-------|-------------| +| [Building a Model](guides/building-a-model.md) | Define reactions in Antimony, create geometry, simulate | +| [Working with SBML](guides/sbml-models.md) | Load and run SBML spatial models | +| [Complex Geometries](guides/complex-geometries.md) | Multi-compartment and reusable geometries | +| [Parameter Exploration](guides/parameter-exploration.md) | Batch parameter sampling and sensitivity analysis | +| [Field Data Workflows](guides/field-data.md) | Chain simulations using field data as initial conditions | +| [Visualization & Analysis](guides/visualization.md) | Plotting, 3D slices, animations, and Trame widgets | + +## API Reference + +| Module | Contents | +|--------|----------| +| [Models](reference/models.md) | Biomodel, Model, Species, Compartment, Reaction, Geometry, Application, Simulation | +| [I/O Functions](reference/io.md) | Load/write VCML, SBML, and Antimony | +| [Simulation & Results](reference/simulation.md) | simulate(), Result, Plotter, VtkData, Field | + +## Example notebooks + +Interactive notebooks are available in the [`examples/notebooks/`](https://github.com/virtualcell/pyvcell/tree/main/examples/notebooks) directory: + +- [Antimony model building](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-1-antimony.ipynb) — Define a model from Antimony and simulate +- [Parameter exploration](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-2-params.ipynb) — Batch runs with random parameter sampling +- [Geometry import](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-3-geometry.ipynb) — Multi-compartment geometry from existing models +- [SBML workflow](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sbml_workflow.ipynb) — Load and run SBML spatial models diff --git a/docs/modules.md b/docs/modules.md deleted file mode 100644 index d4fafcc..0000000 --- a/docs/modules.md +++ /dev/null @@ -1,10 +0,0 @@ -# Modules - -## pyvcell - -::: pyvcell -handler: python -options: -show_root_heading: true -show_source: true -show_signature_annotations: true diff --git a/docs/reference/io.md b/docs/reference/io.md new file mode 100644 index 0000000..321bad6 --- /dev/null +++ b/docs/reference/io.md @@ -0,0 +1,157 @@ +# I/O Functions + +Functions for loading and writing models in VCML, SBML, and Antimony formats. + +## VCML + +### load_vcml_file + +::: pyvcell.vcml.load_vcml_file + handler: python + options: + show_source: false + show_signature_annotations: true + +### load_vcml_str + +::: pyvcell.vcml.load_vcml_str + handler: python + options: + show_source: false + show_signature_annotations: true + +### load_vcml_url + +::: pyvcell.vcml.load_vcml_url + handler: python + options: + show_source: false + show_signature_annotations: true + +### write_vcml_file + +::: pyvcell.vcml.write_vcml_file + handler: python + options: + show_source: false + show_signature_annotations: true + +### to_vcml_str + +::: pyvcell.vcml.to_vcml_str + handler: python + options: + show_source: false + show_signature_annotations: true + +## SBML + +### load_sbml_file + +::: pyvcell.vcml.load_sbml_file + handler: python + options: + show_source: false + show_signature_annotations: true + +### load_sbml_str + +::: pyvcell.vcml.load_sbml_str + handler: python + options: + show_source: false + show_signature_annotations: true + +### load_sbml_url + +::: pyvcell.vcml.load_sbml_url + handler: python + options: + show_source: false + show_signature_annotations: true + +### write_sbml_file + +::: pyvcell.vcml.write_sbml_file + handler: python + options: + show_source: false + show_signature_annotations: true + +### to_sbml_str + +::: pyvcell.vcml.to_sbml_str + handler: python + options: + show_source: false + show_signature_annotations: true + +## Antimony + +### load_antimony_file + +::: pyvcell.vcml.load_antimony_file + handler: python + options: + show_source: false + show_signature_annotations: true + +### load_antimony_str + +::: pyvcell.vcml.load_antimony_str + handler: python + options: + show_source: false + show_signature_annotations: true + +### write_antimony_file + +::: pyvcell.vcml.write_antimony_file + handler: python + options: + show_source: false + show_signature_annotations: true + +### to_antimony_str + +::: pyvcell.vcml.to_antimony_str + handler: python + options: + show_source: false + show_signature_annotations: true + +## Utilities + +### update_biomodel + +::: pyvcell.vcml.update_biomodel + handler: python + options: + show_source: false + show_signature_annotations: true + +### field_data_refs + +::: pyvcell.vcml.field_data_refs + handler: python + options: + show_source: false + show_signature_annotations: true + +## Workspace + +### set_workspace_dir + +::: pyvcell.vcml.set_workspace_dir + handler: python + options: + show_source: false + show_signature_annotations: true + +### get_workspace_dir + +::: pyvcell.vcml.get_workspace_dir + handler: python + options: + show_source: false + show_signature_annotations: true diff --git a/docs/reference/models.md b/docs/reference/models.md new file mode 100644 index 0000000..cb49856 --- /dev/null +++ b/docs/reference/models.md @@ -0,0 +1,174 @@ +# Models + +Core data model classes for representing VCell biomodels. + +## Biomodel + +::: pyvcell.vcml.Biomodel + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## Model + +::: pyvcell.vcml.Model + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## Species + +::: pyvcell.vcml.Species + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## Compartment + +::: pyvcell.vcml.models.Compartment + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## Reaction + +::: pyvcell.vcml.Reaction + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## Kinetics + +::: pyvcell.vcml.Kinetics + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## KineticsParameter + +::: pyvcell.vcml.KineticsParameter + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## ModelParameter + +::: pyvcell.vcml.ModelParameter + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## Geometry + +::: pyvcell.vcml.Geometry + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## SubVolume + +::: pyvcell.vcml.SubVolume + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## SubVolumeType + +::: pyvcell.vcml.SubVolumeType + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## SurfaceClass + +::: pyvcell.vcml.SurfaceClass + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## Image + +::: pyvcell.vcml.Image + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## Application + +::: pyvcell.vcml.Application + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## Simulation + +::: pyvcell.vcml.Simulation + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## SpeciesMapping + +::: pyvcell.vcml.SpeciesMapping + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## BoundaryType + +::: pyvcell.vcml.BoundaryType + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## SpeciesReference + +::: pyvcell.vcml.SpeciesReference + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## SpeciesRefType + +::: pyvcell.vcml.SpeciesRefType + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source diff --git a/docs/reference/simulation.md b/docs/reference/simulation.md new file mode 100644 index 0000000..fa16698 --- /dev/null +++ b/docs/reference/simulation.md @@ -0,0 +1,67 @@ +# Simulation & Results + +Functions and classes for running simulations and working with results. + +## simulate + +::: pyvcell.vcml.simulate + handler: python + options: + show_source: false + show_signature_annotations: true + +## Result + +::: pyvcell.sim_results.result.Result + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## Plotter + +::: pyvcell.sim_results.plotter.Plotter + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## VtkData + +::: pyvcell.sim_results.vtk_data.VtkData + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## Field + +::: pyvcell.vcml.Field + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +## SBML Spatial Simulation + +### SbmlSpatialModel + +::: pyvcell.sbml.sbml_spatial_model.SbmlSpatialModel + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source + +### SbmlSpatialSimulation + +::: pyvcell.sbml.sbml_simulation.SbmlSpatialSimulation + handler: python + options: + show_source: false + show_signature_annotations: true + members_order: source diff --git a/mkdocs.yml b/mkdocs.yml index c498570..da5af34 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,7 +1,7 @@ site_name: pyvcell repo_url: https://github.com/virtualcell/pyvcell site_url: https://virtualcell.github.io/pyvcell -site_description: This is the python wrapper for vcell modeling and simulation +site_description: Python interface for Virtual Cell modeling and simulation site_author: Jim Schaff edit_uri: edit/main/docs/ repo_name: virtualcell/pyvcell @@ -9,7 +9,21 @@ copyright: Maintained by Virtual Cell Project. nav: - Home: index.md - - Modules: modules.md + - Getting Started: + - Installation: getting-started/installation.md + - Quick Start: getting-started/quickstart.md + - Guides: + - Building a Model: guides/building-a-model.md + - Working with SBML: guides/sbml-models.md + - Complex Geometries: guides/complex-geometries.md + - Parameter Exploration: guides/parameter-exploration.md + - Field Data Workflows: guides/field-data.md + - Visualization & Analysis: guides/visualization.md + - API Reference: + - Models: reference/models.md + - I/O Functions: reference/io.md + - Simulation & Results: reference/simulation.md + plugins: - search - mkdocstrings: @@ -18,10 +32,18 @@ plugins: setup_commands: - import sys - sys.path.append('../') + options: + show_source: false + show_signature_annotations: true + members_order: source + theme: name: material - feature: - tabs: true + features: + - navigation.tabs + - navigation.sections + - navigation.expand + - content.code.copy palette: - media: "(prefers-color-scheme: light)" scheme: default @@ -52,3 +74,10 @@ markdown_extensions: permalink: true - pymdownx.arithmatex: generic: true + - pymdownx.highlight: + anchor_linenums: true + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true + - admonition + - pymdownx.details From 3718d79891b9aa9bb6428603a622beefef28fd45 Mon Sep 17 00:00:00 2001 From: Jim Schaff Date: Thu, 5 Mar 2026 21:57:51 -0500 Subject: [PATCH 02/24] extract SegmentedImageGeometry and fix image/analytic geometry rasterization Decouple geometry processing from visualization by extracting a SegmentedImageGeometry class that holds a labeled numpy array with spatial metadata, independent of PyVista/VTK. Key changes: - New pyvcell/_internal/geometry/ package with SegmentedImageGeometry - Geometry.to_segmented_image() factory method - Geometry.plot() now delegates to SegmentedImageGeometry.plot() - Fix analytic rasterizer to honor first-added-wins priority - Fix Image axis ordering: size is now consistently (X, Y, Z) with X-fastest pixel data, matching VCell VCML convention Co-Authored-By: Claude Opus 4.6 --- pyvcell/_internal/geometry/__init__.py | 3 + .../geometry/segmented_image_geometry.py | 94 ++++++++++ pyvcell/vcml/__init__.py | 2 + pyvcell/vcml/models.py | 71 +++++++- tests/_internal/geometry/__init__.py | 0 .../geometry/test_segmented_image_geometry.py | 163 ++++++++++++++++++ 6 files changed, 329 insertions(+), 4 deletions(-) create mode 100644 pyvcell/_internal/geometry/__init__.py create mode 100644 pyvcell/_internal/geometry/segmented_image_geometry.py create mode 100644 tests/_internal/geometry/__init__.py create mode 100644 tests/_internal/geometry/test_segmented_image_geometry.py diff --git a/pyvcell/_internal/geometry/__init__.py b/pyvcell/_internal/geometry/__init__.py new file mode 100644 index 0000000..909a985 --- /dev/null +++ b/pyvcell/_internal/geometry/__init__.py @@ -0,0 +1,3 @@ +from pyvcell._internal.geometry.segmented_image_geometry import SegmentedImageGeometry + +__all__ = ["SegmentedImageGeometry"] diff --git a/pyvcell/_internal/geometry/segmented_image_geometry.py b/pyvcell/_internal/geometry/segmented_image_geometry.py new file mode 100644 index 0000000..42a52c2 --- /dev/null +++ b/pyvcell/_internal/geometry/segmented_image_geometry.py @@ -0,0 +1,94 @@ +from __future__ import annotations + +import re +from pathlib import Path +from typing import TYPE_CHECKING, Any + +import numexpr as ne # type: ignore[import-untyped] +import numpy as np +import numpy.typing as npt + +if TYPE_CHECKING: + import pyvista as pv + + +def _evaluate_analytic_expr(expr: str, x: npt.NDArray[Any], y: npt.NDArray[Any], z: npt.NDArray[Any]) -> npt.NDArray[Any]: + """Evaluate a VCell analytic expression on coordinate arrays using numexpr.""" + # Convert pow(a,b) to (a)**(b) + expr = re.sub(r"pow\(([^,]+),([^)]+)\)", r"(\1)**(\2)", expr) + # Convert ^ to ** + expr = expr.replace("^", "**") + return ne.evaluate(expr, local_dict={"x": x, "y": y, "z": z}) # type: ignore[no-any-return] + + +class SegmentedImageGeometry: + """A labeled 3D numpy array with spatial metadata. + + Holds a segmented image representation of a geometry, independent of + any visualization library. + + Attributes: + labels: int32 array of shape (nx, ny, nz) with subvolume labels. + origin: (ox, oy, oz) world-coordinate origin. + spacing: (dx, dy, dz) cell size per axis. + label_names: mapping from label value to subvolume name. + """ + + def __init__( + self, + labels: npt.NDArray[np.int32], + origin: tuple[float, float, float], + spacing: tuple[float, float, float], + label_names: dict[int, str], + ) -> None: + self.labels = labels + self.origin = origin + self.spacing = spacing + self.label_names = label_names + + def to_pyvista(self) -> pv.ImageData: + """Convert to a PyVista ImageData with cell data 'subvolume'.""" + import pyvista as pv + + nx, ny, nz = self.labels.shape + grid = pv.ImageData( + dimensions=(nx + 1, ny + 1, nz + 1), + spacing=self.spacing, + origin=self.origin, + ) + grid.cell_data["subvolume"] = self.labels.flatten(order="F") + return grid + + def plot(self, save_path: str | Path | None = None) -> None: + """Off-screen PyVista render displayed via matplotlib. + + Args: + save_path: If provided, save the figure to this path before showing. + """ + import matplotlib.pyplot as plt + import pyvista as pv + + grid = self.to_pyvista() + unique_labels = sorted(set(self.labels.flat)) + n_labels = len(unique_labels) + cmap = plt.colormaps["tab10"] + label_to_pos = {label: i for i, label in enumerate(unique_labels)} + + plotter = pv.Plotter(off_screen=True, window_size=(800, 600)) + for label in unique_labels: + thresh = grid.threshold(value=[label - 0.5, label + 0.5], scalars="subvolume") + color = cmap(label_to_pos[label] / max(n_labels - 1, 1))[:3] + name = self.label_names.get(int(label), f"region_{label}") + plotter.add_mesh(thresh, color=color, label=name, opacity=0.6) + plotter.add_legend() + img = plotter.screenshot(return_img=True) + plotter.close() + + fig, ax = plt.subplots(figsize=(8, 6)) + ax.imshow(img) + ax.axis("off") + ax.set_title("Geometry") + plt.tight_layout() + if save_path is not None: + fig.savefig(save_path, bbox_inches="tight", dpi=150) + plt.show() diff --git a/pyvcell/vcml/__init__.py b/pyvcell/vcml/__init__.py index d098076..441097f 100644 --- a/pyvcell/vcml/__init__.py +++ b/pyvcell/vcml/__init__.py @@ -1,3 +1,4 @@ +from pyvcell._internal.geometry import SegmentedImageGeometry from pyvcell.vcml.field import Field from pyvcell.vcml.models import ( Application, @@ -94,4 +95,5 @@ "load_sbml_url", "suppress_stdout", "restore_stdout", + "SegmentedImageGeometry", ] diff --git a/pyvcell/vcml/models.py b/pyvcell/vcml/models.py index 844bddb..51be5a0 100644 --- a/pyvcell/vcml/models.py +++ b/pyvcell/vcml/models.py @@ -4,6 +4,10 @@ import numpy as np from pydantic import BaseModel, Field +from pyvcell._internal.geometry.segmented_image_geometry import ( + SegmentedImageGeometry, + _evaluate_analytic_expr, +) from pyvcell.sim_results.var_types import NDArray3Du8 @@ -202,15 +206,19 @@ class Image(VcmlNode): @property def ndarray_3d_u8(self) -> NDArray3Du8: + """Decompress and return the image as a ``(Z, Y, X)`` uint8 array.""" compressed_bytes = bytes.fromhex(self.compressed_content) raw_pixels = zlib.decompress(compressed_bytes) - if len(raw_pixels) != self.uncompressed_size: - raise ValueError("Decompressed size does not match compressed size") - return np.frombuffer(raw_pixels, dtype=np.uint8).astype(np.uint8).reshape(self.size) + # size is (X, Y, Z); pixel data is X-fastest → reshape to (Z, Y, X) + sx, sy, sz = self.size + return np.frombuffer(raw_pixels, dtype=np.uint8).astype(np.uint8).reshape((sz, sy, sx)) @staticmethod def from_ndarray_3d_u8(ndarray_3d_u8: NDArray3Du8, name: str) -> "Image": - size: tuple[int, int, int] = ndarray_3d_u8.shape[0], ndarray_3d_u8.shape[1], ndarray_3d_u8.shape[2] + """Create an Image from a ``(Z, Y, X)`` uint8 numpy array.""" + # Input shape is (Z, Y, X); store size as (X, Y, Z) per VCell convention + nz, ny, nx = ndarray_3d_u8.shape + size: tuple[int, int, int] = (nx, ny, nz) unique_values = np.unique(ndarray_3d_u8) pixel_classes: list[PixelClass] = [] @@ -218,6 +226,7 @@ def from_ndarray_3d_u8(ndarray_3d_u8: NDArray3Du8, name: str) -> "Image": pixel_class = PixelClass(name=f"class_{value!s}", pixel_value=value) pixel_classes.append(pixel_class) + # C-order flatten of (Z, Y, X) array gives X-fastest byte order raw_pixels: bytes = ndarray_3d_u8.flatten().tobytes() compressed_bytes: bytes = zlib.compress(raw_pixels) return Image( @@ -295,6 +304,60 @@ def add_surface(self, name: str, sub_volume_1: SubVolume | str, sub_volume_2: Su self.surface_classes.append(surface_class) return surface_class + def to_segmented_image(self, resolution: int = 50) -> SegmentedImageGeometry: + """Build a :class:`SegmentedImageGeometry` from this geometry. + + Args: + resolution: Number of grid points along each axis (analytic geometries only). + """ + ox, oy, oz = self.origin + ex, ey, ez = self.extent + + if self.image is not None: + compressed_bytes = bytes.fromhex(self.image.compressed_content) + raw_pixels = zlib.decompress(compressed_bytes) + # image.size is (X, Y, Z); pixel data is X-fastest, so reshape to (Z, Y, X) + sx, sy, sz = self.image.size + label_array = ( + np.frombuffer(raw_pixels, dtype=np.uint8) + .astype(np.int32) + .reshape((sz, sy, sx)) # [z, y, x] + .transpose((2, 1, 0)) # [x, y, z] = (nx, ny, nz) + ) + label_names = {pc.pixel_value: pc.name for pc in self.image.pixel_classes} + else: + nx = ny = nz = resolution + x = np.linspace(ox + ex / (2 * nx), ox + ex - ex / (2 * nx), nx) + y = np.linspace(oy + ey / (2 * ny), oy + ey - ey / (2 * ny), ny) + z = np.linspace(oz + ez / (2 * nz), oz + ez - ez / (2 * nz), nz) + x3d, y3d, z3d = np.meshgrid(x, y, z, indexing="ij") + + label_array = np.zeros((nx, ny, nz), dtype=np.int32) + # Iterate in reverse so earlier subvolumes (higher priority) win + for idx, sv in reversed(list(enumerate(self.subvolumes))): + if sv.analytic_expr is None: + continue + mask = _evaluate_analytic_expr(sv.analytic_expr, x3d, y3d, z3d) + label_array[mask > 0] = idx + label_names = {idx: sv.name for idx, sv in enumerate(self.subvolumes)} + + spacing = (ex / label_array.shape[0], ey / label_array.shape[1], ez / label_array.shape[2]) + return SegmentedImageGeometry( + labels=label_array, + origin=(ox, oy, oz), + spacing=spacing, + label_names=label_names, + ) + + def plot(self, resolution: int = 50, save_path: str | None = None) -> None: + """Render the geometry using PyVista. + + Args: + resolution: Number of grid points along each axis. + save_path: If provided, save the figure to this path before showing. + """ + self.to_segmented_image(resolution=resolution).plot(save_path=save_path) + @property def subvolume_names(self) -> list[str]: return [subvolume.name for subvolume in self.subvolumes] diff --git a/tests/_internal/geometry/__init__.py b/tests/_internal/geometry/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/_internal/geometry/test_segmented_image_geometry.py b/tests/_internal/geometry/test_segmented_image_geometry.py new file mode 100644 index 0000000..ed3b485 --- /dev/null +++ b/tests/_internal/geometry/test_segmented_image_geometry.py @@ -0,0 +1,163 @@ +import numpy as np +import pytest + +from pyvcell._internal.geometry.segmented_image_geometry import ( + SegmentedImageGeometry, + _evaluate_analytic_expr, +) +from pyvcell.vcml.models import Geometry, Image, PixelClass + + +# --- _evaluate_analytic_expr --- + + +class TestEvaluateAnalyticExpr: + def test_simple_expression(self) -> None: + x = np.array([1.0, 2.0, 3.0]) + y = np.array([0.0, 0.0, 0.0]) + z = np.array([0.0, 0.0, 0.0]) + result = _evaluate_analytic_expr("x + 1", x, y, z) + np.testing.assert_array_almost_equal(result, [2.0, 3.0, 4.0]) + + def test_pow_conversion(self) -> None: + x = np.array([2.0, 3.0]) + y = np.zeros(2) + z = np.zeros(2) + result = _evaluate_analytic_expr("pow(x, 2.0)", x, y, z) + np.testing.assert_array_almost_equal(result, [4.0, 9.0]) + + def test_caret_conversion(self) -> None: + x = np.array([2.0, 3.0]) + y = np.zeros(2) + z = np.zeros(2) + result = _evaluate_analytic_expr("x^2", x, y, z) + np.testing.assert_array_almost_equal(result, [4.0, 9.0]) + + def test_sphere_expression(self) -> None: + """The kind of expression VCell generates for a sphere.""" + x = np.array([5.0, 0.0]) + y = np.array([5.0, 0.0]) + z = np.array([5.0, 0.0]) + expr = "(pow(x-5,2.0) + pow(y-5,2.0) + pow(z-5,2.0)) < pow(3,2.0)" + result = _evaluate_analytic_expr(expr, x, y, z) + # center is inside, corner is outside + assert result[0] == True # noqa: E712 + assert result[1] == False # noqa: E712 + + +# --- SegmentedImageGeometry --- + + +class TestSegmentedImageGeometry: + @pytest.fixture() + def simple_seg(self) -> SegmentedImageGeometry: + labels = np.zeros((10, 10, 10), dtype=np.int32) + labels[3:7, 3:7, 3:7] = 1 + return SegmentedImageGeometry( + labels=labels, + origin=(0.0, 0.0, 0.0), + spacing=(1.0, 1.0, 1.0), + label_names={0: "background", 1: "cell"}, + ) + + def test_attributes(self, simple_seg: SegmentedImageGeometry) -> None: + assert simple_seg.labels.shape == (10, 10, 10) + assert simple_seg.labels.dtype == np.int32 + assert simple_seg.origin == (0.0, 0.0, 0.0) + assert simple_seg.spacing == (1.0, 1.0, 1.0) + assert simple_seg.label_names == {0: "background", 1: "cell"} + + def test_unique_labels(self, simple_seg: SegmentedImageGeometry) -> None: + unique = sorted(set(simple_seg.labels.flat)) + assert unique == [0, 1] + + def test_to_pyvista(self, simple_seg: SegmentedImageGeometry) -> None: + grid = simple_seg.to_pyvista() + assert grid.dimensions == (11, 11, 11) + assert grid.spacing == (1.0, 1.0, 1.0) + assert grid.origin == (0.0, 0.0, 0.0) + assert "subvolume" in grid.cell_data + assert grid.cell_data["subvolume"].shape == (1000,) + + def test_to_pyvista_nonunit_spacing(self) -> None: + labels = np.zeros((5, 10, 20), dtype=np.int32) + seg = SegmentedImageGeometry( + labels=labels, + origin=(1.0, 2.0, 3.0), + spacing=(0.5, 0.25, 0.1), + label_names={0: "bg"}, + ) + grid = seg.to_pyvista() + assert grid.dimensions == (6, 11, 21) + assert grid.spacing == (0.5, 0.25, 0.1) + assert grid.origin == (1.0, 2.0, 3.0) + + +# --- Geometry.to_segmented_image --- + + +class TestGeometryToSegmentedImage: + def test_analytic_sphere(self) -> None: + geo = Geometry(name="test", origin=(0, 0, 0), extent=(10, 10, 10), dim=3) + # Sphere first (higher priority), then background — first match wins + geo.add_sphere("sphere", radius=4, center=(5, 5, 5)) + geo.add_background("bg") + + seg = geo.to_segmented_image(resolution=20) + + assert seg.labels.shape == (20, 20, 20) + assert seg.spacing == (0.5, 0.5, 0.5) + assert seg.origin == (0.0, 0.0, 0.0) + assert seg.label_names == {0: "sphere", 1: "bg"} + # center should be labeled as sphere (0) + assert seg.labels[10, 10, 10] == 0 + # corner should be labeled as background (1) + assert seg.labels[0, 0, 0] == 1 + + def test_analytic_resolution(self) -> None: + geo = Geometry(name="test", origin=(0, 0, 0), extent=(10, 10, 10), dim=3) + geo.add_background("bg") + + seg30 = geo.to_segmented_image(resolution=30) + seg50 = geo.to_segmented_image(resolution=50) + + assert seg30.labels.shape == (30, 30, 30) + assert seg50.labels.shape == (50, 50, 50) + + def test_image_based(self) -> None: + # raw shape is (Z, Y, X) = (4, 6, 8); z-slices 0-1 set to 1 + raw = np.zeros((4, 6, 8), dtype=np.uint8) + raw[0:2, :, :] = 1 + image = Image.from_ndarray_3d_u8(raw, name="img") + image.pixel_classes = [ + PixelClass(name="region_a", pixel_value=0), + PixelClass(name="region_b", pixel_value=1), + ] + + geo = Geometry( + name="img_geo", + origin=(0, 0, 0), + extent=(8, 6, 4), + dim=3, + image=image, + ) + + seg = geo.to_segmented_image() + + # labels shape is (nx, ny, nz) = (8, 6, 4) + assert seg.labels.shape == (8, 6, 4) + assert seg.label_names == {0: "region_a", 1: "region_b"} + assert seg.origin == (0.0, 0.0, 0.0) + assert seg.spacing == (1.0, 1.0, 1.0) + # raw z-slices 0-1 are 1, z-slices 2-3 are 0; labels indexed as [x, y, z] + assert seg.labels[0, 0, 0] == 1 # z=0 + assert seg.labels[0, 0, 3] == 0 # z=3 + + def test_plot_delegates(self) -> None: + """Geometry.plot() should delegate to SegmentedImageGeometry.plot().""" + geo = Geometry(name="test", origin=(0, 0, 0), extent=(10, 10, 10), dim=3) + geo.add_background("bg") + + # Verify to_segmented_image works (plot itself needs display) + seg = geo.to_segmented_image(resolution=10) + assert isinstance(seg, SegmentedImageGeometry) From 687508520b815435d65cfefa71e3dddfaff4fa91 Mon Sep 17 00:00:00 2001 From: Jim Schaff Date: Thu, 5 Mar 2026 21:57:56 -0500 Subject: [PATCH 03/24] add optional save_path parameter to plot methods Add save_path to Plotter.plot_concentrations(), plot_slice_2d(), plot_slice_3d(), and SegmentedImageGeometry.plot() / Geometry.plot() so notebooks can save figures to files for use in static docs. Co-Authored-By: Claude Opus 4.6 --- pyvcell/sim_results/plotter.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pyvcell/sim_results/plotter.py b/pyvcell/sim_results/plotter.py index a65d50a..b7ee124 100644 --- a/pyvcell/sim_results/plotter.py +++ b/pyvcell/sim_results/plotter.py @@ -57,7 +57,7 @@ def get_channel(self, label: str) -> ChannelMetadata: return channel_data - def plot_concentrations(self) -> None: + def plot_concentrations(self, save_path: str | None = None) -> None: t = self.times fig, ax = plt.subplots() ax.plot(t, self.concentrations.T) @@ -66,9 +66,11 @@ def plot_concentrations(self) -> None: y_labels = [c.label for c in self.channels if c.mean_values is not None] ax.legend(y_labels) ax.grid() + if save_path is not None: + fig.savefig(save_path, bbox_inches="tight", dpi=150) return plt.show() - def plot_slice_2d(self, time_index: int, channel_name: str, z_index: int) -> None: + def plot_slice_2d(self, time_index: int, channel_name: str, z_index: int, save_path: str | None = None) -> None: specified_channel = self.get_channel(channel_name) data_slice = slice_dataset_2d(specified_channel, self.zarr_dataset, time_index, z_index) @@ -86,11 +88,14 @@ def plot_slice_2d(self, time_index: int, channel_name: str, z_index: int) -> Non # title = f"{channel_label} (in {channel_domain}) at t={t}, slice z={z_coord}" # Display the slice as an image + fig = plt.figure() plt.imshow(data_slice) plt.title(title) + if save_path is not None: + fig.savefig(save_path, bbox_inches="tight", dpi=150) plt.show() - def plot_slice_3d(self, time_index: int, channel_id: str) -> None: + def plot_slice_3d(self, time_index: int, channel_id: str, save_path: str | None = None) -> None: # Select a 3D volume for a single time point and channel, shape is (z, y, x) channel = self.get_channel(channel_id) volume = self.zarr_dataset[time_index, channel.index, :, :, :] @@ -127,6 +132,8 @@ def plot_slice_3d(self, time_index: int, channel_id: str) -> None: t = self.times[time_index] title = f"{channel.label} (in {channel.domain_name}) at t={t}" plt.title(title) + if save_path is not None: + fig.savefig(save_path, bbox_inches="tight", dpi=150) # Show the plot return plt.show() From e62a639f187969a43636ca2a60e19018034a599f Mon Sep 17 00:00:00 2001 From: Jim Schaff Date: Thu, 5 Mar 2026 21:58:02 -0500 Subject: [PATCH 04/24] add notebook-generated images to markdown guides and notebook execution tests Notebooks now save figures via save_path to docs/guides/images/. Markdown guides reference these images so static pages show plots. Add pytest-based notebook execution tests under tests/guides/. Co-Authored-By: Claude Opus 4.6 --- docs/guides/building-a-model.md | 10 +- docs/guides/complex-geometries.md | 14 +- .../guides/images/building-concentrations.png | Bin 0 -> 34895 bytes docs/guides/images/building-geometry.png | Bin 0 -> 170726 bytes docs/guides/images/building-slice3d-A.png | Bin 0 -> 156700 bytes .../images/complex-analytic-geometry.png | Bin 0 -> 170726 bytes docs/guides/images/complex-concentrations.png | Bin 0 -> 32237 bytes docs/guides/images/complex-geometry.png | Bin 0 -> 182631 bytes docs/guides/images/complex-slice3d-A.png | Bin 0 -> 129327 bytes docs/guides/images/viz-concentrations.png | Bin 0 -> 65615 bytes docs/guides/images/viz-slice2d.png | Bin 0 -> 16554 bytes docs/guides/images/viz-slice3d.png | Bin 0 -> 114568 bytes docs/guides/notebooks/building-a-model.ipynb | 524 +++++++++++++++ .../guides/notebooks/complex-geometries.ipynb | 622 ++++++++++++++++++ docs/guides/notebooks/visualization.ipynb | 539 +++++++++++++++ docs/guides/visualization.md | 10 +- mkdocs.yml | 5 + tests/guides/__init__.py | 0 tests/guides/test_notebooks.py | 44 ++ 19 files changed, 1761 insertions(+), 7 deletions(-) create mode 100644 docs/guides/images/building-concentrations.png create mode 100644 docs/guides/images/building-geometry.png create mode 100644 docs/guides/images/building-slice3d-A.png create mode 100644 docs/guides/images/complex-analytic-geometry.png create mode 100644 docs/guides/images/complex-concentrations.png create mode 100644 docs/guides/images/complex-geometry.png create mode 100644 docs/guides/images/complex-slice3d-A.png create mode 100644 docs/guides/images/viz-concentrations.png create mode 100644 docs/guides/images/viz-slice2d.png create mode 100644 docs/guides/images/viz-slice3d.png create mode 100644 docs/guides/notebooks/building-a-model.ipynb create mode 100644 docs/guides/notebooks/complex-geometries.ipynb create mode 100644 docs/guides/notebooks/visualization.ipynb create mode 100644 tests/guides/__init__.py create mode 100644 tests/guides/test_notebooks.py diff --git a/docs/guides/building-a-model.md b/docs/guides/building-a-model.md index 34a89f5..2aa2374 100644 --- a/docs/guides/building-a-model.md +++ b/docs/guides/building-a-model.md @@ -58,6 +58,8 @@ geo.add_surface(name="pm_domain", sub_volume_1="cell_domain", sub_volume_2="ec_d The order of `add_sphere` / `add_background` matters — subvolumes added first have higher priority. The sphere is carved out of the background. +![Geometry with sphere](images/building-geometry.png) + ## Create an application An application connects the model to the geometry by mapping compartments to geometric domains and species to initial conditions: @@ -97,6 +99,10 @@ results.plotter.plot_slice_3d(time_index=0, channel_id="A") results.plotter.plot_slice_3d(time_index=0, channel_id="B") ``` +![Concentration time series](images/building-concentrations.png) + +![3D slice of species A](images/building-slice3d-A.png) + ## Complete example ```python @@ -140,8 +146,8 @@ results.plotter.plot_concentrations() results.plotter.plot_slice_3d(time_index=0, channel_id="A") ``` -!!! tip "Interactive notebook" - See the [sysbio-1-antimony notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-1-antimony.ipynb) for a runnable version. +!!! tip "Interactive tutorial" + See the [Building a Model tutorial](notebooks/building-a-model.ipynb) for a runnable notebook with visual output, or the [sysbio-1-antimony notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-1-antimony.ipynb) for the course version. ## Next steps diff --git a/docs/guides/complex-geometries.md b/docs/guides/complex-geometries.md index d085a00..3579888 100644 --- a/docs/guides/complex-geometries.md +++ b/docs/guides/complex-geometries.md @@ -58,6 +58,8 @@ print("surfaces:", tutorial_geometry.surface_class_names) # ['cytosol_ec_membrane', 'Nucleus_cytosol_membrane'] ``` +![Imported geometry](images/complex-geometry.png) + ## Map compartments to the imported geometry When using an existing geometry, map each model compartment to the appropriate geometric domain: @@ -89,6 +91,10 @@ results.plotter.plot_concentrations() results.plotter.plot_slice_3d(time_index=0, channel_id="A") ``` +![Concentration time series](images/complex-concentrations.png) + +![3D slice of species A](images/complex-slice3d-A.png) + ## Analytic geometry primitives You can build geometries from analytic expressions using the built-in helpers: @@ -96,7 +102,7 @@ You can build geometries from analytic expressions using the built-in helpers: ```python geo = vc.Geometry(name="geo", origin=(0, 0, 0), extent=(10, 10, 10), dim=3) -# Add a sphere (inner compartment) +# Add a sphere (inner compartment — higher priority) geo.add_sphere(name="cell_domain", radius=4, center=(5, 5, 5)) # Add background (fills remaining space) @@ -106,6 +112,8 @@ geo.add_background(name="ec_domain") geo.add_surface(name="pm_domain", sub_volume_1="cell_domain", sub_volume_2="ec_domain") ``` +![Analytic sphere geometry](images/complex-analytic-geometry.png) + !!! note "Subvolume ordering" Subvolumes are evaluated in the order they are added. Earlier subvolumes have higher priority — the sphere is carved out of the background. @@ -173,8 +181,8 @@ results.plotter.plot_concentrations() results.plotter.plot_slice_3d(time_index=0, channel_id="A") ``` -!!! tip "Interactive notebook" - See the [sysbio-3-geometry notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-3-geometry.ipynb) for a runnable version. +!!! tip "Interactive tutorial" + See the [Complex Geometries tutorial](notebooks/complex-geometries.ipynb) for a runnable notebook with visual output, or the [sysbio-3-geometry notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-3-geometry.ipynb) for the course version. ## Next steps diff --git a/docs/guides/images/building-concentrations.png b/docs/guides/images/building-concentrations.png new file mode 100644 index 0000000000000000000000000000000000000000..2c2dc68fdc261e80c0f5ae9b0702f9d20f094fd4 GIT binary patch literal 34895 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 literal 0 HcmV?d00001 diff --git a/docs/guides/images/building-slice3d-A.png b/docs/guides/images/building-slice3d-A.png new file mode 100644 index 0000000000000000000000000000000000000000..a3474ac0fe8f686b8cdbe4fed8635847bfe65583 GIT binary patch literal 156700 zcmc$`by!qi*FLTSQqo8Z(jci4(n?9AsB{R@HIy`iv~+`nl!Qum&(I;#O2d#caxZp77?6ddUEADl#wI}k0)^idf2BI4`Zjh*|DC*p}aSI9j zxDeb1{__WOG6VdQ^ib0Gcm=Zd@G^I^x}jX*vv=F^ zKUoceV;BE^dcCQkM{ z!X3iG%{DFE9;ClhLDE}+Q+^|m_uHrC+eD4dU(pplBMTLbBeOQSb*HVR;^*=$UD4ZB8N z*E_ZoDT#O8>AON|UsIdYc@~neTpdId-D9dMzio`4jz&OPK6jPKVeF(2Bei=PoaPfo zH(f_0HkZk+56G(hQ2TExrJ~sUmvLA+zA&HgIL_6n?g!BtyWBKA&YWHzNMskVg96g5 z!%>6Z4Zc2$zkXVz^X(ebNd~U6+5z`VEd_N)kgcHtuTicSTP3*%=NUFRk;Fo6g*b+jZB>$^1T%k7a=%^epI^{xM$pYrVh|y;3eDFi$OV-=sZS=vnXC zFziy(f6u|J`*5wFlc%HM5(+HyAP--L!0hTMU9auRzCMau?tIYA?BWUqjnBxSZ>r$y zj0rr82<#|IH;u}2ZuwS(E(C<;fCp&B%`dNeSgsFQhIXFI9#P;vtJ*$E8?w5bl*1%n zwq`7ZpTVEYMYZm?5LbHl^69qAgjw(|H}|>6Z7vxu$6vwY*H1v#r=V#|4Ccn|Te8S} zvOy>eSuAdDZ?8tf+!!Huxx$mGcD4t*a$4|$1@IYOmzrVhFGsI0$sT3gSvt-^<>~Vi zeY+mi1_wtAwy4}DhhCIIqqerTXb>4#xiSNCJ)0c`hv!~jZq8JhhmezN*|A7^*uEJT z3b_Ub>RDgssAxMNp1Qz8SLFua`BY9nBBcm?zeKhdu*odpu=Nb(YsvPwhai_T)v53sG$qi`mS0;Q` zuA3aeS2Bl>kN;3oGOAx@-}P);58ATrx#YbT>pdQA8hSh;MTUceLq|{F$(e4<_UbBT zRTSrBJmo=Rn-dITLeM!?Zgd#REqychtcP3i(HO~F#pCADfC}>a%rN&+89i%@wC@y4 zwKnlTE3yNx&gI=^#P!Sq>dEuN3esZ-8yXkfh{2m)VEmFC-|uB>tI58!E$gx<9iH+sL8Fp`_cTn% zKi|JkZ}noQG98hacf7E?j5I;`P8VEw=Mbkvk%vDKq>YgVj1C>hIhfYsoO8@kFD+zt z@?FmyvDD6e89q%oe+3M#cU5fM$An+YuO$2KqGLH7yp{f^JY;&qaP@KSd5q#vB=jsA z`efxemQj4l=9%otH*LadGg6+g)jJ&M$)9S)oerTWg;m%!2Bz0U3pllLWyL6naPEJmAny=Z%+CDKD@i5*e#(z^2wf`RX<^DYE$`d1nHRYXoOO_1q z#?h{goDt+2uw^+nrsuK_yZzJc`|ma9PlIXO@~-aXlxB%JCFvbA&--9bro}M==yaHQ zpirGD1Og~>df>6N*mR^p4q!Y&bExYp#I+!79unYJNBPM;NL?%|Rt&Uc49(Fn10(!k zS*R>+@KJJ&j4Asc<3F%1E9}NCid7PVryZlG6@2eaoBBD`r7in(?wPs`astZL#|SEG zL;xneT{CrE6(OSmMx~TUTXiB17Q}a;I~A>I^Wo#jlzvEMnLTr@WBu7s5;k0sAuy0w1@b=pSyNX-z!Fqoy%HJbgCR z8F6f(Pn2&{S5MC?>5H_LxftpkbbFd)%a#)@GsAc|9uKZt5+^2M!`gsaT}J3w!Y@y% zi*yLGs76rPlX3oO0s&*!Qp_0R#6V{beO2Khu)}4{6x`LOAIIdb4&&pygr!$d)?))< z9L*F=Pd>YkNE}HFqTLREmB_yDgb9X?xu1_k$o}$JoHlkJ4&Kx1{>kCWRhaq~=919& z-kmFNGIYtfgwG)J9?nR^L9HJ2;&-(3^c@v5^xU+dPwtaEk$LcR>r(wP%G)Um;Trw| zz)&sp-}4dg7W@$H@5_%7SNn(&bj&`*FZNe~7_6Bp?Z|l_ry=^zicq|3F@qK(FeP5;>!hi@N}1q;ip}d84HFA1BPTT>YjnDybQ>DCp#_k}Sb*yR~8inXrJ6Oh- z^X?>SQJ2|l0!d%}G1M1?pxP0GC;jem=yCpY_agMP+Sv9>EF%6K0;n+_`=m$D{g_fs zcDm0Tv+U+yN+YUcjUH&^KcERQ5D1TmpuLRgeM><3W8;G$Z;ye^=lXS6LPz!eVGE90 z3gnQpcpS5g;Wf&xh*Ppk4gsCx=*~m8n3fN&;>u`ddUUu0cw}T!-_6FO8(tH}xh+|>EE`4fAYjm~V`f?b$VFI&bU4`(G{k%K( zFjvU4EVI1z5EWhS*Sw<#U<<9MoZ)e@p zPeBtGW=yQ!I}N=$k<1939Wo6!0=2)non)LlD@UWu*3!#dpDO(LK0Yaveu~R0hP10I zou_Wj1Q!-N+JOz(CqNRR#GOZRAsaRxB(#Y}TAGo@c!HaCK6wT~b~(a_5_=LpJ(L{! z=)qkmqON54Slgn@LVCE0JYV%X2M79D%1aEBLr-0!ZOB?~_yA5a+IbhV3BXhBu7*84 zo41mL?)yUG@u6tTqdV|k*qz0yKs%oaNB~+FY4qb<7PF_n4Q&GnISy?%ffHR9d$tP(#}Jw(@^59tF#puxRJR`yaca4x zo!GLC^X<-?UbVLjLwR|g8%(mZoDW#-r5nh(Q`00ZemZ%T)HwD*AM1PY)Zl3HGJlml zp_4vszqv_8M(9}AK$dH|f%EI!!3O2{_LS|Ez1yYcI_dtGXRd8qnjpg?gy~UI`oK;) z^wP?JMxn%-Tcrp7TCoigfGDLJ64`HBBc&e`?G7hl+!hom8<~$m3bUrZktEa&a^j9@ zB`@L`9^l$|;o-8)fpybS93N|Gb?X9m*Q}Qx7ODT1f2$*9&cVyqt25obkO@TCdTF`}fxkCr(Us+1bR zdslPQkZ^3m6Fqn83Z;7wYxiqR@Jq4@=19fKz@`IkvM=I}BY^zJmRkedzt;#8#5ms8 z+VyK$8jEvpZaLBI&OXlG(|49{o|PljSUO5;{6%G^YPnU0><_%`kKSkDa>4E38)t@+>Tei5WrLA;Ct$hA4V_lX>tQO-6-&`~nn4VbhmbtW0SIK`pC*dm* zY@Fi^L}hPE+q?-YqIqzTEQs4Pok|V&IUh2UtsEnXzFDotL#%L!7#|;}0{8#O$0kma z2(PjqKjg*#cp2+^+ex73e{|^-8wy3cWt>*YTj#$>2&|ppBW4zOtsix^&Mn8=TRnlc zCGv5VSc`dFAO)yTD6EKBT>zK)6?o)b8#xW%jS~QV`k7wWBJTAk2G$->Mc)*tyDFki zGu-tzRGY7C-IqKc!3srr2(Og2gcx*~y((cxlwWN-wPSXDfrkqEZ8hw=3Tgns1f4dz zh`QAAqIEOGstD*yMcwa}F||#-eON==4p%zaJDxc*6bU4|b4StaVj?~B>J)s}tL=G4hz z@w@Yl?R!o`BT}}abasU$msk**Az)6OG?j!+e_f7;fp8Cg=mMj|+jO<$$U&?0-pQ zb$@*_Jx+@7Q=XPP>m-Zfk9n*SGxvBpEb~0DLfpe_5^Lh1J91(JaWhm}4M$VoX0Ut`rWsy>v` zw>L8+QBCs4*hQ@5Zt5A7kGlQVh+_58BPu}&h1%>ctG|p=8SaDTmt_(afFh{stW%!? zL`R@kiv&?`W-z577u)q50-|i!!y)Z8>bn&NTBewe|e&{ntAS zV((`_Pg-rt&pibLf8sbmNR+((=TRdHR>hgLJ)R4kOzKkXs<2Z)3jZ_xab;m=W<_(O zhIi%Xy3~s|V*fXV_s>Ngeg5|RU4c;L|8qG>jQ?6&lvuDumgkJFy^iDcQ$T$GUNJxc z{&V4^6nfwOxlS3^(kbyj^Z4&cS$}mZDo7n8_+PByKNm`joiqMp;RNj?H<4uj=kwvF z<7&455fOG<{<$bvWVjGJ8{1)e`u~~Wf5Z(W_}woCW3d|uC_xs5XUol~_jv!vf`?k> z&OaA*6j%+j|7Y<3e$z04h<}AG>;E~)q1gX(k@F_bWetwc$65YaH+EY8TqsFV+%%W! z+GHp|F#gxe|4aL@`u%suZP@`8{lBMa`#jWiT<)L2|NBjh&z$_|z5()-{I3^bFW{_- zQDmRy+(jHkn#=G6}VngaY4c8V=b z9Ek9r$El$?l^loGtQq3#IhB8JDDb1`lpnkO`*GtJIN9GjvwtQJ;6J<1ks} zEN$&k-DBNs2^JubeScPN8-Z033q_}z@?Tv#7#!@v(^VW}qDiXLD2{%U`zKqL;$l%F zb<}WeQPw4qW zop|_ru{Mvr_kF_IoK|+sGK;J~9X=Uzj}om(=*o&Y=h)a3E{8jma{$$AST0uSw&TlLZHEcqN|s;^9-a1Z zbIM#UG4c49d*LU+zE?Cf@&{tEl@{O;xGMl+({ZV-xsqVVg7V&}rf&nA%(7}L9Qi7c zmpba|L(2lsU&ZNV@EywHj0FQ>opWD|{Y*JrF&G3FZkYT3yJuiuUAL@cPhv>J)PefM!sm~<{C_Q~c2>JVlXobg*sH5HluP0G5t_kIGrQgP=z^94A zmmk}u2}&Bzz?4I@#q-sQg58?=Pcv$3YXQdj2;4GJ4m|BaN^@(*0a8~}MUD7|C3{^v z@o4Yoj;;ZeNpG~-r3KRym$!pEXFy<i7|=i=i!E3h+FImc#}%fP6{&uZYi(mN;@NzH8VFK_MGRV1U=7P9x^&6~or`oDsGdl7ao%Hx% ziS9y7%T7i2G~`tD4hhL18p|vl0uWi3?F4o{;-%HXOnDMEaDinP2=W7a*qN)BmzS|z zt0o?l^>P>@EgKataIe?*%A40Hg{y|m(s9+Tf2j;rGXG)x0gUV&bz z0{hxnf2AMRc&YQHxttBjk>hu|OQF+ZH^~(f7dLg!gPJ>H+=!CnoLK3Ak=VozYqxa_ z=J7qRK}{>S6T5d8nyK_m-v1`dl>=y*9)ZS%U?Kk%;-){D4!U)*01_v|f}@0C>%(~{ zW?sPd{WaE!RNso!l%%)e6)v0~aMum~@;rWZ$_SMD_0eGm4%vXO>bAJ^0?*LFflEIj zSSWGvH>E#mS(-aDHtbZc0Hv3(Hq(HU-SGUrsp*kfFYZ)x8*7}&s74&jLyWzc!*TTTjJXRqlB6ZvJ;`$Eu5Hy^7WOACvF zE42hm=b5T}tpf?s@0PVExVa&Gt96rFrBwg%S=o19TC#qed!hdwZ+@oLtFkQze6fX{ z$T5BWlv|b;6uo$S1zy}Sjlj}v-T=$RiCP9L2O@w)6M@b*-WG)weciG42rc}q_}MZ? z(xo9f6ti19n$|$CGiv4U&(t5!k`6n*Z8IQ~9uySRkT`sjCj)rl$>LZH#A&{vn8IIS zKUNXzfF$vLhzPYKCyH|y!RS41j7)hTp{!h{xr@sSQyXh*-Cq!v>$84rHl(EdgCOAX zi|y`EW63?28?I*u=2&Fc38V$Sm&bC~wJPtgR#>iXVz9MIC91+b9zC{dyRh&a@v?d6 zR?Rt}WHlE+aVbSYsjM(Vn1mS|9F**o^W6Q!j|=j(3pV4S)~%DnL?I`ax{&=J>o;9igAE7W}AeWS3?duYI8IDrsurjC7q^#y5BRV1>=@(!TL z$Xf~UXP}E_pX;*P5yR7#ExXZdjuCmFAV+5Q5uMhuVeN4am?obf+9yTXJb0q$hjSF^eEed+iA! zuHyi(iPBnmM&_H)b_L{%4!~P;Z+=bv;RFbIv%D#wkJ>_b{0N1W^94gGAn3dK-1+Q@ zSawy#6uveD_iyc>zmazIr|Y!(tBz!__7)lKK2FJNlFky7;%@_UAblQrs3A7A1^*M; z3QXQ^=q@2LjL`s5&jgVF8*QV!UaYpP%}g%J7w);}h3^D1#5iD}f@kP7F-bZ#h0D2Ki>Z zNLRHwP2nJ`8IDvBUk{+a+U7wis&o7-e;K^*9`}@pvGwY@gi{QBb04goHDie;9qtVu6LOz4)9Lq?c zimP&)8EX+ykRC&IM=fRe`Hw7e(CbSS5D<81QWlj*W|)_nn#Uf*I9a{!P4H7bYOeah z63JyH!DSE4;S_hM2MrTIR7d`t+b7j!z#SpeUpo;E?kWJHm$fB3j|KTFd~Z(jm)m|B zpVToDE55|j`IQWO5ONHW6BFY)c||i>FZA0lCk})yZuV}4b5SfX+th&o+JZ3Za2APO zOh6#wm3$?fuWrH!TojsP854)oruuTfYfGJS#q>ksqKkO}H9A53mq@2L=0`xG$AIF2 z1dqP9_=4wdbm9VCAt5C3W6_2L05GGLo=Fj@*Aw~c2B7C*X|`y9V0QICt<6nEOPN?< znHYY34|~=GcpwniC?~^hWOfXq!6+bQ?kF`qd2k7orjzWq%4)k*WMCyfBNPMI*nV4~ z@pS8Qx^0P+h{81*e;9!!-mY$WL5}b3&QvQzJ$+dMaEqSCp0ieN3IHiwn5HhiJ+1l( z0lfxCF1%>y#)vf1?c0382UjL(Dt~K|!^%c#E)G}=4le-Gl)OT8qhHmd4;qAo%Tf7Jni(No>ZYeq^ExH(hw7z)yM$lHbtj4aXnP&WRJ9H%G%iF>i3rng0@mC7tDs4z9GfTx)ij#(nJ z1WPDYOpr!51K|>Pz9u=m1F*BLJxNy@YFUl6>qx ztE$*W|JJhT62n$TX4?I{Oe_>C&%qsT7a28-e<)oHhS>BRf=t<4qAC2}CEG#Lxlplh z9Q~Z2*a8C!U})79oMLuK6M|J^cmX~ck=m4MfyUcERN;QCHS?+>d~T^+XNx-P_A*TU zBAuHS(g(vIK85f}s=4S!axP*ae)&lRnb9%@H09s0dB@N~q03w)Kr1_(V!+QPzF`|35_^w>L3Z?G zW@9*ckE|`SLtLrC`_9B0NBUvCg610cm}&B3S_bwrZuYYj#d;|lrF=N&S8T2ez}Ygs zNX>Vvd}h;`mpYjpJ$gxM%Hgp+TqKjl&RnbQw@Sl9`THQ6v+o~eGvR=vW1gRjIC zfE&bWG8eI9jecgc2#!5tpn-)+LT-ZjEJdN3$)_~RxZKNPP6f_5P81BCs^I|=6F4m} zNn}}1UxJSX>)yU$qOCJ(zZH@8{VNAIfUVvvezRglGUg*hROk#cvxz&8IroBc1>KZJ z(ITBTZu=JSh_z2?3;cM*6qm}h_Y`(xZNOh{o8`mt54MTws!|HVfce4)d-N2@?>yA! ziE5&u@Z}-`A{t!i{T$X=Cwf%GjM65XCnIx?vK-mdn%(bGjcuj0u=WMLJ8` ztt)qJTG^1?A^qzj>*}33hY|kPmycf!gea?(<&NGyRj)y}Yuu%i~cq zUEJFFL2tRB8b-rMZme*P6s|KM*GdV?`y;y-1S8WI$TuVG+2S9snB zS+|SZKz<^Vex}C%n>il#xW`ZBm8yD7u#l~UsgzW|R?HlQ9Ddvzy26=4+5UnmZ zEfNO^1WX*YimOe(3bZS`q3Kf=UGgzJ@r;CRtSF6ev3=z}CvIS}BY>shJ@$5{wbKo* zgbV3AjgPrY0XZ7bhcfCjB!nN%lt5i(*^-kKJr9DK%vHH>YGngCUg-pNW71fq=ahN* zSgezMuk1_D?l8P=2*9RCBExIcK3pFPJ`ESNmf z*alw#7IK31M>)qpcKZ{QmPI$T2Lp1KCoan$R3279F6@CE(r0!a{qZCJ3L z-b{Fx&PC4_3!sl4ch5eE75$+F{3q!I*>zFy1cMr{${1Zx`{mJ4*sn?&4DhOBh}b^k z=;K%G+gJ#DEWQ_{U7+1A(;4)1?wQTow|RV#f83n-=1JI_AF5FKKQ2vA+x$x=?9gL( zcT)hWOX1rPq#6&TGccf$E9l8=-F7~R(nAlh$Hk!DIGp%;)?M6Dryp)HWU``X#sr2I zV!q2>-4FL02rz?rxMt%H1g~KLlLVj{$+)_E8}^)He6eHh=wCm8z9bcbyHsW*^bU8M zXM$(53+F@DL4GqU*85g#%jo=uP1P!cWV_ePvMOD*z5*L1q{~m!w7Qs z<#||=1?{aOiju2 zI(vo;X-W}7nn{NPA_7J-Bz_dZ?SH8p__P@YfOL@JZ2C?UV>=S_LjN+G^NssXMzduk z$W&~L#ySFUruvjj(-U5;K;A94w`2b-3GyP5ZyS-3JskE{2Y_6asX#=04yO&7EQA^ewUVNnD!EK7|`zI;Ft^#R2THAh>~rZii;e7#%aK6N4R z;%H-6KV+LWZS!0sD3>4C>ER?U^bPabPR5u}T_wkk@dP%YsEQa`is@GGML=|Ts22eW z>#q(vh315Qq-0FupyX0>oO`)d`-bA8p5d~NXmO#z6c_DY4FpH{&z{-hJ~ln3!irx- z#lT{G)2bc@kM?>mmjoOPqb51b2q6{{V}<%kd;rp}uHX=hR)WulV>3q7f_uCpYC>Ho zmF?MHS?IS%DND~w;?3VB@-;-zl!h-fejj+#IImm5nQ!Ju4z%_F)B-!OXH%&?#T3?z z8j@{W#aY4tgi?h6;H#u|o74iFrx^l0C$Ju~x7_@*m%7=aXNmkWm8N-n^WSPjRL2hR zfO7xYlMd-TJ5|-iOQ7=1HCVZqFoTrJH>-r7zOyYjGKSA}Ik@=xw%8?>YH&S{UoMF@ zK4H%{+k#Z2Egyq_?deDYtk@zjls?tLGwTPChB*NFIK7?V>%`x_t7pv0u&$MFMi2l^ zNHU$(rtI@by^18X#l z^LPywXxm7?#nratHY7k9%b|Z#pKJ-qC1@{beb)6!(5*KJC9hOLV1H;=GCK&ktl0X~ z1t5VGZ-EyIJUX`@XivmC!(MspTF-l?m4)Y2)YZ2C7&Jw+oO|9~Ga$+r_rcw{xAXp> zW~q=TWzli57~kIUZBx zhIkfO`ZpWXfPB>OKiwISe;LEY;N-KOAGnLPaD><>HW*OKhV7JjULOrqjoSY_gbOyFRy3#p!y-%fhVQyb^xe# zPb?#+xD@~7=#P0C_`WAY_>CHn?orhSVjpOt@(mlq2A)!04#kPyKon7=4sxj@?E25s z4B~rV&OTdIKN-czjgw5-IcT*b^UujzRD0A4AcRcp76Y6c7_fkG9niTarLXflEGxlG zR|L7(F6HzA<#*|P?z11b#TRk~l-6l$6j#Ah1~$X&I^l}+L-OE=Aq&|xhgfGi#d5r< z9dNlNS8(nj)0$f!z0Cj!@JAeH#ylZw%^3{?mLgCi73)T-iw#PDDiIYaxQP4sOAm62 z0QkJior^WkBCNuGYiu)Mpfa0R%2T!Gt!7Q+l*sGh${o!;Xjj(WbB-Jn(z8(LXC}?_ z++T31x{P@4stHu~IqGc5b$_?TJm54Wt4zZ2=1F4J;xx9|Phbzfg!E zjqC~EyWhD{^TM(`iw!w+&$uwzUjoNb1u4YFqZ%39)?t(XGPoki{BEf3|PDGg)Kb03p)$Z#lR2i@;9 zAUYEkOJXGT{A8367w7i0hjUM-3!(FUvQ&_BPZ7%5+u$ZQxyjY(r#6R^Tl=z@j!6aq zc-q-J#-$0QFUp=5ZX{R-`UvHf3&jVWYe@o$27ufI;FCtx9FdxHz19yw=k;vJ7@n63 zBYH{Rx&bC?iCLyGV~;IVBS|nFyhcq2UBr5KB`nvIoAJ1y_kov3_|6rDz62{YeRVY* z_G~pLFM{s}5#uLtq#A!jE+;EqAFOoOkTZ=H6N33{(seVxE|m(S6qXog;+dJ2CkeV-U?u z(%vsnZe6OG2A?PJs5k+*`|$x3BZs}1$PgMd`VRR`pA)&A?F z1|QJ>7ubK#YXB#Eaxdlc!Ad(5QY|!R+*^5r{G5-8} zLC_h|-=NT?grlMbo1ce(zkbDK1xarhSTDd0bPaVQV#f)ylGX)rn7av}JC}gyn8ko!dJ-;@lgJ+9&dCd9cRR1q&}%<`fE!Bj3zWkas(!;|X!338 zz1^(}&n%aY9C%$4@QuCKtmR<@vN()f zJY$u%@jx{cpv)j-)y98)frlq+Gw0wt#TY>`uFR?J2-T87A@m%etluk36RF<&2B!H6 z^1oh=Qm?(G*B4xsWy9~Ak1z^4ao)h9gPS~7=1ifU0CfR?$aG)rKX*6>FMVbEsiQm# z{Bkp+M1#gb$u5oZ7PUI^qaOu0#WZRP-{G+zJ1DKr6aysKq*67(k4W7t#<5|2xUoHw zu7rcT917B1{_!NmV@)AYM#&M)Di5Xe4z$&{Vbj41D3FO##axi{*O(#PKPQ4tlFeiR zQu_{=IVc976B)280Hx8w`NLZMLWjQ*fC;D{zr?;M488X>u*;IX`^E}4bFgyPozg)0 zQqoFw*6D3Za!9jB5Fh)fol;O~y}X4+hU}NB<@$g*PG5kUW)BxfINs&E&JY+T$vn{yt5!~`k3=v7r zLN4`7kt$H~i=yp8J;U`VT5hT3@rpks;w`qzd%9!F1_%t zkxR+a^}frtaWG$QHf24?(l}8+EpS*M-sK@pMM?^t8;HZQc;N1+y21ftv~fKS15gE= zVwt*LY#|$Wj?`pt5_skDaXpPpMENUE^;W2offO5Z*X9r2i(@Ba#|Gy`UwNsIzZ;5- zvi&3pe>gJ`8`Hai90{7~jw}hTd>^>fPr(}r0{B!#(XpGEt|KdAbk*8=RU3TcfGgne zDo1}F4cFp2azn?Ax!?FT`eI%Un-zdR=TlK;DIatW5NreFACBuUiJh`qmz6MDPsb>) za(1MLL;gE5mNAZarY4sM5DE-szPRl)7_jt*opaPpk8tHQa|~ZDe+S&o&SFE&=bT;Z zw}TtlOci|$K;)ki_B1)u<+9UFqo1+w9XT$AVGG;u|GlbPxoAHF_$fIc^EI<@FQC0WRIKqeYf;}Itj0v5*we`0PWB5drWN! z8jM|92N0)`mx5dFzc_-hnL^8Y__$9&E~mKk-kiD7xA?59Aj*sPAL>uj%$y(b%y&6q zs{)|GZkzh$kW43gPKG^k`c(0KT4HR@(3sfaag+7ca#W@@`=}~ylSR)M`DGZ9aXD&j z8Walo{N@$ytdJMHX_e0PXQZHM=De>Po8X@=d^TnBFH}W}hN+ueNdzfD=?N+>W2zzbrDl;Jo~8 zhDm*GityseN4NqEtHXu>l)7q}2s1THBkOWDM`D>{TfdY&?)~TXSaSq}LDG4V^rwq3 zfM0sz-g9|7dF|=oYr{b3uUmRMpLZYRBXZnRP}yPM`AbZ4o)E~)@+Z&205?ODkJu!T zp*Vdp&b`FV^6zSHBApSomYcwV_@7GdB!Pv5cPFvw7!qS0M(eY5H3h=Z$O5&<0iUbC zWx>vAvp^Z37ALdPlrb+dZ%|P$ zdph#|FMhjp?xb~*PEfYhqY9hF`_1D70f^;tP(W$IDUjfkVq4(1L#hE5{IfT3axD7q zIkFKiNNw4B@L4yD>5&(GDtAVS`vOqzZojBM_@*5|H0uB7@!`UztR5R0v;4E3{K9K= z`q?UHtqGHc4sccHCbL%0y`&Qp zAQW0?H!gU7de7TJHB4lDcq!If-t=khdD7@;%oXGnUd0rVGNf^-T8HJrnIRM)H`GQS z6-66AJenoJp(D+Vyowt$BA8ostG#d%_WqwTv)7WV->`#eNWA|#``Nx1l+Qnu6y$J| zl<6Z-@r9Nr`>cuw9*Z9$OXTih`L;u#AyDgTUk^~9m!NZGcLP}`eevUE>X88O5*-0% zwGU|f@OjZI_hAxZi?R$Xr*wVPoUd_~Y;8mU=dXlwnU4*8`Wo7nWe$v+;Jz+E7K(bahDc03c zUNI#m1ZZ^PriWh;K%iBcG3w={i^KeDpKKpwSTN->?1?lB2SaE!Kg{Vi&~glO{2X>c z?=|KkQ66=yG)WnmC|dUlyKp<y~rgg*{i;hF(O_$bh99pi2OD!Ef6bmM^3-8^*B( z{I(uCzyY8DddCSRoAL&zDd0DrbBGPMZIDQqs0XWj=6rsTon!K# zc~49pnmzCY#FQPjykk*I&KIs2bdz6DL9CGQ)IOa6{+%@ZZZi^J&Kf z?G|<~M{ASADhvtaCPcr&Jz{9Jr0-f3m1%KPiuY8y=8 zxbSgp^e445qg42yJ)RhT1H>oce>Iec=jen|@VvwSL)ZgxpLB z8o}5-VEfEcY>PfN1fQ$g3*qXI@Ix&djDo8MKtDIZ!~It>{VxP{6Nhc8Fh~;b=&MFuF! z4;q1O6JO<-AXC-!WV7IX)N4TScEu1hl%2_B@G8jsA2Z{WI>(i+d>Y*YcKZj9;4hxk|o& zI^llNy5-E2`KdFxLNf3riFA=za_Y zG=Y9^S=OoO`35Jcl}79lh0rr`i~2ahb{+kw^LJd8W%NJM*^$O1-db*AL67C7OYY=@ zrceFusli)u?WEL}Tu2hlc7yC?9jrogz_l?t$H4`ru>ha4UH#eva8YG4*#XP^xHjx6 zY0N;?U7$6^x02GgVGZ(4^%6P28rc-_GIaR-R>eXCj-KOexT6AYJnVY49koo`ANLmV zQ>1~Kh>oP@)2C0pNJ~83zOJ;yn~u!PJqd3V-r7{551z0o&QzNd=pm#}LQhhMayU94 z-I9|rkr%t;x}L-S>4ENx8a71*1G{uH;+L5ZR?d3(`{G6|ym=yK1E>g!hYr+5?~qzQ z6v^)HoM(RezJ((|rsX|d$=<^4%I%dI$l9kTk79)`ho%pW0#8L8rQRJ+py6rlO*?&y zPZ~f>K`ePXyzgM`_`)K>1k)n}7oTH7#>?5CtaZIQR3G)h4HqMADC}V#~dC5i~^LJO1aFGq@=jov4lXt(Kyl~t& z^#kfJtv`)&0*{qjQzD3=-H3*$C&%&yGSuv09Cv@!ms@^^&J$qd6*EK9u$ingdCIi# zt=cr);w*xIPYK7lOtK%@i;`4qW-2;0ZhL9Rto28bE;rMfg^w>7R~Mp7N~-+aW(ALxh#ueb zVb6GbG9B>643%>MUd%l+`(Fn1Kj_TL)u66Gjp4fxCWV)95)=G4PEj(|e ze`-*#+_5w#+aOOXb#dx&chon~D=@479zQH4_O`p>lmSy%)wv&xh;@2xD7?k)qin;&iSs7FJ7r%Jbl%=>20wtin z;(LrQG6mOWOi3Avg{2I7Dlvn}FX&7&AZM09LhovEWbvh<`3+vhYqwhP__kX0uW@$? zgG9cOiz^^-^DzU*O4KPiM$1#}5A=Wo!^?OzBEfss)f^2wK-*d!Zv9+hHziQjz?}S! zDj~7qflnwkGTrW=gR8G$&v{Rm$n4pb&XK;qdVO2?lZs6HO@Uwuf-kffpwEo+a;_3H zm+1(d1_IPj+Xij&j0g@CI!7Qg-^sYUzu3C-=Ec@T^+beEBgIAE=|L*`N5CJIT*@r# z$ugkc6KDg&IqU4i%*aT@X`bKmjC20*ZuZmnH?G&eIIP5k4Qu@_ zb+3D-x;`ZMC{NiGmwwfij!7ER6VRBJW;(=q^6Y~&+Y_LQ(69F7(VL#mL%Uh!!yx+5 z$IJ!xAIq%R`E`W@5Dz2k(zg^-M(=-Qn|Vg?>(=X1*(&oJo_%4T-IonmNf*4RpH)XC z4l5AcV=S^Dq4JCG$`WK3Pl>Ra=NZ;@fd{R9`usp0J-f$o^6K5>Ou!_j%EX96f+~W0 z#rmH2U2PSx^Zn>t@Chy5;-foqA6?!~KXa6}!qJ-b5$q$=dV6{B>_(x1`}wZ%*7en=erf9*+{jd`<}sryCy<{J1|t-B zK1AuU{7^e&#~WzF5!k$AqsV~&=BI0(Wt46@lYfSd7`{3GgZIF}t&;$@av+ug#o>J% zk9rE${tcAP%b!|n+iX)AeHd8<571h~QP&?gVQs(oS#}DJG*Ob=3i&+Oh3Ks4_1{vr_ z@O@Q!bM}mYn}}llCg@A73l96b=y(UZ=+W(nni-LIU!Lg7`+ScI8fUuw{P<&>W;dby znY2xfAlp2pX3IMx0yXBg459-28|XR`p7qBB6`u=Fzc!v?$(ti(wcMr z2h5`~+DRT(V=o3Q)*2{`55E$-Y%}bh@KH-Z-lCmFj$Z6E9Xy$(= zI|Rx+FbUc4YB$0-EAv-uqdd3YX!zD1sU4Zd*`FQ$KbFoaD(dg;+tMICbi*)oNJ#fE zq;z+eNQ+2I!_W-f(%s$NB`GCclG3fu{QmEI!oeJ|)?Vwo_x*|MP5|6ZsbK!T@5F<< zw1f@3e0%h0oDO;;_UN%%X4=vVU`${B6?5bc2Rg&Z02r>%LLiaU%`F00DJ~gb8_{8% zKP3Oq{ArZ1atv^olR(4qU8|h#hF(D&+t_f_j}U^+M!hbr8Bsiej@L(#DfM0m^Isar zSS=4%^^zHMV?%m$6M5YQJ!-6#QfpxcU6lTHWjhE#&{`H`i&V3F{Vn6#qg4_p4g4t#3e|0sU`BBj>I1eVl z^Zave)PMCn(-lX*auFj9%&4}RCpSNMD#NC!%>@~ z{dVi0dnJ&0V1iEG8t?`+>v;b!59<#o%c2M1NpUNWP%EL13Tst}l6~4@W&zn=D!_+{ z$;H8ec=3|_eEl18aw)3B$-pXJ-;B>6X|r<5`~ySgXKDvwxbDuys~>8LfoBDFz%p9i z70-8z_<Y7-$`_IlbsC0s)rJ*Gz@TL-Du^GBMIFREcymc6$ZPFd z>FN*w(;&Nfq671X_zitxh`?jO*xhg-+a7$s^$1uz#4S=COH?As8*jcj625IGa9C?Y?9=@SD4;s)bsS~kqR zGfCk6L=0X=m&P1YM4z}PAEZu zPA8@nOOcKI2X|3`Y-p|g$B!^g@bf*^%!NJU(+{%+t=F%*_%;1;9e5u2k8z`~f@%r0Bc zbU42xV#wO(9`G_1a=D$Ef_RB4E|8po@1MRPeh62HWBN$;WFNAlj=~ z=nz3y81$-qMNj$EH@*VUmg5WYSr4Z$aA}Zi)01-VjI=9{{3Fg7crAjkg%VNE8AJ~C z>NNE&3S}7QW8oYUkJ5{yJERrW0Pwt<0gr_4uew4;?(ve!BYY*6s&V(sg_`ZwkgCJa z)st@Y_=n?^fTe@@uZm@;J;!uu*y=3W2{fZntP&%3`afWWuv_~ahaTePD^{`&2T;Mk zX6!hm*Z?GeA-eFI$QK9H?(77Fq2jXvW|b5xW3;a{vW%$-7yD@S%RcvXzB^Q=!(}2Z zV?HH04MZdo50nnZVJHV~aAT-?25!*7r=_HNxX8+OK6J9!?8YH!EEdcfv!JnpbpOpXGtoRj1H=GPoj`-tyvB zM~N*)vkDi6%<58LiSAP0Re}=a3w%JWJ=wtPPf|y5OXvN8t5c;RiOgv8f(F9M46pva4VRqH-9Bwoj^9(7K;VH;tK=He0#V5Pri zPz4Dt99_G#S0k;}9e3ah;nZ{fDsf2qkb{*{h@NuN-$E6wnp70ABuU5iOPh01t?D67 zRG0(b=lG7Sspr}Dez$zYB)Wp;tLp@m@q&zzwMQ+G4Qbq+dF(_hu)-tYzRVvwU2@-& zh(ro_Qu&}wdXzU9b|^~UT?218q`ny9$TDM_-~9a#ixY|Nx4=mAG;PSmyc&A@_3Jq> zzBRqnw*th^may)!28X+}2x9#S^j*}}g)Vti{rHV8_M8m~nI*a7vqtOm`uddjYdmne zyKJp?rU!q1R$NdARsDUWPoyN^0l|ud z-^pc0m+`NVI1%3k>Ar=yS=zFSSVCDV5R;WxaQg{nNYl8EK#~0Zutcc ze*u3By6@Hg#fUz|Z!2~#3zH*!_l6yQvB1>iB5cZgCHWaI`0=!SA$<6YZ$MMNJz6La z)KG>v+tFGA4gG`d$8H(-V7QKe8M`YLlrN5N8B_Ut3oCz~k;Ol^Q~`>CFToTvzV zjxm48KvRFK!%#tx-EFODLf9jht-94-%ZtOvG#=qb20=n%USfYhLgEqpQ#SFH9l7yx zFB)+~QyaG=7anuub9Es1aawyJ>Kk+U&ve{i0angJ~_XLbI z5;FnCQaO?4ZpMfHOg_(9EE&?J-lg<;|Ut`bIRFi;_!8+e#9DUyvg{ zzBhiXo`L-^T6rOOYttbDwSs$TrKc9o#TV_)d!;i#!q9#dHV53mM zUcqUF+FO@5|3@sEZVB+l{mQIKLYzwwNh*fk7Nn%zuhKD5spDo@zDmuuiD{dOEAVL` zgKW_KBe~DZn~?!@`q(H|_Q@2tQqOMrkL8Ibm0>JA(n(A4bcl5yqDIRYc9hy8h$2{` z*#Y`-h5E;hhr(0O$zvouB|N-8L0GZOx~ta9PZR6aViJhWtu^?!1-iV9rLAoY2o?+P) z{Yeh?!0MZ>nC1|o#2uiC9h!ya#ioMFU^<1EbR^QiUDon}t{+jMH0B3psDqrzn~Kvh zs^KbRZuOF!Y_?j9e#3COKd6*~lSyf_lPsx%S5t`afBv6Mp(*evx>?g3j$5eWfTsr4 zF$T_}3mZ<^>HkS7om)QuoTG#vip|jE5h{#CN8|aKRHlJH>&%3d0{DWzVB*m4B7C;q z=|e}uq5F2xUguj%iL1E$txk&x_7|Fl7C+TXK@Fa|W{_xgb0?0y7^p!3FPGJooW#<| zF8g>AFLDKCPMD4Srl`A3!rpQGX7>-7kx3CfC>L%+`g6$&V3{@PjqVrM^%7n1!CSu- zm~iXd2DQnw*K%phvJc&h33#)9vH6(2iSMK2UD`l9YoX9ODfB-AlPKI^%GJ#bJ^Kd- zJZfH=Zq`|bLmr7DodN()#2*|CwmEtz3l&72=c4_&A}5&1Y4Rsmon=@a_P=K%XFMwd zRTZ%B69E+CZ`x=7{koZQTUEy#e;7kD?M2#c0g_i+ct(1G(hN z(0?ZX`R4k$4$p>O(7KoLFegT$_9M2CdWZ~E(YSOv!W-P!u#lBDEyxl7U!4`;5FpQ{l3weEg{n{r(u zkjB@CgtPsnu~lv94*$`YL9g7A;X>k*{#H4a9e+n#PM?nrZ_Vv3b)M~_27z|T&({f) zyZYkIf}EV(hV07Nr^9c54?X_`)38HpL67VKgZeDuw$(jkZmCnN^ik z(t!Coe;2N%34Znd)@k2atM4BBUN-x9lfJLdeYi`f2Tgt+Fbqv#>rR6Rm+%v*twn`) zur8;WFHf-BO4vT~Xe*x;V?8q5 z8Pu8WNX(kifgwmkiu(AQ0y-k#b%JIm9$n=E>{guFrO&j9u?zFW zyiDrFO|K^}M>DB3PaPI2I%e6$E29FjPq+-ed2||O)E_#63F!!3AG6G#!c*+3YgVxmmlVCMjf6}q3cqcq07{lLkkx>uVC-bRqXeF6F6P0tt>viirHePYQhhAtJ~w`w9lKemlV8t zj@~ufNf6~VGB1)nLx7`Udf)yN%E6$_phuVdI-Jfztm%DQVfyPXvia?h1>8Qfghx@* zD0r!i|I5=Skk~&d4OSA^p#|Fb_g1xRu=>rc2f!mZU;F$o!qELV*v;=x|Lr^!Ukpq? zre$|h^`zCiR37(YUPr{Ij#mk&p7ni=`xQA7V-gnp+#Q8+FTNbCoyG4>Rve7QXrIXZ z#K~{_pjK&d-^h{hm}eByi-E5sh;E+}uT&!0F|5Y}2;ryfPLB)VQQ+SqBzQ#Upozlg znMdFul5Mq|o`D-L`JtpGPbo+t%t5!#S%oW5{-6*db-smLHk;yhQ>}5Xaz#t-*-@(%rS__7MQzQGC$RE7aJ$ac+ zJJv~Srer}Hg*R;z@?An-J)J0ca*TY`#WACCMuI~iDV8t4i$3?aiM|m;OC7SE0A8yo(eRL-YnVgSef`dI5fbAjfcNA9??bSKSwuOmP0>U2T0o9WYc-8 zFLDV}UMnfc?;k3;WMjwEU~Z|w=rM|*jf~qFA}t~KS?T1b z1|jj)d@mMamwZb_a@6##^piuRzf_jQ9H(mvb4 zZpFDQy%Y3S8qfx}d37+z03^hi@opu{^~=H&?RTkpXS4k4TV*alE_6)PG?9N;yAEJW z!TF+OL0X(z$ps~mwRn{A1daX`bG~kfMK{4>)jzWwj6ym{TXJ;}rFdEV0kz0gh&QPMsjdJOM~WyJ;@Il#?CH z$2ex=pUt27C~K%kAl%6I{Kea5%?1GimIG8R>X@Io(W)Z;f`Pl-0@)%o5L8a#rw3>6 z%ESj^Mx@I$raWx7g}TIbSr@hdX&*(@UqW1?SE9DHIU1>u4;P5$VF`D%DJ!5@u6nVR zQKRoh>o(E-3{Vxhd0uV|{?)Guv+*w(vP}PYL530EC}mmza}MesWfA*&;W$w`Mlr$Cn&D8mSK_D`0aog=yQm-(&hbs6a zpo;IExVtz5kKiCL!W$>>($9pXFl$fB#uXFNnq-wIrh(e?7}_?R&)pt0S)*OF?4G=~ zZ{Xs=1HK4lzjGI`c_~;<6GF0_CB*UU#qz}xLby_)b%PoR#?Uu>rN1)9Ita9^bune= zec+}*`3gujAnU+6;MN@LwHeGtI0z<#%)j?;0rj)tu&)pG1}V1?NgqFU4;^vb9w!BY z)Nk3hV#8}o|9$5HWggiAoG1^XbHo|%`1iT@N>1n9-eelwlXGwrP<46sGR-w;0m?-i z1`&p>e(~(&!sTR+(7Zu}Z~y_|lkDNV0a^DbYN7{48+O5bzSA~sAU)=;NG_;){0`*P z^4qnpG?^(c^>?IIKmugTdcp`-;qk?k!BH_%OC1rCKYcbw)8qfjP?Kei2UP(d5&V0m zJ^WtJ5cQ)8kMZtC)ah?CLTiIK&u&v8Gf7-bxY;w8+IKmBb+TjGL@? zYi=A-cSmqRj#J>5TX>u*aPa4Q(rlYNW?3Qm9hQc?i4OuGU-DX0rM`;A zpc8m`xaG*cfEpNNF6lThBO@OpsVk{&}2Ad!woMqg-Ybh}5s^LdOkw z+VXR4|3K`~PP|uHkfX=1sH4-6T4qgKs~m4^n2-6oYwm2fhLHoTyax8(u)Lq_9b?XA znYi_$mazEjw^?O$02=CEW7DGwKe)Am4|+_WssPZ!#&Bj9W3%dTq9zL#>3<~*vgl*o zv&5VjL=*q3Ncy}yK}#3vfJ&UGtFSX^7QpqhA^rtIpR1Tb1j~f{DqyDj{o<2%ttfBN z{#KhZ`JMC37#kWF>}8@a_0xdmtsYZwZ(Y2ELGoX-i3)w;?Ke&=)XnO!0Vhncjkui` zRM`vLdK^|He%9vjvH>}@RjWK01~;z;(kW}~*{@*3ZZW7_?q^2oujeaK8$H5OM-)=& z*x53zwPKxzP3^tfPjF@DDC|{xY>F~%vRbY2t>RIt3(_8Tgl1nf@+I9o3lw{wPsyJF zUK_B;@;XTWGGj~N^_#dc=m#%&qz{v3=hVkQqk0fHDcZRNb|VODD1DL$rx~0JP}J&8 zqp?^Q38B4mDb?ub&?FGl;pnZi*;@2f(&UrgbYG?5$x9m4yke#|sI~03%mXS)g0Zaa z)2L_qYSfp^=`yd)xPLbtjekmuI%C>}DD_S!{&p?Wc@Zn~ASZY#wMqO*r+LLNPQfFo z%#^vuR7c3=4pXC)pg_Q?d7l~Bl4;=^e8Fg8=*eqqGF zm-?Ery%os697b^^e=5odvCDlC(EY+R6Xcu8Zsmi|!F{Lrgtk@-7X9d8!yEqBM*>{` z1nfFV?F|G}$_F7#9OEzbI950ze#xGXBO>^QHdn3Ob2EK`szPc@DWxy7V3u>Y*ecMw zl|H?ypx@GRT-MCRkjOmp0$&Y?V{I-#_~g>=t>82@lTv zNhw(mCep2GKQ3>lG8Bp<`44uO9UefTK9BLf?^>EeQu>DIY5dmGWTz?fteVYG#u82~a0xlbq# zV}zD1BngnU(hz)6K-*|vz$bbFgv17+q)#|uSA29A8(OFdBj|3(Yy*(_Rx@?^32E7i zh5+fmibRnk%q|X8`hwK7npiTinimxI+hYWNp9LZkO&Nk_?h_-#_eIz_lZ60sv1JW$ zW7emo1a$#`F*_l~GM&YmZ*suLg}C{yFcp4KzlA`$-Jvq_D{_$71#M1Rsp5u2e7x7+ z1QmZiH%iy!G5VXR&poP*f37*$G$|bU|LlG@w{qcJS%jR#RABFm+`h^;n~!omi$p{0 z39wpu2!K`_FXD<;;uiZf)cOG`g#1j-@&QCfwpwYGo&Ia z{ufHM2Jjv$F;8IVRH&%RW;aG+6YF_)T8K|i=tPV2!1NSFVs*WNh2hG7RR{R1VuP&> z4|MY}D7U%vG%Vta$Sn4A1^E*x&)O0(oNv}6iSY^m@gE%ggfa`#sDYZ36=llj{!7GO z1Nwzmnww~EPM_h`Q&rz@LVDX)bvOQSfND>S*Uz^X5fiNW{7AnemL8gEaAZE(|z}kM)MF^t%I-P2IHZ|BDYR(*9;=dRiPB}V62$L0uGLBUSS z=f0FF&m*#uozoZ!ZyvWUxRfvbN53HWgJmGwZq7X0b6XDZ=J#>M+tB~00zJsiUee#! z6f&^ux(;)E3b9j7yjfHvUT+A1HYY6LnQ$&!pdfw!Z#_i^18$DBROX zD>{52vq}WYLtjCTc)UrCVF8AyzKS05!ZN5Zyf4BN5BQYbayt(Bo61&PzpeCUXXfE3 z-3@sYknqOVb+_H^k`~Z@R}M;{G#}wzt~}g!5OPb7?Kj}F$<3voddQ;Lx~%LN>YRCOE>YCuSP#S!BEqmYm(l1sBHZ_-jK^~1x~iu}ry zXBlwg0ar<7nimYXE6=ms&*Kfsx?4=*~VtE4h z=luWi7~vx_oUxzczVoRALk!A6Wjs7QY-Io&^vKK1rMu~Z>nTAL72R%(J8;|^5$3dx z{(RGFbN%rzb{-1Z17lk>c(_DS3dLV*AcDi`Owed0zzxrQFdJHM(I^rF#_&uGz_uM{ z*8a_;f@m}F)^Sp0pIgK@;6ey)>aneiay>TL57mOfgpxb@0hz zY<~@0Pf#0egC~~0C~Jv*jLwbXV14`=*07zQ2Q^bo9vWjzNiEEBh(?NX7n&;Nl^`FGbI&T!XMYq_ zJxuW8tb8*Oh|a(V9X7rDRhjXesBH7LP=WXb0d3#$5we+cbVfix=O6b-P&xd`1|WZT zG6dI<1ammHZB>LMM=?-w(CdjsC&GwUENsUjdUE6Nuy{!Nq>}P(?L_S&CU7Cpz&MnV zCN8oCi~bppkY0wh=6+1X=w!uZK7P)_!!R&)ftboss>as1=jQc>blWr>O|RK@$kn$r z`kC3)=$)TrnvYwFBU{_6jdmB&+o5rITnsu`JZspUU6>9v23;@2UT+WV{TzyLEQw;| zSmM;Yu`e6zj+%m0Hgi;*6)=|r(e;JbgGeYPh0=N*xZbd3fmxXQFpIbA$62a$^WX3t z?~RpIl|#%A2L_Vl-=dx6Y=i4x5cgu&BFd8-^Z*}i5eqrUDjQ>> z6RoNuLzzjKx`m^UbS=ZlS11RXIWf#Z(*g*ek*3~!=N#dNrGyv_i(no;u%7~r?JR7G zX7S1L(?RY$=JTVnko?^dB2`PMN@ZdTE2RSbDCexir?yr3m&dIjm^5;=RgCyAR^PcV zdIbmrdA7cY)~tT|#Uk;TjZFvuyd%njU1a?j3~{G$11U5G#y?ywAtJ(jt7BF86%bt{ z%V2sTJTM8l8nHgNbv}*45XZn0_R7SE}SNft#1@hOPYG6NLQ}9u$@qzZNj&FZnExo zER+d2!R>Q@cxShB8uy7pW8p#~&&W|>3EOmZ)PRyF+zt;L|;9&@E)Cg`KvmK0Og zU~EG*N$yuH6<{j2i}7;ki?8GJdS8sGjCi6-q$BNh%-Z&?1?u?6`f)h9;3p-4n5}7= zA}F7mSoy!iUl|u)Kj0~#2~2_fkt3HEjv1R0G|Rp0FE?fA=wT5k~WNl zpJsn72PkfUJ0+4ek0J>we3?t!JhMK!4BClTaj=x^Y)!{)Y5OjmN;clYg~=dO442J5 zSFAmrT1VNx($SAZu6=D1yYjai^eq?t_jgo-yE77Ksg9;O#t!d#*9im(#`m88TMKml z0qzQPyfwNF-V1wG25(+q)S>FD>dbJnVON?R+ThHZ zn9+#ejvVdN_`HfN;{8=KT2>qt-Pb4%A^l9nJY<1j4SN<%e6OY~Q77!M2FZEMMeb1cRw+Uc$^f0-@8erOJiLDY^9$mrVP-Tc%q4QE5>uYpKt zg>xKe+KmOG@DAhB&4E+wnH%s%ozSBAg?r&;je#fEb-K^bgsfqfu(LGM+y@nh%C_=N z^S%Wl|2Q2N6;CtyPUQ>o`8!8hp-~IrQTh{4KpB%OI|`Xr7gm3HOgTY6=38{VUyBD% z0Pzn(F|$TYizbO(_-;n;?jUMT_%fuV*V|eI7-+#`U}8%k4U;lsyM1h?(vPh2(vaOm zEyaDE<2^FR8AkteS+FxITC`pXCTGG6@rQ_UE10>3@5cx?a0-h^!sO zw*n9QK1bbYD6AA+==bweVAfZI#6Q;og?l0jMRRj^f~%a1e#$)cLy#4{8q-w-EXv5O ztJe7`n_&8p)Dc5e1K3FXo__5|(Is}`;UuW&nbM;dvd;%15Agu&a94G+C~74--vcq4 z8Cq5m7a%6eM4#Dke{5BzYpLE~&LxKL?YY>ps9HQ|HNglcG@8xv+xPdePy@19>+R^k znB_EM|EdTTa~3D@|5P!zTuzsvFQjfWq4h8)`YL#r&-|ZjSixprhn0^5TgM5dRwdQC z|80r@fMR1=#be$$s!-1<7l+@ye)|c&YlLIpZT18Fv%H!8b%SNL%2)hdN|NuNFXduU zc?X*)63gMVOhqg%YuDN9GHz<^{AeML^e@OD+eYKb4h)2HEJJ0l!3jjszp; z^_9H6CV!B^s}gHzIh2s5tmLDoXb6Nut7}iA(6nu+_LD=D-H3f=`=IftC{&_~od8B< z9e658U~1_G29kV>7ZlbYgHVZSGlIO696&m!FEMueYM7*kw%2TIk zNY__FBT5R&n3Tls@G|1+B#PVgS69V*-hZkufft2;j{H{?{#FEU4UUE9;CmCJoiz8w zf@e=$p7}1na6_lS_#1FYl|kvOVb1j1tYU^bV+9ngdH!=b0okLeHKe{G^K z%?>L-A;dFxAw8#%?t@K675>;RBI4KWu8#}-0HcL1#ZF$=$~-4=y4AheoR{27Lqpb{ z;ksGUJZH<7BW8PTlE4deZrhNbxLz+7VaDbATQ*1`^a!UP!xsY~wp5u6!$hVWFmC&T zHVtB8H~PI|Fmx4dFGC?|N!~F;WR7yUbxjR_;Qo_%mL)IjA;ZHPUrh8Hn_I?0Zy*w8 zT(Wh6R*@DOv-$)<1Tv($MDLUa7hQgXp+^$N2xAFi9LZCdE!_(q!qqZ3$%!5QNnm1$ z?JxRW4`QlXKmDcdT}B_|T3OpozOmkS*G3%089{ zbT1QYFhtwXC`nK+NlMr3gGCeG>nv-KeMma9B%B~+Bco+2oz#~9R_)RkIyckKp!IfGN5DA4F3bJ`b*EVvjj;%|rXv|^mE1tu#n+6EkSep zME6z(bL+06<;4Q-cSNRl^Y0 zE$206wQn8)Lb>yMAG&Rac#8|Rwc zo+Y-}w+TzU$Wz7yxkX)Ty5-ZTU3|2NIuw;GCAN{E=QFw5w{%=P2PBv?flPobu?EYBxxBT@4qGwOU(q^p zmAV>Rk(dMyYf|-as$HAkL3C4ocLbcMNDuBw`!9iM02k#(;QQ(Rz`4@$RtNAN|8TQo zl>*nNMYDorE?oKZYdC`xL_XukkK67MJYqz>;ck4{gFErejTb}rc7ho-Tn&e@k8t=6 z((<99pjJgb!28ekEK5$D&E*9SJz6kf<~*|aWz}}h5|~7sodrj`7ED=#lSesBzRTf+ zAtMpBVqsFqhxAw;&-~6Ek875%9>jWq68o}NVI%d?$5AuHXc2DEVk9V}i3(6fCdTMd z*O#+R9xCj0Rd>WGy1T(y2A!ssc92^TpjU9 zmYdRhYoBLdz3a*vIXCc59?yB_c5Gw{GXe*7eNPEq{aUe@D6VrJb7rTU$x*HvuN9sb zn5=RVyoF!Va0-XT5?)9Bg4aq=_KJN^f6s{1k)?FU+7^X$`s5J?S|n7v{E$g&3n;STX4iRLiZ|Iy7tqx*{Z7gGL) z>57$wlo)|sIAwLe)yxr@je>@t%s3twKP*LX=V3+7hW4~hv@#>uerTl5#rkiI^j1301ckPz>qR*R+tv_Nw?1gYP|04SQ@_ zK1@~!DCPafv-OIn<5B~{oI;&vMv>c=;jN7y$TQ=`@s>`*0k`UeWN8y)dJu=QMomPA zUUChFrEy^N-2rtYrDtV8wvWuq;yAkD>Nq^4?)Jb$mQ+g;iocnd+f2U;>axN@zae_^ zg;@$ky|?|Sqbo0m|JD+ro;PolSLvz(RK*yci&5*&k5A>1?_Wm31&fVP=;AdddQ?h+ zI+C0?2>}>X@^8UQ^mMnE2ht(DGGSCFF9J(mOe*|4e_?O28)h^$ND{=<^DWDVixvE` z8*}8x(;Ysk!-kpLjxGuq@VrkTLO3L_M=-I=sBiGHLE@ITa$}B0ggbU<$jj(yPW(%) zNtbq(Kg>e&)=$a(gj+vnO=3JpQAAIZcDAh~q6sp2P0T*~gGqxlanC>%7)!7|$(=f= zTfQWJ94=_a7g_<-lNLXfqDjfjB8~1&th`?5eIy#o9UVeKo>wMDOEAeA!6!Z%CFor> zLckH)I*xsAC|y>%@=(Y2WhvLWtw^id2brflJ;9?HdPNb>kt04qKU$);G~kHLl)?Xo z;)kST7rLeLUhP%n{KOEG|Mt$D)Nx{nInO0E7Iy9HN+0M-AK_97g8&qNQ#1%TtNcCP z4MTFK#fDqbp_Y|Ts~<%KsGofg-faECVQWQ8@I!rJ4tKlJ^h`kexdFtemJ>xA;_3|$ zi>Tyd01-1=^cKet54p>K#O5Lr8U<~{A@HPO8Btc?M5(@TVfcL{m5X(j+~c;PfnIdd zOmZ*N7G)PM3PSu%L1$(AOxl#z!VIEHZ$Clg735 ziI$dyhGmL&3RltT{v{l374d~}6^}K=cRdbfyy7V6&ar%D0jG;LX zHy>fr)(DG&?ati&-|Wfcyz*tcjd+94LGWFlU~x?%pfi13*$ygYHd)vOMDRUtaDM8f z$4xC9kqHk8Z%5Ct2_KLK&Frn}khJoIbZc(C34?E2QQ)%={||cfzuQ_-p7%EXgUsrz zb=5xO`pABxBgb=YXq_JIgy{P;rXL@9RBN&6Lwy4NpaVbgnmJ1ib)dmrO-Ji(yq86+MlySOj#BCoxFVqO+tt-f_}H) z&r4y(Cm{EwpQ63|mL1{f*Wb!CeNEtnplA@QVzQoqWSH<{IT2GYu|-AZIwb3X6%ywb z*G{HP*;MpCEI08%;hI1w*0{VcrwSgXsvBw3(+g9;XNH}(m9~qT7Dn0uR)|QbNM=tR z@@;VsPo~-&Wv>(>Vmjd{Sl3bLK1-O=$ca<@e&*L(<-DTzbIqwSDAlcv`MpHB zQQ6IvAUN2Juxg~8?go^|$h!F!I%S`~6%GC|8(IUpba&UEfNeV%mM{pgclYn;MYE<` zuuYO2xp&OrPJr*w@u=mtvXI!y`!GxJW%&ekC?BgrKu7pI#EXASeswVx4~5k%@&N%u z8)6+u;j9A|9~AO6b2zt-F4eWlR|KJpdG6tJ?{vaqW`X}NPfI>Zr901(w*&o7PdYBLaQ_x^yM3swZ#9j)7|muWLdOI z&|L!_m4QcduF!)nJ?N%@)rLc=x@Uo-K+f41cWQU}J00odMaDg&x6;{1s?OYji}CTp z*DPmJn~g#2m|$*X>gg4g@yZY5OdBukzr($m)Y*FIf>#+=HHMueZr`?z1%%aSaz!$z zDX0#O_1}s|#-+FPrAU$58j&v6bm%i8As;CG&=q(344`U(*@+bKQbvpk(jn?8cm(5i z905ruhJs~rb_69U-r^-p@;)Z7af>GJ*9!}F8~S4c=sS^n;17BC&$IR|I=2X z10T*)%EgKzYTbdsM`-3A=my+Rjhv}f0eBPS>5eI5efcjZdF~BQ{9wj>r@M&~%X%P- zV&vwTY5s3{HsGWFNw_{-r+$n#k9|WUctc`S#|-nzw+s=_LVd~Yf9r&j51iiUrcpV^ zp}a1}f6N;8*pic>ySYgsxk3(WYEYoVk(*>9Fn{Zy$1F#Nd?k)~@lcAw$!L#~6hz5y z#R}fSQE`--`ke4t4BC7ZMrFXyW98t>{FCR;M*_Xi+Yvu~Lue->Vyuhh4<#8#SJ9cH z%=V1R)rXSJ=1WPEVG=tevWM7+SLcdE=k6H972UA3hVhC=&Zgb`0US#=)`Z`XKJ$nc z!c4_1hdn`ZGSx({^#z|gcY2wFsm&NW1HI$H$Z8(5cuR6l6FpXCtp{qh9t{gkrh5eo z4va2&hvS&+sPRlGlx%xMnni3RV6J)6FaG8vbL4R7oyNO>SH%@==G+m8=y_ak%%H>u z&G%nczJmINUreZtcmlTWkApFAI^}<;mPHbqoPt<>0`$MJPvMinJNm)F1wxPhjoipQ zm(KM55@mc`a>rD9H=NdAq231kFVn zx#BOmGdSojmLR+{h3Csv7^SHE)3Q#I_&J*wU+M1Hv#(-HTyIeoahpzWn|mRMWjPpay8uzb3elFV){c8@SAize zRdCxTT2I@G15MMMQ^z{O6n%|G?k7uA9)Suf-IY#=&p1WV@kxO3P{7&t(G8dAyOhP& zY8sIh$mOOlgHUR}Bm$ZlPE@@j*wJRVzZX={(n(83Gc|;~;i7Wj9Jy{e-DO1`n1ZNP zhhzHJrdJemFIEeb&z^GtQxetJp^i0HnbzC4iknB_)`hLa(@U`a+e+ zRJ%RyCrLe0o%=qveReq;wM?j6)BR>42B+G=1(h23_x&Nu-u5+4_J8Yz{{La8 zmC80y0O{$ImbonYf6q?5>*=f#m>LGEoW0pshX06=B4Df2uDn?&B6~F8s+X+V`}UkL z1K*67QQ(>=U8~+9F zZJUq3`%d0UDycl`pNvuf9=BnBjLams-W0maP6{rUvuv1`w8@eQ-5IU*3{Gt0?jNtl zltJzKt~2R&;u}Z>U25xa;PB2CGge5tMLgU^}E?Bp0Ki6OHD@hTDf0iv0q46(e}_XLII)5t zjv?CFmwip)ag)jW!H$9;x~*UDr^$?SDHG?&H#JjdZrD3~uUJsxyQHacf^R~;E8Eia1beg>=k%|B8S1myl^Y9uyH3s;ew0A$e|2^L)s4PyM)Oiixj7$1x4iHm3%Vz$<%+-q z9TRz~tGCYob_&rrG81;^#wW{EHUwUxu@(p#P{9 z9wdyvp8fWqguwWErXq zgD{T8)v`YXy1|ilkJ} z+++ok;wQZ7Y;q2Z^-Xu82lPZ{;=m#y)NAWU+ZhBM zdO!(LCYS|n*rcwXNn=H$y~4NjIGu7|F`8{urI)5H3MLdM@7izkE(qasIIyo|mmHq8 zACintIIR2<$d5jIrgXpq#!}kyE&l2bX~4;xDc1 z+zTsmjr$mVh!dsQQ}bJ1JRR}APCLj6jlvZa-OsK!qo`UHb$7o6f#hd(xM=BE3<5?- z*$$+?;~We>qmq!I3qr`{^`j?L&J7~E<%xf+F?kSBv8dD4HWiL)XMNHIH{w#>+vV32*V|41KLtrzFmhIrF5ydDGd6GNU>u~=3 ze>9zCR8;NPhXtf0q(d5pZjf#m28J%_W+>^9?jD+#TLoefGWgZ(kQj(~Wjeuc0ig)<4%%xq4T6D2D!{$AJDAnzS*NsDv~mTR!SliJcKI zhvoAKSEj*tR$bVRQCv{}7D2oZQGGnCQNTA>DuzyO`_aoFB;x){lx)pb5)q7a_pp_k zbT~@Chv@}w=sMWWmbG%!VSHy;e!vjt^{0hmUHuN#Cw}HO!b1K%UF4_HZd5012;o&1tU&|shr zjJoF!%_1rZK_JJ72uo>2qYwU_o9U2o{qBZBUnf4!AxOss_borU{-0Hsx4AE^8k6W2 z9I3Y>Tu#R&O}i=}vqIn2E9c;*baXaalR^XK zh?vWKXispR64jvMllOlR36!Z!Jw8{ao%-5+=4O=n#1zsQO8I=3qr`Gq!uYAx+XXus zejzzBFJe%k&DEJxBE#ME02U0ACdi+&#_9ZZZVu5zEveOtfkaz(?lLb&YkHap%uL{>GnFWw$e-q_PtnOHr!$0>MiqG3M&2Wa` z1{|Qyq@MtP`)xJ0RY;`sn%@;JgjI9o1dx18Mry)aFoe5jPUqkXb<;2s_sL>UOD{u{u1GHY>E?>WbFw9Gy1Y|J zN6Kk6hGfJk&$DN^W_juJ8cYh*{ElSON55ZF7w2Y41}GDMv)_A@Vohr!ok$OR?-i=f zR$ND3{+7&cfs9`G+E<;UIJK0v@MF}{I9(f}8p$?}9-GYw7F!oCi^1}85=dC>_# z+KD_G7HY!DZ@IOmozXiLH*ArqZa%9`$ONPu>uL)SH0$GClXqf!0BZm>$fhZCNQWp8p0!aX+tv3 zZ;$3(*X#N~AUU##HEfSPk1rEF33PG_M-#moJxlAEZ zSnrjmro0zp9c3V2r**=6{z{;C%&e(+!!{AC!~u8AzxW`NxY`MN-U*^?d<9N{M@}0D z+#Hxpg3o|1jbio1BwBtpUIC0@x!9`Wyk*Dj^(w%l4eqnHHybE)PvlI_Zw}TvJakiH zkxtMCxdy}<DFh`r<@>e!jZ6o;H*FV+A>nwK<<2GYP`VY+@eL*-qg9fPSZd zTLlMYkkkp>WWy=kpmVI=V^^NhQkpw*(MF_f+y}VcG~z!2=)>!MH>bxK`OJSv*N4gN z7iGAJv_{Xld8eQ1mFpF*UDV4BBp(qyH+$dzpN3NOKkBjKI$?Ad_1#5$$rZ@sKNNVk z_k26tB)X(kv4w^ExIg{7->lp?>8Y#&~m=r!m!x%jSzm9M9Dq7h<8zEuL?svD^IQSD|LL7 zekCq&o`ABpFeH6($xlM_fyF7TDzir$Ss%P$@4u@FKlHON#+KJ@h)mYmdP~kV^ z9p=jiYpBGNN+`1QDb#LbqQU$V=WXG4PHy!-pxi;J{0SvMQCB`0q{sRveunZoG+FtE z5;aW(RGQ?*RF#j(;PQU&Uf%144TVi%juzVdjQ!;*jR2es{51m_wEm>uOi#&#eIWW6 zutCAEV5#6@c;NP_HDyl_A;cbQaV_ZNk}jsf)cvRRBr=)hG-&m!RK#G}Ia)j~#yCr% zJ@FuVWOLeZhs=u3YFrE|oU9Y9Sf_o$DD8APIIiq-*bx8ZTi9#enbi0iAcS1KR+SI8 zl1ju&JcLRl2AcR?4|+Y#=W$fK|L2LlDiP>Jhi|hp{->+evC5tQk8&9PABUAz(WehT zHwbPPt_l2m#v|DJ`gC?}*Zs$i-F91JE`}hwxWHG}mN?`f61eqHiLZos!NAi^bdaeY zm*v!@SH$lQ-mxEWt(u&h5^<3Fi1E-JbhwQTTnL;KKH@SQ??;Of(92hPirH2kDD#Pu zdF2`korLQ6p?DIt>~-CMw3zFXMl8aZ^9J2W&a6Lfg(!O~6?{4VQFrEH&j+Ru!?(16 zQT2X7f+)g^O0aM4TwX>F`r}mnXPa|DbKW@xbNO;CaH&&&wd_brh8h`d29)lG)>h>l zk5nwpNEO1vNRS0%DRzS!Tew-YAAs@TYUV~Q)#}&_#wzbTQg(mg`l*q?pRF8x*Qq8H zOg(t%nPK_-3X`h3=}ke&$^~uk4pS)5jRQ3)Gy<~I6Y$+}Vky~Vl3M49w$d8>x(xuB#{WV+O!3_5ES&TuN!`l#>&(4ZKX|T$2f4yI=-vrCy`Eo12gj z7q$xR$#JT?8S871u*AbHMlfRORTZClx~Sv|f%oY^PLuESe;udZXQtFz&irIR(%RS1 z`~|1V@(Ob{yh|IgH)Mqce^+vq_eUYtKIpqWAtO9Hi{z<1#p&DK(fiKvOj7G-Kc!5U zRoJgdl#n$cxto7J^7gf~jl&Dw%}Ml~#eW^~fE_sx5^ z;r{^KglF|vw~?X;G&e?LeCw8}qYj-1^qjaMD$-6phP9<|5%5j+J{*jRvi&e55H@kU zdJjK))ZPK{Uhd)OG~JF9Sx%VFWtQ};@(G94nye{7i1^vUd!Db7<>*EZ!g@(f6u3Sr z#jX-UlVi4{IU=6bHlU&^+@~w*%AeN3S8pn>m~fQd%!Z+xy_;3}CBrMh1Di-l-h-tAj4h`g;k&@gdWn#$+m~c|kr%ETEaG)0^ zP71b@EA}0Y=x>ge1W0Dop1vt|B@ZTk1Pe=3Dr)@14WtyQ@Eue4tz6$@V&P$wZeg!nOH{N()O|8=by^r$is4M8rC%X z^#wL)%kf-0PfY41bQa81X@q(A8=OB64}b3cmTt-Fkxg5d39H=it@o>qziexxTR9;p zX37GrkNp^~r90aRYQgoj%Nlq$k8-PXGh&UAaW%wsNzr>b=O9S`gWsbEt|~WZ>xM_W zxZkO|I?+DB_2LOv%`KhEfbV|V+|;1HY3p(QePm9rV755Zrp^Bd?6i50aBew!bFNk5 zHJs9}Y0O;14asf2Y(Kk_3%rwiC=GmK^xHwA>al}^-9NQBy(WY6Ph_OKmtbTJZ;~c% zX|3m2{~nT7F|;Smw1kM>w){sK+OQ#AZ2hxlccxj%D%HO5@RgRO?|T5YwsWN5XW$aQ z?h?Vie1SJLZq7TsVV*x>)~|d1TMQF#k+pWenJ(6rHX;w(g)$-QVG1^Ry`g?#>aox0 zkIf_AlQ=x&7E}X?AA^gR75I?W{z&ad9Z!1cgmS@LV=p8;NyTqdnTGO z9v~NFi+s3UM(v3NsAzsi+px>8;@k&D!TF->FY`8Oz{i=|qoG{K*9cTs{x$Mv8u<$X ze4t_)QoA4?ZOI6`8$(F2qba%r9SEq8Y4gym2D}Xv%rpYGfpTllZl4%l^V}5Z;l&hO zdA^QC?27KfrC^1DS4h)Y2M^Y>@^1X)eUzlcH=TOR-QUZ2puUi7@yfgluds9y>? zm36Se<+=+bh2LbU);E|j*FI_Wv9TcFTRK3hVDiC&lBRPPyK5*DPvS+GZ-Uf4>Hg^a z!bc?+-mMJJg9G`H+zbYroHxVtq_l`-c zT+uxkxy0Tg*%0l}#pbvt$@UfJ_LTXkg>kp9?tC@|VO!nw900;pgky7RQM`4XcNQW@ zizjb7%3^U4ct*bAt!2EsE$bO9`;=;Pv^8cmfue^gOn3nH!Q*alS{)I|^_pImCO+h1 z9q%c@Q=n7~SiAb}f=3g_lf$EyQNNR-$Cn)9r31lZKz9`WF6pC-PR>+a(cdO6j ztV;S`Gns8q)Gr-+(TG2Z7!SLZ@9dSNT=^(0H>Yf!`30=E81bdJ;F9NuDZ*Ashv4c= zQ;B%g-g(4BzZ_Zv^etnS*AKv7;Hb9)!4;}tKkhcie%Z6(B+GmNHqM04gzrR7t$=Tj zr1ViHS?}dXdILDz0*ju%fLh^kD64sbl`A#+JZmz%r$ic;*g>4-ZSE(7Gyd|?6ASA7 z{F6cTFRSi6Bz(`T9?39xpQt>%Aa5{AGs)4qF>j9a)pv!%!uk)>JC9GamoRf&A@_pe zzfF^Z=W!!D-+ms~iJh4iY7+5Ckkxk88|1Z@$s$9lSR&4Orp72`NHFP~)Z@A-#G4iP zRx49Oi5JzdV^)HiXzn%{^3Ofs-?SbFvAg{Dsp0pqit2WST!HSVitgzDOyvL3mpC!H zhb8qzEZG=1;}O_?zCw+Dc%b)|>PT3Ve{lJ|s58!r6i_AU>j$?MhrG5Xvm=ma&Ku+w zrOhJ4^g%?J?U^%VHyyC%YlgAER{3loEsoZmkThWBn(PT_X6Xb&y=oFfr+uB81!3vi zixHL{UL;B?U={9U3Q1{X#HBgSyn095kk24KoY?BjTyizYLH!nr0rsz~jW<<~?}-x8 z^XvQ0qe*l#jQ`$s)zU&L({C__?gyxtUHvc6n9cxos`B=T z{l+PMefj_=7PC)GoQyb80YImYL(P_E-r1oCUgI?`Xeo~b@7=%xbnLmZY!@c)v+!n>)YzXuzukUP!6-9pxQJ~U_WUi&R;F4Ds3l^CU4 zIhd>TFunh<4q>z>k-sSOF}%3%D{|?(>=u7aToq2Bt6h@qtK=Tp7b zOR3$Y9+R8LFW-&asJkZRrIk@7q&VHgnFK9iusyUaj41;ol#RT9?morzC`*2W!6c_ggL0Q) z4dCJUtePrwt}hc;_qHG3!P#E|2MVPAbB{(JEg@cqV8-`{#+^4<%WYD*wN5)XX;vw_ zgNX-?f#(VE1c?H~agQcz3d&y_To)wlz14^LC8cxx%Y5+sFYO( zZ@#(@E`D59dB->zs+Gcb!M&(WEEo`T*u!&UG&1b-2nZuroKV*41QRX~*?nE7q{y|C zThlaNlZ_;i`Kf0?eYix2M1}GCX0(JAB3`{T79imwLMx|$XMx;A?NPrvw9QaK82B*2 zvYle;oD4>$`=Pqc6Pt|1cUg%zF>Q{N**17rxIn906f;?!`L7s5kzNzoKtP2q9olsE zMdGo@j69pCE>+(vH@Og*6k6iuuZ}^X6$;roKzdY46x&Wd>JNPW4f_!`wzbpR*Xjll!uE+6Un7Y9f2!*_k*CAq#whOjm&{g}T5i3g3fCd8&m@O+r3$#I)Xiq45%ZVMf4Hbvg3sA=uGa1O3kYr6#<9?| z@4IVXvVuK> zmOijoHH47lAH&iFZbbmX0kjDt`Up4bLFU{EUylnCtD>jY#Is}Yi3T}yY39AusF9FC zhO5X2?l0Jk2m{ct*S^wLW3Gu#V@;LT!uz z$m*@7S7eNNoE5EPVw08q3rG7hbKOHfGh>W7R;%8xU=DqWVQANn(Sbj!_zCoq^9PX*4(WjS20!UrT= z4;)iMMfoA$M|6!1nT5by$ElWdky5^h)pen9Mo*nxXU)cSB&{%l0vlZLW_@vD&|L$ac zd(luvRys&jI^(52@8$u2EAvgTy^pkL?z4)v058>pSY5^N-23gK`1=O|^x%Xqk@K|$ zE<@;tX?*yUvdpn+G2f+0u^*9Ix5)g?gq4{-u&nhlqwDw*LSJq5bA_9`_@zicMz5r`t%!;Q zO6)7voBB3S$*$UYEt}Z?^FiYIs7B9-U(Q5nLZ?~sZ%gjD)ImueWK6l@ zLEmtE$A<}BG+jwUK0NC4;H!JKW&VQDouc%gPYYS+4=KBuYIplCVJOPhw&)C`)nA%h zh^I?wn3ra5T|^u#uS7>U^4A@A+J{=C`DKrg)yQe6)bW`N4B5+~_xu}KqjNniFhN*05T{ouH26-7ruB$ZL+AEIzhQi?njD=(Cd<@cCQm+RJX ziNgWvrUtoUzV3Zk0N*#%i~oi&OR*D;)S$10koceHLMD*j0Xr23 z6JHcM{(khlIyRqR1`Rj5QMM*Ye}+I9vy&u1F!lqiCpouvCPl|B%+$9!#x>68c_j^& z7@al5qk)YCz9(PAJ;iF8N0$}}F`&9`17j*^2zQ)8gP!7pk2F7KFIfbw=S-d7lCzwsIKM#wZng}+?m zM$w}l8l(8BV97aK zwqcZdX>8@m_VI{lmQscGQQj3V%(H;V%DIxC)?ovdlhlkQV%gT!!S#N*8g8)?qiiYv z;Ic#B@+D}|l3uJc;b$C9tL*7`F1$_qjmm{anNE9ruj2m%O))C6y*#DcQ(#K zl9;AO<`rLmy$y&SkD)OKF-BS99#|)2m>(V{AKY#{5w5i|mdt{}?N7-r@Pr z1^)Evp+4^oXhce~23}B-!V_C=$X>j~#$6QZc;ZY3QYY;HtZVyZqRuITI?)sN)Rp|$ z-z?#by?#U_NG@wnpzFo?ER9WjaGFUm-`FlEaPjBGMsj4tK1GI~Z09_9ztx{1#x+rv zc~*0Qg~N&gRlNcNQ1{?*!M+CXk@ij`$|rm3Guu8G>QU0%f)v@E)V`b11cs%h)IGne z=wGUcxgnnf{k9PY`-?qtqhE!@^M6t;60P=Xn+EIuBuXA_{>hpXIYg@-yOMm(v0vS- zCSBPYo(*{?r2G@BES1U<&yDsU_XWR+UCP^hZec0~lO_HmNJ&U@3U{V}CK=dy;{Z!7 z4Jh#SZ2&@<6%$i!4=Lv#7Tyx9rdn#ZGP z=(gIi4v>4)_NUs{3r;dbPInY%i{}$X6*7RZkTyJ%R2^II^$qM<1D-%n$(3Juc;@+x zPkJ!?4`8&~dwSCVor;KYls^_d<}f?zGy2o?3ulI&<5Uow7GTUU*975WUCtV$)#{q? zAnf-OgL=e>#C-TS8C+#Zf*Zk(fs7%@$lK3n#^1<=f72q~Hxg{;F!0S6xvwl%-}#N@ zKgZZluVkf|FX)E8hecx>S!+gcqBq@L4xAV}B=I<^Iz-{Q5xo5nw~b?+V>O)f=%$n? z=5d|@yj2ysX!OqecWy0_tb;N@5bY?lE$`?hH9r{+WosU-&1J{;1Og?)hx220V1Yqh!My zyFExh3*3%AHyEJ~y#4!`IrQ3s?n;bkEuRi8j?-e2j(AOSNfb{IW7iZdQU$OuLYC(Y z?oleZJ^Dz$dm{s}+AphHs8#sn#Ro0SCmRHCi;-L*w(d97j-~V!Rnmj8;RyOZmTE(F z-jH0u)glpTnCv`ysiH7Ld7!nSZo~+utU_`?)Qum-hc_UUeUDpD5GSYlDa1t36iXB7 zbZ9k_3nOerI}%vU5MhyKQ5b3eP-lHX>mECtCs)ycJ!rVlAagQ zsw3H!hab;(KILxMk%?_ENp^Bb$bfM`A=T)UYCth>xe~LN#wedfF z1eu=Z8iz*T0$Ky^n8AiuT9}cnh?+$~vdwZE+Uongjiq)1)YC9MZAaxIZjjY{6tbX& ze?nZ^SVvy&x%@-~irc4H%#`94&GIz)ER8d(u1JSvKqjA}`L6+B?uCemFJ`F~gSj4N zjMeoER=q~?Z-hWM!zRJ{L;coTXA&fBL({nMMSxlMC$qsxhMpjMy0n>E5_rj6c(Fmm z%Icd$hf(wCRp1~c+1-7iMctY99DWy)jIKv6lhno!TS?2CDKTtq=%@Am8JV8gxbnV=AcA| znTXy=9mA-l;@}O<#VelN625l;`N|~Xs*J3z1_4Vn_(ypk>ytAFxDQawP#tIU?ac(y z{>TsL*YTl32K^^O9G~If$;f&dlpzUj<(2u-mdT!G2rsv~iG3P1*J!635~99FnhGnm zsn(WCoHkxt{0QU&tqG&xDpz0UpwR5-kbMNS5A=_6St^=QU@kId)3^S*v#v-<#`pR*z0V=*-yuVC!W@T>=R8t(`&zcMB)P?sfVa#bBx zJ3j?$Fp)a=X3ASE`YN`r)F(kfRLia@%^>8MT9i}ADW(RcJva$(R;Y`uV$S3N`~r5Ek^X#g0ZnFatiSd1AYYMvCS#jVihxVKx==l z!&UA9b4lJcpp#W%dorh$?4^#!qb$pA+uqT?CG^&ewQSNnQd5YX?kn z=RQyc3>2tY4tN*kZ=iWDHb?pA4i89-NA}}X6wM}mpEsQDvp*?FgnWg0aEXI8q_|X6 z@3ZRG5(&PorR=6ShnX`cP&@AcM#C5iY^goM8qX>s?bsiX*Yr#9%nQ*%baA?+*Ek;cEcfT7Z3|%gmZKD=HdwwR{4g-f$F3r2N(BzE7~_V$Z%;AS_QaO$oO8A z1T~v*Vr9iWl$O~h_8~@GoDga<(mV%T51-&O{T9f|TW9|H60aF@)} zY3CDewX;UzKli)Plzq%pb^59ub9>@0~0 zhp9$PZM_S@`0U{|+G<{>^L^7u`zSE*ILJ-bvH!u?p$>EaWs>8IqH-~IA=R8;E1TL91JR&DRK_pyw6kM>Pfo)k)2ik&;dOgXd z>=wJAO59!xS2|ls#J`2jE?G$7pIzXZ2jl>DrcG|2MQl{J`8da>D_8brGHBZeA%ZB zH&5brn&L@vY0!s@me-`|`~dX#auFW{yRHvOV33v^PnLJX8!YGQ1~sU|OiFyo|`u zX1U#a7XS%CCKj{<3Y(h-X%9z6d>VuRVN%#cc9hWpM4nUGA+{2XvkG{(bry6P*`x$# zVl+79Jo4_d(l|ir6!SSEvh$>DudXbu^ti;)2j^i5-PlIFRW;Gm+vI$&3^!gE$&a(+ z$yYyc$(^P~BVs?68_|QSJ?h?791R*S1HUErymT~70b4Yo)#^)9AH~LFc7a&_v<^wX z)yAZa?KQ1tfs_qzW}B44oZ7T)3Eq0xw6sP6S(+%L)R$Gf=n za&OjZ>)KKMrHkg#F;PG=d1=dB(Rsi=`nBwXLQvZZ0Ih-JJQ`nQvo<3mleCV=xt=@l z_J?iE#D_#rF+=zWnvbT@xMx*Bu{|{G>)H4Zap{Cj9IE%j@tfA>i)r-TX0pp>rL+U> zP`7LK(4kW-EuOBdro#Bc!M_XG5gX5Q!K}YcgElGsZ}YCa$F`gAvo2@`5*HrGoV2 zQRE9R21%oan7ZSfv2ZS@4who?Fv19mgo73OW!lGu@}t~g_zL{A{;5dk2nkown(L& zQSP3XUut{BqT|jao^!0^SLS!xgV5zG9~X@EK=5OgvTA z?U?pd(d3Od3Nqm+ixO(^^Q!J$L?tUj_Rigm82CQm{aAWXh;uGcv{mf{r3I}Y-lOVa z#%i$WxslJN^Prqcp{{45l`++j)%x3ii5}7JjyL^Dq_t5sazKU2_)iP{4IANK(1{3p z+bJ-tD{Hn)*Kquz5m5<`!M6Lq+(A=~e^mha_T!Z2-hV%VKf7;per3ChkiS7)S~y$U)Apm9AW^W|zI zyUQbUdA}B%Cpx+KsBY0@Qz3`JtS>EzkM#IHcwWDrYeNizub9|CXNT%4otD{XA0GIC z8ecV~zXqkoQ2hcIEAtFgq=%KW47gOb}im_Dz;nUy($<55vBOM%eD1D$Q@t_9&Ln zC0;_oVQYLc1qEr?pQ1&wN;Fpeup&vkVzkqf4m-y1VkNxVCV3wFv8TBe9gf{oJZ_$@ z72*#$_79B3{FsLf2X57LczsSV<4HR@!K}nfncHXYqIIu{(yd!*FxQbDt$%-SkTNs2 zwKVO)khGSZMTspO1z7Mi?8MJs1hk&F<&wnel;|VTRN>lUi5KNf_eqUyX>=gZ zo+=Z!%5PECa{lXOfe}kFCp0vU=EktMZPh}M)t7CyZTMGm*lo7eofuL3z)l<6CnIHm zVZlXRI1B2yBY}LX&QVFMFnt*Rmm9#w^}XCVT9zdj#kYeW8PN~kemPg|S#YoMHOkeu zU@+#2A#s%%dkX%2mf5;oE}`w*2hUWY&{FKvJH z3sOdA>wCU`AcD?g3-^5?9$sIbf~^GcyPOnLkFjQrIv+0PjK{YFzT3}R-ouI2l2nf) za{tBdhy^y?lQR<7BDx=9x^14sH^a7G|FrB2O?$`d#&7^n2r&w8E8SBWR~=e58IY3& z#rjXPl9H16){TXww@=AnR9ee&eolD`CfD``ZXPQwzUIEAkTf@ z2t=Cv7$7JaP(Z@i_0BVs6@w)#;gXNGlLi;d9IAweocgOa0m{_G_YZ^0yxu#@Qb6V2C*OHvd1`VhX*z{>-ld1Fu z5=ME_1LUN{xeR1C{_r`xZ(KzA*$*?CAUA1F`Rm}vv!Ym*PKqC6eH!AGG@M<98j76z z^+o+Tji_R!0WfiSkyS3{lqP}=HTiZxZVA1tl>w}QdwI+&7P1TLqsh*pz)$cLQZn0< z%ER==aIf06?F;5e9&ylC&83?Pz;h7z^{J1|FjD_X5O=B3Vg=hJdR$)2r~uCNZ(#^6 z8SNR`4O*sT2U1{KiejqYP9H2o*oO6xj7?ziJ!jC-ZXzz0IevZ1p$jb7bcHJg??2|y zkWUfG0PY#@v9a8EHkHuhN%Njn)E_<)(Z#BJX(lhx@}nTRmgu`gjKYw(0V8;0u&zo= zdfWFKc?3%oJSeB&XiS&;IAOh)X5iRM+;tTWe+C96+qk5xrDdsbeHhA}Kg#2+SBHS% z`0}=H_~Kt(m^u@-c}BJ?JoMXK#A3(lQlE`f@kh4jA9AI0o>p*^jg0kmi9}FTz?~UZ zycp8>n0b%6>^K@9Guxp>q*$nhHUh7iHUI$6R6Zmy!Y2n`6W*FHmEy-I16eGF<6P-k z+acFUHHzLxYc^5Ju`8Vn5>_<4%B~pzGnf}6)v)+c9dWzB0d;|BaD}6*{G4_q05+xc zDXRTrtolz7H2$IS*3F`hWa;mzjEaSh=3oh?S$fo$eLr}Ub*)uCM6f`2>ybQdyw1VW zqOn`AXg={#_}a;|jKO7zdXq>-+{?%}fGs(*GQXXV^B~8^8$Tzv;rL^mz4UTD{s+&6I!P9*aNy|uU*>7qI5(9KPmc&k$z&tEoCL3d${*))+#Jc5XCq2 z7K^}#`v2ecUor0#?+71K0vHfH_8gecPidQDb%-A2p?IZcDjjSDkl3~F8bu(c% zf4$D(43mYBtYHu_o=WUJJWc>);8kP1Hxw*fbrQepAig)yux}~Ud8b&%#3&V-WX1I> zd7%d7fE&mg*MVS%{+}%qk8-F;pXjmug!X8Q8Gc!JYn(nQEgJ5g~cVd2Aa~UlO6Z?y1NL#KYBrfSucO_Tx0vdKr?cwlp^6Dh>?VJ z#lp@}A3l$)^4YtU?mp8oMd-~e3Y$q~{Biwny}-7Hx*mbywQj&)X(~2QPKh0}m+K3Q zY-H>kzVbfOP*~Okrr06xo;$7j1CRq(C)DylltB%1A5{-ys}{?S1sqF1tLXl)mj>Hw zHdHMcD{FDF&|C8+e-tkmEzfvU`sLUbaoS#)_k=6+o2?E-U9P?Pvlow-c%Oz42b-l8 z;s-O7bU6AFy;`};v(MYip5JnS=eVq2XN_9L>k8C><`xfJEj|Ss_iYFtRWeTs7dy@4 zzUWgEdMmE;LQ%xcGOXUD0XlE6M-S%P2YtUjkp1(aoIzw&9ZXh=v4b6PWy6n12UK<|y2D03C^MMSYCHN^vJrva1|D38{4mxEvvjHLLx_%?F~@U3 zmucgPxCve9Fe53ouQ4t880>p5rZIunN}{o?MgI^nHYRxpT` z5h(`=I0KbEJ1)V_hE)M|wGE8zae@!!Ag%bnPq{-=tEEt}NgmjEA+U*3py zx_E{27t*C@VopOH)Skb#*csUhZ{p}y9O2gOur6B&(+V>14(;f8Yq9BOz|yIopHj_;aC1UrjhorBgiqGRsFADhoP9^m7Bj{_5;)1Xro{^6%N{VojQJX1%vlom`!|`G($D)Z7lGgDV#yhyJ(>Y0o^echF$yA zD4Soi$MFVLrrOx11+tDEVAHq*g>qvKN28E|-J!mt3H$RdEvn23xx$U^y38-W3bvo^ zp_xl{Zr^HGe*-a`7*lB`CZc8+BAI_ZxYd7JpjD;4*Awx8Mu(eTr?sX@e~yquYj?*e zyuP+4Kt)a2SKHf{6?Y|~sD}Ni#d3Ym)YBxl1KL+gPGAMcgm0eKp8w11lt4%a{P-@j z`-PTvSY&zQw(K%(0VXMrhC`CrYkD_fy82R|N2MBcag2(%ZykGKjY(qGZ#_QZb+m7B z)4wv*7leiO)}~g{MiR!Cuvv9k{k^*FGD8#d_}`NFF(f-Gb|UM3sY*oa@N%mC-U^g0 z$PF0~ey;3X5>tB;{xB=_F^w;tD)58<->O!Ri?ypm!ObbZtB31-T|GVA9&g>td|$%L zOg^N$NT%~!3yEg8!rd;`{S@nLSKPmW9%LywFK|t;zZqriRTFv9Q!RD6g2+H1dA6p) z9cthe>b29qi|$mt7J<%F<<^}25k#M%fRM*f#JlWpQ|;HEixmZn3S1`iaH65dj9!LI zPym1l49%b~ix{p#C2`LSo8w0OB%_rTDLvd5Damtdm+ea2KsL6?ESi%IH2=#$7Iob= z1xC0nTEQ7e4%r!3!;3IfJt`V;vUI`dG^TJN2mhH~)aBvL1Z?D<`r>>BE{Oah`!;pC zM!_^g6IGnT2%S84apLaTICNhpb6AQ}GPCbfx?z&{ARwEknL-2{(G$SxVan(oKQKFH z4m$6P_FDXm$AY>)?67`N6vF-+wNcEv_GK7^lrn3m$Ky|UAYeRNGDFx+u}-9Faqm8^ z5S%7*M5RoM*rMc=aMQ z78g@rM?f&eR$cgsmnTsS(W7Q0Jye|@WUK#hH?j3z?1w$C`xidR?Kd|xzek?qO!KWM zj5dAASE9p;BTgpWp50@MlRiBDe%aDhg*>KjQz&Rmp=u4dtZBYp&D$reddTI_Oh){J z%2aB;KU4~;(%jvl@u7J_v|Dl;i7SF+Mm_ zm(L$FA3~%5TZGx08V|mk{<|>^?eZ6TXrn4xpLx7z?Y?0RzqzgX_q#g{(I~oLquK@1 zt%sTywB5kfd63^25GG+!o10i?mu zNEm%?s~;tArnCvVNOE1JH$W@W^}^9C><6utzG}j<4A<*vPr7h*Y^L4O z>zDX1{WAQe^W^hLpluNb*2#E&KJ@Cah=U^JI;aA2+#;+kH57b*6MP&`uuZ@vAzi~< zrR!MAVla(aCfK1J`*{o5rMT(j9u*&D=(D`Jz1LuSt}O2c|q9Fw<<7S&?Mw5J{!w~R7X=zGv z*EHqMyZ`il%3x9*@pN5=XK(jUfLM0xMxWBas*(n$;{%qbH`Y&cRV&CZyn8(wlj=mRJ-jc34f1@CN z%g?Fzq8(w{OW3WymWqMt<4| zyJ)$+sP@1}HG>!QT$-@Hdk^a!-{6k_`f=z6h56FXg1{MZKrgIh0WTx=NB%QYrRB$L z#3QX~4VRB=EQ4>XP~v?DyOL81%Y6uE$~}-iXmh06`%ME zDn*~q8*cXQ6TWRByc9}LyG&Pxj?LT}E6oTLu9HtX`&?U3=T^OJbWX2zCo|AN1?4I25I0NB{A`EGA!M|ItH$*31H5h%m+DVy4ToI!hXK+v!5NnY1L}W&`M+>dnoil62G|3V-Ezg1}NGWjkodVG}_N^-?VQci3JDGj&F^=~hZSu2-$U zALEI5k5w!JN|D66H<`j*=MS)PV#&x;YCR>7vA3M;NPiNiQ@=?SR9C*5N*krZe z4;YT!NDakefwlorzq0G*Qa<6ott|B*_gM$h%sNPQ2~YjhJ)`03^Z!($Li?e!fxnOB zp3`_Z^G}2t9D`c%zUJV7xS^zg-Gqq*OV<1ocBx8{u68u&3<+QxWVcGLJ7Kk{H?R!H} ztDaJ?)?HbZ1`XRx{1iU3MYU$)!q96ZPj6?oOtGyQ{q|&#LMji?3{o_(G2AXiG$ZRm z9N-FqYzta(M(!k1&GW`lR�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 literal 0 HcmV?d00001 diff --git a/docs/guides/images/complex-geometry.png b/docs/guides/images/complex-geometry.png new file mode 100644 index 0000000000000000000000000000000000000000..5d595cc8d088994c331ff71cc9fea87299b5347f GIT binary patch literal 182631 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
V&9n_gD=)isC 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%0AuI0JRn9=cj_aa| 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

M1}*}%R~|=%|(5(uwwGrT^W4V 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%0D@)|iMn4M>qUYJeFDhR{q606 zv>wy1-UVVdL)aQ5~tJcXXZd5m$7NI(Mtit#4h8`}#@| ziC)p4tx=5yeUgH`*0U)lvUKP&Af+zB?i6EE`CPXC}~6n z%y*}L&T-vfZ0izVrV{OkiROM+tjgc}l)`8AxT%Rz3zpHk7C8U|R04|S+=9bX-6Z(t z92!hC$R9gA%d!N}Uaa>`{%OjpkTDwLf?mLA@RuS(EC#+d_UXTAhm07tOzggcbJ!m= z?Ds!~4_OP|%lGDJoMi8;$E3|>+ZiHvo)>*X+8;hIw2v0=SO(oleqEWmbY!%b^EAt% z3=5QXL#)LPg?R}mi>{S3e@dUcAx&LYeM z!%KV_!jw<1zJBx}l=u#}3)W^N3(3gNAp>SLF73=( zDRUf!^VdyZI-R>5M)0jlBj#Uoe^Xc{6<>|lKAhbRZKEYJP2n{(rwR;-gZ54SnJgQ| zh^ISGvOjlZGZ3ToE#En*e6)YAc|H{RHx4ckJ*m>;{1ZCq$s$yx_kL~h@N57EAowFO zC=7Dhf0Tu2DNV4sTu8?o$y|kj5L2hufo;jjq^R;FWG=AVBaPLQj8z_Ue8Xo{aO{u3_zZ{%vh$TBM^YOE1jDGOxKzT z+(&=O`mXW|mwvW&`0F@nQRmDgO^JT2z=0~TRBHch^-Cx32+sSW!hyn4xO8suk#|*s zU~7d_?IITYT?(t=c5+I6TKnbY9535LL-7;ijBkyff8E8<_*Jg_8HNk1C_?!P=jUY_ z*x5U#-Jvh0-fPM1?HD5x+q@{P=WziNNKs`?bP+yx4R3yv2H4%&2jz;3)(XF*XPDnznSFuSm_-DZA2g-+jp;# zO^{UPq(rM9aO;GP$cybYP+1CB|L{3LalI{VD|B$1b{zyg%CX4M#ua;a5h(}?#k>O$ zak5Ja)L*OQat7qzp%gMvl%;ca`1U#89Zyr1A8?nSCmg@s2 zMX(nGzrABuTR}X3(=HPq9}JecF(`Wu!E`baGXgzKt`v4~y9=mr**=s=rOTJ9551VI zzCm72wZhV|P~jJk(OHxm#FXEy;S7*zrBJ4~N^2pB?r(y~FD_o?AM!Tu)@Pji^LAJV z%^#_=;$e_9S{r_I&W*eh3t4hCGoX2jntdLf+-KGM`nUR&OK~h>UT$Q1l3dNVX_-yi zHx2`VFGTGIi3qsyJO=~ewa)hUu%UlmnbR<8nu`}C%WdYUf1`X=m`=`Jc8S%Z+j>Y!}$H=fkjBM zOr8T}fTtA&?v%s2^|dwE^~;Sc^QgZlvdf6Rh+(#w%=<>YR?dJdmU>!u1%U*UHmYQh zGQuFiTH()QmM-a{K#G-o_`1G#QDg17JqkueS)uRxeo*ymewlw{v(ZIBkOdfmB;*qs zWI~*u5=vNNITzpf3lX}{;k zJ5CRT)aZ>-0TmEhKDU6wHEw5mMBNA&xHVu6&0KPmWgy{gdK*+LcLk4%`zUg!<@MAv zCi;#_Bhqk);YW(3(!#=tWA+M_Iv49`%)@BIBtO0}T#-m@PgRN$E;S%1{8sf)aIohw zmKA9`)j3bNfA)N#QBaZeck&^R3HYxN|I?Y?mI~8WBcFS~>!o8DoxCsG{Mndn06JQS zJ)F+zb)+i!h3CH!c#j&#iC0f>h2zXkfj96TO++i(dGaCGXN~>cp#%UTO}&UxD!|CD{Hk~!rXme^(sr^7E2UT91 zpQ>N&**}cwt29>-S7!kBafCPUvWwi0DzVm}y}ezI%V!kh_kU0U#cEzY$O6M?$;Mlk zX{}bDsa3>eInq{hfPzhnr$cLPGLR+EU%^i z6z8i~r!ziKgk0`6WE2<%IAh_j0%`nBK{ZN4z2|i-2!fms!DP$Y?sm21Ad!Fs01uW$ znI3QM$?Gb>T66Mez^%jPWw^%PB$cdBYtSSVc}9QN=>ybvp(O>mm(*DzIV6cl4A@>{h&xw6q>YA^7TNG!Zw#-cT71`U${gb z#PmL22ZFJW&3MTJx#LPeHck9$-Fo6w`t5#4l$PHz1<(u{(n@z8#*@kY_P3C^b&X9~ zI(SMztCb#N{*EQ8K}y1#nt(YghwQo8Hu^-|4NyiOFFR<9+xgz-P5F63U3@%%>UQ{L zne+>P$+H#5=k;FX@_F569 zD*~j3oi2pT*tt$(xsC`VWjQv2t;vV#bH({}qwFs-X${A0*z zIdUD?laakN=R3)s!=xCzs(9K(pfhvH!`*@4|64WYxq_;9{3$t&Oh{i6la?-VTV1`N z4Tq{Ju+QL^mSVim99Cs|7tooterC;+W*E0izqhWf>sytqyLIKl;MZ*0h}#B@DhC)l z?=)D;5i?3g`9H<40L#n#XbyAhv=cac%Dpx})|DqftQXop*#l1k9$yM_G)^N z7?rnkseS&I`U3eaYuDIbXnKLuI=VU}DrBYoWHUsHMSx?7;>2@lM89Rr(^xec88cfW zx0kSuHlGPn?r(8hst)T1zhUoCV3-;c45$KC0+0@{1jSRS>lRJevZ%EeNe+$9bvjwk zkktC#M5W7b4x*=j#v>wJYCNFu!)f6~yZ14B>8VBeJy5OA0N{Vj?B#Ow;|i~JWbKp$ zEPN9QL{c3ugpCj)cm?`vGO#-X_2?_%oSPpC48rmf02+(8P3&+`c&JtfQeLhImE571 zcn7IsD=>Oro^cc-rR;!8ByXI~51Ai6gRydxa&@$kMiMVB>Wp(GW~g84U$^9qBQUBn zdZO=S^pN}6#r1E`*4YhXsCI+m5^2KIv2hN5Iki@Ucqj0%okiWl*Xlkoy460umuC$O zPvCXS8WZi`SdPouy4L`Mh$IDR#@t&_(sYh2ZsL7-?$VSZ@|H~x-;_nwkWtw-SExEFkq+iIUP9(Ga*rAMW|EtNt|t>qpFE(NIg}u=yRMks zU3-YgjUX2h@><@bE7*j$SJmArAaNJyhOdD|G(pEGS^XrivPZ`eLPG7Xx_fyOYE$at z%}f36#@YtzJsGWk&G#@Ryqmcyh%qM#^>P~Z7m@;8REFcILecasllW2~rh0-Zj?6Rk zx&&=J*=SjEf{vmzJrPofG9s4(-(UQpXrIU+N+OE&c5`zh?0BpQx+M>U2``&2rp+}&MYKg|ueQJd+HD0Sl4Mjf(pAhh-jY$WT{>9AM+$s8)mYik=K-+mO&kR?lGx-9 z_QCtjJLV%n9i=ek@Sw}5TGE!k!hQmj8ld0gbnSrSfal{cIbnU|e04|*tlERQ^1?$I z6BPqJ096;7**6QS9|sA?0P;;#+m-qx#Tv^2rNS(cTktB5oWj>7CC~TW?_A$S=u6(W z5W78YUX`G&vCpToETQ<~+jo14YOF?G<_Uirg#Rp_GmK2l`c?c$E5H`>HS^7A7>=O$ zhjDS7t=0G<@u0~YoT!RY2t}9BC7&6^#?Xj;RM3g{QRPlJw^CP;kau~_lG1l;42{8O zGncZpHD3wLxRbb#0hBm$tVwvqY-dD7ANt%#t$sLRmsqurC`jY`!Y%-{(@ydj)Ip|| z!gje>X5(D@-L?tuOyN_efErTn^%|Uu{iT<{Y6J!R(2-0*3RbgK{sNiLFruXQse|7ZP<3AdB(*v@k>jXGfc408Ag5V^qw(eTCMLQ^ zd{4le{j>VybV|LSSiELYilDJzqRC?f zpjpNfwZPA&OWrgG9%>H5Ye*sn8ls09qQ(@_;-{BdiAx>=L6I1}>JpB_|2Cso^|(z+ zXWXo#K59Fmo$E6!&?b zTaw)J3%Gq7aA9gOUykSO#_+C>EAbK8vYuGcF9IlyXIZHN*B9BR^_o446!#qx%gL_* ziu>WGVb4R^ih=5PVQ<5b7y#7G6l;JZXp(i=@4(F{zNcgIfC687Bh;1jqw7eWZmgUb z`Gw1eLE4C5BbQO0b8=B@47f9ND0e|fcma>if1KrbQttMmng2{St>)Ys)U*6D3DiyV z+0^p;B4Wz9+M)8kn#zOZX5MfV38BK^|Fgw&DG2xD5BS=Bv0e7#n3VYk&hq9VtYNV? z;-lUptdYZyS&!Ek6Z@B9dQ2%~J9;aUdeptY;K~G~CZ(l&ID7_@h*;K`zB&m4*6eZ6 zEITRqkeKC6FK?6M3|ZO$NM_}RPO=8J`s7*BV*;?a)PMLG*sESqXGB#h{f>Mi|K_dY zLH<)be-?ZZM`~63_`AQ;pHvmU$=pZ17XW{Sss|&K+nO5tk->sz-iQ4h8p(1FK|FX# z<{0XmMV<8w!%ggK2uJabhLERnG#d?`F$((*m)i8L4K>+F1^vH36V((m!6wS8qOhJ| zvJ{VEJa9eiGZi+)N$}3x+QlDGbiBu!*dO)ZbJd_;c!TnHNZT!UDl7YM9uGICH(R0P zoKrsrsN)rmn?hpAFZS(z5V#DwtLTqbgPII`w%LV$#j2-i4GXG!jl*^(L<7W5VQLUr zpCnD6sqtkJMpk;vO5j0kH6;a16rOa)(xNjDyUh+g`nkOG!wx{IUsG8hE~%UJsU)!IEt8Dvg9Dw={1tsI_@ayHzS?X^2nO@`91NZbC*Qv#) z4=XfszV;Op{pku|URp}`XDMz{Mtu|Qyb2~63 z(n6nn9%cw~zLeg-H>7v55Q5h>c~nDJR%IP zR6#Fc!w3~#20fDHhNJUbp>0$OyIN;#%a1zYZjqs~sdAD(ov}R3SG2RrCpmi?u zJ5R>o*K;>++4nyw-&a|4Kt_NfiF+up55y$>=78&6>X4Vg_eCGRE=>A|_s>J+F z%c=e6rZ3eveAd?nQ!}9B?pRjjU4b`wifexBs{V$p78n`%c~xq^f)uZqlj7P8|aQ6{!&W!>2LsAR;LC)gV~SQCT<^=w8G|sfd-6HS(&RF zq{h!K;ZT@TNu-{_o3{kEtP(+Esdv69m@6*xYz&|0r8*UKf1X8lwZD`g?&XJ-yW{EZXav&y&O;f6O(X*lFkFQM_ z|L{s-{!*NO1m_z^aBvz0lN!Fk@zyz%s7W%*4mMSA; z714nU@g8AIeZfpBbC%-=G?X`Q0t@mTc#Pw3m$j;bnfu3ud{22t+pN|X&PTe(Q3pEu zA|e$;XNL=)N>A@TliqmW5$`{d}llbi(tiLXKdYm{3ivkbwSo5OY^-vQDwQp zZ3P%UCPR;f+zZAXUL=;X#(qi85QbMQZ)4@7SZ;az>u1x3k9wXx)2QW7O-rV@I^-S# z{>P;z6|ux(wgOk5y-tt)HLb_(gRQ>ldrSCpJaL&P@02`-Te5+!!bPOa9stCAYJzrR zxeZOaa^|Z{;j}+o#F98eP5b>2Y@EzvZVN- zQ#FqKqC~rSYG5~@)ul3rdq`Amp4_i=)`j%aB*);ad44795}G-CJ_Q;9gM=!HOa~4k zwfq!DKzqB8@4;azbbgf{b!5h6Em@y>W(<^XFRWjc=*<`XgESC$+}?w8BXL-=^Dk@) zm=2VRXbMkaqCC#Vk~TFu`F*SdU=meG~YfvPw~lEOS#a zm|snLInLFS+8b%OcbvDS9v~z+K8zvIO2J@o=zGz>0{JcdT?HL6U+)j~M1`V|WE!$N zZuy{NHYf5yT@o+$`4W$nsJ&8>C1^4i8s)X^-KD=WIvCvh z)z5kcGsJ_SBk;}MtG?zsFU#{`CkP9wubfLi+OXKzu~9kp;c|rS9d>&vlqh!;)$%>j z+Zi-d4u;Dd1G7Lt`DHI>MpxepjTA4eea0Sl-BtF%Ro}FJ@FhQx?I>sdI%ud=CNT|w@1YM%@yGa{A7(_I(Ui0AA#(ANSz-T2*meyqzLF%MJuPWK$I#)8j=+Rkky-U3_ zR-dFg&{_2|*&9IZK`3$?I#4%dYFEI=TEN`(d(lxem!ouK=+0#>ToHG4D3}4uPt}T} zDlEJiyG>ct{2Po|_=3dM+IC{50HgTFVCRRqkEr`P^ zs$^;(uB+)a%jaG4Xmi)8Boyi?f1CaeJ5J#(64gZLw`7=qclM`<5KRsxnGF2NG2E_^ zA0C}M*u9-{w|B3BNcX%Zp4E5aiCFq&JtbzflivzW67qUWD`3`Z`O^Pj>yG@bbX+2t zyTV8F378X`16u^jeA)`Kn5}EO<8DLA)6o62wI zh>X$88ez3z*o}>E0DR$IkiX`@byxXi#3cV^5=FV^!wbvV!1PCu=ZXwOH;)~fJFfAs z?u!kjv>g}nJ6yD>_4(gi!kh|Z9%>2%wwK@pYfT#Av=?PVnhaBE(R}S+Ezx>?2gzj? zG@mIOA_52HixMHdPN+r9rHe8QeW144c_hbHeJv1YSjN2*r-0i+q^4^7L z7j&d3Kf@yS8(dKN7RN*bA@xH(s_5GJ5Cc>%Z<(gdr7{Q04VBHv?;(0rJ2huO4;S5n z^*P7@*R~$ngti^A9E%<`cLGJyP*pGwkVvC+|>Rrh*Y8<2tpv{PaBFX*j z{~`DnLVWhfaQ2l}40njASie8oXFB55d-Ia;#W=*xr)AyzYL%$R&W7SEsU zrG_`~%@3tvbF7BjSa;m$r6lXoUX(jG7jIJhn5WQ^8Yj9+;BEyce?$b^jz(q80P7`q zgajbNa6%MzQsIf+#&Fv$grWs?xDIs&?lYgy8jqRn7rz7z6Ug}*d)3AHXh0iEh8i8~ z)(_mq)}{FMTYe4{znJ+#r>&at^TNSnt|kwisMk2jGpuO4+;S|G#s@C36EzE>v2Ud# z23;A2QpV(rcsn-I|6sXHm*{M2hR9ZyQivR9qV0L!yk*iT{Ki~kpp-jU)+e}4Od@@( zoxa7`i}oY-MuyU5_a#v_gjX{1rh^@ZUU4iH* zcAD$tJ2&^Zpl#|!>y^z-Qh6~Cx7M@a#B-NO;?R_CeJaO2mN=;&j}yW~R(ILI#z;}s zcJ|>g9s&9}lC^597SFp`!L%O`KrO8T&JDsl^D_kVtmFxs| z;-c$_c<+_}UgL)5#R96eAsu}fBy@h1swUjrK84aj$o7Qh9b=ETu4GWJmIv+yI<<93=}TqPAMT^8T&Bt*XfC!> zbxuob$bw2R2OVuVhv9EOFgM6B6_* zh@+vpoEA~g=FFYq?qXLwe{mb%ZyeW%LfB;%I#+beh>?p{Xbl;r*5sI{impAVX}@J= z0tavhjh1jogCRBkl+C;(!z6+IOwc|5XSW&cd=8?`ct^ozKFbBOlsib-*2h`v{4zL)Ax zI5o-VyV$mG^j03rl0&mZx=e38``EQVJVxw0TXUQl0+l!)g>OwcT;V1Lho$5bs#~7 zj@xg-xNo3$Fh;KP$kV#)g(&9k`>`Z#o6M+(D$GYQ>>Tkd0ZdF*evFzaN(q78oe-vz zlqHpz#Py?!t7A$1fe=qwmO0V5^gcgkGK$d?i|uuRdy6TFW?8=FEjLg3ldegLHC=Rv zhCqIvzKjWr{j`x40k+}*-x|FZ6EHW>>(QOZjqE}qT)*Drf%Z>aZS*rj+vNNN?D~Od z-*ZIVIc~?0OHqa?_x^KmW>J#&Kt$EN%Z;3z#)87_<$P^Sec<*7Jb!PuPp&HFimS0o z_eK^x7Kari6U_%5RM6E%$|HoAWrDGS!(10z&<#h}@7-g#Z%9tgR(G1_uL+fc3{D*G zR8J-ju3H|A5Uxe&)3P@+v_wn!-Kd{;@jE44?s@4RHg=v2TDn@9i_^1^c9W^GTO7S3 zJ3p#)O1&m2k%cP?)Bp!(%<_1Ezu8w_MuAxUC}KCX?CDV*Sx23l8k^OcV^Sn-`))#~ zA?Ky>%$0Qm*(aJ=0*yES*!$JPkBrTan zu1mNF@E_3e2u&i~en8pt<2_Eg!?NnQT4)xR*rU}?%}?+gu)S^Fb$JnJ#P>Ed6d$?$ zfQ!KJzIeY00YCZOv??Bp*1m?{x};|6ZJ+HmtuuLV{-P9Ya(MAbj6}o7>zPaXr|uPj zbf`rI?E!yye^4)+=XJV(Vu54Rsz>9-kF`X4H4P8iygk($ZRotujESJpi05JJ5pNaUVxMtwgDwYRCd; zLwGp>R$Q5yseRIf4u#kk#ujv<9rYA>KX%`leV=jMpR-YbAOeG?RAeu7&ez4DT%g0} z;|tKDS%@b=`9i?)AvkF?ywiwHmCfrl7y$n20(a{TIHK5tm0*u;N?3mYZkegIeYo&} z^ptb|B#6|n-N3}0Qk~5UwC!EVqmJFs#Exx8)&gVtX}oC08yO)SMp63QFB7Eskqpg` z;Y~9ei<A|0aI#sgM(>O2VT>P}8zUd-QpgL-OKQeFLOH!rh!XDoy4 zjhdf)4}V(iuo6L3Im6oM_AcQ=!gtmSa>27_&@VoI<@4Tay65fbPRZ`1jtRK;{a@5q z&{A=L6}6{+q4lmIcHpys{wKFYni6f>`2ZV|8#h+TA}tr!#ASB#^;Us{)gN>8NsSdO zM=Ng|4-rYSP#H2%lP$-$*=O!_=rF&-u)hrYh zW_JBYU)s#Iuwk?$DB_zx;;3F3@ZOi|;-=4uPfjZA+4)^uxsk*%jMKe8Y)zNlB|@MraNtIKOe|HL^_-o}Fu zk)@IcY2D;+kJOoYLLtKx+pBGM3?KaNJLMtztP(NR5a4<|eB-Sxf`o!JO2ZICigb53NQWRWl$3OXAT{(1E!`pAjR*omm$YJ}@7clYY%&1Mi!1kKtSv0j6zu6Cqd9P@#<(uD}ba%Ug~ z_SLq-Bbw}f;jj5t{<+R$dhs?eHlh211^5WI!hhM+lJW$q8Vo!yb^Y-%jO*eTcb@QW zd;n%pyH5G764J=TQ!}2k4@@(%pG3?BF+Hh||Eu9DbV_p>m+vV_{AC0zGjmr2F&lwp zgYJL44yJ2VETJZMwkM~n*2wY-;8*9o9DVv8rx+jL1<9WVj`H7FOaf}T8t=5#Yl9Zu zh9fq!R8=y>V-0e$KGOTyLU8igiem5crdE>cj11@kOe8Ir@(#?q)Z$yH$ z|CWa`Z=pHCa#Zz*G(B^YaXTJexH6&5o5U#Mr6PAF>Dug5r)-h<`Kn*1-89jO%=c`} zq8M$VL(V~$Km)iw%8MuUCUxrg1!2&s)m5=PXfZ==W?3Me!+zM+HM!4TJaJI_N2&Z2 zIH?7d98;j?(e0|XrU){7`sre;ed^sRsefYVp_c+r1u4%ok?>ujYZv{8!|raW)ixKI z1(y=B%7{Yi;c54N`*$%CmJ0q~X?s(J6-@>09r{{5**=-_isB@lt%^IwRXtBZYwaPc z!9sYiZW`?C1VT5Pqb(zrp5y@<`b)J>Ke&3Loh}qOg^J>AwYE&VUT`j>>iWB-m zhoC*%@Sa{znZ@|DkN?)q8eE?vs4hxwl*NCLeeCL3IvQdrd7_*^SQAex7%eAqfY8kZ za}31Y)z`9k`;?U~)hfH`CdW!*4+JGXKO|(xuBiCHvdx`@;3O z-s2`5hWtZSk!_q)%26bF5}?dGLDc(jw?q z$Q|tIvM+SQAi?p%lPYphuTe!liiE#Kt@J({9D5h)n<_6SX*v z=VLJ|Ae}_)X%L3(}6tcSc~*G zxiS>;O5fx3V~dj`={w{Bn0hX(B59Dc>@IB)bju_Oj;vQ9Z6XVDOQFT?}ZO)W0atAu`@I zM_^6kop}XO0J7~jG6c`&V&$iAEI&t4s+~}P8 zBqKUmuS*OPvjPj_&d;#BV?o)J@(QVKUI(&-$Lo_!$REzssBU`kEk2HS@S$5?;GSLz z9e-eS)Yy4;uY?837#dF3sLaQld9B0LCJ7r%UDtQuD7H**l=I4<*?AF{Zck4h;sH-T zly?iT%(>StU%T*xQ=ZY*tL6De$+3)}Wk7m+%vUaIXy3S-3nj(bby*V+KsNT69bk_> z=Mk8Q%;M3KqA~8X38eYJqMAM6xVNArXs$USyY07S9%<+ZWVJH@--$fDT;G548Rzf= zx1DNK_XgpkrkQaG`=|@W%KB!-o8q7aNeeP|deO(2<$nXkYZvz~!y z+W84vwnbWJh7CHiT7JAsod-1YO{!C+3!v*2cE=D|x>N)zq>KpBx(gK)V4}D*ljbm9 z;mzdyfs>$0+fBU97VDZqwQI}G+n`!~di$H^+I5wd-i|&Khj^a)-MctZ!grGPDzL%c z2-1c%f*uA(n2#tjnhvTqf5>vo$R#AtKb2AY_dBy1a$@q4@R~)KfsPP!?|w__pl0nY z@s0)7z01#f*j(k2;k*!o;-2-EZmCXt<}zsZ5AS}=1lNK z^2brOCeQoT-(7Ftfh%^ZGRS1q4cpN2yy$lD%?etr%02Zv2Xe!V4g_N_&>a6>tLCYZ##2$cNU6)+6SM(qu)5P{WteY5fEIdkZD6En)l||_rEsWeN`qj)|FBfAPWs`n zcY44M=$WlsmrdHba_`jg!%Iapk^{Tx)8EP2{`)fk#>bmC?|q)qaFRZ*65dPXOv_oJ z>hub=ga{P0w{=SvP_&q69_#^JZ5?-HIA8 zbEb@cGZhlQ0N1o zTT?Z|5ZO1YL2vM%YW%B)h>{p11GZZQ4Xqyob53yX(I|aJW8K5Z5t%&tHlzoDQiNAh z@-S&eZQ;d^eBJBd-DwQz^3PGD8bu)iuPy-EV~+j>)EFyWg9Gq)D^Ry>uC0f}M1)(`fW~!Cg&`vuPACPFX*; z!u=CAr=wNjmhYI%*@w|Kzm)#I7To(p6dfZ3QasR0u9FV2e))4KRp;bq=pJwQ*Q9At zYcQ9D@iXV}ve*Rz;SmDiXLM&+XNi~YAS)(nkE>D|wkH!W*z=h?;G)T!4BkC`f@{IM zGXP&_@^EPaM)8F7q}j5eV~d!`Z|>4_!>*(CE`yD7(y4)|Aw~rJ=pVE@&JnQ&k^E&% zY$6Uml-Qg|xyd;J{?iZDj*{38&t`Sli4#HUJ9M$vBw?t%8AOPjcb_H*Z{E<+u_*{l8wkC`M5fu3_Al z0>h`>a`8cD2|pcvW77R6c=eN9PflFsZ0R+)y_BcXD65}OjcXq z;R26ATt4lh1oQl;+ehec^FjQPd=fjQRTU*eRM5679>(lDkrAtZq4@l>>jiWT_UWYn z$RoTxWm<)eDi4qx-XSI0KkJpJ%?Q?0ie93hseXUjVA6$J^A3qxwDYp%o9l#_EX^7I ze@6MSSz&E71zVOBv<(PF8Er7!>MON}RS|VvdfMG=-`eqj3X_&ZloQLo+ffmHlgW27 zMFopbVSSv)6AaIiw9?Tu*&1!KlEcSfny?tjEVH=UW7>{pv$YA(sqI9HXoJ`$ z^4*5wSBB$o7kb%txo##va_-6f+^Ns*a|qb?o*(+VFOOBuwsD`V7ayFF)X3g7I54$P zM7!n;p;}}^IlOiM$k011nwRHbQFUYCk3@|w;_v>P_(T%pe(-c-i=rlod~|6B#egUf z4X`%R30^^pHDA=nfzE1E0Qu<4|Bh+##gkY)&_t|PNgG~Dh18J+JS4*=uoX20Yu<$F zTZdoUHgNyw5Lk38h^S>}R92}e5_u3$IVH?+I03@(u4_IVP8zEa!I}8Iwmh`kLg04} zpAN`e=7Yxl%<3AynYy(t?SRiFGxZzwA-n;V^)BsD%i5Eg%{*F)%&SEFHDXpKS>Mp) zxHQ{7TWpaiu5O5ll| zCz)|U^CxZ>lI#jziIHa^0hq`n1yQgWCEk;9jGzoNhDSTTf+yV*3J>02J{?kd8(O^I zrgFua+8imZjkNL6g)g-e%wZnuJTJ&qjx%a&UgCxceYv^mW+&7F-wuS9JDlAv{2UVm zStOV-vh&3K!BNe1ccw8^svs9Wt3r2HM}{pGdKx;Z zK^0-;N+S?S#qrl3fz`pC7%yc@{pD_IhzYOe@8^w8fA-pj`d*L?ISp0fj~_0 z4+#K}08DYd>3D#^HWmlrbv{GDGjQ2P2q!Ja;KU<{C^6U0Nj0>;t3i>npgxsq0`^qc zvw$!3JIRYQLI0xBmzGYew#4+eJjsLKvc9+wa4ao374kUr#B2tGwprb z_Owrwvk>1{^8NIl=JX8~siH!k5EVxKk#mr)V`2|8zvu9sC1$bZ`4}1U8It^wZLc9> zlczuYcpkzaV*EPuw1jb9{MYj38!*zs=R<1M!G+2hg`6qjLcMi)?lTP&OLcGD1+)bl z78G5pj=uAiMaZ(e+OO9VO-c879H=kKnqzE(GKfC{GHie&Q88xlR9?O>lSjgB-LOMj zvR}H?ma`xI0;&@C66+1v%Nx@uOotN;)KT$%4R}RP^^V7_q$R~;yWNs5p&we~X^=f` zgPsDWc4LB;IsILAgsw!Z_mQx+zNw>WkS_QvR&Gq&_7k>H`Z57Rt~x&N4OGqDKSn|4 z*m+TdJ+ar{qkqMH4B;8Dui-)LNi}Q6Fl|C;4>uqzneoY_Ne{XbGN%UXV`HQnS$b@+ zc3tx~xNtn;zPat9I!Z{D3f+QeEq)>&_c(Mrr`EQUm${~5g3;PR3x*xgUFL&^ur4A~U+uUTIn zc#bcBB4gWz*Jj~!on82S9h^88+e{Uf9u%o)J~nCEZfH>O+fDAiVwFI5=`3+FjGTg) zBL6`M5#?+I6?U*yr_pC*YucdfVAf}Ri;iT2LJc~-Gx~f!d+VGS>JQYWKZ6eKIi_@2 zO-ilVd;@zA&QY}t&9V4anL3uk6AHlWV7B8%@Q#nfhfT3lxRdO9%H)0Z^yuksJ>@!o z;G{udM>)ntGN2&~bo+)BZ^~io-GAS6FI(qiK?ZCDFBxivSvD>i@Tz5uG(cyVZ_nI6 zFpvP44 zA}@<$UugO27qKY3PQLP?6mJ>hG~9jH*gk zSa0Wo`s(o{_LE|9i;e|_X1xi%#OMdAcKZtika3;;!_)eD1IW0c8T4oBts79&PwH~( zfmT9@*eEBSoji2kWE6D3LnWe76UCY_nG%!{Fb^1qHRnXXC0V!&rPfCibNC+f?1WLM5lLj_XZ!F+6t8f-u1)n5ghRhryeT>8XWpl?(k_JM?4-mLefS)mU$zmgIHR zbSOw2DRpSrm9D1m#|OEW935IWXw|{XzF7QC&T(r_N3B{MI3pw+*sIhSH5WMeucxWm zh}mc`3M;G+XvHs*F+nzUy|xW3fIxGA0aZl~|D!!3Wu;R=9N ziV}+TeL!2Lq^wJcIimXu_IqUHY|CX-SPqR1Poi+WjNeU5>ITA+7qM-n54Y*16M?7b zX74?S@roi!IGC~`CxrzoRI6X1GI@=}T?sTx8ZP(={bQ!>7`~uwBj-d} z8N1D%WlZ7pSGu`z%D>E6#Bc<&g%0^o#a`<=zF$wUqhaLNgU`@M;N`-<7$UsbXOmM| zcb%N+fUW|6&7FjKAQ+LJKen7<@nx@}H;83++qdi@nPeyJ>*wunCiCY-FxLadIWZy& zGrQ<8x~nrRmcfN;WeER;$VPj)i>k!-kFp8dqeyk;5HZ3Nn$p6qFaIYSw0tfsS`%C|&#TOC&;rm`%9)t*!pmnS5=$HChgc-ad_QNW@ko@7YLIzdGh9S~z zny|al=DWAdnto+SR;%u03rxTf!BB&rA_l_V?3Fd|Xs?62IMII|xx6}T)m3m)uut6B z$v+vq@~vjSttI2WR0d8Ab>%kfdqhMdgLGYQ?Fba_27@6R8+G5SDZZBI%2}%D`LJs} zbm>AQm=@U|kFSDnJHDZz?ERafAkJaFTrR8fp#MzAPs}-Ik0&H*purO!@o72Z1Tc38 zo}`SI?4z5tJ@p^vLyg2$ac>xaazR2~3ipenbz&P)5U@%D|Kzza%mj?s^R!3Yw|BXN zL|iS-^b%c%QMKW6Lx5RO*t(z~r8>mM-b-`JfdqEf2AF& z5%eJeHQHk8h3ClnehV;lesiX1U(Uv4cmS9G>TjaNamu%O^wGmnwa4A%)%Tm1yT9@I zB{z%j!aG`bqCsb}u_uz76>#Z$n(;TOeA6ct!{Jc_NcTVTMi>okTu#fom1rpu$_tJg zUmyNB`3t-=aJFu;IE~q;sxnxwYuis&=re z&04w768g`@-G3cKWJygiXeTtX2fJm72>apM8!LSf9K>T&PeFlf3cTPLp?g{4O_$+V zDbMEiJAz7)H!=QoccjMJ^%=Rbv_Zde_5DvC$v$~MY2x)v7ph~|!gZoq)+X_rNbUAU ztx&z@L!0UmSv9l$#09DDE*CoNRtdI>dx z_D^7(@TMDjYEq1cwD$Z%f*FcgrADd9hi^0solk1yn^`Az7iplkEh%OW2T2*%=J;_5 zN{9+%z+h2kt9Eabe5TTs^hldjZM5`u8V1#f7Qy^x1)mXW0fRa$sC4jpn5Rxqnub4| z86r}X4xZ)Dkdt}`8~Gh!M)0qhq_d_j)GoB2Usn4rEo$BGq+)cO1-vMJ z+liKuVlivx_Uf*tJp4idb|=5QY_N2bNalZc?DPZ{=;MVCKXLdsGkgHZHro?WbNvaO zOa{;ol!eQmaEJvAtAG^Cn4R+Vs{au8baIC(|3*Ax<|#$c1HcMRCjyW_Bv2`~SkFZN zyERJs=dV0Z@wLu;Xxnqpq`F?Fuz}r&o_`BH>|5W}A7*QC4hfn3{U)Rn)}b>7=&+M4KL<%2$4cyCpYB-qoTH81>Qs?l!UxO8bR3<{o}QsY4#C94eMpV%pyhh;U-xOi zrbIb&>|D$eqI{#^YuuSiustTnA#!zPr6#>%zhbY}%2i|G-aVPrCfcnu(O{~?%xMig z_%ia*cjHv9pjCoUw+GYDvtv!(&1eikPvu1!5{Ow)ZBGGjZ}iu_$ZXL@UDG=yKZrj8 zyQ}-?Ui>p)t1%7!SNW%u`F_cgHRt?=ov-#ycU(X>4aau@jh@?fYUE?&`G-=Jzo{D+ z$wKpf_r8E@>hJTY(a>)q1u1`wZOZUo$v*(J345X&<1nGQ8;eEKCv;EL;{6lY{?9oK zWp)ko`L((2z?^5jz=%@zHiiV{ChOt!k6YH4JI^vNTelMMM)jd?xL)OBPf%wkr_T0> zA|Z9SO6;@ikM<-;!x$jdJiLbIc)lr7)*I|7zodqwO|LOl_adVrYV0&=-<$|4QGe9% z{im2YPoOc5ZSrM{+eZ~; zh@NOKDwKYUduf2p^NXTp0+?B!{`F_czPufsxNKW~!DjW(&;RHfWgmb)f47zC-!AVI z<&~CTu}ghU`+Qn)TbU|{?j3KqQD-FRES8Nlp@9&2|G8(#`sopM)k?rdr^wl;27LviUdY!bLitoi3C@6kt z#*GXTCwab-W!BfiOYt8Lw1oIkdU;wb24aul>Rjv@083A3t)dd#Rmt9J;8)-Xmr@UIlUv0HaKF*34=e5rcm8#b$$0fYb+rLN&NnvO@Zs^TQ2+j|ykDCb( zc?1-1?gJM;)M`mMLq>0NPwMrvI!p@LC3&MZ2r{3DEd?4jmTQ#S>2-Ran#rM2=Sc6^ z;{PxPmy<|u%fFUd>+=mDr>l>zi_Nr<-gfZYv%W?I^S(ty%__cQ8$K%HGb>i}ZAH|{ z<##Ju_D^BNjH;Tn-nDrI$Z_B*OuY)Wj(`ZE>|t4^P6j4>P_u?<)TTxL%E9;L2l_E7 z)2hH0WgMc*n7)jf>4BVf_9d0TX=!czH=t7^aUP9JnghgLa$jI0Scq=Q5qxNFPMRm; z+cbFSUDj>poKMQVW^w_HI}N;*1aT^FZdK}fHIq{N>vRNGnsxQC#`d*WY9~}U14=0G zw`E}+W@uz?&pzxJ7SJ@P1H%Uz*!BxRHh1Bo-MZ=|x%%UL#14E1Pqp~BQNpCdU;b~9op2mnSwGT*d^ji zuLgm95hHbCcy;trGfs+fPN`|BKP4hL&;2bEZMXJU>eE+dgxtp}^#Um|y{934*qG*+ zDZERsu7=AcQz4oByGqj244)JY{!+^e&{+J8kM+u6Qzhz&J;=(=6tewQ;itZkFuRz` z@x5JX^L4wHg#?~evM_xFD=6rXP2Df?{XhkK5)HcgKfn)Jdr~>nDCsKSAc3FBu^-2w z0ofZ4N+K!TAz4e9G^c%bjgMNQ725=~7R?Pp={R_#eL{y%g5Odr9qtKq;pweTG)gXw z9hVt7+g~qD22mtbX+xGsec!84G?M(0j=Z(6?OmEX%A!XuT`J&?D3 zrNVnH@%;0%Rznq`J|7|*#N2Yc`*IDcbegV-@y3fBQ0F!kNayo=d~u)!K@Z)=}B z3{M5OY)dkGCOa_E$bg$-g91oC$Los9yf=Wg`f-69uV(QK=5iFB*Ou2!#&vl9Gmf8K zHL;ueFn9vuBaydckKLO_4Q91}uyq`_>E89O2;=ncX>7jQXD7a!kP-jK+Icx|cH#qc zHG=y7dh@*=}Tlp=xPJi4a#IXE(^kjC# z^*y8-8`20%97L1e&qm)nk-%Zu%x7i~Zy`Q^%CzZUJE8KA(gE5&xAU zTD%t=*x1Y+e^FP7`K=a7);Jx~t#eMM0&SOmL=0Z?XY9ovbVbcO65= zU_+NN=@Y6tRziFQlv)@Wm99<-1qyocQ$SB{H7^}VGCd1w^S8bX@0O>blpg^u}_elwvR7M zl`)?xNRt?rS=BGny>R%l`)P_$<#P#Nlt}Lu@ zN``;?zNt=Yzx#aT&K5gh5M!0JWU&3>p}2;aKMS)gi;sTDYDzdyoXIlgX3wv>3KKEs z4#i)b>whWSW+KIQd{28Va4*#zIYeufxtJvUA8TwjcA^Z-cW=~*b+J;| z>@yh}qxwi6s}WoO)Z6~FZ#5*clzr+4oNT;K-8^HXXk|9JrzlHZIj7RyPN0y` zq_ViwHNuh}uY4*$hMwM=yb3lQzP22{MN{BpF=xo&=146ijf1?{N_~GOSSJ@R)Tuz( zc9+#Q`CIjuiizo433w?OW0nQpA>I9#3eSM0OiY7S%SH^C10*i+&Qa9FfyUB`q1CxBr)08C}=ZU~uXe=(OoY25cr0*L92qfiT_<*NkD{xEN2S{TTpeV|Av z9P3( zHQgf;svY+$X{R>nk^--kaTXX9C6K zSc&=q(^7JRc@@#L%Z)2x5H@Bous{}Jk$id;_6czb6$ji7+RP*xU)&@3RP z@i{w*tH*UU?z!x-GBH~$3iED|+cO_maQWVy_g$Div56(BzITsybxwX1-S_?q$dj^c z>;?dRW?@42j8cz4+nGb=tYoPfsm;)wF?uV=?&3)+0k4$?OK3K?QUyizPc#imNvH;W zU)K?+^J3+1VU*}_+t=sB?>a=JRCh){PUs4-T|-bnLF+>yRRfp1k2L*_RG-qD5b@NfZjx6+ z)8P^%Vy&jtWxrW^<6ayGDikID((t40<_`BA=?Z3GZKG=1kpeoxCW^8U(UHp}E3SS%wX4~&cM1?c6;@OF76T01nmu-IiKXlMguhR{Q!~a#`E4W=KY$t-(kHP8m>kh*I58x_ zcsDzERwS~3ghh)~{k(nxKpKqU!_!ls*=t~UC>`B;7O|CPkRJo(8@9vn;+pjjU#v~N zRqB7)!cx>rgy$kAdwv3)lIM`l7o_8x9QO+-JKU3v;$ZqHsa;0*WLZZ+gUQ z`ETljI4*SAz2Ym;f(P%TkZCCddp=7|@mO$5J9Q0qBV!AFYM*C7$b)URp>ymW0h1bM z-&S>pBD=Xie~Ejy=)fRrE3rp=MYAK~;rf8u$4()F5&y80NhlB>|Flj|ciT(R4B)_k* zl$kDrwfOJ+N zZ$Acwr|Q$Ja)rpLYk!sb=v&% z7+Xj=uNyYFCA>2aPt=`iXlsX<2O3ed#h7YA(`{x#5#0oY(V~n~fG^*wX3=bCUN~b0`h&Etsm@TO2lS93PZJow zeC*t!_$S@d@zeeL{71zdlwCmwdR_ecPw-k{^8c-wL1Vh5r4+Xh?ElwhB( zzZ=G&+1ccz<(TiK(`iYa(awxJQ@@5@UOW7Prgqe1_!@aAL-}fz8F3x*YoE6%MECEr z%O_fH!Y`iZEIm!QBn#<&m-zVsrzL<(eA%2hIvuVuIcgw!uYmHs=PeYg-d-vt?1PTN zLplbWH2fPK=jM#?>tv zN43?h3G_F^%Qvl4^-3Lpo6qaG$gjkZ_yc)d-WZ$oZCj4iCiR{lhjF{P2vl*Q&*7+% z@so{-K-UVf-MfH)FA&PCmD2$}AeXtJ>fSvb7lj}Ss)Q*0ZMAH*vuD{Ag~$6+SZ#D; zCcRQ?vLFUP$|X+AGvwsDgMz@im1d5ypjb9gUN0jr;+7EoKGfH6*e*^n)2K2fT(68e z=IRk$^+PGr0xQLRExMcPJf9=a++64gWj=b!&J{+*f3%xl7AmBj!Y|D+ za+SOHrAefC|06g>XF7gQJUSt!?agpHlnhK6N7egQ{Wl1&vn5Pt=PC6Q>K*Aae86)o4L z$F|o8+sK6G`ik* zUPfgbIOVI~=}fLsllgyHcQ6V+K&P@2u|cOBw-?_S+Sj@jm%#d&)EiSNMVfyx8M0#z zHa{RJ;&=*){(DMkf1ljyVgV5%Rzl77`8fgQ(yxKDhIIb=N>(PL&%Zp@NTLJ z+Fvo8XyW*RFmm2z*(#cjOuScM#+d5#IC<!)ayOn_W zjloTb-}Z&C(VWI1QD3fqZL)anJqVLE0}$ zs>sw=l4m43AP|=Gk5DW>LbkE*^#q3u@OM zO&;TOcM76V!=ce8w-Gc*7PDO&*}+U$m#b(h3ZT_dga(I z74o-UUB06K$q>aOzAYTah0>lkaRl?^I-{P>rq3y+SDBz*4w1``!l+rkZNt zQyki|*LbKo)x^D+PpY(m9pjXu`E6c!B8}bts(OuSp^V1@5$PjZ8b9$EjBEFxt|Dah zp{A~%6YG!jtQuoFA*1C1MfgA#(^O|X748{guMva}p$i@Ies{zOEFbmOnZ0VNYDVu1t zEGN?E-YyjM@uh@n+DIusBfhV!kBAvgiC8VV_EYh-{?&rz zNqafQASn*xw~Akys{*HdPf%N-z8i7$62@OjFwkD}g<=XZBUedC*uF(2hZ_q|{M4%J zWouZ9mkF@jkXo>$O}Vdw+=xzBvR>w3`*I(Zo-FWm4Np77$iELHqf|T){7VtHJ8s{E z1-NzzKN}QV(LVkAAd^h1jE}~l_iMf*=S+Wrm+B_KQY#@D(;yUVJktxH-5t12#mT=E z;@mLg6^}$kyt3iOb;C22M&&68EMsETYfzewv5g*^To3am7$=hXbO+CH+V@$&tzZ+O zPGX#wvMA?V5i}Nep-|)pZErJY2_$_PY|N>?Yz3d1tyLQ=p{5WH5G-MUckZJt^Y1O7 z(~RjUB0^Blu7bY!wQ_v6sm9J`0G?`fIM$V=(@K26;n-!294^tn)67U z&+%l=c+m;y!-RD9asqR7gF@P%>hIl0>;h(zYCF2KbX@3bU=Oy8kJxhk9ZqNmd>(CR zaX7Zw{M&v{rMwih&cAY{ zFxg^D$VR=o`j!N*Ewhze_KTI&=XKSv7wbbJ)(3wR5 z&>b>p=I;h1=EajVsEl41fP-Z4tl_;+u>%vu*`mU$VKgOhPj8m=SOSB6eW6ybw!03| zyN}h@(`1Ls^r|;9b`bI({TQYPw&b{$n5qLzm0Na3G@7DVEh=e}a^2(N2WBy4KF%A6 zazcF!ZSLrJB%zXuj&b3ArEt><<)QQ(F{V8cHbFXGMMFbG1kJUaa-#n{_gBYBE>`MB zG$$jYY9k{jqm_)x-W8AC-v~qMK$JoxKz&c~RN`DDPvV*o0Ya~s1R!0euhDa?{!Q$vlIsbQc0xkA9eH|rF^)m+<)B`0*py-~xufKu8VWTLTbfNW zMhvAM8?Fam1U?O%p?PtXU)tBU3B+xjFgLUXZvUsQ#KgvrAcaMVN@Sj`!sCNz)6=>k z!4N0jFxtnucJhS%i9NvCAxr1)_FdQlcty3GCjL@UJ=xLvSsNBiQS&N%_icvSydJK% z1^}D0#bP141vfw@T7o(Fou+R3$#}hj$p$Jd9|9oUxCpj(-KPM6;JMU{Clj4gE*aqc z&pZ=&I=z^itm_J5Wk{h|bUm|R-pWS{TOIa7VCN_^BbA=4PfvoJQc;Jy#W$C7s5Z0_ zGJLr=Pyy4TF@v87$wx-e_Pq4EUQjc<;k`k9UR=vpoTFtPHrYc;x%KOMv6LdkeS5tr zrYqw`bUK}wr0NITx7jh-sbF{B=V(W!8L(}X!*;&P;+rCYY(i5svb&vEe(WB@Yljps z_?9QVz zg8Vqbxls+OGi8?lH=P8yqqYB;Uzd&ndOjS`VRT9Ts{n3&$$Y>oA0YEO0U$XJq42Vz zKePd8n*<;eFw?^L@!a^4@ap~v4Cw>_v$(cPEr_13)HiMX8z7hn$lk25PKM27k+Xs8 zAI$!th~*VJvq&W~LmHucc#8STIHMbp;MD{qZ7RFoDqI2l`S6L zrW6DwgUi5ZopFw4hZ@%8iW^`#5#(pR^B|)ewAFQc{K7~4)$aNqo{tu{05L{Ia>)vK zS`NDQ*vq&rz=m(=&i=j%jQjd4Nxbq<@?RnHfiX@Vtl2&Q_H=U`cy((eM$nmUYR zrsibeow10sq~%!{mD+;B#WsI%8x5WLWvXn<6@A?{m4{AR0C>{PG*b14)(nN8Q6a8# z*e5bfym6$doHREmv44C_D*&^!N}<%dZ%O@n@M z4+Lp{*6)Q5U{S5`V2WOKV$cd zQjm-Qd7(T*nEy|_gux{L3bOm(eXS0UemE(-kVTw_VmK+SWU+MBsFY5`o}ms$M4QBM zv3zpa=vFoR4t6Y*bFxa^%cz0!ZDKlFgOU-{VAMoug=lR*xW6LdXT6)e2M56qA)*y@ z<~Ywsa9o9JKf|VDbur}vmglSQ#qXU*xuJRM%bGFk?TuZNeRjQPooI4G z-@TtJ(axJ{KI_}6-aT>ufhzvbNdtAlw|3d@oJ2>GYS6RipGR2VR^k@Ns+(@7<0{b};|vh2%&@VB^} zf9oOgYYKBoBZjq-kBGz0U!Q_yB71_Yl7my-hN`g2FM~jZ$+g|R&f^^-bSfzwE%>YU z8Zmz%Cf}qzRc0(vjj|@`MVa+Lr}&dC9x9HoG4eGy8zJH+TaG=go@vCSOMRL~nBK$4ds_iXB zjl`q!yCJQkuv*HMTAdFDBB{kyMDJak5AOji1NOR_&jFfKYK+f1jT1nGC4KEQ%)gb4 z^3mzii}0i3_O5s?_nDM3>wc;U(z1qy6g>9M-(U$3G&kWkRE`71GJND2tTt z#guwAV!KU@BN7+mB~zIiieceL=ID9Ijz za3TB+G1G6SKUDoS?Ot%GLRzp>u+$w2)S-B?SNvGiKUVJ20s{KA6TU9dL{9RV zi=2skc|A*AD786|dzpWj@~>eK$HPLnCfY&6_g+tO)65Z6u(HJ=2!nYdo~Mj7v*+H4 z8=1jkTgikfKWz3e>rAEZdsJ)u;xvmX;_9R?k7)KeHfNU zo9|D>Xye;#2}()S)T*Y_bkh7vG#f55Y8@hM!97E3bYOEI)r>vG_5jq;SU`4H2SBm- zQ~MVHZ%G(EoFtKooF`QHNI#_)|8e!{^X&w%viV7XP$xPBTHODXp}?gCSPj2e<;b!2 zPBO|@J**w`F7nMRL%OaxL7Qo*v+re#C+Fm5md*i`B+u3m0YyiZ|6}fK9U4v_xktxkk0jpl%TSpq}aNn)Y8Kl-x{j~{Y8Utsyp(3hGk{p?&v zjeso595SN_tQD`KJ}+gm93kh0dBzzn3#`s4t#B-h^cz8lE{qrEPLdmcO1 zs5JWY#O(v$j7aPy4XnJKAqxK7BizR`u_*t7BTn-S=CeN#F7`;8sOeKopbxTX^) zQq(9KO}L$TtZ;$r2=sFd@e3(;Zt8kLJLaN9nXP8?{qUnkDaFD@oJoT#s1I#=KdB=eB@V(62tL| zp&#?mzsC!eS^r>rE$-FNpCTqDF#+pL&K?71i<0q4IE9RK4H@puy;Yl$6hb{tDVR1K z9Bp+bbH>4Bq}@WZwp_Fqwtj*KaNO1A8eOi+*C_UadsL0e+)KgF{Q{sZlJsLlo!-fg zotvT18m39gw08rsK9D>jfAI!gGgS+oflY$eA$@+{57B!+H@`#a1;nBt@TEE5r>YwodNOm4&Ucl#a?Iz_B_S71tXaN_xFD`qourkb?S#Miu zDM>Lc(8y~*?fGycZ)M*AOfw#=%z?Ndwl4x*&13v`p0Pl?MOGg$|8>y6+n{|w6dr%c z74)mhnEObu;O`(f4vFS4lq^i-Uu9J-gt@M34twzhh;%4lsfzPgI!8Vc^<}i;La^@TP4`#vi~R z(4co#J%Cb---dL&UUTiWpaMLaig=%O=C+ZNT?^*jnHm0!Rw>m%k>=X;AT4#Dv zR<_owo4%ShU&akqey>j%XvyzNqXo&UudFuHE_pxst`=#P0pC-BLN0n$%Mtw8h>F|B z*reRqw+S7pc0ij|2N?8HN;c>x?klmOS@O0XrAr@QPEA>(RYCSf%4?bQ-$~5g>i&1hbJ3;+(2nYJ8t^Q^f`@um?W z$L=p+*W-Q{bl(2}FR2xfM&mr=3cOeypdRx){dZUJ&#o4Hi@W#)F!@YiEYV2(PsAF%3ZGASG{_3ol-ib~ZY^)Db@v z6(gSdol0jyG4W#fRDmTK*HxM$@3_rZuWW9eVK+VEQESlof4~OMF`m2Bs<4)M%DYT# zp&_BOoH|!@u@$TQGY{+`h8OgGlY0mZb4e_f*+H~XfN?gfO7i+JgkQAkdA1x$!u9clD ze_yK|ZtN2a17k*|a%pki!I*^9p<0_fcPeVmmWvp9=M{IOYGHZ|C%RCDUd59U(dPzN zieObZzh!|T3zJ`Kh<~`0V}l^5F>ddTUi_~>cs^ZS`ox>uDUs{Kcf>^L0ISf(ZJ5~R zIyHjgg47rgDbcS4Zif?%0aSAH6+%O+p68o7nJKzv-!I5Hj$q6{@m@gQmz|XYV3da> z|JWTz{e%Ni>8R%rq!yyX96K1}X#CMnaufX30w&NVmj# z@=`$%vRoqQtninHduD-P5LqbKRLYUb^_7`gvD@fm51dF&pdiI@D(xAoLC!p0x7Icc zD(YytaRDE--0%mdF(p0rD;Lp?XzP#k*4Tf&K%v?^469V(YdYx%w)f1DHU-ukXh)Q& z6dxt#-sSwO26k55gCdv)SD}rdhMM~hZyE^=A@NYNQU9=_mXw+AOG2WXQA8;?Z66Dg zK0^th3cU?dD-6!}M7YQQGWi;$JXy&pbYhMb;Rx9{HSW)q|t|)AYBexa(t&&v<%n~Y4F#xLPi*FR!`Au7^Aq$ zsC(vK1e8!6uc$3f((bGNHf&B=TqV+lmGKCZ7_C^zftLhu=73*y3-t=)&^~5Vc|P-q z7r4XShE@#rAX>LEou3Bfh`c)w1-W>Mb7Z6FdhKlWB3RQ?n_upB)!uup> z$ZHFE-N=IOexa{XWyFRj2zpVhm_z+HXywU2u*v&8K`zbbbf{xo*jW-V3EH%YHCTLT zjM|Ur2Z}!X(l3IEgC~fXRtTFgC;V2|GWSYVyy9JO!2dG6vo>SrDXST=gnCeKKXR(F zAksg|#j`-s^j_ik1*u!`N_A>UZ05dPEh==em8*Cc|AEJNFLLuu^urt=-adbQis%VD z{+rWt22kTYk5;guZ_MU!@~QJNkcVW~%8ow+trZes02vKMPPWN4j8es$r16af6ebG2 zdbSyR5dm}cpSFm9P>F5}T%3D3+>=Vdj$qMm%|7WlD1T*a-0yH3{T(!BWI&M~Kd?GT zTtL_0n%oypt`TnSd;q))_dGjV%kcGNc&F*B4=-M%CaOr8zn8+jit z)7hQFzS3?c6XumrUl6b1NXuQAqt~wb#W5p!E%ilL3Jd+yPMyksa6(>M`0P8MRmrt- zshtO@rRi%71?r|tzXS=*M?^~U9;0c2L$PZEf|Drpw6&k~moNm** zUgO|TTcx=5S{QAXPoEdhU)U=9C)H~a5+PUfzFs1HkyHA(CZ*JMJ+AqdOP*`C(~G{6FsUhN3kY*Vzx@LuwQ&F{&?%>OY={MiVs^r zc=2Fr>{55+JYdtArUsH@I+M_5;QYq%+xPV}^W+KBw!bgbN4`aWfQ-v!4Cj+twrFZX zOGBn7$ayr zZ(mb|g$>dL9s;71>7*22RFpka2Y*9pcSgORqB`ouc5-neih$T%kFd17UXu~Q*vv$u znyI+2LiM%w@O-#@12y1g!nmj7tuyJu)=SVJOG0#2&4>g(dW9x&Q1#9L-RC`?JHcbDyY{bSmlJ-i<_{?6HGzRA{gZLKSTP3gAWARs?=p5DL(k@L!#qt8F0yb(A_WE(H5^H1oq$j90rh` z!J<1x-nrLI=(cP#!UhWBsNHmbL3vHDES-RBpe-5o5|-DOX(i=pT>ss#o@V-h?6=vE zl$3ty;%MBkaQ$Xn$yE55AVyh22k&10(_p$Xs@PvygwwDX7p`{cx>Zm&EkLaXz_yaq z48L(&3!Kx|l88QO<_~AW(0WfjoOt6UqE^}LzQmTS=gOAxh3*pInQzZ{&(*2O2@zcS zYLW42GqMo;Suat7=E?u2-qj<`YE%2W<0yVf3ekU`GSOA^RuuL zw;AqL@T*pQMPZCAnsBmCdf`q8$2!*pP%Z?{Isf}`IQ4vq7v$o(3;AO%1ft z@O)$_PUuT&Wfzz?xTArQhg4`3jGC{qqD)vRyBbrNzJ<4M*+6jzC`w@2t`lCL=bevK z%7eYS@J?g}rQCK$fMTDEaYxYU*PB5+l~m^1cJU7YZBhdYO$3%}OI_yO%M8ulinW>B zKmsK3h1icE=^`kFa+uKp$g}51)v}3$j06N|Fmyeogwvg=uRRDQRWcXoI^K2r(-x_d z4SYq3{$k0s56#TLA4H_fia$()`pY${`v*0Wm%h89&?!AuHUFkDs_3lkCT@-Qqhuaq z=9i#(%tpjVC&PeB>SX9>|7ir>asdWelkPuH_e`zUA>V+MIk`6pazc9ea7)*;@vNjw zP;S_?&2SaJGv&h3z1$OFo2h~v0ifDCvI=f%a9LmFM-NhJ@| zfAI>y((bt9?K|xoVFU4!pK~g}EE*N{__a!A=#)jbJgaF6zvpK<*^{rkbb}{~5z$jT z)XlPX+Nk&V^P%HANQQV~Nec1l zX4-e(m0Zy1T|gp_hxc(q3bY<_qSJ#f$*=E zjR}Jsf!qGUGk96NIG@WI!jRKsrMl%B(xMCqA!Ng_Q+A~%A;BE=DydTCw6C7#RkX{e zA$|oNa2dK}2AJDgmn=(|DCQxurCLyX=pYbqh?vmuXCli#$-OSwG`>QY|0c=)pRlX_ za|&itLv?rLK9IT58ScuAZd9pDR5$sSzHq-h<8an5LnRi&XI(OB>CK^hJ zP$$bCR|!*<9r5rTrA9h;EvmwE>q)+3wUQu~TofOrz)ipn)S18e&@*>Zx}xpnoVMg8 z=lmV{8IS@s)t;+gR1!$l>F)yYM*#&#!NTp4 zgi%&pcZR(^*$t@9W90)!mCUA{_V2gw9eGD}ImYs$bAJI-C@!~kfwS(2p<_9SP0vMl z*ga8xgEXa`lgk3No03daosGnfAi}z=_%uEbj)Q>sb$}w#!ZFf1V5$DL zTi^7qYcVFK$5Alv%MiPz2>tRW7j;kFHa7aphUm=+Vq)f`yCj$pXrfB;4>P4=d&Guu z@z?1!z3r6;$(0n3)MJ?h7nApD1>U0CBu9wO{bUh`LxX5ZKUty@(J9#Z*{q|42XpWI-7MC8d`#E!*pR7S-7iZMI)iziv&7qE zV9b5e9(uBdC9Gd(3_?_1^AiSri`X+*`KKHu-$t5;U)Tn)dR4jJ0S^l&8|h(zgb!S% zppGqO(uG-1AkiKvDdCp9DCTkZY!*pw%|cp^QA_$_7D$#}cO4-w!?V$+==QH-Qgb6W zCth;=WRn7fmGTGOjOA3=vJ}}FdH6`q;>*#2{lR!>+~hIVqAHZ>gzRctuAzh4&-vGv zWU@rLK;v2Tkx2g!+CPIMC?BRIa;!G_kK;r{_891Phf1eMwfON>kjYf6rK&Mw*XYNx zYtP%hv$1NI6f8#zP!R8$6;P&fcic5{i&|cx+*|1F{%Hzu%K@3g=?)Z?Yzu%JPJb1# z=!)glElyQu+fXnJrCO%vrpHEXMq#l6=&>veH|ueuzTCxB*9$`jN96?x)ue67xj-^O zhHjQja1M`!)DA@55wFOzSI&(kC*2$A@Ll+__qzx}zftbE9{?{Iv)I0BZf(!!@FDDebPay7bkXMgc*Sgt&c#bw}T1z*x=`6iM#&5#yA)B;TKrd3u`w z%wlcN+F|n%``2aF>Z~1(uNxJ9N}*gsjC4^In(&G%uBlyh@{(lqnipVtNw;W3YP6*~ zg4UNfrhe%zfVSq$a2}i2p+(mP)@^CO8cE3+NgtIpA$i>q-QPL1qtJ@>Cx$==BRx@S z=lwUQ56M1FZb<`51U%4cG*AhN4@P6Y;$T09G%(7ZnRFBw#oB zGuXMI>kqh!?fs6F5B(Q>qwGAOtTACX@2uUu#cDa!XB1s3fUl3oW? zIDXS)?O-QNc|V1ncILvlihlx!{fW%@8lUJ(gA?KZ_A}qn&4v^ucjvtw?!mAmuz$*VSQ@dJ$69WtAJeu&2vz$UUV$hv}X{EiXg0nXY&hfAZ8axlZl*dD2(q;; zd-*V7?W|_@>ciU}mxw2)&KWzvIMQ5wg03iGr3VkhXGKDq6ak_XB!MgPz+(+XQrF(q zA11jvW>4Zv@}fy4wM%AAvhpmM6zc@>+L~tte4Cegqkt9cHtUX$A?x&j0HXSXP z%_VSM=-J+nUwkR0i>6Gi(bO;ee(N120Xr)4txV>)63qvWL4g*Tb794G+Wt}G-h$CE zUg|fl-<_#jIJdnCfI9}YXE5H#f}e2kb9aSOkujeU_{uSkQf&;8szEPHMV|i382!i4 zVb7(J)z4F2pEr0TvC~0o{u_t;AYyl=pZQNhd~R7}Tn`Mc{#q^oic7i$K_2@C0CJDA zR3G2=$W&Tz|3!>s=_rpsMdVmJg^(tMqIS~{0s6>ZK%=(@oZ?H9(So+#P$qrp+9g-o zcO*P5h|Qt5Kb;X+ZsmxQq-FjOD7s^29Y%apH)?W;^OAM`T-Sb7mZONGAo&a^xdK;_ z33Y^h>Hz$8yX6Spuug!fM)E{P{A;B&T?4J}bFXmbj1niQZkcY8Z@p(cW$7ge*%+|z zvHA2I?D%h*{7tT5SmCAOzoo*Ri@u?;!8Vz7f>`e#A{|Gy!*A@Prigx9{#xwPy03WO zRs(Ft8w`6(Vpi++GuBgcoJzQ`ZzX?VBblrG44hEP-Zc$cbz`==`KvMr#}WcagVL-7 zYEE-3z7MnseBwZTj*s?uK=W(h>s1S;*yml!e@Q@;Z(OrM>i3e9cHs+H?*w&GnfChA zXZ?Bx{rDG|!c`GbHUBrw( zYA>}rA+lssCAR(E*`Fl94MFxRQjOQD*}v(8P1>NKzapcS$b)_6?B}v>xna6EM1e+0 z{22iae@Vn^qkb<+Ad%&eZZB>=G<-HTtH(B1K-<|RKv(}Yvp{r(Sk|+-NGXy;Jf++c zkM-s)udGstX`NAxtMuac*mN=gA^4gA)8r==nd#c&Eyn2TK$um9GZQ4Ba7ZJvTMhh3kI-;Ez4cA7FR*5By?VH~~lzSAd1cWCKvS zrGbLu#TS8A^lL0bFrKdfK}`7?kUc&S2Jy__WSkG83O{_qe*c!hqms?L4@2H^gF>b% z3gf}Y_HUirzt(XpxHJwgDIPdE<8M^dc9!9N|^Xa{$2-$#qXeBmwuM% zr~dW5EWYRA1}e_a23n;F;5)tik~WMU%FMoxIjHG{yplaxweGakXIGw~fNm(3 z!1HkkUi%s^+(!=d0feT5%t@3m5zP;|;TcVzXwg^%PNtJM_wrl5;zEr2GMx(7`8w8E zcEz6w2lP%0{ymmw@efI%CknkjRT^BdvoWW>p#=gFrYllx})EGh_X?Kk|u9B$EKtnguRzm;2dmC$$q3|cjJ7>R)%EYTG+D_ANddg45(MS7zq27+y z6qA9SK{-IRum#6AZH>W~AX-xV`E>Jnk|pWECFo(*4Y1LTNf8-Y65_vq(ap$}&?T0i zJ;}a%kx8}E7B#is9pp@=viT}|zsuLw4P5^R^m^4lew%H@O2}=%{d_?>K#MeZF(=Xr*P;k3zzja&JJd|c+x$3wjY4J`<=iRY!0c%! z{WCU4E2!34bLD0E9#k%IAy7D?kRg zhW*bMATZ`nJScztmAv{E?F&(vv*3_txmsSyrf&+2K%GYDfVogBOytmN@CJRhIz9_* z#nMzP7ea1m@VV`hmK{Pc5)RW}%t#8;qRjQrvv&@RteBwNPb}GtRfVn zfJC0r-TXRdS}zN$GZL0w!|Ag99dk-vf#o2aV#m8jau`f+hI#WzWS0t6L$ z@4DA&7ShN0-@uX1`U)UoeLU84o5n4rGUo*kRYvq6G^?M)g&q1_0eh@plDllZk8XHk z)?VkVE^7`KzrYeA!w3FX2QnjCO+2nM& z)7Upe*ZchTece;|r5f?{&978-!QX#IyLT1#p@W3W-5!eau%~Z%ux5u~!u0T|?A_wL zHpBulMnbVpmr>!J6ti(bW~QEKQ@_rK3jOC3NCJrrg?0@!?P6Gt{*a{#STA(}ew}bX z7KKlx*sEi%89VBQofqUD+g4Yzh$g-55;)~M&y{QDRqJ7nu8eRlVeg+@Q8uMik%{Sg zrd3e!-{-{ZOem8|awc8;IP1>Rf*{_OuND#t(;;xA)*tC>O-T$R{k{{1D|`CT!0rJ2 z)3z2nXRszP0phOKZ;=P`j*D5gkHG4F4!ZdOaQz$}e;-RtN#$vD0O48Q}8A(F!P`$_w50ym`$GqN$%>9fb{6L1d}2kVac=Yi6C zHQ(|~&@uR{MFm1u-NmYpS$JV(VK$z|D4W|=%jonO^GOQd=dXs=I}Zt*q*m607Zx^44ISZLwST=s-fAc=vIFA6&uIXef+f zVC4p;$_it9{+2^Ib3W#VxH_Z=%LE|J6iUZU)|Me3ol$%K#S_*wfcQJB8d}}=V|q=b z(Gz3Vhx1jmR(f5rlB%!orWuAlIwA^xFHa#{*=HW99aT8=e*8g6n z(k`gWR%V2F01KcEF=#TI+xqo2Y5LZDnYO^8GVz}7XgpBosM~@U{Og(>1%^%MHSHTn zM24o7BQNGR7ieH-K2Ud5*fAi+kr9nHrdStBwr|XRnoUt|oCE$P6wLA)IWhs7Dd@PNAujrQ zRe3Vi;ggBjs@+X%a|N&l12Xz!EY*==Be?z{U;u%llaYfygZdOV`0~daSK-`~x^&HI zCTodr{uryCjA*fM_L2h0rF{{}lZ815QwWeEv%>ZnQ|qTi9u#AvRvmtx3@(*$+R|Lh zx?CA+Tecd+tRc|Ak*dZFa6ailv%kC4VLN*-0GsyYc=$7ap7wrLYQuKVS&Svu&UQYWFcZK&Edcn$E`v4 zRoDi^58|*&&4?8O;38<=f9D|KhdKY7-;f?vYC_{$9f9DAn@my%;i?v*XyssgmlP6-bNk;)?cYbbIdsn^~?zZqqMUz zkrm+HC%C%XAvw;mV0^+;BzWAoW!9xF6j+7;ndgr! z6OaMyZ&bj>Px+vHGda9-mk38QbsWz}ph;ER<`76=ad~J5aEY=cCayCVbI^p+;f-$$ zE2gadM1WYbYnc|3!~HfTF0xp=f#v+<%koaB!2l^C`ng6g@Bv*4yag;XbFW>12+3yC zS3mOvapwsSL#MIXl(3#<9AAhrzz-C`6YeX*q@1(QQvycfzv<=zDW4cZ)2+!zJc2pV zB?E3&q}<@b3UmeXvU8BzqEid%PpvEhDyd!ewrySlHc%n7hP1ORO=(N#i^G%{W3A5f zD>FcT+n+yf7Os=W2KPjlPJ2FmkT0^;A#S;MSn@?n`KKC-X8GEu2(CS=NsUmzME?q< zAA@qRdU`4?E+eU=LMApSzykRwK)C?(kSA-?Q*JXiAJouI-w};|hEz?h_fkF6aDoi# z?eSv!Gif(2*>(W?k*vkHqgW$9k9$?HnfRWW{=)>KZ0jX9vjr0rh{(%zzQ3yW1UK)L z2NDX8(E`A7&M@8jV#~du#G9@|VYVv|`6|z+d0|2URHzWiNB`^Dao%jh=9rn0-1fM* zKjW;oENPPlDDk)c72@{({m-uG97BUYU(KBj?h=%U6X;)hcVTC>A$U~vvPEVYp_esS zW8+d&6Vmzfl$fVP;*X3y0#eNQ8!6n0OZeR2&8l^kQ_7RVZA4-C%Kdo1Fj!PYvK zS5nuJ?boSZB%kB!Gs!NI;|3BN{&Q3nuPtgkc1ng1j`eWeGbViuweRu>@r=IVwg$;*P?w$fO^YY+BP;JMaAz+9_Zw&Pfxgk zx+-!dg*Uy`&MMs6+qla|qS6kjf& zRAEw4NeXd|=Djm)2tWy(t` z>}zh%K?cj1NSv|C`q>hNzfmTqYBb>%Fj?x9ZG|;zv?c(B;ou`{Ye9}4K6-jtigb5D z3S(WSWQO#q_#b7QQeQHzv@m+kX7lv|pXyUzEjpHaVRbh!4gJ@MuBsPK<1w=f{hE@( zYAoi~@3G|rfpaweGGb#dG|ia*DfG=b7^wO8x2~H#VLLH*D6^#I9Ex1|ZEAGnB4K}P z1pFNi-BXe<;`a>r-61a#FsJ47II8QGBDE{R-cAgxJpc&lh#DZ6SfQ8f3TS@xWv`^9 z!;E`o=cUX>W*sv~kr@nR)OQYcAyc3sg&~F3c-LyC0Y2h81hWxqV%wS#=f%1OI}&pF zkK4D%JB65;aCugiBp+Hv^vmooZrhTn(54Os9GYuaaC<9Lcq#hSzh8`X(Tb6T>6K3# zTY(&qoSntc0~4yNW8l@-4bRg_)Pl*En~z4X>qJ+_?Z?wHf204M+isB+8qpcJTiQ{} zjgz32GTK)O)s6bKX~StZFhTeF2Vm5>jz3K~?XNII*J9tls12=fe60~{yRPIruICi? zfhmy9XcOhp?291u?q|6O0ZCN9=wlaric|U>lqNyoH^W^&Q4iG!fO~U)t4(f;k0q&s zcYh?=_Bi|dNK@hz7#oThh!rOo_oRb1os-tYx+nlus9uA4_%+?fvS>MxU%Y)TPH!E* zot8}7(O+yGcZwK`m?W)higQqN*rY>M)26t-{GsUsD8*f0{ii>c%XR*n@GVh4@*N zU2XKdD*2-<5caz01PW`iLs^3HX03@34a?U7&tC4K$+!nC9V07bl>d#){I5n?1yQ8FP!q;xg$Hl-Je(QKyUQ4C ze9v0QPhC^Y5SkbJ^!f7E3CPsqabJ^RL{q@_JFI0L$4L8}>8^#u_Jn5Gael2ijSBg= z4P@@Y*(D*KTYT9e>v0_ z%~IMQw%K^Xyp~nkt!a+5umVnjW!?|rf$jnEM#?*L;7My8rQ7~oZGq>|ame?!=&43A zrj$(tV54JwikvZ^qW0ZqHUYwycbGdat~bAQNI9n2H~rz0!+WnUZqdNGR6yUwZ-V)7 zQT2O7ptLFQtm3}y-4AY8Y$+Db#sL63iZT+3r;AUwn=Yu-?}V`oX#?AVwV-<~Phm81 zlr|Bv9buu3nDi$Uw8) zoQXsm_Ibxqz~D94zKl45I4I*zqcxFM#2~JSEdpX(*n1QCIXvL7Hl+i&isrR|!wh7h z5hPkoM&0wI>}_doJdr|d7IaCW#18GiMS&wV*Z$6~3G)c7=?&g`h3E&QOS)MI1xW6zjx?)S&blXS-2V5U&ELiR$lvq#a7G z+SQNPmwB7DL6W!)U6xl%E?2dr?eSP0dK{f>q$qQ^5k|SuI;2Y?X-(9GgQs7E z3WyPf9$ssQ?r#aB3TOM%UB@U7$JxFp9o1gc&O#0QV;#ppNj*QjrfRCJG5r<=NNfxw=8lEP!YmtV* z`-{`vBHAAi+TUY)jNWD)kHTQql=I_e+R)Dik4KKy-4R}rd8ijcEeh>PY zq>pP8A7Ft*c^iM0t2)>D(Ku=X?o$e;F&PE-D0e@ZvWtFYYEWyP>evxZ6t?PTmOQLN zEic1L_{`NI=S=pmJMK_Me6h)y9@8*+f*hdw)B8};NEn1_hP*z*;$1Vf43oSfhVlyH zbSDEq6aK}pz_`~m`kpb&#(=2$ARq*MUGM^quqt7$mf-68MP-7%G}iG-jxj*!YMDv{ zBcJrg9T%A~2BFl*>-=Ask&XF)NUcH*$~hkin#W!iC%OqC>iWj0@#~cS+GC5$EBzwG z%MXQD-fiHP(tGRmE^0qN4tXO|@0ss~-rd!*4iwhp%${TzH8rAf7vdNJBsWn%f&>)> z@M6&4a->nXG1qPLR(vbut%`tpUExD2XQ1T(vW{}EYd|m*Kk&&cJ^ig)Qoqi_EU|QM?`i)E)HS8oxJbanMXxP?9pi6gZcYhd^%hIbTiDsW*Q3 z*ZgP!Kc~g}ydrG9K0}C?=?z4)TyWRXG-nprF?_~Z+uomkl#EO$U;h+guZk7$Ky&@e zR1OZ*&aCwS7vP%jan03DUC{bZHnVTb_TN%a>b!@T<2FU8vdF^tf6m%`3>|`hs*Mp> z!@BtX!aAXsTS$Bnrk6RtYbwXIKYdzaxGvcn=J7}qU=om}@Q|e8Qby#UxAigmXxgG*s!ZPkvRWpHPtG~%50og8 zLw9yLQ2Fx*;;|Ef{K2aBtWsftpa_%8u*z zfLNySId4sb*u8D^zX{GpdUy%T>1MHW2O^THEz09)!vD^!N?y$?57OGWPKdyuDqwZY z`gKPJ-OzOhCY9a_PTs$9lV@{}i{^irOk;@+>eR9c1tN&zoAtr6RWvY?QWyTf7g|2B zo-yD*ZJw7uXO|fILD<2@S+d7qUWg7hTd2g5y>8qawjUb*G!j8ar*|o|2UX4{SF+U! z%MYVRWs4^%mPY;{dC8aW48F#Hq`4zdPwYY#Wc=3+^jgzL=N;N)1qyik?&iQ!A*Lle ze`j>Wb=4g|uo(-BT&F?I=a+ws)qjHSN|{(7Ej^y>Pz?(_YI;{oN1#}4gfuWlc2Em5 ztM@VV@Cc@(KVnKH8-d4C$Q2LD>6^1nmfKG2i^*JRTfsx|9}Ub{R1_?GHtt(!_!pBs zD>@pT{aa`Eo6-OduA^wX65*c=BbVvqKpWX%_`ucR-#6TN_ih(!obE#ia?-vQEw?<& zmp}@eGg(RDOs>%>12ip8#~a^P<7oL0LEq`S>RSZ&mnGI@Kmc$EN^b@@Se!ptz+K5a zb32Ek|2nAQn|D)RFq3;PThn>f} z`dwGIawZqt-Vee?T%%T$C{L@; z@RXJk5p-~Eu%Lz(&sgE4s}M1~^1Oaa%4B9HasSDx?l&zQv?EgQBSSp?M{XgW^pNaN z#u(Vr-CC9KUECO;P9feWkV%ept%(F3?pw0-Dv_YAye@*U@GQ?#b|2oEn+fj;q;IuJ zl$Aqrrqb3t5DIP5(W0?#*(85o&#M$%cL?(!*Z-O--VPRKW#OiMsT~%3T!dyLHz&UI zODB6rcWKMf-Yzg)vlPCYo1x|JgFtS_(ascUuC>_`jnn(kdDDNTJ^);cmZqEbwa?Cp zLRV2)8#EAEalEi%GE&||=)!EXp6J2QpgYz&C-j|W^7z&nhYKc; zK}3^$txx8|8>G_yqFbw|a`?`ayrNMXq%UE=5@#3-7&R2G4SEdIoQG&>GFBd>*;0~dDr^A`WJm%(c}363`+;!AA5vbo0~R{ zjN}$iSz}K3L{aB_{^MMU z>mGtWY~aeBRZDfE3EzTi1vF!a6!KxV{O{`#a0dsbf**1oI>`SElDefXm{yVZr4x(O z|KCJr?@aPrvTb1Ti+@aB9)`(+Hi#4+i-mTrlGcn+!^ASAH2f_b2Nch8NK!(60vc8N z875lR^qHo9s3`Lay(*PIeNt{=l2p`_v8gQ1ipB2jWeg=b8^kBDs={(^P2*8*W2OTuRbBxd_-H3Nh0pmub&MnRDfEo?}7Utt8_gx&dpBbr-B^aFIbobg}R@8 zPZ7~~@h#c!Vs~bxtf6a>v4*-WirH_S{V*{q7MR#$xHy& zP>_^X4395i#DQCC3(>;wH6ZSsjYgXv=HzFr>rL@ZYtWspDJp1UZ${c?{Z?|U5oHC! zyS#7(Sj9KT`qcw*Z`l4_vC*?%ZUQ^!y>ihfyRE0lH}Br4-D4Hq0o5#QcER~oTTMA` zbq_|bbx$4IiiUQeBaU_Jd!%3@U?*4$v&EAmyqwz@kd&Z z8`^HojL$DBK63S&9JdjR^}9L_sUb6Y}r!H$VW5)Qn&uqF>l z$0|q0%Kr%vg!*e9<{iBn|5)Zl)g=j%MXyYqSWpVfhobZN<*vT)50ROE(P&`Uyd&0A z{D>}c5j>lsY2ElFyDYHbT`6`jkg)8}Yi?HIrg>T8nZho|mPgm&Bh`EVO7&*Jk$=kq zuR9TnF<;Tse;`gEb_6-PSI^s2dz|!w#ZIfB*UgPJ&!D|Ai21-4vY{XFSG+~N zr9CQjn_jBrPVqs#Zz{%!%Z)H9$}UKS+b={D2Lz5OkrYk$>+`eG(=G=tCuOs?x#-gL z2HqR%WjI$S^cagJ)xQE2MN6krq2Vy23N=b&qFi*hwFpP4D~;T41nL0pfDC*G&!Za9 z^>v{O0HRZDU^o-4?AK;C4{xRL-zDArsIG}|pGNub?+E?UZO?7Ditl=4e&78I%8php zf|;7w2S}?sSo7E;b;bH4w-a%Kx;Qe;TkGar9ssAy;vUc36cs@r@PiltyJU)T|I3}P z@enG2nM=DE=?>SSj_|vBjy1k6ia7luEeSh5dR1M(GEbFc;25?NZ;kCcMc~AIhTo#u zeu{_{z%A|)E47_5xmA+>ySw8g3@pcQ2ryOs*CfxKct9gota^O;{>EL7Wfwg)JHJK$ z*jx5AD@Prauo07VgS~T&IV@$n?{at1scxdxR6r-VcS=iD5leaEG_J&-&8g?ezM$VK z!>q}Y&Aw2nO1v}UE)mEcQUZ<3`^nQojTwazbh6sPw0EPHBB*4C0lS^qa4K;VW~yrg zj&L>nIg+C5zAi6&3dz2ko_gRz{l#&E#>B)cy37ATVoys@sN4d|I{k6hJH7jM!$7^_ zXGvvCl8-?EaJSc$#(b9s#GS3HQ}=(e_YPi?|ACudpSNf!?_{@pVMk6u!T1O};k&4B zW-_`@tcH;iC8h7P;M1a;N%zLc(;qmA5s|kQBy)~}I(RaSys~@>(EHTH0x*8}{ZRNj z1&op$k?#$ItmWU!E|VZXAO0Un=NMMm+eY!Jrl}@PHQBap+qP}nwrx+gZQHg^lkIxX z{NJlDecsnT&%U2^uk~B+u(oc2FV-*AIxpj@85eYc0YyjamNm@$Yck)SkZ*NkqWuWn zBeXbqA#Lnt_PQ6zCLslMB~Of*51mN-$PjN6W%vrk8+8?JD!Nr}*Dsi0y^D*~s*zy7 z$zVF69D**+n-?*HqYM6u+A;$0CkvD)_LvgfbxYKIIv2#f?BfyN`>5 zwcepY#bL{Rw*r+M_PS2IQoDMAj8)`9@X95L6ylK`Y#VpEC6RXitL$GMB9kKog!Q)j zw+<4kF3zg{gcRL+NZSCa^Bzw{hs278jz1Ad_mcNDRZNh;*%9$3-AaBnob<5E9){OF z0As?Q#k44?iOs-zjur&G@=&6f;1dk?n5FH+l>tz*n#w2$Y@cEl9jLDF&9T{b+!@Dk zio~~;`r+Qcfa#wash{8e3uYMQfPe_)@Du;POM$$9`AqK-bRG_&=XRV@vVq1l+c_o6 zei)rZ!FS7fMR*-$&SI1+;rIJ`mBud6>eqT>XF7Zs08Nv2k8Oqf!X56wI1oC;^89h- zOIwoV5bUg+_o+!HXb)S#9GfH{5vydG|}9n z7XDq-pBv6-iDOP}2f?Cm)O9KyyA#dUXX6GVmY@Y&a1+ima+Arh8Z;McRP_eE2l_Hl5`SaHPdz?_ zF4~calvl*N`$W2%getnGH$D{uOtt%5j%-=`6lM4erD`jU_d9wy4l*x&%R=DlT5=yNh;&OtuKG?D|JdNnk$@ zNM9#?6*WN5W_6b#S}%yE30+r_*kv|v+5Dp&gi~NMMMFU?MlcQnBKULIo{A zLQMvEov+uGiGKniBi}#z1yNVjG}?IMw@o3ZpG;0p7)&lgZX48;;Tq@VD0F)G47M}K z)*4mW*~ItAgu~JyTQ$16k=-#uh#W3|{-RZhvUdYP>x4aBA3p9L2P)_jMnoOtl;{-w zKQ3C*=rzK;W!Ot4M77+?20VFK*u)G*f?U1z^vj|~vv&O>O&P?Ycc_K_Ql48XAXD$K zh~b8(QDtIWCFbX!Cpoh!sEv!-1hTMFrX+a3E{|`zJ@hL)7#hq}pGYhZ9+P&UCto=> zWhPnMNYx`eVNw3A$J*ihgR(jnmla;I=-3Q6h2GVyWJVTm@Hv_@na!Dx^mW>V`v8GQqpJ)~RUd089eB*$4TChDi}7KJAa0EbR-^ zVzO;_@K8iB{rwTb!F$c5Imvg`ZPF^Xm??EiBCo7&`!-X^L?rk!^uv}sfHb=dC`vTs zntff|A7NZ8tD{a~{h^yP=~iTGu2c;bh!~;I#t;HbducI3Od+m!t?g3URlGXv_O2<3 zDS>aQ6235dV%IQGpM3IKZu^LdK`*w?5tIEzL7-CI@&bI`Wz04T&FwdKZ!ZkjTYdX& ze~KRg?c7ODWq3>XR-q0#qz5liFvPFMT)D~2WmWT2yKSPR6aBr}e4)CYvYyid8%E)j zjII|<%m5-M1z;psAKS{g#k!c<=X(icfH$tfPM9@6;A5kHr|+6z6uTnjqXo24^>*uD> zxLF^%>i4mmCxEW)DAye>IxWqI@RT<@8ThQKKNu1A?;CJfA3ChNH^F04i4f`DFSysc zDjJ*z@DHAys>k2!A0nj~zkYT{!X6z`FUQtttqTEAi9(531|WZf{45HjdawQje0VdJuXw~*< z!K7W2hT#SLO87;VhvnMDE)9oG>D_au)U~z5t-Q6=zzF>FzNeJ7bq#L0bnl=i2c-@@x0?Fp@#s*{g~tOBw_8&zP>F$HdbQJ? z9h2Tgy82q{^yt2Se&h2VFaALbU z_j^r$k$;7Iuj0UpbC(YxI@(m>ARS^rcd;uC>gOw#249n-SgJ1%P#Mb8i68Y^Vnt#d zxFY4wS$#lW~uu;uiAT=^-j`tOw67pIAR~k=I2tetghaK4Uim79j|FF z;X0Rv+0VD@tW8{soF&CGCU_qUDJP9f3N3M1P4e6|sIjDP>A`viI=d*njO)CQWzhv{ z_ynZ35Gi|Z{ijR4vLd4;2Gzuacqkmj-{}54AZUBG!h~~CveFC>IJQx&G=te1#N=IP z)fe_d3T7NARIfc}p4kj~hsGQ{PiCp%F&LC3dp*nW0j)0|wPvLPE(Jde&-om^@w@K= zMyM!+$E2eMr2XXJ8suazV%|{fXU#u|Er~Rg+ezdwe~xk$v(LAuedfs9T%DR}z%AQm z_?ye;V)E+FjY%YNUjD?QqbT4sHPR^0UUn9s&I2!b?jETbS=`^U&p^n!Ylk*-`b+_L zUwmVNcjPI&ht>9Y*YJm+*r3~c6fZd(%)_@`Ep?A%21UVQ#Mz5ZSF8}?4&8fsS4hamc;pkRa|1?EAg&P??{wNO^ij%E@X!iQfD=p(T`Q1tuRM&6kj74l(6GODexT&3(mlO<32%7Gh$%} zTeYrEWix#Io#)$?GHelfF-1b0DqN|r0hh>~2M)(}4sQpnhCJ$IHbX2<1y!WS#9gB! zHOi59TUpXWyIWx}G|hywYGjY@>0Z?&$&t>uZY)E=Y$`oZDyR%5Vhx|9OxrB^Jy&ne z8f)L8dnj<8HS6JsziT{pF}Gzxf5u;o8LyrR%p9N2w4F&_YE=^AqmT2f0Swm z%83%c?Zj!f7bHDtASPnl_266cd|jOUb}`XCG`%q!aqaiuT*MZ~068uRWpCtDroB4Z8rQabjwy`m!YD-aT`qGUHL63^=f!)Z*83W47>=RbHa-Wyt}mp zirk#LNS|TBeTH#AE%ol{T5*^0`O3MO+2a1p*VL3b2)~I_j!`!(gmKdLgadA7&x{ea znu^{Gpw(kF>gD1%KfM&CmK_x)UL;fTwzAi-dw}McS4b*)4X=V+$A<(l7hgp{CbDT$nxzAfdofjFg3Kbll%(3}Q*k zV#5{vP`cOoASN4;pYw!Et_cD>TGSv`Fx^k6E0u>9gHUoKLBQigeQ0~??@+T%i=m|La#wG5Af2#)eq+p~&KO8O^&y}Qy<6)WT zM2Jm}#cc{j3fGBFPdZ;(X0Ujjd~Q9T%U<@!pR%)6u8uoaTG}ZkWxK>==Kpy)@icz)^y#76(9oxVoGm8#2lZl1oo!SKMbkwMDw zx1SLrHcsl?hfv|$WaTs_#rtXF_%tbkMGY@zygKy#sS%*Or^1azA=`hWmG=6V_|Mj_ zRkoAJ*0)3iE*Y;I#x$hp?Zn@93UHirfDelZx{8ydF_L?(?#91o#6!(}6!vZToOpeC z=2(kQPPv*9&Sl1C+|%+c%Wqwo7qk%n?g7xQ?#GO|0y7XRK>nA4 zY=A_^qy*u8wh;|cduJZ{%P!>ihg-?uqnO!+_%POQT{dflN3fGJs2hElY*0u;4BhTe zg3m3Owj)}_%SD;Zgho89djlDkhDgJ+^`sB-q*G1cV znIav@98sowDD;AM4zKJSQXeyIbg(08S&&GZW>08yJ8ocGm=Z_(n0_Hus64x6GmEK^ zZQP5?SoKY^{=rG4wfXZ=sj0!H;lrvEyhhH0eqn&U={Myajktm6gEO?M`~1J^wM?W* zFI1O--GA3wEj@TYy?0>U2Bu3S2Ysjw^KTJ(be}8tiVDUkEMyC6%EKL#=rFo;$&<-c zJ&v@90|CMSRbI9GXp3*{N3-m44##BOz--yLuE(frf76N%>PP z)uRtuNA4?U>b{w_DdbI-UW+FCbga8&6`L9&0@pArTwWCU}l@bb<8YA?#7Ma zd}WL)*5z$*k!i&!z*cHCufAq!%u50B%FAqjR&eWGV3bQ%cBt;J(e^CoL@WxZ_JVy8 zLvTmQ)4>-fA}+Y5!nE$I zQta##q_-)ZO#R}5fuFmFEimqIbZ7hZXuC2~RlYm!d4N9SCZZ@$u99M`Kf(Jxz-y&} zN<7zdOW8vZ5wY`HwPTUM-E+cyg^>QU3a3y=SGh>}PN-tk2PkwV6ex7KT=f4VvQ>VU zW0@3JCO+=IP0#O+m6;6GqN+TX8$b*!vM;s-xZ~G~R$5`MG3vzZlTRS$pF}1U!g=L0 zP|Rd<|D5X^Y1FUQ7<%h|^*+bW6iRnMvuB14rWsIyd@?>XKsJdCvqHi&!iF>!yTJSc6>zLij5D}>r|7bUHH?cfoS22O&%vSX?1R!I`Cuv z?K|P~cce$<`y7zsI7<_NDjhbGp$z%EbPe_Z>rr{13z=l2Yt-e*-U<7B9j{KEXM zjI>c_wtt=Z}z z1k)xCD{aQ>n2~b-lQZ3ffYR_v)!cZwnB+c6jS)kL{U_lqmV-uh=)D5)>Gv%Ziy}uF zDCMj#Ly(Hv&pgvFa-nMe1RJHt!E9qk^Zy#&f63=F>aiT%l72JU%4CJE$lY_?=oIIio#d(A}oE6grS++CZ zV*AoJG6vPi3h|j-3aqh-VR)q0nZhVFnovINvGHr^Dk*33Opb{;G z$L@sP!SY74lcHD`{SH?gYC;+E>_+C2%%U0yIPFNQn`m`C#>;7>K?Bu^RI?C8{eg^T zd^~tUmm5y>AmJ%XPDFYXE4#%F#S?x$HoINZ2o;`3VW z0g6MTO`q*6U2y+yY)FwjL;l!D|4^gP4ZLrR>hR(m$|yZ=9X*k}Uw6EzyT+7mvA%oI zy1k-2w+N?PUO*W;)$W6 zO~AC+XaC!qnooh^T&mIkX7h@IlY=8T*94gk(qp#zGH zwd{*D)>1ObM7WOien&wn$<{J0xqCb#rw^J|^6U8FN-f$Vvdc4yiMg<2Tt_?#K@zs> zJ?q0&v0gil0oo{#4U=>kk1xg_?k^m*Inq?`gZ5g-pltdvG%7dSW+Q##X?I96)$tgLdC!8#M(h}I{~+yU@mk$~UVRIk_ z;!?Z-ais_qz9NIiR{ic0${a&&9JDpVNiIb5pZ2nEw6^`W3-Pm*JanbmaUnc>4s|8V zZTlIFrK!P_5mR4Wk`wo3`DLeG0q@~E3_LnE4S!mNUzBs@4NWXp!Yj3QjHqM19najB z49NSIld~u&G^Dvs?>rPP0+!$(yg1Tnn4J3d22aq(m_${8KYs@>nQ>fQ;VX8GHYIBv z^5*0&NN@NO4q)Q!YB%@uG}nkJ;1=)rhu1z*ZrskljmN}&wQCo&W{Zt>(na=sP>u)X zI&bywQV9AnE<%pQiNwWR7^>jIkZ`K|nG+uh&$$oB1-B9D75$mXBBG`kBS%030~%$j zkj?-kr6T!NF4oZYjkuo1fF2F>%7dIEdEY5tJvXihad2Ox$o_^1P2zG4gMA7MHt4ZE zk?>V1)M2x`HJt>m{2KG)O z;5`^D@~&PjTrRsg5j$E1FPy~uM2MPhhZgu&jqxPzqE)Fjr)8l{=~CSju~tA zx;_K_mE7Vm$BYqA-;$x`@R07n(u^{hn2Lzuta=*}aw!X;VQcZ~ClT#88 zk{LuM{B^SD^oIA83oM45;%{Ik+mwyG8n}B*g4fD=w}!>?*~~C~O$jWi#P0&svKUhCqH4z0}G-YOIqFZ{rY&=#>D+g`ljD0 z2m2A&@ODER`{A3`Xe#egVdtfqwmz`UWAsC+(`sWuANKg#_p%j%m#Y(XMA8v4T@?{V z1X&ZIHSYNueb9ie{dnN!0?ue#)P-YqssxmK6&mH8-85$@HJ3h-np#t}u=A?JZ@Iem zccRs)4N?m=CDBU`>Z%IKm<`}V2bTMIA#Bm`cnlRydp6Jcp8t+s2eWtieX_G(fl)!N zoZVU7@@0eEBbTLpW?<}an+?``H!0DA+QE&oI=o|?v#2y_qgX5CBCXD`wCxAgRB*m~ z?N)Jg)~yb`e(yXiOqx1YwUmKqKF||x(JO&pW8TZ+aF~ol{b=U$t4d>{z@G_9?_Njv z@`VP#;?XltaL*0v&44nYQXiTOK5j*p{KwR%L!yr8;c3%xroj3siR6CHqK@<+IPd-F zRCXN3;qO=(Ew6ftC@DrhuL91%h>I_j;SzakcPI}dM9Fd9xvKm;caq-0f@pUnEzT!8 z4(EJm!bLuBVxLtN$z9@V3qk1%hD9|o7>lr=S8qn~9rUg|udKIA$x;8T{U(@71$!AW zEAYMp3`wjz)0QmHAc7+^ElXTlR8$0Iw2?};s;BZ8<7+qy59i<2>G z#ig4XA8Et+{dCTwaX>y-S!vG+UyeU+Noh>kf5ywgl>LTXQlO^bX(R?aF+6WuXUq|; z>*~H*1Bl=M@0_E!?0V9nq#}rX5nH_ zwl{umqJZt_kRpyuw0d*=1&a^lnp1hvD){dd2P`x3u^9m+fy9p#OD#$2tGV6un~{i- zhIVqIJFX)rfkz4UKz-`ke98WlO(qxEr~*FHwAYjq)D(hr+h|hMM!u&lciGj!!w(af z&aJEHiGbJ)vFGxh9?T_D0kp-d=wq5RlhRo&GgA| zn1lDtV}*$S$vt%E2-lBPZxy-tvM{i44!==D6yDU6xf(~hLIY0^-!{ztAKu4 zBZkL_wwit!5o{O7Cw-5*idTM_yY>9H2Ef2+ZjJMegISzAMWhjvF^`sN=!rR9)bl|t zF>B!6k66MAh&ce8l&AY#+{ESJ?-Ye44OEFKH*XH-c$NM%vF9VdJ^sX3@QW6ap@lg4 zK6_HI(C}65=IKW#EOKhnd=*#lJ8Y(VO!RZ|==}iZzfKMFS~e-5<$A~^4bvQwl_`aD zo+@XDMOZFk1S-HiMM6Ff;%sD2jd&+;#vR1{y1_kw|J;SY&WHCVbIJL4wM!y;QSJJx z419Vx`MM;a(gsolGvC$V>SlFwJVuuxSaqc+O z+P^3rzg4MRi99CFs+VvMEbcWj2n~tnLGHrE#;%$ffyAeDNH|m+Z`d3uC2c$1QySXX zeq`~wbj(H49M81vMyK^Yl{|Xe>To@{`nj|Luf`*W%qt~pf^#%DW{2tY;JFq5f+v0rc1yT zySPhNYRiUGK=yRj;iRMrWz^Cdo#5V5GOC#)Zsx@P<6-5%xyBQ_y5o|AoJx4p?I4-~ z;a{uW4X}&DMBY-aGP=a$a4$s(`_@Pppe_}}LH_sXrMI}bd~3p#9jYryS`-#TjY%xl zdLql^`wqvWdz1=pFa(5pmn?~(VU@H_nE!Ccpu?kejtm!d;Xxo-iu!K~Abg345&n5e z4kFiM*8qgW{p$D8mi zV)z*=d>V56JRQeOfV7H~6OUgAJ1^>4RM{cRMch(=&|jj)i88ZwImnKwcjcMhkK~Iq zd&kn(Ed)fJGo<8z){R+d(G@MFAx0wrfw<#Idf`cn`>bz zbz7x*QEU;F5Y1A%6#fh}z8P}iHB`}dWh;Z9Ka;YZCEsRV*z{ab65^FqbNo5R2F?_c zyF@(^$)-tWzk*2SXeYs)xN3S7#S3iGm;T~as1C_lZi-Rv1VFnlAV!_3{A<~@W^!*w&^Z$$MnDfi%q}9 z5YU5uh2rIV&E5az|LQDbnq?m%bcL>`ukSPN&2dr@Y z+molKfR!-i>r#xtu84NM=L?1!0fZ?E|46~?2fC3bI!!!svvJ(%v~H7W`NDP2uocIw zjk85GWzr{kf-gUPpx9)-`=(uZqQ%Gu;f4$cW>hKldX}~~pfy^xex_GVZ`}b;P_iFDT6g5(a5sI}9Fv)IFqNgJ`NQ$+Mf8!(?9DtrC^%QyCdO)|P93!Vt z9D*XsqGICT-Hh;w{02-Wp8nFl18Ml#`jV#Xd^C>4dzF=#4B6$@(SpCZsl;C~WO1zg zL{p|wnXu+$K@Cl@#Nq7drajgvRgk?ie=z;cWGgG~1;&aEk6uO=ur{2fo@luL96~fq zgQ~T`=gbl~E``FAnC2|@U_5fSS09#hHDH zUnWOD_>{?Foe&Q~@xmbq$M*0q8_ElEU4`?u z!mVBe=$sObbZiSLZTvs9#eo1*4|yN2;wE-P%GF z6ma^;fizF)C&0-F^z_b@$@?{D#y_f#vl}@&-eoYEnw}{8Nn42OK*vZc=$9EW;I@&h zTLs3yXXIWUVnPLdrg2lPG|sxUk+gUGaEDX}Lt>x05ch7?weK|dZYFzmce&(XHl9BlF_|1j zNwI)v+7`|qo+RH*s%;igR?9nH@bB)ZiU2Pk;kH_Bq5 z6XgX;L(Ed>a|C@?4OCdv(|d1kPt_IzJCUHQy-%SS-ZIeBvQxCA#HsR!InIh=kGR0J zWSI?S^mfa}w1X(Xw&%me3)tD4{9Q-}3!jt&{DtSCOm^>|=PRn5k^e?q)&uch@9+NK ziW;3;7FtmSD|kv&CaKd$9qUlwb*2K$y#NuFhYkQXxs5`IQTf_FJ36R<_}cdO0WqBQ zo*&;VN0wc>_Nswq?EPDLe!SPN(dsRp&7AnPY>#rViun@SNEl6{9M%F0!%jU{VJ5rA zfm2V74NF|Q6Ik@#Wb1K}7ruBxozNYspGT6;_GtcO2_qMAi@BwCS^j0#s)t4ajX<^$ zr^&nX7?GOGJa7XP%KE!-xw3d;eX|ooJJOj}yR!wS=}uG&nlUGbtWci9%hNwrwA#6R zc~l@KF`pX6ZS=f8c-#u5NrA)xd(d`9|7049Dvu#2B+GjDSqtH57fpng%D_kWzSDP+S_$R2|{OjSg^z8dr2}r=` z0sNhlevixsC875LLjMORfIAyvOI!F7784Vb!FdL08)J>E`5+&9f_tq;U~n@Lu^TI< zNas@s(f`?Ce}GOL!kxgb(>{FKvv$ujQNO_QT7XM#q8Cm#CS?-ghTV#wWiGb+SA?55 zf8gLXdhYrf$xmzl2KrNaOrg_-d9pcMO(^4P29*JVdg&(B8m&LoMbPg!1ozW20~U%1_qnmBvw} z)M~v{P+Y-p*)S5_+bYJovlVGKGLy?S>@)7Cqh8J|k>gTu)q?J_lOGwiS?tiQ#HgZP z>r>rjC6X_5gmMwQUM&|2 zZb#z@1rBrXvQ9?D9vn!9{;>p845EQ^>49;5F^Th@)jyLwXC*YFo-AM07xU!As&!ZkNIrU)d;f52fy0GAJDGBF|%YYDu9AorNm8=A=FLkQ zY834nl#{Sx_Ey@d>t`>c=q^Q`tKD_?uBthAbM6!R#p|s{fsN-*BTHdrC4Sd(GVUT~ z(Q7=?&VlTt+F{^=5%u6t^9p`}zlz7WOk!bst1|eFbh4cGM?0BHZ{}btCB%>2rR5@y zOurEhlq2FiVxbSTT(#n^YFsprKRrM`aE;L?r>SCaof}4 zpl6(Lalwu-X$%%Ou+N=Apb?Fw&XPf(M-JPY^)Q_@f}0+Alb|~YjAYS^3q8o3Iqs}COO66M_YG%__42i2$qd?Y|D!G zbMdl^lZTgf(0Hv&QiNg@5$&J93s=mDtjtXFV`4X234mn5SPQWJz$I=xU)6`)}OLMi#tEkl+=+$j9=7~%XOJ^150?mPb>dkOtVO|U|7<8hu12XZ za6EEn5Wv!Sz}$zCj1ZJm0zd4G;-X-;wSL(!zjeEcrf&D*o@ruwmFa1z&E!CfQ;y%` z8?sGma4}cYG~iE}U-;az>*DN4qvQh!XVtivJn$WctAWl%pT-O|tECXPKqB7d*Ok;$#EZiWcV^LHLUKi+OGY<)3N zwVe=TSXNO8VkVKidK$nc=7QGN))t+O+J$G1Osw};d@fdG#$8r^=j%ewBYME`D$>qm zW+J%%JwjcuAzRM@L|Vx6``Sbc-tTF0m)FT0jI9QgTkhMrlePP!ILtj`nE_C*=e5mx zNQ^^?e&$Z|CK0ySD0c2~QcGz|zQT^j{|uo%{z9vQ*^tO^hFy{d$A4hZ9hYlXhvpiS z6#`eN5uBZ`F360J$+mD&NOW_%g$gcS+-W6oal}ZJ@&7ygM_76CV`;gg!=`P}t~m&u zbEoOZc;kU#ZG(Q7{f85ynq$jZ>cN2I2;68;yEN9uz|ARviNq3~`Ep~e_X#>0xzW*@ zsDWVg{pxC()b~L2h)sAnxSXU?J6VSXmCMPu`%l(_UfLq4Va$}h|DpsdK{@j3)HFcdFFDjwmGX-Mx9OL=v`NaumT z*Vg>EZ_lyfLi|d^7P+^LN|fq{(2t!U!D|{Sm1LYGEf!d?KV{6$j?*acLwQZwdI1bu z$%ca@!9PO7RoyyeWf|RQ+3F0zPkR+p8PjaqS0SIIMc}yHw23nyMCBsIYy+0SSI~1! zo6q`O0`Catp8a{$LTF~h5?nT{ZkFA}iDPaQF-3B19K9%2LAaH6h_#b;wM=i1{Rn}rg;n%CdgNf3)CwnW; z73&IgLZD#bbKD>i?!=r0?_1jy%Q&{2jl%{EWik4~aZ z5@}Db%#UiFthw(yzy-p3G71W1{Ng8!nqN{j%xQ^J>oNPj95$%M0MuRCv`hqmo0#k- zxL9JJ);1X9)g{g0t#&CZq?#F8UQLbS^$Jk!>Z&?2GqsR$9FqWOJQhz@D=8MR)~LM@ z4h?d-;rz(Jfeb|}Ha$8DW~!cBGd86Ih@ZBHWSQrwHR;#yDzOB5HS>=v7og?_X0qC* zoZ$5s7AdZw;_&)tkpv)k3SXjcX_bEyi=C~J8jFtbt5FiDSzn5=Dw7eX<=7Ey(Q|m# z{XEhg_kIQfROAwdQx7;a6oHDJ7{Ps%kUXvLJwU$gr7Tr9h5%iXA3!Sc6+Sj!vfJ7> z(G16H_q@!EO0sj?y_CRIF@%@{maMO&4V`i<#@9gwhxv1CkUk9Fg&aXmEHCzu8a~bC zX=2C%V;9`aA z{6GB)@e_hSCH;fPIZ#s^&~0PWNmqa?t@KS-LgR?s)bds1=fihC;q7ftJ*e=I2 zdUX@(h%Rq{Mv-zC@lJFeP|E4BxKd=i}~v42)6BZ>P? zn`6myjA-GL(>FuDAgC6iN2zLK=eZ#}Fh!uip=ttQS}Y16|H6mE;YwTe8Mk)pq9I2( z14v0NBD$2L*Wk?MdJ*e7x6e5olbiC-QhHdZhXj;`7G~ zdpPn7W~ER$jbM?VpA7tx<)hEEGli%Htzg`DdfjM^2PPUjfNkjRJ(aTObUKoUd%rXz z^I}_5X!C2bcfJNnB-3SO%dfp@Pd?xdvg{-r4d+`z0&HRb9h{L)=TIoK+)tX#SS>CR zGt(p{J;By}6@5==2H??#mVGiuB5z9>4OO@!9$b9*Ji@VC#2X9zcm7yKQa9WgDZ`6r zA>YjOx_1#}j5_~pW`6*_;PwGqoKnc*oZWR|!CO2;`Gca(gWJV}%Sa0Bhp|zT+8Ue# zRXGY659QJwgGKVFkh;p4317gvA##_gUJz2B44;|a7-uXqN{-J5gievts=biAYeJAu65X3D&!W|_97H&p zW4rGJRge#ukz#Bmz}v3h!9vyQ{Ve zl!pgq&O$-8y_v|HjU_V<`eus6=8L5bb&%ZQwxmYQ3?Xo}j$wji1K`dolc*1GU1rZm zI}Mk3wCKq$qd-+<7dT3ElCLkc2lq-gL@9=oqwm-A}ASlI55Ex6p^LK-X-xVkggDV-^OWf2mkQS4(AEAriB9Yqq563|Nb|jGzci6)D{|R}gOULc_uNV%=|OsWC}CM z^n3nAvmr8u+#QAwV^whReOR%N6OuM+3WvYG6??MugeCULjxJW;-ag$i7K+)Kj> zBP92bMRZ;_FBx-PSXg)f8hDDbT6GdUkh^3R?SLnOs!NbhF`~yl_LW=cFAt0CGDnpq z1KYMEl=q3A_edv^o#$az8gopK=44Bxf4sV)Wzeg@Bcexc0bHKv(p1w2RUSV!srs~~ z4wS%IN#Xh1P``CnkocKv>nsp2%mU%1cBjlIJ!&`^_YkPU9g9vy^~lnCmGh!j_b zuk<;rMUK`jITe0({|MJ%q}CTH#fX(O8Vi>Wx$E~U?n{FRfYsR*)OciboEK=vP=@@4 zmcU{sX2m!e8n`vVWv~`roBm0D^x#NV!yb$==MgnTHim}sv4#TSaZ_#)O}0^3aPfYt zR*!meX|n{r^-5(yF1NnrcyQjj@JS-nruu4W!InR?9dM)c;dmyO95X&2dpLGelUvic zVL3_alKgjvdLEl3=wyToz>JIIeVR>Sp{)7}-|-Z)w+#V*;K}O&*>gWnNn{{vE<*~m z(ul8~Mhu)_RJc$$)ST0!tBETvMx33Uo~Tw^A2}et+5$tmZvVv2FIGnmNR?V;J!H)U z*L|RR0Oxb{?bn_3Qf%;s&94-z zKEwu^`^#13sP)iKd_Z^x}irm_iTt}3a4ZvuxEEu zHd*B4P_PKV?{nwq2vU-y6W>zPV*=YAt+>23|oGZ4KbRq zN8v`IDk;$Y_9*v9<9CtlN?}?mWZgp+c|qEeLcx9VM88<&A3>9hWmyi5L#b|bOWp*coI1N+Qa?i597K}5x*CIujzjMTWsq@E6_u714QHST@L*NgSYMmKo2tc zHTT%hQ2ZbQ#;UKV{~P+RSQG>!nY*dNfJy>3u+U)dR@l=EHRFyE&~)}K)|zfF6SZ$X zXF&+y{YLU!3=eXNQ=T>uTqaokO$Rp*R@~q({fyukWz%fBQFt`y*l1ysblT%B!qvrN z9=Cq$ungzgAdbb7i$i9bGx=qK3xz-1i14)_xLE4!u8A`+J?E~DnBl@+>YyixLWUUf zTaNUPjuu7MGr_XLJ-Y(dtCD;6KIEctre<|EZywfg4jCQ~I|DT^qw9GS{m zrT0yhwAu|Q^9MkEtC^e1uM56rXzAT zp2-MWMC$fAhS%z)PCRv$yLf#F1;h>Rb6z?c(z}K)N6hW(zoaD*i>^prC5!R#?w^^1 za>7>!5gK(YV!#J`OTQn9j?vbn6%bV-kUqrSWGxf@PBzL%Og_xBuroq-9D%hfy)Tyg|4g&{H1+ zMvW=Lnq3>1bbE``A@MTngU)Jvom9aLop{t!X!oaSd2jMnD_Mg>bi}+v2dtBt@FZ%e8*7#1Zzh zv2gchfLEr!Y!v|53CmO!Kc*kPaXR_zvolD81$Ty*og(@?AH2y?V-L;F#{II8iIf+k zkjW5qkX6M}UW^EDdfM^rnRH}`(5MosOoHTw;x<+)nXkLbhX9wblKCM+4x9k_UMC#T zQf;7t^Wb_R(8~dq;pq7bD4+Du%=WGLPWGAJZ)XhFK4e2eS)m#%7m>|4iS3G?7h1#+ z+2x3r;Q4HzOk6TS#3AuB=%)Ovvp6%~+75J281n+vH|cOoo)4)X3+&)N=ZecdV*u?Z z5lS@RB*rPtbyT;nLg4lue+AJ1J|k_HL<9Ef+{1{ydAND3a!n4AQ{}vtiGGDS9=NU} z^ePu_*gr}P(jhBR7P(vZczfkCWMe z;M&lMJ<7yi{|bgT8ez8gvA}4Hpt?ZU*bO@**3_U_w7_Ahrq!!f6DHxrYvM=?6bhJ% zmlYXBZX+$@nae6-GnZ-7KyD-AWdzQKZSz}<5jDWGf;wW8(ZiSFu22S9U}hS1r;c(d z&}Rs*EN&0csw7kqtR(927^r9?rk_CX0_!PLaekj@M~qimZAal)jzxx;!a9Vz2cyK_K%~-6lsim_77qb!MxvHvBl&7WwuYy;NLo`%NCg997 zy+IqKg)r#!7w{Ezf4)^wfH|SlUm@m{}=BU>Qc1|ieob}K^ z&5VXI4LCUXyCNWXN(ITH!08v@sakq8OcC*IAY}DMW5SG6f_sDqm!$bUKUY;O3MV#n z?LgeGRI?3@c$iwkQK)2Ile?4mt~##f5VW5aKP^sBizU`nyz#B9J`dRB{b_l4Le7B+ zYVnU-FN0L$?^}pV_euJHh61PLUq+lxu#g><==z`K#wPSVqGZ`OM96Jw%B{=IK2ndW zq*yu(J1Qgs$C@VwPRo>9Q-ui)Nrlk6KHbM$F*>u)Ma{mdH$YdR=<$?5h24$)6yA3# z8gN$ixj47)8gu7)q|Jic86?P0?aQ*{eFP@T#}lidIgb5eD9~7R#eiWK$N)L zifvE~Bwbzw&CBnHm5I)$3(&6<4o5`2JXe((as79!NF|uyRvkdvSN9Ge)6L;)26?$O zpcs;Dr9(eeS_P<)S95vn3_~{{dn8!v&`PVg4G5C9OB_s^J zI9-epVa~k5h(6xUj_(I_p&9gsO}y)ch6Mc|TS!~xYb^^h0EEb#j-cjfewX{N=?|tz zxi+!{UDh#QyS0pXLsZ1rs)nf5=hapmZM1~2xq^PS;sd*{<3#$*)9b$AZadZdXZ(VB z)yl!K=x~OSrQSeA=JC_I^n|1^8>&>`l>Jkqa#Vl2b+q1x>NCUK<(oOEtktN7R z>ccjvsU_oNQE89z%PHdd4P}|+I3e?HNbbUQ<|Pr|79aa9eM{ZEYiGizAML4n^z?aC zk#$@r{x!8bF=rXSHz^T(Ua;rlm@3f=SQ0=>+Q-Q7oRwejd&!dRIKx7z_gxuswXN{$ z-?e}8NY@`*ZR)1}plC{(ZEm;lOpS@H)G7sUh@@l63o`Fz<$f0z#A2zCfxIhCO9!Tu zMkmBXOyA%VzxYNQp{^J#C0L>5tb_2Z4Y3m8J5n;4rvUgn8y1J0u$& zFWukJqA=grI>|PA((({z+j1-XPP<6sw+V;o$nU{fGEk0xlf$~}n_x`Ek8m9ps!JH} zXH)Q(^AQp~0c}D`)bXTX^EuGl@tDyVcrap~+1f5)jkirA|BM&WQWXGhm0+`<6mWyK zI)ZdTc%8fPqSqK8oXo* zzTZBEGxwgJ;SdbZr}M|1R#(#OpPA|VQ=)$1_trP5L_k;TbEW2KNzTz-oR_KZgO^FTu8g)7W#=tZt8V ztS1x4zG926iXNU#Fx_`o&RQJLbNd1`A@p-$NY4G!q<$X=S3Kpt8@XPQTv4jKI+wuwVwDbNpXH-WqrDELKnZslIeyHO%DplD%r+4ipVSE6p`NC@d zHfllfUpJgFT9S+(MXCp^K|b4ckaz6g&za;QeYx;h-0#%7nwMHawHAr!j>q;}e3a*L zPVhk=s5=Ev%#HlSe%%Cc~y*cpR`lfSvFwR44p07LEzgi9_#9Ri#YTMoV;Ca zfaR&;nF{wFoy^~*}GxtC)v~=gdtq79Eu>=mtaTG=dUGqSURMox$r|YrhL+O?V^62fEXLs;35{N)y zN$`WcnVUOad&{p^jO*`p9Zv=9yl_kJTiEumkAM4OheT(7X?I@@ehEFCl0{>5aK?(d z$YoKAdjnnzAy32Mu1)g7CH;CeoEeVir#55a%R5mXlpw7u6;up25J^#<5951~5UJpB z$SkHk9HFxucw8RA6Oa$+M9-1)&D<{x7U}=@6(CN>)utJUiLxX{PFrF3wly~ZE&7GH z$za#8+#(_Sr;e>B2hZ0-Epk%! z(Ys!L?BodtA!-mO>%q%~ceE#(Lt)NLi%t43f*Sid<&F7dy(Vke5x@(`uCV!JkG(@MmNr_kB_)l@1NQ3c z)0aSJ?o8pAHH+gqEbjUfBs+^4PNgx4_n>myyi*OG)Nxm+*cIU@X;D&!(x-&j7_%Cn*U8VjDcIkD=a2eE3~xu2y4rLc2%2&ndZpX*`do%>A3T7I6f zlg85Oq_L{A>E=vl)7w8Kjqu)5qX2}_8Amofi5Y-NIvoY-LvzZBj#G2taLt-J2c|ed zm7^nLKX_qbkgs>T@5T_s9Sl@=1*yd!%Zr4n06c=!*fwyM?UPMEt;G&Q1Nk~zSe2X< zNWsNdC}WCwP$yC$$S`00QTDKJ$ozQ7M z2(D06agbT3;?BHVnp2gO$cuFDn;0m5MoAVd^kKWc-Q&S5`E#oIb1K1cr36LoI)6vb zt5a`s03*hJi5)p!_BzX3)~e{KSln*I8+B4q9%Ge`o+S7c)7R+Kn9af&erkdex+QelaV}8H8ZQ6C1YUYnKOmUVl{EWZcj09!R zV-J)-pQln!-T3Bwoov>})_oZ?+pR|?c(_2aTItyqXYd!BkEjCXs#>o}#;)J}@PY=7 z)VwrApyI3d<0)H*4zAy{6< zgwSPJd+zu!53#E^7n~REuF#aA(!_x0Yz=YMc3+ky*>R1s)|@={*LB#KlAtY(Ie&w%3*0TnLr55B3|#EYoLaCR}NI^mLXdl5|#M^7t8Dwpru${f8!lL%(p8$ zUIu3%>Rz6^DVwyAn%*nho8Zj5^)#KWI1EwH8Xc*;a}TuQ!VCvw{As)b7!Qt4TY}su z3ehcimIYW*=ULs$Gnm$!d=a}jjBW>1=aMo=`V|qBl^hWu-w*zRBAgSlh}#0R_L^@( z-Sn^7=pH!VEH7`0a3RmA?Wey`<2aNCQxC*Q9cI~u3^7B$`R;{yURmY(;`JO!;n$f% zA#FJ#PWn*iOWDfPLnRA>Qf7z-qh*bz{9mvA*!d9K=(vazXic$5KnI46`KMcMB#(j) zJ6g+vbf?7JV$`*NMJ8QW_NHiT5}Zl&;Z&C*E{7+sMU?WousV=587NJpTG zRoIIM?{B(jKdHE;dd*C5vtrlnIaT9gHx3o^Z7=emSdn5B`ue)OC#TWuK6Nq@Rz$DY zpfC9x4ked;0aY*z?XBnwY{=|uzdZ`cg0Q^TK?bk(0DSLj+4=gocJ$(4wN=l!vjXvQ zlYsOYH_@wj(4aL<$PGs2(WNd@0d&y?Z4bE!rqWG9rmNC{7kG(SR#DUR-^K`A9M0Di zXy4&zO5oR!IN{>2ktoH|xNA>elXt^!zpXaTr1x=o!9!*sp4YIm4hfyb_L!d2NE=R< zZ_ArtK#mFFa(`VP=oI`uphy=qUKEVx@*E-@wuZ>}tSVBrCYmEOHky1drQTS;p}cDe zOUx%(aE&I`JLW$ka@AU zenMU30V#2EVaC4XYcSu1Z7u!?MRb?6zRQKvIZ4#yYQ!PT*B;zq1~!%gc`aG6?6>Dq zB+THTd1KBveJ4n(T()lIX;m5Boh8Xs4uJ1ElSU>o#f++`+Vi@^um40zop;%WAxw%bZ{(BjL3jHA7Vg`s3vB zCIM&QY~xaQxkhHsj^+g9EJ#x2nV6kaz-;8*Abc`?P2B@!w6(zQz_x&VM zl8aY5Oy(;$R-|qEsIf(6mazBdIu{O|%inf7vSsL^#Gq^ofq5R2`6-&`VHwXjj*3QR zyGRwtMPba=i_mt_X{O{pViCA@zyr%uB2<@YpMymP3eBD;kWvArKj3=M;qd;iVvtff z1Ui%vWUMd4B)1Cy3!eKs7D-DYuK%nxX69KKMAp`2+h>fn8Of`*O(%VL&i(r__HYi1 zmWac6kCLui$xmw}OOy&4KvznoZ_F7h`Ukci_d56%dcbS53So1Qpk7-bYofGW4({>hjj zWb^)`-bF};W*Kvwg{lkM!r)6;a{2Uk$MBb7;Z)4NGr937q$eY?wU#;TbKO0D5tubq zfE3Fy75t{A`lt=jCk!nOs!!Z1l&j`eS%norN|(0tCs5-|C9LI7Ddk} z?oW_3+tnZX36=i6OnqhDzoGJ}N|dSwrsLgvnZ#eR^9KSi#z!vCIqW|yS41rezi!OO z(i#iz3Y8$_J(3Kk9|wtY!j8OO@8vZg#rCS#PzvD-dmh zW^je5y!uBNO3MaCqC07IG7rQTJP&oXjIKoDQ2TtXEY6D(9}LN+}A zj4F>*!ApN~OaKAH?EINq9VgLPFV0=*w?cfF&KS68`2#f7>WpF1 zMA_&v3|XSN0P-{Hkf$D}fS-Jd!9Bl;Cay*_7WR3=VSCMW`v#?QxT4iQyNAI~w&H~_ zWbu_~B}X~&#g{7xJ)O%a=Pim;@}HVYSg#oGsOt7`}G?Rc?+Db9Y8GtGV>eloFZ zz6Kp)X=f0hH|SkVJ3@|=Le1t$7c&|+Wgz_T$J}5-nS{ciO ziL6dQeGyIo8*g7^F<&WGc&QaT2Tj>eN7;M=v|wXdOP|?B1Gr(jQtck)m=qWUx!!v~ zpDl|cSqcfsA-oKt-+~6kW;0jNu2@%S>#xAjt~u38tBZmpXH){DfhPpbMr6afwqmi< zk}XR(F}4Z*V)>?mZQoX;q&CFP+L!>Qd1#KnjTtlW|%cnql_m%am29q#NlkLDbAPoB!(cj z^Wh1{nVJBMi_v| zNXz!baujo!7X@&DM+{G91*@g~{44uiN`!51K?$r~9FbD$?-$y}YUMzzkHjy5i)iUT zRxOU5T4^@|n`NzMMsiP69V<@DJE~z94D$5DwL!OTnu9MZP;ee1{;{)7s)}UGSjrwtfwNcGti!djvHhs9L2>=~6M;~|Hs@R9k8pGb; zl!n2i7Zv<&|Nac(z8udwxCKT>xEV?250};Py}VFWvwS*h0RagDt>V?6k-{0M?+NkQ zcD!)I@`}h^K0pQ*#Dsw$d_pTq2;pNqV9K;UikEWZL=~1*U309*E65sMS`|DJj%bQm zFk<^uqGLdL0+?7!xErFhkd@>jD)}mtZDR%VUXIV;%7dz?BCPwBqkO+?b)M*9O4^cP zbiS#`xoPK;MPAYUS>o17$v}*w*lZfGe~A0trSB@Wh}7iF6qBapx1kn^g~4Uj-g|c} zew=&kTEI=_@H^=#-jcr)la_Z~pC8n9^b}nB=_e_*=2qt7x;&PV5in)l7`o zPr;)kW+Mb&ok+Jzofbvarl{-4^fHrLGYT1q+JJA-MP+%6nWFZPAftKDz|;lO5A@5B zLRfM;n3eCF2wma^4lXi5c+H>4`#9!iv;)f1!Hb9nP!2iyFcbcaD=ki0H5&O+Xjp_j z_Z!V30FDw&tgzv{-cu!R>eUA3jXQ3S40=n|H5BWz^mFn}nBX3ZioN3Amd$nF8=Xs9 z*%`RC1X?6VB7;6YaDswhk}>FWnQZb5TZfIMak8=zI<=y$nKgg0#KceX7aZzaJHl%% zA`IJ+oTX24oza8_Q9H^drSf_{4Cj~jD z%;*VbETf}it4*by8I8+|JqBQj%NAAj%xWw1N>L3@CY63;kU=lpfl#r~5k1;lTqg5Z z>S!VkVA7#tWZnIvXMMbfoRkZsq=O@n9<*X%wrJ+}UsU@+6x=um{80w-5=jZrP$vP2 znWl)=RQr(Xq?h+XJsyI~^m~ayX$$6ooK4_WAF7?CXCc}fJ*U`k$depCATA8ez+ek5 z$bd&bQ)(CV;`MUEa;e=@FZa^iJh;Ex{91ydt|DockffAqh$8J5`LZw;{9N~a##=9U zBQ?IWmNETmxeN>1l0%FzXuPhE|8-Op8+nrXl2pY)L$nv`C`|XsxgjSl(mLo-m(3qK z!`*b$C6|wpEtn?nE-}h+L8JmijS!}7?}8)S_UMdxO5Gbhf+O|{{g&MCb+%Z+6l+Ya zB`sSKpb1h+IirIPzFuvgAFn29cXeGLjg9fU^K}kQaIEKn4?bu}zX3zja*`9A^5R(; zX({_!l)Zmgm}c9n_r9RFL;mYI)H#H{{YtR?zQS(cpH-xC(Fw#x+XH>X`j@jbe6L59 zkZ<%FVa5agk85|;Jj83e$>jO?cObNaTotsm5q7KtW#8oN`s~SH-&S{6 zH0##LN?2}wBP;vWH`%F1Odf^!(Ehk4*bV7s3YGayV`HEtCC@FtQA1pIWvbqmGZ8vE znKX6-xDGq2`!gfb-^63N*&EFW8C;Qdv9YcFO>j_6ZXbDa`rK{K^*YKplk{u5+u{-y zt27aZAeSH$@l1aRS~9198q5`wfNvpL)}V-(yhCHjWBk`l#3~WRXL!Zq#*DE@n#o~6 zcBop94(<4i{!w&8PcBq-xQ2Sz_sCt_NL8$r{6c7-$lD}(?pxx$F=$;$MFWkrqMReI zY$W#+&3Gy<`V1vB*VAda85WK{cXM4#j{#r2im7RMKu{?%zCibd65jA)c$qhT&{jM} zW0Xgr?qg3wEDssGIc=Vy|90Ox)+aALUWIszc0_27^cvKFwb@JgNl#FqI0< z<<6Aakq7zjxf~fzlblGTYWuo~XJUBn!arDvA0^?PhyqeC{XmctuwVrI#Csi&lY)Ch zOOSLTBeH!jIqS3MAAUvZ=3vL@4k#e+CgpK@K~0Y~W0?E09r+&$Es!3t19S6;?sJWf9Qq0hlH|Vhlw46|UL?uU zlO355J}@P`Lw%%xt@u;!faN?9aI|LMZlS!9x6J!aXwVeEj(;SY%%g!PyYCQ`c}|DL;U^ZBChyFY>=Ym0=cs|L#V%*qm^{!= z66!TOMk7GH+n^jS<1~EiC5w&P0CO#{zHQdl6PD`yV4UWXi)R_QD=GmTgKiSgO1{dv zOK%FU^K}a8jf;KOPcsc%Ox7uG%NIiaC2qJBL7<4EfIWbg7#EeJq$bLeHDJ6E{bOcz z)Xxu}TkLd?J|t|4!-oeVLJ~P8x|JtEhxt4v|F^fM^|Fdfbp3EU%21N5Jc8+t z1**Ok!qW@yMH?=q#&KF8!nzf87H8CuDj^xajnkDDUC^s8Hk@u}7rDq2FE8c}(gYVk zDJwE7SKL*3L1aG*hg?hCCjqQxGEQH?+0+0}CJ58{bEIxuF zzwmtChJ0wogsblVxhE13!ED3Nc3rl@K)?cwg@D3Ax5BIl^@O#Gy*x`Q%V z6Q9N_|0AtZV;BQlz7*GgPgZ}?o`GnRMIa}=-!YvUEa=cEkCU9_XlM2CX*8MkB~YL& zj5-K@8{|_&7`KfT_hMLk3vR7^J*HRQZs8&`D-N95sTnoKQp0^PlE!bvwv)q%7FWO_ zotOQS#(dm|NrS5KOUJ6-ku`#URHTpV;Z}{G9Dxur(#s)8{Lm@*=V}H=+449Xlh{c1(y|etni*>EKVb6w(QVbjrC}n7?I(6u~v|(w7`YKoar!zfVX66&H}d;}k$fZ~Fs5Z`OO!l$~TPacH}t z3o?0zr^^3qIwi63dK2C2QpF8(<&|vkI;;)|S58opD_$VaN&2SwLF)bp7*DVm-)bL? zFbP2^j%m2^e|_BMZo}_$s|h%96zQDOB(vS}!7!`D@4?OjaEd}dH(p|htfHPoT3$XU z5g?l0W!^Rr&u0t+xGy?t2lg8q?Y1^SH>Z57&yRN|7o~YB=)YR@gpI+fZ?9dS+#ql8 z)oc<726L!V|MoAc^ng3=g(VksQCVBBG1^E`_ zx*OwW9&_ukE7b%imm#K#rd$!d&8LRqE-K>#GgCxIwqvTl3mLVV$MNwLI0vxVNS(wW zxfc`?-bT89=~G2bt8?Pe#EoH6qUl9`q_Pw4cg7HnsWx3x*zk5FQQLptDUmEH6D`g` zFoC*&#|_@tBO1Vj>9pV{X3U`>?_u983gW2so|^X?=1HNQTFHH#Am@jcI2pyKO9!$kV`>YGiQ0?^V3XsI!Zq@iHX*a6V<*&z;7E<|h71M<~D%KKbk zoh==Ug-RY+B-));0vVKsc7CRCCsVwT3mtXFyuK)Y&

Cx+=JJi&L2QUh+tcmNzY7fJMOpm#YG9{O+8a z^m0obLIkNLh4PhUX1>rANmTr<6EnA)z_qKZbB@wV{~c*~xn(!5N&Hm?dc_H!_$x=Q zy$I%hvrJ)4M8GM4lQPSF0Wn**ON%M1(a^?9ff}_V8m%FhzLV(jLL1Nw&{n=P_RT}Y zf9i(3YMJtq<)S*zm$wzz9ir+WM=g>M$lOm2iSKC#u}DxTSMQhf=v(mL+U3nt$zI%% zJS1miNy{Y!w=U$j1Z}8oN?t~r@_bX-;iu@O1g+)24WP@JX2k03gb4InX-kv@{(-WR zf?qsoC=eBXKZ+KAjJ8YBRk}pB%6b@9=k@KPP^i*46{xv{%K_AviHj&FuVFS>aPXP% zsP-fJ@R@t2)TdpXhE1q>iY;vkZfYgn|7n@=UPguKENlJN!+Nm-ksby`e3r|g=$Bx& zL*ficI6f*=tC3{PKq_{r=-79Ji;Ttv`^e79jH75^wn&bt+@IP24;xka%rtUuz`a9E z6tM~;0N-)4z_PVjN|$8eNpbp&sBj`P9$}5oy-3uS^68{hM0jpi*EM0RQJK1=z~G+j zWa(DV6)0)0%oZ~yS$oc}C(2iKHn!(mqHvy-+CBA`7i>%4uPV6QV0UQfVP`!D?kVyX zFFHq>NgxLtJ`b3_%q9xjEJweLGaJe=$*f7oo!gE8u(Za_70N(rmvL�xoQ8Cl(KU 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 F{|3f}gc1M% literal 0 HcmV?d00001 diff --git a/docs/guides/images/viz-slice2d.png b/docs/guides/images/viz-slice2d.png new file mode 100644 index 0000000000000000000000000000000000000000..ef004d0e589c6e617abd6af636a77bc92e1414b3 GIT binary patch literal 16554 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 literal 0 HcmV?d00001 diff --git a/docs/guides/images/viz-slice3d.png b/docs/guides/images/viz-slice3d.png new file mode 100644 index 0000000000000000000000000000000000000000..f4804163e3f545986fc70d170b2de6c5dacf4710 GIT binary patch literal 114568 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 Ut(W?@eo(+=q;H13tLqZ`f2>c0S^xk5 literal 0 HcmV?d00001 diff --git a/docs/guides/notebooks/building-a-model.ipynb b/docs/guides/notebooks/building-a-model.ipynb new file mode 100644 index 0000000..f9af77b --- /dev/null +++ b/docs/guides/notebooks/building-a-model.ipynb @@ -0,0 +1,524 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tutorial: Building a Model\n", + "\n", + "This tutorial walks through defining a reaction network with Antimony, creating a 3D geometry, visualizing it, and running a spatial simulation.\n", + "\n", + "See also the [Building a Model](../building-a-model.md) reference guide." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Define a reaction network with Antimony" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:11.519675Z", + "iopub.status.busy": "2026-03-06T02:42:11.519545Z", + "iopub.status.idle": "2026-03-06T02:42:12.503712Z", + "shell.execute_reply": "2026-03-06T02:42:12.503459Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-03-06T02:42:12.487034Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "Please remove the `packages` attribute from your configuration file.\n", + "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", + "2026-03-05 21:42:12,491 ERROR (SBMLDocument.java:573) - There was an error accessing the sbml online validator!\n", + "2026-03-06T02:42:12.495871Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@4f7e408e and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-05 21:42:12,498 WARN (SBMLImporter.java:2878) - failed to transform lumped reaction J0 to distributed: linear factor was null, lumped reaction J0 could not be transformed to distributed\n", + "2026-03-06T02:42:12.498501Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@4f7e408e and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-05 21:42:12,499 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-05 21:42:12,499 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-05 21:42:12,500 INFO (Entrypoints.java:172) - Returning from sbmlToVcell: {\"success\":true,\"message\":\"Success\"}\n", + "name='unnamed' species=[Species(name='A', compartment_name='cell'), Species(name='B', compartment_name='cell')] compartments=[Compartment(name='ec', dim=3), Compartment(name='cell', dim=3), Compartment(name='pm', dim=2)] reactions=[Reaction(name='J0', compartment_name='cell', reversible=True, is_flux=False, kinetics=Kinetics(kinetics_type='GeneralLumpedKinetics', kinetics_parameters=[KineticsParameter(name='LumpedJ', value='((k1 * A) - (k2 * B))', role='lumped reaction rate', unit='s-1', reaction_name='J0')]), reactants=[SpeciesReference(name='A', stoichiometry=1, species_ref_type=)], products=[SpeciesReference(name='B', stoichiometry=1, species_ref_type=)])] model_parameters=[ModelParameter(name='k1', value=0.1, role='user defined', unit='tbd'), ModelParameter(name='k2', value=0.2, role='user defined', unit='tbd')]\n", + "Parameters: {'k1': 0.1, 'k2': 0.2, 'J0.LumpedJ': '((k1 * A) - (k2 * B))'}\n" + ] + } + ], + "source": [ + "import pyvcell.vcml as vc\n", + "\n", + "antimony_str = \"\"\"\n", + " compartment ec = 1;\n", + " compartment cell = 2;\n", + " compartment pm = 1;\n", + " species A in cell;\n", + " species B in cell;\n", + " J0: A -> B; k1*A - k2*B\n", + " J0 in cell;\n", + "\n", + " k1 = 0.1; k2 = 0.2\n", + " A = 10\n", + "\"\"\"\n", + "\n", + "biomodel = vc.load_antimony_str(antimony_str)\n", + "model = biomodel.model\n", + "model.get_compartment(\"pm\").dim = 2\n", + "\n", + "print(model)\n", + "print(\"Parameters:\", model.parameter_values)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create a 3D geometry\n", + "\n", + "Define a sphere inside a box. Subvolumes added first have higher priority." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:12.520930Z", + "iopub.status.busy": "2026-03-06T02:42:12.520691Z", + "iopub.status.idle": "2026-03-06T02:42:12.524555Z", + "shell.execute_reply": "2026-03-06T02:42:12.524280Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "SurfaceClass(name='pm_domain', subvolume_ref_1='cell_domain', subvolume_ref_2='ec_domain')" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "geo = vc.Geometry(name=\"geo\", origin=(0, 0, 0), extent=(10, 10, 10), dim=3)\n", + "geo.add_sphere(name=\"cell_domain\", radius=4, center=(5, 5, 5))\n", + "geo.add_background(name=\"ec_domain\")\n", + "geo.add_surface(name=\"pm_domain\", sub_volume_1=\"cell_domain\", sub_volume_2=\"ec_domain\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualize the geometry\n", + "\n", + "Use `geo.plot()` to render a 3D view of the geometry before running any simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:12.525967Z", + "iopub.status.busy": "2026-03-06T02:42:12.525879Z", + "iopub.status.idle": "2026-03-06T02:42:12.816157Z", + "shell.execute_reply": "2026-03-06T02:42:12.815769Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jimschaff/Documents/workspace/pyvcell/pyvcell/_internal/geometry/segmented_image_geometry.py:94: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " plt.show()\n" + ] + } + ], + "source": [ + "geo.plot(save_path=\"../images/building-geometry.png\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create an application and map compartments" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:12.817535Z", + "iopub.status.busy": "2026-03-06T02:42:12.817449Z", + "iopub.status.idle": "2026-03-06T02:42:12.820339Z", + "shell.execute_reply": "2026-03-06T02:42:12.820106Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "SpeciesMapping(species_name='B', init_conc='cos(x+y+z)', diff_coef=1.0, boundary_values=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "app = biomodel.add_application(\"app1\", geometry=geo)\n", + "\n", + "app.map_compartment(\"cell\", \"cell_domain\")\n", + "app.map_compartment(\"ec\", \"ec_domain\")\n", + "\n", + "app.map_species(\"A\", init_conc=\"sin(x)\", diff_coef=1.0)\n", + "app.map_species(\"B\", init_conc=\"cos(x+y+z)\", diff_coef=1.0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simulate" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:12.821471Z", + "iopub.status.busy": "2026-03-06T02:42:12.821386Z", + "iopub.status.idle": "2026-03-06T02:42:13.706420Z", + "shell.execute_reply": "2026-03-06T02:42:13.706090Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-03-06T02:42:12.834820Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "Please remove the `packages` attribute from your configuration file.\n", + "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", + "2026-03-06T02:42:12.838337Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@5247dbfa and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-06T02:42:13.026539Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@5247dbfa and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-05 21:42:13,028 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-03-05 21:42:13,048 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", + "2026-03-06T02:42:13.062878Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "Please remove the `packages` attribute from your configuration file.\n", + "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", + "2026-03-06T02:42:13.063888Z main WARN The Logger org.vcell.libvcell.Entrypoints was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@217513e8 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-06T02:42:13.067667Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@217513e8 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-06T02:42:13.074413Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@217513e8 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-05 21:42:13,080 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-05 21:42:13,105 INFO (Entrypoints.java:83) - Returning from vcmlToFiniteVolumeInput: {\"success\":true,\"message\":\"Success\"}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting Base file name to: `\"/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_kkloe2do/SimID_2079696081_0_\"`\n", + "initializing mesh\n", + "numVolume=27000\n", + "\n", + "CartesianMesh::computeNormalsFromNeighbors(), compute normals from neighbors\n", + "Membrane Elements -> N=2544\n", + "==============================================\n", + "--------Num of points that have zero neighbors 0\n", + "--------Num Neighbors before symmetrize 14856\n", + "--------Num Neighbors after symmetrize 15720\n", + "Total volume=199.330193\n", + "Total FluxArea =0\n", + "Total FluxAreaXM =0\n", + "Total FluxAreaXP =0\n", + "Total FluxAreaYM =0\n", + "Total FluxAreaYP =0\n", + "Total FluxAreaZM =0\n", + "Total FluxAreaZP =0\n", + "mesh initialized\n", + "preprocessing finished\n", + "pdeCount=2, odeCount=0\n", + "No log-file found at constructed path `/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_kkloe2do/SimID_2079696081_0_.log`.simulation [SimID_2079696081_0_] started\n", + "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_2079696081_0_0000.sim\n", + "**This is a little endian machine.**\n", + "[[[data:0]]]\n", + "numVolRegions=2\n", + "Region 0: size=20512, offset=0\n", + "Region 1: size=6488, offset=20512\n", + "# of active points = 27000\n", + "Constant diffusion/advection in region cell_domain1\n", + "numUnknowns = 12976\n", + "\n", + "****** using Sundials CVode with PREC_LEFT, relTol=1e-07, absTol=1e-09, maxStep=0.1\n", + "\n", + "----------------------------------\n", + "sundials pde solver is starting from time 0\n", + "----------------------------------\n", + "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_2079696081_0_0001.sim\n", + "[[[data:0.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_2079696081_0_0002.sim\n", + "[[[data:1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_2079696081_0_0003.sim\n", + "[[[data:1.5]]]\n", + "Final Statistics.. \n", + "\n", + "lenrw = 129849 leniw = 50\n", + "lenrwLS = 129806 leniwLS = 10\n", + "nst = 179\n", + "nfe = 210 nfeLS = 232\n", + "nni = 206 nli = 232\n", + "nsetups = 28 netf = 2\n", + "npe = 3 nps = 409\n", + "ncfn = 0 ncfl = 0\n", + "last step = 0.023755\n", + "\n", + "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_2079696081_0_0004.sim\n", + "[[[data:2]]][[[progress:100%]]]" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Simulation Complete in Main() ... \n" + ] + } + ], + "source": [ + "sim = app.add_sim(\n", + " name=\"sim1\",\n", + " duration=2.0,\n", + " output_time_step=0.5,\n", + " mesh_size=(30, 30, 30),\n", + ")\n", + "\n", + "results = vc.simulate(biomodel=biomodel, simulation=\"sim1\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualize results" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:13.707768Z", + "iopub.status.busy": "2026-03-06T02:42:13.707672Z", + "iopub.status.idle": "2026-03-06T02:42:13.769728Z", + "shell.execute_reply": "2026-03-06T02:42:13.769419Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jimschaff/Documents/workspace/pyvcell/pyvcell/sim_results/plotter.py:71: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " return plt.show()\n" + ] + } + ], + "source": [ + "results.plotter.plot_concentrations(save_path=\"../images/building-concentrations.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:13.771099Z", + "iopub.status.busy": "2026-03-06T02:42:13.771016Z", + "iopub.status.idle": "2026-03-06T02:42:13.942761Z", + "shell.execute_reply": "2026-03-06T02:42:13.942446Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jimschaff/Documents/workspace/pyvcell/pyvcell/sim_results/plotter.py:138: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " return plt.show()\n" + ] + } + ], + "source": [ + "results.plotter.plot_slice_3d(time_index=0, channel_id=\"A\", save_path=\"../images/building-slice3d-A.png\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Clean up" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:13.944172Z", + "iopub.status.busy": "2026-03-06T02:42:13.944085Z", + "iopub.status.idle": "2026-03-06T02:42:13.949373Z", + "shell.execute_reply": "2026-03-06T02:42:13.949114Z" + } + }, + "outputs": [], + "source": [ + "results.cleanup()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "26e5d3b1c0144160a5bcef608d1d0641": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "af8d0a6e83f74920ad4cd8c44cf46654": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HTMLStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "background": null, + "description_width": "", + "font_size": null, + "text_color": null + } + }, + "bc687f5631f04de99dcc04848ff2187f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "HTMLView", + "description": "", + "description_allow_html": false, + "layout": "IPY_MODEL_26e5d3b1c0144160a5bcef608d1d0641", + "placeholder": "​", + "style": "IPY_MODEL_af8d0a6e83f74920ad4cd8c44cf46654", + "tabbable": null, + "tooltip": null, + "value": "" + } + } + }, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/guides/notebooks/complex-geometries.ipynb b/docs/guides/notebooks/complex-geometries.ipynb new file mode 100644 index 0000000..44af212 --- /dev/null +++ b/docs/guides/notebooks/complex-geometries.ipynb @@ -0,0 +1,622 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tutorial: Complex Geometries\n", + "\n", + "This tutorial covers multi-compartment geometries, importing geometries from existing models, and analytic geometry primitives.\n", + "\n", + "See also the [Complex Geometries](../complex-geometries.md) reference guide." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Define a multi-compartment model" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:17.287727Z", + "iopub.status.busy": "2026-03-06T02:42:17.287609Z", + "iopub.status.idle": "2026-03-06T02:42:18.303524Z", + "shell.execute_reply": "2026-03-06T02:42:18.303190Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-03-06T02:42:18.286524Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "Please remove the `packages` attribute from your configuration file.\n", + "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", + "2026-03-05 21:42:18,290 ERROR (SBMLDocument.java:573) - There was an error accessing the sbml online validator!\n", + "2026-03-06T02:42:18.295084Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@1c9c4ff6 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-05 21:42:18,297 WARN (SBMLImporter.java:2878) - failed to transform lumped reaction J0 to distributed: linear factor was null, lumped reaction J0 could not be transformed to distributed\n", + "2026-03-06T02:42:18.297914Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@1c9c4ff6 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-05 21:42:18,298 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-05 21:42:18,298 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-05 21:42:18,298 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-05 21:42:18,298 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-05 21:42:18,299 INFO (Entrypoints.java:172) - Returning from sbmlToVcell: {\"success\":true,\"message\":\"Success\"}\n", + "name='unnamed' species=[Species(name='A', compartment_name='cell'), Species(name='B', compartment_name='cell')] compartments=[Compartment(name='ec', dim=3), Compartment(name='cell', dim=3), Compartment(name='pm', dim=2), Compartment(name='nuc', dim=3), Compartment(name='nuc_env', dim=2)] reactions=[Reaction(name='J0', compartment_name='cell', reversible=True, is_flux=False, kinetics=Kinetics(kinetics_type='GeneralLumpedKinetics', kinetics_parameters=[KineticsParameter(name='LumpedJ', value='((k1 * A) - (k2 * B))', role='lumped reaction rate', unit='s-1', reaction_name='J0')]), reactants=[SpeciesReference(name='A', stoichiometry=1, species_ref_type=)], products=[SpeciesReference(name='B', stoichiometry=1, species_ref_type=)])] model_parameters=[ModelParameter(name='k1', value=0.1, role='user defined', unit='tbd'), ModelParameter(name='k2', value=0.2, role='user defined', unit='tbd')]\n" + ] + } + ], + "source": [ + "import pyvcell.vcml as vc\n", + "\n", + "antimony_str = \"\"\"\n", + " compartment ec = 10000;\n", + " compartment cell = 5000;\n", + " compartment pm = 100;\n", + " compartment nuc = 300;\n", + " compartment nuc_env = 40;\n", + " species A in cell;\n", + " species B in cell;\n", + " J0: A -> B; k1*A - k2*B\n", + " J0 in cell;\n", + " k1 = 0.1; k2 = 0.2\n", + " A = 10\n", + "\"\"\"\n", + "\n", + "biomodel = vc.load_antimony_str(antimony_str)\n", + "model = biomodel.model\n", + "model.get_compartment(\"pm\").dim = 2\n", + "model.get_compartment(\"nuc_env\").dim = 2\n", + "print(model)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load geometry from an existing model" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:18.305065Z", + "iopub.status.busy": "2026-03-06T02:42:18.304833Z", + "iopub.status.idle": "2026-03-06T02:42:18.407580Z", + "shell.execute_reply": "2026-03-06T02:42:18.407289Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Subvolumes: ['ec', 'cytosol', 'Nucleus']\n", + "Surfaces: ['cytosol_ec_membrane', 'Nucleus_cytosol_membrane']\n" + ] + } + ], + "source": [ + "tutorial_biomodel = vc.load_vcml_url(\n", + " \"https://raw.githubusercontent.com/virtualcell/pyvcell/refs/heads/main/\"\n", + " \"examples/models/Tutorial_MultiApp_PDE.vcml\"\n", + ")\n", + "\n", + "tutorial_geometry = tutorial_biomodel.applications[0].geometry\n", + "\n", + "print(\"Subvolumes:\", tutorial_geometry.subvolume_names)\n", + "print(\"Surfaces:\", tutorial_geometry.surface_class_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualize the imported geometry" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:18.408867Z", + "iopub.status.busy": "2026-03-06T02:42:18.408784Z", + "iopub.status.idle": "2026-03-06T02:42:19.249840Z", + "shell.execute_reply": "2026-03-06T02:42:19.249383Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jimschaff/Documents/workspace/pyvcell/pyvcell/_internal/geometry/segmented_image_geometry.py:94: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " plt.show()\n" + ] + } + ], + "source": [ + "tutorial_geometry.plot(save_path=\"../images/complex-geometry.png\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Map compartments and simulate" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:19.251833Z", + "iopub.status.busy": "2026-03-06T02:42:19.251693Z", + "iopub.status.idle": "2026-03-06T02:42:20.905504Z", + "shell.execute_reply": "2026-03-06T02:42:20.905212Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-03-06T02:42:19.267081Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "Please remove the `packages` attribute from your configuration file.\n", + "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", + "2026-03-06T02:42:19.271373Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@23aef859 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-03-06T02:42:19.624880Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@23aef859 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-05 21:42:19,627 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-05 21:42:19,627 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-05 21:42:19,632 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", + "2026-03-06T02:42:19.648999Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "Please remove the `packages` attribute from your configuration file.\n", + "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", + "2026-03-06T02:42:19.649930Z main WARN The Logger org.vcell.libvcell.Entrypoints was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@78281156 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-06T02:42:19.653998Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@78281156 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-06T02:42:19.672224Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@78281156 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-05 21:42:19,680 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-05 21:42:19,680 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-05 21:42:19,737 INFO (Entrypoints.java:83) - Returning from vcmlToFiniteVolumeInput: {\"success\":true,\"message\":\"Success\"}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting Base file name to: `\"/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_c74l_z9x/SimID_649780665_0_\"`\n", + "initializing mesh\n", + "numVolume=125000\n", + "\n", + "CartesianMesh::computeNormalsFromNeighbors(), compute normals from neighbors\n", + "Membrane Elements -> N=8306\n", + "==============================================\n", + "qhull precision warning: \n", + "859 has 0 neighbors !\n", + "6830 has 0 neighbors !\n", + "--------Num of points that have zero neighbors 2\n", + "--------Num Neighbors before symmetrize 48504\n", + "--------Num Neighbors after symmetrize 53758\n", + "Total volume=5921.705897\n", + "Total FluxArea =50.44805177\n", + "Total FluxAreaXM =0\n", + "Total FluxAreaXP =0\n", + "Total FluxAreaYM =34.01199592\n", + "Total FluxAreaYP =16.43605585\n", + "Total FluxAreaZM =0\n", + "Total FluxAreaZP =0\n", + "mesh initialized\n", + "preprocessing finished\n", + "pdeCount=2, odeCount=0\n", + "No log-file found at constructed path `/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_c74l_z9x/SimID_649780665_0_.log`.simulation [SimID_649780665_0_] started\n", + "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_649780665_0_0000.sim\n", + "**This is a little endian machine.**\n", + "[[[data:0]]]\n", + "numVolRegions=8\n", + "Region 0: size=109830, offset=0\n", + "Region 1: size=12164, offset=109830\n", + "Region 2: size=1, offset=121994\n", + "Region 3: size=5, offset=121995\n", + "Region 4: size=7, offset=122000\n", + "Region 5: size=2, offset=122007\n", + "Region 6: size=2989, offset=122009\n", + "Region 7: size=2, offset=124998\n", + "# of active points = 125000\n", + "Constant diffusion/advection in region cytosol1\n", + "Constant diffusion/advection in region cytosol2\n", + "Constant diffusion/advection in region cytosol3\n", + "Constant diffusion/advection in region cytosol4\n", + "Constant diffusion/advection in region cytosol5\n", + "Constant diffusion/advection in region cytosol7\n", + "numUnknowns = 24362\n", + "\n", + "****** using Sundials CVode with PREC_LEFT, relTol=1e-07, absTol=1e-09, maxStep=0.1\n", + "\n", + "----------------------------------\n", + "sundials pde solver is starting from time 0\n", + "----------------------------------\n", + "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_649780665_0_0001.sim\n", + "[[[data:0.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_649780665_0_0002.sim\n", + "[[[data:1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_649780665_0_0003.sim\n", + "[[[data:1.5]]]\n", + "Final Statistics.. \n", + "\n", + "lenrw = 243709 leniw = 50\n", + "lenrwLS = 243666 leniwLS = 10\n", + "nst = 91\n", + "nfe = 115 nfeLS = 99\n", + "nni = 111 nli = 99\n", + "nsetups = 22 netf = 1\n", + "npe = 2 nps = 188\n", + "ncfn = 0 ncfl = 0\n", + "last step = 0.004950\n", + "\n", + "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_649780665_0_0004.sim\n", + "[[[data:2]]][[[progress:100%]]]" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Simulation Complete in Main() ... \n" + ] + } + ], + "source": [ + "app = biomodel.add_application(\"app1\", geometry=tutorial_geometry)\n", + "\n", + "app.map_compartment(\"cell\", \"cytosol\")\n", + "app.map_compartment(\"ec\", \"ec\")\n", + "app.map_compartment(\"nuc\", \"Nucleus\")\n", + "app.map_compartment(\"nuc_env\", \"Nucleus_cytosol_membrane\")\n", + "app.map_compartment(\"pm\", \"cytosol_ec_membrane\")\n", + "\n", + "app.map_species(\"A\", init_conc=\"sin(0.2*x)\", diff_coef=1.0)\n", + "app.map_species(\"B\", init_conc=\"cos(0.2*(x+y+z))\", diff_coef=1.0)\n", + "\n", + "sim = app.add_sim(name=\"sim1\", duration=2.0, output_time_step=0.5, mesh_size=(50, 50, 50))\n", + "results = vc.simulate(biomodel=biomodel, simulation=\"sim1\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:20.906852Z", + "iopub.status.busy": "2026-03-06T02:42:20.906747Z", + "iopub.status.idle": "2026-03-06T02:42:20.964737Z", + "shell.execute_reply": "2026-03-06T02:42:20.964504Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jimschaff/Documents/workspace/pyvcell/pyvcell/sim_results/plotter.py:71: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " return plt.show()\n" + ] + } + ], + "source": [ + "results.plotter.plot_concentrations(save_path=\"../images/complex-concentrations.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:20.965975Z", + "iopub.status.busy": "2026-03-06T02:42:20.965878Z", + "iopub.status.idle": "2026-03-06T02:42:21.241207Z", + "shell.execute_reply": "2026-03-06T02:42:21.240912Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jimschaff/Documents/workspace/pyvcell/pyvcell/sim_results/plotter.py:138: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " return plt.show()\n" + ] + } + ], + "source": [ + "results.plotter.plot_slice_3d(time_index=0, channel_id=\"A\", save_path=\"../images/complex-slice3d-A.png\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Analytic geometry primitives\n", + "\n", + "You can also build geometries from scratch using analytic helpers." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:21.242549Z", + "iopub.status.busy": "2026-03-06T02:42:21.242453Z", + "iopub.status.idle": "2026-03-06T02:42:21.401735Z", + "shell.execute_reply": "2026-03-06T02:42:21.401323Z" + } + }, + "outputs": [], + "source": [ + "geo = vc.Geometry(name=\"geo\", origin=(0, 0, 0), extent=(10, 10, 10), dim=3)\n", + "geo.add_sphere(name=\"cell_domain\", radius=4, center=(5, 5, 5))\n", + "geo.add_background(name=\"ec_domain\")\n", + "geo.add_surface(name=\"pm_domain\", sub_volume_1=\"cell_domain\", sub_volume_2=\"ec_domain\")\n", + "\n", + "geo.plot(save_path=\"../images/complex-analytic-geometry.png\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Clean up" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:21.403158Z", + "iopub.status.busy": "2026-03-06T02:42:21.403064Z", + "iopub.status.idle": "2026-03-06T02:42:21.408110Z", + "shell.execute_reply": "2026-03-06T02:42:21.407840Z" + } + }, + "outputs": [], + "source": [ + "results.cleanup()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "06965ea5e7fd4bec8f41534bbeb3c01d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a87a4d1c1ed049c99aeaa3c2bfd41563": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HTMLStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "background": null, + "description_width": "", + "font_size": null, + "text_color": null + } + }, + "a99b2d70b7744b3fbda04822d135c981": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "HTMLView", + "description": "", + "description_allow_html": false, + "layout": "IPY_MODEL_c14374bfc7e845f091542e3693333fe2", + "placeholder": "​", + "style": "IPY_MODEL_f665a363ce944d42a0b5e690900949c6", + "tabbable": null, + "tooltip": null, + "value": "" + } + }, + "c14374bfc7e845f091542e3693333fe2": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d8b8229f30154c5dad07b666e1a67263": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "HTMLView", + "description": "", + "description_allow_html": false, + "layout": "IPY_MODEL_06965ea5e7fd4bec8f41534bbeb3c01d", + "placeholder": "​", + "style": "IPY_MODEL_a87a4d1c1ed049c99aeaa3c2bfd41563", + "tabbable": null, + "tooltip": null, + "value": "" + } + }, + "f665a363ce944d42a0b5e690900949c6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HTMLStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "background": null, + "description_width": "", + "font_size": null, + "text_color": null + } + } + }, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/guides/notebooks/visualization.ipynb b/docs/guides/notebooks/visualization.ipynb new file mode 100644 index 0000000..1d74d60 --- /dev/null +++ b/docs/guides/notebooks/visualization.ipynb @@ -0,0 +1,539 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tutorial: Visualization\n", + "\n", + "This tutorial demonstrates pyvcell's built-in visualization tools: concentration time series, 2D and 3D slices, and raw data access.\n", + "\n", + "See also the [Visualization & Analysis](../visualization.md) reference guide." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load and simulate a model" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:24.715763Z", + "iopub.status.busy": "2026-03-06T02:42:24.715683Z", + "iopub.status.idle": "2026-03-06T02:42:38.999870Z", + "shell.execute_reply": "2026-03-06T02:42:38.999435Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "name='Tutorial_MultiApp' model=Model(compartments=['cyt', 'nuc', 'EC', 'pm', 'nm'], species=['Ran_cyt', 'C_cyt', 'RanC_nuc', 'RanC_cyt'], reactions=['r0', 'flux0'], parameters=[]) applications=[Application(name=3D pde, geometry=name='Site visit _Application0_20111127_1900085476' dim=3 extent=(74.24, 74.24, 26.0) origin=(0.0, 0.0, 0.0) image=Image(name='img_20111127_944930500', size=(256, 256, 34), uncompressed_size=20961, compressed_content='789CEDDD897ADC389245E18FCCF77FE72AC9B6940B172C010422EEF967A6BBA74BE9C4B9A416CBB2B46D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008005EDFFFFEF1FDE2771B23FF13E8B87FDC526B7C2FEC1FB44937D0EB06F4A1B1CF46BDD052703C82C70D62F33C076F34A2031C4E94D2072279CBE16A8BC2EDC0C907D83FBFC3DF5070645FDFF6E837C3394E7A77C55A8CCCF3640757EAE011AF2130DD0549F6880EF14E101FE7D94AFBBC05FF20BA8F7B72CE07D625BEAFDB203A8BF13E8E84FB0C0DF0AE5FA56DE873720DE4FBE727E57BFF7D90D88E7F7F47B1FDD40CFD557EFF73EBB012EBF74BEF81BBFAD6700EF93DB10CF97BFFEEA3740FBF5CFB100FDD2F9F46B0FD01AAEDCFFFB48DFB35BE8E8F73DB891E6FC2CE8D7EEAF1EC0FBBCC6B8FCD2FDE42BE78B7FD1BBFAD517BFFC95FDDE871D413CBFEEEF3C25A45DBF950EE07DCA71B4EBE5FFCEEB7DBFF701C7D2AEBFEBF73EDD70DAF5DBE500DE479B423C9F6F7D733280F7A9E6D1AEDF8EBFFB9712F1FCCF7EEF034DF616AF96BF3D2FE07D121FCAED000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0FEBFAF7FF33EC7087B41D5FED7F8D34C5712B6EFE907B82CCBDC5FD09639FF29EE342F6DFEFE527F5A98B7FFC8F98BCD3FE0207F530EF37F3AF7A7174F35C053C8D902FBB61FBD94CF798D1D965DBD261CBC6E449EE22DE47E819349627E387C7A69CF16B81AC42FA3C56BCCDFFFAADAD1AB4310D797B6658B60BA8363E7CBF7DB0EE01DD3423CDFB0DFBBA49578FE66B480774407F17C9301BC137A18E4ABF77B27F411EFEFCF8FDDAF7EFDD5FBFBF3E90FCC209FFEB82CF2E98F4BBCDF245FBE3FEC0046F9F2FD4117B0CB0FD96F981F7200F17CEE7FED7CF57EC37CF57EEF9426F4D32F3C8065BE7ABF774B0BCBFE8803D02F9DCFFB3FF17EC37CFAE3B1CC57EFF76E69A23E00FDDAFDEAEFFFE9D7CEB7EB0FF9373FE5FFEC9BAF7D50AE97EFD7CED7AEE7CBFEA4EBE5BFE6FDEB0336E5FC3FE857AEDFDA07F03EB715ED7AF5FCB601BCCF6C483AFE8B767D65BFF76107908EDFCAFBBDCF398A787E59BFF7210752EF2F19C0FB8843A9F7977CC3CFDCC4F32FFA437F53DF72A2D7FD8778FEF100DE679A493CFFB3DFFB4093A9F77F7C1B6C35EAD7FF6D01EFC3B850EFFFFD992EA2FD9BF0B5070000000000000000000000000000000000000000000000000000000000000000000000084EF7676EFCA1FD7337B47FEC88F28FDCD97E7EEA8EF731DC88F76BFFC8A9DF1FBAE57D1017DA3F6E4BFDDDBEF2FBFDEF9FADAC9BCF9B7DFA95FBF9A84FB95EFE276D72F9C997EFD71D40BB5EFAF73D5FB8FCD2F9EAFDDCFEF2F9C2FDE2F9EAFDE21FF9AAF78BE7ABFFCE4FFCB3BEEA9FF516CF8F71FDC79D6E0FD23FEA8831FA870DB0EF310610EF1F75C43D58BFF119F720FDA3CEB8871860D81957CD7F39CAC043EE8B0EF0F72C5FFFF27E44D3432E9A7F543DE29423A7ED73D57F79CCBA8CA0FD6707AD0E79FF25830F507D1D17BCF27FDDF51F9EB8F9FA5B9EDCC8FD009F276FEDB73F7DBFC2FEEFAF583E784CD5938C6AE851DCFF1BF0FEDFDD772D5B6FD05F766953E4EFC71F282E7C756FD5F65F4E1390617FC809C4FB6DF3E3F573FD19807EBBFC6803D8D60724DE2F9E4FBF763EFDDAFD86F9210750EEDFB53FF6358E0F37807AFF8005BC832A89E7F37B7FF2E9D71DC03A3F58BF797EB00106F4871A60447FA401C4F3E9A75F399F7EED0146E4ABF77B37D5A09F0194FB47E4471A80FEB103ACBEC5E8FED507189DBFED6B0F30BAFF7D8ED5D03F7280CF3D9643FF84FE850718D31FE60618941FE70618DBFFFBD5459E8D1706E5BFE4EEDB4A7FD3FBCDF8FCB569D76F7C025C3C9FEB2F5D2FFFE53F7CF917FDC2F5FCCD2FE97ABB7CEF9046F42BD7D36FD21E37BFBFDF3BA09B767D5FBFF7D94D88E7B7F77B1FDC8676FDD63A80E1F3DBFD528D07F0AB5FE26672BCF66BFC01A15BFDB6C6008EF94B0CE099BFC4378576AC7F7DF621BF7ED509E6E7BF3EFDA0A7283FC0F4FAF7030C7C9A826777C9DF76D7B783FEFD2FE718FF44274FEC9CBFFD7CB9D094E77A7DE2ABF2B997C565809BEB3EF54C6BDD00FFFEF1DCA3CC7BB6A727757BB5FF3C8CC773AED3EF413CFF6400EF434DC40DA09D7F3480F789E652EFFF18C0FB3CB369D7FFB1FFFDF04B341F00000000000000000000000000000000000000000000000000000000000000000009A87FAF6DF97EF10174BFDBFE37ED1F38B0C48F40F5A4FE1327D40750FF9123DAF5E26FFDA52FBEF82BBEF6C5DFB6C93F58763DDAF59BD38FBA5D8778BEFAFD2FFED64FFEFED7AE97EF97CFD71E807EEF13B812BFFA5C7EFA85914FBF30F17EF5DFF88BF76B7FD25F3D5FBD9F3FF492EEE7CF7C430C30EA78FB92FD4F47F93ED7B803AED8FF72927DE809F7B1BF7C8B9793ECEF463CD94AFD2F27F9A82F3B6379C7E0755BFC1EE5A8BEE88CC519A3EFAE1627D585A7FCFF1F567434DD5D8315F45F1CB32AA3E9E61AAE6380BA8EBA65A729EA3F3E675D47D5B433B52E6092BFC204FDFD25EF250A7E75A7298AFA3FCF56D5DFF61493B40D5071F2C22770EA2F3DDDE500B7EF244F5ED63FBFBCFFF58437EB9CBDDCF89E5A15FDCFC72FEC5FBDBE2E7FFF7D5B7D31CDDB2F3FAFA5456DFFD5348BA71E32ECFFDE2018E3FC700B68F7DBD7FF5920CC0C6306D8E9F70E2B253E8078FE907EEFA60AD4D32F9B4F3FFDF4D34FBFE800E2FDE2F9F4D34FBFF000E2FD63F2E98F62507F9801E8971E6058BE7C7F8C0106F647186064BE4EFFE31175009BFA2F7FFFB35EFFE39FBFFF31D40286F9BF33045AC0BC5E6B80A3FC50FD7DF9C7FD1FEF0CBC232F8CC83F7867E89D796EC400072FE89D796644FEE10743DEA16766F5AF3AC080FC501F0C0FE83F7B71EFD443F6FDE72FEFDD7AC4BCFFE2E5BD5B8FD04FBF65FFD5CB7BB71EE9E93F1A40BCFFF2C5BD5B8F98F6DFBCB877EB11CBFEBB17F76E3DD2D5BF97F42FFECDDECCFA4FEA7F9FC339F44457FFCB677F4FF3FF7E7BA9CC039CFDD39FE7704DBCD4D97FE5F7391CFBEE4CC897EF5F9976BDFCD7FFF1D71FE89FD5BEE43453EBD7CB37ED2F789E5959C526E5BFF4AFB4C39CFAA7675AECB783D3F2D7FC2660F3EA0F9F6E645AD38146C61F3EE1A0AED6E30CAEFF7ECACFE735CFAA38CDE4FA9327B60BEA3AC6BCFC655E117CEA0F9ED9A4A6FB14F3F21719C02FFFE3C92D7EC5CE234CADFF7C7AAB5FB5FD0473EB3F9FDFF2576E79FEF9FDDE6F06BCF3BDDF15BA5FFFCF3358FFF2154FEDD3CF028E6F079BFA871CD0698135E23F8E32EC49AE9ED4ADFCF330C39FEAF329DDEB5F8E33E5D9B6E2FE59C7F939D1ECE75BA5FEF74C339F6BB5FEA95F37B362FE4C37E9C2FDDE279B837EE9FCED7C01EF734D239E7F3080F781667B2A17ACFFEDF73E871BF1FCA5BF501900000000000000000000000000000000000000000000000000000000000000000000000000000000E0821F75274EFE0650FE41975FA47FD2E7DF9F75EA7D0847F43300FDC203A8FFB06B5E03FE2CE07D06576EFDABCCEE34C032B79DD36BC03AAF772E032CF476C7E3282BBDEBF538C942FD1E47D9D7ED7FFE8FA3DE48EF0BF5EF6F87D9DF8D7CCE01BF76ADB7D08FFC01A71C3B6EFB61F6C37AF3530EBEB9DA0F73C1EEA3D5C1F756EF79CE1718F37C56BF6C87A9030CDBD5F0482307187763599EA9AABF2261DC7DD5A3EF06A849A81B769ADEFED284CA5F799A9E1BA022A161DC394AFBBB0668FAC5E728EE3F3A64D9F15BD79DA2A2FFE0984587BFFE65BCDF02F40C5074F196B9D487EAF23FAEDD6DD1DAF50DFDBFBF21BA8BBA196F090DF9C5594B87FF65D37FD8B77CFCE9E73CDA17788A5DBDDEEEDAFF841EFD47EFC873D6F927A32C4B3C7FCE00DE8D97C4F3C7F77B07DED1AE1FDCEF1D774FBB7E1B3A80775A09F1FC81FDDE6565E8279F7ED5FE71F9F44740BF74FFC07CFA0318D91F6100F1FEA1F9F42F8F7EFA8D3C1E010730ACFF22DBFF78C41CC0B63E5CBF757EB401CCF33F16F02EBC665FFF790B78375E19501FEA7580FE01F9815E0546F547B90546E587F950587D8051F907FD4B0E30AC3FC80053FB171C605C7F8C01C6E5ABF71F3EC23BF7C3A8FEFDB87FB901C6F49F3FC4BBF7C380012E1FE2DDFBCE3E5FA7BFEC77BFF4AF3C4057FFE1004AFD870BD01F277FC06700AF5FDCBBF79D7ABFED6780CE3EECD5E82F7979EFDC4F53F3171CA0AB7FA7BFAA7EC101FAFAF7FB37798B2FD0DBDFC03BF9C5B8CA180B8C69BFFDE5FD82DF0CADBF78029FDA4F83EB2F9EC121F6C0E8FA9FEF0FB8EA0483EBB7DF6F6EB6E40296F967FDD7CF35ABF4D8E8F89227ACFB1EA2B626D79F3FE7A8C086A38CAD3F7B62FBB8A6634CEA3F786AEBB6A643CCAA3F7C72CBB2C6234CCC5FE295C02FFEF8D96DAA7A4E30AFFEE8F9FB7FC5BEE79F5B7F74029B5FB5F5D967D71F9DC1EE576E78F2F9F9BEEF0856E877BD0556C83F3887FD13143EB157FFFB41463C43C1D37A0EF07A9A51CF70F194EEF52FC719F924874FE8DFFE729EE14FF4F67C6BD43F9F68CA93D5F4CF39D09F534DFB09B12BD6CFA45D5FDAEF7DCA71D4FB4B06F03EE250DAF5DBED00DEC71B4E3CFF7A00EFB3CD40BE6CFB1FDAF54BFC59942FEDFAD77EEFB378205FB8FEDB57BB6E3D000000000000000000000000000000000000000000000000000000000000000000AAA97F736BF5FE4DF89BBB7FA35F7C01F90136F501D4FBE50710EFD7FE112F1BEF02C47FC80F03F0739ED417501F40BD9F017823483F0348F7CB0FC06B80F800E4D32F3C807AFFCB8F7C961C61DF77E99B602F1920F332FBEB0287A93AFD47B741F2578D83017EDE1EEE029F2A3EE9BFB929F228ECCF3B81DF006B2CEAD1BF6FEBFC297479BFD979977A8D9ADF3FE28E6A57D16F73DE013754879A7C93F30EB9A5CCCE337A8031B794E989860EB05C7E657FE78197ABAFCDEF38F4BEE0CDDFD2DF7AEC15EBB7B6015A8EBE687E5B7FC3E917CD6F1EA02E62D9FABEFE7DBFFF8D4CCF6C33F4F5DF262D5E6FD57F96B57ABD5DFF47DCBEE67BFC3796F9FF02F7A3F425EBCDFBEFA6598D78FEBC7EEFD063E42BE76FD316F0CE3C251DFF45BB5E3D7FFC00DE7D37C4F3E9D7EE17CF57EF17CF57EF1F9D4FFFDAE8A79F7EFA5507A0DFD8E3FFFFD1EC7F3CBEFEEF9B60FFE35998FE31F92F0378275E1A942FD6FF5E1FE71540BC7F507D980186E507E93718E0383FC89BC081F921FAFB0738EF8FF02A302B3FED0017FD6F03ACB9C0C4FE251798DABFE00053F3171C6072FF72038CCB8F31C0F47E9D014E1EE21DFC6658FE59FF62030CEB3F7D9077F1AB51F9E7FD6B0D30AAFFE261DEC92F06E587E9EF18A0317FB101E81FD07FF750EFE827EDFD1D0378473F19D27FF748EFE8271DFD459FFBCD3C406B7D96FE823FFB587F00F3FEB2877A67FFE8E93F1CA0F4B1DEE17F59F707CB37FE1448F903BDB37FF4F5BF4E50F128EFEC1FDDFD875FF6156700ABFEDA077977FF63D0BFBF7FD1E373E2EA0B98F45FE62DBDC0F0FAEBA770EB2E399C49FDED73F874979DCDA2FEEE295CB24B0F67907FFF141EDDC587EBAD7FFE6648E7CF39B5F9ED7063EB7F9FE8FA5987979E1D6B4AFDF6FEDDCEAB1F3ECAA4FAB2A71ED0577F8859F9474F6E5DD7708479F5474F6F99D67480A9F54707B00A6B7DFEC9F99F47B0886A7E7287FACF4358FC8A8D4FED52FF710AA35FB4E1999DF2DF0F62F8CB563DAF63FEEB59AC7FE192E774AFFF3DCD885FF9E62997A8FF739E61BFF2C9F3AD953F9D787E4BBFF7914D69D757F77B1FD79C787E5DBFF76147D0AEAFE8F73EE820E2F9F46BE797F57B1F7220EDFAED7E00EFF38D269E7FDDEF7DB809E8D76DDFCEF3BDCF358B76FD425F8CE0453C7F85AF4370259EEFFB07F00BD0AE7FEEF73E890FF1FC4D3C9F7EE9FABFFDDE8770A45D3FFF2B4E0000000038D0FE8D0FBFED95CE97EF177FF597EF57BFFFB5FBF9A437F9BAFDDA7FE2C51FF84AF78B7FBD035FED423EFDE4D32F887EE9FE9D7EE17AF5BBBF91F85CEAB70BFDF4D3EF7D0A47E2FD91AFBFC5C1E3F6DB7CA4173DBFF7F061AFBF65BFCD89A6B2FABD4ED47EAB1B20417FD7F9E3F61B0E6076A4996C3EDDA17EFD53F4F7FE2266479A8A7E83778081FB4DFE6E7BE87E83DF0385CE37B80162F7F7FFF62D787FF700D1FBBB3F0B94A1BFF315C0EC283EE8EF7C03607714175C7FEDEBFFD5D0F3D8F8FD3D1159FA1B3352E477BC0DA03F457FF300EAFD5DEF3B16D2FA1630CBF56F1D80FE24FD8D03A4C98FFB950C460CFE3020368B3F0E894CBD9F01E8D7EE971F807EF105D4FBE50750EF971F60577F1B48BF763F03D0CF00D203FCBE0FD45C40BD5F7E00F57EF901D4FBE5BF19CEFECAFB38F3150D907898FDDDE90BCD3ED9241F037C96A67EF538E87F2AFDFF3F257FF370DC7FC2FBB003A8F7CB0FA0DE5F3580F7594750BF01E8D71EA0AE3FDF0095FDE906A8EDCF3640757FB2051AFA0DBE9D9ACDD92D34F577FD4DC2A5F25BFBDB224C6E1F5BEDFD1525DF2FD8B5DC307DFD452D8DA3CDD1DB7FDBD3B2D84406FDD74D6BE71BF59F96D52CE5C2B0FF23AF702357C6FD15EBAC41BC5FBB7E66BF77E921F295F3E997AEDF660DE05D794E3C7F4ABF77E315FAC9A75FB55F3C5FBD7F463EFDCB9A924FFFB2C8A7DFD0E3116A00F3FA7F82F49B0EF078A1DEFF328077E6B961F92F0378579E13EF1F571F638091F9F4CBF41FE63F0FE0DD7966687E801B606CFFFA37C0D07AFA9F5ECABBF4D8D8FCF56F8079FD6B0E30B17FCD0506F7BF7D22C0BBF6D3E0FC8F4F0779F7BE9BDDBFDA0063EB8F3E1DE85DFC6A7EFF520338E4671A80FEFAFA4C03D0DF92BFD400E3F263F4F70CD0DCBFD200C3F283DC00EDFDB7035C3CD4BBFAD7B8FECBC77A67FFA07F50FFF563BDB37FF9F4AF33C098FEDB077B67FF70EA5F668121FD458FF72EFFA3BDBFE40FBED61F60407FA4FC8E01525CFE01AFFFA58FF72EFFA3BDFFF6CB3E420C60DB5FF578EFF46F1DFD975FF4186501BBFEB3C4B527E8EA3FFF9AE797BAC403ECB7F177CFE1577E7FB61EE5CFE1555E723693FCD76FFCB6BF7E4F79EF0526D4FF3ECFE9D34ECB3D3ED7F0FABFCF74F1C41352CF4E35A5FEEBA92E9F7B64E49559F5F74F3F20AEEE00F3EB5F0F605C56FBF42EF5AF4730ECAA7F72A7FA9753D834353DB567FED3410C7EA196A7F5CFFF7316A35FA8EA3957A977229EDFDBEF7DFC6EE2F95DFDDE67B7209EDFDEEF7D702BDAF52E3F016329DAF50DFDDE07B6A55D4FBF76FD563980F7610710CFA75FBABEBCDFFB9CC390AF9C5FD2EF7DC4A1B4EB6FFBBD8F379C76FDDA5F9F348376FD45BFF7C126215F39FFA4DFFB54F368D71FF67B1F692AF1FC8F7EEFF34C267EF5D52F3FFDE40BE76FE42BE7BF0EE07D1607E2F9EAFDE2F9F4934FBF6C3FF9F4934FBF7CBE60BF78BE7ABF78BE7AFF4EBF72BF78BE7ABF78BE7AFF4E3FF9F4934FBF5E3FF9D2FDBCF5A33F7FFED7B798FDF3FD36FF6676C7061BEBFDCD5CF7E163F7DBFC82FDBFCA3CF49BE7C7EDEF3F79B87EE31B205CBEF11D10BEBFFFDD7FB47ED301E2BDFE6FA61F0445CC37EC0F79F90D5F0362F673FDC5FBCD7E1B14B5DFEA8320FA83F61BFD3620477FE7AF6277A899D4FB4D7EBC8A787FEFEDE3CC6800CB234DD5FD2620F8F57F5AA0E7F1A6279A8D7EEDFEBE01C4FBC3BFFDDB7EDF04B63FD6FA4453F5BD0B8CDFDFF73E30437FC70009EEFF2FEAFDCD0364E96F7D2798ADBF36254D7FE30069FA1BDF05A4E96F1C20617F554DC6FE8A9C8E0F9C57B3EF0D0B24EA6FFAF39044F93DAF00E30E3595F6F56FEFCF3740E503469E69A6EA1B206B7FE503469E692EF5FEB601461E6836FA2B92F2DDFF2D038C3DCF6C55EF0312F6570D90B0BFEA838084FDEAD7BFEA0650EF8FF9D75F6ED4DE00C30F345BC500B9FB6FD332BEFE6F153740F6FE9BB6841FFEFF513840C6DFFFFC417FC100551F290443FF6D5DF9BBC980F6FD6581A3C4D4FD9F7F4778BFF8E73E471CEAB3FF5FE6BEDBFDFDE1751DF59FF23EEC0055FD0907A05F7B00FAB5FBD507A8CC4FD75F3D40B605AAFB932D40BFF6024DFD891668EC4FB340737F92053AFACB375878AACEFEB20916BE57FAFB0B3648DF7F1D58329117ABFEABC4A2917C58E69F44962CE46640FF6FE8ED34FE46F59F8FB216FAC9D7CD9FD9EF9D7A887CFA75F3E7F57B879E209F7EDD7CFAB5F3D5FB27E5ABF77B679E12EF9F944FFFA2C4FBCD3B1F5F64FB1FFF04E937CEFFEDFF58C0BBF4D8B8FCF701BC4B0F99B6BFD6BF2FE09D7AC8B0FE907ABFCC0027F9F2FD4F0378A71EA27F6CBE7CFFE2030CCF57E8BFCA5FBB7F7CFEDAFD16035CE7CBF7AF3DC0F8FCE4FDB7F96B7F08ACDEDF3BC07DFEEBA741BC733F4CEE5F6E80D9FDAB2D30BF7FAD011CFA975A40BDBF6F8082FCA3FE9506A07F7EFE4A03D0AFDDDF3340733EFDEBE8E8AFF9CDFFB203A8F78F7C05B878A877F52FFA47F55F3FD8BBFB1FA77EEFEC1F3EF9EAFDDED5BF06E5DF3CD8BBFA974F7F8201BAF293F7DF3FDABBFA977D7FC9A3BDAB7FB5F6177CD15F847CE3FEC2C77A473F69EE3F58E0AC3669FFFB00C7F1EFCFB2E5E9DF0BEB9F9EC6B1F4844DFFF13FFF781AB7CA733DFD7BD1B55F5B57FFF70291EB07FD1D38EFA80ADAF59BFD00DE3DB5C4F36DFBBD631A68D76F73BEFFE9CAC4F3E77CFFDF8569D76F93BE01F6C2C4F3E77C03F88569D7F7F57B9FDD82783E3F0044BABEB5DFFBD476B4EB5BFABD4F6C4BBB9E7EF17CFAB5F3ABFABDCF3A82767D79BFF73947D1AE2FEBF73EE348DAF505FDDE071C4CBBFEA6DFFB70E389E75FF67B9F6D06F17CFACFE235F24FFABD4F358F78BF78FE71BFF7A126229F7EDDFCA37EEF23CDA45D4F3FF9CAF9F4934F3FF9F4934FBFF77926E3F2934F3FF9F493AF96FFDEEF7D9CE9C4FBC5F3D5FB79EB27DDCFC73EE4D34F3EFDF4CBE7ABF77B9F6736F17E91FC7F6DBFDF7DD9FB44737DBC95131B807EED7EF901E8D7EE6700F98FF4E50750EF971F807EED01D4FB2DFFA033E874560344BD75ECFA830EB0D1AFDDBFA9F73F2FD0F32B589E68AEFE1B20767FFF0D90A6BFB12278FFD302ED0FB73DD064EAFD3F0BB43FD8F638D375DD0009FABB6E8044FD4D1DF4C7EFEF1920557F7D4ADFEF9DD6417FDB0259FA5B3F0CCCD75F5793A6BFF17782F467E96F7A0DE8F9C879317BCB0D90A8BFE91520517ED30D90E9FAB7DC0049FB6B1F32F05033895FFF860F8273E56FD5BF0F4C76FDB7DAA2B4FD8549F9FAEB92E8A73F677F5913FD69FB8BA212F657DD0099FB4BAAE84FDC5F9095B1BF66808CF93503A4BCFEE59F08ABFA582110F5FED2B2BCFD656935EF2A832929AB794F194E419A44FF795CF1BB8990EEEB64FA8FFBEEFE796CFBBBCB17F038E1581FFDAF9577EBC47734C057E8C97F9DCE49FF19EFE39AA35F7B00FAB5FBE507A05F7B81FAFE5C0334F4A75AA0A93FD1006DFD791668EDCFB2407B7F8E057AFA332CD0D71F7F83FEFED81398F4079EC0AA3FE80486F9214730EF0FB6C2A0FEEF0D22CC30B0FF7D8E25CDEB5F728089F9EAFDDEA987C4FBC5F3E9279F7ED97CFAC9A79F7ED17CF5FE69F9F4AF685EBE7ABF77E931E3C8C71F61FA87D41F4FE09D7A685CFFC702DEA94746E6BF2FE0DD7A6470FFF2038CAD7F5BC03BF6D3F07AFA9F06F0AEFD34217FE57EBBFC98FD76039CE7CBF7AF3CC08C7CFAD3F75FE6AFDC6F34C075FFC2034CC95FB8DF6680B8FD53F217EE371940BCFF367FE50126E72FD7DF3F80787F41FECAF7FFECFEE50698914F7FD601CAF2E97FE15DFC6A42FFCAF9F3FB330DD0922FDFBFD8023DFD45031C3CCCBBF99943BF77F28BD1FD078FF24E7E35BDDF3BF8CDEC7CFAD73232FFF871DEC5AFD4FB9B0768CD5F6D0187FEA51618D67FFD70EFEC5FF48F18E0EED1DED5BF46F4DF3FDABBFA476B7ED117FDAD9FDF31807AFFFDD7FC9EC52F35407BFFD100E7C53FFF793586FD87EDFF9E665BB2DEF006B8AAFFF7543E8997ACFA6FEB1765D37FF48FBDCBCA74F4EFE12FFE66D27FF48FBCB3CAF50CB087AF1FF1B760BD8BEA88E75BF77BE754D3AE97FFF6AF86FDDE258DB4EBADFABD2BDA69D79BF47B2774D1AEEFEEF73E7E37F1FCAE01BC8F6E827CE1FA4DFE074089E737F57B9FD992787EC300DE0736269ECF4F40D6CEAFEAF73EEB08DAF515FDDE071D44BBBEB0DFFB900369D717E47B9F702CF1FCBB7EEFE30D279E7FDDEF7DB8F1C4F3E997AEBFEAF73ED91CE42BE79FF67B9F6B16F1FC937EEF534D239E4F3FF9C2F987FDDE679A483C9F7EED7CF57EF17CF57EF1FC837EEF134DC5E5279F7ED57CF57EF17CF5FE83B77E5203D04FBE6EFE67BFF781E612BFFAEA975FBD5F3CFFA3DFFB3C9371F9A5F3D5FBC5F3D5FBC5F375FABFDB244A8F7CBC9317EB971F40BD9FDFE48B0FB0CBFF46E7E31EF03ECE74DC00DAFDEA6F01E8D7EE6780F7DF067A1F67BABFC5BA03FCA1DEBF89F7AB5F7FE1B780DFD4FB790510EF971F807EE97EE5DF03FDA1DEAFFE21303700FDDA03F02E40BC9F01D45F05D4FB5B07483357E3EF03F2DC30F44BF7EF4DAF0089DE62D2DF3000FD69FA9B06C8D4DFF21620557FFDFBC06C1F31ABF7D70E407FB2FECA4F84D09F6D00F5FEBA01E8CFDB5F5225DE5FF7C1520C7BC50019FB6B06C8DE7F1796B2BFE20648DF7F5396B3BFFC06A8FA58218ED21BA0E65D6528850348F45FB4A5ED2FBC0134FA4FE38ADF4C065432804CFF715EE97B8990F6FD6E81C2B79141BDF77F2416DC20A17D0EF09C797F7B4477D87FCEFBB8E6E8D71E40BD5F7E00FAB507A8EE4F36407D7FAE011AFA532DD0D49F6881C6FE340B34F72719A0BD3FC7023DFD1926E8EC0FBF40777FF0092CFA236F60D51F7502C3FE9013D8F6C7DBC0BE3FD40883F2C3AC30B6FF7B82A55718DEFF778455CDE95F768159F9AB0E403FFDE4D3AFD92F9E4FBF76FFBC7CFA57443EFDF4ABF64FCC57E87F7CFDEFE3F188D26F1BFF4CAEFFF12E40FFC8FCCF05BC6B3F0DEE7F5BC0BBF6C3F0FCD701BC733F4CE87F1EC03BF7DD8C7C8DFEF3FCE701BC7BDFCCC997EF5F768049F9F4AFD96F961FB4DF6C819BFCF4FDF20344ED37CA977F03A0DE1FF5FE9FD59F7C80DB7CFA33F7DFE7AFDB6F3180787F417EE6FE92FCC4FD45F98907A8CD4FD65F7DF9E95FCC8CFCA5FF1068C2002F0FF1EE7D47FFF001C4FBDF1EE21DFC867EEDFEAE011AF2E5FB571B606CFEC1A3BC83DF8DEC3F7C9877F09B81F9C7FD8B2D30B0FFFCB1DED14FC6F55F3CD63BFAC9B0FECB077B57FFA27FC800378FF5AE7E32223F4EFD88FEBB477A17BF32EF0F55BF990F7012FDEFDFBC6B3F0DCFFFF73CAE95E72CFBCFEBD7D5D87F3040C47AC3FE90F59BD5878051EB8DFAE3E6777D0E680F5F6FF0A7E007FFA577538DCEFE23DE4955B4EBCDFBBD73AA89E79BF67BB7B410CFE7FB5F8BE7DBF47B4774D0AEB7E8F72EE8A35DBF750EE07D7803E2F93DFDDE4737A15D2FFF03C0C4F31BFBBD4F6D47BB7EE307606AD7F313B0B5EBABFABD8F3A84787E71BFF73947D1AE57CF2FEAF73EE348E2F9F7FDDE071C8C7EE9FC9B7EEFD30D279E7FD9EF7DB619C4F32FFABD4F3607F9CAF9A7FDDEE79A45BC5F3CFFACDFFB58D388E7ABF78BE71FF77B1F6A22F17EF1FCC37EEF33CD443EFDBAF9EAFDE2F907FDDE279A8ACB2F9DAFDE2F9EFFD9EF7DA0C9C4FBC5F3E9279F7EF235F3E9279F7ED97CF57EF1FC4D3C9F7EF275FA85528FA9F76FF43300FDC203A8F7F30A203E807ABFFC00F46BF7F32E40BD5F7E00FAE957EE971F807EFA19807ED901E86700FA19407700F57EF901E86700E97EF901780DA09F01940750EF971F40BD5F7E00F57EF901D4FB19807EEDFE9601524DA5DE5FFF8721C95E556A6F806C6F2A2AFBD3BDA9ACFC1080FE64FD7503E4CB97EFAF1A207BFF5D1BFDF9FA6B0648D95FFE16A0E203A5488A6F80A4FDC53740F1FBC9604A6F0089FEF3BAE27713E1940DA0D27F9257FA5E22A0BD6080D2379221BD0FF05958FA3632A68FFEB7C6A25790C00EFA9F42EFEF8EF0CE06B89A2593BAFE7C03D0AF3D406D7FB601AAFB930D50DF9F6B8086FE5403B4F43340A205DAFAF32CD0DA9F6581F6FE140BF4E46758A0B33FFC02DDFDC11730E80F3D814D7FDC0DECFA634E60DA1F7002EBFE68130CE80FB5C1A0FE28238CCC8FB0C0E0FEE52718DFBFF604E2FD53F2175E807EE9FE59F9AB0E20DE3F2F9FFE0589E7ABF74FCCA77F41F44BF7CFCC17E87F3CF6C7D7BF44E9B7AEFFA1D8FF7815A07F64FEC106DEB91F46E7BF2DE09DFBC6B2FE2C5FA5FF2CFF6500EFE01796F5F2FDE7F9CF0378273F9B96BF68BFE50097F98BF61BE6DFF4AF39C0BC7CFA73F7DFE5AFD96F3700FDDA0344ED371AE03E9FFE35FB6D06A05FBB5F7E00F5FEB8EF00E5FB4D06087CFFD33F253FF500E2FD45F9EAFD4F2FEF1DFC664AFEC2FDBD0388F797E5E7EDAF7EF5A77F3113FA5F1EE0DDFB6178FFDB23BC7BDF8DCE57EF7F7F8877EFBBC1F9EAFD1F8FF1EE7D37397FB9FE8E019AFA971BA0BDBFE24FFE53F6B75CFD051718D67FF638EFE03793EB33F4DFDEF9876FF9BFFEF7EBF9BC83DF4CAA5F977DFFC183BC232F58E7C7AA37EF8F966F7CFF47ABB7ED8F57BF35BD07389921627DFB478049F2ADFA83D65BFD16286CBE497FDC7A934F0144CEEFBF013EFF7BEFA23AEDFDFF2F70F0DF79F7D4EAE94F906FDCEF5D534FBBDEB4DF3BA58976BD5DBF77472BEDFA8D1F80209EDFDDEF7DFE5EDAF59DFDDE8737A05DDFD1EF7D7023DAF5FCFC3BF17C7E00A8743D3F0059BBBEB2DFFBB00388E757F47B9F740CEDFAD27EEF538E239E5FD4EF7DC691B4EBD5F3EFFBBD0F389876FD5DBFF7E9C613CFBFEAF73EDA0CE2F917FDDE279B837EE9FCD37EEF734D229E7FD6EF7DAC69C4F3D5FBC5F38FFBBD0F3511F9CAF9F46BE71FF47B9F682A2EBF74BE7ABF78FE67BFF78126239F7EF245F3E9D7CE57EF17CFA79F7CFA65F337F1FC8D7CE57CFAB5F3E9D7CEA75F285FA9F590FA00EAFD1BFDDAFDF203D04F3F0308F7CB0FC06B00FDD2FDF203D04FBFF200EAFDF203D0CF00F40B0F403F03D02F3CC0CE00F43300FD0C403F03480EA0DE2F3F807A3F03D0CF00F40B0FB03300FDF433806CBFFC00EAFDF203A8F7CB0FC0FB40FAE96700FA550750EF971F40BD5F7E00F57EF901F6D20192EEB3970E20DE9FF615642F5A20EF5B88F7FEC3C4C46F213FFA0F2253BF873818603F7F01A7430E74D4FF5B5AF6E621B2B3FECB5932A15F7B80CAFE7403D4F6671B807EED051AFA530DD0D29F6980A6FE440B34F6A759A0B93FC9021DFD2916E8EA4FB040677FF805BAFB834F60D11F7902A3FEB013D8F5C79CC0B43FE004D6FDC116B0CFFFB7418C1D06F5FFDD607D03FB432C30B47FFD0506E72FBFC0F8FEB51798D1BFF20053FA171E40BC7F4EBE7CFFAA03CCCA5FB47F5A3EFD2B9A974FFF8226E62FD9CFF5B7F710EE7FEC8F2F51FAADEB7F09F63FDEACDF6F9AFFD1FFBE8077ED87C1F5EF0378E7BE33CD3FEE7F59C0BBF7CD94FC75079894BF6ABF6DFE45FFD300DECDCF66D52BF45FE6D3BF62FFBCFC35FB2D07B8E95F738079F9F4AFD86F36C06D7EEEFEFB7CFA13F717E4A71E40BDBF688035FBE7DD0099FBE50750EF8FFB1E70DE0D90B93FF0FD2FDFDF3F40493DFD69FBCBF2D7ED9F3440DA7EF5EB2FDE5F98BF707FD700F5F9F4AF666EBE62FFCB63BC733FA8F70F1FE0F521DEB59FE897CE1FDCFFF610EFD82323F3037C0D6C637F517D84FC91FD11F29BFADBAEFE9AFD0D0364AA6FE8CF73EF7F1B911FE6E26F43FA23E5D7F6A7BAF7BF59F787BAFA9B75FFE723BCFBEED4F5177FB973907AD3FE80F596EF0042E69BDD0041EBAD6E80B0F936FD71F32D7E07F0F932DE5115AAFBBF1778DA21747DF7E7800FFE6BEFA23A1DFD87BC7BAA89E79BF67BB7B410CFE7FB7F4BD75BF57B57B4D3AE37E9F74EE8A35DCF0F80D1AEEFEBF73EBB05EDFAF67EEF735B11CFE707204AD7D3AF5DCF0FC0D6AEAFEBF73EEB08DAF5E5FDDEE71C453CBFB0DFFB94E368D717F57B1F7128EDFADB7CEFF38D269E7FD3EF7DBAF1B4EB2FFBBD8F368578FE79BFF7C1E610CF3FEDF73ED72CF44BE79FF47B9F6A1AF1FCE37EEF434D44BE723EFDDAF907FDDE279A4B3C5FBD5F3CFFA3DFFB3CB3D14FBE6EFE269EAFDE2F9E2FDFBF91AF9CBF89E76FE2F91BF9F4EBE66FE2F9EAFDE2F9FF06F03E851FF1FCEF01BC8FE04ABD7F13CF8706F577F4F2EFE9E50750EF97FF584FBD7FA39F01E4FB9507E05DA0783F6F01C4FBE50710EF577F0FA0DE2FFF7920FAB507A09F7EE501D4FBE507D8C507D819807EE501D4FBE50750EF971F606700FA19807E06501D40BD5F7E00F57EF901D4FBE50750EF971F40BD9FDF053000FD0C203CC02E3E807A3FAF00E2FDF203A8F7CB0FA0FE2E40BD5F7E00F57EF901E8D71E606780B201B26EB3170D90F8E6781FE02833F36BC747FF4767EE370F07FDCFA9E9DF3E9EF4DFCC9208FDDA03D4F5E71BA0B23FDD00B5FDD906A8EE4F36407D7FAE011AFA532DD0D49F6881C6FE340B34F72759A0A33FC5025DFD0916E8EC0FBF40777FF0092CFA232F60D31F7702B3FEA01B98F6C75BC0383FDC0403FA434D30A63FCE04C3FA632C30303FC40263FBD71F6070FFF20B0CEF5F7C8109FD2B0F30235FBE7FE101C4FBE7E4AF3B8078FFAC7CFA5734AD7ED1FE890378971E13EF1FD0F9783C84FB1F7FEC9F1B78A71E1913FF6F83E5071859FFB98077EDA7C1F96F0378D77E189EFF3A8077EE3BD3FC93FEE701BC7B5F4DA95FB77F52FEF300DEC9CFA6E5D3BF62FFBCFC3507A07F563DFDC9FBEFF2971C80FE69F5F42FD86F354049FE92FD360314E5AFD96F3240E47E8301CAF2571D40BDBF7B80D2FCACFDD1AFFFB41B80FE94FDA5F9CBF6770EA0DD5F5CBF707FCF00E2FD15F9F4E7EBAFC9A77FD9FED601AAF2E9CFD6DF9ABF5E7FDB00EAFD8DEFFDE8F7AEFDD4D65F31C0CBC3BC6B3F0DBFFE6BE70F7F03B8F8E56FEB6FCCA77F4123F3DF1EE79D7A6C5C7F88FCEAFE5C577F5C7F90FCDAFEB6FA75F36B0748973FA23F52FE80FE50F9F6FDA1EACDFB3F1EE1DD77CBB43F5EBEE50D10B0DEB23F62BDDD4740212FFE66D61F35DF6880B8F916BF05FA7C21EFA80AB5FDFF2FB0E7A9EFFF2470F0FCCE3F068F5E2FFFED6FE5BFFDB1E500DE294DC4F3CDFABD3B5A69D71BF57B4774D0AEE7E77F740EE07DFA7EE2F95DFDDE67B7A05DDFDEEF7D6E2BE2F9FC0044ED7C7E00A8743D3F005ABBBEAEDFFBAC2348C76FC5FDDEC71C463C9F7EE9FA927EEF138EA55DAF9E7FD3EF7DBAF1C4F32FFBBDCF368376FD45BFF7C12611CF3FEBF73ED634E42BE71FF77B1F6A22F1FCA37EEF234D453FF9BAF99FFDDE079A4CBC5FBB7E7B1FC0FB34F3D14F3EFDAAF99B763DFDE4D34FBF6CFF269EBF49C77FD1AEFFEAF73E812FF17EF17C0000000000000000000000000424FD252FDA5FEEA7FDC59EBF5FEEEA7D0E37F46B0FA0FEF5DEDC00E203A8FF850FF901E86700E97EF901D4FBE507A09F01A4FBE50750EF971F40BD5F7E00F57EF901D4FBF94CA0F800EAFDF203A8F73380FA00EAFD7C0CC000F433806EFF2E7E03ECE203A8F7CB0FB08B0FB03380F602FB3BEF034DF6D12FB6C041FFFB06B967391940E6BE28EFCF3940457FCA05AAFA130E50D79F6F80CAFE7403D4F63340B205EAFB530DD0909F6B81B601D22CD0989F6681F6FE1C1374F52758A0B33FFC04FDFDB117B0E88F3C81517FD405CCF2834E60DA1F7001E3FE7013D8F7C75A60447FA40906F5875960587F8C0506E6871860687F8001C6F6AFBFC0E8FEC517189FBFF600F44BF7CFC897EF5F778039F9F42F6A52FEB20358673E1EA1FACDEBBFC8F63F7EC5E8B7CD7FEEFF5CC0BBF5C8B8FACF05BC5B0F8CCD7F1BC03BF6D3E8FCD701BC6B3F0CAF7F5DC03BF7C38CFC85FB0DF32FFA571DC0B2FE2A9FFEFCFD57F9F4A7EFBFCC5F7500FAE7D467EFBFCDCFDD7F9F4F7FE2FE82FC450798974FFF8AFD160394E5D3BF647FFF0085F9AB0E30AD7FCDFCEE018A2FFFAA03A8F7F70D509E4FFFA2FD3D0354E4D39FAFBF267FDDFEF601E8CF90DFDC5F75F9171E604AFFBAF9ADFD592E7FEB00F4D39FA3BF6980D67CF57EEFD6232DFD8D1FFDA4E96FCC5FB2BF6580C6FC2CFDAD973F477F73FD9AF995FD35F5EF5F01EE5D7A42FAEA6F75FDED97DFBBF2DC94CBEF1D79614CFEDB23BD23AF8CE80F943FA23F52FE80578048F503FA435D7DFB7700C1F28D6F80F74778C71530ECFF7880775B09BBFE88F586FD31F3ADDE007EBCAC77573193FEB8F91637C0E70B7A4755A8EFDFEFEA23E5577F0EE8FD46885DDFFBC7C0D1EBF9FEB7E2F9A60378A73411CF37EBF7EE68A55D6FD4EF1DD143BBBE3FDF3BA097763D3F00483C9F1F80255DCF0FC06B1AC0FBCC96B4EBF909A8DAF5FC0468EDFA9A7EEF938E211DBF15F67B1F7220F1FC927EEF230E251DBFDDF57B9F6E38F1FCCB7EEFB3CD209E7FD1EF7DB239C4F34FFBBDCF358B78FE49BFF7A9E611CF3FEAF73ED254F42BD7D32F9EBF69D7BFF57B1FC681783EFDDAF99B78FE261DFF45BBFEABDFFB0400000000000000000000000000000000000000000090A6FE175EF90BCFDA03D0AF3D00FDE203F0168001B40750EF971F807E06A09F01BC4FE147BD5F7E00F57EF901D4FBF94CA87ABFFC00EAFDF203A8F7F3A950FAA50750FF3C80F6377FA75F7E807DD75E40BD9F1F00B24B2FB0BFF33ED0641FFD6A131C0DF0B4C29EFC3789A7F922F744697FD605CAFB730E50D19F7281AA7E0648B740653E03645BA0BE3FD5022DF9991668EC4FB340737F92053AFA334CD0971F7F81EEFEE00B18F4879EC0A63FEE0256FD5137B0EC0FB8806D7EBC05CCFB832D30A03FD40243FA034D30AA3FCA00C3FA630C302E3FC60243FB030C30B67FF90106E72F3FC0F0FEC51710EF9F902FDFBFF200E2FD53F2E5FB971DC038F3F178EC8F40FDE6F57F68F63F9E85E81F97FFB18077EAA1A1FDAF0B78A71E195BFF3A8077EB01BBF4E3FAC50730ABBF90BFFF32FF7900EFDC7753F2D7EDB7C90FDB3F297FD901E8A77F463EFD89FB0BF2E5FB171D80FE49F9F467ED2FCB5FB4DF6000F1FEC2FCB40388F717E7AFDA3F6D809CFDEAD73F7E7FDF00F487EFEF19A03C9FFE84FD15F90BF7370F5093AFDEBF707E6B7F96CB4FFFF8FCA5FBDB0610EFAFCB57EF7F7AA077EC11EDCB3FBE7FF1CB5FDFDF7CF9D71C606CFDF2F983FB5F1EEB9D7A4C3C7F647F84FCAAFE8ECBEF9D794AFCF2D70C9032BFB8BFAE3E4CFEA0FE30F9A503A4CD1FD1FFFA50EFC01BE6FD6F8FF4EEBB63DD1F2CDFBA3F5A7EE1006DF511F22DFB23E61BF687CC377B03F0F110EFB05236FD61F34D6E80B8F526FD91F3FB7F0BF4F9A2DE49553AFB83D76F159F03C9995FF349B0A7E693FA78F9B59F04BEFCC7DE2D2DAAFAAF79A734D1AEE7FB9FDB0CE01DD141BBDEA2DFBBA08F76BDFCCF7FE91BC0FBEC16C4F3F90158D2F58DFDDE8736A45DCF0FC054FF01A8F23F01573C9F9F002E5D5FD8EF7DC881B4EB4BFABD4F389676FD5DBFF7E9C6D3AEBFEAF73ED91CF42BD7ABE79F0DE07DAA79C4F38FFABD8F349576FD67BFF7796613CF7F1BC0FB300EB4EB9FFABD0FE2453CFFEF00DE87F0249EBF69D7030000000000000000000000000000000000000000000000000000000000000000000000003DC47FFA073FFCE67B01D90DF8F157DA0BF0F3FFB47F04E247BFD60447F94A7394F4679EA0B03FED02C5FD4917A8E84FB940557FC2052AFBD30D50DB9F6C81FAFC5C0B34F5275AA0B13FCD02CDFD3916E8C84F3141677FF805BAFB832F60D01F79029BFCB81B18F6875CC0B43FE000B6FDF116B0EE0FB6807D7EAC09C6F4C71960507F980146F5471960587F8C0506E687186068FFFA038CCD5F7F80D1FDAB2F20DE3F3E5FBE7FE50166E4D3BF2CE3D0C7974803D8D7FF15A3DFACFBADFE7D01EFCE3346F527961FC0225FBDFF3CFF7900EFD24316F981FB47D72F3EC0847CFAD7ED9F912FDFBFEC0073EA97EDB7C88FDB6F525F949FB93FEE0013F397EC9FF7EABF68BFC50065F98BF6770F50584FFFA2FD9D0314E7CBF7A71C2041FEACFE8C03D4E4D39FAF3FC7FD3FE906A07FD5FEF601D4FB537C00407FF30049EE7FFAC7E7D3BF707FDB0079F2E91F5CBFFAD7C08CAE5FFD8BC046E72F7EF987F72F9E5F3B40B6CB3FBA7FF9FCBAFE8E7CC5FE97C77A879ED1BEFC35FD29F3CBFB3BEA57EE2F1EA0A7DFBBF18AF8E59FD0EF5D786D487F98ABBF150E90377F407FA87CFBFE58F9E6FDAF0FF4AE2B60DAFFF638EFB61296FD01F30DFBDF1FE55D56C8AA3F68BE557FD47C9BFE8F877857952BE8AFF89B6EE1F20DFA3F5FDEBBA94AEF00B1EB7BFB835FFCADF4F7C08FDF19F6AB7CEF9A7A65FD3F37C2BFFB614F71F1BF540D70CD3BA58976BD5DBF77472BED7AA37EEF881EDAF5FC0008EDFACE7EEFC31B10CFEFE8F73EB911E9F8ADADDFFBCC96C4F3EBFBBD0F6C4D3CBFB2DFFBB4F6C4F3ABFABDCF3A8274FCC60F00576EFF261D7F97EF7DBA09C4F32FFABD4F368776FD69BFF7B1A611CF3FEEF73ED444DAF507FDDE079A4DBB7ED3AE7FE9F73E8A13EDFA2FCAED0000000000000000000000000000000000000000000000000000000000000000000000000000000000A094F40F8014FF01A0FC00DC931F81ADB1C549BFCA0D71979F7D8292FEC41314E6A75DA0BC3FE9023503245CA02A3FE102B5FDD92668E84FB540537F9E095AF3B32CD0D19F6281AEFEF813F4E6475FC0A03FF20226F98117B0EA8FBA805D7FCC052CFB232E60DB1F6E02F3FC600B8CE80F34C090FC40030CEA0F33C0A8FE20030CCB0FB2C0C8FE080388F70FCD0FB0C0E8FEC507189E4FFFCAC6E7AF3D8071EAE3F1F8FB2F31FACDB2FFD5FFD0E9FF17FC78156200B3FA4F11FA07E63F0FE09D796A647E801B60647D841B606CFEF2FD9DF915FD4B0E303A7FF11BA0375FBCFFBE7EED578009F94BDF00E2FD33EA17EE9F939FB4BF387FDDFE9E01CAF3171E40BDBF79809A7AFAD7ED6F1CA02E5FBE7FE101A6E42FDCDF3480767F757DAEFE867CFAF3F4B7E4AFDC5F3B80787F537E9AFEB6FAB5FBCB0768AD4FD2DF9E4F7F82FEACF985FD1DF98BF7170DD093AFDEFFF4CB78A71E9A77F925FB57CF2F1820F5E5BFEF4F9E4FFF9C7CF57EEFCC73DA97FFEE0630CA17EFF76EBC32E3F27B375E1A334098FC31FD2FBF8877E18D110304CA1FF12140A4FC01FD91EEFE01BF058C956FFE398060F9D60384CB37ED7F7B9C775A9182FED20122E6970CD0541F25DFAA3F6ABE4DFFC763BCABCA19F47F3EC43BAA46777FECFCEEFEE0F99DFDD1EBB7BE0112E477F467A86FFC10F8F8E5BC539A14F4FFFB262709EB2BBF12F2343E6AFD26FFFDAF4DFABD1B7A68D71BF47B07F412CFE7E75F48D777F47B1FDC8876FDD63680F7992D69D737F47B1FD89A78BEFACF3FAC1AC0FBA84388E797F77B1F7410E1F46FD2F1DB6DBFF7F186938EDFCEFBBDCF358D76FD71BFF799A612CF7FEFF73ECE7CDAF5DBD300DE07F1241D0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080177F7FFAF7FEE78760ABFD24ECFD88F7A1E639CC17DAE1BAFFCFEB4562B7F9C9EF82A2FEBC0B14E6A75DA0BC3FE50455F90937A8EFCF3540437FA6059AF2136DD0DE9F62819EFC0C0B74F6879FA0BF3FF60006FD911730C90FBC80557FD4090CFB232E609A1F7001EBFE680398F7C71AC03E3FD60023FA030D30243FD00083FAA30C302A3FCA00E3FA632C40BFF40043F3030C30B87FF501CC7B1F8F50035804FF243FFE8AD36F52FF37F9F14BA5FF7126C80083EA5F07F08EBC30AE3FC40003F3F3F75FE73F0FE09D7966647DEEFEFBFA000388E737F717D5AF3FC0D8AB9FB7BF347FF1FEE1973F697F71FEE2038CCFCFD85F934F7FBAFEAAFCB5FB5B06A8CB5F7C80E1F5B9FAEBEB53F5B7E4AFDD5F3540533EFD49FADBEAE94FD2DF9A4FFFD2FDC50388F737E7D39FA1BF3D3F457F47FEEAFD0503F4D4C7EFEFAB5F3EFFAEBF337FFD3F029FD6EF1D7A626CFEFAFDD703E4CFBFEC17B8FC43FB9F7E29EFCC5373F215FB43E40F1C40BC3F483EFD63FAA3E45F0D20913FA43F50FE905700F1FE48F9030678F925BCEBEE59F707CBB77E0BF8FA2B78B79530BD01C2D56FA63740BCABBF59DE0021F3CD3E09F2F650EFAC6257FD2D5FED1F2CDF64808F477937D518D0EF9D54E5BABFEAAFBA45CCEFEE0F9EDFFB0A103EBFABFFF3E5BD6BEA5DF75F0D90A1BEB9FFE865BD53DA340C70FC92DE218D6EFAFF5FE06D8554F5955F0977F64FBD233A14F65FF26EE8229EDFDDEF7DFE6EDAF5F23FFF809F7F215DBFB50EE07D6A3BDAF5FCFC27F1FCDA01BC4F6B4F3CBF6200EF838EA15DBF950EE07DCA71EED313C77F51BDF0FF68D76FE703789F6B16E1F46FDAF55FB4EBBF69D77FC9FF9E1E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DCD8B77DFFFF5FF7FDFBFFD4EC4736911D0EE38536B8EADFD3BF36DCD5675FA0A43FF106A5F95927A8E94FB8405D7EBA0D1AF2532DD0D69F6782E6FE240B74F46758A02B3FC1009DFDD117E8CE0FBE80457FE0056CF2E34E60D71F7200C3FC900BD8F6C71BC0B83FDC02E2FDE6F9C10618D01F698121F9810618D41F6601F1FE61F9410618D81F6100C3DA8764FFE3F1EFDF1F8F8F05BCEB6EF5D77F673F7EC51AC0A2FE5DA00106D4BF0DE05D786D4CFFF300DE859706E587B9015ACBAFEBE3DC00D6D7FD6800EFC60B8D575FBBBF283FC400032F7FDEFEC2FC00FD43F323BC0718DABFFE0D30363F657F45BE7CFFF2030CCE5FBD7F70FDF2FD9503D4D62FFF1E70F0D55FFF06185C4F7F9EFEA67CFAB3F4B7E5AFDE5F3A40637D92FEE6FA1CFD1DF9F2FDAB0F209E2FDF7F3F4057FEF2FD63EBD7EFBF1EA0B73E78BF65BE7ABF77E799A1F901FA2F06A05F209FFE71FD4FBF9677E5B929977FE1FE7103C4C81FD6FFFC4B79375E39EDB7FA9DDFDAF9F2FD635E01E2E40FE97FF975BC036F8CEEF7EEBB653F40A8FCB1FDDE71054EFBFBFFD42B44BFF50D102DDFB83F5CBEED2BC0CBE3BDCB0A19F647CC37BC015E1FEDDD55CAAC3F66BED56781DF1EEA5D55C1A43F6EBEC50DF0FE38EFA42AFDFD1F8FF34EAAD33940F0FACEFECFC778E7D4EB1820797EC55FF40D9BDF3E408EFAC6FEA397F50E6974D9FFBDC0DB0A07DFEB256EFD56F9A590672FE01DD1A1A4FFE45BDC24A8DFFABF0F8EF7F97BD1AF5CDFD7EF7D760BDAF55BF300DEC736A35DBFB50CE07D625BDAF5F4D70DE07DD801B4EB37F99FFF56D8EF7DCA81B4EBB7DB01BC8F379C72FB37EDFAB39FFE2B4438FDAF9F74C5F86F92971D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FEDABFFF47D27EC4FB50D31CD6EB8C70952F30C0757EF6056EEB736F50989F75828AFC941354F667DBA0213FD5026DFD5F13E418A1B93FC74DD0919F6281BEFEF00BF4E6475FC0A03FF20226F98117B0EA8F3A80597FD001ECFA432E60991F7101F17EE3FC700BD8F7871A60407EA801C4FB87E4075A60547F9001CC721F0FCDFE3FDD8F6FF116E86D7F176D00DBFA7877806D7DB81BC0BAFE7D00EFBE3BC6ED1F0378F7DDB1AF0F35C090FC9701BC0BAF0DEA7F1AC0BBF0D2A0FABCFD85F9510618961FA37F5C7E8CB780C3EA13F657D53F62BC028CAB0FD13FB03E537F4B7DA2FEB6FC0803D03F303F4B7FE2EB5F3440F3F55F7F80A1977FFDFC92FEF6AB1FA0FF76808EFA0CFD5DF91106189A1FBDBF379FFED0FDDDF9F447EEEFCF0FD07F3180443EFD53FAD71D60607F84FC8B01E837EBF76EBC227EF967F47B275E1AD51FE4F2CBF79F0DA0923FA67FA73F787FD7002FBF9077E09DC1FDDE79B7ECFB43E50F780508956FDF1F2BDF7C805877FF66DD1F2EDFF6B7C02FBF80775921C3FE88F98637C0EBC3BDBB4A99F5C7CC377B05889A6F7403BC3DD63BAA82497FD8FACDE28F01DE1FE75D54A7BB3F74FDD63B40EC8BFFA5ABFFE331DE35F5CEFB6F07F87C84774C83E6FE14F55BEB57C21CBCB07748A3ABFEB2BFE81F3ABFE12B2133D56FB55F0A7BFC42DE0D3D6EFA7F2738FDE7DE059DEE07D81FFB797DF47CF9EF7FDC3580F7D92D68D76F7C037CED7AF99FFF50DFEF7D606BE2F99503781F7600EDFAAD7C00EF730E221DFF45BB7E53FFF96F37FDDE879B42B9FD9B74FCB79F6CC9FA6F3FD19AF90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008AF6BFFFBA3B9F63BAFF933F791F6A9E8378A90DCEFB2516B8CA1718E13E3FF30245F5891728EECF39425D7EBE05AAFB534DD0529F6981D6FE241BF4E4CBF7C75FA0333FFC0406FD9107B0C88F3C804D7FD805ACF2A30E60D71F7301CBFE800398E6071CC0B83FDA00D6F9D10610EFB7CF8FB5C090FE38038CC917EC7F845CA0A3F7F1F8F71FFEFC7F8FB705BCD38A74D4FF297E3C797B19EFB6026DED2FD1A70378B79568BFF2290630AE7F1BC0BBEE9E79FECB00DE75F7CCEB830D605F1FAA7F407DA80146D4A7ECAFC98F33C0A0FC6CFD95F52F0378275E1A549FA9BFA53ECC00C3F263F48FBBFC31FAEF0768CD8FD13FAC9EFE0C03F4E487E81F981FA2FF7A80FCFD03F343F45F0E20DEDF994F7FECFEDEFC1803D0AFDD7F3E8046FE69BFC8E5A77FFCEDBFF400EAFD6703A8E4D33FBCDFBBF0DA98FE30977F7CBF77E08D21FD71F2CF06A05F249F7EF3FE3D417FC700B1F2ED6F8060F9D6FDD12EBFF12B40B87CDBFE3D5EBFE50011F30D3F071232DFEE06787DB8775539A31B206ABE517FD87C9B0102E75BF447CE37F863C0D0F9DD5F06F0F618EF9C7A7DFDE1F3FB6E80F74778C7B468EFCF50DF71037CBCB877499BC6FE24F55BD300072FEA5DD1EEA2FF7881A397F38EE87139C0FEF66D0E0EEB43E757FD5D987CF55BF90027FFCCFBF8DD0AFA3FBFC54B9A7AF96FFFDB3180F7C18D68D76F4D03781FD99476FD563D80F771CD69D76F5503781F7508F17CF51F7FB3C9FFF8A3DB01BC8F379E74FC97A370A51F03F8F3F3FF36A9CB0E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ACFDEFFFC9D93F789F68A2CF78A9054EF24536B8AA17D8E03E3FF30465F5691728CFCF39415D7FBA09AAF3932DD0D29F6881B6FC341B74E46718A02B3FC102BDFDC107E8CE0FBE80457FE0056CF2E30E60D51F7401BBFC980B88F79BE6071CC0B83FDC00D6FDC10630CF97EF0F35C080FC500374B73E620FD059FDF8F2FD6F310768287FFC54FFF9F71F02FD8F2B116F00BBFA900358D6477C0DB08C7F1BC03BAD8471FDCB00DE6D25ACEB83DD00F6F9C16E00F3FA5837C080FC64FDD5F9A15E0106D447BA0146D447BA0186D4D39FA2BF3D3F47BFC000A3F2E98F3F404F3EFD31F22FFABBF2E98FDEDF971F668051FD41F2B9FEDAF9C3FAA30F403FFD36F921FB0D2F7FC87E99B7FF83FAC35CFE41F77F98FC9301642E3FFD0306889F2FD46F7FFD63E51FF60B5D7EF3FE60F9D6F7FFAEDD1F2EDFF615604FD2DF3A40C07CCBFE8897DF708098F9661F0206CDB7FA1C40D47CA31B206EBEC90DF0FA50EFA23AFDFD6F8FF40EAAD53B40F0FCDEFEE8F99D7F0C183EBFEFCB40E2E7F77C1DD4FB8B7B97346A1D20497E63FFC7CB7A67B46B1820517D43FFC10B7A3774A91BE0E8C5BC0BFA5CF47F2E90AE7EBBFBBB40B92FFE97EBFEDF0572D66F85031CFE13EF939BB8CBDF4FBED149927CF96F7FDB3480F7914D69D76FD503781FD79E76BDFCF7FF2F1FC0FB9CA368D77F918EDFEEFABD4F378372FB1FBBF6CFBFFA21190D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088D8BFFE6FF73E8597FD95F77166DA4F6C022BECA7F51AF7C1757DFA05EEF3532F50949F7681D2FAAC0BD4F4275CA02E3FDF04F5FDA92668CACF3341737E9209C4FBBBF2E32FD09B1F7D0183FEC80B98E4071EC0A83FEA0056F94107B0CB8FD9AF3E80617EC8013A8B1FC107E8ACFF127A0083FEC803F4B4FFAD7F447E15A8BFE07FAEFA4F7BEC01AAEB4F041DC022FD7300EFAA0A46F5510730AB7F1DC03BAB985D7DC8012CEB73F697D7471CC0B43E5EBF717EB601AAF3A3F55BE7471B6064BF775B09EBFA3CFD6DF5C10630BFFAC1FACF0768CE0FD53FF6FAAF3FC080FC5037C0E0FEE50718912FDF1FE81560483EFDF4C7EE57C93F1BA0AF3FD00043AE7FA0FE21D73F50BEFAFDCFF517EF3F1E807EE97EABFCA8FD2ABFFBFB32305FB27F0FD66F3D40B4FCA37EA5CB6FDB1F2FFFA05FEAF29B0E1031DFB03F64BED91B80D75FC2BBAAC2887EEFA61A363740D87C9BDF0284BDFB379B0F0193E5D72E1038DFA03FF2CDBFF50FF0F638EF9C6A9DFDC1EB6DFBBD5B9A740D10FEF26F3D7F0CF0F610EF90462737C0ED02EF2FEFDDD1EC6C80EB09D2E4377D2564A2FA862F04FF7C31EF843E95FDD9F2EB6E808397F13E7FB7F2FCA397F13E7DBFC2EB7FF802DE673771DF7FF28FBD0F6EE4E206D8CFE3D3E4CB7FFFCB967EEF23DB12CFAFEDF73EAE3DEDFAAD6200EF838EA25DFF4538FD9B76FD763A80CECF82F9AE15BCF0EFF63F3F0048B4FE97783E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009EDDE0770B2EFFB9F7FFDC3FB3833EDBFD9CFBC8F35C961BBCE0457F90A1BDCF6A79EA0A43EF302A5FD491728CF4FB940557EBE0DEAF3734DD0D69F6580C6FA3403B4F7A758A0273FC306DDFDB11730C897EF0F3C80497EDC7E9BFCB80388F75BE5475DA027F821DDFFF8127D81CEFCB701BC6BEA3585FFD6471FA0E58ABF797D19EFA04A7DE9E16F0083FAD00358D4071EE03EBDA4FE6D00EFA80ADD17FE6800EFA80A76FD2107B0AB4FD85F97FF3C80775631C3FA64FDF5F9010730BDFCA9FA5BF2E3F59F0FA0D16F9B1F6F00F17EEBFC701F02D16F9A1FED15C0FAF247EBE7FA1BE7E7184026FFB8BFE7F2071B807EEDFEC301E8A75F24FFA85FE9F273FDB9FE632E7FDC7EA10F7FADAF7FB8CB6F3C80787FC07CD3370011FB0F0610CF6F1D600FD96F76FD77FA23E67F0EA075F90F6E80EE7CBDFEC0F9161F0105AEDF0C06889DDFDD1FF9E6FF72D05FB340F4FCCE01F6A4FD850324C8EFB80152D4B7DF0049F25BFBB3E4B77D21C4FB0B7B37743919E062818F17F54EE872D65FF637FEA2D76F955F0AF9F952DEC7EF767E037C2C70F022DEA73750DA9FB37E2B19E0E41F7B1FDCC8C56BC07EDA9E27BFF1FB00781FDA90787EC300DE0736A65DBFD50DE07DD621B4EBF9FEBF7CFF6BF96F807EF2EDEF37A91F852078D95F7CDD03DFFF2E59FF4C3C5FEAB51E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092DABFFE67DFB7AF7FD9BD0F33D777F81BEF334DF3992E35C179BEC20CF7F5B91728EB4FBB41797ECA05AAF2F32D509B9F6B8186FA5403B4F5A759A0353FCB00EDFDFBD787CBDEC7EFD4539FE21E101FA0375FBE3FF600FDF9A1FB0DF2230FD05AFCC8B2405BFD97140BB45CF8C75F7AFD8F57F1EF80E2EEAF0BFF78A7D1FF919D67809EF60C6F023AEBC30FD09DFFB680774F2583FAD00358D4BF0CE01D54C7283F6CFFC50055FD510730AACFD65F5BFFF216D0BBA906FD36F9515F01CCF263DE0076973FE60D60984F7FC0010CF3B9FE49FA5BAF7FC401B8FFED2E7FC401B8FDB9FEF4D34FBFE61BC08301A4AEBFFA3B40CBFE3D62BFE12B40C87EF17CC301C4FB83E65BF5EF51FB6D06889BFFD9DF991FADFF6380CEFCE8FD6A97BFBF3F76FE269EDF7BFD63BFF26FBDFDD1EBB7BE770009F27BFAC3DFFCDF9A07C891DFFC21F09EA4BF71802CF58D9F054E73F5DB06C853BFB57C1D44A2ABBFD57F1DD8FB4B7A9FBF5B557FBAFAADE20EF87C21EFA39B38EEBFFBEB7E69F2CBBE12FAE805BCCF6DE6EA0E38FB6789F2DBFE16B4F7A12D89E7D7F77B1FD89C767D55BFF751C7908EFFA25DBF150CE07DC0D194DBFF910DFFF1EF5B407F7F1B6C51B2E10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090C2FEBFFFFFC5FB180EBEA2F7279BCE08FB19EF834D715AAFB0C0657CF6090AE233AF50939F7080BAFC740B54E7E71AA0213FD5026DFD691668CDCF32407B7F8A050A4B1FD2FD8F3F320E50D3FFB980F7E9BBD5E5E7BB032AFBFF5F20D33D5054FF927F701778477468AA7F1FC03BA2435B7D9A011AE355FACFF3930CD05CFF36807747A38EFAD705BC431A75D5BFDC01DE256DBAEA13DC00E2FD9DF5E15F013AEBC3DF00BDF5D16F00F1FEFEFCD803D0DFDF1F79008BFCC0FD26973FD5002DF9813F04B0BEFEDE3DB56CFAE30E209E6FD41F7700F17CA3FEB803D02FDDFFF1E64FED0D00FD260384EDB7B9019E1FEF1D54C9BADFBBA796457FE0CBFF3180D8E5B7E80F7DF9DF0750BBFCFDFDC12F7F6FFF9EAA5FEEEA6FAF03C85DFDEDA55FF1F2F7F467B8FC9B787EFBF5CF91DF7C0364C96FBC01D2E4B7F5EF79FA1B06D833E5577F04B4BFF30EE8B5572D90ADBEF2F740F9F26B3E0992EEDEFF52D8FFD19E24BFEC8FC18EEA73E497DC0087F559F2B78305F6C7FEAFFC243E51FD9793C853DEE7B5269E5F3980F7614710CF2F1FC0FB9CA314A5A7ADDFEE07F03EDF78DAF55FC4F3FF0DB0EDFFFE43EAD7F863FBDBBF03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0F276EF03B8F92ADFFFF8F9FF75EC47BC0F35CB61BCC802FB457DF205F6BBF6BF0BE41CA1243DF57D20DE5F79FDD30D50DB9F6D80EAFE5C031C163EFE5018E023FD5FFCE36204EF43DB39BEF03A0BDCC69F4EE07D721365F5C713789FDD4245FFC702DE673750959F6F80C257FEF3D701EF804EB5F9C906A8BEFC1F037817F469C87F5FC03BA147CBE57F1FC0BBA14763FECB00DE0D3D5AF39F07F06EE821DEDF9E9F6300FA2DFAC30ED0FCD63F497FD7F5CF3080787F577E8201D4FBD507E8CC97EF8FFE3190DDF5F72E69B38B0F407FDF00C1F3BBFBA30FB0F70E10BCBFF706889EDFFD0630FA00F44BBFFA1BFE06C83BA411D75FBB5FFD33C03DFDBB767F8A7CFA5BFB73E4370FB027E9DF9BFAF73D4B7FCB0089EA0DBEFECD3BA057ED007BDE7EC92F80AD1C20DBE57FFFEB0F6AF55BF900EFF149F2F9FB2FB7FD99EBB7DB018EEA53F55FFE49C8717DAEFCC3B78127E129F3E5FF067855BFF75987D0AEDF4A07F03EE538F7E989E3BF895EF85FEAFDE70B789F6B16F5FE2F6FC95AF10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062D8FFFF9F3FFF2EE239787FA1B1C1DFD413DEA71BEE2C5C6181F3CBAE3141597DDA05CAF3730E50D39F6F80AA7AFAB32D509D9F6C01F5FEA601122DD0949F6880C6FE2C0B34E7E7E817CFEFE84F3100F90C20DCDF75FD130C40BF747F5F7EFC01C4FB7BF31920F802E2F95C7FED7E83FCD80B880FA05DBFD90CE0DDD0413C5FFEFEA79F01E86700D97CF97EF5DF01D14FBF72BEFCA780E9D7CE97FF2330F53F0197EF57FF0A28F5CBCF00DAF57C01305F015FDD9E2B9FBF0026FF3700CBFBBD0F3A8A787EE100DE871C49BBFECB6579FAFAF37EEF734D239EBF7D7CE38F4D2CFFE7BB806C3FAFF062FD82C10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004004FBF7FF2ADABFFEE787F76966DB8FE8DC0A87F91237C257E0797DFE012EDBF3F7DFE6E71EA0203F717F49FDF702293728ADCF791B54D667CBAFEECF3680787F757EB201C8171EA0A53E537FE300691610CF6FEDCF32406BBE7C7F8E01DAF373F4AB5F7FF91B807EED01C4FB7BF2E507F03EBB01AE3FF9CAFDF203D0CF00F43300FDB20B68D7D3DF9A9E24BFE30F0073F437E727A1DE2FFFF51F7C01143780747D65BFF761C7D0AEFF229EBFC9FF0580BB7EEFE38D279E7FD9EF7DB629B4EBBFFCAD55CDDF7E7E5B2F5AFF4BBB7EFB19C0FB186E84D301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AC60F73E80A3FD9BF729FCA8F6FF89DEFFF13ECE4CFB53F7AEB7C041BBD20617F902035CD6E7EFBFC9971FC0FB78C389F78BE74BF7EFE26FFD6EEB53F717D4A71E40BCBF2CFF6B81A423140F90F43610EFAFCA4F3840657FB601C86700FAC917EDE7FAD3AFDCCFFDAFDD5FBB80F76907A05FBBBF6600EFA38EA07EFDC5F3B7F205BCCF398E787ED900DE671C493C5F7E00F5FB5F7E00EDFA4DFB0B40B6D3FC4DA5FFE22B7F7791BF07F0F96540DE279A4F3CFF7500EFB37878FABB0FDE47F1243F80C69B7C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E065DFF6FDEB5F65EDDFBC4FE1676700ED01F65D7A01F1FC8D5700DE0588F7AB0FA0FE0640FB3DC0CF3B40C5FEFD85F769E6DB77E905DEF3D51638E8D79A807EED7EDE02D04FBF6E3F6FFEB4FBD5EFFF837EEF13CD259E2FFF3BC0974F7F08E6BF7DF64F6F80B7DB5EBD5F90783E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090DC7F60281A2C', pixel_classes=[PixelClass(name='PixelClass1', pixel_value=1), PixelClass(name='PixelClass2', pixel_value=2), PixelClass(name='PixelClass3', pixel_value=3)]) subvolumes=[SubVolume(name='ec', handle=0, subvolume_type=, analytic_expr=None, image_pixel_value=1), SubVolume(name='cytosol', handle=1, subvolume_type=, analytic_expr=None, image_pixel_value=2), SubVolume(name='Nucleus', handle=2, subvolume_type=, analytic_expr=None, image_pixel_value=3)] surface_classes=[SurfaceClass(name='cytosol_ec_membrane', subvolume_ref_1='cytosol', subvolume_ref_2='ec'), SurfaceClass(name='Nucleus_cytosol_membrane', subvolume_ref_1='Nucleus', subvolume_ref_2='cytosol')], sims=['Simulation4'])]\n", + "2026-03-06T02:42:25.747978Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "Please remove the `packages` attribute from your configuration file.\n", + "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", + "2026-03-06T02:42:25.752056Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@39ed4cf8 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-03-06T02:42:26.100261Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@39ed4cf8 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-05 21:42:26,105 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", + "2026-03-06T02:42:26.122608Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "Please remove the `packages` attribute from your configuration file.\n", + "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", + "2026-03-06T02:42:26.123580Z main WARN The Logger org.vcell.libvcell.Entrypoints was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@51f0adaa and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-06T02:42:26.127459Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@51f0adaa and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-06T02:42:26.145291Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@51f0adaa and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-05 21:42:26,279 INFO (Entrypoints.java:83) - Returning from vcmlToFiniteVolumeInput: {\"success\":true,\"message\":\"Success\"}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Simulation Complete in Main() ... \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setting Base file name to: `\"/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_rbx85k94/SimID_878385397_0_\"`\n", + "initializing mesh\n", + "numVolume=367236\n", + "\n", + "CartesianMesh::computeNormalsFromNeighbors(), compute normals from neighbors\n", + "Membrane Elements -> N=16791\n", + "==============================================\n", + "qhull precision warning: \n", + "572 has 0 neighbors !\n", + "qhull precision error: initial simplex is not convex. Distance=-4.2e-16\n", + "2246 has 0 neighbors !\n", + "4422 has 0 neighbors !\n", + "13393 has 0 neighbors !\n", + "--------Num of points that have zero neighbors 4\n", + "--------Num Neighbors before symmetrize 99581\n", + "--------Num Neighbors after symmetrize 108440\n", + "Total volume=6049.231566\n", + "Total FluxArea =39.83851721\n", + "Total FluxAreaXM =0\n", + "Total FluxAreaXP =0\n", + "Total FluxAreaYM =24.25749724\n", + "Total FluxAreaYP =15.58101996\n", + "Total FluxAreaZM =0\n", + "Total FluxAreaZP =0\n", + "mesh initialized\n", + "preprocessing finished\n", + "pdeCount=4, odeCount=0\n", + "No log-file found at constructed path `/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_rbx85k94/SimID_878385397_0_.log`.simulation [SimID_878385397_0_] started\n", + "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0000.sim\n", + "**This is a little endian machine.**\n", + "[[[data:0]]]\n", + "numVolRegions=4\n", + "Region 0: size=321351, offset=0\n", + "Region 1: size=36741, offset=321351\n", + "Region 2: size=9143, offset=358092\n", + "Region 3: size=1, offset=367235\n", + "# of active points = 367236\n", + "Constant diffusion/advection in region cytosol1\n", + "Constant diffusion/advection in region Nucleus2\n", + "Constant diffusion/advection in region cytosol3\n", + "numUnknowns = 119369\n", + "\n", + "****** using Sundials CVode with PREC_LEFT, relTol=1e-07, absTol=1e-09, maxStep=0.1\n", + "\n", + "----------------------------------\n", + "sundials pde solver is starting from time 0\n", + "----------------------------------\n", + "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0001.sim\n", + "[[[data:0.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0002.sim\n", + "[[[data:0.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0003.sim\n", + "[[[data:0.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0004.sim\n", + "[[[data:0.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0005.sim\n", + "[[[data:0.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0006.sim\n", + "[[[data:0.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0007.sim\n", + "[[[data:0.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0008.sim\n", + "[[[data:0.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0009.sim\n", + "[[[data:0.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0010.sim\n", + "[[[data:1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0011.sim\n", + "[[[data:1.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0012.sim\n", + "[[[data:1.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0013.sim\n", + "[[[data:1.3]]]SimTool.start1() sending JOB_PROGRESS to SimulationMessaging: percentile=0.13, time=1.3\n", + "[[[progress:13%]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0014.sim\n", + "[[[data:1.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0015.sim\n", + "[[[data:1.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0016.sim\n", + "[[[data:1.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0017.sim\n", + "[[[data:1.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0018.sim\n", + "[[[data:1.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0019.sim\n", + "[[[data:1.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0020.sim\n", + "[[[data:2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0021.sim\n", + "[[[data:2.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0022.sim\n", + "[[[data:2.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0023.sim\n", + "[[[data:2.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0024.sim\n", + "[[[data:2.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0025.sim\n", + "[[[data:2.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0026.sim\n", + "[[[data:2.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0027.sim\n", + "[[[data:2.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0028.sim\n", + "[[[data:2.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0029.sim\n", + "[[[data:2.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0030.sim\n", + "[[[data:3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0031.sim\n", + "[[[data:3.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0032.sim\n", + "[[[data:3.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0033.sim\n", + "[[[data:3.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0034.sim\n", + "[[[data:3.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0035.sim\n", + "[[[data:3.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0036.sim\n", + "[[[data:3.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0037.sim\n", + "[[[data:3.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0038.sim\n", + "[[[data:3.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0039.sim\n", + "[[[data:3.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0040.sim\n", + "[[[data:4]]]SimTool.start1() sending JOB_PROGRESS to SimulationMessaging: percentile=0.4, time=4\n", + "[[[progress:40%]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0041.sim\n", + "[[[data:4.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0042.sim\n", + "[[[data:4.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0043.sim\n", + "[[[data:4.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0044.sim\n", + "[[[data:4.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0045.sim\n", + "[[[data:4.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0046.sim\n", + "[[[data:4.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0047.sim\n", + "[[[data:4.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0048.sim\n", + "[[[data:4.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0049.sim\n", + "[[[data:4.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0050.sim\n", + "[[[data:5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0051.sim\n", + "[[[data:5.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0052.sim\n", + "[[[data:5.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0053.sim\n", + "[[[data:5.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0054.sim\n", + "[[[data:5.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0055.sim\n", + "[[[data:5.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0056.sim\n", + "[[[data:5.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0057.sim\n", + "[[[data:5.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0058.sim\n", + "[[[data:5.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0059.sim\n", + "[[[data:5.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0060.sim\n", + "[[[data:6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0061.sim\n", + "[[[data:6.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0062.sim\n", + "[[[data:6.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0063.sim\n", + "[[[data:6.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0064.sim\n", + "[[[data:6.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0065.sim\n", + "[[[data:6.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0066.sim\n", + "[[[data:6.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0067.sim\n", + "[[[data:6.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0068.sim\n", + "[[[data:6.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0069.sim\n", + "[[[data:6.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0070.sim\n", + "[[[data:7]]]SimTool.start1() sending JOB_PROGRESS to SimulationMessaging: percentile=0.7, time=7\n", + "[[[progress:70%]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0071.sim\n", + "[[[data:7.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0072.sim\n", + "[[[data:7.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0073.sim\n", + "[[[data:7.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0074.sim\n", + "[[[data:7.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0075.sim\n", + "[[[data:7.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0076.sim\n", + "[[[data:7.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0077.sim\n", + "[[[data:7.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0078.sim\n", + "[[[data:7.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0079.sim\n", + "[[[data:7.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0080.sim\n", + "[[[data:8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0081.sim\n", + "[[[data:8.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0082.sim\n", + "[[[data:8.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0083.sim\n", + "[[[data:8.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0084.sim\n", + "[[[data:8.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0085.sim\n", + "[[[data:8.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0086.sim\n", + "[[[data:8.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0087.sim\n", + "[[[data:8.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0088.sim\n", + "[[[data:8.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0089.sim\n", + "[[[data:8.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0090.sim\n", + "[[[data:9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0091.sim\n", + "[[[data:9.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0092.sim\n", + "[[[data:9.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0093.sim\n", + "[[[data:9.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0094.sim\n", + "[[[data:9.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0095.sim\n", + "[[[data:9.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0096.sim\n", + "[[[data:9.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0097.sim\n", + "[[[data:9.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0098.sim\n", + "[[[data:9.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0099.sim\n", + "[[[data:9.9]]]SimTool.start1() sending JOB_PROGRESS to SimulationMessaging: percentile=0.99, time=9.9\n", + "[[[progress:99%]]]\n", + "Final Statistics.. \n", + "\n", + "lenrw = 1193779 leniw = 50\n", + "lenrwLS = 1193736 leniwLS = 10\n", + "nst = 179\n", + "nfe = 198 nfeLS = 257\n", + "nni = 194 nli = 257\n", + "nsetups = 52 netf = 1\n", + "npe = 4 nps = 430\n", + "ncfn = 0 ncfl = 1\n", + "last step = 0.100000\n", + "\n", + "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0100.sim\n", + "[[[data:10]]][[[progress:100%]]]" + ] + } + ], + "source": [ + "import pyvcell.vcml as vc\n", + "\n", + "biomodel = vc.load_vcml_url(\n", + " \"https://raw.githubusercontent.com/virtualcell/pyvcell/refs/heads/main/\"\n", + " \"examples/models/Tutorial_MultiApp_PDE.vcml\"\n", + ")\n", + "print(biomodel)\n", + "\n", + "result = vc.simulate(biomodel, \"Simulation4\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Concentration time series\n", + "\n", + "Plot mean concentrations of all species over time." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:39.001907Z", + "iopub.status.busy": "2026-03-06T02:42:39.001510Z", + "iopub.status.idle": "2026-03-06T02:42:39.122343Z", + "shell.execute_reply": "2026-03-06T02:42:39.122049Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jimschaff/Documents/workspace/pyvcell/pyvcell/sim_results/plotter.py:71: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " return plt.show()\n" + ] + } + ], + "source": [ + "result.plotter.plot_concentrations(save_path=\"../images/viz-concentrations.png\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2D slices\n", + "\n", + "View a cross-section at a specific z-index." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:39.123850Z", + "iopub.status.busy": "2026-03-06T02:42:39.123738Z", + "iopub.status.idle": "2026-03-06T02:42:39.199621Z", + "shell.execute_reply": "2026-03-06T02:42:39.199202Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jimschaff/Documents/workspace/pyvcell/pyvcell/sim_results/plotter.py:96: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " plt.show()\n" + ] + } + ], + "source": [ + "result.plotter.plot_slice_2d(time_index=0, channel_name=\"Ran_cyt\", z_index=5, save_path=\"../images/viz-slice2d.png\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3D volume slices\n", + "\n", + "Render a 3D orthogonal-slice view." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:39.203821Z", + "iopub.status.busy": "2026-03-06T02:42:39.203491Z", + "iopub.status.idle": "2026-03-06T02:42:39.923361Z", + "shell.execute_reply": "2026-03-06T02:42:39.923064Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/jimschaff/Documents/workspace/pyvcell/pyvcell/sim_results/plotter.py:138: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " return plt.show()\n" + ] + } + ], + "source": [ + "result.plotter.plot_slice_3d(time_index=3, channel_id=\"Ran_cyt\", save_path=\"../images/viz-slice3d.png\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Access raw data" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:39.924671Z", + "iopub.status.busy": "2026-03-06T02:42:39.924564Z", + "iopub.status.idle": "2026-03-06T02:42:39.929185Z", + "shell.execute_reply": "2026-03-06T02:42:39.928942Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time points: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 5.99999999999999, 6.09999999999999, 6.19999999999999, 6.29999999999999, 6.39999999999999, 6.49999999999999, 6.59999999999999, 6.69999999999999, 6.79999999999999, 6.89999999999999, 6.99999999999999, 7.09999999999999, 7.19999999999999, 7.29999999999999, 7.39999999999999, 7.49999999999999, 7.59999999999999, 7.69999999999999, 7.79999999999999, 7.89999999999999, 7.99999999999999, 8.09999999999999, 8.19999999999999, 8.29999999999999, 8.39999999999999, 8.49999999999999, 8.59999999999999, 8.69999999999999, 8.79999999999998, 8.89999999999998, 8.99999999999998, 9.09999999999998, 9.19999999999998, 9.29999999999998, 9.39999999999998, 9.49999999999998, 9.59999999999998, 9.69999999999998, 9.79999999999998, 9.89999999999998, 9.99999999999998]\n", + "Channels: ['region_mask', 't', 'x', 'y', 'z', 'C_cyt', 'Ran_cyt', 'RanC_cyt', 'RanC_nuc', 'J_r0']\n", + "Data shape: (36, 101, 101), min=0.0000, max=0.0000\n" + ] + } + ], + "source": [ + "# Time points\n", + "print(\"Time points:\", result.time_points)\n", + "\n", + "# Channel labels\n", + "print(\"Channels:\", [c.label for c in result.channel_data])\n", + "\n", + "# Get spatial data as NumPy array\n", + "data = result.get_slice(\"Ran_cyt\", time_index=3)\n", + "print(f\"Data shape: {data.shape}, min={data.min():.4f}, max={data.max():.4f}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Clean up" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "execution": { + "iopub.execute_input": "2026-03-06T02:42:39.930441Z", + "iopub.status.busy": "2026-03-06T02:42:39.930358Z", + "iopub.status.idle": "2026-03-06T02:42:40.056924Z", + "shell.execute_reply": "2026-03-06T02:42:40.056466Z" + } + }, + "outputs": [], + "source": [ + "result.cleanup()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/guides/visualization.md b/docs/guides/visualization.md index e13b5fe..de61096 100644 --- a/docs/guides/visualization.md +++ b/docs/guides/visualization.md @@ -30,6 +30,8 @@ result.plotter.plot_concentrations() This generates a line plot with one curve per species, showing how mean concentration evolves over the simulation duration. +![Concentration time series](images/viz-concentrations.png) + ## Plot averages (post-processing) For post-processing variable statistics: @@ -56,6 +58,8 @@ Parameters: - `channel_name` — the species/variable name - `z_index` — the z-plane to slice through +![2D slice](images/viz-slice2d.png) + ## 3D volume slices Render a 3D orthogonal-slice view of the data: @@ -67,6 +71,8 @@ result.plotter.plot_slice_3d( ) ``` +![3D volume slice](images/viz-slice3d.png) + ## Animations ### 3D slice animation over time @@ -190,8 +196,8 @@ data = result.get_slice("s0", time_index=3) print(f"Data shape: {data.shape}, min={data.min():.2f}, max={data.max():.2f}") ``` -!!! tip "Interactive notebooks" - See the [widget notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/widget.ipynb) for Trame widget examples, and the [SBML workflow notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sbml_workflow.ipynb) for comprehensive plotting examples. +!!! tip "Interactive tutorial" + See the [Visualization tutorial](notebooks/visualization.ipynb) for a runnable notebook with visual output. Also see the [widget notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/widget.ipynb) for Trame widget examples, and the [SBML workflow notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sbml_workflow.ipynb) for comprehensive plotting examples. ## Next steps diff --git a/mkdocs.yml b/mkdocs.yml index da5af34..268b07c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -19,6 +19,9 @@ nav: - Parameter Exploration: guides/parameter-exploration.md - Field Data Workflows: guides/field-data.md - Visualization & Analysis: guides/visualization.md + - "Tutorial: Building a Model": guides/notebooks/building-a-model.ipynb + - "Tutorial: Complex Geometries": guides/notebooks/complex-geometries.ipynb + - "Tutorial: Visualization": guides/notebooks/visualization.ipynb - API Reference: - Models: reference/models.md - I/O Functions: reference/io.md @@ -26,6 +29,8 @@ nav: plugins: - search + - mkdocs-jupyter: + execute: false - mkdocstrings: handlers: python: diff --git a/tests/guides/__init__.py b/tests/guides/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/guides/test_notebooks.py b/tests/guides/test_notebooks.py new file mode 100644 index 0000000..fa48a6f --- /dev/null +++ b/tests/guides/test_notebooks.py @@ -0,0 +1,44 @@ +"""Execute each guide notebook and fail if any cell raises an exception.""" + +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + +import pytest + +NOTEBOOKS_DIR = Path(__file__).resolve().parents[2] / "docs" / "guides" / "notebooks" + +notebook_paths = sorted(NOTEBOOKS_DIR.glob("*.ipynb")) + + +@pytest.mark.parametrize( + "notebook", + notebook_paths, + ids=[p.stem for p in notebook_paths], +) +def test_notebook_executes(notebook: Path, tmp_path: Path) -> None: + """Run a notebook with nbconvert --execute and assert zero exit code.""" + output = tmp_path / notebook.name + result = subprocess.run( + [ + sys.executable, + "-m", + "jupyter", + "nbconvert", + "--to", + "notebook", + "--execute", + "--output", + str(output), + str(notebook), + ], + capture_output=True, + text=True, + timeout=300, + env={**__import__("os").environ, "MPLBACKEND": "Agg"}, + ) + assert result.returncode == 0, ( + f"Notebook {notebook.name} failed:\nSTDOUT:\n{result.stdout}\nSTDERR:\n{result.stderr}" + ) From 869587a8fd14f49a3a33f0f79c9a080822de4273 Mon Sep 17 00:00:00 2001 From: Jim Schaff Date: Thu, 5 Mar 2026 21:58:06 -0500 Subject: [PATCH 05/24] add docs-execute-notebooks make target and gitignore notebook workspace Co-Authored-By: Claude Opus 4.6 --- .gitignore | 2 + Makefile | 5 + poetry.lock | 1004 ++++++++++++++++++++++++++++-------------------- pyproject.toml | 1 + 4 files changed, 588 insertions(+), 424 deletions(-) diff --git a/.gitignore b/.gitignore index b5e9540..ca82aa5 100644 --- a/.gitignore +++ b/.gitignore @@ -183,3 +183,5 @@ examples/notebooks/workspace/ examples/scripts/workspace/ workspace + +docs/guides/notebooks/workspace/ diff --git a/Makefile b/Makefile index e4937b2..5fe3058 100644 --- a/Makefile +++ b/Makefile @@ -41,6 +41,11 @@ publish: ## publish a release to pypi. .PHONY: build-and-publish build-and-publish: build publish ## Build and publish. +.PHONY: docs-execute-notebooks +docs-execute-notebooks: ## Execute guide notebooks and save outputs + @echo "🚀 Executing guide notebooks" + @poetry run jupyter nbconvert --to notebook --execute --inplace docs/guides/notebooks/*.ipynb + .PHONY: docs-test docs-test: ## Test if documentation can be built without warnings or errors @poetry run mkdocs build -s diff --git a/poetry.lock b/poetry.lock index a62ce9d..4b55628 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.1.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -233,7 +233,7 @@ version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" optional = false python-versions = ">=3.6" -groups = ["dev"] +groups = ["dev", "docs"] markers = "platform_system == \"Darwin\"" files = [ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, @@ -334,7 +334,7 @@ version = "3.0.1" description = "Annotate AST trees with source code positions" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a"}, {file = "asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7"}, @@ -362,7 +362,8 @@ version = "25.4.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.9" -groups = ["main", "dev"] +python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, @@ -409,7 +410,7 @@ version = "4.14.3" description = "Screen-scraping library" optional = false python-versions = ">=3.7.0" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb"}, {file = "beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86"}, @@ -447,7 +448,8 @@ version = "6.3.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false python-versions = ">=3.10" -groups = ["dev"] +python-versions = ">=3.9" +groups = ["dev", "docs"] files = [ {file = "bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6"}, {file = "bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22"}, @@ -489,8 +491,8 @@ name = "cffi" version = "2.0.0" description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = ">=3.9" -groups = ["main", "dev"] +python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, @@ -577,7 +579,7 @@ files = [ {file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"}, {file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"}, ] -markers = {main = "platform_python_implementation != \"PyPy\""} +markers = {main = "platform_python_implementation != \"PyPy\"", docs = "implementation_name == \"pypy\""} [package.dependencies] pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} @@ -751,7 +753,7 @@ version = "0.2.3" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417"}, {file = "comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971"}, @@ -1065,7 +1067,7 @@ version = "1.8.20" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "debugpy-1.8.20-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:157e96ffb7f80b3ad36d808646198c90acb46fdcfd8bb1999838f0b6f2b59c64"}, {file = "debugpy-1.8.20-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:c1178ae571aff42e61801a38b007af504ec8e05fde1c5c12e5a7efef21009642"}, @@ -1105,7 +1107,7 @@ version = "5.2.1" description = "Decorators for Humans" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, @@ -1117,7 +1119,7 @@ version = "0.7.1" description = "XML bomb protection for Python stdlib modules" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, @@ -1184,7 +1186,7 @@ version = "2.2.1" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017"}, {file = "executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4"}, @@ -1212,7 +1214,7 @@ version = "2.21.2" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463"}, {file = "fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de"}, @@ -1711,8 +1713,8 @@ name = "ipykernel" version = "7.2.0" description = "IPython Kernel for Jupyter" optional = false -python-versions = ">=3.10" -groups = ["dev"] +python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "ipykernel-7.2.0-py3-none-any.whl", hash = "sha256:3bbd4420d2b3cc105cbdf3756bfc04500b1e52f090a90716851f3916c62e1661"}, {file = "ipykernel-7.2.0.tar.gz", hash = "sha256:18ed160b6dee2cbb16e5f3575858bc19d8f1fe6046a9a680c708494ce31d909e"}, @@ -1746,8 +1748,7 @@ version = "9.10.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.11" -groups = ["dev"] -markers = "python_version == \"3.11\"" +groups = ["dev", "docs"] files = [ {file = "ipython-9.10.0-py3-none-any.whl", hash = "sha256:c6ab68cc23bba8c7e18e9b932797014cc61ea7fd6f19de180ab9ba73e65ee58d"}, {file = "ipython-9.10.0.tar.gz", hash = "sha256:cd9e656be97618a0676d058134cd44e6dc7012c0e5cb36a9ce96a8c904adaf77"}, @@ -1813,7 +1814,7 @@ version = "1.1.1" description = "Defines a variety of Pygments lexers for highlighting IPython code." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c"}, {file = "ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81"}, @@ -1865,7 +1866,7 @@ version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, @@ -1926,8 +1927,8 @@ name = "jsonschema" version = "4.26.0" description = "An implementation of JSON Schema validation for Python" optional = false -python-versions = ">=3.10" -groups = ["dev"] +python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce"}, {file = "jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326"}, @@ -1958,7 +1959,7 @@ version = "2025.9.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.9" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe"}, {file = "jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d"}, @@ -1972,8 +1973,8 @@ name = "jupyter-client" version = "8.8.0" description = "Jupyter protocol implementation and client libraries" optional = false -python-versions = ">=3.10" -groups = ["dev"] +python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "jupyter_client-8.8.0-py3-none-any.whl", hash = "sha256:f93a5b99c5e23a507b773d3a1136bd6e16c67883ccdbd9a829b0bbdb98cd7d7a"}, {file = "jupyter_client-8.8.0.tar.gz", hash = "sha256:d556811419a4f2d96c869af34e854e3f059b7cc2d6d01a9cd9c85c267691be3e"}, @@ -1996,8 +1997,8 @@ name = "jupyter-core" version = "5.9.1" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false -python-versions = ">=3.10" -groups = ["dev"] +python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407"}, {file = "jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508"}, @@ -2150,7 +2151,7 @@ version = "0.3.0" description = "Pygments theme using JupyterLab CSS variables" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, @@ -2194,6 +2195,35 @@ files = [ {file = "jupyterlab_widgets-3.0.16.tar.gz", hash = "sha256:423da05071d55cf27a9e602216d35a3a65a3e41cdf9c5d3b643b814ce38c19e0"}, ] +[[package]] +name = "jupytext" +version = "1.19.1" +description = "Jupyter notebooks as Markdown documents, Julia, Python or R scripts" +optional = false +python-versions = ">=3.9" +groups = ["docs"] +files = [ + {file = "jupytext-1.19.1-py3-none-any.whl", hash = "sha256:d8975035155d034bdfde5c0c37891425314b7ea8d3a6c4b5d18c294348714cd9"}, + {file = "jupytext-1.19.1.tar.gz", hash = "sha256:82587c07e299173c70ed5e8ec7e75183edf1be289ed518bab49ad0d4e3d5f433"}, +] + +[package.dependencies] +markdown-it-py = ">=1.0" +mdit-py-plugins = "*" +nbformat = "*" +packaging = "*" +pyyaml = "*" + +[package.extras] +dev = ["autopep8", "black", "flake8", "gitpython", "ipykernel", "isort", "jupyter-fs[fs] (>=1.0)", "jupyter-server (!=2.11)", "marimo (>=0.17.6,<=0.19.4)", "nbconvert", "pre-commit", "pytest", "pytest-asyncio", "pytest-cov (>=2.6.1)", "pytest-randomly", "pytest-xdist", "sphinx", "sphinx-gallery (>=0.8)"] +docs = ["myst-parser", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"] +test = ["pytest", "pytest-asyncio", "pytest-randomly", "pytest-xdist"] +test-cov = ["black", "ipykernel", "jupyter-server (!=2.11)", "nbconvert", "pytest", "pytest-asyncio", "pytest-cov (>=2.6.1)", "pytest-randomly", "pytest-xdist"] +test-external = ["autopep8", "black", "flake8", "gitpython", "ipykernel", "isort", "jupyter-fs[fs] (>=1.0)", "jupyter-server (!=2.11)", "marimo (>=0.17.6,<=0.19.4)", "nbconvert", "pre-commit", "pytest", "pytest-asyncio", "pytest-randomly", "pytest-xdist", "sphinx", "sphinx-gallery (>=0.8)"] +test-functional = ["black", "pytest", "pytest-asyncio", "pytest-randomly", "pytest-xdist"] +test-integration = ["black", "ipykernel", "jupyter-server (!=2.11)", "nbconvert", "pytest", "pytest-asyncio", "pytest-randomly", "pytest-xdist"] +test-ui = ["bash-kernel"] + [[package]] name = "jwskate" version = "0.12.2" @@ -2474,135 +2504,144 @@ optional = false python-versions = ">=3.6" groups = ["main"] files = [ - {file = "lxml-5.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e7bc6df34d42322c5289e37e9971d6ed114e3776b45fa879f734bded9d1fea9c"}, - {file = "lxml-5.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6854f8bd8a1536f8a1d9a3655e6354faa6406621cf857dc27b681b69860645c7"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:696ea9e87442467819ac22394ca36cb3d01848dad1be6fac3fb612d3bd5a12cf"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ef80aeac414f33c24b3815ecd560cee272786c3adfa5f31316d8b349bfade28"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b9c2754cef6963f3408ab381ea55f47dabc6f78f4b8ebb0f0b25cf1ac1f7609"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7a62cc23d754bb449d63ff35334acc9f5c02e6dae830d78dab4dd12b78a524f4"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f82125bc7203c5ae8633a7d5d20bcfdff0ba33e436e4ab0abc026a53a8960b7"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:b67319b4aef1a6c56576ff544b67a2a6fbd7eaee485b241cabf53115e8908b8f"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:a8ef956fce64c8551221f395ba21d0724fed6b9b6242ca4f2f7beb4ce2f41997"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:0a01ce7d8479dce84fc03324e3b0c9c90b1ece9a9bb6a1b6c9025e7e4520e78c"}, - {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:91505d3ddebf268bb1588eb0f63821f738d20e1e7f05d3c647a5ca900288760b"}, - {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a3bcdde35d82ff385f4ede021df801b5c4a5bcdfb61ea87caabcebfc4945dc1b"}, - {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aea7c06667b987787c7d1f5e1dfcd70419b711cdb47d6b4bb4ad4b76777a0563"}, - {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a7fb111eef4d05909b82152721a59c1b14d0f365e2be4c742a473c5d7372f4f5"}, - {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:43d549b876ce64aa18b2328faff70f5877f8c6dede415f80a2f799d31644d776"}, - {file = "lxml-5.4.0-cp310-cp310-win32.whl", hash = "sha256:75133890e40d229d6c5837b0312abbe5bac1c342452cf0e12523477cd3aa21e7"}, - {file = "lxml-5.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:de5b4e1088523e2b6f730d0509a9a813355b7f5659d70eb4f319c76beea2e250"}, - {file = "lxml-5.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:98a3912194c079ef37e716ed228ae0dcb960992100461b704aea4e93af6b0bb9"}, - {file = "lxml-5.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ea0252b51d296a75f6118ed0d8696888e7403408ad42345d7dfd0d1e93309a7"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b92b69441d1bd39f4940f9eadfa417a25862242ca2c396b406f9272ef09cdcaa"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20e16c08254b9b6466526bc1828d9370ee6c0d60a4b64836bc3ac2917d1e16df"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7605c1c32c3d6e8c990dd28a0970a3cbbf1429d5b92279e37fda05fb0c92190e"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecf4c4b83f1ab3d5a7ace10bafcb6f11df6156857a3c418244cef41ca9fa3e44"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cef4feae82709eed352cd7e97ae062ef6ae9c7b5dbe3663f104cd2c0e8d94ba"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:df53330a3bff250f10472ce96a9af28628ff1f4efc51ccba351a8820bca2a8ba"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:aefe1a7cb852fa61150fcb21a8c8fcea7b58c4cb11fbe59c97a0a4b31cae3c8c"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ef5a7178fcc73b7d8c07229e89f8eb45b2908a9238eb90dcfc46571ccf0383b8"}, - {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d2ed1b3cb9ff1c10e6e8b00941bb2e5bb568b307bfc6b17dffbbe8be5eecba86"}, - {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:72ac9762a9f8ce74c9eed4a4e74306f2f18613a6b71fa065495a67ac227b3056"}, - {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f5cb182f6396706dc6cc1896dd02b1c889d644c081b0cdec38747573db88a7d7"}, - {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:3a3178b4873df8ef9457a4875703488eb1622632a9cee6d76464b60e90adbfcd"}, - {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e094ec83694b59d263802ed03a8384594fcce477ce484b0cbcd0008a211ca751"}, - {file = "lxml-5.4.0-cp311-cp311-win32.whl", hash = "sha256:4329422de653cdb2b72afa39b0aa04252fca9071550044904b2e7036d9d97fe4"}, - {file = "lxml-5.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd3be6481ef54b8cfd0e1e953323b7aa9d9789b94842d0e5b142ef4bb7999539"}, - {file = "lxml-5.4.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b5aff6f3e818e6bdbbb38e5967520f174b18f539c2b9de867b1e7fde6f8d95a4"}, - {file = "lxml-5.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942a5d73f739ad7c452bf739a62a0f83e2578afd6b8e5406308731f4ce78b16d"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:460508a4b07364d6abf53acaa0a90b6d370fafde5693ef37602566613a9b0779"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:529024ab3a505fed78fe3cc5ddc079464e709f6c892733e3f5842007cec8ac6e"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ca56ebc2c474e8f3d5761debfd9283b8b18c76c4fc0967b74aeafba1f5647f9"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a81e1196f0a5b4167a8dafe3a66aa67c4addac1b22dc47947abd5d5c7a3f24b5"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00b8686694423ddae324cf614e1b9659c2edb754de617703c3d29ff568448df5"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:c5681160758d3f6ac5b4fea370495c48aac0989d6a0f01bb9a72ad8ef5ab75c4"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:2dc191e60425ad70e75a68c9fd90ab284df64d9cd410ba8d2b641c0c45bc006e"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:67f779374c6b9753ae0a0195a892a1c234ce8416e4448fe1e9f34746482070a7"}, - {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:79d5bfa9c1b455336f52343130b2067164040604e41f6dc4d8313867ed540079"}, - {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3d3c30ba1c9b48c68489dc1829a6eede9873f52edca1dda900066542528d6b20"}, - {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1af80c6316ae68aded77e91cd9d80648f7dd40406cef73df841aa3c36f6907c8"}, - {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4d885698f5019abe0de3d352caf9466d5de2baded00a06ef3f1216c1a58ae78f"}, - {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea53d51859b6c64e7c51d522c03cc2c48b9b5d6172126854cc7f01aa11f52bc"}, - {file = "lxml-5.4.0-cp312-cp312-win32.whl", hash = "sha256:d90b729fd2732df28130c064aac9bb8aff14ba20baa4aee7bd0795ff1187545f"}, - {file = "lxml-5.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1dc4ca99e89c335a7ed47d38964abcb36c5910790f9bd106f2a8fa2ee0b909d2"}, - {file = "lxml-5.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:773e27b62920199c6197130632c18fb7ead3257fce1ffb7d286912e56ddb79e0"}, - {file = "lxml-5.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ce9c671845de9699904b1e9df95acfe8dfc183f2310f163cdaa91a3535af95de"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9454b8d8200ec99a224df8854786262b1bd6461f4280064c807303c642c05e76"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cccd007d5c95279e529c146d095f1d39ac05139de26c098166c4beb9374b0f4d"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fce1294a0497edb034cb416ad3e77ecc89b313cff7adbee5334e4dc0d11f422"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:24974f774f3a78ac12b95e3a20ef0931795ff04dbb16db81a90c37f589819551"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:497cab4d8254c2a90bf988f162ace2ddbfdd806fce3bda3f581b9d24c852e03c"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:e794f698ae4c5084414efea0f5cc9f4ac562ec02d66e1484ff822ef97c2cadff"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:2c62891b1ea3094bb12097822b3d44b93fc6c325f2043c4d2736a8ff09e65f60"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:142accb3e4d1edae4b392bd165a9abdee8a3c432a2cca193df995bc3886249c8"}, - {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1a42b3a19346e5601d1b8296ff6ef3d76038058f311902edd574461e9c036982"}, - {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4291d3c409a17febf817259cb37bc62cb7eb398bcc95c1356947e2871911ae61"}, - {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4f5322cf38fe0e21c2d73901abf68e6329dc02a4994e483adbcf92b568a09a54"}, - {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0be91891bdb06ebe65122aa6bf3fc94489960cf7e03033c6f83a90863b23c58b"}, - {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:15a665ad90054a3d4f397bc40f73948d48e36e4c09f9bcffc7d90c87410e478a"}, - {file = "lxml-5.4.0-cp313-cp313-win32.whl", hash = "sha256:d5663bc1b471c79f5c833cffbc9b87d7bf13f87e055a5c86c363ccd2348d7e82"}, - {file = "lxml-5.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:bcb7a1096b4b6b24ce1ac24d4942ad98f983cd3810f9711bcd0293f43a9d8b9f"}, - {file = "lxml-5.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7be701c24e7f843e6788353c055d806e8bd8466b52907bafe5d13ec6a6dbaecd"}, - {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb54f7c6bafaa808f27166569b1511fc42701a7713858dddc08afdde9746849e"}, - {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97dac543661e84a284502e0cf8a67b5c711b0ad5fb661d1bd505c02f8cf716d7"}, - {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:c70e93fba207106cb16bf852e421c37bbded92acd5964390aad07cb50d60f5cf"}, - {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9c886b481aefdf818ad44846145f6eaf373a20d200b5ce1a5c8e1bc2d8745410"}, - {file = "lxml-5.4.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:fa0e294046de09acd6146be0ed6727d1f42ded4ce3ea1e9a19c11b6774eea27c"}, - {file = "lxml-5.4.0-cp36-cp36m-win32.whl", hash = "sha256:61c7bbf432f09ee44b1ccaa24896d21075e533cd01477966a5ff5a71d88b2f56"}, - {file = "lxml-5.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7ce1a171ec325192c6a636b64c94418e71a1964f56d002cc28122fceff0b6121"}, - {file = "lxml-5.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:795f61bcaf8770e1b37eec24edf9771b307df3af74d1d6f27d812e15a9ff3872"}, - {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29f451a4b614a7b5b6c2e043d7b64a15bd8304d7e767055e8ab68387a8cacf4e"}, - {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4aa412a82e460571fad592d0f93ce9935a20090029ba08eca05c614f99b0cc92"}, - {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:c5d32f5284012deaccd37da1e2cd42f081feaa76981f0eaa474351b68df813c5"}, - {file = "lxml-5.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:31e63621e073e04697c1b2d23fcb89991790eef370ec37ce4d5d469f40924ed6"}, - {file = "lxml-5.4.0-cp37-cp37m-win32.whl", hash = "sha256:be2ba4c3c5b7900246a8f866580700ef0d538f2ca32535e991027bdaba944063"}, - {file = "lxml-5.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:09846782b1ef650b321484ad429217f5154da4d6e786636c38e434fa32e94e49"}, - {file = "lxml-5.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eaf24066ad0b30917186420d51e2e3edf4b0e2ea68d8cd885b14dc8afdcf6556"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b31a3a77501d86d8ade128abb01082724c0dfd9524f542f2f07d693c9f1175f"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e108352e203c7afd0eb91d782582f00a0b16a948d204d4dec8565024fafeea5"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a11a96c3b3f7551c8a8109aa65e8594e551d5a84c76bf950da33d0fb6dfafab7"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:ca755eebf0d9e62d6cb013f1261e510317a41bf4650f22963474a663fdfe02aa"}, - {file = "lxml-5.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4cd915c0fb1bed47b5e6d6edd424ac25856252f09120e3e8ba5154b6b921860e"}, - {file = "lxml-5.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:226046e386556a45ebc787871d6d2467b32c37ce76c2680f5c608e25823ffc84"}, - {file = "lxml-5.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b108134b9667bcd71236c5a02aad5ddd073e372fb5d48ea74853e009fe38acb6"}, - {file = "lxml-5.4.0-cp38-cp38-win32.whl", hash = "sha256:1320091caa89805df7dcb9e908add28166113dcd062590668514dbd510798c88"}, - {file = "lxml-5.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:073eb6dcdf1f587d9b88c8c93528b57eccda40209cf9be549d469b942b41d70b"}, - {file = "lxml-5.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bda3ea44c39eb74e2488297bb39d47186ed01342f0022c8ff407c250ac3f498e"}, - {file = "lxml-5.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9ceaf423b50ecfc23ca00b7f50b64baba85fb3fb91c53e2c9d00bc86150c7e40"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:664cdc733bc87449fe781dbb1f309090966c11cc0c0cd7b84af956a02a8a4729"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67ed8a40665b84d161bae3181aa2763beea3747f748bca5874b4af4d75998f87"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b4a3bd174cc9cdaa1afbc4620c049038b441d6ba07629d89a83b408e54c35cd"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:b0989737a3ba6cf2a16efb857fb0dfa20bc5c542737fddb6d893fde48be45433"}, - {file = "lxml-5.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:dc0af80267edc68adf85f2a5d9be1cdf062f973db6790c1d065e45025fa26140"}, - {file = "lxml-5.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:639978bccb04c42677db43c79bdaa23785dc7f9b83bfd87570da8207872f1ce5"}, - {file = "lxml-5.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a99d86351f9c15e4a901fc56404b485b1462039db59288b203f8c629260a142"}, - {file = "lxml-5.4.0-cp39-cp39-win32.whl", hash = "sha256:3e6d5557989cdc3ebb5302bbdc42b439733a841891762ded9514e74f60319ad6"}, - {file = "lxml-5.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:a8c9b7f16b63e65bbba889acb436a1034a82d34fa09752d754f88d708eca80e1"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1b717b00a71b901b4667226bba282dd462c42ccf618ade12f9ba3674e1fabc55"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27a9ded0f0b52098ff89dd4c418325b987feed2ea5cc86e8860b0f844285d740"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7ce10634113651d6f383aa712a194179dcd496bd8c41e191cec2099fa09de5"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53370c26500d22b45182f98847243efb518d268374a9570409d2e2276232fd37"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c6364038c519dffdbe07e3cf42e6a7f8b90c275d4d1617a69bb59734c1a2d571"}, - {file = "lxml-5.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b12cb6527599808ada9eb2cd6e0e7d3d8f13fe7bbb01c6311255a15ded4c7ab4"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5f11a1526ebd0dee85e7b1e39e39a0cc0d9d03fb527f56d8457f6df48a10dc0c"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48b4afaf38bf79109bb060d9016fad014a9a48fb244e11b94f74ae366a64d252"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de6f6bb8a7840c7bf216fb83eec4e2f79f7325eca8858167b68708b929ab2172"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5cca36a194a4eb4e2ed6be36923d3cffd03dcdf477515dea687185506583d4c9"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b7c86884ad23d61b025989d99bfdd92a7351de956e01c61307cb87035960bcb1"}, - {file = "lxml-5.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:53d9469ab5460402c19553b56c3648746774ecd0681b1b27ea74d5d8a3ef5590"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:56dbdbab0551532bb26c19c914848d7251d73edb507c3079d6805fa8bba5b706"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14479c2ad1cb08b62bb941ba8e0e05938524ee3c3114644df905d2331c76cd57"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32697d2ea994e0db19c1df9e40275ffe84973e4232b5c274f47e7c1ec9763cdd"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:24f6df5f24fc3385f622c0c9d63fe34604893bc1a5bdbb2dbf5870f85f9a404a"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:151d6c40bc9db11e960619d2bf2ec5829f0aaffb10b41dcf6ad2ce0f3c0b2325"}, - {file = "lxml-5.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4025bf2884ac4370a3243c5aa8d66d3cb9e15d3ddd0af2d796eccc5f0244390e"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9459e6892f59ecea2e2584ee1058f5d8f629446eab52ba2305ae13a32a059530"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47fb24cc0f052f0576ea382872b3fc7e1f7e3028e53299ea751839418ade92a6"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50441c9de951a153c698b9b99992e806b71c1f36d14b154592580ff4a9d0d877"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ab339536aa798b1e17750733663d272038bf28069761d5be57cb4a9b0137b4f8"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9776af1aad5a4b4a1317242ee2bea51da54b2a7b7b48674be736d463c999f37d"}, - {file = "lxml-5.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:63e7968ff83da2eb6fdda967483a7a023aa497d85ad8f05c3ad9b1f2e8c84987"}, - {file = "lxml-5.4.0.tar.gz", hash = "sha256:d12832e1dbea4be280b22fd0ea7c9b87f0d8fc51ba06e92dc62d52f804f78ebd"}, + {file = "lxml-5.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c4b84d6b580a9625dfa47269bf1fd7fbba7ad69e08b16366a46acb005959c395"}, + {file = "lxml-5.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b4c08ecb26e4270a62f81f81899dfff91623d349e433b126931c9c4577169666"}, + {file = "lxml-5.3.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef926e9f11e307b5a7c97b17c5c609a93fb59ffa8337afac8f89e6fe54eb0b37"}, + {file = "lxml-5.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:017ceeabe739100379fe6ed38b033cd244ce2da4e7f6f07903421f57da3a19a2"}, + {file = "lxml-5.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dae97d9435dc90590f119d056d233c33006b2fd235dd990d5564992261ee7ae8"}, + {file = "lxml-5.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:910f39425c6798ce63c93976ae5af5fff6949e2cb446acbd44d6d892103eaea8"}, + {file = "lxml-5.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9780de781a0d62a7c3680d07963db3048b919fc9e3726d9cfd97296a65ffce1"}, + {file = "lxml-5.3.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:1a06b0c6ba2e3ca45a009a78a4eb4d6b63831830c0a83dcdc495c13b9ca97d3e"}, + {file = "lxml-5.3.2-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:4c62d0a34d1110769a1bbaf77871a4b711a6f59c4846064ccb78bc9735978644"}, + {file = "lxml-5.3.2-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:8f961a4e82f411b14538fe5efc3e6b953e17f5e809c463f0756a0d0e8039b700"}, + {file = "lxml-5.3.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3dfc78f5f9251b6b8ad37c47d4d0bfe63ceb073a916e5b50a3bf5fd67a703335"}, + {file = "lxml-5.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:10e690bc03214d3537270c88e492b8612d5e41b884f232df2b069b25b09e6711"}, + {file = "lxml-5.3.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aa837e6ee9534de8d63bc4c1249e83882a7ac22bd24523f83fad68e6ffdf41ae"}, + {file = "lxml-5.3.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:da4c9223319400b97a2acdfb10926b807e51b69eb7eb80aad4942c0516934858"}, + {file = "lxml-5.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dc0e9bdb3aa4d1de703a437576007d366b54f52c9897cae1a3716bb44fc1fc85"}, + {file = "lxml-5.3.2-cp310-cp310-win32.win32.whl", hash = "sha256:dd755a0a78dd0b2c43f972e7b51a43be518ebc130c9f1a7c4480cf08b4385486"}, + {file = "lxml-5.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:d64ea1686474074b38da13ae218d9fde0d1dc6525266976808f41ac98d9d7980"}, + {file = "lxml-5.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9d61a7d0d208ace43986a92b111e035881c4ed45b1f5b7a270070acae8b0bfb4"}, + {file = "lxml-5.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:856dfd7eda0b75c29ac80a31a6411ca12209183e866c33faf46e77ace3ce8a79"}, + {file = "lxml-5.3.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a01679e4aad0727bedd4c9407d4d65978e920f0200107ceeffd4b019bd48529"}, + {file = "lxml-5.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6b37b4c3acb8472d191816d4582379f64d81cecbdce1a668601745c963ca5cc"}, + {file = "lxml-5.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3df5a54e7b7c31755383f126d3a84e12a4e0333db4679462ef1165d702517477"}, + {file = "lxml-5.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c09a40f28dcded933dc16217d6a092be0cc49ae25811d3b8e937c8060647c353"}, + {file = "lxml-5.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1ef20f1851ccfbe6c5a04c67ec1ce49da16ba993fdbabdce87a92926e505412"}, + {file = "lxml-5.3.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f79a63289dbaba964eb29ed3c103b7911f2dce28c36fe87c36a114e6bd21d7ad"}, + {file = "lxml-5.3.2-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:75a72697d95f27ae00e75086aed629f117e816387b74a2f2da6ef382b460b710"}, + {file = "lxml-5.3.2-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:b9b00c9ee1cc3a76f1f16e94a23c344e0b6e5c10bec7f94cf2d820ce303b8c01"}, + {file = "lxml-5.3.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:77cbcab50cbe8c857c6ba5f37f9a3976499c60eada1bf6d38f88311373d7b4bc"}, + {file = "lxml-5.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:29424058f072a24622a0a15357bca63d796954758248a72da6d512f9bd9a4493"}, + {file = "lxml-5.3.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7d82737a8afe69a7c80ef31d7626075cc7d6e2267f16bf68af2c764b45ed68ab"}, + {file = "lxml-5.3.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:95473d1d50a5d9fcdb9321fdc0ca6e1edc164dce4c7da13616247d27f3d21e31"}, + {file = "lxml-5.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2162068f6da83613f8b2a32ca105e37a564afd0d7009b0b25834d47693ce3538"}, + {file = "lxml-5.3.2-cp311-cp311-win32.whl", hash = "sha256:f8695752cf5d639b4e981afe6c99e060621362c416058effd5c704bede9cb5d1"}, + {file = "lxml-5.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:d1a94cbb4ee64af3ab386c2d63d6d9e9cf2e256ac0fd30f33ef0a3c88f575174"}, + {file = "lxml-5.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:16b3897691ec0316a1aa3c6585f61c8b7978475587c5b16fc1d2c28d283dc1b0"}, + {file = "lxml-5.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a8d4b34a0eeaf6e73169dcfd653c8d47f25f09d806c010daf074fba2db5e2d3f"}, + {file = "lxml-5.3.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9cd7a959396da425022e1e4214895b5cfe7de7035a043bcc2d11303792b67554"}, + {file = "lxml-5.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cac5eaeec3549c5df7f8f97a5a6db6963b91639389cdd735d5a806370847732b"}, + {file = "lxml-5.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29b5f7d77334877c2146e7bb8b94e4df980325fab0a8af4d524e5d43cd6f789d"}, + {file = "lxml-5.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13f3495cfec24e3d63fffd342cc8141355d1d26ee766ad388775f5c8c5ec3932"}, + {file = "lxml-5.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e70ad4c9658beeff99856926fd3ee5fde8b519b92c693f856007177c36eb2e30"}, + {file = "lxml-5.3.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:507085365783abd7879fa0a6fa55eddf4bdd06591b17a2418403bb3aff8a267d"}, + {file = "lxml-5.3.2-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:5bb304f67cbf5dfa07edad904732782cbf693286b9cd85af27059c5779131050"}, + {file = "lxml-5.3.2-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:3d84f5c093645c21c29a4e972b84cb7cf682f707f8706484a5a0c7ff13d7a988"}, + {file = "lxml-5.3.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:bdc13911db524bd63f37b0103af014b7161427ada41f1b0b3c9b5b5a9c1ca927"}, + {file = "lxml-5.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1ec944539543f66ebc060ae180d47e86aca0188bda9cbfadff47d86b0dc057dc"}, + {file = "lxml-5.3.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:59d437cc8a7f838282df5a199cf26f97ef08f1c0fbec6e84bd6f5cc2b7913f6e"}, + {file = "lxml-5.3.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e275961adbd32e15672e14e0cc976a982075208224ce06d149c92cb43db5b93"}, + {file = "lxml-5.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:038aeb6937aa404480c2966b7f26f1440a14005cb0702078c173c028eca72c31"}, + {file = "lxml-5.3.2-cp312-cp312-win32.whl", hash = "sha256:3c2c8d0fa3277147bff180e3590be67597e17d365ce94beb2efa3138a2131f71"}, + {file = "lxml-5.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:77809fcd97dfda3f399102db1794f7280737b69830cd5c961ac87b3c5c05662d"}, + {file = "lxml-5.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:77626571fb5270ceb36134765f25b665b896243529eefe840974269b083e090d"}, + {file = "lxml-5.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:78a533375dc7aa16d0da44af3cf6e96035e484c8c6b2b2445541a5d4d3d289ee"}, + {file = "lxml-5.3.2-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6f62b2404b3f3f0744bbcabb0381c5fe186fa2a9a67ecca3603480f4846c585"}, + {file = "lxml-5.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ea918da00091194526d40c30c4996971f09dacab032607581f8d8872db34fbf"}, + {file = "lxml-5.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c35326f94702a7264aa0eea826a79547d3396a41ae87a70511b9f6e9667ad31c"}, + {file = "lxml-5.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3bef90af21d31c4544bc917f51e04f94ae11b43156356aff243cdd84802cbf2"}, + {file = "lxml-5.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52fa7ba11a495b7cbce51573c73f638f1dcff7b3ee23697467dc063f75352a69"}, + {file = "lxml-5.3.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:ad131e2c4d2c3803e736bb69063382334e03648de2a6b8f56a878d700d4b557d"}, + {file = "lxml-5.3.2-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:00a4463ca409ceacd20490a893a7e08deec7870840eff33dc3093067b559ce3e"}, + {file = "lxml-5.3.2-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:87e8d78205331cace2b73ac8249294c24ae3cba98220687b5b8ec5971a2267f1"}, + {file = "lxml-5.3.2-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bf6389133bb255e530a4f2f553f41c4dd795b1fbb6f797aea1eff308f1e11606"}, + {file = "lxml-5.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b3709fc752b42fb6b6ffa2ba0a5b9871646d97d011d8f08f4d5b3ee61c7f3b2b"}, + {file = "lxml-5.3.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:abc795703d0de5d83943a4badd770fbe3d1ca16ee4ff3783d7caffc252f309ae"}, + {file = "lxml-5.3.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:98050830bb6510159f65d9ad1b8aca27f07c01bb3884ba95f17319ccedc4bcf9"}, + {file = "lxml-5.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6ba465a91acc419c5682f8b06bcc84a424a7aa5c91c220241c6fd31de2a72bc6"}, + {file = "lxml-5.3.2-cp313-cp313-win32.whl", hash = "sha256:56a1d56d60ea1ec940f949d7a309e0bff05243f9bd337f585721605670abb1c1"}, + {file = "lxml-5.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:1a580dc232c33d2ad87d02c8a3069d47abbcdce974b9c9cc82a79ff603065dbe"}, + {file = "lxml-5.3.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1a59f7fe888d0ec1916d0ad69364c5400cfa2f885ae0576d909f342e94d26bc9"}, + {file = "lxml-5.3.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d67b50abc2df68502a26ed2ccea60c1a7054c289fb7fc31c12e5e55e4eec66bd"}, + {file = "lxml-5.3.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cb08d2cb047c98d6fbbb2e77d6edd132ad6e3fa5aa826ffa9ea0c9b1bc74a84"}, + {file = "lxml-5.3.2-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:495ddb7e10911fb4d673d8aa8edd98d1eadafb3b56e8c1b5f427fd33cadc455b"}, + {file = "lxml-5.3.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:884d9308ac7d581b705a3371185282e1b8eebefd68ccf288e00a2d47f077cc51"}, + {file = "lxml-5.3.2-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:37f3d7cf7f2dd2520df6cc8a13df4c3e3f913c8e0a1f9a875e44f9e5f98d7fee"}, + {file = "lxml-5.3.2-cp36-cp36m-win32.whl", hash = "sha256:e885a1bf98a76dff0a0648850c3083b99d9358ef91ba8fa307c681e8e0732503"}, + {file = "lxml-5.3.2-cp36-cp36m-win_amd64.whl", hash = "sha256:b45f505d0d85f4cdd440cd7500689b8e95110371eaa09da0c0b1103e9a05030f"}, + {file = "lxml-5.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b53cd668facd60b4f0dfcf092e01bbfefd88271b5b4e7b08eca3184dd006cb30"}, + {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5dea998c891f082fe204dec6565dbc2f9304478f2fc97bd4d7a940fec16c873"}, + {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d46bc3e58b01e4f38d75e0d7f745a46875b7a282df145aca9d1479c65ff11561"}, + {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:661feadde89159fd5f7d7639a81ccae36eec46974c4a4d5ccce533e2488949c8"}, + {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:43af2a69af2cacc2039024da08a90174e85f3af53483e6b2e3485ced1bf37151"}, + {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:1539f962d82436f3d386eb9f29b2a29bb42b80199c74a695dff51b367a61ec0a"}, + {file = "lxml-5.3.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:6673920bf976421b5fac4f29b937702eef4555ee42329546a5fc68bae6178a48"}, + {file = "lxml-5.3.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:9fa722a9cd8845594593cce399a49aa6bfc13b6c83a7ee05e2ab346d9253d52f"}, + {file = "lxml-5.3.2-cp37-cp37m-win32.whl", hash = "sha256:2eadd4efa487f4710755415aed3d6ae9ac8b4327ea45226ffccb239766c8c610"}, + {file = "lxml-5.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:83d8707b1b08cd02c04d3056230ec3b771b18c566ec35e723e60cdf037064e08"}, + {file = "lxml-5.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc6e8678bfa5ccba370103976ccfcf776c85c83da9220ead41ea6fd15d2277b4"}, + {file = "lxml-5.3.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bed509662f67f719119ad56006cd4a38efa68cfa74383060612044915e5f7ad"}, + {file = "lxml-5.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e3925975fadd6fd72a6d80541a6ec75dfbad54044a03aa37282dafcb80fbdfa"}, + {file = "lxml-5.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83c0462dedc5213ac586164c6d7227da9d4d578cf45dd7fbab2ac49b63a008eb"}, + {file = "lxml-5.3.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:53e3f9ca72858834688afa17278649d62aa768a4b2018344be00c399c4d29e95"}, + {file = "lxml-5.3.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:32ba634ef3f1b20f781019a91d78599224dc45745dd572f951adbf1c0c9b0d75"}, + {file = "lxml-5.3.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:1b16504c53f41da5fcf04868a80ac40a39d3eec5329caf761114caec6e844ad1"}, + {file = "lxml-5.3.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:1f9682786138549da44ca4c49b20e7144d063b75f2b2ba611f4cff9b83db1062"}, + {file = "lxml-5.3.2-cp38-cp38-win32.whl", hash = "sha256:d8f74ef8aacdf6ee5c07566a597634bb8535f6b53dc89790db43412498cf6026"}, + {file = "lxml-5.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:49f1cee0fa27e1ee02589c696a9bdf4027e7427f184fa98e6bef0c6613f6f0fa"}, + {file = "lxml-5.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:741c126bcf9aa939e950e64e5e0a89c8e01eda7a5f5ffdfc67073f2ed849caea"}, + {file = "lxml-5.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ab6e9e6aca1fd7d725ffa132286e70dee5b9a4561c5ed291e836440b82888f89"}, + {file = "lxml-5.3.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58e8c9b9ed3c15c2d96943c14efc324b69be6352fe5585733a7db2bf94d97841"}, + {file = "lxml-5.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7811828ddfb8c23f4f1fbf35e7a7b2edec2f2e4c793dee7c52014f28c4b35238"}, + {file = "lxml-5.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:72968623efb1e12e950cbdcd1d0f28eb14c8535bf4be153f1bfffa818b1cf189"}, + {file = "lxml-5.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ebfceaa2ea588b54efb6160e3520983663d45aed8a3895bb2031ada080fb5f04"}, + {file = "lxml-5.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d685d458505b2bfd2e28c812749fe9194a2b0ce285a83537e4309a187ffa270b"}, + {file = "lxml-5.3.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:334e0e414dab1f5366ead8ca34ec3148415f236d5660e175f1d640b11d645847"}, + {file = "lxml-5.3.2-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02e56f7de72fa82561eae69628a7d6febd7891d72248c7ff7d3e7814d4031017"}, + {file = "lxml-5.3.2-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:638d06b4e1d34d1a074fa87deed5fb55c18485fa0dab97abc5604aad84c12031"}, + {file = "lxml-5.3.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:354dab7206d22d7a796fa27c4c5bffddd2393da2ad61835355a4759d435beb47"}, + {file = "lxml-5.3.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d9d9f82ff2c3bf9bb777cb355149f7f3a98ec58f16b7428369dc27ea89556a4c"}, + {file = "lxml-5.3.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:95ad58340e3b7d2b828efc370d1791856613c5cb62ae267158d96e47b3c978c9"}, + {file = "lxml-5.3.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:30fe05f4b7f6e9eb32862745512e7cbd021070ad0f289a7f48d14a0d3fc1d8a9"}, + {file = "lxml-5.3.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:34c688fef86f73dbca0798e0a61bada114677006afa524a8ce97d9e5fabf42e6"}, + {file = "lxml-5.3.2-cp39-cp39-win32.whl", hash = "sha256:4d6d3d1436d57f41984920667ec5ef04bcb158f80df89ac4d0d3f775a2ac0c87"}, + {file = "lxml-5.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:2996e1116bbb3ae2a1fbb2ba4da8f92742290b4011e7e5bce2bd33bbc9d9485a"}, + {file = "lxml-5.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:521ab9c80b98c30b2d987001c3ede2e647e92eeb2ca02e8cb66ef5122d792b24"}, + {file = "lxml-5.3.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1231b0f9810289d41df1eacc4ebb859c63e4ceee29908a0217403cddce38d0"}, + {file = "lxml-5.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271f1a4d5d2b383c36ad8b9b489da5ea9c04eca795a215bae61ed6a57cf083cd"}, + {file = "lxml-5.3.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:6fca8a5a13906ba2677a5252752832beb0f483a22f6c86c71a2bb320fba04f61"}, + {file = "lxml-5.3.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ea0c3b7922209160faef194a5b6995bfe7fa05ff7dda6c423ba17646b7b9de10"}, + {file = "lxml-5.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0a006390834603e5952a2ff74b9a31a6007c7cc74282a087aa6467afb4eea987"}, + {file = "lxml-5.3.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:eae4136a3b8c4cf76f69461fc8f9410d55d34ea48e1185338848a888d71b9675"}, + {file = "lxml-5.3.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d48e06be8d8c58e7feaedd8a37897a6122637efb1637d7ce00ddf5f11f9a92ad"}, + {file = "lxml-5.3.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4b83aed409134093d90e114007034d2c1ebcd92e501b71fd9ec70e612c8b2eb"}, + {file = "lxml-5.3.2-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7a0e77edfe26d3703f954d46bed52c3ec55f58586f18f4b7f581fc56954f1d84"}, + {file = "lxml-5.3.2-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:19f6fcfd15b82036b4d235749d78785eb9c991c7812012dc084e0d8853b4c1c0"}, + {file = "lxml-5.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d49919c95d31ee06eefd43d8c6f69a3cc9bdf0a9b979cc234c4071f0eb5cb173"}, + {file = "lxml-5.3.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2d0a60841410123c533990f392819804a8448853f06daf412c0f383443925e89"}, + {file = "lxml-5.3.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7f729e03090eb4e3981f10efaee35e6004b548636b1a062b8b9a525e752abc"}, + {file = "lxml-5.3.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:579df6e20d8acce3bcbc9fb8389e6ae00c19562e929753f534ba4c29cfe0be4b"}, + {file = "lxml-5.3.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2abcf3f3b8367d6400b908d00d4cd279fc0b8efa287e9043820525762d383699"}, + {file = "lxml-5.3.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:348c06cb2e3176ce98bee8c397ecc89181681afd13d85870df46167f140a305f"}, + {file = "lxml-5.3.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:617ecaccd565cbf1ac82ffcaa410e7da5bd3a4b892bb3543fb2fe19bd1c4467d"}, + {file = "lxml-5.3.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c3eb4278dcdb9d86265ed2c20b9ecac45f2d6072e3904542e591e382c87a9c00"}, + {file = "lxml-5.3.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258b6b53458c5cbd2a88795557ff7e0db99f73a96601b70bc039114cd4ee9e02"}, + {file = "lxml-5.3.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a9d8d25ed2f2183e8471c97d512a31153e123ac5807f61396158ef2793cb6e"}, + {file = "lxml-5.3.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:73bcb635a848c18a3e422ea0ab0092f2e4ef3b02d8ebe87ab49748ebc8ec03d8"}, + {file = "lxml-5.3.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1545de0a69a16ced5767bae8cca1801b842e6e49e96f5e4a8a5acbef023d970b"}, + {file = "lxml-5.3.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:165fcdc2f40fc0fe88a3c3c06c9c2a097388a90bda6a16e6f7c9199c903c9b8e"}, + {file = "lxml-5.3.2.tar.gz", hash = "sha256:773947d0ed809ddad824b7b14467e1a481b8976e87278ac4a730c2f7c7fcddc1"}, ] [package.extras] @@ -2648,8 +2687,8 @@ name = "markdown-it-py" version = "4.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false -python-versions = ">=3.10" -groups = ["main"] +python-versions = ">=3.8" +groups = ["main", "docs"] files = [ {file = "markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147"}, {file = "markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3"}, @@ -2850,8 +2889,8 @@ name = "matplotlib-inline" version = "0.2.1" description = "Inline Matplotlib backend for Jupyter" optional = false -python-versions = ">=3.9" -groups = ["dev"] +python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76"}, {file = "matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe"}, @@ -2863,13 +2902,33 @@ traitlets = "*" [package.extras] test = ["flake8", "nbdime", "nbval", "notebook", "pytest"] +[[package]] +name = "mdit-py-plugins" +version = "0.5.0" +description = "Collection of plugins for markdown-it-py" +optional = false +python-versions = ">=3.10" +groups = ["docs"] +files = [ + {file = "mdit_py_plugins-0.5.0-py3-none-any.whl", hash = "sha256:07a08422fc1936a5d26d146759e9155ea466e842f5ab2f7d2266dd084c8dab1f"}, + {file = "mdit_py_plugins-0.5.0.tar.gz", hash = "sha256:f4918cb50119f50446560513a8e311d574ff6aaed72606ddae6d35716fe809c6"}, +] + +[package.dependencies] +markdown-it-py = ">=2.0.0,<5.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["myst-parser", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" optional = false python-versions = ">=3.7" -groups = ["main"] +groups = ["main", "docs"] files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -2893,7 +2952,7 @@ version = "3.2.0" description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "mistune-3.2.0-py3-none-any.whl", hash = "sha256:febdc629a3c78616b94393c6580551e0e34cc289987ec6c35ed3f4be42d0eee1"}, {file = "mistune-3.2.0.tar.gz", hash = "sha256:708487c8a8cdd99c9d90eb3ed4c3ed961246ff78ac82f03418f5183ab70e398a"}, @@ -2964,6 +3023,26 @@ mergedeep = ">=1.3.4" platformdirs = ">=2.2.0" pyyaml = ">=5.1" +[[package]] +name = "mkdocs-jupyter" +version = "0.25.1" +description = "Use Jupyter in mkdocs websites" +optional = false +python-versions = ">=3.9" +groups = ["docs"] +files = [ + {file = "mkdocs_jupyter-0.25.1-py3-none-any.whl", hash = "sha256:3f679a857609885d322880e72533ef5255561bbfdb13cfee2a1e92ef4d4ad8d8"}, + {file = "mkdocs_jupyter-0.25.1.tar.gz", hash = "sha256:0e9272ff4947e0ec683c92423a4bfb42a26477c103ab1a6ab8277e2dcc8f7afe"}, +] + +[package.dependencies] +ipykernel = ">6.0.0,<7.0.0" +jupytext = ">1.13.8,<2" +mkdocs = ">=1.4.0,<2" +mkdocs-material = ">9.0.0" +nbconvert = ">=7.2.9,<8" +pygments = ">2.12.0" + [[package]] name = "mkdocs-material" version = "9.7.4" @@ -3053,51 +3132,36 @@ mkdocstrings = ">=0.26" [[package]] name = "ml-dtypes" -version = "0.5.4" -description = "ml_dtypes is a stand-alone implementation of several NumPy dtype extensions used in machine learning." +version = "0.5.1" +description = "" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "ml_dtypes-0.5.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b95e97e470fe60ed493fd9ae3911d8da4ebac16bd21f87ffa2b7c588bf22ea2c"}, - {file = "ml_dtypes-0.5.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4b801ebe0b477be666696bda493a9be8356f1f0057a57f1e35cd26928823e5a"}, - {file = "ml_dtypes-0.5.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:388d399a2152dd79a3f0456a952284a99ee5c93d3e2f8dfe25977511e0515270"}, - {file = "ml_dtypes-0.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:4ff7f3e7ca2972e7de850e7b8fcbb355304271e2933dd90814c1cb847414d6e2"}, - {file = "ml_dtypes-0.5.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6c7ecb74c4bd71db68a6bea1edf8da8c34f3d9fe218f038814fd1d310ac76c90"}, - {file = "ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc11d7e8c44a65115d05e2ab9989d1e045125d7be8e05a071a48bc76eb6d6040"}, - {file = "ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:19b9a53598f21e453ea2fbda8aa783c20faff8e1eeb0d7ab899309a0053f1483"}, - {file = "ml_dtypes-0.5.4-cp311-cp311-win_amd64.whl", hash = "sha256:7c23c54a00ae43edf48d44066a7ec31e05fdc2eee0be2b8b50dd1903a1db94bb"}, - {file = "ml_dtypes-0.5.4-cp311-cp311-win_arm64.whl", hash = "sha256:557a31a390b7e9439056644cb80ed0735a6e3e3bb09d67fd5687e4b04238d1de"}, - {file = "ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a174837a64f5b16cab6f368171a1a03a27936b31699d167684073ff1c4237dac"}, - {file = "ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7f7c643e8b1320fd958bf098aa7ecf70623a42ec5154e3be3be673f4c34d900"}, - {file = "ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ad459e99793fa6e13bd5b7e6792c8f9190b4e5a1b45c63aba14a4d0a7f1d5ff"}, - {file = "ml_dtypes-0.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:c1a953995cccb9e25a4ae19e34316671e4e2edaebe4cf538229b1fc7109087b7"}, - {file = "ml_dtypes-0.5.4-cp312-cp312-win_arm64.whl", hash = "sha256:9bad06436568442575beb2d03389aa7456c690a5b05892c471215bfd8cf39460"}, - {file = "ml_dtypes-0.5.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c760d85a2f82e2bed75867079188c9d18dae2ee77c25a54d60e9cc79be1bc48"}, - {file = "ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce756d3a10d0c4067172804c9cc276ba9cc0ff47af9078ad439b075d1abdc29b"}, - {file = "ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:533ce891ba774eabf607172254f2e7260ba5f57bdd64030c9a4fcfbd99815d0d"}, - {file = "ml_dtypes-0.5.4-cp313-cp313-win_amd64.whl", hash = "sha256:f21c9219ef48ca5ee78402d5cc831bd58ea27ce89beda894428bc67a52da5328"}, - {file = "ml_dtypes-0.5.4-cp313-cp313-win_arm64.whl", hash = "sha256:35f29491a3e478407f7047b8a4834e4640a77d2737e0b294d049746507af5175"}, - {file = "ml_dtypes-0.5.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:304ad47faa395415b9ccbcc06a0350800bc50eda70f0e45326796e27c62f18b6"}, - {file = "ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6a0df4223b514d799b8a1629c65ddc351b3efa833ccf7f8ea0cf654a61d1e35d"}, - {file = "ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531eff30e4d368cb6255bc2328d070e35836aa4f282a0fb5f3a0cd7260257298"}, - {file = "ml_dtypes-0.5.4-cp313-cp313t-win_amd64.whl", hash = "sha256:cb73dccfc991691c444acc8c0012bee8f2470da826a92e3a20bb333b1a7894e6"}, - {file = "ml_dtypes-0.5.4-cp313-cp313t-win_arm64.whl", hash = "sha256:3bbbe120b915090d9dd1375e4684dd17a20a2491ef25d640a908281da85e73f1"}, - {file = "ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2b857d3af6ac0d39db1de7c706e69c7f9791627209c3d6dedbfca8c7e5faec22"}, - {file = "ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:805cef3a38f4eafae3a5bf9ebdcdb741d0bcfd9e1bd90eb54abd24f928cd2465"}, - {file = "ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14a4fd3228af936461db66faccef6e4f41c1d82fcc30e9f8d58a08916b1d811f"}, - {file = "ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl", hash = "sha256:8c6a2dcebd6f3903e05d51960a8058d6e131fe69f952a5397e5dbabc841b6d56"}, - {file = "ml_dtypes-0.5.4-cp314-cp314-win_arm64.whl", hash = "sha256:5a0f68ca8fd8d16583dfa7793973feb86f2fbb56ce3966daf9c9f748f52a2049"}, - {file = "ml_dtypes-0.5.4-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:bfc534409c5d4b0bf945af29e5d0ab075eae9eecbb549ff8a29280db822f34f9"}, - {file = "ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2314892cdc3fcf05e373d76d72aaa15fda9fb98625effa73c1d646f331fcecb7"}, - {file = "ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d2ffd05a2575b1519dc928c0b93c06339eb67173ff53acb00724502cda231cf"}, - {file = "ml_dtypes-0.5.4-cp314-cp314t-win_amd64.whl", hash = "sha256:4381fe2f2452a2d7589689693d3162e876b3ddb0a832cde7a414f8e1adf7eab1"}, - {file = "ml_dtypes-0.5.4-cp314-cp314t-win_arm64.whl", hash = "sha256:11942cbf2cf92157db91e5022633c0d9474d4dfd813a909383bd23ce828a4b7d"}, - {file = "ml_dtypes-0.5.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d81fdb088defa30eb37bf390bb7dde35d3a83ec112ac8e33d75ab28cc29dd8b0"}, - {file = "ml_dtypes-0.5.4-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:88c982aac7cb1cbe8cbb4e7f253072b1df872701fcaf48d84ffbb433b6568f24"}, - {file = "ml_dtypes-0.5.4-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9b61c19040397970d18d7737375cffd83b1f36a11dd4ad19f83a016f736c3ef"}, - {file = "ml_dtypes-0.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:3d277bf3637f2a62176f4575512e9ff9ef51d00e39626d9fe4a161992f355af2"}, - {file = "ml_dtypes-0.5.4.tar.gz", hash = "sha256:8ab06a50fb9bf9666dd0fe5dfb4676fa2b0ac0f31ecff72a6c3af8e22c063453"}, + {file = "ml_dtypes-0.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bd73f51957949069573ff783563486339a9285d72e2f36c18e0c1aa9ca7eb190"}, + {file = "ml_dtypes-0.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:810512e2eccdfc3b41eefa3a27402371a3411453a1efc7e9c000318196140fed"}, + {file = "ml_dtypes-0.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141b2ea2f20bb10802ddca55d91fe21231ef49715cfc971998e8f2a9838f3dbe"}, + {file = "ml_dtypes-0.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:26ebcc69d7b779c8f129393e99732961b5cc33fcff84090451f448c89b0e01b4"}, + {file = "ml_dtypes-0.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:023ce2f502efd4d6c1e0472cc58ce3640d051d40e71e27386bed33901e201327"}, + {file = "ml_dtypes-0.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7000b6e4d8ef07542c05044ec5d8bbae1df083b3f56822c3da63993a113e716f"}, + {file = "ml_dtypes-0.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c09526488c3a9e8b7a23a388d4974b670a9a3dd40c5c8a61db5593ce9b725bab"}, + {file = "ml_dtypes-0.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:15ad0f3b0323ce96c24637a88a6f44f6713c64032f27277b069f285c3cf66478"}, + {file = "ml_dtypes-0.5.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:6f462f5eca22fb66d7ff9c4744a3db4463af06c49816c4b6ac89b16bfcdc592e"}, + {file = "ml_dtypes-0.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f76232163b5b9c34291b54621ee60417601e2e4802a188a0ea7157cd9b323f4"}, + {file = "ml_dtypes-0.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad4953c5eb9c25a56d11a913c2011d7e580a435ef5145f804d98efa14477d390"}, + {file = "ml_dtypes-0.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:9626d0bca1fb387d5791ca36bacbba298c5ef554747b7ebeafefb4564fc83566"}, + {file = "ml_dtypes-0.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:12651420130ee7cc13059fc56dac6ad300c3af3848b802d475148c9defd27c23"}, + {file = "ml_dtypes-0.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9945669d3dadf8acb40ec2e57d38c985d8c285ea73af57fc5b09872c516106d"}, + {file = "ml_dtypes-0.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf9975bda82a99dc935f2ae4c83846d86df8fd6ba179614acac8e686910851da"}, + {file = "ml_dtypes-0.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:fd918d4e6a4e0c110e2e05be7a7814d10dc1b95872accbf6512b80a109b71ae1"}, + {file = "ml_dtypes-0.5.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:05f23447a1c20ddf4dc7c2c661aa9ed93fcb2658f1017c204d1e758714dc28a8"}, + {file = "ml_dtypes-0.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b7fbe5571fdf28fd3aaab3ef4aafc847de9ebf263be959958c1ca58ec8eadf5"}, + {file = "ml_dtypes-0.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d13755f8e8445b3870114e5b6240facaa7cb0c3361e54beba3e07fa912a6e12b"}, + {file = "ml_dtypes-0.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b8a9d46b4df5ae2135a8e8e72b465448ebbc1559997f4f9304a9ecc3413efb5b"}, + {file = "ml_dtypes-0.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afb2009ac98da274e893e03162f6269398b2b00d947e7057ee2469a921d58135"}, + {file = "ml_dtypes-0.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aefedc579ece2f8fb38f876aa7698204ee4c372d0e54f1c1ffa8ca580b54cc60"}, + {file = "ml_dtypes-0.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:8f2c028954f16ede77902b223a8da2d9cbb3892375b85809a5c3cfb1587960c4"}, + {file = "ml_dtypes-0.5.1.tar.gz", hash = "sha256:ac5b58559bb84a95848ed6984eb8013249f90b6bab62aa5acbad876e256002c9"}, ] [package.dependencies] @@ -3220,152 +3284,110 @@ optional = false python-versions = ">=3.9" groups = ["main", "dev"] files = [ - {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5"}, - {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8"}, - {file = "multidict-6.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdea2e7b2456cfb6694fb113066fd0ec7ea4d67e3a35e1f4cbeea0b448bf5872"}, - {file = "multidict-6.7.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17207077e29342fdc2c9a82e4b306f1127bf1ea91f8b71e02d4798a70bb99991"}, - {file = "multidict-6.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4f49cb5661344764e4c7c7973e92a47a59b8fc19b6523649ec9dc4960e58a03"}, - {file = "multidict-6.7.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a9fc4caa29e2e6ae408d1c450ac8bf19892c5fca83ee634ecd88a53332c59981"}, - {file = "multidict-6.7.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c5f0c21549ab432b57dcc82130f388d84ad8179824cc3f223d5e7cfbfd4143f6"}, - {file = "multidict-6.7.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7dfb78d966b2c906ae1d28ccf6e6712a3cd04407ee5088cd276fe8cb42186190"}, - {file = "multidict-6.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b0d9b91d1aa44db9c1f1ecd0d9d2ae610b2f4f856448664e01a3b35899f3f92"}, - {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dd96c01a9dcd4889dcfcf9eb5544ca0c77603f239e3ffab0524ec17aea9a93ee"}, - {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:067343c68cd6612d375710f895337b3a98a033c94f14b9a99eff902f205424e2"}, - {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5884a04f4ff56c6120f6ccf703bdeb8b5079d808ba604d4d53aec0d55dc33568"}, - {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8affcf1c98b82bc901702eb73b6947a1bfa170823c153fe8a47b5f5f02e48e40"}, - {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0d17522c37d03e85c8098ec8431636309b2682cf12e58f4dbc76121fb50e4962"}, - {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24c0cf81544ca5e17cfcb6e482e7a82cd475925242b308b890c9452a074d4505"}, - {file = "multidict-6.7.1-cp310-cp310-win32.whl", hash = "sha256:d82dd730a95e6643802f4454b8fdecdf08667881a9c5670db85bc5a56693f122"}, - {file = "multidict-6.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cf37cbe5ced48d417ba045aca1b21bafca67489452debcde94778a576666a1df"}, - {file = "multidict-6.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:59bc83d3f66b41dac1e7460aac1d196edc70c9ba3094965c467715a70ecb46db"}, - {file = "multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d"}, - {file = "multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e"}, - {file = "multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855"}, - {file = "multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3"}, - {file = "multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e"}, - {file = "multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a"}, - {file = "multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8"}, - {file = "multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0"}, - {file = "multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144"}, - {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49"}, - {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71"}, - {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3"}, - {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c"}, - {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0"}, - {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa"}, - {file = "multidict-6.7.1-cp311-cp311-win32.whl", hash = "sha256:d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a"}, - {file = "multidict-6.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b"}, - {file = "multidict-6.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6"}, - {file = "multidict-6.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172"}, - {file = "multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd"}, - {file = "multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7"}, - {file = "multidict-6.7.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cb2a55f408c3043e42b40cc8eecd575afa27b7e0b956dfb190de0f8499a57a53"}, - {file = "multidict-6.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75"}, - {file = "multidict-6.7.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c3a32d23520ee37bf327d1e1a656fec76a2edd5c038bf43eddfa0572ec49c60b"}, - {file = "multidict-6.7.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c90fed18bffc0189ba814749fdcc102b536e83a9f738a9003e569acd540a733"}, - {file = "multidict-6.7.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:da62917e6076f512daccfbbde27f46fed1c98fee202f0559adec8ee0de67f71a"}, - {file = "multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961"}, - {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582"}, - {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:398c1478926eca669f2fd6a5856b6de9c0acf23a2cb59a14c0ba5844fa38077e"}, - {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c102791b1c4f3ab36ce4101154549105a53dc828f016356b3e3bcae2e3a039d3"}, - {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a088b62bd733e2ad12c50dad01b7d0166c30287c166e137433d3b410add807a6"}, - {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3d51ff4785d58d3f6c91bdbffcb5e1f7ddfda557727043aa20d20ec4f65e324a"}, - {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba"}, - {file = "multidict-6.7.1-cp312-cp312-win32.whl", hash = "sha256:28ca5ce2fd9716631133d0e9a9b9a745ad7f60bac2bccafb56aa380fc0b6c511"}, - {file = "multidict-6.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcee94dfbd638784645b066074b338bc9cc155d4b4bffa4adce1615c5a426c19"}, - {file = "multidict-6.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:ba0a9fb644d0c1a2194cf7ffb043bd852cea63a57f66fbd33959f7dae18517bf"}, - {file = "multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23"}, - {file = "multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2"}, - {file = "multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445"}, - {file = "multidict-6.7.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177"}, - {file = "multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23"}, - {file = "multidict-6.7.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060"}, - {file = "multidict-6.7.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d"}, - {file = "multidict-6.7.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed"}, - {file = "multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429"}, - {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6"}, - {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9"}, - {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c"}, - {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84"}, - {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d"}, - {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33"}, - {file = "multidict-6.7.1-cp313-cp313-win32.whl", hash = "sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3"}, - {file = "multidict-6.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5"}, - {file = "multidict-6.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df"}, - {file = "multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1"}, - {file = "multidict-6.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963"}, - {file = "multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34"}, - {file = "multidict-6.7.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65"}, - {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292"}, - {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43"}, - {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca"}, - {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd"}, - {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7"}, - {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3"}, - {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4"}, - {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8"}, - {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c"}, - {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52"}, - {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108"}, - {file = "multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32"}, - {file = "multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8"}, - {file = "multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118"}, - {file = "multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee"}, - {file = "multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2"}, - {file = "multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1"}, - {file = "multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d"}, - {file = "multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31"}, - {file = "multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048"}, - {file = "multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362"}, - {file = "multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37"}, - {file = "multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709"}, - {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0"}, - {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb"}, - {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd"}, - {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601"}, - {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1"}, - {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b"}, - {file = "multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d"}, - {file = "multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f"}, - {file = "multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5"}, - {file = "multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581"}, - {file = "multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a"}, - {file = "multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c"}, - {file = "multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262"}, - {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59"}, - {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889"}, - {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4"}, - {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d"}, - {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609"}, - {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489"}, - {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c"}, - {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e"}, - {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c"}, - {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9"}, - {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2"}, - {file = "multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7"}, - {file = "multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5"}, - {file = "multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2"}, - {file = "multidict-6.7.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:65573858d27cdeaca41893185677dc82395159aa28875a8867af66532d413a8f"}, - {file = "multidict-6.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c524c6fb8fc342793708ab111c4dbc90ff9abd568de220432500e47e990c0358"}, - {file = "multidict-6.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:aa23b001d968faef416ff70dc0f1ab045517b9b42a90edd3e9bcdb06479e31d5"}, - {file = "multidict-6.7.1-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6704fa2b7453b2fb121740555fa1ee20cd98c4d011120caf4d2b8d4e7c76eec0"}, - {file = "multidict-6.7.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:121a34e5bfa410cdf2c8c49716de160de3b1dbcd86b49656f5681e4543bcd1a8"}, - {file = "multidict-6.7.1-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:026d264228bcd637d4e060844e39cdc60f86c479e463d49075dedc21b18fbbe0"}, - {file = "multidict-6.7.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0e697826df7eb63418ee190fd06ce9f1803593bb4b9517d08c60d9b9a7f69d8f"}, - {file = "multidict-6.7.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bb08271280173720e9fea9ede98e5231defcbad90f1624bea26f32ec8a956e2f"}, - {file = "multidict-6.7.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c6b3228e1d80af737b72925ce5fb4daf5a335e49cd7ab77ed7b9fdfbf58c526e"}, - {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3943debf0fbb57bdde5901695c11094a9a36723e5c03875f87718ee15ca2f4d2"}, - {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:98c5787b0a0d9a41d9311eae44c3b76e6753def8d8870ab501320efe75a6a5f8"}, - {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:08ccb2a6dc72009093ebe7f3f073e5ec5964cba9a706fa94b1a1484039b87941"}, - {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb351f72c26dc9abe338ca7294661aa22969ad8ffe7ef7d5541d19f368dc854a"}, - {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ac1c665bad8b5d762f5f85ebe4d94130c26965f11de70c708c75671297c776de"}, - {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fa6609d0364f4f6f58351b4659a1f3e0e898ba2a8c5cac04cb2c7bc556b0bc5"}, - {file = "multidict-6.7.1-cp39-cp39-win32.whl", hash = "sha256:6f77ce314a29263e67adadc7e7c1bc699fcb3a305059ab973d038f87caa42ed0"}, - {file = "multidict-6.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:f537b55778cd3cbee430abe3131255d3a78202e0f9ea7ffc6ada893a4bcaeea4"}, - {file = "multidict-6.7.1-cp39-cp39-win_arm64.whl", hash = "sha256:749aa54f578f2e5f439538706a475aa844bfa8ef75854b1401e6e528e4937cf9"}, - {file = "multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56"}, - {file = "multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d"}, + {file = "multidict-6.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:078b15e3ee43448aa5365659be7b2966e74962b1c1845c67679c8d62634415f6"}, + {file = "multidict-6.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d266adf4ebb5a89ff5ffaf4d0cbc93fd61aab0fdd71141060b77b2db6e4a0b5b"}, + {file = "multidict-6.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2e04122bbf89afc8dfd271b8089d67e60bc714fdc5cd72e5f9af429bd8b1313"}, + {file = "multidict-6.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d0befac983cb0000b8b7873f55aa72fb053a5d2f154ba02bb03b149a31ddda"}, + {file = "multidict-6.4.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fcdceb8cfa3167a8928fa2d13f5e77f885cbd1d87843acc633df19e276aec0d8"}, + {file = "multidict-6.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d2ac8aa3aa80a49a616cf2b93cdeaf76cf4300657300367a95a383961605e3a"}, + {file = "multidict-6.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:61f64fcad577d1c7e6b21bff12af453be4b6f77fd548cb10cfa88ff0819c0837"}, + {file = "multidict-6.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9206f09ed03381bb69901d409e57a258657933a0ff2c09f246f69e5fb51836a8"}, + {file = "multidict-6.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c513019e1547db1f12d0fba199b790f65790c14d483fcd68d912d301d121db9c"}, + {file = "multidict-6.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:54c78f255ace14daa8e3fa7d38becc7e2adf80f2d1ce9a46802161397173422d"}, + {file = "multidict-6.4.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:864d94857a2ca77c77481c4a3d2fd21c152bf2a15bdaf9f04a3950d5c936c71a"}, + {file = "multidict-6.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:78d5ee7b423ba19b1cdb0a43aaf342cb8bc9961bf7af5853bb695f7e63b3b663"}, + {file = "multidict-6.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:03dcd41721b239ae7d4222f6bfb56d124cfa020abf76ab2fc4f8d7396824e8da"}, + {file = "multidict-6.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6276f4402cd72093c423575fb77009dcf4856f0c1edd5978deb998685e8d65f1"}, + {file = "multidict-6.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5d106d1c8db10aaae30d947821354001a940d20470c10bdfb2de0037d114f29e"}, + {file = "multidict-6.4.0-cp310-cp310-win32.whl", hash = "sha256:6a0bd46edc9f54eb5dfebc8b77c7c7606e8ad0d1c1eda771654a19f74c859d07"}, + {file = "multidict-6.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:bdfc51f6bda2c99401fa92369358b83da03f2db4e92056614471505fe51500f0"}, + {file = "multidict-6.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e180e9e14005813741018980caed99f02504f1baf25f8020a3ffff6da6fbabb9"}, + {file = "multidict-6.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c47fb7567b7151ef9366cb6283cde5731043f9d37fb411785f528f652b08710a"}, + {file = "multidict-6.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5eb804e4ab018a5619b2d33263dce32cde1b6534ecbb8fee14d6955764803e8c"}, + {file = "multidict-6.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79b324b05a03b9de36c5e03d195aee32c4019e9aab44bade4a07152370a5322e"}, + {file = "multidict-6.4.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:54d71522f9a49bebfe9110dccdcdfb7b9ac4aebccd0202aae053963ae982bdcc"}, + {file = "multidict-6.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6b51943e9852968578c6be81bab105727a1de80fa6b0e2d83bb533212c34e77"}, + {file = "multidict-6.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5e0624d091d43e04d38f83559dcfe0e81d1da55cde6dca89bff3552e4f16fb5"}, + {file = "multidict-6.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4dc2de2fe769e499bf6ec52423e057263423cdeb3dc614ab4646736c535ac9"}, + {file = "multidict-6.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa472059b3dcaec7cd9180d19cd941cc411df75277e54861874b9ef5e7c49d0d"}, + {file = "multidict-6.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:080cc978eb9ba3cb9540f73f828e0b014b532c31bb5ee53ddd2d752b4e96f9b2"}, + {file = "multidict-6.4.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:d1de88c47331e43363a96a5723de94ef623ab0293d7a54695c67a30134e868d3"}, + {file = "multidict-6.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ca38ab44b5451a031dda4402fff74d674b55ec6dd1aa4b69bd01a680fc0ac8d3"}, + {file = "multidict-6.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:69a6a0918a42b45f2d67c83155ada3d43d1aed215b1e5af9cab99b600b27865e"}, + {file = "multidict-6.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:54bd6de4c702f22948bcaed9291b89ab903459537fc74fbcb434e905d9d10371"}, + {file = "multidict-6.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c909dd52d1ea246a4c153cea6856e13a99808e7660874831d92b9d09ff9e1432"}, + {file = "multidict-6.4.0-cp311-cp311-win32.whl", hash = "sha256:99932582c8263b2b5f61714df1d5ed87867db0c358514225b692a88e68d62405"}, + {file = "multidict-6.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:b8bfa0da539228e8cb86c75356c99db373914d233e77ce3dc14f34342f57aa9e"}, + {file = "multidict-6.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e5ac33a1074dd48b131066a84cc238cedbe0037fa72ecdb47b544230f518a27c"}, + {file = "multidict-6.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5bebfffa42e49e7a1364674f264aef9dcaba152b691d4eeb5ed468cca11500b7"}, + {file = "multidict-6.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:650c481b90e5b99cd8513df224f8e49c7e4d9cbf85dc0d62a7bca509b772a2b7"}, + {file = "multidict-6.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef76cc3977b13847a1b04fde65d4d41385d5f21ff1f151d795448e8e23b51f7a"}, + {file = "multidict-6.4.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9d60e31dcbada810a5d5476b02a83d5e4b384d67c4da53ebc541fcc303678565"}, + {file = "multidict-6.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93a7b5d9d5daf42e4414b499e7ceeee1e42dc357a077b49f6d3360922f06dc1b"}, + {file = "multidict-6.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2ca4f3ee141c301f1e8b5b0a656a5137a9451a9c2a0df88578a7cd72ea61634"}, + {file = "multidict-6.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e4ce260293924a835d6cef67168fe880e3c28f841b391c6265d157e764ed409"}, + {file = "multidict-6.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749598847b195e6329b59f892150946521bcc249a2a332c21e25ead2f265d7df"}, + {file = "multidict-6.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73ccb5102e45864ef47617526ad452c9655451814fe4224810c325242f3322c1"}, + {file = "multidict-6.4.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ceb46c6fb06c5b4cdcd7ef6f8bc8300919228e47b96d9dbf83ac8c8a59460a88"}, + {file = "multidict-6.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5311bd0c176eadc2f8e7d6f501c7e23d069fbd9766e624727105b8ed568c1fc3"}, + {file = "multidict-6.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:38455489fd3156c04cb4b3e79e905253ed62645eca1e45a10c1f4c14583b6a9e"}, + {file = "multidict-6.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1c3b10946d1cdb374926d89ec0c35e579062097058645126cc097a4408808775"}, + {file = "multidict-6.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f07e465ffb78e4f0d7371a053b31428b87ecb4f67d345ed11ab8268e9dc3ca7e"}, + {file = "multidict-6.4.0-cp312-cp312-win32.whl", hash = "sha256:585a7a560ca776ce76dfc8cce919f0475db308a285b044dd8b9e5825521a7f02"}, + {file = "multidict-6.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:399d33fe1ce06072717f99f23eace13e2257c53c67a153f922f9d6717e1679ad"}, + {file = "multidict-6.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:4a0506deab5313507b8d6e26986ef92082a6ff335d346857f448de64dcfb7614"}, + {file = "multidict-6.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ddc93bdef68a5e0d33d4239bac1463c0f4ab59f710f4223af9a422fffdcf438d"}, + {file = "multidict-6.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3c48d68fd3ee3c54861ca42763e0501925b06802b7e11b624ff3ec7be43eef3f"}, + {file = "multidict-6.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:514ce8beef2cda533d882790f1c192a06feabd177a2cd7571d3536f91e3b6a6b"}, + {file = "multidict-6.4.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:07c3da83720ad218fcfc33d1e7ca5770204cedd57984c3e7dba086a34b254d9e"}, + {file = "multidict-6.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eae70b43b71883809574db26d6191fb40199a623b1b403cb1e499ad2ffba96c2"}, + {file = "multidict-6.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce47b524d127781989928ddaa6a6b81250e7330196a371fba4d85f51c5954117"}, + {file = "multidict-6.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b97b3619963b77f9d6513762f9f1f8f01f272b2242921fdb32058470a7d3c4d"}, + {file = "multidict-6.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea2f9d2b0a47975a22c9c91974ff2350e31e16ff0c33a3643fa622155115d786"}, + {file = "multidict-6.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:00921e97379446c486e4699cc20bd5afb491e0c70296400a26826b96eb2f7e90"}, + {file = "multidict-6.4.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:299e001362ed580c51d1351bf8e1c0a2b2adde0ede8e2dab97aada5ab3894bd8"}, + {file = "multidict-6.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:63f6772ffae9c4fa136b15f2bbbc80f675a163caea3cc0293a9f33d8c8a1c02d"}, + {file = "multidict-6.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:be5aff5f4624e78eb5ac101c0f74d2c7b0065c1fda395894cd7189937c71068c"}, + {file = "multidict-6.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7df0f8da435c98720302f9f725c5f48f09d8049df534d9d867eda9923300bf12"}, + {file = "multidict-6.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:804b15e11fc3c3f81c5f8c1795d13939cdf4c937c2dd3c9202f022584b87e0cd"}, + {file = "multidict-6.4.0-cp313-cp313-win32.whl", hash = "sha256:72d75f9fc07a723eb4be4eda7b60e33969e3e5f92225842c1a593aa01f5b3634"}, + {file = "multidict-6.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:a8ba9d874a806e15c809e67b2831de5b1fd7f5505de581ed60f1c24826fdd1af"}, + {file = "multidict-6.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:54abb61600f2207bac771497e9562573a6dd0dc8b6e4bffb7ec772d59d60de37"}, + {file = "multidict-6.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a43950d4b0b46cf609e0690324b17998f84ba5df96269a3ea90211c9c391aca9"}, + {file = "multidict-6.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:14229efff3c174cdb58c7400285092e91cc6f8c03b88796be8f4425e2f5c677a"}, + {file = "multidict-6.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0c9eef437df76400e34a9d6a423f3a8fb40a9526368b75ae82d298d2c336a45"}, + {file = "multidict-6.4.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6fd307bc929b4047e4fffcf4d30bc7258c814db865a9c720de4c9c795d3536a6"}, + {file = "multidict-6.4.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:437f64d36f732e26e41433ed630ded236cda88f484834025be140c3d96dc7af8"}, + {file = "multidict-6.4.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c355293453a6a81ce4c964cceefecbbe3a5ff5bb492f2ee273116540b247dead"}, + {file = "multidict-6.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7a51fe3ce348fe3d32d2b28c694da6c25187c9f5208cd097477aa813ca8bf1"}, + {file = "multidict-6.4.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83525ad5eeceb9567c6674b893cafd57f8cee1a366a0c3e409df7e87c2342286"}, + {file = "multidict-6.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1d046be7f240ec2a4ad151ac241bb954bc2bfa36f6e4e96ef6961579fff27078"}, + {file = "multidict-6.4.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:c15c0e84e58cb2506b6581bb2e279389f7a0a6db036dd251e77c99e27f842cf8"}, + {file = "multidict-6.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:b90fa4ecf1c704d4f7fbff596bb51719bdeebdb54446f6debc5afa3b80fc445b"}, + {file = "multidict-6.4.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:669c92b2450b4825372e927574961031a9cd8c75eaa2cc4fb5ce60aa1f97c47c"}, + {file = "multidict-6.4.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3658b45ffb6fbb7cfebd168a3447c55c5e8b59ba61e0e4d76932eae69006cefe"}, + {file = "multidict-6.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:57cd75edddcb87845635a2251962f42de9b85aad0a0716c2b2755e37c7b501a9"}, + {file = "multidict-6.4.0-cp313-cp313t-win32.whl", hash = "sha256:5dca9a964c632f2bdf6b15ce6945358744e82d53667b81224bc4233667a3ff37"}, + {file = "multidict-6.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e4e45a03fc209739d4906a4986c0202f1eacbe78fba248826f6d906ac510e7ff"}, + {file = "multidict-6.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0594a4ade168186062677e43b31cabdd8e23f79c5f722dd464d417ca970453cd"}, + {file = "multidict-6.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1ff39aff4f694afbdd727b663a5eb8514ba6b4be279d1dc10dceb6613bcb100d"}, + {file = "multidict-6.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8d95048d1deb2f3e0de799ee72e40ee5a6fc700396525a727dffbb99be4899f0"}, + {file = "multidict-6.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2ebc8c57961bbdd0eecf126f4ede310fb246b9cb9a5bacb94cc9638b25c0159"}, + {file = "multidict-6.4.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7b89c791949026636cca742d2f9f72903a4ffa0e6c2648310f70a9285b372f8d"}, + {file = "multidict-6.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b109c1471c5c69821bc84bae1dedf93c2c3510aac9a7eb21fdc71f2097d7f332"}, + {file = "multidict-6.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0ed65063c2387301d4a67e25ba12ebb22937684438dd4021df2dadd371e751"}, + {file = "multidict-6.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f7ed40abdf884c3209f99eb545c3ffa28272915b34c6e7ca6943e2814484ce4"}, + {file = "multidict-6.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:683a1b3a59e3fb1f6c6d6c87d0628c5954fa9545472868a0895930e6027d227f"}, + {file = "multidict-6.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:83e3d490622139f0d25da20a2528e1e3e2ebaa7a821111c6370e34c158c7aee2"}, + {file = "multidict-6.4.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:26f39d85a7d005a35d932181ccdda640460db7033a82cbd17064c5743ce7cb12"}, + {file = "multidict-6.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1544fdc87107f4e4a188d0ad399872a5c635baa8f48752f0ddfad7517d6b2072"}, + {file = "multidict-6.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:1537c514a1b4f6702a64af61b906b49d57ba3a73cd3268e5a8ad1492a35fe6e9"}, + {file = "multidict-6.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2761093ca696d64fca4ae128ca9d2a735a139d4ec0af0a081eff4d0fb6c69f94"}, + {file = "multidict-6.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:93acb027df1945788f4c924b7e9e0a213f981dc14efd836b63335244f1d3cc8a"}, + {file = "multidict-6.4.0-cp39-cp39-win32.whl", hash = "sha256:76db5d3af30bc344ee313c2da2744e47f6af131d3dbc87618ae5087deb139ec0"}, + {file = "multidict-6.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:08a9f0c935be15b524e93b6700ee63fa10f1e4102c810299dd14a6cb0e9fe956"}, + {file = "multidict-6.4.0-py3-none-any.whl", hash = "sha256:cf6bea2d650530f4df21216a396270d051bf6c4a51f0444c253397e5ad47dcc3"}, + {file = "multidict-6.4.0.tar.gz", hash = "sha256:c2d33f08948b0332badbbc916ba42d947666db433d1faa61f75fc674db3a9861"}, ] [[package]] @@ -3446,8 +3468,8 @@ name = "nbclient" version = "0.10.4" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = false -python-versions = ">=3.10.0" -groups = ["dev"] +python-versions = ">=3.9.0" +groups = ["dev", "docs"] files = [ {file = "nbclient-0.10.4-py3-none-any.whl", hash = "sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440"}, {file = "nbclient-0.10.4.tar.gz", hash = "sha256:1e54091b16e6da39e297b0ece3e10f6f29f4ac4e8ee515d29f8a7099bd6553c9"}, @@ -3469,8 +3491,8 @@ name = "nbconvert" version = "7.17.0" description = "Convert Jupyter Notebooks (.ipynb files) to other formats." optional = false -python-versions = ">=3.9" -groups = ["dev"] +python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "nbconvert-7.17.0-py3-none-any.whl", hash = "sha256:4f99a63b337b9a23504347afdab24a11faa7d86b405e5c8f9881cd313336d518"}, {file = "nbconvert-7.17.0.tar.gz", hash = "sha256:1b2696f1b5be12309f6c7d707c24af604b87dfaf6d950794c7b07acab96dda78"}, @@ -3507,7 +3529,7 @@ version = "5.10.4" description = "The Jupyter Notebook format" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, @@ -3529,7 +3551,7 @@ version = "1.6.0" description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, @@ -3702,6 +3724,90 @@ description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.11" groups = ["main"] +markers = "python_version < \"3.13\"" +files = [ + {file = "numpy-2.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7e88598032542bd49af7c4747541422884219056c268823ef6e5e89851c8825"}, + {file = "numpy-2.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7edc794af8b36ca37ef5fcb5e0d128c7e0595c7b96a2318d1badb6fcd8ee86b1"}, + {file = "numpy-2.4.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6e9f61981ace1360e42737e2bae58b27bf28a1b27e781721047d84bd754d32e7"}, + {file = "numpy-2.4.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cb7bbb88aa74908950d979eeaa24dbdf1a865e3c7e45ff0121d8f70387b55f73"}, + {file = "numpy-2.4.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f069069931240b3fc703f1e23df63443dbd6390614c8c44a87d96cd0ec81eb1"}, + {file = "numpy-2.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c02ef4401a506fb60b411467ad501e1429a3487abca4664871d9ae0b46c8ba32"}, + {file = "numpy-2.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2653de5c24910e49c2b106499803124dde62a5a1fe0eedeaecf4309a5f639390"}, + {file = "numpy-2.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1ae241bbfc6ae276f94a170b14785e561cb5e7f626b6688cf076af4110887413"}, + {file = "numpy-2.4.2-cp311-cp311-win32.whl", hash = "sha256:df1b10187212b198dd45fa943d8985a3c8cf854aed4923796e0e019e113a1bda"}, + {file = "numpy-2.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:b9c618d56a29c9cb1c4da979e9899be7578d2e0b3c24d52079c166324c9e8695"}, + {file = "numpy-2.4.2-cp311-cp311-win_arm64.whl", hash = "sha256:47c5a6ed21d9452b10227e5e8a0e1c22979811cad7dcc19d8e3e2fb8fa03f1a3"}, + {file = "numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a"}, + {file = "numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1"}, + {file = "numpy-2.4.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e"}, + {file = "numpy-2.4.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27"}, + {file = "numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548"}, + {file = "numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f"}, + {file = "numpy-2.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460"}, + {file = "numpy-2.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba"}, + {file = "numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f"}, + {file = "numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85"}, + {file = "numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa"}, + {file = "numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c"}, + {file = "numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979"}, + {file = "numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98"}, + {file = "numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef"}, + {file = "numpy-2.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7"}, + {file = "numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499"}, + {file = "numpy-2.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb"}, + {file = "numpy-2.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7"}, + {file = "numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110"}, + {file = "numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622"}, + {file = "numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71"}, + {file = "numpy-2.4.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262"}, + {file = "numpy-2.4.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913"}, + {file = "numpy-2.4.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab"}, + {file = "numpy-2.4.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82"}, + {file = "numpy-2.4.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f"}, + {file = "numpy-2.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554"}, + {file = "numpy-2.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257"}, + {file = "numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657"}, + {file = "numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b"}, + {file = "numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1"}, + {file = "numpy-2.4.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b"}, + {file = "numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000"}, + {file = "numpy-2.4.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1"}, + {file = "numpy-2.4.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74"}, + {file = "numpy-2.4.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a"}, + {file = "numpy-2.4.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325"}, + {file = "numpy-2.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909"}, + {file = "numpy-2.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a"}, + {file = "numpy-2.4.2-cp314-cp314-win32.whl", hash = "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a"}, + {file = "numpy-2.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75"}, + {file = "numpy-2.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05"}, + {file = "numpy-2.4.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308"}, + {file = "numpy-2.4.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef"}, + {file = "numpy-2.4.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d"}, + {file = "numpy-2.4.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8"}, + {file = "numpy-2.4.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5"}, + {file = "numpy-2.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e"}, + {file = "numpy-2.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a"}, + {file = "numpy-2.4.2-cp314-cp314t-win32.whl", hash = "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443"}, + {file = "numpy-2.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236"}, + {file = "numpy-2.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181"}, + {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:89f7268c009bc492f506abd6f5265defa7cb3f7487dc21d357c3d290add45082"}, + {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6dee3bb76aa4009d5a912180bf5b2de012532998d094acee25d9cb8dee3e44a"}, + {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:cd2bd2bbed13e213d6b55dc1d035a4f91748a7d3edc9480c13898b0353708920"}, + {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:cf28c0c1d4c4bf00f509fa7eb02c58d7caf221b50b467bcb0d9bbf1584d5c821"}, + {file = "numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e04ae107ac591763a47398bb45b568fc38f02dbc4aa44c063f67a131f99346cb"}, + {file = "numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:602f65afdef699cda27ec0b9224ae5dc43e328f4c24c689deaf77133dbee74d0"}, + {file = "numpy-2.4.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be71bf1edb48ebbbf7f6337b5bfd2f895d1902f6335a5830b20141fc126ffba0"}, + {file = "numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae"}, +] + +[[package]] +name = "numpy" +version = "2.4.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.11" +groups = ["main"] +markers = "python_version >= \"3.13\"" files = [ {file = "numpy-2.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7e88598032542bd49af7c4747541422884219056c268823ef6e5e89851c8825"}, {file = "numpy-2.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7edc794af8b36ca37ef5fcb5e0d128c7e0595c7b96a2318d1badb6fcd8ee86b1"}, @@ -3923,7 +4029,7 @@ version = "1.5.1" description = "Utilities for writing pandoc filters in python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, @@ -3935,7 +4041,7 @@ version = "0.8.6" description = "A Python Parser" optional = false python-versions = ">=3.6" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "parso-0.8.6-py2.py3-none-any.whl", hash = "sha256:2c549f800b70a5c4952197248825584cb00f033b29c692671d3bf08bf380baff"}, {file = "parso-0.8.6.tar.gz", hash = "sha256:2b9a0332696df97d454fa67b81618fd69c35a7b90327cbe6ba5c92d2c68a7bfd"}, @@ -3969,7 +4075,7 @@ version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" -groups = ["dev"] +groups = ["dev", "docs"] markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, @@ -4180,8 +4286,8 @@ name = "prompt-toolkit" version = "3.0.52" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.8" -groups = ["dev"] +python-versions = ">=3.8.0" +groups = ["dev", "docs"] files = [ {file = "prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955"}, {file = "prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855"}, @@ -4328,7 +4434,7 @@ version = "7.2.2" description = "Cross-platform lib for process and system monitoring." optional = false python-versions = ">=3.6" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b"}, {file = "psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea"}, @@ -4363,12 +4469,12 @@ version = "0.7.0" description = "Run a subprocess in a pseudo terminal" optional = false python-versions = "*" -groups = ["dev"] -markers = "os_name != \"nt\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +groups = ["dev", "docs"] files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] +markers = {dev = "os_name != \"nt\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"", docs = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} [[package]] name = "pure-eval" @@ -4376,7 +4482,7 @@ version = "0.2.3" description = "Safely evaluate AST nodes without side effects" optional = false python-versions = "*" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, @@ -4390,13 +4496,13 @@ name = "pycparser" version = "3.0" description = "C parser in Python" optional = false -python-versions = ">=3.10" -groups = ["main", "dev"] +python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992"}, {file = "pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29"}, ] -markers = {main = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\"", dev = "implementation_name != \"PyPy\""} +markers = {main = "platform_python_implementation != \"PyPy\"", docs = "implementation_name == \"pypy\""} [[package]] name = "pydantic" @@ -4720,43 +4826,66 @@ optional = false python-versions = "*" groups = ["main"] files = [ - {file = "python_libsbml-5.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8f773307c40811b26045300da45f0ef157a8dc7797ce544344d192d86b8083f2"}, - {file = "python_libsbml-5.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b0f39a57383c74b50390f780a6ef61381fd538ae548dbc79e53e0428cd8227d2"}, - {file = "python_libsbml-5.21.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:39af5d7d58a2f5f3a9ea8ed38d8f55675e438a87364e1e583fe73e29bd2b4054"}, - {file = "python_libsbml-5.21.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d531163690b2848268e82588abe5be11901f1f869cb0864156ec501f23bbbf4d"}, - {file = "python_libsbml-5.21.0-cp310-cp310-win_amd64.whl", hash = "sha256:594dd6ea4a47eea4067c05edd39022d9c9a3eba1f31b2a32954423e18f7d6a5c"}, - {file = "python_libsbml-5.21.0-cp310-cp310-win_arm64.whl", hash = "sha256:7a5faf543dd6677de48d9a68faee9ac1e522ca9e89f18407d406c73a6e062093"}, - {file = "python_libsbml-5.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fb935fc94245476c2e5c106e1a635bf9afae6c6c8e842304a88866b692c89f5a"}, - {file = "python_libsbml-5.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74956d3f1c0ceb4203a2c4246e15dc7e7ad871b4eb5147bbf20304f0df9b22c0"}, - {file = "python_libsbml-5.21.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b8c97fa42fbe154b8ee90d78cb420b956dfc328a7fcd0708a98f7f5590f9e122"}, - {file = "python_libsbml-5.21.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:77a37128ce0b47edd1ccb713c61273a752f7fb2693619ba725b965eee0eaf75d"}, - {file = "python_libsbml-5.21.0-cp311-cp311-win_amd64.whl", hash = "sha256:e46032cdfb239060e10884c09025fc6a0cc95e0932f48ee96d69583ffb8666e6"}, - {file = "python_libsbml-5.21.0-cp311-cp311-win_arm64.whl", hash = "sha256:52c08c5c4dc5d6ce51f1f5775a2cffa4bb9873121f5c7e51515e1c7e8e33079d"}, - {file = "python_libsbml-5.21.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8e8c47b9a36ab0976b0c5b5166f2f8b8640d8812b43897ec3acd82c740a14bcd"}, - {file = "python_libsbml-5.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4df961bb5e2f6cd5a856ab92011188b50c0abac139f396c9418980288f74a648"}, - {file = "python_libsbml-5.21.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:01e9de2c43fc35627f92d9c1f9db713d5041b19ada8adafbcc4199a3bf0fa16d"}, - {file = "python_libsbml-5.21.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb452ab21aaf3d33014fc7c9b63c31f6e1d9bd472108f857a5b4651939361223"}, - {file = "python_libsbml-5.21.0-cp312-cp312-win_amd64.whl", hash = "sha256:44521032a3d310574160caae5d6d1b36772ee4b03413cd4cac7edc51c54a3b2a"}, - {file = "python_libsbml-5.21.0-cp312-cp312-win_arm64.whl", hash = "sha256:678f9761e6b78b866399f9ee007a3f613398eb69a7475b9d599fa1f5d5cbc15f"}, - {file = "python_libsbml-5.21.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:af8d17e9d86c884e64ab5b6d631bf805107044c72995eeb29f71c00e689e0158"}, - {file = "python_libsbml-5.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:18c6168603a8166ca12f9d93d8b91be7576bf2b785e42b4cfdbbc98c1a0351d9"}, - {file = "python_libsbml-5.21.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:82a4bbb19d7617da0149fe73d619b0ccd2d6280baeb2ce4e3539fbae3890549c"}, - {file = "python_libsbml-5.21.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:965ebbb4e9e7ecf371af6b664dbcefc0cd53591da4816b555375b4cbe3f92698"}, - {file = "python_libsbml-5.21.0-cp313-cp313-win_amd64.whl", hash = "sha256:731d3d678c36dbaccebf29294fa7d121d2adaa01ab4212b7385d8d41f92f9e6a"}, - {file = "python_libsbml-5.21.0-cp313-cp313-win_arm64.whl", hash = "sha256:5bccf78be32487e51e41624c2e7370e406e3c30d3f3606be236c8b03bfc3a479"}, - {file = "python_libsbml-5.21.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:407432d5680346d563820e103db6e04c7e6f3fcb74848f08344d26907bd66de1"}, - {file = "python_libsbml-5.21.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1eb3a66022b7042a54b81c1ef94866241ac5c4c7ad726cbf6527091a8905fb01"}, - {file = "python_libsbml-5.21.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8a82a31601ebbcfae643ade5dd1d62b5f3b73a1f9609d8293a646cc794329d5"}, - {file = "python_libsbml-5.21.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9dda34be9ea6d3020695a600e276ffa6b7c5d151c2f369fa7961f5adf0154610"}, - {file = "python_libsbml-5.21.0-cp314-cp314-win_amd64.whl", hash = "sha256:852b9e86cd469e68f22a67621f78ed7bdfad75094138691b3a81187b6550143c"}, - {file = "python_libsbml-5.21.0-cp314-cp314-win_arm64.whl", hash = "sha256:477545562c96ace7a236cfeb1fe520eee8056ad4fd2aea41ba56b483c33c9f18"}, - {file = "python_libsbml-5.21.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:144192e9eea3590e544e6d707e4f8cd9fbfdee635590059858962676dcd4348d"}, - {file = "python_libsbml-5.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef2b76c6b4a05ce06dfffc75227a9247359c369f727f16a18f76d82a7e0170ca"}, - {file = "python_libsbml-5.21.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:196ac085eca791de6f5128a58f9cf2bf791d71cc1955f8542623b917a1bfeaf0"}, - {file = "python_libsbml-5.21.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7a8f167308c819f89a755bc0f8b39fd8d07ee2ea0f70fb1c3571da80c4791789"}, - {file = "python_libsbml-5.21.0-cp39-cp39-win_amd64.whl", hash = "sha256:8c7269da3d2689943e3a888abf3e617b3778fb64b01d5c1c11116c9fae6c395e"}, - {file = "python_libsbml-5.21.0-cp39-cp39-win_arm64.whl", hash = "sha256:dfbe30b41c29e8ae8b9495077f65abf0a6f966c89d5ca134f4924a2965de6308"}, - {file = "python_libsbml-5.21.0.tar.gz", hash = "sha256:d39a3efff063fd8b9064f6f102d73928d43918f9f0e6afec8c6b7d8eeba1d4a1"}, + {file = "python_libsbml-5.20.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2c7a271cdaef200fe66f92ceefb85bb0dc647fa4fe966cec84af7efb685e93fd"}, + {file = "python_libsbml-5.20.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a69d9130148fc7aa85b4c42f804c6111c167711d39ed3a64145d15cb0296ec57"}, + {file = "python_libsbml-5.20.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0a9f71d4a6ff17d4ec282f64f15279b30b9e0ec2becba5c3fb8d466df8eeb77"}, + {file = "python_libsbml-5.20.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa145c81690ba5f218702a9526eefd135cb95016142144b986c6e8fab056fe6"}, + {file = "python_libsbml-5.20.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e3fc4581ced13a6b817869ae01419efae4bbacaa2fd24483017fe6b4116d8a1"}, + {file = "python_libsbml-5.20.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d8e7f62372cda654bc53c15b7187aa06a41b8b5a0287d6fcfb4e5ab826ab1cc9"}, + {file = "python_libsbml-5.20.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9cb6ea007c848671ce419ebef870df374e7e2ef4c63392e1f6d4bfe4e2131a63"}, + {file = "python_libsbml-5.20.4-cp310-cp310-win32.whl", hash = "sha256:a8f76d1992366abd1970a9a12e5df7ae9da1e5f542cca058e370bd170d3fe381"}, + {file = "python_libsbml-5.20.4-cp310-cp310-win_amd64.whl", hash = "sha256:3bc3e2d2a077d4c7d1896e589dfe02fa663954fa1ea5e2f04a412549cc005135"}, + {file = "python_libsbml-5.20.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fcec0a0d2077c80d946f678900b3cbfa3180d1f958d7f91e79cdaa36d23831c6"}, + {file = "python_libsbml-5.20.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:57afb1de6af349da4db279376f167ae5274018481aeda0192481e1333d64fd98"}, + {file = "python_libsbml-5.20.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c9880a45513b0db4b799dbfb34bfa4ff64b9230ce71ceec7dfdfbe54f13c301"}, + {file = "python_libsbml-5.20.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9f36f16fe819193e3b941bb055a09b1e380c147e9a922fd9365f4d2078556ba"}, + {file = "python_libsbml-5.20.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecace54a0a46761b3060869c8d949b7c5c805334eeb1d2a668162860c6c3d7b6"}, + {file = "python_libsbml-5.20.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:570319329110a2ed6695963c9f28436ccb16a5d91df8f411d2f06e5e075590e1"}, + {file = "python_libsbml-5.20.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d51edbc94c306dcd70a23de221fafc76b905155d8e6f931ef1014dc9904e51c6"}, + {file = "python_libsbml-5.20.4-cp311-cp311-win32.whl", hash = "sha256:12902ecbee2fa47b3b7a9525f06a996fa3cfb1859a441fe84008d53fc9d9f4a4"}, + {file = "python_libsbml-5.20.4-cp311-cp311-win_amd64.whl", hash = "sha256:f568008f07d58769f974a11b272651af8e01d0dca7050081b23c8c9b07218c64"}, + {file = "python_libsbml-5.20.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9ad98ad3745c84bee3ee34c24b873be9cf3ba5329da5b481c72db60bf355bec5"}, + {file = "python_libsbml-5.20.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d0c54eec94a84c270330c2fcff0c48af07d30d9b6fd2d750f9c01b61acf6c514"}, + {file = "python_libsbml-5.20.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4963363f5f0873bbbc2303a189b462f897ca62fe4a164a142ec6878e8f3c6b41"}, + {file = "python_libsbml-5.20.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7db73d38dc3e09855780d5756009b511b601fd8aca04807d7d06dbfc400331b6"}, + {file = "python_libsbml-5.20.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:269f616a63a5e46b863bb5d75370ccff90d719e42af96a3e7a87825364ad2556"}, + {file = "python_libsbml-5.20.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fefe7651f8981be20f499020139f07bc14e00c1a04f968eeb26e7d60e359dbbd"}, + {file = "python_libsbml-5.20.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b1ef224f746aac4e1b0f917113b6334abd2fa3eb63bde41149a1b006bacfba81"}, + {file = "python_libsbml-5.20.4-cp312-cp312-win32.whl", hash = "sha256:b5cc68b5fe6d139a4557cba9d9913b3e196582bdb7975bea6a2c25faaecdfadb"}, + {file = "python_libsbml-5.20.4-cp312-cp312-win_amd64.whl", hash = "sha256:40c5e9ec86c467b4f325b5365ca369ecc1c9ced608e390d3cc1726f79da68968"}, + {file = "python_libsbml-5.20.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:233c01e17a0750ea73411ce79b069bf113968cabeb88d61fc9378d068c4c585c"}, + {file = "python_libsbml-5.20.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6e8c99146b15b0c5c9aabb6ec85e30489a1b8105cf7d2483b44e0407d7d04309"}, + {file = "python_libsbml-5.20.4-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cde96e40eb6809de40443e28f8242674842e2cfbb9c84d2c28321f553fbd344e"}, + {file = "python_libsbml-5.20.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ff1eb26b1d39531c80813ed9c18f9dc6aca66e437a81131bd0ed1c97371df11"}, + {file = "python_libsbml-5.20.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:576d6a64d3bd04803db160d992b7e6ac9be4bc2ba735a3a33fa623ca4e86fe09"}, + {file = "python_libsbml-5.20.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2c0d0eddb043a5065abead423dec089d99191727a0f6505ddd2c942512a4307d"}, + {file = "python_libsbml-5.20.4-cp313-cp313-win32.whl", hash = "sha256:1c5539b2189e38e5b39c34eafe1ef86ffb9179ece91c48623a48412cb88a6f5c"}, + {file = "python_libsbml-5.20.4-cp313-cp313-win_amd64.whl", hash = "sha256:aac5a989e24341713e3c2fd126c6deebdb062adb287b41a45c48c72a4bd828ca"}, + {file = "python_libsbml-5.20.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeecfffa72f94ac74475180f1046feb019b30ec86f9ef435c31e4585a0762f4"}, + {file = "python_libsbml-5.20.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd57cc81dc508c42c0bed66e6aed67b8dc2d3b56802d56192be418bf032a175"}, + {file = "python_libsbml-5.20.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:56402db093a38adb35b985a0c31b8875b360aeba04f29e5675be9a691a6911bf"}, + {file = "python_libsbml-5.20.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f63acf824d6ac977916059fd963f7287183c68c958aaacba8c4d0a02ed1f1c1f"}, + {file = "python_libsbml-5.20.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13f0a8b84e69f99ded9ed7caa8bcd3218d14f0e48f3c46544e6aaa9c2d14801c"}, + {file = "python_libsbml-5.20.4-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e64d3a6e898882021f33ace42ed702d43cb513edf425101de4b0e2a8674bebf"}, + {file = "python_libsbml-5.20.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:153e741386da5326b480e8a1c1dd19c780b44491a5fb85e3112ea601c3517c6c"}, + {file = "python_libsbml-5.20.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:58aaf8e368274572f10a213969212430a7b7bd85ae667f1c196ece947c048758"}, + {file = "python_libsbml-5.20.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0554b6651e3876d6d61829df781043c00553d4d166de8b38d0c319b1cd0e3500"}, + {file = "python_libsbml-5.20.4-cp38-cp38-win32.whl", hash = "sha256:1639253977ab8f4c3892322b04a4f2bd52d9a161184beb3cd1080c599df441fc"}, + {file = "python_libsbml-5.20.4-cp38-cp38-win_amd64.whl", hash = "sha256:997c61052c9c5c5f9cd7a698b5c0d8d59c72c6b2857d3351e71578035e587c47"}, + {file = "python_libsbml-5.20.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:58dbe1413e4502b25dc591152646d493bce3f73d382dcc69fd760bd951ecb4ab"}, + {file = "python_libsbml-5.20.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:579a4f877ac0e3d40cf4b3352ab48bd4a4c849ceafdb9d175e62d527a7da1711"}, + {file = "python_libsbml-5.20.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28af60d5d4873f43ac67f9f48822dc8c33d257b8b66552f06a50dcc5cb49e696"}, + {file = "python_libsbml-5.20.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d5c9a214f93cf1f6ff71855cb9f38950d506e1cad6d3d89f6491ebb17813150e"}, + {file = "python_libsbml-5.20.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d572f0f3991f00bf742aef79b5067c2a1f53aaea0db41bf7004adace9cf17f87"}, + {file = "python_libsbml-5.20.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:50d6422c78bbf1bed373a3528370752f2e4a3843758ab03506dbf0b8e305a8f4"}, + {file = "python_libsbml-5.20.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b25c23f71ea1e257c1354a6d62a1f80981664aa60450651774833d864848d956"}, + {file = "python_libsbml-5.20.4-cp39-cp39-win32.whl", hash = "sha256:f5dbfa3cd086c751550b1d0f1e51bbe008d79bd66a42d5b472172544b6145ab1"}, + {file = "python_libsbml-5.20.4-cp39-cp39-win_amd64.whl", hash = "sha256:0599b57885b98b1bd5aac8575ff9be78b6eaded6dd0b652165604468f6e0853b"}, + {file = "python_libsbml-5.20.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f15a361aadb2c49fa7eb952818be1cfe3de30f5767e20ee6f03189743427e64"}, + {file = "python_libsbml-5.20.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2380e3f61ea136e6657ff4a1511a6526b5c604f150fb91cc3d7dd8e60428d98c"}, + {file = "python_libsbml-5.20.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9ba53f103b9d3d8e8a8f005b7750bd821776d2d97a427f080b330822d45c5d6"}, + {file = "python_libsbml-5.20.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:207a6cd61928ebefa7c0fffd6d257c1273704d8cfa9164175557b7d302ac1e5a"}, + {file = "python_libsbml-5.20.4.tar.gz", hash = "sha256:b055f98fe65be258ae266fde343157cbf41e3ed3fc19b3698f2a66afc74cdaf8"}, ] [[package]] @@ -4808,6 +4937,33 @@ colormaps = ["cmocean", "colorcet"] io = ["imageio", "meshio (>=5.2)"] jupyter = ["ipywidgets", "jupyter-server-proxy", "nest_asyncio", "trame (>=2.5.2)", "trame-client (>=2.12.7)", "trame-server (>=2.11.7)", "trame-vtk (>=2.5.8)", "trame-vuetify (>=2.3.1)"] +[[package]] +name = "pywin32" +version = "310" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +groups = ["dev", "docs"] +markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "pywin32-310-cp310-cp310-win32.whl", hash = "sha256:6dd97011efc8bf51d6793a82292419eba2c71cf8e7250cfac03bba284454abc1"}, + {file = "pywin32-310-cp310-cp310-win_amd64.whl", hash = "sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d"}, + {file = "pywin32-310-cp310-cp310-win_arm64.whl", hash = "sha256:33babed0cf0c92a6f94cc6cc13546ab24ee13e3e800e61ed87609ab91e4c8213"}, + {file = "pywin32-310-cp311-cp311-win32.whl", hash = "sha256:1e765f9564e83011a63321bb9d27ec456a0ed90d3732c4b2e312b855365ed8bd"}, + {file = "pywin32-310-cp311-cp311-win_amd64.whl", hash = "sha256:126298077a9d7c95c53823934f000599f66ec9296b09167810eb24875f32689c"}, + {file = "pywin32-310-cp311-cp311-win_arm64.whl", hash = "sha256:19ec5fc9b1d51c4350be7bb00760ffce46e6c95eaf2f0b2f1150657b1a43c582"}, + {file = "pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d"}, + {file = "pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060"}, + {file = "pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966"}, + {file = "pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab"}, + {file = "pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e"}, + {file = "pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33"}, + {file = "pywin32-310-cp38-cp38-win32.whl", hash = "sha256:0867beb8addefa2e3979d4084352e4ac6e991ca45373390775f7084cc0209b9c"}, + {file = "pywin32-310-cp38-cp38-win_amd64.whl", hash = "sha256:30f0a9b3138fb5e07eb4973b7077e1883f558e40c578c6925acc7a94c34eaa36"}, + {file = "pywin32-310-cp39-cp39-win32.whl", hash = "sha256:851c8d927af0d879221e616ae1f66145253537bbdd321a77e8ef701b443a9a1a"}, + {file = "pywin32-310-cp39-cp39-win_amd64.whl", hash = "sha256:96867217335559ac619f00ad70e513c0fcf84b8a3af9fc2bba3b59b97da70475"}, +] + [[package]] name = "pywinpty" version = "3.0.3" @@ -4939,7 +5095,7 @@ version = "27.1.0" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4"}, {file = "pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556"}, @@ -5043,8 +5199,8 @@ name = "referencing" version = "0.37.0" description = "JSON Referencing + Python" optional = false -python-versions = ">=3.10" -groups = ["dev"] +python-versions = ">=3.9" +groups = ["dev", "docs"] files = [ {file = "referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231"}, {file = "referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8"}, @@ -5165,8 +5321,8 @@ name = "rpds-py" version = "0.30.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false -python-versions = ">=3.10" -groups = ["dev"] +python-versions = ">=3.9" +groups = ["dev", "docs"] files = [ {file = "rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288"}, {file = "rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00"}, @@ -5366,8 +5522,8 @@ name = "soupsieve" version = "2.8.3" description = "A modern CSS selector implementation for Beautiful Soup." optional = false -python-versions = ">=3.9" -groups = ["dev"] +python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95"}, {file = "soupsieve-2.8.3.tar.gz", hash = "sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349"}, @@ -5379,7 +5535,7 @@ version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" optional = false python-versions = "*" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, @@ -5478,7 +5634,7 @@ version = "1.4.0" description = "A tiny CSS parser" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, @@ -5508,8 +5664,8 @@ name = "tornado" version = "6.5.4" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false -python-versions = ">=3.9" -groups = ["dev"] +python-versions = ">=3.8" +groups = ["dev", "docs"] files = [ {file = "tornado-6.5.4-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d6241c1a16b1c9e4cc28148b1cda97dd1c6cb4fb7068ac1bedc610768dff0ba9"}, {file = "tornado-6.5.4-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2d50f63dda1d2cac3ae1fa23d254e16b5e38153758470e9956cbc3d813d40843"}, @@ -5557,7 +5713,7 @@ version = "5.14.3" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, @@ -5736,8 +5892,8 @@ name = "typing-extensions" version = "4.15.0" description = "Backported and Experimental Type Hints for Python 3.9+" optional = false -python-versions = ">=3.9" -groups = ["main", "dev"] +python-versions = ">=3.8" +groups = ["main", "dev", "docs"] files = [ {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, @@ -5911,8 +6067,8 @@ name = "wcwidth" version = "0.6.0" description = "Measures the displayed width of unicode strings in a terminal" optional = false -python-versions = ">=3.8" -groups = ["dev"] +python-versions = "*" +groups = ["dev", "docs"] files = [ {file = "wcwidth-0.6.0-py3-none-any.whl", hash = "sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad"}, {file = "wcwidth-0.6.0.tar.gz", hash = "sha256:cdc4e4262d6ef9a1a57e018384cbeb1208d8abbc64176027e2c2455c81313159"}, @@ -5936,7 +6092,7 @@ version = "0.5.1" description = "Character encoding aliases for legacy web content" optional = false python-versions = "*" -groups = ["dev"] +groups = ["dev", "docs"] files = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, @@ -6262,4 +6418,4 @@ jupyter = ["ipytree (>=0.2.2)", "ipywidgets (>=8.0.0)", "notebook"] [metadata] lock-version = "2.1" python-versions = ">=3.11,<4.0" -content-hash = "19b8d423dff33092ebae00512fb713616f84059c43774462668bcacd34bdb0ff" +content-hash = "ba13b51a18032c49715310160c5196348b033ee2fc84a1838accd679868f96ce" diff --git a/pyproject.toml b/pyproject.toml index 9b220ee..71c0c12 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -59,6 +59,7 @@ mkdocs = "^1.6.1" mkdocs-material = "^9.5.50" mkdocstrings = {extras = ["python"], version = "^0.27.0"} griffe = "^1.5.5" +mkdocs-jupyter = "^0.25.1" [build-system] requires = ["poetry-core>=1.0.0"] From 3a017f6b0abb8e0b2587f7bd2e0c4d7216d9c978 Mon Sep 17 00:00:00 2001 From: jcschaff Date: Sat, 7 Mar 2026 22:47:21 -0500 Subject: [PATCH 06/24] fixed zarr_writer to consider domain masks when computing statistics --- pyvcell/_internal/simdata/zarr_writer.py | 27 ++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/pyvcell/_internal/simdata/zarr_writer.py b/pyvcell/_internal/simdata/zarr_writer.py index 13d66f6..ac05ae3 100644 --- a/pyvcell/_internal/simdata/zarr_writer.py +++ b/pyvcell/_internal/simdata/zarr_writer.py @@ -49,6 +49,17 @@ def write_zarr(pde_dataset: PdeDataSet, data_functions: DataFunctions, mesh: Car y_map: NDArray3D = zeros + y[np.newaxis, :, np.newaxis] z_map: NDArray3D = zeros + z[:, np.newaxis, np.newaxis] + # Pre-compute domain masks: domain_name -> boolean array over (num_z, num_y, num_x) + region_map_flat = mesh.volume_region_map + _domain_masks: dict[str, np.ndarray] = {} + + def _get_domain_mask(dname: str) -> np.ndarray: + if dname not in _domain_masks: + vol_reg_ids = mesh.get_volume_region_ids(volume_domain_name=dname) + mask_flat = np.isin(region_map_flat, list(vol_reg_ids)) + _domain_masks[dname] = mask_flat.reshape((num_z, num_y, num_x)) + return _domain_masks[dname] + channel_metadata: list[dict[str, Any]] = [] for t in range(num_t): bindings = {} @@ -124,9 +135,11 @@ def write_zarr(pde_dataset: PdeDataSet, data_functions: DataFunctions, mesh: Car "max_values": [], "mean_values": [], }) - channel_metadata[c]["min_values"].append(np.min(var_data)) - channel_metadata[c]["max_values"].append(np.max(var_data)) - channel_metadata[c]["mean_values"].append(np.mean(var_data)) + domain_mask = _get_domain_mask(domain_name) + masked = var_data[domain_mask] + channel_metadata[c]["min_values"].append(float(np.min(masked))) + channel_metadata[c]["max_values"].append(float(np.max(masked))) + channel_metadata[c]["mean_values"].append(float(np.mean(masked))) c = c + 1 # add volumetric functions @@ -144,9 +157,11 @@ def write_zarr(pde_dataset: PdeDataSet, data_functions: DataFunctions, mesh: Car "max_values": [], "mean_values": [], }) - channel_metadata[c]["min_values"].append(float(np.min(func_data))) - channel_metadata[c]["max_values"].append(float(np.max(func_data))) - channel_metadata[c]["mean_values"].append(float(np.mean(func_data))) + domain_mask = _get_domain_mask(domain_name) + masked = func_data[domain_mask] + channel_metadata[c]["min_values"].append(float(np.min(masked))) + channel_metadata[c]["max_values"].append(float(np.max(masked))) + channel_metadata[c]["mean_values"].append(float(np.mean(masked))) c = c + 1 z1.attrs["metadata"] = { From 777f2a0f0852f592141a0e14bb04da157955435d Mon Sep 17 00:00:00 2001 From: jcschaff Date: Sat, 7 Mar 2026 23:09:11 -0500 Subject: [PATCH 07/24] improve models for complex-geometries and building-a-model guides --- docs/guides/building-a-model.md | 22 +- docs/guides/complex-geometries.md | 24 +- .../guides/images/building-concentrations.png | Bin 34895 -> 39238 bytes docs/guides/images/building-slice3d-A.png | Bin 156700 -> 155818 bytes docs/guides/images/complex-concentrations.png | Bin 32237 -> 39131 bytes docs/guides/images/complex-slice3d-A.png | Bin 129327 -> 128150 bytes docs/guides/notebooks/building-a-model.ipynb | 231 +++++++++----- .../guides/notebooks/complex-geometries.ipynb | 235 +++++++++----- docs/guides/notebooks/visualization.ipynb | 286 +++++++++--------- 9 files changed, 472 insertions(+), 326 deletions(-) diff --git a/docs/guides/building-a-model.md b/docs/guides/building-a-model.md index 2aa2374..774ac3a 100644 --- a/docs/guides/building-a-model.md +++ b/docs/guides/building-a-model.md @@ -19,10 +19,10 @@ antimony_str = """ compartment pm = 1; species A in cell; species B in cell; - J0: A -> B; k1*A - k2*B + J0: A -> B; cell * (k1*A - k2*B) J0 in cell; - k1 = 0.1; k2 = 0.2 + k1 = 5.0; k2 = 2.0 A = 10 """ @@ -42,7 +42,7 @@ print(model) # reactions=['J0'], parameters=['k1', 'k2']) print(model.parameter_values) -# {'k1': 0.1, 'k2': 0.2} +# {'k1': 5.0, 'k2': 2.0} ``` ## Create a 3D geometry @@ -72,8 +72,8 @@ app.map_compartment("cell", "cell_domain") app.map_compartment("ec", "ec_domain") # Map species with initial conditions and diffusion coefficients -app.map_species("A", init_conc="sin(x)", diff_coef=1.0) -app.map_species("B", init_conc="cos(x+y+z)", diff_coef=1.0) +app.map_species("A", init_conc="3+sin(x)", diff_coef=1.0) +app.map_species("B", init_conc="2+cos(x+y+z)", diff_coef=1.0) ``` Initial concentrations can be constants (e.g., `10.0`) or spatial expressions using `x`, `y`, `z` coordinates. @@ -84,7 +84,7 @@ Initial concentrations can be constants (e.g., `10.0`) or spatial expressions us sim = app.add_sim( name="sim1", duration=2.0, - output_time_step=0.5, + output_time_step=0.05, mesh_size=(50, 50, 50), ) @@ -115,9 +115,9 @@ antimony_str = """ compartment pm = 1; species A in cell; species B in cell; - J0: A -> B; k1*A - k2*B + J0: A -> B; cell * (k1*A - k2*B) J0 in cell; - k1 = 0.1; k2 = 0.2 + k1 = 5.0; k2 = 2.0 A = 10 """ biomodel = vc.load_antimony_str(antimony_str) @@ -134,11 +134,11 @@ geo.add_surface(name="pm_domain", sub_volume_1="cell_domain", sub_volume_2="ec_d app = biomodel.add_application("app1", geometry=geo) app.map_compartment("cell", "cell_domain") app.map_compartment("ec", "ec_domain") -app.map_species("A", init_conc="sin(x)", diff_coef=1.0) -app.map_species("B", init_conc="cos(x+y+z)", diff_coef=1.0) +app.map_species("A", init_conc="3+sin(x)", diff_coef=1.0) +app.map_species("B", init_conc="2+cos(x+y+z)", diff_coef=1.0) # 4. Simulate -sim = app.add_sim(name="sim1", duration=2.0, output_time_step=0.5, mesh_size=(50, 50, 50)) +sim = app.add_sim(name="sim1", duration=2.0, output_time_step=0.05, mesh_size=(50, 50, 50)) results = vc.simulate(biomodel=biomodel, simulation="sim1") # 5. Visualize diff --git a/docs/guides/complex-geometries.md b/docs/guides/complex-geometries.md index 3579888..4035f0a 100644 --- a/docs/guides/complex-geometries.md +++ b/docs/guides/complex-geometries.md @@ -22,9 +22,9 @@ antimony_str = """ compartment nuc_env = 40; species A in cell; species B in cell; - J0: A -> B; k1*A - k2*B + J0: A -> B; cell * (k1*A - k2*B) J0 in cell; - k1 = 0.1; k2 = 0.2 + k1 = 5.0; k2 = 2.0 A = 10 """ @@ -77,14 +77,14 @@ app.map_compartment("nuc_env", "Nucleus_cytosol_membrane") app.map_compartment("pm", "cytosol_ec_membrane") # Set species initial conditions and diffusion -app.map_species("A", init_conc="sin(0.2*x)", diff_coef=1.0) -app.map_species("B", init_conc="cos(0.2*(x+y+z))", diff_coef=1.0) +app.map_species("A", init_conc="3+sin(0.2*x)", diff_coef=1.0) +app.map_species("B", init_conc="2+cos(0.2*(x+y+z))", diff_coef=1.0) ``` ## Simulate and visualize ```python -sim = app.add_sim(name="sim1", duration=2.0, output_time_step=0.5, mesh_size=(50, 50, 50)) +sim = app.add_sim(name="sim1", duration=2.0, output_time_step=0.05, mesh_size=(50, 50, 50)) results = vc.simulate(biomodel=biomodel, simulation="sim1") results.plotter.plot_concentrations() @@ -145,9 +145,9 @@ antimony_str = """ compartment nuc_env = 40; species A in cell; species B in cell; - J0: A -> B; k1*A - k2*B + J0: A -> B; cell * (k1*A - k2*B) J0 in cell; - k1 = 0.1; k2 = 0.2 + k1 = 5.0; k2 = 2.0 A = 10 """ biomodel = vc.load_antimony_str(antimony_str) @@ -169,11 +169,11 @@ app.map_compartment("ec", "ec") app.map_compartment("nuc", "Nucleus") app.map_compartment("nuc_env", "Nucleus_cytosol_membrane") app.map_compartment("pm", "cytosol_ec_membrane") -app.map_species("A", init_conc="sin(0.2*x)", diff_coef=1.0) -app.map_species("B", init_conc="cos(0.2*(x+y+z))", diff_coef=1.0) +app.map_species("A", init_conc="3+sin(0.2*x)", diff_coef=1.0) +app.map_species("B", init_conc="2+cos(0.2*(x+y+z))", diff_coef=1.0) # 4. Simulate -sim = app.add_sim(name="sim1", duration=2.0, output_time_step=0.5, mesh_size=(50, 50, 50)) +sim = app.add_sim(name="sim1", duration=2.0, output_time_step=0.05, mesh_size=(50, 50, 50)) results = vc.simulate(biomodel=biomodel, simulation="sim1") # 5. Visualize @@ -181,6 +181,10 @@ results.plotter.plot_concentrations() results.plotter.plot_slice_3d(time_index=0, channel_id="A") ``` +![Concentration time series](images/complex-concentrations.png) + +![3D slice of species A](images/complex-slice3d-A.png) + !!! tip "Interactive tutorial" See the [Complex Geometries tutorial](notebooks/complex-geometries.ipynb) for a runnable notebook with visual output, or the [sysbio-3-geometry notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-3-geometry.ipynb) for the course version. diff --git a/docs/guides/images/building-concentrations.png b/docs/guides/images/building-concentrations.png index 2c2dc68fdc261e80c0f5ae9b0702f9d20f094fd4..7bc3ea55157655dd14c939d89c553ef869aa0db4 100644 GIT binary patch literal 39238 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%0ANPmRPu9?3DKmnRqsEtp-QdZUI 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 F(`UP3T37^0x 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

  • MYYYli$n7EW>K8}hY%lAf7n8*AiQ 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

    `18m;bGFk94Z^Zp9*Fcuq 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�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 diff --git a/docs/guides/images/complex-concentrations.png b/docs/guides/images/complex-concentrations.png index 2213082f85b106ca915799c62386d9042e00165d..6e4e755f6e28ce22b976ef35ff0570f6c5998d63 100644 GIT binary patch literal 39131 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 literal 32237 zcmeFZXH-;c*DZ(yGa#s-NKy%+0+Mr3Kr$#GIVd@Ur-5?Ol66VXe95oa+gBpdw3pn&vbC0RgGJ zoU|GN0g)pC0b%yZMI=I+c88f<>IXPQ7 z*z<63-QnQ6&1mW3;^-{Q$!YiRPjEOmS#UZ#98AMqPC3fyI1><1QzCzkS)_Kuclqkb zOW)P-NWzVrh*R&~#IKN?MdPpCae0t%A@^Ev=*if(jG<}`Hff=u>FFo+Db7WF>c97p z_?@AQ^e2tEXBXzWU!>tL$JKNU9(u2;G_6N9B~9&mro=g_I5~Y`J-?QS#t-J|bHpmb z*Ao!18Cn~q9{r8c?j`m6s7m)8fWWht0(yf)^WoIAu=FW%Hx-pCamEH-Iur8eht z9G5goee1J1VBxgAYGyU?B};T`{CTZ7-PVdXspMn%X{Sp4TJci^%UU$QgFPLR{P zI4CCa7nrss^!ikilasqUIE+-4w#IQub!RDJGfG_fabLaGyJXvN(aUxGI9DORy$Yoi zQ5|9TMcT>z=9pU+g?0OzdbtlX?sKPHt=TtB6mUpcUm7!7tX>k|-sm@qS~+`ci^pr6 zpk9%RU6)B!VjneJ=`8DnZD)6=-Off?VeTu$a^M!@hl)*t=8_WypQg7ai}bIzQj8O} z9PID<`kr2n)GW}AKSS_41SY|7x!=fNzVR)cvWNG0;E5@0s{i|MFVDzUsV4ARWx}}3 ztoG?S$oCf-_`21?%v`=@KzR=4mlYy*g`t=~2%z)uTfFO4EbA?MN~2P0QW( z6fqk@!|l~+X6KpKne_7AjRn@jy*1U>&Mx^Am%Q|r`m5a?*bHkbgmU(_*IIZwM9*6+ zg_Eu9tu!*UiE_{#e=qLq)s!euq>-noJnFY=H&9{`-q>hR?WQcgJ#{|Upt{V{Zl~g! zOlTZ-xZ-IB4x9h|V!>6rX5qK4A%ZU+VsFot9VexU^S2?l%((xC$*9&R5++E_IbnTc zuI>uI?G0wd_tCE}^C*E}-_EX((1DaKl2qav=clsk;^ug%T( z*f4;perr&)|E`A4p>(Qs^#{Gr>2Zs;@wg z8uwH-oZfZJ0ya^h&-QBkP&~JpQt*XmnfhaYiIwK+W4 zf7fo-5KJ*6RDcgiap+kK`6b-<=}}&KX;V`as{w3m$1zsBK~&-2fs*ROf(|aXzuMsv z5(~qPZ?0fJ>6B#eu2A^2f_xtxTBufMcys=$~J&){SNzn%4F zsofC&Pm`dapz2U+PWwdx$MJf(-Nlh=3%?YKvDlr2_3Z-xSa!WW*T27uEgNw?xlsd$ z-_CGW45F+i?WOhy7B;4uq9%PtPI(s1t*ndhlmy?L*j$$b7b`ULwf}s2nDNTfr}xt%6VeAyUp|W?93H85ANi_S*Q1)q-zHiv z?6dWG!RT-&R^$b{K^5;$Y=2qL2O<9hAAH9>sT{wj<%4&>Yv0p3cEg~`g++R_;^}u= z3Fn#Dc{crpi~Sq0(q+AdVG)lku?|6ChnW69Czod>z{8V zB?d-`Wlv&mJ{p#wCiSM!xhiK=QcEtezpmaNb4#nW7Va01ckpSzqp4B}awPOfpB!#? z_zz2**!T5YZDMWnBekJf<~DD&{Fc<)4q1TriQ1An%CgI{=n<@guD_fQ(_bv?F4ei$ z_34${S5n>9eq6S2@Sa`o=YlJd+-1mik9ii(WE=9%GWFdms+l+-EHnzu*nunBj4&JG zFeu?%XW>cO_n5^$y*xu*wUp5qI=fI*=jI=1_{CJdrek1d;^1#d$4`$`NFDLJNHpqm zR@k z=O=Wi7XxX~sba{J_)4pYaQ5-(rl>~Z<6)y^Uh&3Wf9nqS9ZC-W1Tnnbr0@Ei@q{Hi zWfHP)m3KhK!Mpm?j$R?TSnf)qB*Rx{FH_ppy($Ps<5K+Y2a(Y^ErsvU_eiX2-_<(2 zG!=3{rqhuoh9yV}gi!Rj_Uz1n0a}>Il~t@54R@6<#t^RqpZ6#Ln<4B+IthkeXA-9)+UY9oy&U)4XTZk zzQ@KntK3Llq8jr2DT8I~EixJ#KERcaHQ4i5wDa~0hd;p1%3Qo~feFSX&AZT03D;F- zr-xS~p_tRZFIF~)_I6KiR~~ylQsuhlk^1%diA0-Z)~y!Kx{C4zAHL-47HxB(3TF!baRk$&Q3^I_)$wL8c^x-x%2W z2}9u$2Oh8S-V-6Lrd!K@Sa|16P~);1d^UaSTiT=qJIn_?x$28pHTR{_7-Y8(+xO+` z)O2_bmD#a0u&D-qKhM6N_Cr3>t34#m$fwj%Uf<=I8!62o3yq*_ZqP@S6j3&}p(A#* z*K~uK=65xR^!nv`9%Enz0fw5J=rF5qlBmDam+ zdxu$&g(6RH-b9o{5ce)PsBPeJ~DNbX7J_!rEKbr^BO~ebU*!Z&#g2 zzsDKV9KK`NyUcGl$b0$D;{fl}-dj0=oU(6e>Bme4M^~)Y;zo^DPAxVui%X<7?42zr z>$a}&lDE}6Cg*wS-YEip4CNt}!N(yh;~hnReH8UCr-eRtp0m7#VUO;OP@}Ln`3IfT z{wOcyFymb9BX3RH4X)0NKbi&>wLd{oh+kAg8sHaRnO#dQ}7ZO-40DE zUQ0=lr(vT6e?n7lPVLx=Ro>R^Gy+C50Mh|&*T`;R_{J%(8u_RCHE*3YZ zYjBEA^WsyvM2WMFUuG`O(-wt`@BBJj`C3^2fmBktwnWEozk|VDi?&LocEhZ#B)x|H zl=imMmNc&g>;|V&^m4@Hg_Sh1B0tyZ*Mjh|sBOvb-W|>Lz*D3(J0Dzan@olyX(DTKcS(+j{W+K7MRQ zmm2rhDy4U(EpbvbwIL;}-8*yvTO_6=Y|&+XIAxqX1PQ(Mfx4>8S64dm%a}?l#DO#v14)3>4R?=YNI%nH#Fkj3u{|EylBwFwop?Cj#K2k0BD@kFJ3E>;$o>y1rz zw-xiJ8_j;nf^xt6d^(uodTZ=V@Smsavt3=y%l-hzvn|6$wY;@Zq}N_00kmrYESUKy zPqQpY#m+hJ!~-cAHShZ<4fM`@UeOf9L>K?By?6F^7K#$*Qz_2$Nt=;;0_ZNAckU9y z;G!mpe8JC;=t|AB)9eRnyL`iJVzE=1Vkk{c=Z+LHv%RgA#cP)a#W~UIk*x`QEp#rW zze8DfWKZwM&)w;4PZp`p}D%iWO9othsTx2Ano_{0znjnE1qY8GWoy`!)5+OWo_H+pr+xL@a3OuQ~jR`S?EgM#`; z-w;=bUGW@(dFOlcsOM-mw!fG*O^o)z3bzd3UF(oAfb#O`n5gqbdYq-?_gGD%m%VIy&%Ezs_2E}Gnu_- zUGEy;E_RNd#Km-{@ZhGsme6?9v0C5kpdUBsDOZYSt5m7W`dmw0YTx-``-hN{bwI1g zP^>7an#>m?q^Ub&a7MxM$tgPP7&dhlj8r<>Z*Y<-CMA*MX8v~(S201cx9_?7*ZTU4 z!US!?-9yu-uRt$QO!bqt3rq}vzWDIYE;g?rMh=l%4UW#PR4sMoWGPBH&yjD#JtucPG7t!m#q}f1j`>mBrS;!wQSgq)bc;Q$jdFW z9us@9x``Xg-gUubE318eeAlWg{Uxo4n-Ys^%56YY{6mV-Hz*;{C! zM@BDt17KxzTcSWBL6+F#!SmEcZ)o_q8CQAM zmfuz~2^7Vce-v>Pf@hHOZM zU3o>$uvkl%>hxi74QsV(3iD^yohk1$=8KOXt$@oF9UUDB4KKq@3H&d97ITCs6MIXm zP_8MGISZJNuFZ10p+0?1UDS<%4rT10IZ-< z5@bqB?@dBd%fO|Id6!iJc#rRI|2pj?AIo823e?f+_;d1RpjIMz>8X%!@;~#NAP21v z8{tlQwfoXy%3AjQH#BB_{&_}qwZNdYp?x8@suk)B&5hO7v132HRB)-tq<02>E)sH? z-rF;9mwE{jmy6B#F@GZ{%&)=@j({mvM0;(tRyhC(`5ub<=1lphYahgxQE%|@RdeaA|&`zY5j za`-L+Lg9L|UlDhK$zTS=A2Wx^X#pOP87Q6ZN@t79q8^T~!+aVw)}@~tNh2A!%mD4x z>${6Ax}mzgRmInhz0QE@;7%uJuSUNI{-YV#nkm>vK!nm^Z1_D_O~e1#jn@a7j}At& zsT&Vd4`l%md-qI7A0NJR33-M<_Hm+rVk^miM@mz4$|yznxQLInEho-w_I4f`wUUI$ z{wsd{r$sbshsn1pQ2-jN!Ah-iJ&|uu7Y4O$V-)S}>qfStsOEm(AXQ8PzU^Gs4%q^; zUX|?xY6*KbjTm`?f3x0qPLMU-YrI5`cKBGi52W4Jj?3P+!BU$xKAaW9|FCAg%9Ts9 z+it2z2S|PCJe3}=X2D(V%h&gNtn)tw+W&Y^?(MsY+%G^B_`jES|8JlF{{n0O|GLWw z#p{6~P!!)9Ct_32er*cN8?q7;Ao>{f92MqSL7Tq(cTj7|0gHIkb8RL@BUeqn*!ahU z&oE?8Q$XBm#l|vCaa^3#qY03&Hhj3FDxLtSO{FY zP)o52IZfU9!wK8gyd#AjxZrmH;N>AJQEty8_uonkSPZ^BeC4O>$Z>{4Cgmw=xbI36)H8C6px|>U54$p=F{+dDDbXuEH z_FSyQP5~n-@A2~J@#P_`AtbqkUrnXhlW)Y3c*4Am;Qg{dxG~qBDzh7!aIJw1(c-;? zws@uwyzazC9DuP(hC~T}Kl~=t-E#0WNSgfe`0F#`T5jaN2R9!R4Ffwo4VYaGIIvu} z8)_f&B42+P75i%Q8iSZuPpdP=(?QsUyE2slE(us8whbtm$$M0w+dJuJgV46u~H?<0F3xSSZd|Fp((EogGW^HMpME2XaZ;|`|`}L546aYjh zzx)Y={{0~d?@e3hk$fGVB2j-x=F_13!~%y2lc@OLUIl4PKAc{x6$fKljZH!XtoV)o z`TinK$O_I53^4i8x3pAt@JkLYLhHDpetrBxzbYg-?5Mc=qP|XrV_NjhM+&+q%O@?) z$h$b!1{B`gMsy~C5vH*8)v8>qaVD7{>Ejsb%g4y?F5}km$q|40PAq z4bVvv!@j(dp5M3b{WM+M(GYU}Iy>!Xsg0ISl}m1GqCf}n_eOf}R?$X4l?Yzs22$tL z>C>|e6!4`1Cke|=sQgE2LU`?k;gUe8<1p?Kf!8&kpzBOe}T`hQ+Qg|GQ{D*FFJ`Tvsmj11k$ zEdqBai?;!lWh%vUM}juRrtvYt1vmIeC0RIT+yul4c`y7T``52uBSF`69?4NpS`d;8fc!~l&_XtDeJZg_K(+5~8OSmZj+4{h23;@~ zq+hvr*JMmrr;N&_{XC9i3P)Y?-e9K0qb6uk$@=!BVIaleQ9JI(|LvBYchuhrXvz}uhb#k_t2 zEH<0%Oj`wBycrnl8xn_mB|<78l*}NH^R14!j}7d7Itp8lpva(05%k;haQ6Q8;?$99 zC{C&e#0>W_Yap$k(l5XRbDR7;%R`J%aM>r?xs4l6A_B2eBERxc6e$$*1BEdHCP2Q< zZ~q#dYS2^b3iZ0fgKG97YIvo9HNftAb$)1|lw}m&-?n%U1T zPPa+j!bMkuFW(dL*;_M2 z%^Rm}J z#sf*Hx!G!6fW>ykE&Lx>-3ZOC-f)Kto_UUzH_N$Gw3uccK&GLHCJ5Hkz=TBs9&ds& z*$i^Cxi^5?sV-TDH(U|OBcD`){Gmpud;sx`OObjO2MNCgl&C2vwco+yYWwYPXu*BL z*q%``RP6<@YM$$1KJU}CqZm}w@!jaZgr>hv^eewq_ElP>Xb%CQ(&W?rI&>L=XUO7NIv2037zCi;U|0oDTLp=YAJwOtr*vs?B0b z$KTS6-9$3fnLs_H9AofVzMDz%1DPwv4|xx24-a;~82>mu@cGH}Xh3N&T^4=TL$HH$ z_XMrFGv)B)r%rMGng1ti4p^i%LFsDRo+QLFWhEnDaJtf>gWlPe^yNdTRH_?uy?L=` z>4Y`R+mqOUeBpX@1CWiS*CML15K34>ha)df`#B&NZh|4?i*@f!3{kdC#Zl%IBvlr6 zD3A`JToKny5%pARI!qDsPDrT$2;2mUrjjHESLrkzx_JqAtVb=IU9XJy;%#csM^m(( z55G8d9;tUJFI?!nd<9-ilK5CE8OW?Ro*yUWj;%OLE7+-ToPN~~r1lv~BT^dPJIGEa z2v&r09vO&$sQ)jfvy-bE$f~QatI+3g4ix+L{X3X`{8)#x`ITdC##Az~9(l1M|3Z-( z$zdQ2;3sl_7rzTN=RIIv+BN`@`1s!R`+mjl)6#CfPKmRngh~=?RL85i0igNDD z%qp*qPnGTO*%OOYe>muuRw}#R$Ua`~f3V%SM>e~357@zm#3KWkTqGjA+mJd8e!t6^ zB$j_p>5@vNT>{uuno`87D?v!LTB{z%5j0jKvmKKCL&4=_d~?Lr=S8X~mghQ^_6?TZ zjxij)E+zX!Z0}Uz&l8y!D7@GIv6m4%C-|Sa&^QN?aJHNt3&g?pj?1{?(d*ZT)$T5e z;Bi0&j^6$=v-tkUWN@b=%RJf&Ltl6aV`C7bL%&I`t0Fb+b(o znyNsSOzy_flZ`V&YT@YzW{a1a53($V=LFOJ2#>E_8M0;&fShJpFC!_Zad(!f{TR`4 zkI6aYWmBtR)7;jtcz^^J$U#vMJph8bB1k#gqEM&AyjEO>*el=+DQOItJ}Ox)s`Lvl zEh!>?yJi0!-{pB+^#tz#H*x$@o;(*|{7Qfr;8^(fLLdw6NHgwoiTN0rIJqN)mB2Zc z_IKBVJe}XOsow|Rjx|;tSzdQ}YaSg~RtmNil3$VEd~Frwa@M9Wkv|tLNizh z*+CrMn}6lSwTP+oh=$kaFv=c?Ee$L@L!Oq%J-Aeo1h2vz^Nqc^zKNP{Pu2t1*|jrN zwCL`>Ff+`P?)Q;S4KD|(0{i*R1dckK%fJkp= z#{3CZ5p@uGrCJCi8@=DwA4}Kk(VLxg5`IZboy!IR3xlP3J|Ju%@f2B-f?ol^m;y{O z50t^p_npdqb4B1iXqYX&_>tHTN7(H+8SM>_cw$Q|Iud@+=#^TVm096El?sjOI1o}8 zVR7GGmt}%2qLwK~kqe~T*(>}?pfMPKzePeoAm^uhk}21@Dajn5%om3-apzsAWM?Kq zHao3UM<72XwpyHIEpa_Lt>=JdRu$Wb7TuZ6fGGM&JMTd@vF^o>Prkom$+rsbK7E%a z31O^}82sdBtxMof8b0e^zl%+nZ`_d6Ewi;cT>(_seIPK|s5uQ^KW%ym1aEwVJ7j*0 zAI-3fT?CMG%|PGU`TT&?<4xsY<^)TiM1d zO)Wy=?B=s#Ak|b!I<)g z@mL3|1A!R%bn>S>KnhU8*xu1+*i2bH#-!AN7<13iZ+lv97yox)l0yhM$be{AH{J-$ zbFPLI$Th0EaDUd46PJsjuZGcJp49o)WQz*~m={;6?XT0hf~HZ)$5C(&u1zU=+5ZPq ze$FZ`{S`azq8{jF+b=`IIJ67vK32(PY$oXZQGRoY>)Tn@-nv4|cd@}J_r>}^qM7aV zR|1dH?vXSBQAlaT1_Kir=5`v;nuNJf0dVX;JtT1Bmhb|Z+fI^SPE;%}FB2R1Sncm@ znB(36R!#U5`OxYIW0s9egBc*8nT=T^HN?hdm8wbC-CexX9|y4F{vf_r%P4*Uk{`Nn|(;nh&DI zWeYyy4zvp$5{JC~NNox*DlsjV0u2}e+)Jr(l^!dPYJEJzhg=KO+GQY;WNk%KSv~wO zSO{Nki*{R%zLR-i_}STs-Xp}#CGnGzlM7s5Tz6&`=i^=X+Yy;uyBbY}v+5QyAQxQ@ zFa?ENe|-~dO_W9S1ydg$u|86AZp}ZUKme#Il6^#|b3zu~mulYAF5<}?bdMi#=mMcb zX!MV0VdhPqL^abnP0Sm3|1afeoqt{B?1Ovkf4jg#ddgIDr+=lrsCMU*&(@!yMPHZ| zo)$_=k+~`_1rcFE! z9HD1V^rX}4x~_ns_M*|3Pbwf)@$@~pSoJnxij(E*-0hnGE&z09`S+xm|T*OEVLtVF$_1_aZ&BfP7Ie?@`HEIu`Sb4H# zjxx|uhy_Pkrr-V!Y}n*WOBrG20+yZi>$kTfUn$yIZvP0(p&{qXPg zn}vGi9D~Lqpa^r>G|k2R2J!;jP!GCUQ+>LJH#KtaQ&VUGSMqq62YJn1qNGBLGKd1& z)Yp1^y%^9%oO7aRs1W0ZbbpQ|&z~?eEWb!7$AZYcN)~)H>ey)}Z3Yi#*r6 znHjhT@6 zeL2!|>KBEx-WhOALs-KdQ}NCQwvzk}zDR5s=h!|uDD8GL+jRUIXTeYy`-sS^M%{ALh? z-|zKW1dI@N@hV zP~iJMSq?pW_Dm^j4eHRuPgvb|v~qm}IlVL+ZMj)^zIvU*w_z>Q-1s95Ri6slX_N0R zeDsS=KS#WXdtt7&IIwq~;LrE<@;mvNAjc-o>Kul0hvJYF`36%Y;T+J>({n763 zxF#>~8%iW5z`3;^*6;*OtfUU#pZ$0`D$WtfHTS1kJy4=xRNQ`8a1O!p;o*XQ5ybqxj+B(ktl2Jl2SpygHSCk1J zaNPYZt&nly_Tt&p;}zqNPiS63*qO+8?SZ=xtJ`o8oj_3=zhkI#e;o9XqxzKD2RFzU zZc{r~Q~7UD9dIEH_T1tS#GCBX(@+mHiHhn2P0Rv`vjzsJ{ruD$1(7PjKVXp`8RD&% z$=9&jPdut2{P|&V%57Y8`D4#c`0=aq_hfq_AF6RgN(G>k4mr?Z)E94nIaB_0^8Plm z^#D!1hZ;EEuo42HT&Z>MUms+O8GkJE5|Vy?UhvKzmO-|K^7Enbug|l9Bs8xs+}?z2 z{R`$AL0Q=ffY9Lz0-sCceuw++xsUSRBYN}X!G{lwC8IA3FXF+YJGkA0d}bUE;T>TP zA(>Pif|1+Hx!|SJuxgxeX-~e6I=K5SugkMsC8S9;`Vq30UiwVzo4~+X?qQO zSob_fIXw=bV7ih*o$hZo!cI?JN zzar=ZZ4n9vt<`|zyEv-uBSh5rlFOSZkO1RbK)8gz(k7C``<$5JAz`_tX_px zMjazjNcY3eWpDt!hlL_Nh@T9XNDy+=tUi8Pk0^ z_8^n0Al)CQ_pHK`Hd{SgVE<%6v~&9Vn+vm`1ws|V*Use*mRP7Jg*yzD6(AdPxG&{9 z2m+Oy!e@Ca#qh(riqzIe71H z^dqq~3ei=8+r6?di9k#YSB4a2wd=yn+BFtLnd&$6Zd*48%Tuqd2(Z!ldgUr9o->yb ziI$i$mAC?=>4Zgn_L`lr@!i@t_STf4t<4#yXE zX|xC0790qZHXDSLK@nE|-7D!c-@{f3Iap~a@!%9*6 z@Hu6?qyXH@)OqDtAsCprHcbs`JRT-}1hC5T0-`E@6*>$ODSQEYMSoySJ$qw4m#J<7 z^z(Qd-{;mZFWC*l*bYtlx)NHX-FvBRkE~M3S$%H0x3djvWhPshns!KCavcXe3}64C zlsmM)4Aor`$?cQ&@bIWvjODk}<=I<@S~C_pxB6|*H2jGwBNk+rx9)1@MY?iO2$Bg@ zl(l4b<%q}F4wbdtep_ICB{`dpaWKP_gwj9j&jRFSdOT7fu86-qUIxi(SY!D%co1}6 zh@Kmu>0nh&p`F|lKprik&(C|UO+Z<0&84_cy<{=5d-j)5-YXfkIbD0$ZFgcnLdK$4 znw+IXx=r|{*ocIjJ?uI^9(>*i$_!ihkqKJKsFxSqs-CsQtSye~`|u)g8L#n}hc>#( z554Ds5e5_;899q$%_2D&r67x)i|D>8_39Ud|B)eAc_Q|JxN|_KM@w3G2VgD~NF+g( z_M_@sja$ypyIGk0fM{dTHdf&!;;#C^IKOdC(cRs|ne}{p$TFOX0&qyjWBThcVJyc% zL7+-qoejw^NGmL}+PVx_rFXHnQ<)22uy9K`*Js;V6V0T{h0y!Wo)m_5kX=FBep zEzb+rvh&((N|6xGcuxC=qVa-n$*eDLy;XQJM@n+!&70PbF$(br$&5DbqvcNydf!Q) z1qHGWRK`d%CNvFR1NT3dP4C9t=+9L|otAROvR-8`rd-l(v?>&&#O7Q+1)u7*&0*?<@ z+ze!y-mNU)GE)5jo7LRa6CNExL*c!6=&(EePu7Y3JxG+3mktf5z3oy60`e;WI745q zM{>-SjxUB)m7YhdJ$9xe)q!KB3kVv^u(<0lNh%;I#d|vHTFpotZmWhS1S2&=rZjj~ z-t_N3d;Z*)ejN4M-=_odu@eh&p8Vo{btxystGT8a$YK*eOVEHe1w&L@BFHY?k@Ueq zB;(tXDjhT1IoMQu{R!GGi*E!3I~ZkXq2Y(m@j6E>OE%Ah`S2fQPa;iSCj=` zx4|O0y^CKepZmuqDgf2JP)O-`#c@spmxp1WZx|f^1N}x3(8QAPZ#H@9ttW;t2vSQy$=-u~;93vsS{_bKO}yx0+;=b_GD<%kOz`)!?EFilG(6>~>th0ecXiZz zsR@kew;>QaEs21j3F5&JmP8oVqFG^{X2CpSDCy`;Z0sJbb|3YWrT6~J1!9#6p&=5_ z10+qnll^h>-HfZ?FHB4e)XkUf|J=E4su1Rhf>a9G%WNiWJ5)1CLzfwI-ewml0JK*= zLJ%0=6kg}fZI0z!db$glOj)KC;!-H*2z2`C@BSC2PH6HjshkbY4DLPuju(~VJcy7u zuPZPeF45-y?5(ir*s4pLdlkR{nZXSQksOrdc>b%lm z-3iRJCr*1%5!%J|F+|8D6W1aeiy-i4AHAS~h_ZK-OQ9At7>ka|p7EWH_y#1t93$pV z4%&fc_{i$QPdK5B<^&o)V+(V>%(%wx_9*s%e*GwvBqzMSmI=q zAmCshI%-8x4P=IPwrVN|+W=6)%8UuzW}%=?X?!LpCEciS06gS0*UfzDLfLV_g6xkn z3P85ArTQOKBJI;?)hmzspL;`3M_VQunkYj#=RB<`D0-p&1TV@5j*J^6=6b+OWgo}9o!5YNk?@-JZpCcbc|d8g;0g&VLTF&M5_4tDOW-%G5PxzH2AZZebE4w$1zM?yNeLn{>n4x{PW+ z97$o(4$myq4gNK}8!iU(HV(=R&%bGFvJjl%Jp(p^=9X>x!F_DeX6^OzuM3b#>Y_{F zf)hCO+vwF|2ADEIdY(lo0*pX$U5}}J4RNNI#eFJ#c5&s!;s=ln`RJ%=#zB^xSvwu0 zTd8iN43?TUx^YnEo`jy9?_stvn2~%8i|I+w;74JVM_P<{>7ermP%o}RmHxR5IQoE8 z%(C0(`^rxfxb^rI6Kn?}eP~s$-ht%C4crt)YKDE#hKj33XM+JCmTD5lGSSL)3pQ;_ zu6mAA0V(b&M&cZC_pwiYri)GoAz6Xd7$#x^1qLhN8`GW%H$ z)w!O~6sVfD@j%) z;ZnCthoFE?G-pRx0mjZ*+6w4c?jE*>*6PfE`hHK4(aNnByR@f*3MiL}tI7;?BVcZT z@XQS6V&s^PQ_^K*X+3<`%v~Wqe|RLh zr`HNoslYq{7TZ`T1mZo7bg2%ZQzkZAAy32{EY$bI>Fq)bEI(kb7DE@6=CdoF&Md+K))dWT$8f1t> z*EH9Yxo-1&Pzh$sQm(`{XXTA~1{QLr%?&0*YlGrz)%hXt@?q#yR^1&1#e$v4gYHkS zNUuOM)c??P(wV|!6P)bVfsu@Slg?b$`OQCcQ)%0dhW-y;^1Ge>S5daH4s;)Bc3nN4 zu*-7aA0&A*j%N;w>%m_L0`T7BF0+{&7e9Qzu{2ycxgsunY!&p|m7f@dx_is+W_${c zbtp3T!k9a z?TGIscU0YdauFuJvIAUs|6)fapZNeCg!l-NiAULw45G#S5B89CTWP$E=xmrBonpJH#ao`oj#OWJ!L&RO&!8_gcjgfCqtHS28Un z=O3u^(|}MT!FbsOmI+oExG1RPoa+#)Jao`1v4$@C1Ho$s@50qikqE#F5gwF+fZqw) zCOd36ulft9c4N^)u%XIh+mqWOjd#S1zIVW(K-a;2x#8iD!|i}-gZSfEL}n+!No)5^ z!%6RpX-K6#E)@KKh)ai>V%R z+R^XsN!uuMcR$y8-Z$IUqkEF`7cCB(vf|vjsv+=GW;Z!>~g>lzeye6E~;BsswIEs%jjoeOsRE1iYig@cotAicALLxTH{ zIztiG1C$qe73l8Z?nkJNG9Y7J)WCUgeiZ2&^s6LGs(k_iJ1us9UA)f-tRn>Db#S`Y zi_xlEDp4FJ5!XM-&7Z3WgNgz|Dc6Axa|^mAKllIxyb3d-2=R3a7)<^m8GkC>I4S&` zWd(Gc+!$P`-I>4TiL~M_kAGe4MaFk88dSN=(IPNo+nZ9bnVU_X<%c#HNGS6$%4w|4>y>6vr&=V z8*`XOx={^;f(FGk2Grcd(R|<>Dxb$0+B}jWb=>hCjv60-jCWLM$t$Y0_WI>wnWbsl z^B`Ls%9J&<(SpA8SqBAgqK&7z)KWogW!AmTw&mFm=bWW!`9DdCmSP`x??<)(A3sv= z>XFN;nOzAz7+cflngLhDuMY!3fHAug!{U}q>jBmv1O_LoBIFw}E#0$Aj{uPluT7!c zTQRl3J$r~6LM6j=zVKVBYKeNZ=8-ai6K;xEOksn?5 zrz7`T`}TaUrLE#p7%+pX|hW)vRxqhWa}FTCFR4 z(6?&w(26{xIe{+^wgYD6voO~e|HA`rIFO2G5!?;<1>rMQgjIZQ2+4Awh>e_clx9tF zS2#ycPrrbi9l~mznvBg}n>SX6xU=FJg$z0Vsj86B8(=uU{h zSwWad^Q?8GxI5k z^vkzEv6s}?w`<9DK3N6nEDxs>W>rawn9=}{qR!?Fyk8e#64~}J9R8)Fz*u&3x2dg9 zyU;<@KN`{ic3 z72R1x?9x?-P{Zvx2rN^(U?3+_w)`O$p`D58NNqu>AB#b%o087b z#s1RK$S@9q1H{vFCu1Q6tOUB4d)^%gJ7pyt?YET5W%5d=O!9g1!7gA+fh@f1Yz~=X z&qH@0F&&FavU_irHX>)mnEy&I+|Pc*2}PCFO;c-cotT>$UrY>Ydmhe^%rwWe^elE- z?;x#KF(R%Xb2z}qwQ4p8y~zXbBY}i;2Mo#vmnPvc41ZxG=c9mj`tF*<`!GI=k z?Edp_pes&;7R+^3rKt3ix6>z35_PVt^haT?zJRIcxvKa)>-~24ClJ@ny`nkR3yvvv z==A$y=<|UvicgDth<&e|Dn8QF(m5YfHC}$4pEPjrI0ymZo3z5OAO1kKyZC4~E^CBK zea~rs?u}?rzx6@6I+a1A?doTwU}8hAuM|a*(Y@Qi`|v!Bt)p;kOU#E|n+^<^zOLC- z13uTt*X|Pgd#BcU5)SCI

    cgM~n*eAGf+c3qASv!eh+Hd)UPzollypus<)P_^wS-SMu_-)e2hd32ToU1SFDwMf z>)FkjWKu{&Sq+?+lzlD?Ga&pzt@>^q*i_X+W0pLn8-I<}8gNE-r-F}VM`GchO(^l=_WqD7#v@FO(j3%CZPJp- zd(^J9xo&|oa4eKYvb=m=Jc54$Z4vkssdnL(rV@CL#TG@pH}j!cozJjw4o*R1yFZ}{ z@1{WgSKM(tzz1s6Y-*L3RNb{n7Yb4KmkFSQRi`5HNRq%3I-{P2HEf+9B1-BGpi(zG z@_|X7MvfkY|CZ_har7!vJCqTxeU*Ls2XYZyD_aCC|!W7m3%HJIjFanK9Bv*SXL zS^@Ui%Dyp@qs!D#fK=iafZ5oA10qv9U1u}^NhRwvAkiaGs(-7O^RrhMeK2@ps=TKo zJTx!w$2HG=$J===jfx>P8(_1pJw0k#eA&MaE=ZFKY9^Q1V?;t1U=(@Cb!L!fkq&(3 zS#4mvxfd*2p@}SC^&xnJt-uU3kR5jJ{snLh19i&1Fay2^UBtogvwc2+y2^MDDm!+t z29$31!u$SKtwVwP$^dFNv)WEwG=&_EoubSoxBH2R>r{tOUy?kn=AZVU&KGcq9&MaGU4oknG=G596{pE7Kzb=?S5TVd^;25!>{=# z4|~*Ao6f6>K6%Rn=Cl8;z3UE(`pniqG)mOiJ0kW9NJK!o1pyJTpny_TEEExxBE49n z5)e>|2q>Mm3*8;{-tF| zKhGr#cYpq=#hc7;=JY&YNEk+i+?>VeCVkOktHVEW9H0EkXYo)hzIb$|DaxuY&-Z{Q zLg&(HXqNZ+R;dV$MHKqN&mhP!#~BiKn86^H?Q!e5g`!6zNVB!axBT0xfmc_AoeEj8 zjnW5d-^MJc_FI;wGV4CSn53l6bDzalr!B;TX0vZzPQp!e+X#KjUtsRXK$?;eJ{Vb< zayjwSm+c5@2*!Ot)TsvO#A5r7p$ZKh+0nz82u=)s!~pXFevKJILZ_P6p(uBY8N0;y z4OmZhj<&ZBksT=ZH$@X1lbL|Gf8x9wKBj}f_6-jha$VcIKxt#w*I<6t_&@5x%?^}=zz zg<7ol;uK(Wv&4<$jeKZ`tREAw|NhQ_P_IYb$8@Tey7a8MVA1@*{!{glYY8MTR^NK_ ztG_iQEQg1&>(6#~`2)2iF9C#`scH50k#CC%@Y*$7!;r0||MWULy|l^7ERF&GBu=&p!N8-tY(T z_}9#k+narJt@z)4ql+HY#+C32ICFc}G=x{0nE4z6ZgCt}MtR(xWvTBy{53-8Z|L^+ z&=ka5kzy^l4GpaB&pIy>3d)bJ$hOWDTdNnVwTL8S`r14VO~iNAe7Y#usiqlo2CI=l zkj8~RMT(Vu`H%r+xj7Z%wqAuX;(8iMGERtQA;dChiQn`r12GJ>*GY*l3Ked-E zvf)bNpcQTc@=d_GM$X_h`f_CqpUjci14BX{ApfmWr>aFTqy|tQ znqDJi#a>Ttb3|FFWV-{%6_T-5MmIXMLoeL5KbWN4#N!F*W1`U9;|rcU$i!l`mnpia z9}tmg^B6uuN`Q5gF95MqAVhf8|0TX*l8v(;7)Ok_*U6?MbP{SM z?c{wP7qrqd2LpwNaOohfS$x*YE+pkmSESz$Jr_=Em{H~g!OYu-k z{?{A(|Cy|ekNDs91^*k~*er-(yo41FLcg;bNc&9$knH>#jNo#dzW-582wVE)qvz_t``T3X@sbc8PJ+jp@=K`q>ZK_cHN5wocpDb~tr zf#@s;#?$FaBJEr!bmiohx)U%#*x||KTb0vd73`;*S=Hm>(2TRdZRcl{(BBr1f_$ya zD}MdCJz^qB@+Ew~-cJw+q1rkyN!01c;n zKwl8WM;)B%zF)nNBe%sNsPJjlcvn}V3Oowmj^F!{d2WSf#;Hb0ez^%+S7g^N8g99o z&P4}cv^gNOtZU*Tx9&b(hw42S4#o5t`BrARxGv(Xj=fTSaQVP; zuLEoMr^UMdZJgFSDZAsvtF@@tp=b}cAH()OC{KTzb7s9~#R(5s( z`Mr=Tw6e1U*jXSjEMqXc$mU+JUe2LUX5wVnj{oGH<%JvB{1$FxjBq2jD3zRlc!&O> zd$zoZ@}%>$pVdo)*H8WN9Qe5?ylo?gK6(>(Rv*3|6!(WgNEW{bA>Gc;Tn2H8FKq9H z5N$*(YA2-~U`WcC-&L4kl$*U~ZN#?aebo!Ti)@4847r^;pjJ)_bE-{zf}8bVO*&Q_ zv8kM@J>uq{Z8y!S6}X<+(Xk6ae-GrpGE&~+|D z+_o>tXqrq{7lkV^dfQ%WC=RzQdx3J7R?u?42toiP$(ZcYLuq>uuZH8jkQ0QHuRNOn z`o^IdPTaA&9p%h0Bl8NKw0Og>;$H03$TxiE}K^I!#6J)7`d#%cX9(R{q*&FMDL7@*c)rN=1k)N$K!Vs zfY!F(6aFXS*-}#!_lfT^8p^xpqnkJI*YR*&EaN08*Gly8bKz(|o@}N)Qk!P~t6!rI z@0zb(x_@o^u)Fk)<%saw``=I_dRG6Fdlc|;|LSc&y_^5^?}Q0F-GQj|Drj|=!2Dqu z;ge~~TuN%(V?_Za29O7c;B@ym)IkSPL_;5-VWd3sLm83;rl(-k8Q0gJf{$>&L#G{d zpVAp<78TTT=k^8KwpFULT{tD<7I)FP!@(*7-xh_+QGWl(HflLX5gP6Xct!Q`7_D_6 zIth|G4Jf3da7y<^Y!@5?1|E$=U!G}Y9AZSKKR)+q_xU@ah@e50nvdczh1!d&bIEW< z(KHBlG0Vtj;n?kJ(Fj+}O+?Lh8*W`iXA}zo_R$Ikz`EH&vbL+sO}?8ecFL)qk}|^D zf%0Jz>r|<&P_-D{p(&^h|B&LHDloN)BKIkFFw^Z za#VrivV(0Dvui#9`IN8pQE|H2;dW-^6^hd+??*AYZ54_}5~7)_w1R43;<%c@z+@03b9Ig=(}*!BgOt^*s>YS{DtFHdJeV)J-7xEHzQWX! znLIvVW_H>W^;3!60b~S6k@PB<1aV$L0%9HRc)t4iV*EDwrUZ;Q!kLQ|U8=`D*ME;}b6`aKs)!r#!oWC)~;(agbQF?p{HKqwT@!D5wC+QCDTU zXnqmdAcK^j3nl3EX7tYMcwKJC-untZ~vUY6F*btU~FC2gRt?+RBmgn#X3p)MhVPr{LwQjyNC1SGD|f4Oyr z0NBJwf@jnf!qSs)yDlSe&KY7wMn0mW3k+fl^hB?_yH;`_)P(L!h`IpiA&8;IX+v9 zc_d)^Ezv^L} z9;Z|;gW*Q+s&wXkeyvvPd`NZ>FR*P_iawh0HKs(B0^8ho-e-Uep*Lc-pa$8UI7G9w z51a9&FU53#6|rjPwzv2p1>sa!Gk=>{cPLMg`HBxWy1I)>&R7`Q{Lw5qWEH-m>jNC> z2b7ECz{-*Q%mzLw;b^fNP|LGbh&#z4`jBeqfzgpB;`R_Yf8eHr6`F+nD$3cIf zhBlhcHMKGEdzmrz4GL`~QYG!}`+6oVS<+l$$IeNMHQZVnK39E(U*JHTXz8J@Jv9~m zQXP7Xh_v_v)xLFQ7jmo>l_e9V-U$r3*DyBVb7O4M+53VWW(-bRd=fhK(6Iv6$$De@ zuSiWx#KR^(&$4LL`I?P*7nz8S?^X^Jg^x@Psy)6lu)nW$@X`f$F0U~Vk{M)3iEaz2 zX%OjXO_vfa>B<#_e@>j~i0&ZQ@@E|15A?@^fc^pVfor0aYodYMnY98!ekuhApFaHj z@rcdiBkvmF;$z(ZT)Kze>J?r*ZN8LikW~7wFL&2eSXdrRxkw{U;$*oKzqKPfdJO*j zC;l5ti~i_)`7M;oVMS-aTX=_s1Zr0olU}Fy$0GM0gKUcR8-PZ0?}u4 z3^)a2BbOePHHR`1hsO2-fry5%^as;dB3V#_E4z6=ydizm79Jz=*L@9+qy#+*J|;MW z{U|$^f_Y>Q02jovj6*!BJR%$H-aI~+lGQRdpQHwaHz=%x6S5}5avgwHf2j2fNxbQu zYTt2?QnQ<@T)8z9hEWke zfTz4EF#fyka;ITfFCH4-=B&eT5K?k`n|5IpkkCzK)2DasDRUd?kRC#PRp_M5lcDej z*a~AE)il)PoCYp~5+O}%XL1-uimDwJ+KQ^V9N`Z(m29aGsXE2&?qvDypt%wnOA%5k zkfH-+JPJ$=ZSL`nJoQz*{?GR#?~H|?cv}nYq*(?`lS=FYCuCX{o6zc; z@1U@1#Vlw0Wfax!qcVw7C33y=ndxW`&p{D&h z)}jWFKvfmb*M)j;=BQ$7_hxfr=g*tlLI+ldNA_o$-E|Mp!g`%PSW9dB0LSmBaRc6? z3ks;X{S)L>Ph7oc)YmgHk{h5ckhUsD8>m`qj8x)OD=;xP|gRu@P<*+dD&o; z)`2Kbrd>@4R}ROHBgU8;M+gtVb^Btp+##;RMKeu1=7)d;3TXoASDd2sDwi2^b*S;F zvt$E&?Izxw{JF-1T<1#vXKubtHkBK#TqM4aD%+#&C--D%#JTcNSB3J}`u)fn-jK4d zR(EXi9JTPsV$TbzvR>OCH)Bkou&JvV#*h7Y8zXo|hFt@x-xs_LS8|VXmF<6oPUOU? z9(?%kY7stZ{(QCtixR&5dq=-ig*{**-wL5Kja_~TnkK(EOP;Ze`PB%?^QDWFM|(Ek zb`fZ`sbo3$to%Ma+Sgszu9|}bxBP~p>IJ{PH}&(r%5?f3)z#!V51c;ay$N<6wStGj zktU(|B_UDG1DX9^C78L3(_ZEL~C1o<)#*!HFf=>ZJm;A^9rJqhQztbiRN8sNAVoDHHXatqXAa@$l~jfYh&&_{x#OwbH*6GV zAt+NuV$OH8cO$BwMXM6C#C8ZT=-mJ*up1O&8N7gRSMYF{0 zZ@({-TLw5(Q{RYN^cqH&VlG(G)sSum$XtDAS(D>v!(r{@POIvt-jrfMCzrHpp-Y2~gey zT4Q5zEU5YzSKI0`^815bl#UMX6Ax6AZx??qYrL(_Dy&=hk~kg`TNiJq#o^IMt7al( zEYeZC)!NWP%s^xbz7Q-}3$oxA{j`dg1Do9)FYSH2nG-vX?V>O|S8Gw*%moX~FVAcl zlb^YDY(j$jCSa?{qo`wzvtINGGxN9Exdu~i;wGlw$dLbaX=9(fOc;yirz}zW(kq-k zGdz+#J1#u(#fsgiX+M?i^+nShyu?3yUS@x%x!#m#WqSmKhjw)CD8D3cULj9$b1TmnFzKfp??acf~t@63^R%Ny#?!f@Flto%o7t$%YPm{V{$KjhEm9q+# zwL@iqhe+VF!tGb$XYmHLagCU}htOS8H-hi_bzKQArC?4nI)$NkKWT`#@ZKb*r7Q$X znX&Icza}~6pZX=qJz9ot;t_X9t0eM<%EFbp*6KfudXvJ!<#KL+-0r8`NoN4(nEDW$ zG7=~SD?>8Up0hEm9sY7HP{L#f3w6}MvpNi-0EybZl=1~N*QcO$yWb9Tj#%u21kI!lgsFZ^F)PEaodl?JlPUASu(k~s6EiG)z_ggbnd8c6 zb;WX!Y3(*6?asDtUC)#5?c4q~X5c~h=G*ceFPh`HmM@#*&bf7c!%gi4nzXSw zX|8Mdv);!}NCEX2#zVg3!0-{d!%z4)D_LUA=vE%#6aPf3*&^RbCr=gOMz^3DXw74p zw5ET_Z^B*l;L8VY(+y3BHMBe>3_9k?jz|8iQQ5 z#_cqpNA>i21UJ@W9$$G!()5+`C=(CyF?=MSk>I(LnjSkZO1%YqP$Ge8=9H2upK>wp z7rY`dC92TORpqa4p+9fMg%aU&kADFB27JkSfUD249Rb%zN$W1+2?x^}yv)p4eWby{ z$attG(@GpfoJRSBw7Ftv;6I~nskV3H^LRvm)L=LuKiXqa(t+fMpsE4KOB-$FP-dg|_v%2Igs@9Xf28o*b$O0251QI96Q9c$F!b|jHw0Z;YaE=Yd zc92TyX-Zj}Xglm+1za>lHxQq&6MFplM*09psl9Hse2lI>YNV~be8gM?8zF7ZmyPGU zAw%TgI$xjhd{0tL&v>J$;BgT5&2f7>*P-YBBy1nY-${Cv9`}0->Lo{MO$l+GaAYI8 z#YYXjKcLL2i;q!6UQl8+`UQWIC}2b=&O^{xA&$j5fMTvu9NL>p@w6+Kn+27N#FfQw zX$OQzFbIsW206xf=!bSqBjp@uR+XAq{(avB3mb0>$qNABQUsjy_~o5#?M&7pCP<(6 z_?RhzqYw!gGv2cKJhs2$gPi6|8Ro4`x3Z8OzPQO14&)M7c?B(TJUq6B47Yc=Rv05ojNg^sb)730HM%$#MP5Q%FYWkROEQ(f;KXSO5FwzK18S(x4a6r*>aM!@ej z_GROLp6oP+0K{j6Tp+3LNOooRTf$3b2js@ImS+~5=enLx#Bl>HPFNVN6?#w+n!Ani zzLgj%6f3Ay@NZU`cT;?(BV(CIz;9KJpSe!dqJO6l>FZO{?iPZ5`7Lv>>S z%gySLK%UkH7Aoi&t3!}hWmO&dX?QR$aq}5)L04Iht=7A40bBJMN!XuoA{pX!$06W+ zB^zEnYT2-BioNXejgpd*M$P;iA*GipHe1)2RO7+hH~1bOp@gt*bI+Pk@d!rQ_G4+&fSF0MO9)eUsVvoiJwQ>s{I2Hci_iDE2_jClp6P zJIKK{ZV`(B)>$zrF4tP!Q1^SjX-Whki3qIwk=Vc3=6gjG;y|^(IV-; za&k#O`<4y&Ng5{cE@>9&=tY|+^8L6Fp*kKDZ98@0yDq6YiTR)N#<68<-Gaud6l1Hk zy5{$8kQ42ARlxPBNs95g)(0iZ_sJ|$a7u$0RI0{4>7v<`2VO7N-i@%R;pg+4Krgpi z!8+R`^YZ+Tbn-6ocR^mTY9y;AqVb?5FV0%}6M~jEX?)M4Ehz3SEM@Rpnb+{2WZAU` z0B7A?lLsMx;VeC7{x9JE#nBIJyk`YBJNfI$UJ|Kr0*~&;Y@B~}muNnZLG0w?n|A4d zQRUfTN@k^e3@ouVx#qN7x{Y&vbp+5#$hXhBDRIO_Ul*34PsiZaq{N#2%^$DQA9RY^NPH=&ml~2GwddF z+wN}Jy>2(nn>u&Lc^unLPr?(ja=;&9`d#{RNJg({LD|0(jk4Ltm-u|Ae%;-&l*c{% kr_i&1vakHi<*^Cr-~RA?$Lw}lKKxTx(b}H8_3-)s0h*?E-v9sr diff --git a/docs/guides/images/complex-slice3d-A.png b/docs/guides/images/complex-slice3d-A.png index fdaacc677e22f8124d4ad2cd17a378de4d965ee8..c5f652164945528295960b531770bf42afe4abd9 100644 GIT binary patch literal 128150 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 literal 129327 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%0D@)|iMn4M>qUYJeFDhR{q606 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

    Cx+=JJi&L2QUh+tcmNzY7fJMOpm#YG9{O+8a z^m0obLIkNLh4PhUX1>rANmTr<6EnA)z_qKZbB@wV{~c*~xn(!5N&Hm?dc_H!_$x=Q zy$I%hvrJ)4M8GM4lQPSF0Wn**ON%M1(a^?9ff}_V8m%FhzLV(jLL1Nw&{n=P_RT}Y zf9i(3YMJtq<)S*zm$wzz9ir+WM=g>M$lOm2iSKC#u}DxTSMQhf=v(mL+U3nt$zI%% zJS1miNy{Y!w=U$j1Z}8oN?t~r@_bX-;iu@O1g+)24WP@JX2k03gb4InX-kv@{(-WR zf?qsoC=eBXKZ+KAjJ8YBRk}pB%6b@9=k@KPP^i*46{xv{%K_AviHj&FuVFS>aPXP% zsP-fJ@R@t2)TdpXhE1q>iY;vkZfYgn|7n@=UPguKENlJN!+Nm-ksby`e3r|g=$Bx& zL*ficI6f*=tC3{PKq_{r=-79Ji;Ttv`^e79jH75^wn&bt+@IP24;xka%rtUuz`a9E z6tM~;0N-)4z_PVjN|$8eNpbp&sBj`P9$}5oy-3uS^68{hM0jpi*EM0RQJK1=z~G+j zWa(DV6)0)0%oZ~yS$oc}C(2iKHn!(mqHvy-+CBA`7i>%4uPV6QV0UQfVP`!D?kVyX zFFHq>NgxLtJ`b3_%q9xjEJweLGaJe=$*f7oo!gE8u(Za_70N(rmvL�xoQ8Cl(KU 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], products=[SpeciesReference(name='B', stoichiometry=1, species_ref_type=)])] model_parameters=[ModelParameter(name='k1', value=0.1, role='user defined', unit='tbd'), ModelParameter(name='k2', value=0.2, role='user defined', unit='tbd')]\n", - "Parameters: {'k1': 0.1, 'k2': 0.2, 'J0.LumpedJ': '((k1 * A) - (k2 * B))'}\n" + "2026-03-07 23:06:59,390 ERROR (SBMLDocument.java:573) - There was an error accessing the sbml online validator!\n", + "2026-03-08T04:06:59.395136Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@497f857d and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-08T04:06:59.397797Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@497f857d and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-07 23:06:59,398 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-07 23:06:59,398 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-07 23:06:59,398 INFO (Entrypoints.java:172) - Returning from sbmlToVcell: {\"success\":true,\"message\":\"Success\"}\n", + "name='unnamed' species=[Species(name='A', compartment_name='cell'), Species(name='B', compartment_name='cell')] compartments=[Compartment(name='ec', dim=3), Compartment(name='cell', dim=3), Compartment(name='pm', dim=2)] reactions=[Reaction(name='J0', compartment_name='cell', reversible=True, is_flux=False, kinetics=Kinetics(kinetics_type='GeneralKinetics', kinetics_parameters=[KineticsParameter(name='J', value='((A * k1) - (B * k2))', role='reaction rate', unit='s-1', reaction_name='J0')]), reactants=[SpeciesReference(name='A', stoichiometry=1, species_ref_type=)], products=[SpeciesReference(name='B', stoichiometry=1, species_ref_type=)])] model_parameters=[ModelParameter(name='k1', value=5.0, role='user defined', unit='tbd'), ModelParameter(name='k2', value=2.0, role='user defined', unit='tbd')]\n", + "Parameters: {'k1': 5.0, 'k2': 2.0, 'J0.J': '((A * k1) - (B * k2))'}\n" ] } ], @@ -58,10 +57,10 @@ " compartment pm = 1;\n", " species A in cell;\n", " species B in cell;\n", - " J0: A -> B; k1*A - k2*B\n", + " J0: A -> B; cell * (k1*A - k2*B)\n", " J0 in cell;\n", "\n", - " k1 = 0.1; k2 = 0.2\n", + " k1 = 5.0; k2 = 2.0\n", " A = 10\n", "\"\"\"\n", "\n", @@ -87,10 +86,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:12.520930Z", - "iopub.status.busy": "2026-03-06T02:42:12.520691Z", - "iopub.status.idle": "2026-03-06T02:42:12.524555Z", - "shell.execute_reply": "2026-03-06T02:42:12.524280Z" + "iopub.execute_input": "2026-03-08T04:06:59.420006Z", + "iopub.status.busy": "2026-03-08T04:06:59.419738Z", + "iopub.status.idle": "2026-03-08T04:06:59.423441Z", + "shell.execute_reply": "2026-03-08T04:06:59.423194Z" } }, "outputs": [ @@ -126,10 +125,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:12.525967Z", - "iopub.status.busy": "2026-03-06T02:42:12.525879Z", - "iopub.status.idle": "2026-03-06T02:42:12.816157Z", - "shell.execute_reply": "2026-03-06T02:42:12.815769Z" + "iopub.execute_input": "2026-03-08T04:06:59.424611Z", + "iopub.status.busy": "2026-03-08T04:06:59.424543Z", + "iopub.status.idle": "2026-03-08T04:06:59.758302Z", + "shell.execute_reply": "2026-03-08T04:06:59.757828Z" } }, "outputs": [ @@ -158,17 +157,17 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:12.817535Z", - "iopub.status.busy": "2026-03-06T02:42:12.817449Z", - "iopub.status.idle": "2026-03-06T02:42:12.820339Z", - "shell.execute_reply": "2026-03-06T02:42:12.820106Z" + "iopub.execute_input": "2026-03-08T04:06:59.760039Z", + "iopub.status.busy": "2026-03-08T04:06:59.759920Z", + "iopub.status.idle": "2026-03-08T04:06:59.763110Z", + "shell.execute_reply": "2026-03-08T04:06:59.762815Z" } }, "outputs": [ { "data": { "text/plain": [ - "SpeciesMapping(species_name='B', init_conc='cos(x+y+z)', diff_coef=1.0, boundary_values=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0])" + "SpeciesMapping(species_name='B', init_conc='2+cos(x+y+z)', diff_coef=1.0, boundary_values=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0])" ] }, "execution_count": 4, @@ -182,8 +181,8 @@ "app.map_compartment(\"cell\", \"cell_domain\")\n", "app.map_compartment(\"ec\", \"ec_domain\")\n", "\n", - "app.map_species(\"A\", init_conc=\"sin(x)\", diff_coef=1.0)\n", - "app.map_species(\"B\", init_conc=\"cos(x+y+z)\", diff_coef=1.0)" + "app.map_species(\"A\", init_conc=\"3+sin(x)\", diff_coef=1.0)\n", + "app.map_species(\"B\", init_conc=\"2+cos(x+y+z)\", diff_coef=1.0)" ] }, { @@ -198,10 +197,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:12.821471Z", - "iopub.status.busy": "2026-03-06T02:42:12.821386Z", - "iopub.status.idle": "2026-03-06T02:42:13.706420Z", - "shell.execute_reply": "2026-03-06T02:42:13.706090Z" + "iopub.execute_input": "2026-03-08T04:06:59.764331Z", + "iopub.status.busy": "2026-03-08T04:06:59.764258Z", + "iopub.status.idle": "2026-03-08T04:07:00.859926Z", + "shell.execute_reply": "2026-03-08T04:07:00.859648Z" } }, "outputs": [ @@ -209,34 +208,41 @@ "name": "stdout", "output_type": "stream", "text": [ - "2026-03-06T02:42:12.834820Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "2026-03-08T04:06:59.777017Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", "Please remove the `packages` attribute from your configuration file.\n", "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", - "2026-03-06T02:42:12.838337Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@5247dbfa and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-06T02:42:13.026539Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@5247dbfa and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-05 21:42:13,028 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n" + "2026-03-08T04:06:59.780746Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@38726aff and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-08T04:06:59.969051Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@38726aff and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-07 23:06:59,970 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "2026-03-05 21:42:13,048 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", - "2026-03-06T02:42:13.062878Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "2026-03-07 23:06:59,980 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", + "2026-03-08T04:06:59.995692Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", "Please remove the `packages` attribute from your configuration file.\n", "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", - "2026-03-06T02:42:13.063888Z main WARN The Logger org.vcell.libvcell.Entrypoints was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@217513e8 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-06T02:42:13.067667Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@217513e8 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-06T02:42:13.074413Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@217513e8 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-05 21:42:13,080 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-05 21:42:13,105 INFO (Entrypoints.java:83) - Returning from vcmlToFiniteVolumeInput: {\"success\":true,\"message\":\"Success\"}\n" + "2026-03-08T04:06:59.996553Z main WARN The Logger org.vcell.libvcell.Entrypoints was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@25ecfd7c and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-08T04:06:59.999910Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@25ecfd7c and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-08T04:07:00.005494Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@25ecfd7c and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-07 23:07:00,006 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-07 23:07:00,030 INFO (Entrypoints.java:83) - Returning from vcmlToFiniteVolumeInput: {\"success\":true,\"message\":\"Success\"}\n", + "Setting Base file name to: `\"/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_6nca5s9_/SimID_242707378_0_\"`\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Simulation Complete in Main() ... \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Setting Base file name to: `\"/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_kkloe2do/SimID_2079696081_0_\"`\n", "initializing mesh\n", "numVolume=27000\n", "\n", @@ -257,9 +263,9 @@ "mesh initialized\n", "preprocessing finished\n", "pdeCount=2, odeCount=0\n", - "No log-file found at constructed path `/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_kkloe2do/SimID_2079696081_0_.log`.simulation [SimID_2079696081_0_] started\n", + "No log-file found at constructed path `/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_6nca5s9_/SimID_242707378_0_.log`.simulation [SimID_242707378_0_] started\n", "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_2079696081_0_0000.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0000.sim\n", "**This is a little endian machine.**\n", "[[[data:0]]]\n", "numVolRegions=2\n", @@ -275,42 +281,107 @@ "sundials pde solver is starting from time 0\n", "----------------------------------\n", "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_2079696081_0_0001.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0001.sim\n", + "[[[data:0.05]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0002.sim\n", + "[[[data:0.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0003.sim\n", + "[[[data:0.15]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0004.sim\n", + "[[[data:0.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0005.sim\n", + "[[[data:0.25]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0006.sim\n", + "[[[data:0.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0007.sim\n", + "[[[data:0.35]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0008.sim\n", + "[[[data:0.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0009.sim\n", + "[[[data:0.45]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0010.sim\n", "[[[data:0.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_2079696081_0_0002.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0011.sim\n", + "[[[data:0.55]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0012.sim\n", + "[[[data:0.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0013.sim\n", + "[[[data:0.65]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0014.sim\n", + "[[[data:0.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0015.sim\n", + "[[[data:0.75]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0016.sim\n", + "[[[data:0.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0017.sim\n", + "[[[data:0.85]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0018.sim\n", + "[[[data:0.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0019.sim\n", + "[[[data:0.95]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0020.sim\n", "[[[data:1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_2079696081_0_0003.sim\n", - "[[[data:1.5]]]\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0021.sim\n", + "[[[data:1.05]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0022.sim\n", + "[[[data:1.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0023.sim\n", + "[[[data:1.15]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0024.sim\n", + "[[[data:1.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0025.sim\n", + "[[[data:1.25]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0026.sim\n", + "[[[data:1.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0027.sim\n", + "[[[data:1.35]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0028.sim\n", + "[[[data:1.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0029.sim\n", + "[[[data:1.45]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0030.sim\n", + "[[[data:1.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0031.sim\n", + "[[[data:1.55]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0032.sim\n", + "[[[data:1.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0033.sim\n", + "[[[data:1.65]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0034.sim\n", + "[[[data:1.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0035.sim\n", + "[[[data:1.75]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0036.sim\n", + "[[[data:1.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0037.sim\n", + "[[[data:1.85]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0038.sim\n", + "[[[data:1.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0039.sim\n", + "[[[data:1.95]]]\n", "Final Statistics.. \n", "\n", "lenrw = 129849 leniw = 50\n", "lenrwLS = 129806 leniwLS = 10\n", - "nst = 179\n", - "nfe = 210 nfeLS = 232\n", - "nni = 206 nli = 232\n", - "nsetups = 28 netf = 2\n", - "npe = 3 nps = 409\n", + "nst = 164\n", + "nfe = 185 nfeLS = 217\n", + "nni = 181 nli = 217\n", + "nsetups = 56 netf = 1\n", + "npe = 3 nps = 372\n", "ncfn = 0 ncfl = 0\n", - "last step = 0.023755\n", + "last step = 0.050000\n", "\n", "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_2079696081_0_0004.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0040.sim\n", "[[[data:2]]][[[progress:100%]]]" ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Simulation Complete in Main() ... \n" - ] } ], "source": [ "sim = app.add_sim(\n", " name=\"sim1\",\n", " duration=2.0,\n", - " output_time_step=0.5,\n", + " output_time_step=0.05,\n", " mesh_size=(30, 30, 30),\n", ")\n", "\n", @@ -329,10 +400,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:13.707768Z", - "iopub.status.busy": "2026-03-06T02:42:13.707672Z", - "iopub.status.idle": "2026-03-06T02:42:13.769728Z", - "shell.execute_reply": "2026-03-06T02:42:13.769419Z" + "iopub.execute_input": "2026-03-08T04:07:00.861563Z", + "iopub.status.busy": "2026-03-08T04:07:00.861461Z", + "iopub.status.idle": "2026-03-08T04:07:00.920146Z", + "shell.execute_reply": "2026-03-08T04:07:00.919888Z" } }, "outputs": [ @@ -354,10 +425,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:13.771099Z", - "iopub.status.busy": "2026-03-06T02:42:13.771016Z", - "iopub.status.idle": "2026-03-06T02:42:13.942761Z", - "shell.execute_reply": "2026-03-06T02:42:13.942446Z" + "iopub.execute_input": "2026-03-08T04:07:00.921367Z", + "iopub.status.busy": "2026-03-08T04:07:00.921289Z", + "iopub.status.idle": "2026-03-08T04:07:01.093803Z", + "shell.execute_reply": "2026-03-08T04:07:01.093502Z" } }, "outputs": [ @@ -386,10 +457,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:13.944172Z", - "iopub.status.busy": "2026-03-06T02:42:13.944085Z", - "iopub.status.idle": "2026-03-06T02:42:13.949373Z", - "shell.execute_reply": "2026-03-06T02:42:13.949114Z" + "iopub.execute_input": "2026-03-08T04:07:01.095218Z", + "iopub.status.busy": "2026-03-08T04:07:01.095126Z", + "iopub.status.idle": "2026-03-08T04:07:01.121943Z", + "shell.execute_reply": "2026-03-08T04:07:01.121667Z" } }, "outputs": [], diff --git a/docs/guides/notebooks/complex-geometries.ipynb b/docs/guides/notebooks/complex-geometries.ipynb index 44af212..f328101 100644 --- a/docs/guides/notebooks/complex-geometries.ipynb +++ b/docs/guides/notebooks/complex-geometries.ipynb @@ -23,10 +23,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:17.287727Z", - "iopub.status.busy": "2026-03-06T02:42:17.287609Z", - "iopub.status.idle": "2026-03-06T02:42:18.303524Z", - "shell.execute_reply": "2026-03-06T02:42:18.303190Z" + "iopub.execute_input": "2026-03-08T03:59:09.215354Z", + "iopub.status.busy": "2026-03-08T03:59:09.215252Z", + "iopub.status.idle": "2026-03-08T03:59:10.154943Z", + "shell.execute_reply": "2026-03-08T03:59:10.154661Z" } }, "outputs": [ @@ -34,19 +34,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "2026-03-06T02:42:18.286524Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "2026-03-08T03:59:10.139202Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", "Please remove the `packages` attribute from your configuration file.\n", "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", - "2026-03-05 21:42:18,290 ERROR (SBMLDocument.java:573) - There was an error accessing the sbml online validator!\n", - "2026-03-06T02:42:18.295084Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@1c9c4ff6 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-05 21:42:18,297 WARN (SBMLImporter.java:2878) - failed to transform lumped reaction J0 to distributed: linear factor was null, lumped reaction J0 could not be transformed to distributed\n", - "2026-03-06T02:42:18.297914Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@1c9c4ff6 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-05 21:42:18,298 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-05 21:42:18,298 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-05 21:42:18,298 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-05 21:42:18,298 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-05 21:42:18,299 INFO (Entrypoints.java:172) - Returning from sbmlToVcell: {\"success\":true,\"message\":\"Success\"}\n", - "name='unnamed' species=[Species(name='A', compartment_name='cell'), Species(name='B', compartment_name='cell')] compartments=[Compartment(name='ec', dim=3), Compartment(name='cell', dim=3), Compartment(name='pm', dim=2), Compartment(name='nuc', dim=3), Compartment(name='nuc_env', dim=2)] reactions=[Reaction(name='J0', compartment_name='cell', reversible=True, is_flux=False, kinetics=Kinetics(kinetics_type='GeneralLumpedKinetics', kinetics_parameters=[KineticsParameter(name='LumpedJ', value='((k1 * A) - (k2 * B))', role='lumped reaction rate', unit='s-1', reaction_name='J0')]), reactants=[SpeciesReference(name='A', stoichiometry=1, species_ref_type=)], products=[SpeciesReference(name='B', stoichiometry=1, species_ref_type=)])] model_parameters=[ModelParameter(name='k1', value=0.1, role='user defined', unit='tbd'), ModelParameter(name='k2', value=0.2, role='user defined', unit='tbd')]\n" + "2026-03-07 22:59:10,142 ERROR (SBMLDocument.java:573) - There was an error accessing the sbml online validator!\n", + "2026-03-08T03:59:10.146960Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@32499e7a and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-08T03:59:10.149649Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@32499e7a and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-07 22:59:10,150 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-07 22:59:10,150 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-07 22:59:10,150 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-07 22:59:10,150 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-07 22:59:10,150 INFO (Entrypoints.java:172) - Returning from sbmlToVcell: {\"success\":true,\"message\":\"Success\"}\n", + "name='unnamed' species=[Species(name='A', compartment_name='cell'), Species(name='B', compartment_name='cell')] compartments=[Compartment(name='ec', dim=3), Compartment(name='cell', dim=3), Compartment(name='pm', dim=2), Compartment(name='nuc', dim=3), Compartment(name='nuc_env', dim=2)] reactions=[Reaction(name='J0', compartment_name='cell', reversible=True, is_flux=False, kinetics=Kinetics(kinetics_type='GeneralKinetics', kinetics_parameters=[KineticsParameter(name='J', value='((A * k1) - (B * k2))', role='reaction rate', unit='s-1', reaction_name='J0')]), reactants=[SpeciesReference(name='A', stoichiometry=1, species_ref_type=)], products=[SpeciesReference(name='B', stoichiometry=1, species_ref_type=)])] model_parameters=[ModelParameter(name='k1', value=5.0, role='user defined', unit='tbd'), ModelParameter(name='k2', value=2.0, role='user defined', unit='tbd')]\n" ] } ], @@ -61,9 +60,9 @@ " compartment nuc_env = 40;\n", " species A in cell;\n", " species B in cell;\n", - " J0: A -> B; k1*A - k2*B\n", + " J0: A -> B; cell * (k1*A - k2*B)\n", " J0 in cell;\n", - " k1 = 0.1; k2 = 0.2\n", + " k1 = 5.0; k2 = 2.0\n", " A = 10\n", "\"\"\"\n", "\n", @@ -86,10 +85,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:18.305065Z", - "iopub.status.busy": "2026-03-06T02:42:18.304833Z", - "iopub.status.idle": "2026-03-06T02:42:18.407580Z", - "shell.execute_reply": "2026-03-06T02:42:18.407289Z" + "iopub.execute_input": "2026-03-08T03:59:10.171904Z", + "iopub.status.busy": "2026-03-08T03:59:10.171681Z", + "iopub.status.idle": "2026-03-08T03:59:10.396706Z", + "shell.execute_reply": "2026-03-08T03:59:10.396407Z" } }, "outputs": [ @@ -126,10 +125,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:18.408867Z", - "iopub.status.busy": "2026-03-06T02:42:18.408784Z", - "iopub.status.idle": "2026-03-06T02:42:19.249840Z", - "shell.execute_reply": "2026-03-06T02:42:19.249383Z" + "iopub.execute_input": "2026-03-08T03:59:10.398380Z", + "iopub.status.busy": "2026-03-08T03:59:10.398256Z", + "iopub.status.idle": "2026-03-08T03:59:11.247218Z", + "shell.execute_reply": "2026-03-08T03:59:11.246805Z" } }, "outputs": [ @@ -158,10 +157,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:19.251833Z", - "iopub.status.busy": "2026-03-06T02:42:19.251693Z", - "iopub.status.idle": "2026-03-06T02:42:20.905504Z", - "shell.execute_reply": "2026-03-06T02:42:20.905212Z" + "iopub.execute_input": "2026-03-08T03:59:11.248628Z", + "iopub.status.busy": "2026-03-08T03:59:11.248547Z", + "iopub.status.idle": "2026-03-08T03:59:13.957550Z", + "shell.execute_reply": "2026-03-08T03:59:13.957248Z" } }, "outputs": [ @@ -169,36 +168,43 @@ "name": "stdout", "output_type": "stream", "text": [ - "2026-03-06T02:42:19.267081Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "2026-03-08T03:59:11.262197Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", "Please remove the `packages` attribute from your configuration file.\n", "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", - "2026-03-06T02:42:19.271373Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@23aef859 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n" + "2026-03-08T03:59:11.265816Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@4d4cbc68 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "2026-03-06T02:42:19.624880Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@23aef859 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-05 21:42:19,627 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-05 21:42:19,627 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-05 21:42:19,632 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", - "2026-03-06T02:42:19.648999Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "2026-03-08T03:59:11.572163Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@4d4cbc68 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-07 22:59:11,573 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-07 22:59:11,573 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-07 22:59:11,579 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", + "2026-03-08T03:59:11.595128Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", "Please remove the `packages` attribute from your configuration file.\n", "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", - "2026-03-06T02:42:19.649930Z main WARN The Logger org.vcell.libvcell.Entrypoints was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@78281156 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-06T02:42:19.653998Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@78281156 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-06T02:42:19.672224Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@78281156 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-05 21:42:19,680 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-05 21:42:19,680 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-05 21:42:19,737 INFO (Entrypoints.java:83) - Returning from vcmlToFiniteVolumeInput: {\"success\":true,\"message\":\"Success\"}\n" + "2026-03-08T03:59:11.596187Z main WARN The Logger org.vcell.libvcell.Entrypoints was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@4095eb3c and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-08T03:59:11.600203Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@4095eb3c and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-08T03:59:11.616877Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@4095eb3c and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-07 22:59:11,625 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-07 22:59:11,625 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-07 22:59:11,685 INFO (Entrypoints.java:83) - Returning from vcmlToFiniteVolumeInput: {\"success\":true,\"message\":\"Success\"}\n", + "Setting Base file name to: `\"/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_16af6tl4/SimID_600541721_0_\"`\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Simulation Complete in Main() ... \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Setting Base file name to: `\"/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_c74l_z9x/SimID_649780665_0_\"`\n", "initializing mesh\n", "numVolume=125000\n", "\n", @@ -222,9 +228,9 @@ "mesh initialized\n", "preprocessing finished\n", "pdeCount=2, odeCount=0\n", - "No log-file found at constructed path `/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_c74l_z9x/SimID_649780665_0_.log`.simulation [SimID_649780665_0_] started\n", + "No log-file found at constructed path `/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_16af6tl4/SimID_600541721_0_.log`.simulation [SimID_600541721_0_] started\n", "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_649780665_0_0000.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0000.sim\n", "**This is a little endian machine.**\n", "[[[data:0]]]\n", "numVolRegions=8\n", @@ -251,35 +257,100 @@ "sundials pde solver is starting from time 0\n", "----------------------------------\n", "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_649780665_0_0001.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0001.sim\n", + "[[[data:0.05]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0002.sim\n", + "[[[data:0.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0003.sim\n", + "[[[data:0.15]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0004.sim\n", + "[[[data:0.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0005.sim\n", + "[[[data:0.25]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0006.sim\n", + "[[[data:0.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0007.sim\n", + "[[[data:0.35]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0008.sim\n", + "[[[data:0.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0009.sim\n", + "[[[data:0.45]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0010.sim\n", "[[[data:0.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_649780665_0_0002.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0011.sim\n", + "[[[data:0.55]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0012.sim\n", + "[[[data:0.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0013.sim\n", + "[[[data:0.65]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0014.sim\n", + "[[[data:0.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0015.sim\n", + "[[[data:0.75]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0016.sim\n", + "[[[data:0.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0017.sim\n", + "[[[data:0.85]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0018.sim\n", + "[[[data:0.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0019.sim\n", + "[[[data:0.95]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0020.sim\n", "[[[data:1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_649780665_0_0003.sim\n", - "[[[data:1.5]]]\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0021.sim\n", + "[[[data:1.05]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0022.sim\n", + "[[[data:1.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0023.sim\n", + "[[[data:1.15]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0024.sim\n", + "[[[data:1.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0025.sim\n", + "[[[data:1.25]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0026.sim\n", + "[[[data:1.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0027.sim\n", + "[[[data:1.35]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0028.sim\n", + "[[[data:1.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0029.sim\n", + "[[[data:1.45]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0030.sim\n", + "[[[data:1.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0031.sim\n", + "[[[data:1.55]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0032.sim\n", + "[[[data:1.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0033.sim\n", + "[[[data:1.65]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0034.sim\n", + "[[[data:1.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0035.sim\n", + "[[[data:1.75]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0036.sim\n", + "[[[data:1.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0037.sim\n", + "[[[data:1.85]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0038.sim\n", + "[[[data:1.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0039.sim\n", + "[[[data:1.95]]]\n", "Final Statistics.. \n", "\n", "lenrw = 243709 leniw = 50\n", "lenrwLS = 243666 leniwLS = 10\n", - "nst = 91\n", - "nfe = 115 nfeLS = 99\n", - "nni = 111 nli = 99\n", - "nsetups = 22 netf = 1\n", - "npe = 2 nps = 188\n", + "nst = 174\n", + "nfe = 222 nfeLS = 150\n", + "nni = 218 nli = 150\n", + "nsetups = 95 netf = 5\n", + "npe = 4 nps = 298\n", "ncfn = 0 ncfl = 0\n", - "last step = 0.004950\n", + "last step = 0.050000\n", "\n", "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_649780665_0_0004.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0040.sim\n", "[[[data:2]]][[[progress:100%]]]" ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Simulation Complete in Main() ... \n" - ] } ], "source": [ @@ -291,10 +362,10 @@ "app.map_compartment(\"nuc_env\", \"Nucleus_cytosol_membrane\")\n", "app.map_compartment(\"pm\", \"cytosol_ec_membrane\")\n", "\n", - "app.map_species(\"A\", init_conc=\"sin(0.2*x)\", diff_coef=1.0)\n", - "app.map_species(\"B\", init_conc=\"cos(0.2*(x+y+z))\", diff_coef=1.0)\n", + "app.map_species(\"A\", init_conc=\"3+sin(0.2*x)\", diff_coef=1.0)\n", + "app.map_species(\"B\", init_conc=\"2+cos(0.2*(x+y+z))\", diff_coef=1.0)\n", "\n", - "sim = app.add_sim(name=\"sim1\", duration=2.0, output_time_step=0.5, mesh_size=(50, 50, 50))\n", + "sim = app.add_sim(name=\"sim1\", duration=2.0, output_time_step=0.05, mesh_size=(50, 50, 50))\n", "results = vc.simulate(biomodel=biomodel, simulation=\"sim1\")" ] }, @@ -303,10 +374,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:20.906852Z", - "iopub.status.busy": "2026-03-06T02:42:20.906747Z", - "iopub.status.idle": "2026-03-06T02:42:20.964737Z", - "shell.execute_reply": "2026-03-06T02:42:20.964504Z" + "iopub.execute_input": "2026-03-08T03:59:13.959034Z", + "iopub.status.busy": "2026-03-08T03:59:13.958942Z", + "iopub.status.idle": "2026-03-08T03:59:14.018540Z", + "shell.execute_reply": "2026-03-08T03:59:14.018264Z" } }, "outputs": [ @@ -328,10 +399,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:20.965975Z", - "iopub.status.busy": "2026-03-06T02:42:20.965878Z", - "iopub.status.idle": "2026-03-06T02:42:21.241207Z", - "shell.execute_reply": "2026-03-06T02:42:21.240912Z" + "iopub.execute_input": "2026-03-08T03:59:14.019784Z", + "iopub.status.busy": "2026-03-08T03:59:14.019699Z", + "iopub.status.idle": "2026-03-08T03:59:14.289684Z", + "shell.execute_reply": "2026-03-08T03:59:14.289432Z" } }, "outputs": [ @@ -362,10 +433,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:21.242549Z", - "iopub.status.busy": "2026-03-06T02:42:21.242453Z", - "iopub.status.idle": "2026-03-06T02:42:21.401735Z", - "shell.execute_reply": "2026-03-06T02:42:21.401323Z" + "iopub.execute_input": "2026-03-08T03:59:14.291136Z", + "iopub.status.busy": "2026-03-08T03:59:14.291044Z", + "iopub.status.idle": "2026-03-08T03:59:14.445296Z", + "shell.execute_reply": "2026-03-08T03:59:14.444969Z" } }, "outputs": [], @@ -390,10 +461,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:21.403158Z", - "iopub.status.busy": "2026-03-06T02:42:21.403064Z", - "iopub.status.idle": "2026-03-06T02:42:21.408110Z", - "shell.execute_reply": "2026-03-06T02:42:21.407840Z" + "iopub.execute_input": "2026-03-08T03:59:14.446743Z", + "iopub.status.busy": "2026-03-08T03:59:14.446639Z", + "iopub.status.idle": "2026-03-08T03:59:14.480162Z", + "shell.execute_reply": "2026-03-08T03:59:14.479909Z" } }, "outputs": [], diff --git a/docs/guides/notebooks/visualization.ipynb b/docs/guides/notebooks/visualization.ipynb index 1d74d60..c4043a8 100644 --- a/docs/guides/notebooks/visualization.ipynb +++ b/docs/guides/notebooks/visualization.ipynb @@ -23,10 +23,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:24.715763Z", - "iopub.status.busy": "2026-03-06T02:42:24.715683Z", - "iopub.status.idle": "2026-03-06T02:42:38.999870Z", - "shell.execute_reply": "2026-03-06T02:42:38.999435Z" + "iopub.execute_input": "2026-03-07T13:44:36.013570Z", + "iopub.status.busy": "2026-03-07T13:44:36.013448Z", + "iopub.status.idle": "2026-03-07T13:44:49.802943Z", + "shell.execute_reply": "2026-03-07T13:44:49.802487Z" } }, "outputs": [ @@ -35,39 +35,32 @@ "output_type": "stream", "text": [ "name='Tutorial_MultiApp' model=Model(compartments=['cyt', 'nuc', 'EC', 'pm', 'nm'], species=['Ran_cyt', 'C_cyt', 'RanC_nuc', 'RanC_cyt'], reactions=['r0', 'flux0'], parameters=[]) applications=[Application(name=3D pde, geometry=name='Site visit _Application0_20111127_1900085476' dim=3 extent=(74.24, 74.24, 26.0) origin=(0.0, 0.0, 0.0) image=Image(name='img_20111127_944930500', size=(256, 256, 34), uncompressed_size=20961, compressed_content='789CEDDD897ADC389245E18FCCF77FE72AC9B6940B172C010422EEF967A6BBA74BE9C4B9A416CBB2B46D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008005EDFFFFEF1FDE2771B23FF13E8B87FDC526B7C2FEC1FB44937D0EB06F4A1B1CF46BDD052703C82C70D62F33C076F34A2031C4E94D2072279CBE16A8BC2EDC0C907D83FBFC3DF5070645FDFF6E837C3394E7A77C55A8CCCF3640757EAE011AF2130DD0549F6880EF14E101FE7D94AFBBC05FF20BA8F7B72CE07D625BEAFDB203A8BF13E8E84FB0C0DF0AE5FA56DE873720DE4FBE727E57BFF7D90D88E7F7F47B1FDD40CFD557EFF73EBB012EBF74BEF81BBFAD6700EF93DB10CF97BFFEEA3740FBF5CFB100FDD2F9F46B0FD01AAEDCFFFB48DFB35BE8E8F73DB891E6FC2CE8D7EEAF1EC0FBBCC6B8FCD2FDE42BE78B7FD1BBFAD517BFFC95FDDE871D413CBFEEEF3C25A45DBF950EE07DCA71B4EBE5FFCEEB7DBFF701C7D2AEBFEBF73EDD70DAF5DBE500DE479B423C9F6F7D733280F7A9E6D1AEDF8EBFFB9712F1FCCF7EEF034DF616AF96BF3D2FE07D121FCAED000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0FEBFAF7FF33EC7087B41D5FED7F8D34C5712B6EFE907B82CCBDC5FD09639FF29EE342F6DFEFE527F5A98B7FFC8F98BCD3FE0207F530EF37F3AF7A7174F35C053C8D902FBB61FBD94CF798D1D965DBD261CBC6E449EE22DE47E819349627E387C7A69CF16B81AC42FA3C56BCCDFFFAADAD1AB4310D797B6658B60BA8363E7CBF7DB0EE01DD3423CDFB0DFBBA49578FE66B480774407F17C9301BC137A18E4ABF77B27F411EFEFCF8FDDAF7EFDD5FBFBF3E90FCC209FFEB82CF2E98F4BBCDF245FBE3FEC0046F9F2FD4117B0CB0FD96F981F7200F17CEE7FED7CF57EC37CF57EEF9426F4D32F3C8065BE7ABF774B0BCBFE8803D02F9DCFFB3FF17EC37CFAE3B1CC57EFF76E69A23E00FDDAFDEAEFFFE9D7CEB7EB0FF9373FE5FFEC9BAF7D50AE97EFD7CED7AEE7CBFEA4EBE5BFE6FDEB0336E5FC3FE857AEDFDA07F03EB715ED7AF5FCB601BCCF6C483AFE8B767D65BFF76107908EDFCAFBBDCF398A787E59BFF7210752EF2F19C0FB8843A9F7977CC3CFDCC4F32FFA437F53DF72A2D7FD8778FEF100DE679A493CFFB3DFFB4093A9F77F7C1B6C35EAD7FF6D01EFC3B850EFFFFD992EA2FD9BF0B5070000000000000000000000000000000000000000000000000000000000000000000000084EF7676EFCA1FD7337B47FEC88F28FDCD97E7EEA8EF731DC88F76BFFC8A9DF1FBAE57D1017DA3F6E4BFDDDBEF2FBFDEF9FADAC9BCF9B7DFA95FBF9A84FB95EFE276D72F9C997EFD71D40BB5EFAF73D5FB8FCD2F9EAFDDCFEF2F9C2FDE2F9EAFDE21FF9AAF78BE7ABFFCE4FFCB3BEEA9FF516CF8F71FDC79D6E0FD23FEA8831FA870DB0EF310610EF1F75C43D58BFF119F720FDA3CEB8871860D81957CD7F39CAC043EE8B0EF0F72C5FFFF27E44D3432E9A7F543DE29423A7ED73D57F79CCBA8CA0FD6707AD0E79FF25830F507D1D17BCF27FDDF51F9EB8F9FA5B9EDCC8FD009F276FEDB73F7DBFC2FEEFAF583E784CD5938C6AE851DCFF1BF0FEDFDD772D5B6FD05F766953E4EFC71F282E7C756FD5F65F4E1390617FC809C4FB6DF3E3F573FD19807EBBFC6803D8D60724DE2F9E4FBF763EFDDAFD86F9210750EEDFB53FF6358E0F37807AFF8005BC832A89E7F37B7FF2E9D71DC03A3F58BF797EB00106F4871A60447FA401C4F3E9A75F399F7EED0146E4ABF77B37D5A09F0194FB47E4471A80FEB103ACBEC5E8FED507189DBFED6B0F30BAFF7D8ED5D03F7280CF3D9643FF84FE850718D31FE60618941FE70618DBFFFBD5459E8D1706E5BFE4EEDB4A7FD3FBCDF8FCB569D76F7C025C3C9FEB2F5D2FFFE53F7CF917FDC2F5FCCD2FE97ABB7CEF9046F42BD7D36FD21E37BFBFDF3BA09B767D5FBFF7D94D88E7B7F77B1FDC8676FDD63A80E1F3DBFD528D07F0AB5FE26672BCF66BFC01A15BFDB6C6008EF94B0CE099BFC4378576AC7F7DF621BF7ED509E6E7BF3EFDA0A7283FC0F4FAF7030C7C9A826777C9DF76D7B783FEFD2FE718FF44274FEC9CBFFD7CB9D094E77A7DE2ABF2B997C565809BEB3EF54C6BDD00FFFEF1DCA3CC7BB6A727757BB5FF3C8CC773AED3EF413CFF6400EF434DC40DA09D7F3480F789E652EFFF18C0FB3CB369D7FFB1FFFDF04B341F00000000000000000000000000000000000000000000000000000000000000000009A87FAF6DF97EF10174BFDBFE37ED1F38B0C48F40F5A4FE1327D40750FF9123DAF5E26FFDA52FBEF82BBEF6C5DFB6C93F58763DDAF59BD38FBA5D8778BEFAFD2FFED64FFEFED7AE97EF97CFD71E807EEF13B812BFFA5C7EFA85914FBF30F17EF5DFF88BF76B7FD25F3D5FBD9F3FF492EEE7CF7C430C30EA78FB92FD4F47F93ED7B803AED8FF72927DE809F7B1BF7C8B9793ECEF463CD94AFD2F27F9A82F3B6379C7E0755BFC1EE5A8BEE88CC519A3EFAE1627D585A7FCFF1F567434DD5D8315F45F1CB32AA3E9E61AAE6380BA8EBA65A729EA3F3E675D47D5B433B52E6092BFC204FDFD25EF250A7E75A7298AFA3FCF56D5DFF61493B40D5071F2C22770EA2F3DDDE500B7EF244F5ED63FBFBCFFF58437EB9CBDDCF89E5A15FDCFC72FEC5FBDBE2E7FFF7D5B7D31CDDB2F3FAFA5456DFFD5348BA71E32ECFFDE2018E3FC700B68F7DBD7FF5920CC0C6306D8E9F70E2B253E8078FE907EEFA60AD4D32F9B4F3FFDF4D34FBFE800E2FDE2F9F4D34FBFF000E2FD63F2E98F62507F9801E8971E6058BE7C7F8C0106F647186064BE4EFFE31175009BFA2F7FFFB35EFFE39FBFFF31D40286F9BF33045AC0BC5E6B80A3FC50FD7DF9C7FD1FEF0CBC232F8CC83F7867E89D796EC400072FE89D796644FEE10743DEA16766F5AF3AC080FC501F0C0FE83F7B71EFD443F6FDE72FEFDD7AC4BCFFE2E5BD5B8FD04FBF65FFD5CB7BB71EE9E93F1A40BCFFF2C5BD5B8F98F6DFBCB877EB11CBFEBB17F76E3DD2D5BF97F42FFECDDECCFA4FEA7F9FC339F44457FFCB677F4FF3FF7E7BA9CC039CFDD39FE7704DBCD4D97FE5F7391CFBEE4CC897EF5F9976BDFCD7FFF1D71FE89FD5BEE43453EBD7CB37ED2F789E5959C526E5BFF4AFB4C39CFAA7675AECB783D3F2D7FC2660F3EA0F9F6E645AD38146C61F3EE1A0AED6E30CAEFF7ECACFE735CFAA38CDE4FA9327B60BEA3AC6BCFC655E117CEA0F9ED9A4A6FB14F3F21719C02FFFE3C92D7EC5CE234CADFF7C7AAB5FB5FD0473EB3F9FDFF2576E79FEF9FDDE6F06BCF3BDDF15BA5FFFCF3358FFF2154FEDD3CF028E6F079BFA871CD0698135E23F8E32EC49AE9ED4ADFCF330C39FEAF329DDEB5F8E33E5D9B6E2FE59C7F939D1ECE75BA5FEF74C339F6BB5FEA95F37B362FE4C37E9C2FDDE279B837EE9FCED7C01EF734D239E7F3080F781667B2A17ACFFEDF73E871BF1FCA5BF501900000000000000000000000000000000000000000000000000000000000000000000000000000000E0821F75274EFE0650FE41975FA47FD2E7DF9F75EA7D0847F43300FDC203A8FFB06B5E03FE2CE07D06576EFDABCCEE34C032B79DD36BC03AAF772E032CF476C7E3282BBDEBF538C942FD1E47D9D7ED7FFE8FA3DE48EF0BF5EF6F87D9DF8D7CCE01BF76ADB7D08FFC01A71C3B6EFB61F6C37AF3530EBEB9DA0F73C1EEA3D5C1F756EF79CE1718F37C56BF6C87A9030CDBD5F0482307187763599EA9AABF2261DC7DD5A3EF06A849A81B769ADEFED284CA5F799A9E1BA022A161DC394AFBBB0668FAC5E728EE3F3A64D9F15BD79DA2A2FFE0984587BFFE65BCDF02F40C5074F196B9D487EAF23FAEDD6DD1DAF50DFDBFBF21BA8BBA196F090DF9C5594B87FF65D37FD8B77CFCE9E73CDA17788A5DBDDEEEDAFF841EFD47EFC873D6F927A32C4B3C7FCE00DE8D97C4F3C7F77B07DED1AE1FDCEF1D774FBB7E1B3A80775A09F1FC81FDDE6565E8279F7ED5FE71F9F44740BF74FFC07CFA0318D91F6100F1FEA1F9F42F8F7EFA8D3C1E010730ACFF22DBFF78C41CC0B63E5CBF757EB401CCF33F16F02EBC665FFF790B78375E19501FEA7580FE01F9815E0546F547B90546E587F950587D8051F907FD4B0E30AC3FC80053FB171C605C7F8C01C6E5ABF71F3EC23BF7C3A8FEFDB87FB901C6F49F3FC4BBF7C380012E1FE2DDFBCE3E5FA7BFEC77BFF4AF3C4057FFE1004AFD870BD01F277FC06700AF5FDCBBF79D7ABFED6780CE3EECD5E82F7979EFDC4F53F3171CA0AB7FA7BFAA7EC101FAFAF7FB37798B2FD0DBDFC03BF9C5B8CA180B8C69BFFDE5FD82DF0CADBF78029FDA4F83EB2F9EC121F6C0E8FA9FEF0FB8EA0483EBB7DF6F6EB6E40296F967FDD7CF35ABF4D8E8F89227ACFB1EA2B626D79F3FE7A8C086A38CAD3F7B62FBB8A6634CEA3F786AEBB6A643CCAA3F7C72CBB2C6234CCC5FE295C02FFEF8D96DAA7A4E30AFFEE8F9FB7FC5BEE79F5B7F74029B5FB5F5D967D71F9DC1EE576E78F2F9F9BEEF0856E877BD0556C83F3887FD13143EB157FFFB41463C43C1D37A0EF07A9A51CF70F194EEF52FC719F924874FE8DFFE729EE14FF4F67C6BD43F9F68CA93D5F4CF39D09F534DFB09B12BD6CFA45D5FDAEF7DCA71D4FB4B06F03EE250DAF5DBED00DEC71B4E3CFF7A00EFB3CD40BE6CFB1FDAF54BFC59942FEDFAD77EEFB378205FB8FEDB57BB6E3D000000000000000000000000000000000000000000000000000000000000000000AAA97F736BF5FE4DF89BBB7FA35F7C01F90136F501D4FBE50710EFD7FE112F1BEF02C47FC80F03F0739ED417501F40BD9F017823483F0348F7CB0FC06B80F800E4D32F3C807AFFCB8F7C961C61DF77E99B602F1920F332FBEB0287A93AFD47B741F2578D83017EDE1EEE029F2A3EE9BFB929F228ECCF3B81DF006B2CEAD1BF6FEBFC297479BFD979977A8D9ADF3FE28E6A57D16F73DE013754879A7C93F30EB9A5CCCE337A8031B794E989860EB05C7E657FE78197ABAFCDEF38F4BEE0CDDFD2DF7AEC15EBB7B6015A8EBE687E5B7FC3E917CD6F1EA02E62D9FABEFE7DBFFF8D4CCF6C33F4F5DF262D5E6FD57F96B57ABD5DFF47DCBEE67BFC3796F9FF02F7A3F425EBCDFBEFA6598D78FEBC7EEFD063E42BE76FD316F0CE3C251DFF45BB5E3D7FFC00DE7D37C4F3E9D7EE17CF57EF17CF57EF1F9D4FFFDAE8A79F7EFA5507A0DFD8E3FFFFD1EC7F3CBEFEEF9B60FFE35998FE31F92F0378275E1A942FD6FF5E1FE71540BC7F507D980186E507E93718E0383FC89BC081F921FAFB0738EF8FF02A302B3FED0017FD6F03ACB9C0C4FE251798DABFE00053F3171C6072FF72038CCB8F31C0F47E9D014E1EE21DFC6658FE59FF62030CEB3F7D9077F1AB51F9E7FD6B0D30AAFFE261DEC92F06E587E9EF18A0317FB101E81FD07FF750EFE827EDFD1D0378473F19D27FF748EFE8271DFD459FFBCD3C406B7D96FE823FFB587F00F3FEB2877A67FFE8E93F1CA0F4B1DEE17F59F707CB37FE1448F903BDB37FF4F5BF4E50F128EFEC1FDDFD875FF6156700ABFEDA077977FF63D0BFBF7FD1E373E2EA0B98F45FE62DBDC0F0FAEBA770EB2E399C49FDED73F874979DCDA2FEEE295CB24B0F67907FFF141EDDC587EBAD7FFE6648E7CF39B5F9ED7063EB7F9FE8FA5987979E1D6B4AFDF6FEDDCEAB1F3ECAA4FAB2A71ED0577F8859F9474F6E5DD7708479F5474F6F99D67480A9F54707B00A6B7DFEC9F99F47B0886A7E7287FACF4358FC8A8D4FED52FF710AA35FB4E1999DF2DF0F62F8CB563DAF63FEEB59AC7FE192E774AFFF3DCD885FF9E62997A8FF739E61BFF2C9F3AD953F9D787E4BBFF7914D69D757F77B1FD79C787E5DBFF76147D0AEAFE8F73EE820E2F9F46BE797F57B1F7220EDFAED7E00EFF38D269E7FDDEF7DB809E8D76DDFCEF3BDCF358B76FD425F8CE0453C7F85AF4370259EEFFB07F00BD0AE7FEEF73E890FF1FC4D3C9F7EE9FABFFDDE8770A45D3FFF2B4E0000000038D0FE8D0FBFED95CE97EF177FF597EF57BFFFB5FBF9A437F9BAFDDA7FE2C51FF84AF78B7FBD035FED423EFDE4D32F887EE9FE9D7EE17AF5BBBF91F85CEAB70BFDF4D3EF7D0A47E2FD91AFBFC5C1E3F6DB7CA4173DBFF7F061AFBF65BFCD89A6B2FABD4ED47EAB1B20417FD7F9E3F61B0E6076A4996C3EDDA17EFD53F4F7FE2266479A8A7E83778081FB4DFE6E7BE87E83DF0385CE37B80162F7F7FFF62D787FF700D1FBBB3F0B94A1BFF315C0EC283EE8EF7C03607714175C7FEDEBFFD5D0F3D8F8FD3D1159FA1B3352E477BC0DA03F457FF300EAFD5DEF3B16D2FA1630CBF56F1D80FE24FD8D03A4C98FFB950C460CFE3020368B3F0E894CBD9F01E8D7EE971F807EF105D4FBE50750EF971F60577F1B48BF763F03D0CF00D203FCBE0FD45C40BD5F7E00F57EF901D4FBE5BF19CEFECAFB38F3150D907898FDDDE90BCD3ED9241F037C96A67EF538E87F2AFDFF3F257FF370DC7FC2FBB003A8F7CB0FA0DE5F3580F7594750BF01E8D71EA0AE3FDF0095FDE906A8EDCF3640757FB2051AFA0DBE9D9ACDD92D34F577FD4DC2A5F25BFBDB224C6E1F5BEDFD1525DF2FD8B5DC307DFD452D8DA3CDD1DB7FDBD3B2D84406FDD74D6BE71BF59F96D52CE5C2B0FF23AF702357C6FD15EBAC41BC5FBB7E66BF77E921F295F3E997AEDF660DE05D794E3C7F4ABF77E315FAC9A75FB55F3C5FBD7F463EFDCB9A924FFFB2C8A7DFD0E3116A00F3FA7F82F49B0EF078A1DEFF328077E6B961F92F0378579E13EF1F571F638091F9F4CBF41FE63F0FE0DD7966687E801B606CFFFA37C0D07AFA9F5ECABBF4D8D8FCF56F8079FD6B0E30B17FCD0506F7BF7D22C0BBF6D3E0FC8F4F0779F7BE9BDDBFDA0063EB8F3E1DE85DFC6A7EFF520338E4671A80FEFAFA4C03D0DF92BFD400E3F263F4F70CD0DCBFD200C3F283DC00EDFDB7035C3CD4BBFAD7B8FECBC77A67FFA07F50FFF563BDB37FF9F4AF33C098FEDB077B67FF70EA5F668121FD458FF72EFFA3BDBFE40FBED61F60407FA4FC8E01525CFE01AFFFA58FF72EFFA3BDFFF6CB3E420C60DB5FF578EFF46F1DFD975FF4186501BBFEB3C4B527E8EA3FFF9AE797BAC403ECB7F177CFE1577E7FB61EE5CFE1555E723693FCD76FFCB6BF7E4F79EF0526D4FF3ECFE9D34ECB3D3ED7F0FABFCF74F1C41352CF4E35A5FEEBA92E9F7B64E49559F5F74F3F20AEEE00F3EB5F0F605C56FBF42EF5AF4730ECAA7F72A7FA9753D834353DB567FED3410C7EA196A7F5CFFF7316A35FA8EA3957A977229EDFDBEF7DFC6EE2F95DFDDE67B7209EDFDEEF7D702BDAF52E3F016329DAF50DFDDE07B6A55D4FBF76FD563980F7610710CFA75FBABEBCDFFB9CC390AF9C5FD2EF7DC4A1B4EB6FFBBD8F379C76FDDA5F9F348376FD45BFF7C126215F39FFA4DFFB54F368D71FF67B1F692AF1FC8F7EEFF34C267EF5D52F3FFDE40BE76FE42BE7BF0EE07D1607E2F9EAFDE2F9F4934FBF6C3FF9F4934FBF7CBE60BF78BE7ABF78BE7AFF4EBF72BF78BE7ABF78BE7AFF4E3FF9F4934FBF5E3FF9D2FDBCF5A33F7FFED7B798FDF3FD36FF6676C7061BEBFDCD5CF7E163F7DBFC82FDBFCA3CF49BE7C7EDEF3F79B87EE31B205CBEF11D10BEBFFFDD7FB47ED301E2BDFE6FA61F0445CC37EC0F79F90D5F0362F673FDC5FBCD7E1B14B5DFEA8320FA83F61BFD3620477FE7AF6277A899D4FB4D7EBC8A787FEFEDE3CC6800CB234DD5FD2620F8F57F5AA0E7F1A6279A8D7EEDFEBE01C4FBC3BFFDDB7EDF04B63FD6FA4453F5BD0B8CDFDFF73E30437FC70009EEFF2FEAFDCD0364E96F7D2798ADBF36254D7FE30069FA1BDF05A4E96F1C20617F554DC6FE8A9C8E0F9C57B3EF0D0B24EA6FFAF39044F93DAF00E30E3595F6F56FEFCF3740E503469E69A6EA1B206B7FE503469E692EF5FEB601461E6836FA2B92F2DDFF2D038C3DCF6C55EF0312F6570D90B0BFEA838084FDEAD7BFEA0650EF8FF9D75F6ED4DE00C30F345BC500B9FB6FD332BEFE6F153740F6FE9BB6841FFEFF513840C6DFFFFC417FC100551F290443FF6D5DF9BBC980F6FD6581A3C4D4FD9F7F4778BFF8E73E471CEAB3FF5FE6BEDBFDFDE1751DF59FF23EEC0055FD0907A05F7B00FAB5FBD507A8CC4FD75F3D40B605AAFB932D40BFF6024DFD891668EC4FB340737F92053AFACB375878AACEFEB20916BE57FAFB0B3648DF7F1D58329117ABFEABC4A2917C58E69F44962CE46640FF6FE8ED34FE46F59F8FB216FAC9D7CD9FD9EF9D7A887CFA75F3E7F57B879E209F7EDD7CFAB5F3D5FB27E5ABF77B679E12EF9F944FFFA2C4FBCD3B1F5F64FB1FFF04E937CEFFEDFF58C0BBF4D8B8FCF701BC4B0F99B6BFD6BF2FE09D7AC8B0FE907ABFCC0027F9F2FD4F0378A71EA27F6CBE7CFFE2030CCF57E8BFCA5FBB7F7CFEDAFD16035CE7CBF7AF3DC0F8FCE4FDB7F96B7F08ACDEDF3BC07DFEEBA741BC733F4CEE5F6E80D9FDAB2D30BF7FAD011CFA975A40BDBF6F8082FCA3FE9506A07F7EFE4A03D0AFDDDF3340733EFDEBE8E8AFF9CDFFB203A8F78F7C05B878A877F52FFA47F55F3FD8BBFB1FA77EEFEC1F3EF9EAFDDED5BF06E5DF3CD8BBFA974F7F8201BAF293F7DF3FDABBFA977D7FC9A3BDAB7FB5F6177CD15F847CE3FEC2C77A473F69EE3F58E0AC3669FFFB00C7F1EFCFB2E5E9DF0BEB9F9EC6B1F4844DFFF13FFF781AB7CA733DFD7BD1B55F5B57FFF70291EB07FD1D38EFA80ADAF59BFD00DE3DB5C4F36DFBBD631A68D76F73BEFFE9CAC4F3E77CFFDF8569D76F93BE01F6C2C4F3E77C03F88569D7F7F57B9FDD82783E3F0044BABEB5DFFBD476B4EB5BFABD4F6C4BBB9E7EF17CFAB5F3ABFABDCF3A82767D79BFF73947D1AE2FEBF73EE348DAF505FDDE071C4CBBFEA6DFFB70E389E75FF67B9F6D06F17CFACFE235F24FFABD4F358F78BF78FE71BFF7A126229F7EDDFCA37EEF23CDA45D4F3FF9CAF9F4934F3FF9F4934FBFF77926E3F2934F3FF9F493AF96FFDEEF7D9CE9C4FBC5F3D5FB79EB27DDCFC73EE4D34F3EFDF4CBE7ABF77B9F6736F17E91FC7F6DBFDF7DD9FB44737DBC95131B807EED7EF901E8D7EE6700F98FF4E50750EF971F807EED01D4FB2DFFA033E874560344BD75ECFA830EB0D1AFDDBFA9F73F2FD0F32B589E68AEFE1B20767FFF0D90A6BFB12278FFD302ED0FB73DD064EAFD3F0BB43FD8F638D375DD0009FABB6E8044FD4D1DF4C7EFEF1920557F7D4ADFEF9DD6417FDB0259FA5B3F0CCCD75F5793A6BFF17782F467E96F7A0DE8F9C879317BCB0D90A8BFE91520517ED30D90E9FAB7DC0049FB6B1F32F05033895FFF860F8273E56FD5BF0F4C76FDB7DAA2B4FD8549F9FAEB92E8A73F677F5913FD69FB8BA212F657DD0099FB4BAAE84FDC5F9095B1BF66808CF93503A4BCFEE59F08ABFA582110F5FED2B2BCFD656935EF2A832929AB794F194E419A44FF795CF1BB8990EEEB64FA8FFBEEFE796CFBBBCB17F038E1581FFDAF9577EBC47734C057E8C97F9DCE49FF19EFE39AA35F7B00FAB5FBE507A05F7B81FAFE5C0334F4A75AA0A93FD1006DFD791668EDCFB2407B7F8E057AFA332CD0D71F7F83FEFED81398F4079EC0AA3FE80486F9214730EF0FB6C2A0FEEF0D22CC30B0FF7D8E25CDEB5F728089F9EAFDDEA987C4FBC5F3E9279F7ED97CFAC9A79F7ED17CF5FE69F9F4AF685EBE7ABF77E931E3C8C71F61FA87D41F4FE09D7A685CFFC702DEA94746E6BF2FE0DD7A6470FFF2038CAD7F5BC03BF6D3F07AFA9F06F0AEFD34217FE57EBBFC98FD76039CE7CBF7AF3CC08C7CFAD3F75FE6AFDC6F34C075FFC2034CC95FB8DF6680B8FD53F217EE371940BCFF367FE50126E72FD7DF3F80787F41FECAF7FFECFEE50698914F7FD601CAF2E97FE15DFC6A42FFCAF9F3FB330DD0922FDFBFD8023DFD45031C3CCCBBF99943BF77F28BD1FD078FF24E7E35BDDF3BF8CDEC7CFAD73232FFF871DEC5AFD4FB9B0768CD5F6D0187FEA51618D67FFD70EFEC5FF48F18E0EED1DED5BF46F4DF3FDABBFA476B7ED117FDAD9FDF31807AFFFDD7FC9EC52F35407BFFD100E7C53FFF793586FD87EDFF9E665BB2DEF006B8AAFFF7543E8997ACFA6FEB1765D37FF48FBDCBCA74F4EFE12FFE66D27FF48FBCB3CAF50CB087AF1FF1B760BD8BEA88E75BF77BE754D3AE97FFF6AF86FDDE258DB4EBADFABD2BDA69D79BF47B2774D1AEEFEEF73E7E37F1FCAE01BC8F6E827CE1FA4DFE074089E737F57B9FD992787EC300DE0736269ECF4F40D6CEAFEAF73EEB08DAF515FDDE071D44BBBEB0DFFB900369D717E47B9F702CF1FCBB7EEFE30D279E7FDDEF7DB8F1C4F3E997AEBFEAF73ED91CE42BE79FF67B9F6B16F1FC937EEF534D239E4F3FF9C2F987FDDE679A483C9F7EED7CF57EF17CF57EF1FC837EEF134DC5E5279F7ED57CF57EF17CF5FE83B77E5203D04FBE6EFE67BFF781E612BFFAEA975FBD5F3CFFA3DFFB3C9371F9A5F3D5FBC5F3D5FBC5F375FABFDB244A8F7CBC9317EB971F40BD9FDFE48B0FB0CBFF46E7E31EF03ECE74DC00DAFDEA6F01E8D7EE6780F7DF067A1F67BABFC5BA03FCA1DEBF89F7AB5F7FE1B780DFD4FB790510EF971F807EE97EE5DF03FDA1DEAFFE21303700FDDA03F02E40BC9F01D45F05D4FB5B07483357E3EF03F2DC30F44BF7EF4DAF0089DE62D2DF3000FD69FA9B06C8D4DFF21620557FFDFBC06C1F31ABF7D70E407FB2FECA4F84D09F6D00F5FEBA01E8CFDB5F5225DE5FF7C1520C7BC50019FB6B06C8DE7F1796B2BFE20648DF7F5396B3BFFC06A8FA58218ED21BA0E65D6528850348F45FB4A5ED2FBC0134FA4FE38ADF4C065432804CFF715EE97B8990F6FD6E81C2B79141BDF77F2416DC20A17D0EF09C797F7B4477D87FCEFBB8E6E8D71E40BD5F7E00FAB507A8EE4F36407D7FAE011AFA532DD0D49F6881C6FE340B34F72719A0BD3FC7023DFD1926E8EC0FBF40777FF0092CFA236F60D51F7502C3FE9013D8F6C7DBC0BE3FD40883F2C3AC30B6FF7B82A55718DEFF778455CDE95F768159F9AB0E403FFDE4D3AFD92F9E4FBF76FFBC7CFA57443EFDF4ABF64FCC57E87F7CFDEFE3F188D26F1BFF4CAEFFF12E40FFC8FCCF05BC6B3F0DEE7F5BC0BBF6C3F0FCD701BC733F4CE87F1EC03BF7DD8C7C8DFEF3FCE701BC7BDFCCC997EF5F768049F9F4AFD96F961FB4DF6C819BFCF4FDF20344ED37CA977F03A0DE1FF5FE9FD59F7C80DB7CFA33F7DFE7AFDB6F3180787F417EE6FE92FCC4FD45F98907A8CD4FD65F7DF9E95FCC8CFCA5FF1068C2002F0FF1EE7D47FFF001C4FBDF1EE21DFC867EEDFEAE011AF2E5FB571B606CFEC1A3BC83DF8DEC3F7C9877F09B81F9C7FD8B2D30B0FFFCB1DED14FC6F55F3CD63BFAC9B0FECB077B57FFA27FC800378FF5AE7E32223F4EFD88FEBB477A17BF32EF0F55BF990F7012FDEFDFBC6B3F0DCFFFF73CAE95E72CFBCFEBD7D5D87F3040C47AC3FE90F59BD5878051EB8DFAE3E6777D0E680F5F6FF0A7E007FFA577538DCEFE23DE4955B4EBCDFBBD73AA89E79BF67BB7B410CFE7FB5F8BE7DBF47B4774D0AEB7E8F72EE8A35DBF750EE07D7803E2F93DFDDE4737A15D2FFF03C0C4F31BFBBD4F6D47BB7EE307606AD7F313B0B5EBABFABD8F3A84787E71BFF73947D1AE57CF2FEAF73EE348E2F9F7FDDE071C8C7EE9FC9B7EEFD30D279E7FD9EF7DB619C4F32FFABD4F3607F9CAF9A7FDDEE79A45BC5F3CFFACDFFB58D388E7ABF78BE71FF77B1F6A22F17EF1FCC37EEF33CD443EFDBAF9EAFDE2F907FDDE279A8ACB2F9DAFDE2F9EFFD9EF7DA0C9C4FBC5F3E9279F7EF235F3E9279F7ED97CF57EF1FC4D3C9F7EF275FA85528FA9F76FF43300FDC203A8F7F30A203E807ABFFC00F46BF7F32E40BD5F7E00FAE957EE971F807EFA19807ED901E86700FA19407700F57EF901E86700E97EF901780DA09F01940750EF971F40BD5F7E00F57EF901D4FB19807EEDFE9601524DA5DE5FFF8721C95E556A6F806C6F2A2AFBD3BDA9ACFC1080FE64FD7503E4CB97EFAF1A207BFF5D1BFDF9FA6B0648D95FFE16A0E203A5488A6F80A4FDC53740F1FBC9604A6F0089FEF3BAE27713E1940DA0D27F9257FA5E22A0BD6080D2379221BD0FF05958FA3632A68FFEB7C6A25790C00EFA9F42EFEF8EF0CE06B89A2593BAFE7C03D0AF3D406D7FB601AAFB930D50DF9F6B8086FE5403B4F43340A205DAFAF32CD0DA9F6581F6FE140BF4E46758A0B33FFC02DDFDC11730E80F3D814D7FDC0DECFA634E60DA1F7002EBFE68130CE80FB5C1A0FE28238CCC8FB0C0E0FEE52718DFBFF604E2FD53F2175E807EE9FE59F9AB0E20DE3F2F9FFE0589E7ABF74FCCA77F41F44BF7CFCC17E87F3CF6C7D7BF44E9B7AEFFA1D8FF7815A07F64FEC106DEB91F46E7BF2DE09DFBC6B2FE2C5FA5FF2CFF6500EFE01796F5F2FDE7F9CF0378273F9B96BF68BFE50097F98BF61BE6DFF4AF39C0BC7CFA73F7DFE5AFD96F3700FDDA0344ED371AE03E9FFE35FB6D06A05FBB5F7E00F5FEB8EF00E5FB4D06087CFFD33F253FF500E2FD45F9EAFD4F2FEF1DFC664AFEC2FDBD0388F797E5E7EDAF7EF5A77F3113FA5F1EE0DDFB6178FFDB23BC7BDF8DCE57EF7F7F8877EFBBC1F9EAFD1F8FF1EE7D37397FB9FE8E019AFA971BA0BDBFE24FFE53F6B75CFD051718D67FF638EFE03793EB33F4DFDEF9876FF9BFFEF7EBF9BC83DF4CAA5F977DFFC183BC232F58E7C7AA37EF8F966F7CFF47ABB7ED8F57BF35BD07389921627DFB478049F2ADFA83D65BFD16286CBE497FDC7A934F0144CEEFBF013EFF7BEFA23AEDFDFF2F70F0DF79F7D4EAE94F906FDCEF5D534FBBDEB4DF3BA58976BD5DBF77472BEDFA8D1F80209EDFDDEF7DFE5EDAF59DFDDE8737A05DDFD1EF7D7023DAF5FCFC3BF17C7E00A8743D3F0059BBBEB2DFFBB00388E757F47B9F740CEDFAD27EEF538E239E5FD4EF7DC691B4EBD5F3EFFBBD0F389876FD5DBFF7E9C613CFBFEAF73EDA0CE2F917FDDE279B837EE9FCD37EEF734D229E7FD6EF7DAC69C4F3D5FBC5F38FFBBD0F3511F9CAF9F46BE71FF47B9F682A2EBF74BE7ABF78FE67BFF78126239F7EF245F3E9D7CE57EF17CFA79F7CFA65F337F1FC8D7CE57CFAB5F3E9D7CEA75F285FA9F590FA00EAFD1BFDDAFDF203D04F3F0308F7CB0FC06B00FDD2FDF203D04FBFF200EAFDF203D0CF00F40B0F403F03D02F3CC0CE00F43300FD0C403F03480EA0DE2F3F807A3F03D0CF00F40B0FB03300FDF433806CBFFC00EAFDF203A8F7CB0FC0FB40FAE96700FA550750EF971F40BD5F7E00F57EF901F6D20192EEB3970E20DE9FF615642F5A20EF5B88F7FEC3C4C46F213FFA0F2253BF873818603F7F01A7430E74D4FF5B5AF6E621B2B3FECB5932A15F7B80CAFE7403D4F6671B807EED051AFA530DD0D29F6980A6FE440B34F6A759A0B93FC9021DFD2916E8EA4FB040677FF805BAFB834F60D11F7902A3FEB013D8F5C79CC0B43FE004D6FDC116B0CFFFB7418C1D06F5FFDD607D03FB432C30B47FFD0506E72FBFC0F8FEB51798D1BFF20053FA171E40BC7F4EBE7CFFAA03CCCA5FB47F5A3EFD2B9A974FFF8226E62FD9CFF5B7F710EE7FEC8F2F51FAADEB7F09F63FDEACDF6F9AFFD1FFBE8077ED87C1F5EF0378E7BE33CD3FEE7F59C0BBF7CD94FC75079894BF6ABF6DFE45FFD300DECDCF66D52BF45FE6D3BF62FFBCFC35FB2D07B8E95F738079F9F4AFD86F36C06D7EEEFEFB7CFA13F717E4A71E40BDBF688035FBE7DD0099FBE50750EF8FFB1E70DE0D90B93FF0FD2FDFDF3F40493DFD69FBCBF2D7ED9F3440DA7EF5EB2FDE5F98BF707FD700F5F9F4AF666EBE62FFCB63BC733FA8F70F1FE0F521DEB59FE897CE1FDCFFF610EFD82323F3037C0D6C637F517D84FC91FD11F29BFADBAEFE9AFD0D0364AA6FE8CF73EF7F1B911FE6E26F43FA23E5D7F6A7BAF7BF59F787BAFA9B75FFE723BCFBEED4F5177FB973907AD3FE80F596EF0042E69BDD0041EBAD6E80B0F936FD71F32D7E07F0F932DE5115AAFBBF1778DA21747DF7E7800FFE6BEFA23A1DFD87BC7BAA89E79BF67BB7B410CFE7FB7F4BD75BF57B57B4D3AE37E9F74EE8A35DCF0F80D1AEEFEBF73EBB05EDFAF67EEF735B11CFE707204AD7D3AF5DCF0FC0D6AEAFEBF73EEB08DAF5E5FDDEE71C453CBFB0DFFB94E368D717F57B1F7128EDFADB7CEFF38D269E7FD3EF7DBAF1B4EB2FFBBD8F368578FE79BFF7C1E610CF3FEDF73ED72CF44BE79FF47B9F6A1AF1FCE37EEF434D44BE723EFDDAF907FDDE279A4B3C5FBD5F3CFFA3DFFB3CB3D14FBE6EFE269EAFDE2F9E2FDFBF91AF9CBF89E76FE2F91BF9F4EBE66FE2F9EAFDE2F9FF06F03E851FF1FCEF01BC8FE04ABD7F13CF8706F577F4F2EFE9E50750EF97FF584FBD7FA39F01E4FB9507E05DA0783F6F01C4FBE50710EF577F0FA0DE2FFF7920FAB507A09F7EE501D4FBE507D8C507D819807EE501D4FBE50750EF971F606700FA19807E06501D40BD5F7E00F57EF901D4FBE50750EF971F40BD9FDF053000FD0C203CC02E3E807A3FAF00E2FDF203A8F7CB0FA0FE2E40BD5F7E00F57EF901E8D71E606780B201B26EB3170D90F8E6781FE02833F36BC747FF4767EE370F07FDCFA9E9DF3E9EF4DFCC9208FDDA03D4F5E71BA0B23FDD00B5FDD906A8EE4F36407D7FAE011AFA532DD0D49F6881C6FE340B34F72759A0A33FC5025DFD0916E8EC0FBF40777FF0092CFA232F60D31F7702B3FEA01B98F6C75BC0383FDC0403FA434D30A63FCE04C3FA632C30303FC40263FBD71F6070FFF20B0CEF5F7C8109FD2B0F30235FBE7FE101C4FBE7E4AF3B8078FFAC7CFA5734AD7ED1FE890378971E13EF1FD0F9783C84FB1F7FEC9F1B78A71E1913FF6F83E5071859FFB98077EDA7C1F96F0378D77E189EFF3A8077EE3BD3FC93FEE701BC7B5F4DA95FB77F52FEF300DEC9CFA6E5D3BF62FFBCFC3507A07F563DFDC9FBEFF2971C80FE69F5F42FD86F354049FE92FD360314E5AFD96F3240E47E8301CAF2571D40BDBF7B80D2FCACFDD1AFFFB41B80FE94FDA5F9CBF6770EA0DD5F5CBF707FCF00E2FD15F9F4E7EBAFC9A77FD9FED601AAF2E9CFD6DF9ABF5E7FDB00EAFD8DEFFDE8F7AEFDD4D65F31C0CBC3BC6B3F0DBFFE6BE70F7F03B8F8E56FEB6FCCA77F4123F3DF1EE79D7A6C5C7F88FCEAFE5C577F5C7F90FCDAFEB6FA75F36B0748973FA23F52FE80FE50F9F6FDA1EACDFB3F1EE1DD77CBB43F5EBEE50D10B0DEB23F62BDDD4740212FFE66D61F35DF6880B8F916BF05FA7C21EFA80AB5FDFF2FB0E7A9EFFF2470F0FCCE3F068F5E2FFFED6FE5BFFDB1E500DE294DC4F3CDFABD3B5A69D71BF57B4774D0AEE7E77F740EE07DFA7EE2F95DFDDE67B7A05DDFDEEF7D6E2BE2F9FC0044ED7C7E00A8743D3F005ABBBEAEDFFBAC2348C76FC5FDDEC71C463C9F7EE9FA927EEF138EA55DAF9E7FD3EF7DBAF1C4F32FFBBDCF368376FD45BFF7C12611CF3FEBF73ED634E42BE71FF77B1F6A22F1FCA37EEF234D453FF9BAF99FFDDE079A4CBC5FBB7E7B1FC0FB34F3D14F3EFDAAF99B763DFDE4D34FBF6CFF269EBF49C77FD1AEFFEAF73E812FF17EF17C0000000000000000000000000424FD252FDA5FEEA7FDC59EBF5FEEEA7D0E37F46B0FA0FEF5DEDC00E203A8FF850FF901E86700E97EF901D4FBE507A09F01A4FBE50750EF971F40BD5F7E00F57EF901D4FBF94CA0F800EAFDF203A8F73380FA00EAFD7C0CC000F433806EFF2E7E03ECE203A8F7CB0FB08B0FB03380F602FB3BEF034DF6D12FB6C041FFFB06B967391940E6BE28EFCF3940457FCA05AAFA130E50D79F6F80CAFE7403D4F63340B205EAFB530DD0909F6B81B601D22CD0989F6681F6FE1C1374F52758A0B33FFC04FDFDB117B0E88F3C81517FD405CCF2834E60DA1F7001E3FE7013D8F7C75A60447FA40906F5875960587F8C0506E6871860687F8001C6F6AFBFC0E8FEC517189FBFF600F44BF7CFC897EF5F778039F9F42F6A52FEB20358673E1EA1FACDEBBFC8F63F7EC5E8B7CD7FEEFF5CC0BBF5C8B8FACF05BC5B0F8CCD7F1BC03BF6D3E8FCD701BC6B3F0CAF7F5DC03BF7C38CFC85FB0DF32FFA571DC0B2FE2A9FFEFCFD57F9F4A7EFBFCC5F7500FAE7D467EFBFCDCFDD7F9F4F7FE2FE82FC450798974FFF8AFD160394E5D3BF647FFF0085F9AB0E30AD7FCDFCEE018A2FFFAA03A8F7F70D509E4FFFA2FD3D0354E4D39FAFBF267FDDFEF601E8CF90DFDC5F75F9171E604AFFBAF9ADFD592E7FEB00F4D39FA3BF6980D67CF57EEFD6232DFD8D1FFDA4E96FCC5FB2BF6580C6FC2CFDAD973F477F73FD9AF995FD35F5EF5F01EE5D7A42FAEA6F75FDED97DFBBF2DC94CBEF1D79614CFEDB23BD23AF8CE80F943FA23F52FE80578048F503FA435D7DFB7700C1F28D6F80F74778C71530ECFF7880775B09BBFE88F586FD31F3ADDE007EBCAC77573193FEB8F91637C0E70B7A4755A8EFDFEFEA23E5577F0EE8FD46885DDFFBC7C0D1EBF9FEB7E2F9A60378A73411CF37EBF7EE68A55D6FD4EF1DD143BBBE3FDF3BA097763D3F00483C9F1F80255DCF0FC06B1AC0FBCC96B4EBF909A8DAF5FC0468EDFA9A7EEF938E211DBF15F67B1F7220F1FC927EEF230E251DBFDDF57B9F6E38F1FCCB7EEFB3CD209E7FD1EF7DB239C4F34FFBBDCF358B78FE49BFF7A9E611CF3FEAF73ED254F42BD7D32F9EBF69D7BFF57B1FC681783EFDDAF99B78FE261DFF45BBFEABDFFB0400000000000000000000000000000000000000000090A6FE175EF90BCFDA03D0AF3D00FDE203F0168001B40750EF971F807E06A09F01BC4FE147BD5F7E00F57EF901D4FBF94CA87ABFFC00EAFDF203A8F7F3A950FAA50750FF3C80F6377FA75F7E807DD75E40BD9F1F00B24B2FB0BFF33ED0641FFD6A131C0DF0B4C29EFC3789A7F922F744697FD605CAFB730E50D19F7281AA7E0648B740653E03645BA0BE3FD5022DF9991668EC4FB340737F92053AFA334CD0971F7F81EEFEE00B18F4879EC0A63FEE0256FD5137B0EC0FB8806D7EBC05CCFB832D30A03FD40243FA034D30AA3FCA00C3FA630C302E3FC60243FB030C30B67FF90106E72F3FC0F0FEC51710EF9F902FDFBFF200E2FD53F2E5FB971DC038F3F178EC8F40FDE6F57F68F63F9E85E81F97FFB18077EAA1A1FDAF0B78A71E195BFF3A8077EB01BBF4E3FAC50730ABBF90BFFF32FF7900EFDC7753F2D7EDB7C90FDB3F297FD901E8A77F463EFD89FB0BF2E5FB171D80FE49F9F467ED2FCB5FB4DF6000F1FEC2FCB40388F717E7AFDA3F6D809CFDEAD73F7E7FDF00F487EFEF19A03C9FFE84FD15F90BF7370F5093AFDEBF707E6B7F96CB4FFFF8FCA5FBDB0610EFAFCB57EF7F7AA077EC11EDCB3FBE7FF1CB5FDFDF7CF9D71C606CFDF2F983FB5F1EEB9D7A4C3C7F647F84FCAAFE8ECBEF9D794AFCF2D70C9032BFB8BFAE3E4CFEA0FE30F9A503A4CD1FD1FFFA50EFC01BE6FD6F8FF4EEBB63DD1F2CDFBA3F5A7EE1006DF511F22DFB23E61BF687CC377B03F0F110EFB05236FD61F34D6E80B8F526FD91F3FB7F0BF4F9A2DE49553AFB83D76F159F03C9995FF349B0A7E693FA78F9B59F04BEFCC7DE2D2DAAFAAF79A734D1AEE7FB9FDB0CE01DD141BBDEA2DFBBA08F76BDFCCF7FE91BC0FBEC16C4F3F90158D2F58DFDDE8736A45DCF0FC054FF01A8F23F01573C9F9F002E5D5FD8EF7DC881B4EB4BFABD4F389676FD5DBFF7E9C6D3AEBFEAF73ED91CF42BD7ABE79F0DE07DAA79C4F38FFABD8F349576FD67BFF7796613CF7F1BC0FB300EB4EB9FFABD0FE2453CFFEF00DE87F0249EBF69D7030000000000000000000000000000000000000000000000000000000000000000000000003DC47FFA073FFCE67B01D90DF8F157DA0BF0F3FFB47F04E247BFD60447F94A7394F4679EA0B03FED02C5FD4917A8E84FB940557FC2052AFBD30D50DB9F6C81FAFC5C0B34F5275AA0B13FCD02CDFD3916E8C84F3141677FF805BAFB832F60D01F79029BFCB81B18F6875CC0B43FE000B6FDF116B0EE0FB6807D7EAC09C6F4C71960507F980146F5471960587F8C0506E687186068FFFA038CCD5F7F80D1FDAB2F20DE3F3E5FBE7FE50166E4D3BF2CE3D0C7974803D8D7FF15A3DFACFBADFE7D01EFCE3346F527961FC0225FBDFF3CFF7900EFD24316F981FB47D72F3EC0847CFAD7ED9F912FDFBFEC0073EA97EDB7C88FDB6F525F949FB93FEE0013F397EC9FF7EABF68BFC50065F98BF6770F50584FFFA2FD9D0314E7CBF7A71C2041FEACFE8C03D4E4D39FAF3FC7FD3FE906A07FD5FEF601D4FB537C00407FF30049EE7FFAC7E7D3BF707FDB0079F2E91F5CBFFAD7C08CAE5FFD8BC046E72F7EF987F72F9E5F3B40B6CB3FBA7FF9FCBAFE8E7CC5FE97C77A879ED1BEFC35FD29F3CBFB3BEA57EE2F1EA0A7DFBBF18AF8E59FD0EF5D786D487F98ABBF150E90377F407FA87CFBFE58F9E6FDAF0FF4AE2B60DAFFF638EFB61296FD01F30DFBDF1FE55D56C8AA3F68BE557FD47C9BFE8F877857952BE8AFF89B6EE1F20DFA3F5FDEBBA94AEF00B1EB7BFB835FFCADF4F7C08FDF19F6AB7CEF9A7A65FD3F37C2BFFB614F71F1BF540D70CD3BA58976BD5DBF77472BED7AA37EEF881EDAF5FC0008EDFACE7EEFC31B10CFEFE8F73EB911E9F8ADADDFFBCC96C4F3EBFBBD0F6C4D3CBFB2DFFBB4F6C4F3ABFABDCF3A8274FCC60F00576EFF261D7F97EF7DBA09C4F32FFABD4F368776FD69BFF7B1A611CF3FEEF73ED444DAF507FDDE079A4DBB7ED3AE7FE9F73E8A13EDFA2FCAED0000000000000000000000000000000000000000000000000000000000000000000000000000000000A094F40F8014FF01A0FC00DC931F81ADB1C549BFCA0D71979F7D8292FEC41314E6A75DA0BC3FE9023503245CA02A3FE102B5FDD92668E84FB540537F9E095AF3B32CD0D19F6281AEFEF813F4E6475FC0A03FF20226F98117B0EA8FBA805D7FCC052CFB232E60DB1F6E02F3FC600B8CE80F34C090FC40030CEA0F33C0A8FE20030CCB0FB2C0C8FE080388F70FCD0FB0C0E8FEC507189E4FFFCAC6E7AF3D8071EAE3F1F8FB2F31FACDB2FFD5FFD0E9FF17FC78156200B3FA4F11FA07E63F0FE09D796A647E801B60647D841B606CFEF2FD9DF915FD4B0E303A7FF11BA0375FBCFFBE7EED578009F94BDF00E2FD33EA17EE9F939FB4BF387FDDFE9E01CAF3171E40BDBF79809A7AFAD7ED6F1CA02E5FBE7FE101A6E42FDCDF3480767F757DAEFE867CFAF3F4B7E4AFDC5F3B80787F537E9AFEB6FAB5FBCB0768AD4FD2DF9E4F7F82FEACF985FD1DF98BF7170DD093AFDEFFF4CB78A71E9A77F925FB57CF2F1820F5E5BFEF4F9E4FFF9C7CF57EEFCC73DA97FFEE0630CA17EFF76EBC32E3F27B375E1A334098FC31FD2FBF8877E18D110304CA1FF12140A4FC01FD91EEFE01BF058C956FFE398060F9D60384CB37ED7F7B9C775A9182FED20122E6970CD0541F25DFAA3F6ABE4DFFC763BCABCA19F47F3EC43BAA46777FECFCEEFEE0F99DFDD1EBB7BE0112E477F467A86FFC10F8F8E5BC539A14F4FFFB262709EB2BBF12F2343E6AFD26FFFDAF4DFABD1B7A68D71BF47B07F412CFE7E75F48D777F47B1FDC8876FDD63680F7992D69D737F47B1FD89A78BEFACF3FAC1AC0FBA84388E797F77B1F7410E1F46FD2F1DB6DBFF7F186938EDFCEFBBDCF358D76FD71BFF799A612CF7FEFF73ECE7CDAF5DBD300DE07F1241D0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080177F7FFAF7FEE78760ABFD24ECFD88F7A1E639CC17DAE1BAFFCFEB4562B7F9C9EF82A2FEBC0B14E6A75DA0BC3FE50455F90937A8EFCF3540437FA6059AF2136DD0DE9F62819EFC0C0B74F6879FA0BF3FF60006FD911730C90FBC80557FD4090CFB232E609A1F7001EBFE680398F7C71AC03E3FD60023FA030D30243FD00083FAA30C302A3FCA00E3FA632C40BFF40043F3030C30B87FF501CC7B1F8F50035804FF243FFE8AD36F52FF37F9F14BA5FF7126C80083EA5F07F08EBC30AE3FC40003F3F3F75FE73F0FE09D7966647DEEFEFBFA000388E737F717D5AF3FC0D8AB9FB7BF347FF1FEE1973F697F71FEE2038CCFCFD85F934F7FBAFEAAFCB5FB5B06A8CB5F7C80E1F5B9FAEBEB53F5B7E4AFDD5F3540533EFD49FADBEAE94FD2DF9A4FFFD2FDC50388F737E7D39FA1BF3D3F457F47FEEAFD0503F4D4C7EFEFAB5F3EFFAEBF337FFD3F029FD6EF1D7A626CFEFAFDD703E4CFBFEC17B8FC43FB9F7E29EFCC5373F215FB43E40F1C40BC3F483EFD63FAA3E45F0D20913FA43F50FE905700F1FE48F9030678F925BCEBEE59F707CBB77E0BF8FA2B78B79530BD01C2D56FA63740BCABBF59DE0021F3CD3E09F2F650EFAC6257FD2D5FED1F2CDF64808F477937D518D0EF9D54E5BABFEAAFBA45CCEFEE0F9EDFFB0A103EBFABFFF3E5BD6BEA5DF75F0D90A1BEB9FFE865BD53DA340C70FC92DE218D6EFAFF5FE06D8554F5955F0977F64FBD233A14F65FF26EE8229EDFDDEF7DFE6EDAF5F23FFF809F7F215DBFB50EE07D6A3BDAF5FCFC27F1FCDA01BC4F6B4F3CBF6200EF838EA15DBF950EE07DCA71EED313C77F51BDF0FF68D76FE703789F6B16E1F46FDAF55FB4EBBF69D77FC9FF9E1E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DCD8B77DFFFF5FF7FDFBFFD4EC4736911D0EE38536B8EADFD3BF36DCD5675FA0A43FF106A5F95927A8E94FB8405D7EBA0D1AF2532DD0D69F6782E6FE240B74F46758A02B3FC1009DFDD117E8CE0FBE80457FE0056CF2E34E60D71F7200C3FC900BD8F6C71BC0B83FDC02E2FDE6F9C10618D01F698121F9810618D41F6601F1FE61F9410618D81F6100C3DA8764FFE3F1EFDF1F8F8F05BCEB6EF5D77F673F7EC51AC0A2FE5DA00106D4BF0DE05D786D4CFFF300DE859706E587B9015ACBAFEBE3DC00D6D7FD6800EFC60B8D575FBBBF283FC400032F7FDEFEC2FC00FD43F323BC0718DABFFE0D30363F657F45BE7CFFF2030CCE5FBD7F70FDF2FD9503D4D62FFF1E70F0D55FFF06185C4F7F9EFEA67CFAB3F4B7E5AFDE5F3A40637D92FEE6FA1CFD1DF9F2FDAB0F209E2FDF7F3F4057FEF2FD63EBD7EFBF1EA0B73E78BF65BE7ABF77E799A1F901FA2F06A05F209FFE71FD4FBF9677E5B929977FE1FE7103C4C81FD6FFFC4B79375E39EDB7FA9DDFDAF9F2FD635E01E2E40FE97FF975BC036F8CEEF7EEBB653F40A8FCB1FDDE71054EFBFBFFD42B44BFF50D102DDFB83F5CBEED2BC0CBE3BDCB0A19F647CC37BC015E1FEDDD55CAAC3F66BED56781DF1EEA5D55C1A43F6EBEC50DF0FE38EFA42AFDFD1F8FF34EAAD33940F0FACEFECFC778E7D4EB1820797EC55FF40D9BDF3E408EFAC6FEA397F50E6974D9FFBDC0DB0A07DFEB256EFD56F9A590672FE01DD1A1A4FFE45BDC24A8DFFABF0F8EF7F97BD1AF5CDFD7EF7D760BDAF55BF300DEC736A35DBFB50CE07D625BDAF5F4D70DE07DD801B4EB37F99FFF56D8EF7DCA81B4EBB7DB01BC8F379C72FB37EDFAB39FFE2B4438FDAF9F74C5F86F92971D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FEDABFFF47D27EC4FB50D31CD6EB8C70952F30C0757EF6056EEB736F50989F75828AFC941354F667DBA0213FD5026DFD5F13E418A1B93FC74DD0919F6281BEFEF00BF4E6475FC0A03FF20226F98117B0EA8F3A80597FD001ECFA432E60991F7101F17EE3FC700BD8F7871A60407EA801C4FB87E4075A60547F9001CC721F0FCDFE3FDD8F6FF116E86D7F176D00DBFA7877806D7DB81BC0BAFE7D00EFBE3BC6ED1F0378F7DDB1AF0F35C090FC9701BC0BAF0DEA7F1AC0BBF0D2A0FABCFD85F9510618961FA37F5C7E8CB780C3EA13F657D53F62BC028CAB0FD13FB03E537F4B7DA2FEB6FC0803D03F303F4B7FE2EB5F3440F3F55F7F80A1977FFDFC92FEF6AB1FA0FF76808EFA0CFD5DF91106189A1FBDBF379FFED0FDDDF9F447EEEFCF0FD07F3180443EFD53FAD71D60607F84FC8B01E837EBF76EBC227EF967F47B275E1AD51FE4F2CBF79F0DA0923FA67FA73F787FD7002FBF9077E09DC1FDDE79B7ECFB43E50F780508956FDF1F2BDF7C805877FF66DD1F2EDFF6B7C02FBF80775921C3FE88F98637C0EBC3BDBB4A99F5C7CC377B05889A6F7403BC3DD63BAA82497FD8FACDE28F01DE1FE75D54A7BB3F74FDD63B40EC8BFFA5ABFFE331DE35F5CEFB6F07F87C84774C83E6FE14F55BEB57C21CBCB07748A3ABFEB2BFE81F3ABFE12B2133D56FB55F0A7BFC42DE0D3D6EFA7F2738FDE7DE059DEE07D81FFB797DF47CF9EF7FDC3580F7D92D68D76F7C037CED7AF99FFF50DFEF7D606BE2F99503781F7600EDFAAD7C00EF730E221DFF45BB7E53FFF96F37FDDE879B42B9FD9B74FCB79F6CC9FA6F3FD19AF90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008AF6BFFFBA3B9F63BAFF933F791F6A9E8378A90DCEFB2516B8CA1718E13E3FF30245F5891728EECF39425D7EBE05AAFB534DD0529F6981D6FE241BF4E4CBF7C75FA0333FFC0406FD9107B0C88F3C804D7FD805ACF2A30E60D71F7301CBFE800398E6071CC0B83FDA00D6F9D10610EFB7CF8FB5C090FE38038CC917EC7F845CA0A3F7F1F8F71FFEFC7F8FB705BCD38A74D4FF297E3C797B19EFB6026DED2FD1A70378B79568BFF2290630AE7F1BC0BBEE9E79FECB00DE75F7CCEB830D605F1FAA7F407DA80146D4A7ECAFC98F33C0A0FC6CFD95F52F0378275E1A549FA9BFA53ECC00C3F263F48FBBFC31FAEF0768CD8FD13FAC9EFE0C03F4E487E81F981FA2FF7A80FCFD03F343F45F0E20DEDF994F7FECFEDEFC1803D0AFDD7F3E8046FE69BFC8E5A77FFCEDBFF400EAFD6703A8E4D33FBCDFBBF0DA98FE30977F7CBF77E08D21FD71F2CF06A05F249F7EF3FE3D417FC700B1F2ED6F8060F9D6FDD12EBFF12B40B87CDBFE3D5EBFE50011F30D3F071232DFEE06787DB8775539A31B206ABE517FD87C9B0102E75BF447CE37F863C0D0F9DD5F06F0F618EF9C7A7DFDE1F3FB6E80F74778C7B468EFCF50DF71037CBCB877499BC6FE24F55BD300072FEA5DD1EEA2FF7881A397F38EE87139C0FEF66D0E0EEB43E757FD5D987CF55BF90027FFCCFBF8DD0AFA3FBFC54B9A7AF96FFFDB3180F7C18D68D76F4D03781FD99476FD563D80F771CD69D76F5503781F7508F17CF51F7FB3C9FFF8A3DB01BC8F379E74FC97A370A51F03F8F3F3FF36A9CB0E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080ACFDEFFFC9D93F789F68A2CF78A9054EF24536B8AA17D8E03E3FF30465F5691728CFCF39415D7FBA09AAF3932DD0D29F6881B6FC341B74E46718A02B3FC102BDFDC107E8CE0FBE80457FE0056CF2E30E60D51F7401BBFC980B88F79BE6071CC0B83FDC00D6FDC10630CF97EF0F35C080FC500374B73E620FD059FDF8F2FD6F310768287FFC54FFF9F71F02FD8F2B116F00BBFA900358D6477C0DB08C7F1BC03BAD8471FDCB00DE6D25ACEB83DD00F6F9C16E00F3FA5837C080FC64FDD5F9A15E0106D447BA0146D447BA0186D4D39FA2BF3D3F47BFC000A3F2E98F3F404F3EFD31F22FFABBF2E98FDEDF971F668051FD41F2B9FEDAF9C3FAA30F403FFD36F921FB0D2F7FC87E99B7FF83FAC35CFE41F77F98FC9301642E3FFD0306889F2FD46F7FFD63E51FF60B5D7EF3FE60F9D6F7FFAEDD1F2EDFF615604FD2DF3A40C07CCBFE8897DF708098F9661F0206CDB7FA1C40D47CA31B206EBEC90DF0FA50EFA23AFDFD6F8FF40EAAD53B40F0FCDEFEE8F99D7F0C183EBFEFCB40E2E7F77C1DD4FB8B7B97346A1D20497E63FFC7CB7A67B46B1820517D43FFC10B7A3774A91BE0E8C5BC0BFA5CF47F2E90AE7EBBFBBB40B92FFE97EBFEDF0572D66F85031CFE13EF939BB8CBDF4FBED149927CF96F7FDB3480F7914D69D76FD503781FD79E76BDFCF7FF2F1FC0FB9CA368D77F918EDFEEFABD4F378372FB1FBBF6CFBFFA21190D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088D8BFFE6FF73E8597FD95F77166DA4F6C022BECA7F51AF7C1757DFA05EEF3532F50949F7681D2FAAC0BD4F4275CA02E3FDF04F5FDA92668CACF3341737E9209C4FBBBF2E32FD09B1F7D0183FEC80B98E4071EC0A83FEA0056F94107B0CB8FD9AF3E80617EC8013A8B1FC107E8ACFF127A0083FEC803F4B4FFAD7F447E15A8BFE07FAEFA4F7BEC01AAEB4F041DC022FD7300EFAA0A46F5510730AB7F1DC03BAB985D7DC8012CEB73F697D7471CC0B43E5EBF717EB601AAF3A3F55BE7471B6064BF775B09EBFA3CFD6DF5C10630BFFAC1FACF0768CE0FD53FF6FAAF3FC080FC5037C0E0FEE50718912FDF1FE81560483EFDF4C7EE57C93F1BA0AF3FD00043AE7FA0FE21D73F50BEFAFDCFF517EF3F1E807EE97EABFCA8FD2ABFFBFB32305FB27F0FD66F3D40B4FCA37EA5CB6FDB1F2FFFA05FEAF29B0E1031DFB03F64BED91B80D75FC2BBAAC2887EEFA61A363740D87C9BDF0284BDFB379B0F0193E5D72E1038DFA03FF2CDBFF50FF0F638EF9C6A9DFDC1EB6DFBBD5B9A740D10FEF26F3D7F0CF0F610EF90462737C0ED02EF2FEFDDD1EC6C80EB09D2E4377D2564A2FA862F04FF7C31EF843E95FDD9F2EB6E808397F13E7FB7F2FCA397F13E7DBFC2EB7FF802DE673771DF7FF28FBD0F6EE4E206D8CFE3D3E4CB7FFFCB967EEF23DB12CFAFEDF73EAE3DEDFAAD6200EF838EA25DFF4538FD9B76FD763A80CECF82F9AE15BCF0EFF63F3F0048B4FE97783E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009EDDE0770B2EFFB9F7FFDC3FB3833EDBFD9CFBC8F35C961BBCE0457F90A1BDCF6A79EA0A43EF302A5FD491728CF4FB940557EBE0DEAF3734DD0D69F6580C6FA3403B4F7A758A0273FC306DDFDB11730C897EF0F3C80497EDC7E9BFCB80388F75BE5475DA027F821DDFFF8127D81CEFCB701BC6BEA3585FFD6471FA0E58ABF797D19EFA04A7DE9E16F0083FAD00358D4071EE03EBDA4FE6D00EFA80ADD17FE6800EFA80A76FD2107B0AB4FD85F97FF3C80775631C3FA64FDF5F9010730BDFCA9FA5BF2E3F59F0FA0D16F9B1F6F00F17EEBFC701F02D16F9A1FED15C0FAF247EBE7FA1BE7E7184026FFB8BFE7F2071B807EEDFEC301E8A75F24FFA85FE9F273FDB9FE632E7FDC7EA10F7FADAF7FB8CB6F3C80787FC07CD3370011FB0F0610CF6F1D600FD96F76FD77FA23E67F0EA075F90F6E80EE7CBDFEC0F9161F0105AEDF0C06889DDFDD1FF9E6FF72D05FB340F4FCCE01F6A4FD850324C8EFB80152D4B7DF0049F25BFBB3E4B77D21C4FB0B7B37743919E062818F17F54EE872D65FF637FEA2D76F955F0AF9F952DEC7EF767E037C2C70F022DEA73750DA9FB37E2B19E0E41F7B1FDCC8C56BC07EDA9E27BFF1FB00781FDA90787EC300DE0736A65DBFD50DE07DD621B4EBF9FEBF7CFF6BF96F807EF2EDEF37A91F852078D95F7CDD03DFFF2E59FF4C3C5FEAB51E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092DABFFE67DFB7AF7FD9BD0F33D777F81BEF334DF3992E35C179BEC20CF7F5B91728EB4FBB41797ECA05AAF2F32D509B9F6B8186FA5403B4F5A759A0353FCB00EDFDFBD787CBDEC7EFD4539FE21E101FA0375FBE3FF600FDF9A1FB0DF2230FD05AFCC8B2405BFD97140BB45CF8C75F7AFD8F57F1EF80E2EEAF0BFF78A7D1FF919D67809EF60C6F023AEBC30FD09DFFB680774F2583FAD00358D4BF0CE01D54C7283F6CFFC50055FD510730AACFD65F5BFFF216D0BBA906FD36F9515F01CCF263DE0076973FE60D60984F7FC0010CF3B9FE49FA5BAF7FC401B8FFED2E7FC401B8FDB9FEF4D34FBFE61BC08301A4AEBFFA3B40CBFE3D62BFE12B40C87EF17CC301C4FB83E65BF5EF51FB6D06889BFFD9DF991FADFF6380CEFCE8FD6A97BFBF3F76FE269EDF7BFD63BFF26FBDFDD1EBB7BE770009F27BFAC3DFFCDF9A07C891DFFC21F09EA4BF71802CF58D9F054E73F5DB06C853BFB57C1D44A2ABBFD57F1DD8FB4B7A9FBF5B557FBAFAADE20EF87C21EFA39B38EEBFFBEB7E69F2CBBE12FAE805BCCF6DE6EA0E38FB6789F2DBFE16B4F7A12D89E7D7F77B1FD89C767D55BFF751C7908EFFA25DBF150CE07DC0D194DBFF910DFFF1EF5B407F7F1B6C51B2E10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090C2FEBFFFFFC5FB180EBEA2F7279BCE08FB19EF834D715AAFB0C0657CF6090AE233AF50939F7080BAFC740B54E7E71AA0213FD5026DFD691668CDCF32407B7F8A050A4B1FD2FD8F3F320E50D3FFB980F7E9BBD5E5E7BB032AFBFF5F20D33D5054FF927F701778477468AA7F1FC03BA2435B7D9A011AE355FACFF3930CD05CFF36807747A38EFAD705BC431A75D5BFDC01DE256DBAEA13DC00E2FD9DF5E15F013AEBC3DF00BDF5D16F00F1FEFEFCD803D0DFDF1F79008BFCC0FD26973FD5002DF9813F04B0BEFEDE3DB56CFAE30E209E6FD41F7700F17CA3FEB803D02FDDFFF1E64FED0D00FD260384EDB7B9019E1FEF1D54C9BADFBBA796457FE0CBFF3180D8E5B7E80F7DF9DF0750BBFCFDFDC12F7F6FFF9EAA5FEEEA6FAF03C85DFDEDA55FF1F2F7F467B8FC9B787EFBF5CF91DF7C0364C96FBC01D2E4B7F5EF79FA1B06D833E5577F04B4BFF30EE8B5572D90ADBEF2F740F9F26B3E0992EEDEFF52D8FFD19E24BFEC8FC18EEA73E497DC0087F559F2B78305F6C7FEAFFC243E51FD9793C853DEE7B5269E5F3980F7614710CF2F1FC0FB9CA314A5A7ADDFEE07F03EDF78DAF55FC4F3FF0DB0EDFFFE43EAD7F863FBDBBF03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0F276EF03B8F92ADFFFF8F9FF75EC47BC0F35CB61BCC802FB457DF205F6BBF6BF0BE41CA1243DF57D20DE5F79FDD30D50DB9F6D80EAFE5C031C163EFE5018E023FD5FFCE36204EF43DB39BEF03A0BDCC69F4EE07D721365F5C713789FDD4245FFC702DE673750959F6F80C257FEF3D701EF804EB5F9C906A8BEFC1F037817F469C87F5FC03BA147CBE57F1FC0BBA14763FECB00DE0D3D5AF39F07F06EE821DEDF9E9F6300FA2DFAC30ED0FCD63F497FD7F5CF3080787F577E8201D4FBD507E8CC97EF8FFE3190DDF5F72E69B38B0F407FDF00C1F3BBFBA30FB0F70E10BCBFF706889EDFFD0630FA00F44BBFFA1BFE06C83BA411D75FBB5FFD33C03DFDBB767F8A7CFA5BFB73E4370FB027E9DF9BFAF73D4B7FCB0089EA0DBEFECD3BA057ED007BDE7EC92F80AD1C20DBE57FFFEB0F6AF55BF900EFF149F2F9FB2FB7FD99EBB7DB018EEA53F55FFE49C8717DAEFCC3B78127E129F3E5FF067855BFF75987D0AEDF4A07F03EE538F7E989E3BF895EF85FEAFDE70B789F6B16F5FE2F6FC95AF10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062D8FFFF9F3FFF2EE239787FA1B1C1DFD413DEA71BEE2C5C6181F3CBAE3141597DDA05CAF3730E50D39F6F80AA7AFAB32D509D9F6C01F5FEA601122DD0949F6880C6FE2C0B34E7E7E817CFEFE84F3100F90C20DCDF75FD130C40BF747F5F7EFC01C4FB7BF31920F802E2F95C7FED7E83FCD80B880FA05DBFD90CE0DDD0413C5FFEFEA79F01E86700D97CF97EF5DF01D14FBF72BEFCA780E9D7CE97FF2330F53F0197EF57FF0A28F5CBCF00DAF57C01305F015FDD9E2B9FBF0026FF3700CBFBBD0F3A8A787EE100DE871C49BBFECB6579FAFAF37EEF734D239EBF7D7CE38F4D2CFFE7BB806C3FAFF062FD82C10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004004FBF7FF2ADABFFEE787F76966DB8FE8DC0A87F91237C257E0797DFE012EDBF3F7DFE6E71EA0203F717F49FDF702293728ADCF791B54D667CBAFEECF3680787F757EB201C8171EA0A53E537FE300691610CF6FEDCF32406BBE7C7F8E01DAF373F4AB5F7FF91B807EED01C4FB7BF2E507F03EBB01AE3FF9CAFDF203D0CF00F43300FDB20B68D7D3DF9A9E24BFE30F0073F437E727A1DE2FFFF51F7C01143780747D65BFF761C7D0AEFF229EBFC9FF0580BB7EEFE38D279E7FD9EF7DB629B4EBBFFCAD55CDDF7E7E5B2F5AFF4BBB7EFB19C0FB186E84D301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AC60F73E80A3FD9BF729FCA8F6FF89DEFFF13ECE4CFB53F7AEB7C041BBD20617F902035CD6E7EFBFC9971FC0FB78C389F78BE74BF7EFE26FFD6EEB53F717D4A71E40BCBF2CFF6B81A423140F90F43610EFAFCA4F3840657FB601C86700FAC917EDE7FAD3AFDCCFFDAFDD5FBB80F76907A05FBBBF6600EFA38EA07EFDC5F3B7F205BCCF398E787ED900DE671C493C5F7E00F5FB5F7E00EDFA4DFB0B40B6D3FC4DA5FFE22B7F7791BF07F0F96540DE279A4F3CFF7500EFB37878FABB0FDE47F1243F80C69B7C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E065DFF6FDEB5F65EDDFBC4FE1676700ED01F65D7A01F1FC8D5700DE0588F7AB0FA0FE0640FB3DC0CF3B40C5FEFD85F769E6DB77E905DEF3D51638E8D79A807EED7EDE02D04FBF6E3F6FFEB4FBD5EFFF837EEF13CD259E2FFF3BC0974F7F08E6BF7DF64F6F80B7DB5EBD5F90783E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090DC7F60281A2C', pixel_classes=[PixelClass(name='PixelClass1', pixel_value=1), PixelClass(name='PixelClass2', pixel_value=2), PixelClass(name='PixelClass3', pixel_value=3)]) subvolumes=[SubVolume(name='ec', handle=0, subvolume_type=, analytic_expr=None, image_pixel_value=1), SubVolume(name='cytosol', handle=1, subvolume_type=, analytic_expr=None, image_pixel_value=2), SubVolume(name='Nucleus', handle=2, subvolume_type=, analytic_expr=None, image_pixel_value=3)] surface_classes=[SurfaceClass(name='cytosol_ec_membrane', subvolume_ref_1='cytosol', subvolume_ref_2='ec'), SurfaceClass(name='Nucleus_cytosol_membrane', subvolume_ref_1='Nucleus', subvolume_ref_2='cytosol')], sims=['Simulation4'])]\n", - "2026-03-06T02:42:25.747978Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "2026-03-07T13:44:37.084638Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", "Please remove the `packages` attribute from your configuration file.\n", "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", - "2026-03-06T02:42:25.752056Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@39ed4cf8 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n" + "2026-03-07T13:44:37.089240Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@3bc80ce5 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "2026-03-06T02:42:26.100261Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@39ed4cf8 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-05 21:42:26,105 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", - "2026-03-06T02:42:26.122608Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "2026-03-07T13:44:37.433771Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@3bc80ce5 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-07 08:44:37,438 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", + "2026-03-07T13:44:37.455134Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", "Please remove the `packages` attribute from your configuration file.\n", "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", - "2026-03-06T02:42:26.123580Z main WARN The Logger org.vcell.libvcell.Entrypoints was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@51f0adaa and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-06T02:42:26.127459Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@51f0adaa and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-06T02:42:26.145291Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@51f0adaa and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-05 21:42:26,279 INFO (Entrypoints.java:83) - Returning from vcmlToFiniteVolumeInput: {\"success\":true,\"message\":\"Success\"}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Simulation Complete in Main() ... \n" + "2026-03-07T13:44:37.456061Z main WARN The Logger org.vcell.libvcell.Entrypoints was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@53283381 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-07T13:44:37.459758Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@53283381 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-07T13:44:37.477276Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@53283381 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-07 08:44:37,594 INFO (Entrypoints.java:83) - Returning from vcmlToFiniteVolumeInput: {\"success\":true,\"message\":\"Success\"}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Setting Base file name to: `\"/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_rbx85k94/SimID_878385397_0_\"`\n", + "Setting Base file name to: `\"/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_c1u6yv0y/SimID_101348305_0_\"`\n", "initializing mesh\n", "numVolume=367236\n", "\n", @@ -94,9 +87,9 @@ "mesh initialized\n", "preprocessing finished\n", "pdeCount=4, odeCount=0\n", - "No log-file found at constructed path `/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_rbx85k94/SimID_878385397_0_.log`.simulation [SimID_878385397_0_] started\n", + "No log-file found at constructed path `/Users/jimschaff/Documents/workspace/pyvcell/docs/guides/notebooks/workspace/out_dir_c1u6yv0y/SimID_101348305_0_.log`.simulation [SimID_101348305_0_] started\n", "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0000.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0000.sim\n", "**This is a little endian machine.**\n", "[[[data:0]]]\n", "numVolRegions=4\n", @@ -116,206 +109,206 @@ "sundials pde solver is starting from time 0\n", "----------------------------------\n", "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0001.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0001.sim\n", "[[[data:0.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0002.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0002.sim\n", "[[[data:0.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0003.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0003.sim\n", "[[[data:0.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0004.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0004.sim\n", "[[[data:0.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0005.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0005.sim\n", "[[[data:0.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0006.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0006.sim\n", "[[[data:0.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0007.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0007.sim\n", "[[[data:0.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0008.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0008.sim\n", "[[[data:0.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0009.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0009.sim\n", "[[[data:0.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0010.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0010.sim\n", "[[[data:1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0011.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0011.sim\n", "[[[data:1.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0012.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0012.sim\n", "[[[data:1.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0013.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0013.sim\n", "[[[data:1.3]]]SimTool.start1() sending JOB_PROGRESS to SimulationMessaging: percentile=0.13, time=1.3\n", "[[[progress:13%]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0014.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0014.sim\n", "[[[data:1.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0015.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0015.sim\n", "[[[data:1.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0016.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0016.sim\n", "[[[data:1.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0017.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0017.sim\n", "[[[data:1.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0018.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0018.sim\n", "[[[data:1.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0019.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0019.sim\n", "[[[data:1.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0020.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0020.sim\n", "[[[data:2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0021.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0021.sim\n", "[[[data:2.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0022.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0022.sim\n", "[[[data:2.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0023.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0023.sim\n", "[[[data:2.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0024.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0024.sim\n", "[[[data:2.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0025.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0025.sim\n", "[[[data:2.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0026.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0026.sim\n", "[[[data:2.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0027.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0027.sim\n", "[[[data:2.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0028.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0028.sim\n", "[[[data:2.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0029.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0029.sim\n", "[[[data:2.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0030.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0030.sim\n", "[[[data:3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0031.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0031.sim\n", "[[[data:3.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0032.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0032.sim\n", "[[[data:3.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0033.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0033.sim\n", "[[[data:3.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0034.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0034.sim\n", "[[[data:3.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0035.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0035.sim\n", "[[[data:3.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0036.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0036.sim\n", "[[[data:3.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0037.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0037.sim\n", "[[[data:3.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0038.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0038.sim\n", "[[[data:3.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0039.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0039.sim\n", "[[[data:3.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0040.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0040.sim\n", "[[[data:4]]]SimTool.start1() sending JOB_PROGRESS to SimulationMessaging: percentile=0.4, time=4\n", "[[[progress:40%]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0041.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0041.sim\n", "[[[data:4.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0042.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0042.sim\n", "[[[data:4.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0043.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0043.sim\n", "[[[data:4.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0044.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0044.sim\n", "[[[data:4.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0045.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0045.sim\n", "[[[data:4.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0046.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0046.sim\n", "[[[data:4.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0047.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0047.sim\n", "[[[data:4.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0048.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0048.sim\n", "[[[data:4.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0049.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0049.sim\n", "[[[data:4.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0050.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0050.sim\n", "[[[data:5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0051.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0051.sim\n", "[[[data:5.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0052.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0052.sim\n", "[[[data:5.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0053.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0053.sim\n", "[[[data:5.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0054.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0054.sim\n", "[[[data:5.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0055.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0055.sim\n", "[[[data:5.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0056.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0056.sim\n", "[[[data:5.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0057.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0057.sim\n", "[[[data:5.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0058.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0058.sim\n", "[[[data:5.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0059.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0059.sim\n", "[[[data:5.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0060.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0060.sim\n", "[[[data:6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0061.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0061.sim\n", "[[[data:6.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0062.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0062.sim\n", "[[[data:6.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0063.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0063.sim\n", "[[[data:6.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0064.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0064.sim\n", "[[[data:6.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0065.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0065.sim\n", "[[[data:6.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0066.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0066.sim\n", "[[[data:6.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0067.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0067.sim\n", "[[[data:6.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0068.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0068.sim\n", "[[[data:6.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0069.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0069.sim\n", "[[[data:6.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0070.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0070.sim\n", "[[[data:7]]]SimTool.start1() sending JOB_PROGRESS to SimulationMessaging: percentile=0.7, time=7\n", "[[[progress:70%]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0071.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0071.sim\n", "[[[data:7.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0072.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0072.sim\n", "[[[data:7.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0073.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0073.sim\n", "[[[data:7.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0074.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0074.sim\n", "[[[data:7.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0075.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0075.sim\n", "[[[data:7.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0076.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0076.sim\n", "[[[data:7.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0077.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0077.sim\n", "[[[data:7.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0078.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0078.sim\n", "[[[data:7.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0079.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0079.sim\n", "[[[data:7.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0080.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0080.sim\n", "[[[data:8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0081.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0081.sim\n", "[[[data:8.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0082.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0082.sim\n", "[[[data:8.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0083.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0083.sim\n", "[[[data:8.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0084.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0084.sim\n", "[[[data:8.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0085.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0085.sim\n", "[[[data:8.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0086.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0086.sim\n", "[[[data:8.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0087.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0087.sim\n", "[[[data:8.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0088.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0088.sim\n", "[[[data:8.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0089.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0089.sim\n", "[[[data:8.9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0090.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0090.sim\n", "[[[data:9]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0091.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0091.sim\n", "[[[data:9.1]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0092.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0092.sim\n", "[[[data:9.2]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0093.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0093.sim\n", "[[[data:9.3]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0094.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0094.sim\n", "[[[data:9.4]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0095.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0095.sim\n", "[[[data:9.5]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0096.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0096.sim\n", "[[[data:9.6]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0097.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0097.sim\n", "[[[data:9.7]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0098.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0098.sim\n", "[[[data:9.8]]]temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0099.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0099.sim\n", "[[[data:9.9]]]SimTool.start1() sending JOB_PROGRESS to SimulationMessaging: percentile=0.99, time=9.9\n", "[[[progress:99%]]]\n", "Final Statistics.. \n", @@ -331,9 +324,16 @@ "last step = 0.100000\n", "\n", "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", - "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_878385397_0_0100.sim\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_101348305_0_0100.sim\n", "[[[data:10]]][[[progress:100%]]]" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Simulation Complete in Main() ... \n" + ] } ], "source": [ @@ -362,10 +362,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:39.001907Z", - "iopub.status.busy": "2026-03-06T02:42:39.001510Z", - "iopub.status.idle": "2026-03-06T02:42:39.122343Z", - "shell.execute_reply": "2026-03-06T02:42:39.122049Z" + "iopub.execute_input": "2026-03-07T13:44:49.805159Z", + "iopub.status.busy": "2026-03-07T13:44:49.804687Z", + "iopub.status.idle": "2026-03-07T13:44:49.886049Z", + "shell.execute_reply": "2026-03-07T13:44:49.885700Z" } }, "outputs": [ @@ -396,10 +396,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:39.123850Z", - "iopub.status.busy": "2026-03-06T02:42:39.123738Z", - "iopub.status.idle": "2026-03-06T02:42:39.199621Z", - "shell.execute_reply": "2026-03-06T02:42:39.199202Z" + "iopub.execute_input": "2026-03-07T13:44:49.887524Z", + "iopub.status.busy": "2026-03-07T13:44:49.887415Z", + "iopub.status.idle": "2026-03-07T13:44:49.938142Z", + "shell.execute_reply": "2026-03-07T13:44:49.937889Z" } }, "outputs": [ @@ -430,10 +430,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:39.203821Z", - "iopub.status.busy": "2026-03-06T02:42:39.203491Z", - "iopub.status.idle": "2026-03-06T02:42:39.923361Z", - "shell.execute_reply": "2026-03-06T02:42:39.923064Z" + "iopub.execute_input": "2026-03-07T13:44:49.939405Z", + "iopub.status.busy": "2026-03-07T13:44:49.939319Z", + "iopub.status.idle": "2026-03-07T13:44:50.639332Z", + "shell.execute_reply": "2026-03-07T13:44:50.639065Z" } }, "outputs": [ @@ -462,10 +462,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:39.924671Z", - "iopub.status.busy": "2026-03-06T02:42:39.924564Z", - "iopub.status.idle": "2026-03-06T02:42:39.929185Z", - "shell.execute_reply": "2026-03-06T02:42:39.928942Z" + "iopub.execute_input": "2026-03-07T13:44:50.640690Z", + "iopub.status.busy": "2026-03-07T13:44:50.640588Z", + "iopub.status.idle": "2026-03-07T13:44:50.645636Z", + "shell.execute_reply": "2026-03-07T13:44:50.645373Z" } }, "outputs": [ @@ -503,10 +503,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2026-03-06T02:42:39.930441Z", - "iopub.status.busy": "2026-03-06T02:42:39.930358Z", - "iopub.status.idle": "2026-03-06T02:42:40.056924Z", - "shell.execute_reply": "2026-03-06T02:42:40.056466Z" + "iopub.execute_input": "2026-03-07T13:44:50.646872Z", + "iopub.status.busy": "2026-03-07T13:44:50.646785Z", + "iopub.status.idle": "2026-03-07T13:44:50.781868Z", + "shell.execute_reply": "2026-03-07T13:44:50.781541Z" } }, "outputs": [], From e916f5e719ef5fbad3183ef877a4d43b5f2429da Mon Sep 17 00:00:00 2001 From: jcschaff Date: Sun, 8 Mar 2026 13:29:17 -0400 Subject: [PATCH 08/24] regenerate vcell api python client --- .openapi-generator/FILES | 207 ++ .openapi-generator/VERSION | 1 + .../_internal/api/vcell_client/__init__.py | 250 +- .../api/vcell_client/api/__init__.py | 5 + .../vcell_client/api/admin_resource_api.py | 130 +- .../api/bio_model_resource_api.py | 1233 ++++++- .../vcell_client/api/export_resource_api.py | 600 ++++ .../api/field_data_resource_api.py | 2054 +++++++++-- .../vcell_client/api/geometry_resource_api.py | 1419 ++++++++ .../api/vcell_client/api/hello_world_api.py | 116 +- .../api/math_model_resource_api.py | 1434 ++++++++ .../api/publication_resource_api.py | 546 ++- .../api/simulation_resource_api.py | 336 +- .../vcell_client/api/solver_resource_api.py | 225 +- .../vcell_client/api/users_resource_api.py | 1058 ++++-- .../vcell_client/api/vc_image_resource_api.py | 1418 ++++++++ .../_internal/api/vcell_client/api_client.py | 339 +- .../api/vcell_client/api_response.py | 12 +- .../api/vcell_client/configuration.py | 154 +- .../docs/AccesTokenRepresentationRecord.md | 21 +- .../api/vcell_client/docs/AdminResourceApi.md | 35 +- .../api/vcell_client/docs/AnalyticCurve.md | 37 + .../docs/AnalyzedResultsFromFieldData.md | 35 - .../vcell_client/docs/AnnotatedFunctionDTO.md | 34 + .../api/vcell_client/docs/ApplicationInfo.md | 32 + .../api/vcell_client/docs/BatchSystemType.md | 9 +- .../api/vcell_client/docs/BioModel.md | 32 +- .../vcell_client/docs/BioModelChildSummary.md | 40 + .../vcell_client/docs/BioModelResourceApi.md | 346 +- .../api/vcell_client/docs/BioModelSummary.md | 32 + .../api/vcell_client/docs/BiomodelRef.md | 18 +- .../api/vcell_client/docs/CompositeCurve.md | 34 + .../vcell_client/docs/ControlPointCurve.md | 36 + .../api/vcell_client/docs/Coordinate.md | 31 + .../_internal/api/vcell_client/docs/Curve.md | 39 + .../vcell_client/docs/CurveSelectionInfo.md | 38 + .../api/vcell_client/docs/DataIdentifier.md | 22 +- .../api/vcell_client/docs/DetailedState.md | 103 +- .../_internal/api/vcell_client/docs/Domain.md | 10 +- .../api/vcell_client/docs/ExportEvent.md | 37 + .../vcell_client/docs/ExportProgressType.md | 18 + .../vcell_client/docs/ExportResourceApi.md | 156 + .../vcell_client/docs/ExportableDataType.md | 14 + .../_internal/api/vcell_client/docs/Extent.md | 14 +- .../docs/ExternalDataIdentifier.md | 22 +- .../api/vcell_client/docs/FieldData.md | 37 + .../vcell_client/docs/FieldDataReference.md | 14 +- .../vcell_client/docs/FieldDataResourceApi.md | 563 ++- .../vcell_client/docs/FieldDataSaveResults.md | 28 - .../docs/FieldDataSavedResults.md | 30 + .../api/vcell_client/docs/FieldDataShape.md | 18 +- .../api/vcell_client/docs/FunctionCategory.md | 16 + .../api/vcell_client/docs/GIFImage.md | 30 + .../api/vcell_client/docs/GeometryMode.md | 14 + .../vcell_client/docs/GeometryResourceApi.md | 354 ++ .../api/vcell_client/docs/GeometrySpecDTO.md | 32 + .../api/vcell_client/docs/GeometrySummary.md | 34 + .../api/vcell_client/docs/GroupAccess.md | 30 + .../api/vcell_client/docs/GroupAccessAll.md | 30 + .../api/vcell_client/docs/GroupAccessNone.md | 30 + .../api/vcell_client/docs/GroupAccessSome.md | 35 + .../api/vcell_client/docs/HelloWorldApi.md | 30 +- .../vcell_client/docs/HelloWorldMessage.md | 10 +- .../api/vcell_client/docs/HtcJobID.md | 14 +- .../docs/HumanReadableExportData.md | 39 + .../_internal/api/vcell_client/docs/ISize.md | 14 +- .../api/vcell_client/docs/Identity.md | 16 +- .../api/vcell_client/docs/KeyValue.md | 27 - .../docs/MathModelChildSummary.md | 33 + .../vcell_client/docs/MathModelResourceApi.md | 354 ++ .../api/vcell_client/docs/MathModelSummary.md | 34 + .../api/vcell_client/docs/MathType.md | 18 + .../api/vcell_client/docs/MathmodelRef.md | 18 +- .../api/vcell_client/docs/ModelType.md | 12 + .../api/vcell_client/docs/N5ExportRequest.md | 32 + .../_internal/api/vcell_client/docs/Origin.md | 14 +- .../api/vcell_client/docs/Publication.md | 34 +- .../api/vcell_client/docs/PublicationInfo.md | 40 + .../docs/PublicationResourceApi.md | 162 +- .../api/vcell_client/docs/SPECIALCLAIM.md | 16 + .../api/vcell_client/docs/SampledCurve.md | 34 + .../api/vcell_client/docs/SchedulerStatus.md | 17 +- .../docs/SimulationExecutionStatusRecord.md | 23 +- .../docs/SimulationJobStatusRecord.md | 28 +- .../vcell_client/docs/SimulationMessage.md | 16 +- .../docs/SimulationQueueEntryStatusRecord.md | 20 +- .../vcell_client/docs/SimulationQueueID.md | 9 +- .../docs/SimulationResourceApi.md | 126 +- .../docs/SimulationStatusPersistentRecord.md | 20 +- .../vcell_client/docs/SolverResourceApi.md | 83 +- .../api/vcell_client/docs/SourceModel.md | 30 + .../api/vcell_client/docs/SpatialSelection.md | 35 + .../docs/SpatialSelectionContour.md | 32 + .../docs/SpatialSelectionMembrane.md | 31 + .../docs/SpatialSelectionVolume.md | 30 + .../_internal/api/vcell_client/docs/Spline.md | 33 + .../vcell_client/docs/StandardExportInfo.md | 36 + .../_internal/api/vcell_client/docs/Status.md | 27 +- .../api/vcell_client/docs/StatusMessage.md | 16 +- .../api/vcell_client/docs/TimeMode.md | 12 + .../api/vcell_client/docs/TimeSpecs.md | 32 + .../_internal/api/vcell_client/docs/User.md | 15 +- .../vcell_client/docs/UserIdentityJSONSafe.md | 18 +- .../docs/UserLoginInfoForMapping.md | 12 +- .../vcell_client/docs/UserRegistrationInfo.md | 18 +- .../api/vcell_client/docs/UsersResourceApi.md | 318 +- .../api/vcell_client/docs/VCDocumentType.md | 16 + .../vcell_client/docs/VCImageResourceApi.md | 350 ++ .../api/vcell_client/docs/VCImageSummary.md | 33 + .../docs/VCSimulationIdentifier.md | 14 +- .../api/vcell_client/docs/VCellHTTPError.md | 30 + .../api/vcell_client/docs/VCellSite.md | 18 + .../vcell_client/docs/VCellSoftwareVersion.md | 37 + .../api/vcell_client/docs/VariableDomain.md | 17 +- .../api/vcell_client/docs/VariableMode.md | 14 + .../api/vcell_client/docs/VariableSpecs.md | 30 + .../api/vcell_client/docs/VariableType.md | 26 +- .../api/vcell_client/docs/Version.md | 37 + .../api/vcell_client/docs/VersionFlag.md | 33 + .../_internal/api/vcell_client/exceptions.py | 83 +- .../api/vcell_client/models/__init__.py | 113 +- .../acces_token_representation_record.py | 40 +- .../api/vcell_client/models/analytic_curve.py | 130 + .../models/annotated_function_dto.py | 112 + .../vcell_client/models/application_info.py | 100 + .../vcell_client/models/batch_system_type.py | 27 +- .../api/vcell_client/models/bio_model.py | 65 +- .../models/bio_model_child_summary.py | 124 + .../vcell_client/models/bio_model_summary.py | 119 + .../api/vcell_client/models/biomodel_ref.py | 35 +- .../vcell_client/models/composite_curve.py | 118 + .../models/control_point_curve.py | 140 + .../models/{key_value.py => coordinate.py} | 55 +- .../api/vcell_client/models/curve.py | 137 + .../models/curve_selection_info.py | 115 + .../vcell_client/models/data_identifier.py | 56 +- .../api/vcell_client/models/detailed_state.py | 121 +- .../api/vcell_client/models/domain.py | 37 +- .../api/vcell_client/models/export_event.py | 118 + .../models/export_progress_type.py | 41 + .../models/exportable_data_type.py | 39 + .../api/vcell_client/models/extent.py | 39 +- .../models/external_data_identifier.py | 74 +- ...sults_from_field_data.py => field_data.py} | 69 +- .../models/field_data_reference.py | 72 +- ...results.py => field_data_saved_results.py} | 54 +- .../vcell_client/models/field_data_shape.py | 50 +- .../vcell_client/models/function_category.py | 40 + .../api/vcell_client/models/geometry_mode.py | 39 + .../vcell_client/models/geometry_spec_dto.py | 108 + .../vcell_client/models/geometry_summary.py | 119 + .../api/vcell_client/models/gif_image.py | 99 + .../api/vcell_client/models/group_access.py | 115 + .../vcell_client/models/group_access_all.py | 97 + .../vcell_client/models/group_access_none.py | 97 + .../vcell_client/models/group_access_some.py | 129 + .../models/hello_world_message.py | 41 +- .../api/vcell_client/models/htc_job_id.py | 38 +- .../models/human_readable_export_data.py | 113 + .../api/vcell_client/models/i_size.py | 39 +- .../api/vcell_client/models/identity.py | 35 +- .../models/math_model_child_summary.py | 102 + .../vcell_client/models/math_model_summary.py | 123 + .../api/vcell_client/models/math_type.py | 41 + .../api/vcell_client/models/mathmodel_ref.py | 35 +- .../api/vcell_client/models/model_type.py | 38 + .../vcell_client/models/n5_export_request.py | 104 + .../api/vcell_client/models/origin.py | 39 +- .../api/vcell_client/models/publication.py | 68 +- .../vcell_client/models/publication_info.py | 121 + .../api/vcell_client/models/sampled_curve.py | 136 + .../vcell_client/models/scheduler_status.py | 35 +- .../simulation_execution_status_record.py | 56 +- .../models/simulation_job_status_record.py | 95 +- .../vcell_client/models/simulation_message.py | 44 +- .../simulation_queue_entry_status_record.py | 45 +- .../models/simulation_queue_id.py | 27 +- .../simulation_status_persistent_record.py | 43 +- .../api/vcell_client/models/source_model.py | 96 + .../vcell_client/models/spatial_selection.py | 131 + .../models/spatial_selection_contour.py | 117 + .../models/spatial_selection_membrane.py | 119 + .../models/spatial_selection_volume.py | 113 + .../api/vcell_client/models/specialclaim.py | 40 + .../api/vcell_client/models/spline.py | 135 + .../models/standard_export_info.py | 127 + .../api/vcell_client/models/status.py | 45 +- .../api/vcell_client/models/status_message.py | 44 +- .../api/vcell_client/models/time_mode.py | 38 + .../api/vcell_client/models/time_specs.py | 100 + .../_internal/api/vcell_client/models/user.py | 53 +- .../models/user_identity_json_safe.py | 39 +- .../models/user_login_info_for_mapping.py | 42 +- .../models/user_registration_info.py | 39 +- .../vcell_client/models/v_cell_http_error.py | 95 + .../api/vcell_client/models/v_cell_site.py | 41 + .../models/v_cell_software_version.py | 110 + .../vcell_client/models/variable_domain.py | 35 +- .../api/vcell_client/models/variable_mode.py | 39 + .../api/vcell_client/models/variable_specs.py | 96 + .../api/vcell_client/models/variable_type.py | 50 +- .../vcell_client/models/vc_document_type.py | 40 + .../vcell_client/models/vc_image_summary.py | 121 + .../models/vc_simulation_identifier.py | 56 +- .../api/vcell_client/models/version.py | 122 + .../api/vcell_client/models/version_flag.py | 101 + pyvcell/_internal/api/vcell_client/rest.py | 136 +- .../test_acces_token_representation_record.py | 27 +- .../test/test_admin_resource_api.py | 19 +- .../vcell_client/test/test_analytic_curve.py | 67 + .../test_analyzed_results_from_field_data.py | 77 - .../test/test_annotated_function_dto.py | 67 + .../test/test_application_info.py | 55 + .../test/test_batch_system_type.py | 21 +- .../api/vcell_client/test/test_bio_model.py | 30 +- .../test/test_bio_model_child_summary.py | 95 + .../test/test_bio_model_resource_api.py | 52 +- .../test/test_bio_model_summary.py | 150 + .../vcell_client/test/test_biomodel_ref.py | 27 +- .../vcell_client/test/test_composite_curve.py | 60 + .../test/test_control_point_curve.py | 70 + .../api/vcell_client/test/test_coordinate.py | 54 + .../api/vcell_client/test/test_curve.py | 69 + .../test/test_curve_selection_info.py | 78 + .../vcell_client/test/test_data_identifier.py | 43 +- .../vcell_client/test/test_detailed_state.py | 21 +- .../api/vcell_client/test/test_domain.py | 27 +- .../vcell_client/test/test_export_event.py | 80 + .../test/test_export_progress_type.py | 34 + .../test/test_export_resource_api.py | 44 + .../test/test_exportable_data_type.py | 34 + .../api/vcell_client/test/test_extent.py | 27 +- .../test/test_external_data_identifier.py | 46 +- .../api/vcell_client/test/test_field_data.py | 85 + .../test/test_field_data_reference.py | 58 +- .../test/test_field_data_resource_api.py | 73 +- .../test/test_field_data_save_results.py | 52 - .../test/test_field_data_saved_results.py | 53 + .../test/test_field_data_shape.py | 67 +- .../test/test_function_category.py | 34 + .../vcell_client/test/test_geometry_mode.py | 34 + .../test/test_geometry_resource_api.py | 62 + .../test/test_geometry_spec_dto.py | 108 + .../test/test_geometry_summary.py | 93 + .../api/vcell_client/test/test_gif_image.py | 56 + .../vcell_client/test/test_group_access.py | 54 + .../test/test_group_access_all.py | 54 + .../test/test_group_access_none.py | 54 + .../test/test_group_access_some.py | 82 + .../vcell_client/test/test_hello_world_api.py | 19 +- .../test/test_hello_world_message.py | 27 +- .../api/vcell_client/test/test_htc_job_id.py | 27 +- .../test/test_human_readable_export_data.py | 66 + .../api/vcell_client/test/test_i_size.py | 27 +- .../api/vcell_client/test/test_identity.py | 27 +- .../api/vcell_client/test/test_key_value.py | 51 - .../test/test_math_model_child_summary.py | 60 + .../test/test_math_model_resource_api.py | 62 + .../test/test_math_model_summary.py | 117 + .../api/vcell_client/test/test_math_type.py | 34 + .../vcell_client/test/test_mathmodel_ref.py | 27 +- .../api/vcell_client/test/test_model_type.py | 34 + .../test/test_n5_export_request.py | 140 + .../api/vcell_client/test/test_origin.py | 27 +- .../api/vcell_client/test/test_publication.py | 43 +- .../test/test_publication_info.py | 70 + .../test/test_publication_resource_api.py | 21 +- .../vcell_client/test/test_sampled_curve.py | 58 + .../test/test_scheduler_status.py | 21 +- ...test_simulation_execution_status_record.py | 31 +- .../test/test_simulation_job_status_record.py | 70 +- .../test/test_simulation_message.py | 31 +- ...st_simulation_queue_entry_status_record.py | 31 +- .../test/test_simulation_queue_id.py | 21 +- .../test/test_simulation_resource_api.py | 19 +- ...est_simulation_status_persistent_record.py | 31 +- .../test/test_solver_resource_api.py | 30 +- .../vcell_client/test/test_source_model.py | 53 + .../test/test_spatial_selection.py | 104 + .../test/test_spatial_selection_contour.py | 62 + .../test/test_spatial_selection_membrane.py | 63 + .../test/test_spatial_selection_volume.py | 54 + .../vcell_client/test/test_specialclaim.py | 34 + .../api/vcell_client/test/test_spline.py | 57 + .../test/test_standard_export_info.py | 144 + .../api/vcell_client/test/test_status.py | 21 +- .../vcell_client/test/test_status_message.py | 84 +- .../api/vcell_client/test/test_time_mode.py | 34 + .../api/vcell_client/test/test_time_specs.py | 57 + .../api/vcell_client/test/test_user.py | 35 +- .../test/test_user_identity_json_safe.py | 27 +- .../test/test_user_login_info_for_mapping.py | 27 +- .../test/test_user_registration_info.py | 27 +- .../test/test_users_resource_api.py | 19 +- .../test/test_v_cell_http_error.py | 53 + .../api/vcell_client/test/test_v_cell_site.py | 34 + .../test/test_v_cell_software_version.py | 60 + .../vcell_client/test/test_variable_domain.py | 21 +- .../vcell_client/test/test_variable_mode.py | 34 + .../vcell_client/test/test_variable_specs.py | 55 + .../vcell_client/test/test_variable_type.py | 27 +- .../test/test_vc_document_type.py | 34 + .../test/test_vc_image_resource_api.py | 62 + .../test/test_vc_image_summary.py | 97 + .../test/test_vc_simulation_identifier.py | 42 +- .../api/vcell_client/test/test_version.py | 72 + .../vcell_client/test/test_version_flag.py | 56 + pyvcell/_internal/api/vcell_client_README.md | 242 +- scripts/openapi.yaml | 3152 ++++++++++++++--- 309 files changed, 27479 insertions(+), 4663 deletions(-) create mode 100644 .openapi-generator/FILES create mode 100644 .openapi-generator/VERSION create mode 100644 pyvcell/_internal/api/vcell_client/api/export_resource_api.py create mode 100644 pyvcell/_internal/api/vcell_client/api/geometry_resource_api.py create mode 100644 pyvcell/_internal/api/vcell_client/api/math_model_resource_api.py create mode 100644 pyvcell/_internal/api/vcell_client/api/vc_image_resource_api.py create mode 100644 pyvcell/_internal/api/vcell_client/docs/AnalyticCurve.md delete mode 100644 pyvcell/_internal/api/vcell_client/docs/AnalyzedResultsFromFieldData.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/AnnotatedFunctionDTO.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/ApplicationInfo.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/BioModelChildSummary.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/BioModelSummary.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/CompositeCurve.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/ControlPointCurve.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/Coordinate.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/Curve.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/CurveSelectionInfo.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/ExportEvent.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/ExportProgressType.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/ExportableDataType.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/FieldData.md delete mode 100644 pyvcell/_internal/api/vcell_client/docs/FieldDataSaveResults.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/FieldDataSavedResults.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/FunctionCategory.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/GIFImage.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/GeometryMode.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/GeometrySpecDTO.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/GeometrySummary.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/GroupAccess.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/GroupAccessAll.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/GroupAccessNone.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/GroupAccessSome.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/HumanReadableExportData.md delete mode 100644 pyvcell/_internal/api/vcell_client/docs/KeyValue.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/MathModelChildSummary.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/MathModelSummary.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/MathType.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/ModelType.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/N5ExportRequest.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/PublicationInfo.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/SPECIALCLAIM.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/SampledCurve.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/SourceModel.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/SpatialSelection.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/SpatialSelectionContour.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/SpatialSelectionMembrane.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/SpatialSelectionVolume.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/Spline.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/StandardExportInfo.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/TimeMode.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/TimeSpecs.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/VCDocumentType.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/VCImageSummary.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/VCellHTTPError.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/VCellSite.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/VCellSoftwareVersion.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/VariableMode.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/VariableSpecs.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/Version.md create mode 100644 pyvcell/_internal/api/vcell_client/docs/VersionFlag.md create mode 100644 pyvcell/_internal/api/vcell_client/models/analytic_curve.py create mode 100644 pyvcell/_internal/api/vcell_client/models/annotated_function_dto.py create mode 100644 pyvcell/_internal/api/vcell_client/models/application_info.py create mode 100644 pyvcell/_internal/api/vcell_client/models/bio_model_child_summary.py create mode 100644 pyvcell/_internal/api/vcell_client/models/bio_model_summary.py create mode 100644 pyvcell/_internal/api/vcell_client/models/composite_curve.py create mode 100644 pyvcell/_internal/api/vcell_client/models/control_point_curve.py rename pyvcell/_internal/api/vcell_client/models/{key_value.py => coordinate.py} (65%) create mode 100644 pyvcell/_internal/api/vcell_client/models/curve.py create mode 100644 pyvcell/_internal/api/vcell_client/models/curve_selection_info.py create mode 100644 pyvcell/_internal/api/vcell_client/models/export_event.py create mode 100644 pyvcell/_internal/api/vcell_client/models/export_progress_type.py create mode 100644 pyvcell/_internal/api/vcell_client/models/exportable_data_type.py rename pyvcell/_internal/api/vcell_client/models/{analyzed_results_from_field_data.py => field_data.py} (73%) rename pyvcell/_internal/api/vcell_client/models/{field_data_save_results.py => field_data_saved_results.py} (66%) create mode 100644 pyvcell/_internal/api/vcell_client/models/function_category.py create mode 100644 pyvcell/_internal/api/vcell_client/models/geometry_mode.py create mode 100644 pyvcell/_internal/api/vcell_client/models/geometry_spec_dto.py create mode 100644 pyvcell/_internal/api/vcell_client/models/geometry_summary.py create mode 100644 pyvcell/_internal/api/vcell_client/models/gif_image.py create mode 100644 pyvcell/_internal/api/vcell_client/models/group_access.py create mode 100644 pyvcell/_internal/api/vcell_client/models/group_access_all.py create mode 100644 pyvcell/_internal/api/vcell_client/models/group_access_none.py create mode 100644 pyvcell/_internal/api/vcell_client/models/group_access_some.py create mode 100644 pyvcell/_internal/api/vcell_client/models/human_readable_export_data.py create mode 100644 pyvcell/_internal/api/vcell_client/models/math_model_child_summary.py create mode 100644 pyvcell/_internal/api/vcell_client/models/math_model_summary.py create mode 100644 pyvcell/_internal/api/vcell_client/models/math_type.py create mode 100644 pyvcell/_internal/api/vcell_client/models/model_type.py create mode 100644 pyvcell/_internal/api/vcell_client/models/n5_export_request.py create mode 100644 pyvcell/_internal/api/vcell_client/models/publication_info.py create mode 100644 pyvcell/_internal/api/vcell_client/models/sampled_curve.py create mode 100644 pyvcell/_internal/api/vcell_client/models/source_model.py create mode 100644 pyvcell/_internal/api/vcell_client/models/spatial_selection.py create mode 100644 pyvcell/_internal/api/vcell_client/models/spatial_selection_contour.py create mode 100644 pyvcell/_internal/api/vcell_client/models/spatial_selection_membrane.py create mode 100644 pyvcell/_internal/api/vcell_client/models/spatial_selection_volume.py create mode 100644 pyvcell/_internal/api/vcell_client/models/specialclaim.py create mode 100644 pyvcell/_internal/api/vcell_client/models/spline.py create mode 100644 pyvcell/_internal/api/vcell_client/models/standard_export_info.py create mode 100644 pyvcell/_internal/api/vcell_client/models/time_mode.py create mode 100644 pyvcell/_internal/api/vcell_client/models/time_specs.py create mode 100644 pyvcell/_internal/api/vcell_client/models/v_cell_http_error.py create mode 100644 pyvcell/_internal/api/vcell_client/models/v_cell_site.py create mode 100644 pyvcell/_internal/api/vcell_client/models/v_cell_software_version.py create mode 100644 pyvcell/_internal/api/vcell_client/models/variable_mode.py create mode 100644 pyvcell/_internal/api/vcell_client/models/variable_specs.py create mode 100644 pyvcell/_internal/api/vcell_client/models/vc_document_type.py create mode 100644 pyvcell/_internal/api/vcell_client/models/vc_image_summary.py create mode 100644 pyvcell/_internal/api/vcell_client/models/version.py create mode 100644 pyvcell/_internal/api/vcell_client/models/version_flag.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_analytic_curve.py delete mode 100644 pyvcell/_internal/api/vcell_client/test/test_analyzed_results_from_field_data.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_annotated_function_dto.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_application_info.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_bio_model_child_summary.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_bio_model_summary.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_composite_curve.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_control_point_curve.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_coordinate.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_curve.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_curve_selection_info.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_export_event.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_export_progress_type.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_export_resource_api.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_exportable_data_type.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_field_data.py delete mode 100644 pyvcell/_internal/api/vcell_client/test/test_field_data_save_results.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_field_data_saved_results.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_function_category.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_geometry_mode.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_geometry_resource_api.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_geometry_spec_dto.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_geometry_summary.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_gif_image.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_group_access.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_group_access_all.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_group_access_none.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_group_access_some.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_human_readable_export_data.py delete mode 100644 pyvcell/_internal/api/vcell_client/test/test_key_value.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_math_model_child_summary.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_math_model_resource_api.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_math_model_summary.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_math_type.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_model_type.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_n5_export_request.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_publication_info.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_sampled_curve.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_source_model.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_spatial_selection.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_spatial_selection_contour.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_spatial_selection_membrane.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_spatial_selection_volume.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_specialclaim.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_spline.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_standard_export_info.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_time_mode.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_time_specs.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_v_cell_http_error.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_v_cell_site.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_v_cell_software_version.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_variable_mode.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_variable_specs.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_vc_document_type.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_vc_image_resource_api.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_vc_image_summary.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_version.py create mode 100644 pyvcell/_internal/api/vcell_client/test/test_version_flag.py diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES new file mode 100644 index 0000000..3d30816 --- /dev/null +++ b/.openapi-generator/FILES @@ -0,0 +1,207 @@ +pyvcell/__init__.py +pyvcell/_internal/__init__.py +pyvcell/_internal/api/__init__.py +pyvcell/_internal/api/vcell_client/__init__.py +pyvcell/_internal/api/vcell_client/api/__init__.py +pyvcell/_internal/api/vcell_client/api/admin_resource_api.py +pyvcell/_internal/api/vcell_client/api/bio_model_resource_api.py +pyvcell/_internal/api/vcell_client/api/export_resource_api.py +pyvcell/_internal/api/vcell_client/api/field_data_resource_api.py +pyvcell/_internal/api/vcell_client/api/geometry_resource_api.py +pyvcell/_internal/api/vcell_client/api/hello_world_api.py +pyvcell/_internal/api/vcell_client/api/math_model_resource_api.py +pyvcell/_internal/api/vcell_client/api/publication_resource_api.py +pyvcell/_internal/api/vcell_client/api/simulation_resource_api.py +pyvcell/_internal/api/vcell_client/api/solver_resource_api.py +pyvcell/_internal/api/vcell_client/api/users_resource_api.py +pyvcell/_internal/api/vcell_client/api/vc_image_resource_api.py +pyvcell/_internal/api/vcell_client/api_client.py +pyvcell/_internal/api/vcell_client/api_response.py +pyvcell/_internal/api/vcell_client/configuration.py +pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md +pyvcell/_internal/api/vcell_client/docs/AdminResourceApi.md +pyvcell/_internal/api/vcell_client/docs/AnalyticCurve.md +pyvcell/_internal/api/vcell_client/docs/AnnotatedFunctionDTO.md +pyvcell/_internal/api/vcell_client/docs/ApplicationInfo.md +pyvcell/_internal/api/vcell_client/docs/BatchSystemType.md +pyvcell/_internal/api/vcell_client/docs/BioModel.md +pyvcell/_internal/api/vcell_client/docs/BioModelChildSummary.md +pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md +pyvcell/_internal/api/vcell_client/docs/BioModelSummary.md +pyvcell/_internal/api/vcell_client/docs/BiomodelRef.md +pyvcell/_internal/api/vcell_client/docs/CompositeCurve.md +pyvcell/_internal/api/vcell_client/docs/ControlPointCurve.md +pyvcell/_internal/api/vcell_client/docs/Coordinate.md +pyvcell/_internal/api/vcell_client/docs/Curve.md +pyvcell/_internal/api/vcell_client/docs/CurveSelectionInfo.md +pyvcell/_internal/api/vcell_client/docs/DataIdentifier.md +pyvcell/_internal/api/vcell_client/docs/DetailedState.md +pyvcell/_internal/api/vcell_client/docs/Domain.md +pyvcell/_internal/api/vcell_client/docs/ExportEvent.md +pyvcell/_internal/api/vcell_client/docs/ExportProgressType.md +pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md +pyvcell/_internal/api/vcell_client/docs/ExportableDataType.md +pyvcell/_internal/api/vcell_client/docs/Extent.md +pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md +pyvcell/_internal/api/vcell_client/docs/FieldData.md +pyvcell/_internal/api/vcell_client/docs/FieldDataReference.md +pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md +pyvcell/_internal/api/vcell_client/docs/FieldDataSavedResults.md +pyvcell/_internal/api/vcell_client/docs/FieldDataShape.md +pyvcell/_internal/api/vcell_client/docs/FunctionCategory.md +pyvcell/_internal/api/vcell_client/docs/GIFImage.md +pyvcell/_internal/api/vcell_client/docs/GeometryMode.md +pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md +pyvcell/_internal/api/vcell_client/docs/GeometrySpecDTO.md +pyvcell/_internal/api/vcell_client/docs/GeometrySummary.md +pyvcell/_internal/api/vcell_client/docs/GroupAccess.md +pyvcell/_internal/api/vcell_client/docs/GroupAccessAll.md +pyvcell/_internal/api/vcell_client/docs/GroupAccessNone.md +pyvcell/_internal/api/vcell_client/docs/GroupAccessSome.md +pyvcell/_internal/api/vcell_client/docs/HelloWorldApi.md +pyvcell/_internal/api/vcell_client/docs/HelloWorldMessage.md +pyvcell/_internal/api/vcell_client/docs/HtcJobID.md +pyvcell/_internal/api/vcell_client/docs/HumanReadableExportData.md +pyvcell/_internal/api/vcell_client/docs/ISize.md +pyvcell/_internal/api/vcell_client/docs/Identity.md +pyvcell/_internal/api/vcell_client/docs/MathModelChildSummary.md +pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md +pyvcell/_internal/api/vcell_client/docs/MathModelSummary.md +pyvcell/_internal/api/vcell_client/docs/MathType.md +pyvcell/_internal/api/vcell_client/docs/MathmodelRef.md +pyvcell/_internal/api/vcell_client/docs/ModelType.md +pyvcell/_internal/api/vcell_client/docs/N5ExportRequest.md +pyvcell/_internal/api/vcell_client/docs/Origin.md +pyvcell/_internal/api/vcell_client/docs/Publication.md +pyvcell/_internal/api/vcell_client/docs/PublicationInfo.md +pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md +pyvcell/_internal/api/vcell_client/docs/SPECIALCLAIM.md +pyvcell/_internal/api/vcell_client/docs/SampledCurve.md +pyvcell/_internal/api/vcell_client/docs/SchedulerStatus.md +pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md +pyvcell/_internal/api/vcell_client/docs/SimulationJobStatusRecord.md +pyvcell/_internal/api/vcell_client/docs/SimulationMessage.md +pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md +pyvcell/_internal/api/vcell_client/docs/SimulationQueueID.md +pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md +pyvcell/_internal/api/vcell_client/docs/SimulationStatusPersistentRecord.md +pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md +pyvcell/_internal/api/vcell_client/docs/SourceModel.md +pyvcell/_internal/api/vcell_client/docs/SpatialSelection.md +pyvcell/_internal/api/vcell_client/docs/SpatialSelectionContour.md +pyvcell/_internal/api/vcell_client/docs/SpatialSelectionMembrane.md +pyvcell/_internal/api/vcell_client/docs/SpatialSelectionVolume.md +pyvcell/_internal/api/vcell_client/docs/Spline.md +pyvcell/_internal/api/vcell_client/docs/StandardExportInfo.md +pyvcell/_internal/api/vcell_client/docs/Status.md +pyvcell/_internal/api/vcell_client/docs/StatusMessage.md +pyvcell/_internal/api/vcell_client/docs/TimeMode.md +pyvcell/_internal/api/vcell_client/docs/TimeSpecs.md +pyvcell/_internal/api/vcell_client/docs/User.md +pyvcell/_internal/api/vcell_client/docs/UserIdentityJSONSafe.md +pyvcell/_internal/api/vcell_client/docs/UserLoginInfoForMapping.md +pyvcell/_internal/api/vcell_client/docs/UserRegistrationInfo.md +pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md +pyvcell/_internal/api/vcell_client/docs/VCDocumentType.md +pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md +pyvcell/_internal/api/vcell_client/docs/VCImageSummary.md +pyvcell/_internal/api/vcell_client/docs/VCSimulationIdentifier.md +pyvcell/_internal/api/vcell_client/docs/VCellHTTPError.md +pyvcell/_internal/api/vcell_client/docs/VCellSite.md +pyvcell/_internal/api/vcell_client/docs/VCellSoftwareVersion.md +pyvcell/_internal/api/vcell_client/docs/VariableDomain.md +pyvcell/_internal/api/vcell_client/docs/VariableMode.md +pyvcell/_internal/api/vcell_client/docs/VariableSpecs.md +pyvcell/_internal/api/vcell_client/docs/VariableType.md +pyvcell/_internal/api/vcell_client/docs/Version.md +pyvcell/_internal/api/vcell_client/docs/VersionFlag.md +pyvcell/_internal/api/vcell_client/exceptions.py +pyvcell/_internal/api/vcell_client/models/__init__.py +pyvcell/_internal/api/vcell_client/models/acces_token_representation_record.py +pyvcell/_internal/api/vcell_client/models/analytic_curve.py +pyvcell/_internal/api/vcell_client/models/annotated_function_dto.py +pyvcell/_internal/api/vcell_client/models/application_info.py +pyvcell/_internal/api/vcell_client/models/batch_system_type.py +pyvcell/_internal/api/vcell_client/models/bio_model.py +pyvcell/_internal/api/vcell_client/models/bio_model_child_summary.py +pyvcell/_internal/api/vcell_client/models/bio_model_summary.py +pyvcell/_internal/api/vcell_client/models/biomodel_ref.py +pyvcell/_internal/api/vcell_client/models/composite_curve.py +pyvcell/_internal/api/vcell_client/models/control_point_curve.py +pyvcell/_internal/api/vcell_client/models/coordinate.py +pyvcell/_internal/api/vcell_client/models/curve.py +pyvcell/_internal/api/vcell_client/models/curve_selection_info.py +pyvcell/_internal/api/vcell_client/models/data_identifier.py +pyvcell/_internal/api/vcell_client/models/detailed_state.py +pyvcell/_internal/api/vcell_client/models/domain.py +pyvcell/_internal/api/vcell_client/models/export_event.py +pyvcell/_internal/api/vcell_client/models/export_progress_type.py +pyvcell/_internal/api/vcell_client/models/exportable_data_type.py +pyvcell/_internal/api/vcell_client/models/extent.py +pyvcell/_internal/api/vcell_client/models/external_data_identifier.py +pyvcell/_internal/api/vcell_client/models/field_data.py +pyvcell/_internal/api/vcell_client/models/field_data_reference.py +pyvcell/_internal/api/vcell_client/models/field_data_saved_results.py +pyvcell/_internal/api/vcell_client/models/field_data_shape.py +pyvcell/_internal/api/vcell_client/models/function_category.py +pyvcell/_internal/api/vcell_client/models/geometry_mode.py +pyvcell/_internal/api/vcell_client/models/geometry_spec_dto.py +pyvcell/_internal/api/vcell_client/models/geometry_summary.py +pyvcell/_internal/api/vcell_client/models/gif_image.py +pyvcell/_internal/api/vcell_client/models/group_access.py +pyvcell/_internal/api/vcell_client/models/group_access_all.py +pyvcell/_internal/api/vcell_client/models/group_access_none.py +pyvcell/_internal/api/vcell_client/models/group_access_some.py +pyvcell/_internal/api/vcell_client/models/hello_world_message.py +pyvcell/_internal/api/vcell_client/models/htc_job_id.py +pyvcell/_internal/api/vcell_client/models/human_readable_export_data.py +pyvcell/_internal/api/vcell_client/models/i_size.py +pyvcell/_internal/api/vcell_client/models/identity.py +pyvcell/_internal/api/vcell_client/models/math_model_child_summary.py +pyvcell/_internal/api/vcell_client/models/math_model_summary.py +pyvcell/_internal/api/vcell_client/models/math_type.py +pyvcell/_internal/api/vcell_client/models/mathmodel_ref.py +pyvcell/_internal/api/vcell_client/models/model_type.py +pyvcell/_internal/api/vcell_client/models/n5_export_request.py +pyvcell/_internal/api/vcell_client/models/origin.py +pyvcell/_internal/api/vcell_client/models/publication.py +pyvcell/_internal/api/vcell_client/models/publication_info.py +pyvcell/_internal/api/vcell_client/models/sampled_curve.py +pyvcell/_internal/api/vcell_client/models/scheduler_status.py +pyvcell/_internal/api/vcell_client/models/simulation_execution_status_record.py +pyvcell/_internal/api/vcell_client/models/simulation_job_status_record.py +pyvcell/_internal/api/vcell_client/models/simulation_message.py +pyvcell/_internal/api/vcell_client/models/simulation_queue_entry_status_record.py +pyvcell/_internal/api/vcell_client/models/simulation_queue_id.py +pyvcell/_internal/api/vcell_client/models/simulation_status_persistent_record.py +pyvcell/_internal/api/vcell_client/models/source_model.py +pyvcell/_internal/api/vcell_client/models/spatial_selection.py +pyvcell/_internal/api/vcell_client/models/spatial_selection_contour.py +pyvcell/_internal/api/vcell_client/models/spatial_selection_membrane.py +pyvcell/_internal/api/vcell_client/models/spatial_selection_volume.py +pyvcell/_internal/api/vcell_client/models/specialclaim.py +pyvcell/_internal/api/vcell_client/models/spline.py +pyvcell/_internal/api/vcell_client/models/standard_export_info.py +pyvcell/_internal/api/vcell_client/models/status.py +pyvcell/_internal/api/vcell_client/models/status_message.py +pyvcell/_internal/api/vcell_client/models/time_mode.py +pyvcell/_internal/api/vcell_client/models/time_specs.py +pyvcell/_internal/api/vcell_client/models/user.py +pyvcell/_internal/api/vcell_client/models/user_identity_json_safe.py +pyvcell/_internal/api/vcell_client/models/user_login_info_for_mapping.py +pyvcell/_internal/api/vcell_client/models/user_registration_info.py +pyvcell/_internal/api/vcell_client/models/v_cell_http_error.py +pyvcell/_internal/api/vcell_client/models/v_cell_site.py +pyvcell/_internal/api/vcell_client/models/v_cell_software_version.py +pyvcell/_internal/api/vcell_client/models/variable_domain.py +pyvcell/_internal/api/vcell_client/models/variable_mode.py +pyvcell/_internal/api/vcell_client/models/variable_specs.py +pyvcell/_internal/api/vcell_client/models/variable_type.py +pyvcell/_internal/api/vcell_client/models/vc_document_type.py +pyvcell/_internal/api/vcell_client/models/vc_image_summary.py +pyvcell/_internal/api/vcell_client/models/vc_simulation_identifier.py +pyvcell/_internal/api/vcell_client/models/version.py +pyvcell/_internal/api/vcell_client/models/version_flag.py +pyvcell/_internal/api/vcell_client/rest.py +pyvcell/_internal/api/vcell_client/test/__init__.py +pyvcell/_internal/api/vcell_client_README.md diff --git a/.openapi-generator/VERSION b/.openapi-generator/VERSION new file mode 100644 index 0000000..2540a3a --- /dev/null +++ b/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.20.0 diff --git a/pyvcell/_internal/api/vcell_client/__init__.py b/pyvcell/_internal/api/vcell_client/__init__.py index 3dd23b1..03ddf76 100644 --- a/pyvcell/_internal/api/vcell_client/__init__.py +++ b/pyvcell/_internal/api/vcell_client/__init__.py @@ -3,93 +3,34 @@ # flake8: noqa """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. + Do not edit the class manually. """ # noqa: E501 -__version__ = "1.0.0" - -# import apis into sdk package -from pyvcell._internal.api.vcell_client.api.admin_resource_api import AdminResourceApi -from pyvcell._internal.api.vcell_client.api.bio_model_resource_api import BioModelResourceApi -from pyvcell._internal.api.vcell_client.api.field_data_resource_api import FieldDataResourceApi -from pyvcell._internal.api.vcell_client.api.hello_world_api import HelloWorldApi -from pyvcell._internal.api.vcell_client.api.publication_resource_api import PublicationResourceApi -from pyvcell._internal.api.vcell_client.api.simulation_resource_api import SimulationResourceApi -from pyvcell._internal.api.vcell_client.api.solver_resource_api import SolverResourceApi -from pyvcell._internal.api.vcell_client.api.users_resource_api import UsersResourceApi - -# import ApiClient -from pyvcell._internal.api.vcell_client.api_response import ApiResponse -from pyvcell._internal.api.vcell_client.api_client import ApiClient -from pyvcell._internal.api.vcell_client.configuration import Configuration -from pyvcell._internal.api.vcell_client.exceptions import OpenApiException -from pyvcell._internal.api.vcell_client.exceptions import ApiTypeError -from pyvcell._internal.api.vcell_client.exceptions import ApiValueError -from pyvcell._internal.api.vcell_client.exceptions import ApiKeyError -from pyvcell._internal.api.vcell_client.exceptions import ApiAttributeError -from pyvcell._internal.api.vcell_client.exceptions import ApiException - -# import models into sdk package -from pyvcell._internal.api.vcell_client.models.acces_token_representation_record import AccesTokenRepresentationRecord -from pyvcell._internal.api.vcell_client.models.analyzed_results_from_field_data import AnalyzedResultsFromFieldData -from pyvcell._internal.api.vcell_client.models.batch_system_type import BatchSystemType -from pyvcell._internal.api.vcell_client.models.bio_model import BioModel -from pyvcell._internal.api.vcell_client.models.biomodel_ref import BiomodelRef -from pyvcell._internal.api.vcell_client.models.data_identifier import DataIdentifier -from pyvcell._internal.api.vcell_client.models.detailed_state import DetailedState -from pyvcell._internal.api.vcell_client.models.domain import Domain -from pyvcell._internal.api.vcell_client.models.extent import Extent -from pyvcell._internal.api.vcell_client.models.external_data_identifier import ExternalDataIdentifier -from pyvcell._internal.api.vcell_client.models.field_data_reference import FieldDataReference -from pyvcell._internal.api.vcell_client.models.field_data_save_results import FieldDataSaveResults -from pyvcell._internal.api.vcell_client.models.field_data_shape import FieldDataShape -from pyvcell._internal.api.vcell_client.models.hello_world_message import HelloWorldMessage -from pyvcell._internal.api.vcell_client.models.htc_job_id import HtcJobID -from pyvcell._internal.api.vcell_client.models.i_size import ISize -from pyvcell._internal.api.vcell_client.models.identity import Identity -from pyvcell._internal.api.vcell_client.models.key_value import KeyValue -from pyvcell._internal.api.vcell_client.models.mathmodel_ref import MathmodelRef -from pyvcell._internal.api.vcell_client.models.origin import Origin -from pyvcell._internal.api.vcell_client.models.publication import Publication -from pyvcell._internal.api.vcell_client.models.scheduler_status import SchedulerStatus -from pyvcell._internal.api.vcell_client.models.simulation_execution_status_record import SimulationExecutionStatusRecord -from pyvcell._internal.api.vcell_client.models.simulation_job_status_record import SimulationJobStatusRecord -from pyvcell._internal.api.vcell_client.models.simulation_message import SimulationMessage -from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import ( - SimulationQueueEntryStatusRecord, -) -from pyvcell._internal.api.vcell_client.models.simulation_queue_id import SimulationQueueID -from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import ( - SimulationStatusPersistentRecord, -) -from pyvcell._internal.api.vcell_client.models.status import Status -from pyvcell._internal.api.vcell_client.models.status_message import StatusMessage -from pyvcell._internal.api.vcell_client.models.user import User -from pyvcell._internal.api.vcell_client.models.user_identity_json_safe import UserIdentityJSONSafe -from pyvcell._internal.api.vcell_client.models.user_login_info_for_mapping import UserLoginInfoForMapping -from pyvcell._internal.api.vcell_client.models.user_registration_info import UserRegistrationInfo -from pyvcell._internal.api.vcell_client.models.vc_simulation_identifier import VCSimulationIdentifier -from pyvcell._internal.api.vcell_client.models.variable_domain import VariableDomain -from pyvcell._internal.api.vcell_client.models.variable_type import VariableType +__version__ = "1.0.0" +# Define package exports __all__ = [ "AdminResourceApi", "BioModelResourceApi", + "ExportResourceApi", "FieldDataResourceApi", + "GeometryResourceApi", "HelloWorldApi", + "MathModelResourceApi", "PublicationResourceApi", "SimulationResourceApi", "SolverResourceApi", "UsersResourceApi", + "VCImageResourceApi", "ApiResponse", "ApiClient", "Configuration", @@ -100,26 +41,56 @@ "ApiAttributeError", "ApiException", "AccesTokenRepresentationRecord", - "AnalyzedResultsFromFieldData", + "AnalyticCurve", + "AnnotatedFunctionDTO", + "ApplicationInfo", "BatchSystemType", "BioModel", + "BioModelChildSummary", + "BioModelSummary", "BiomodelRef", + "CompositeCurve", + "ControlPointCurve", + "Coordinate", + "Curve", + "CurveSelectionInfo", "DataIdentifier", "DetailedState", "Domain", + "ExportEvent", + "ExportProgressType", + "ExportableDataType", "Extent", "ExternalDataIdentifier", + "FieldData", "FieldDataReference", - "FieldDataSaveResults", + "FieldDataSavedResults", "FieldDataShape", + "FunctionCategory", + "GIFImage", + "GeometryMode", + "GeometrySpecDTO", + "GeometrySummary", + "GroupAccess", + "GroupAccessAll", + "GroupAccessNone", + "GroupAccessSome", "HelloWorldMessage", "HtcJobID", + "HumanReadableExportData", "ISize", "Identity", - "KeyValue", + "MathModelChildSummary", + "MathModelSummary", + "MathType", "MathmodelRef", + "ModelType", + "N5ExportRequest", "Origin", "Publication", + "PublicationInfo", + "SPECIALCLAIM", + "SampledCurve", "SchedulerStatus", "SimulationExecutionStatusRecord", "SimulationJobStatusRecord", @@ -127,13 +98,144 @@ "SimulationQueueEntryStatusRecord", "SimulationQueueID", "SimulationStatusPersistentRecord", + "SourceModel", + "SpatialSelection", + "SpatialSelectionContour", + "SpatialSelectionMembrane", + "SpatialSelectionVolume", + "Spline", + "StandardExportInfo", "Status", "StatusMessage", + "TimeMode", + "TimeSpecs", "User", "UserIdentityJSONSafe", "UserLoginInfoForMapping", "UserRegistrationInfo", + "VCDocumentType", + "VCImageSummary", "VCSimulationIdentifier", + "VCellHTTPError", + "VCellSite", + "VCellSoftwareVersion", "VariableDomain", + "VariableMode", + "VariableSpecs", "VariableType", + "Version", + "VersionFlag", ] + +# import apis into sdk package +from pyvcell._internal.api.vcell_client.api.admin_resource_api import AdminResourceApi as AdminResourceApi +from pyvcell._internal.api.vcell_client.api.bio_model_resource_api import BioModelResourceApi as BioModelResourceApi +from pyvcell._internal.api.vcell_client.api.export_resource_api import ExportResourceApi as ExportResourceApi +from pyvcell._internal.api.vcell_client.api.field_data_resource_api import FieldDataResourceApi as FieldDataResourceApi +from pyvcell._internal.api.vcell_client.api.geometry_resource_api import GeometryResourceApi as GeometryResourceApi +from pyvcell._internal.api.vcell_client.api.hello_world_api import HelloWorldApi as HelloWorldApi +from pyvcell._internal.api.vcell_client.api.math_model_resource_api import MathModelResourceApi as MathModelResourceApi +from pyvcell._internal.api.vcell_client.api.publication_resource_api import PublicationResourceApi as PublicationResourceApi +from pyvcell._internal.api.vcell_client.api.simulation_resource_api import SimulationResourceApi as SimulationResourceApi +from pyvcell._internal.api.vcell_client.api.solver_resource_api import SolverResourceApi as SolverResourceApi +from pyvcell._internal.api.vcell_client.api.users_resource_api import UsersResourceApi as UsersResourceApi +from pyvcell._internal.api.vcell_client.api.vc_image_resource_api import VCImageResourceApi as VCImageResourceApi + +# import ApiClient +from pyvcell._internal.api.vcell_client.api_response import ApiResponse as ApiResponse +from pyvcell._internal.api.vcell_client.api_client import ApiClient as ApiClient +from pyvcell._internal.api.vcell_client.configuration import Configuration as Configuration +from pyvcell._internal.api.vcell_client.exceptions import OpenApiException as OpenApiException +from pyvcell._internal.api.vcell_client.exceptions import ApiTypeError as ApiTypeError +from pyvcell._internal.api.vcell_client.exceptions import ApiValueError as ApiValueError +from pyvcell._internal.api.vcell_client.exceptions import ApiKeyError as ApiKeyError +from pyvcell._internal.api.vcell_client.exceptions import ApiAttributeError as ApiAttributeError +from pyvcell._internal.api.vcell_client.exceptions import ApiException as ApiException + +# import models into sdk package +from pyvcell._internal.api.vcell_client.models.acces_token_representation_record import AccesTokenRepresentationRecord as AccesTokenRepresentationRecord +from pyvcell._internal.api.vcell_client.models.analytic_curve import AnalyticCurve as AnalyticCurve +from pyvcell._internal.api.vcell_client.models.annotated_function_dto import AnnotatedFunctionDTO as AnnotatedFunctionDTO +from pyvcell._internal.api.vcell_client.models.application_info import ApplicationInfo as ApplicationInfo +from pyvcell._internal.api.vcell_client.models.batch_system_type import BatchSystemType as BatchSystemType +from pyvcell._internal.api.vcell_client.models.bio_model import BioModel as BioModel +from pyvcell._internal.api.vcell_client.models.bio_model_child_summary import BioModelChildSummary as BioModelChildSummary +from pyvcell._internal.api.vcell_client.models.bio_model_summary import BioModelSummary as BioModelSummary +from pyvcell._internal.api.vcell_client.models.biomodel_ref import BiomodelRef as BiomodelRef +from pyvcell._internal.api.vcell_client.models.composite_curve import CompositeCurve as CompositeCurve +from pyvcell._internal.api.vcell_client.models.control_point_curve import ControlPointCurve as ControlPointCurve +from pyvcell._internal.api.vcell_client.models.coordinate import Coordinate as Coordinate +from pyvcell._internal.api.vcell_client.models.curve import Curve as Curve +from pyvcell._internal.api.vcell_client.models.curve_selection_info import CurveSelectionInfo as CurveSelectionInfo +from pyvcell._internal.api.vcell_client.models.data_identifier import DataIdentifier as DataIdentifier +from pyvcell._internal.api.vcell_client.models.detailed_state import DetailedState as DetailedState +from pyvcell._internal.api.vcell_client.models.domain import Domain as Domain +from pyvcell._internal.api.vcell_client.models.export_event import ExportEvent as ExportEvent +from pyvcell._internal.api.vcell_client.models.export_progress_type import ExportProgressType as ExportProgressType +from pyvcell._internal.api.vcell_client.models.exportable_data_type import ExportableDataType as ExportableDataType +from pyvcell._internal.api.vcell_client.models.extent import Extent as Extent +from pyvcell._internal.api.vcell_client.models.external_data_identifier import ExternalDataIdentifier as ExternalDataIdentifier +from pyvcell._internal.api.vcell_client.models.field_data import FieldData as FieldData +from pyvcell._internal.api.vcell_client.models.field_data_reference import FieldDataReference as FieldDataReference +from pyvcell._internal.api.vcell_client.models.field_data_saved_results import FieldDataSavedResults as FieldDataSavedResults +from pyvcell._internal.api.vcell_client.models.field_data_shape import FieldDataShape as FieldDataShape +from pyvcell._internal.api.vcell_client.models.function_category import FunctionCategory as FunctionCategory +from pyvcell._internal.api.vcell_client.models.gif_image import GIFImage as GIFImage +from pyvcell._internal.api.vcell_client.models.geometry_mode import GeometryMode as GeometryMode +from pyvcell._internal.api.vcell_client.models.geometry_spec_dto import GeometrySpecDTO as GeometrySpecDTO +from pyvcell._internal.api.vcell_client.models.geometry_summary import GeometrySummary as GeometrySummary +from pyvcell._internal.api.vcell_client.models.group_access import GroupAccess as GroupAccess +from pyvcell._internal.api.vcell_client.models.group_access_all import GroupAccessAll as GroupAccessAll +from pyvcell._internal.api.vcell_client.models.group_access_none import GroupAccessNone as GroupAccessNone +from pyvcell._internal.api.vcell_client.models.group_access_some import GroupAccessSome as GroupAccessSome +from pyvcell._internal.api.vcell_client.models.hello_world_message import HelloWorldMessage as HelloWorldMessage +from pyvcell._internal.api.vcell_client.models.htc_job_id import HtcJobID as HtcJobID +from pyvcell._internal.api.vcell_client.models.human_readable_export_data import HumanReadableExportData as HumanReadableExportData +from pyvcell._internal.api.vcell_client.models.i_size import ISize as ISize +from pyvcell._internal.api.vcell_client.models.identity import Identity as Identity +from pyvcell._internal.api.vcell_client.models.math_model_child_summary import MathModelChildSummary as MathModelChildSummary +from pyvcell._internal.api.vcell_client.models.math_model_summary import MathModelSummary as MathModelSummary +from pyvcell._internal.api.vcell_client.models.math_type import MathType as MathType +from pyvcell._internal.api.vcell_client.models.mathmodel_ref import MathmodelRef as MathmodelRef +from pyvcell._internal.api.vcell_client.models.model_type import ModelType as ModelType +from pyvcell._internal.api.vcell_client.models.n5_export_request import N5ExportRequest as N5ExportRequest +from pyvcell._internal.api.vcell_client.models.origin import Origin as Origin +from pyvcell._internal.api.vcell_client.models.publication import Publication as Publication +from pyvcell._internal.api.vcell_client.models.publication_info import PublicationInfo as PublicationInfo +from pyvcell._internal.api.vcell_client.models.specialclaim import SPECIALCLAIM as SPECIALCLAIM +from pyvcell._internal.api.vcell_client.models.sampled_curve import SampledCurve as SampledCurve +from pyvcell._internal.api.vcell_client.models.scheduler_status import SchedulerStatus as SchedulerStatus +from pyvcell._internal.api.vcell_client.models.simulation_execution_status_record import SimulationExecutionStatusRecord as SimulationExecutionStatusRecord +from pyvcell._internal.api.vcell_client.models.simulation_job_status_record import SimulationJobStatusRecord as SimulationJobStatusRecord +from pyvcell._internal.api.vcell_client.models.simulation_message import SimulationMessage as SimulationMessage +from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import SimulationQueueEntryStatusRecord as SimulationQueueEntryStatusRecord +from pyvcell._internal.api.vcell_client.models.simulation_queue_id import SimulationQueueID as SimulationQueueID +from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import SimulationStatusPersistentRecord as SimulationStatusPersistentRecord +from pyvcell._internal.api.vcell_client.models.source_model import SourceModel as SourceModel +from pyvcell._internal.api.vcell_client.models.spatial_selection import SpatialSelection as SpatialSelection +from pyvcell._internal.api.vcell_client.models.spatial_selection_contour import SpatialSelectionContour as SpatialSelectionContour +from pyvcell._internal.api.vcell_client.models.spatial_selection_membrane import SpatialSelectionMembrane as SpatialSelectionMembrane +from pyvcell._internal.api.vcell_client.models.spatial_selection_volume import SpatialSelectionVolume as SpatialSelectionVolume +from pyvcell._internal.api.vcell_client.models.spline import Spline as Spline +from pyvcell._internal.api.vcell_client.models.standard_export_info import StandardExportInfo as StandardExportInfo +from pyvcell._internal.api.vcell_client.models.status import Status as Status +from pyvcell._internal.api.vcell_client.models.status_message import StatusMessage as StatusMessage +from pyvcell._internal.api.vcell_client.models.time_mode import TimeMode as TimeMode +from pyvcell._internal.api.vcell_client.models.time_specs import TimeSpecs as TimeSpecs +from pyvcell._internal.api.vcell_client.models.user import User as User +from pyvcell._internal.api.vcell_client.models.user_identity_json_safe import UserIdentityJSONSafe as UserIdentityJSONSafe +from pyvcell._internal.api.vcell_client.models.user_login_info_for_mapping import UserLoginInfoForMapping as UserLoginInfoForMapping +from pyvcell._internal.api.vcell_client.models.user_registration_info import UserRegistrationInfo as UserRegistrationInfo +from pyvcell._internal.api.vcell_client.models.vc_document_type import VCDocumentType as VCDocumentType +from pyvcell._internal.api.vcell_client.models.vc_image_summary import VCImageSummary as VCImageSummary +from pyvcell._internal.api.vcell_client.models.vc_simulation_identifier import VCSimulationIdentifier as VCSimulationIdentifier +from pyvcell._internal.api.vcell_client.models.v_cell_http_error import VCellHTTPError as VCellHTTPError +from pyvcell._internal.api.vcell_client.models.v_cell_site import VCellSite as VCellSite +from pyvcell._internal.api.vcell_client.models.v_cell_software_version import VCellSoftwareVersion as VCellSoftwareVersion +from pyvcell._internal.api.vcell_client.models.variable_domain import VariableDomain as VariableDomain +from pyvcell._internal.api.vcell_client.models.variable_mode import VariableMode as VariableMode +from pyvcell._internal.api.vcell_client.models.variable_specs import VariableSpecs as VariableSpecs +from pyvcell._internal.api.vcell_client.models.variable_type import VariableType as VariableType +from pyvcell._internal.api.vcell_client.models.version import Version as Version +from pyvcell._internal.api.vcell_client.models.version_flag import VersionFlag as VersionFlag + diff --git a/pyvcell/_internal/api/vcell_client/api/__init__.py b/pyvcell/_internal/api/vcell_client/api/__init__.py index 4846e35..d102416 100644 --- a/pyvcell/_internal/api/vcell_client/api/__init__.py +++ b/pyvcell/_internal/api/vcell_client/api/__init__.py @@ -3,9 +3,14 @@ # import apis into api package from pyvcell._internal.api.vcell_client.api.admin_resource_api import AdminResourceApi from pyvcell._internal.api.vcell_client.api.bio_model_resource_api import BioModelResourceApi +from pyvcell._internal.api.vcell_client.api.export_resource_api import ExportResourceApi from pyvcell._internal.api.vcell_client.api.field_data_resource_api import FieldDataResourceApi +from pyvcell._internal.api.vcell_client.api.geometry_resource_api import GeometryResourceApi from pyvcell._internal.api.vcell_client.api.hello_world_api import HelloWorldApi +from pyvcell._internal.api.vcell_client.api.math_model_resource_api import MathModelResourceApi from pyvcell._internal.api.vcell_client.api.publication_resource_api import PublicationResourceApi from pyvcell._internal.api.vcell_client.api.simulation_resource_api import SimulationResourceApi from pyvcell._internal.api.vcell_client.api.solver_resource_api import SolverResourceApi from pyvcell._internal.api.vcell_client.api.users_resource_api import UsersResourceApi +from pyvcell._internal.api.vcell_client.api.vc_image_resource_api import VCImageResourceApi + diff --git a/pyvcell/_internal/api/vcell_client/api/admin_resource_api.py b/pyvcell/_internal/api/vcell_client/api/admin_resource_api.py index e6740fb..97d2f0c 100644 --- a/pyvcell/_internal/api/vcell_client/api/admin_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/admin_resource_api.py @@ -1,18 +1,23 @@ """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" -from typing import Annotated, Any, Dict, List, Optional, Tuple, Union +import warnings +from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt +from typing import Any, Dict, List, Optional, Tuple, Union +from typing_extensions import Annotated -from pydantic import Field, StrictFloat, StrictInt, StrictStr, validate_call +from pydantic import StrictBytes, StrictStr +from typing import Tuple, Union from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized from pyvcell._internal.api.vcell_client.api_response import ApiResponse @@ -31,13 +36,17 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client + @validate_call def get_usage( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -67,31 +76,42 @@ def get_usage( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_usage_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bytearray", - "401": None, - "403": None, + '200': "bytearray", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def get_usage_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -121,31 +141,42 @@ def get_usage_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_usage_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bytearray", - "401": None, - "403": None, + '200': "bytearray", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def get_usage_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -175,20 +206,28 @@ def get_usage_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_usage_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bytearray", - "401": None, - "403": None, + '200': "bytearray", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _get_usage_serialize( self, _request_auth, @@ -196,15 +235,19 @@ def _get_usage_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -213,16 +256,25 @@ def _get_usage_serialize( # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/pdf"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/pdf', + 'application/json' + ] + ) + # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="GET", - resource_path="/api/v1/admin/usage", + method='GET', + resource_path='/api/v1/admin/usage', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -232,5 +284,7 @@ def _get_usage_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + diff --git a/pyvcell/_internal/api/vcell_client/api/bio_model_resource_api.py b/pyvcell/_internal/api/vcell_client/api/bio_model_resource_api.py index 7a9c4d8..a0a412f 100644 --- a/pyvcell/_internal/api/vcell_client/api/bio_model_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/bio_model_resource_api.py @@ -1,22 +1,29 @@ """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from typing import Annotated, Any, Dict, List, Optional, Tuple, Union -from pydantic import Field, StrictFloat, StrictInt, StrictStr, validate_call +import warnings +from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt +from typing import Any, Dict, List, Optional, Tuple, Union +from typing_extensions import Annotated + +from pydantic import Field, StrictBool, StrictStr +from typing import List, Optional +from typing_extensions import Annotated +from pyvcell._internal.api.vcell_client.models.bio_model import BioModel +from pyvcell._internal.api.vcell_client.models.bio_model_summary import BioModelSummary from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized from pyvcell._internal.api.vcell_client.api_response import ApiResponse -from pyvcell._internal.api.vcell_client.models.bio_model import BioModel from pyvcell._internal.api.vcell_client.rest import RESTResponseType @@ -32,6 +39,7 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client + @validate_call def delete_bio_model( self, @@ -39,7 +47,10 @@ def delete_bio_model( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -71,26 +82,33 @@ def delete_bio_model( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._delete_bio_model_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def delete_bio_model_with_http_info( self, @@ -98,7 +116,10 @@ def delete_bio_model_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -130,26 +151,33 @@ def delete_bio_model_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._delete_bio_model_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def delete_bio_model_without_preload_content( self, @@ -157,7 +185,10 @@ def delete_bio_model_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -189,22 +220,29 @@ def delete_bio_model_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._delete_bio_model_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _delete_bio_model_serialize( self, bio_model_id, @@ -213,31 +251,46 @@ def _delete_bio_model_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters if bio_model_id is not None: - _path_params["bioModelID"] = bio_model_id + _path_params['bioModelID'] = bio_model_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # authentication setting - _auth_settings: List[str] = [] + _auth_settings: List[str] = [ + ] return self.api_client.param_serialize( - method="DELETE", - resource_path="/api/v1/bioModel/{bioModelID}", + method='DELETE', + resource_path='/api/v1/bioModel/{bioModelID}', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -247,24 +300,30 @@ def _delete_bio_model_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call - def get_biomodel_by_id( + def get_bio_model( self, bio_model_id: StrictStr, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> BioModel: - """Get BioModel information in JSON format by ID. + """Get BioModel. :param bio_model_id: (required) @@ -289,42 +348,51 @@ def get_biomodel_by_id( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._get_biomodel_by_id_serialize( + _param = self._get_bio_model_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BioModel", - "404": None, + '200': "BioModel", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call - def get_biomodel_by_id_with_http_info( + def get_bio_model_with_http_info( self, bio_model_id: StrictStr, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[BioModel]: - """Get BioModel information in JSON format by ID. + """Get BioModel. :param bio_model_id: (required) @@ -349,42 +417,51 @@ def get_biomodel_by_id_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._get_biomodel_by_id_serialize( + _param = self._get_bio_model_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BioModel", - "404": None, + '200': "BioModel", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call - def get_biomodel_by_id_without_preload_content( + def get_bio_model_without_preload_content( self, bio_model_id: StrictStr, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """Get BioModel information in JSON format by ID. + """Get BioModel. :param bio_model_id: (required) @@ -409,24 +486,30 @@ def get_biomodel_by_id_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._get_biomodel_by_id_serialize( + _param = self._get_bio_model_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "BioModel", - "404": None, + '200': "BioModel", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response - def _get_biomodel_by_id_serialize( + + def _get_bio_model_serialize( self, bio_model_id, _request_auth, @@ -434,35 +517,46 @@ def _get_biomodel_by_id_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters if bio_model_id is not None: - _path_params["bioModelID"] = bio_model_id + _path_params['bioModelID'] = bio_model_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + # authentication setting - _auth_settings: List[str] = [] + _auth_settings: List[str] = [ + ] return self.api_client.param_serialize( - method="GET", - resource_path="/api/v1/bioModel/{bioModelID}", + method='GET', + resource_path='/api/v1/bioModel/{bioModelID}', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -472,28 +566,34 @@ def _get_biomodel_by_id_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call - def upload_bio_model( + def get_bio_model_summaries( self, - body: Optional[StrictStr] = None, + include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Includes BioModel summaries that are public or shared with requester. Default is true.")] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> str: - """Upload the BioModel to VCell database. Returns BioModel ID. + ) -> List[BioModelSummary]: + """Return BioModel summaries. - :param body: - :type body: str + :param include_public_and_shared: Includes BioModel summaries that are public or shared with requester. Default is true. + :type include_public_and_shared: bool :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -514,47 +614,53 @@ def upload_bio_model( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._upload_bio_model_serialize( - body=body, + _param = self._get_bio_model_summaries_serialize( + include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "str", - "401": None, - "403": None, + '200': "List[BioModelSummary]", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call - def upload_bio_model_with_http_info( + def get_bio_model_summaries_with_http_info( self, - body: Optional[StrictStr] = None, + include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Includes BioModel summaries that are public or shared with requester. Default is true.")] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[str]: - """Upload the BioModel to VCell database. Returns BioModel ID. + ) -> ApiResponse[List[BioModelSummary]]: + """Return BioModel summaries. - :param body: - :type body: str + :param include_public_and_shared: Includes BioModel summaries that are public or shared with requester. Default is true. + :type include_public_and_shared: bool :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -575,47 +681,53 @@ def upload_bio_model_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._upload_bio_model_serialize( - body=body, + _param = self._get_bio_model_summaries_serialize( + include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "str", - "401": None, - "403": None, + '200': "List[BioModelSummary]", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call - def upload_bio_model_without_preload_content( + def get_bio_model_summaries_without_preload_content( self, - body: Optional[StrictStr] = None, + include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Includes BioModel summaries that are public or shared with requester. Default is true.")] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """Upload the BioModel to VCell database. Returns BioModel ID. + """Return BioModel summaries. - :param body: - :type body: str + :param include_public_and_shared: Includes BioModel summaries that are public or shared with requester. Default is true. + :type include_public_and_shared: bool :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -636,69 +748,77 @@ def upload_bio_model_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._upload_bio_model_serialize( - body=body, + _param = self._get_bio_model_summaries_serialize( + include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "str", - "401": None, - "403": None, + '200': "List[BioModelSummary]", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response - def _upload_bio_model_serialize( + + def _get_bio_model_summaries_serialize( self, - body, + include_public_and_shared, _request_auth, _content_type, _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters + if include_public_and_shared is not None: + + _query_params.append(('includePublicAndShared', include_public_and_shared)) + # process the header parameters # process the form parameters # process the body parameter - if body is not None: - _body_params = body + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["text/plain"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) - # set the HTTP header `Content-Type` - if _content_type: - _header_params["Content-Type"] = _content_type - else: - _default_content_type = self.api_client.select_header_content_type(["text/xml"]) - if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + ] return self.api_client.param_serialize( - method="POST", - resource_path="/api/v1/bioModel/upload_bioModel", + method='GET', + resource_path='/api/v1/bioModel/summaries', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -708,5 +828,856 @@ def _upload_bio_model_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_bio_model_summary( + self, + bio_model_id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> BioModelSummary: + """All of the text based information about a BioModel (summary, version, publication status, etc...), but not the actual BioModel itself. + + + :param bio_model_id: (required) + :type bio_model_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_bio_model_summary_serialize( + bio_model_id=bio_model_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "BioModelSummary", + '403': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def get_bio_model_summary_with_http_info( + self, + bio_model_id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[BioModelSummary]: + """All of the text based information about a BioModel (summary, version, publication status, etc...), but not the actual BioModel itself. + + + :param bio_model_id: (required) + :type bio_model_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_bio_model_summary_serialize( + bio_model_id=bio_model_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "BioModelSummary", + '403': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def get_bio_model_summary_without_preload_content( + self, + bio_model_id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """All of the text based information about a BioModel (summary, version, publication status, etc...), but not the actual BioModel itself. + + + :param bio_model_id: (required) + :type bio_model_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_bio_model_summary_serialize( + bio_model_id=bio_model_id, _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "BioModelSummary", + '403': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout ) + return response_data.response + + + def _get_bio_model_summary_serialize( + self, + bio_model_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if bio_model_id is not None: + _path_params['bioModelID'] = bio_model_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v1/bioModel/{bioModelID}/summary', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_bio_model_vcml( + self, + bio_model_id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> str: + """Get the BioModel in VCML format. + + + :param bio_model_id: (required) + :type bio_model_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_bio_model_vcml_serialize( + bio_model_id=bio_model_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def get_bio_model_vcml_with_http_info( + self, + bio_model_id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[str]: + """Get the BioModel in VCML format. + + + :param bio_model_id: (required) + :type bio_model_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_bio_model_vcml_serialize( + bio_model_id=bio_model_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def get_bio_model_vcml_without_preload_content( + self, + bio_model_id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """Get the BioModel in VCML format. + + + :param bio_model_id: (required) + :type bio_model_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_bio_model_vcml_serialize( + bio_model_id=bio_model_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _get_bio_model_vcml_serialize( + self, + bio_model_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if bio_model_id is not None: + _path_params['bioModelID'] = bio_model_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'text/xml', + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v1/bioModel/{bioModelID}/vcml_download', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def save_bio_model( + self, + body: Annotated[StrictStr, Field(description="BioModelVCML which will be saved.")], + new_name: Annotated[Optional[StrictStr], Field(description="Name to save new BioModel under. Leave blank if re-saving existing BioModel.")] = None, + sims_requiring_updates: Annotated[Optional[List[StrictStr]], Field(description="The name of simulations that will be prepared for future execution.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> str: + """Save's the given BioModel. Optional parameters of name and simulations to update due to math changes. Returns saved BioModel as VCML. + + + :param body: BioModelVCML which will be saved. (required) + :type body: str + :param new_name: Name to save new BioModel under. Leave blank if re-saving existing BioModel. + :type new_name: str + :param sims_requiring_updates: The name of simulations that will be prepared for future execution. + :type sims_requiring_updates: List[str] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_bio_model_serialize( + body=body, + new_name=new_name, + sims_requiring_updates=sims_requiring_updates, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def save_bio_model_with_http_info( + self, + body: Annotated[StrictStr, Field(description="BioModelVCML which will be saved.")], + new_name: Annotated[Optional[StrictStr], Field(description="Name to save new BioModel under. Leave blank if re-saving existing BioModel.")] = None, + sims_requiring_updates: Annotated[Optional[List[StrictStr]], Field(description="The name of simulations that will be prepared for future execution.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[str]: + """Save's the given BioModel. Optional parameters of name and simulations to update due to math changes. Returns saved BioModel as VCML. + + + :param body: BioModelVCML which will be saved. (required) + :type body: str + :param new_name: Name to save new BioModel under. Leave blank if re-saving existing BioModel. + :type new_name: str + :param sims_requiring_updates: The name of simulations that will be prepared for future execution. + :type sims_requiring_updates: List[str] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_bio_model_serialize( + body=body, + new_name=new_name, + sims_requiring_updates=sims_requiring_updates, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def save_bio_model_without_preload_content( + self, + body: Annotated[StrictStr, Field(description="BioModelVCML which will be saved.")], + new_name: Annotated[Optional[StrictStr], Field(description="Name to save new BioModel under. Leave blank if re-saving existing BioModel.")] = None, + sims_requiring_updates: Annotated[Optional[List[StrictStr]], Field(description="The name of simulations that will be prepared for future execution.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """Save's the given BioModel. Optional parameters of name and simulations to update due to math changes. Returns saved BioModel as VCML. + + + :param body: BioModelVCML which will be saved. (required) + :type body: str + :param new_name: Name to save new BioModel under. Leave blank if re-saving existing BioModel. + :type new_name: str + :param sims_requiring_updates: The name of simulations that will be prepared for future execution. + :type sims_requiring_updates: List[str] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_bio_model_serialize( + body=body, + new_name=new_name, + sims_requiring_updates=sims_requiring_updates, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _save_bio_model_serialize( + self, + body, + new_name, + sims_requiring_updates, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + 'simsRequiringUpdates': 'multi', + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + if new_name is not None: + + _query_params.append(('newName', new_name)) + + if sims_requiring_updates is not None: + + _query_params.append(('simsRequiringUpdates', sims_requiring_updates)) + + # process the header parameters + # process the form parameters + # process the body parameter + if body is not None: + _body_params = body + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/xml', + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/xml' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + 'openId' + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/api/v1/bioModel', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + diff --git a/pyvcell/_internal/api/vcell_client/api/export_resource_api.py b/pyvcell/_internal/api/vcell_client/api/export_resource_api.py new file mode 100644 index 0000000..9e97ae6 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/api/export_resource_api.py @@ -0,0 +1,600 @@ +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import warnings +from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt +from typing import Any, Dict, List, Optional, Tuple, Union +from typing_extensions import Annotated + +from pydantic import StrictInt +from typing import List, Optional +from pyvcell._internal.api.vcell_client.models.export_event import ExportEvent +from pyvcell._internal.api.vcell_client.models.n5_export_request import N5ExportRequest + +from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized +from pyvcell._internal.api.vcell_client.api_response import ApiResponse +from pyvcell._internal.api.vcell_client.rest import RESTResponseType + + +class ExportResourceApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + + @validate_call + def export_n5( + self, + n5_export_request: Optional[N5ExportRequest] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> int: + """export_n5 + + Create an N5 (ImageJ compatible) export. The request must contain the standard export information, exportable data type, dataset name, and sub-volume specifications. + + :param n5_export_request: + :type n5_export_request: N5ExportRequest + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._export_n5_serialize( + n5_export_request=n5_export_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "int", + '400': "VCellHTTPError", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def export_n5_with_http_info( + self, + n5_export_request: Optional[N5ExportRequest] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[int]: + """export_n5 + + Create an N5 (ImageJ compatible) export. The request must contain the standard export information, exportable data type, dataset name, and sub-volume specifications. + + :param n5_export_request: + :type n5_export_request: N5ExportRequest + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._export_n5_serialize( + n5_export_request=n5_export_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "int", + '400': "VCellHTTPError", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def export_n5_without_preload_content( + self, + n5_export_request: Optional[N5ExportRequest] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """export_n5 + + Create an N5 (ImageJ compatible) export. The request must contain the standard export information, exportable data type, dataset name, and sub-volume specifications. + + :param n5_export_request: + :type n5_export_request: N5ExportRequest + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._export_n5_serialize( + n5_export_request=n5_export_request, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "int", + '400': "VCellHTTPError", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _export_n5_serialize( + self, + n5_export_request, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if n5_export_request is not None: + _body_params = n5_export_request + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + 'openId' + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/api/v1/export/N5', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def export_status( + self, + timestamp: Optional[StrictInt] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> List[ExportEvent]: + """export_status + + Get the status of your export jobs past the timestamp (Unix epoch in seconds). + + :param timestamp: + :type timestamp: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._export_status_serialize( + timestamp=timestamp, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[ExportEvent]", + '401': "VCellHTTPError", + '403': None, + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def export_status_with_http_info( + self, + timestamp: Optional[StrictInt] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[List[ExportEvent]]: + """export_status + + Get the status of your export jobs past the timestamp (Unix epoch in seconds). + + :param timestamp: + :type timestamp: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._export_status_serialize( + timestamp=timestamp, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[ExportEvent]", + '401': "VCellHTTPError", + '403': None, + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def export_status_without_preload_content( + self, + timestamp: Optional[StrictInt] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """export_status + + Get the status of your export jobs past the timestamp (Unix epoch in seconds). + + :param timestamp: + :type timestamp: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._export_status_serialize( + timestamp=timestamp, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[ExportEvent]", + '401': "VCellHTTPError", + '403': None, + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _export_status_serialize( + self, + timestamp, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + if timestamp is not None: + + _query_params.append(('timestamp', timestamp)) + + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'openId' + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v1/export/status', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + diff --git a/pyvcell/_internal/api/vcell_client/api/field_data_resource_api.py b/pyvcell/_internal/api/vcell_client/api/field_data_resource_api.py index 03ec94d..99d1341 100644 --- a/pyvcell/_internal/api/vcell_client/api/field_data_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/field_data_resource_api.py @@ -1,25 +1,35 @@ """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from typing import Annotated, Any, Dict, List, Optional, Tuple, Union -from pydantic import Field, StrictBytes, StrictFloat, StrictInt, StrictStr, validate_call +import warnings +from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt +from typing import Any, Dict, List, Optional, Tuple, Union +from typing_extensions import Annotated -from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized -from pyvcell._internal.api.vcell_client.api_response import ApiResponse -from pyvcell._internal.api.vcell_client.models.analyzed_results_from_field_data import AnalyzedResultsFromFieldData +from pydantic import StrictBytes, StrictFloat, StrictInt, StrictStr +from typing import Dict, List, Optional, Tuple, Union +from pyvcell._internal.api.vcell_client.models.extent import Extent +from pyvcell._internal.api.vcell_client.models.external_data_identifier import ExternalDataIdentifier +from pyvcell._internal.api.vcell_client.models.field_data import FieldData from pyvcell._internal.api.vcell_client.models.field_data_reference import FieldDataReference -from pyvcell._internal.api.vcell_client.models.field_data_save_results import FieldDataSaveResults +from pyvcell._internal.api.vcell_client.models.field_data_saved_results import FieldDataSavedResults from pyvcell._internal.api.vcell_client.models.field_data_shape import FieldDataShape +from pyvcell._internal.api.vcell_client.models.i_size import ISize +from pyvcell._internal.api.vcell_client.models.origin import Origin +from pyvcell._internal.api.vcell_client.models.source_model import SourceModel + +from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized +from pyvcell._internal.api.vcell_client.api_response import ApiResponse from pyvcell._internal.api.vcell_client.rest import RESTResponseType @@ -35,28 +45,50 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client + @validate_call - def analyze_field_data_file( + def advanced_create( self, file: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None, file_name: Optional[StrictStr] = None, + extent: Optional[Extent] = None, + i_size: Optional[ISize] = None, + channel_names: Optional[List[StrictStr]] = None, + times: Optional[List[Union[StrictFloat, StrictInt]]] = None, + annotation: Optional[StrictStr] = None, + origin: Optional[Origin] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> AnalyzedResultsFromFieldData: - """Analyze the field data from the uploaded file. Filenames must be lowercase alphanumeric, and can contain underscores. + ) -> FieldDataSavedResults: + """Create Field Data with granular detail in one request.The following files are accepted: .tif and .zip. :param file: :type file: bytearray :param file_name: :type file_name: str + :param extent: + :type extent: Extent + :param i_size: + :type i_size: ISize + :param channel_names: + :type channel_names: List[str] + :param times: + :type times: List[float] + :param annotation: + :type annotation: str + :param origin: + :type origin: Origin :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -77,51 +109,84 @@ def analyze_field_data_file( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._analyze_field_data_file_serialize( + _param = self._advanced_create_serialize( file=file, file_name=file_name, + extent=extent, + i_size=i_size, + channel_names=channel_names, + times=times, + annotation=annotation, + origin=origin, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AnalyzedResultsFromFieldData", - "401": None, - "403": None, + '200': "FieldDataSavedResults", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call - def analyze_field_data_file_with_http_info( + def advanced_create_with_http_info( self, file: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None, file_name: Optional[StrictStr] = None, + extent: Optional[Extent] = None, + i_size: Optional[ISize] = None, + channel_names: Optional[List[StrictStr]] = None, + times: Optional[List[Union[StrictFloat, StrictInt]]] = None, + annotation: Optional[StrictStr] = None, + origin: Optional[Origin] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[AnalyzedResultsFromFieldData]: - """Analyze the field data from the uploaded file. Filenames must be lowercase alphanumeric, and can contain underscores. + ) -> ApiResponse[FieldDataSavedResults]: + """Create Field Data with granular detail in one request.The following files are accepted: .tif and .zip. :param file: :type file: bytearray :param file_name: :type file_name: str + :param extent: + :type extent: Extent + :param i_size: + :type i_size: ISize + :param channel_names: + :type channel_names: List[str] + :param times: + :type times: List[float] + :param annotation: + :type annotation: str + :param origin: + :type origin: Origin :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -142,51 +207,84 @@ def analyze_field_data_file_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._analyze_field_data_file_serialize( + _param = self._advanced_create_serialize( file=file, file_name=file_name, + extent=extent, + i_size=i_size, + channel_names=channel_names, + times=times, + annotation=annotation, + origin=origin, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AnalyzedResultsFromFieldData", - "401": None, - "403": None, + '200': "FieldDataSavedResults", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call - def analyze_field_data_file_without_preload_content( + def advanced_create_without_preload_content( self, file: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None, file_name: Optional[StrictStr] = None, + extent: Optional[Extent] = None, + i_size: Optional[ISize] = None, + channel_names: Optional[List[StrictStr]] = None, + times: Optional[List[Union[StrictFloat, StrictInt]]] = None, + annotation: Optional[StrictStr] = None, + origin: Optional[Origin] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """Analyze the field data from the uploaded file. Filenames must be lowercase alphanumeric, and can contain underscores. + """Create Field Data with granular detail in one request.The following files are accepted: .tif and .zip. :param file: :type file: bytearray :param file_name: :type file_name: str + :param extent: + :type extent: Extent + :param i_size: + :type i_size: ISize + :param channel_names: + :type channel_names: List[str] + :param times: + :type times: List[float] + :param annotation: + :type annotation: str + :param origin: + :type origin: Origin :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -207,43 +305,67 @@ def analyze_field_data_file_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._analyze_field_data_file_serialize( + _param = self._advanced_create_serialize( file=file, file_name=file_name, + extent=extent, + i_size=i_size, + channel_names=channel_names, + times=times, + annotation=annotation, + origin=origin, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AnalyzedResultsFromFieldData", - "401": None, - "403": None, + '200': "FieldDataSavedResults", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response - def _analyze_field_data_file_serialize( + + def _advanced_create_serialize( self, file, file_name, + extent, + i_size, + channel_names, + times, + annotation, + origin, _request_auth, _content_type, _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + 'channelNames': 'multi', + 'times': 'multi', + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -251,29 +373,54 @@ def _analyze_field_data_file_serialize( # process the header parameters # process the form parameters if file is not None: - _files["file"] = file + _files['file'] = file if file_name is not None: - _form_params.append(("fileName", file_name)) + _form_params.append(('fileName', file_name)) + if extent is not None: + _form_params.append(('extent', extent)) + if i_size is not None: + _form_params.append(('iSize', i_size)) + if channel_names is not None: + _form_params.append(('channelNames', channel_names)) + if times is not None: + _form_params.append(('times', times)) + if annotation is not None: + _form_params.append(('annotation', annotation)) + if origin is not None: + _form_params.append(('origin', origin)) # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) # set the HTTP header `Content-Type` if _content_type: - _header_params["Content-Type"] = _content_type + _header_params['Content-Type'] = _content_type else: - _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'multipart/form-data' + ] + ) + ) if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + _header_params['Content-Type'] = _default_content_type # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="POST", - resource_path="/api/v1/fieldData/analyzeFieldDataFile", + method='POST', + resource_path='/api/v1/fieldData/advancedCreate', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -283,28 +430,37 @@ def _analyze_field_data_file_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call - def create_field_data_from_analyzed_file( + def analyze_file( self, - analyzed_results_from_field_data: Optional[AnalyzedResultsFromFieldData] = None, + file: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None, + file_name: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> FieldDataSaveResults: - """Take the analyzed results of the field data, modify it to your liking, then save it on the server. + ) -> FieldData: + """Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and return field data. Color mapped images not supported (the colors in those images will be interpreted as separate channels). Filenames must be lowercase alphanumeric, and can contain underscores. - :param analyzed_results_from_field_data: - :type analyzed_results_from_field_data: AnalyzedResultsFromFieldData + :param file: + :type file: bytearray + :param file_name: + :type file_name: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -325,47 +481,60 @@ def create_field_data_from_analyzed_file( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._create_field_data_from_analyzed_file_serialize( - analyzed_results_from_field_data=analyzed_results_from_field_data, + _param = self._analyze_file_serialize( + file=file, + file_name=file_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "FieldDataSaveResults", - "401": None, - "403": None, + '200': "FieldData", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call - def create_field_data_from_analyzed_file_with_http_info( + def analyze_file_with_http_info( self, - analyzed_results_from_field_data: Optional[AnalyzedResultsFromFieldData] = None, + file: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None, + file_name: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[FieldDataSaveResults]: - """Take the analyzed results of the field data, modify it to your liking, then save it on the server. + ) -> ApiResponse[FieldData]: + """Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and return field data. Color mapped images not supported (the colors in those images will be interpreted as separate channels). Filenames must be lowercase alphanumeric, and can contain underscores. - :param analyzed_results_from_field_data: - :type analyzed_results_from_field_data: AnalyzedResultsFromFieldData + :param file: + :type file: bytearray + :param file_name: + :type file_name: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -386,47 +555,60 @@ def create_field_data_from_analyzed_file_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._create_field_data_from_analyzed_file_serialize( - analyzed_results_from_field_data=analyzed_results_from_field_data, + _param = self._analyze_file_serialize( + file=file, + file_name=file_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "FieldDataSaveResults", - "401": None, - "403": None, + '200': "FieldData", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call - def create_field_data_from_analyzed_file_without_preload_content( + def analyze_file_without_preload_content( self, - analyzed_results_from_field_data: Optional[AnalyzedResultsFromFieldData] = None, + file: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None, + file_name: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """Take the analyzed results of the field data, modify it to your liking, then save it on the server. + """Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and return field data. Color mapped images not supported (the colors in those images will be interpreted as separate channels). Filenames must be lowercase alphanumeric, and can contain underscores. - :param analyzed_results_from_field_data: - :type analyzed_results_from_field_data: AnalyzedResultsFromFieldData + :param file: + :type file: bytearray + :param file_name: + :type file_name: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -447,69 +629,96 @@ def create_field_data_from_analyzed_file_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._create_field_data_from_analyzed_file_serialize( - analyzed_results_from_field_data=analyzed_results_from_field_data, + _param = self._analyze_file_serialize( + file=file, + file_name=file_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "FieldDataSaveResults", - "401": None, - "403": None, + '200': "FieldData", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response - def _create_field_data_from_analyzed_file_serialize( + + def _analyze_file_serialize( self, - analyzed_results_from_field_data, + file, + file_name, _request_auth, _content_type, _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters # process the header parameters # process the form parameters + if file is not None: + _files['file'] = file + if file_name is not None: + _form_params.append(('fileName', file_name)) # process the body parameter - if analyzed_results_from_field_data is not None: - _body_params = analyzed_results_from_field_data + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) # set the HTTP header `Content-Type` if _content_type: - _header_params["Content-Type"] = _content_type + _header_params['Content-Type'] = _content_type else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'multipart/form-data' + ] + ) + ) if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + _header_params['Content-Type'] = _default_content_type # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="POST", - resource_path="/api/v1/fieldData/createFieldDataFromAnalyzedFile", + method='POST', + resource_path='/api/v1/fieldData/analyzeFile', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -519,28 +728,34 @@ def _create_field_data_from_analyzed_file_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call - def delete_field_data( + def copy_models_field_data( self, - field_data_id: StrictStr, + source_model: Optional[SourceModel] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """Delete the selected field data. + ) -> Dict[str, ExternalDataIdentifier]: + """Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. - :param field_data_id: (required) - :type field_data_id: str + :param source_model: + :type source_model: SourceModel :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -561,47 +776,56 @@ def delete_field_data( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._delete_field_data_serialize( - field_data_id=field_data_id, + _param = self._copy_models_field_data_serialize( + source_model=source_model, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "401": None, - "403": None, + '200': "Dict[str, ExternalDataIdentifier]", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '422': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call - def delete_field_data_with_http_info( + def copy_models_field_data_with_http_info( self, - field_data_id: StrictStr, + source_model: Optional[SourceModel] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[None]: - """Delete the selected field data. + ) -> ApiResponse[Dict[str, ExternalDataIdentifier]]: + """Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. - :param field_data_id: (required) - :type field_data_id: str + :param source_model: + :type source_model: SourceModel :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -622,47 +846,56 @@ def delete_field_data_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._delete_field_data_serialize( - field_data_id=field_data_id, + _param = self._copy_models_field_data_serialize( + source_model=source_model, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "401": None, - "403": None, + '200': "Dict[str, ExternalDataIdentifier]", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '422': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call - def delete_field_data_without_preload_content( + def copy_models_field_data_without_preload_content( self, - field_data_id: StrictStr, + source_model: Optional[SourceModel] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """Delete the selected field data. + """Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. - :param field_data_id: (required) - :type field_data_id: str + :param source_model: + :type source_model: SourceModel :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -683,57 +916,92 @@ def delete_field_data_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._delete_field_data_serialize( - field_data_id=field_data_id, + _param = self._copy_models_field_data_serialize( + source_model=source_model, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "401": None, - "403": None, + '200': "Dict[str, ExternalDataIdentifier]", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '422': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response - def _delete_field_data_serialize( + + def _copy_models_field_data_serialize( self, - field_data_id, + source_model, _request_auth, _content_type, _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters - if field_data_id is not None: - _path_params["fieldDataID"] = field_data_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + if source_model is not None: + _body_params = source_model + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="DELETE", - resource_path="/api/v1/fieldData/delete/{fieldDataID}", + method='POST', + resource_path='/api/v1/fieldData/copyModelsFieldData', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -743,25 +1011,37 @@ def _delete_field_data_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call - def get_all_field_data_ids( + def create_from_file( self, + file: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None, + field_data_name: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> List[FieldDataReference]: - """Get all of the ids used to identify, and retrieve field data. + ) -> FieldDataSavedResults: + """Submit a .zip or .tif file that converts into field data, with all defaults derived from the file submitted. + :param file: + :type file: bytearray + :param field_data_name: + :type field_data_name: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -782,40 +1062,60 @@ def get_all_field_data_ids( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._get_all_field_data_ids_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _param = self._create_from_file_serialize( + file=file, + field_data_name=field_data_name, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "List[FieldDataReference]", - "401": None, - "403": None, + '200': "FieldDataSavedResults", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call - def get_all_field_data_ids_with_http_info( + def create_from_file_with_http_info( self, + file: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None, + field_data_name: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[List[FieldDataReference]]: - """Get all of the ids used to identify, and retrieve field data. + ) -> ApiResponse[FieldDataSavedResults]: + """Submit a .zip or .tif file that converts into field data, with all defaults derived from the file submitted. + :param file: + :type file: bytearray + :param field_data_name: + :type field_data_name: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -836,40 +1136,60 @@ def get_all_field_data_ids_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._get_all_field_data_ids_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _param = self._create_from_file_serialize( + file=file, + field_data_name=field_data_name, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "List[FieldDataReference]", - "401": None, - "403": None, + '200': "FieldDataSavedResults", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call - def get_all_field_data_ids_without_preload_content( + def create_from_file_without_preload_content( self, + file: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None, + field_data_name: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """Get all of the ids used to identify, and retrieve field data. + """Submit a .zip or .tif file that converts into field data, with all defaults derived from the file submitted. + :param file: + :type file: bytearray + :param field_data_name: + :type field_data_name: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -890,54 +1210,96 @@ def get_all_field_data_ids_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._get_all_field_data_ids_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _param = self._create_from_file_serialize( + file=file, + field_data_name=field_data_name, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "List[FieldDataReference]", - "401": None, - "403": None, + '200': "FieldDataSavedResults", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response - def _get_all_field_data_ids_serialize( + + def _create_from_file_serialize( self, + file, + field_data_name, _request_auth, _content_type, _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters # process the header parameters # process the form parameters + if file is not None: + _files['file'] = file + if field_data_name is not None: + _form_params.append(('fieldDataName', field_data_name)) # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'multipart/form-data' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="GET", - resource_path="/api/v1/fieldData/IDs", + method='POST', + resource_path='/api/v1/fieldData/createFromFile', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -947,28 +1309,40 @@ def _get_all_field_data_ids_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call - def get_field_data_shape_from_id( + def create_from_simulation( self, - field_data_id: StrictStr, + sim_key_reference: Optional[StrictStr] = None, + job_index: Optional[StrictInt] = None, + new_field_data_name: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> FieldDataShape: - """Get the shape of the field data. That is it's size, origin, extent, and data identifiers. + ) -> None: + """Create new field data from existing simulation results. - :param field_data_id: (required) - :type field_data_id: str + :param sim_key_reference: + :type sim_key_reference: str + :param job_index: + :type job_index: int + :param new_field_data_name: + :type new_field_data_name: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -989,47 +1363,63 @@ def get_field_data_shape_from_id( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._get_field_data_shape_from_id_serialize( - field_data_id=field_data_id, + _param = self._create_from_simulation_serialize( + sim_key_reference=sim_key_reference, + job_index=job_index, + new_field_data_name=new_field_data_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "FieldDataShape", - "401": None, - "403": None, + '201': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call - def get_field_data_shape_from_id_with_http_info( + def create_from_simulation_with_http_info( self, - field_data_id: StrictStr, + sim_key_reference: Optional[StrictStr] = None, + job_index: Optional[StrictInt] = None, + new_field_data_name: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[FieldDataShape]: - """Get the shape of the field data. That is it's size, origin, extent, and data identifiers. + ) -> ApiResponse[None]: + """Create new field data from existing simulation results. - :param field_data_id: (required) - :type field_data_id: str + :param sim_key_reference: + :type sim_key_reference: str + :param job_index: + :type job_index: int + :param new_field_data_name: + :type new_field_data_name: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1050,47 +1440,63 @@ def get_field_data_shape_from_id_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._get_field_data_shape_from_id_serialize( - field_data_id=field_data_id, + _param = self._create_from_simulation_serialize( + sim_key_reference=sim_key_reference, + job_index=job_index, + new_field_data_name=new_field_data_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "FieldDataShape", - "401": None, - "403": None, + '201': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call - def get_field_data_shape_from_id_without_preload_content( + def create_from_simulation_without_preload_content( self, - field_data_id: StrictStr, + sim_key_reference: Optional[StrictStr] = None, + job_index: Optional[StrictInt] = None, + new_field_data_name: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """Get the shape of the field data. That is it's size, origin, extent, and data identifiers. + """Create new field data from existing simulation results. - :param field_data_id: (required) - :type field_data_id: str + :param sim_key_reference: + :type sim_key_reference: str + :param job_index: + :type job_index: int + :param new_field_data_name: + :type new_field_data_name: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1111,61 +1517,99 @@ def get_field_data_shape_from_id_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 - _param = self._get_field_data_shape_from_id_serialize( - field_data_id=field_data_id, + _param = self._create_from_simulation_serialize( + sim_key_reference=sim_key_reference, + job_index=job_index, + new_field_data_name=new_field_data_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "FieldDataShape", - "401": None, - "403": None, + '201': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response - def _get_field_data_shape_from_id_serialize( + + def _create_from_simulation_serialize( self, - field_data_id, + sim_key_reference, + job_index, + new_field_data_name, _request_auth, _content_type, _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters - if field_data_id is not None: - _path_params["fieldDataID"] = field_data_id # process the query parameters # process the header parameters # process the form parameters + if sim_key_reference is not None: + _form_params.append(('simKeyReference', sim_key_reference)) + if job_index is not None: + _form_params.append(('jobIndex', job_index)) + if new_field_data_name is not None: + _form_params.append(('newFieldDataName', new_field_data_name)) # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/x-www-form-urlencoded' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="GET", - resource_path="/api/v1/fieldData/fieldDataShape/{fieldDataID}", + method='POST', + resource_path='/api/v1/fieldData/createFromSimulation', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1175,5 +1619,1079 @@ def _get_field_data_shape_from_id_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def delete( + self, + field_data_id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> None: + """Delete the selected field data. + + + :param field_data_id: (required) + :type field_data_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_serialize( + field_data_id=field_data_id, _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def delete_with_http_info( + self, + field_data_id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[None]: + """Delete the selected field data. + + + :param field_data_id: (required) + :type field_data_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_serialize( + field_data_id=field_data_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def delete_without_preload_content( + self, + field_data_id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """Delete the selected field data. + + + :param field_data_id: (required) + :type field_data_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_serialize( + field_data_id=field_data_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _delete_serialize( + self, + field_data_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if field_data_id is not None: + _path_params['fieldDataID'] = field_data_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'openId' + ] + + return self.api_client.param_serialize( + method='DELETE', + resource_path='/api/v1/fieldData/delete/{fieldDataID}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_all_ids( + self, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> List[FieldDataReference]: + """Get all of the ids used to identify, and retrieve field data. + + + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_all_ids_serialize( + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[FieldDataReference]", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def get_all_ids_with_http_info( + self, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[List[FieldDataReference]]: + """Get all of the ids used to identify, and retrieve field data. + + + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_all_ids_serialize( + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[FieldDataReference]", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def get_all_ids_without_preload_content( + self, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """Get all of the ids used to identify, and retrieve field data. + + + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_all_ids_serialize( + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[FieldDataReference]", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _get_all_ids_serialize( + self, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'openId' + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v1/fieldData/IDs', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_shape_from_id( + self, + field_data_id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> FieldDataShape: + """Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. + + + :param field_data_id: (required) + :type field_data_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_shape_from_id_serialize( + field_data_id=field_data_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "FieldDataShape", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def get_shape_from_id_with_http_info( + self, + field_data_id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[FieldDataShape]: + """Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. + + + :param field_data_id: (required) + :type field_data_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_shape_from_id_serialize( + field_data_id=field_data_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "FieldDataShape", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def get_shape_from_id_without_preload_content( + self, + field_data_id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. + + + :param field_data_id: (required) + :type field_data_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_shape_from_id_serialize( + field_data_id=field_data_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "FieldDataShape", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _get_shape_from_id_serialize( + self, + field_data_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if field_data_id is not None: + _path_params['fieldDataID'] = field_data_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'openId' + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v1/fieldData/shape/{fieldDataID}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def save( + self, + field_data: Optional[FieldData] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> FieldDataSavedResults: + """Take the generated field data, and save it to the server. User may adjust the analyzed file before uploading to edit defaults. + + + :param field_data: + :type field_data: FieldData + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_serialize( + field_data=field_data, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "FieldDataSavedResults", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def save_with_http_info( + self, + field_data: Optional[FieldData] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[FieldDataSavedResults]: + """Take the generated field data, and save it to the server. User may adjust the analyzed file before uploading to edit defaults. + + + :param field_data: + :type field_data: FieldData + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_serialize( + field_data=field_data, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "FieldDataSavedResults", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def save_without_preload_content( + self, + field_data: Optional[FieldData] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """Take the generated field data, and save it to the server. User may adjust the analyzed file before uploading to edit defaults. + + + :param field_data: + :type field_data: FieldData + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_serialize( + field_data=field_data, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "FieldDataSavedResults", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _save_serialize( + self, + field_data, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if field_data is not None: + _body_params = field_data + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + 'openId' + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/api/v1/fieldData/save', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + diff --git a/pyvcell/_internal/api/vcell_client/api/geometry_resource_api.py b/pyvcell/_internal/api/vcell_client/api/geometry_resource_api.py new file mode 100644 index 0000000..c7942f6 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/api/geometry_resource_api.py @@ -0,0 +1,1419 @@ +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import warnings +from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt +from typing import Any, Dict, List, Optional, Tuple, Union +from typing_extensions import Annotated + +from pydantic import Field, StrictBool, StrictStr +from typing import List, Optional +from typing_extensions import Annotated +from pyvcell._internal.api.vcell_client.models.geometry_summary import GeometrySummary + +from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized +from pyvcell._internal.api.vcell_client.api_response import ApiResponse +from pyvcell._internal.api.vcell_client.rest import RESTResponseType + + +class GeometryResourceApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + + @validate_call + def delete_geometry( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> None: + """delete_geometry + + Remove specific Geometry. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_geometry_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def delete_geometry_with_http_info( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[None]: + """delete_geometry + + Remove specific Geometry. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_geometry_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def delete_geometry_without_preload_content( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """delete_geometry + + Remove specific Geometry. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_geometry_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _delete_geometry_serialize( + self, + id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if id is not None: + _path_params['id'] = id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='DELETE', + resource_path='/api/v1/geometry/{id}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_geometry_summaries( + self, + include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include Geometry summaries that are public and shared with the requester. Default is true.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> List[GeometrySummary]: + """get_geometry_summaries + + Return Geometry summaries. + + :param include_public_and_shared: Include Geometry summaries that are public and shared with the requester. Default is true. + :type include_public_and_shared: bool + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_geometry_summaries_serialize( + include_public_and_shared=include_public_and_shared, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[GeometrySummary]", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def get_geometry_summaries_with_http_info( + self, + include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include Geometry summaries that are public and shared with the requester. Default is true.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[List[GeometrySummary]]: + """get_geometry_summaries + + Return Geometry summaries. + + :param include_public_and_shared: Include Geometry summaries that are public and shared with the requester. Default is true. + :type include_public_and_shared: bool + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_geometry_summaries_serialize( + include_public_and_shared=include_public_and_shared, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[GeometrySummary]", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def get_geometry_summaries_without_preload_content( + self, + include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include Geometry summaries that are public and shared with the requester. Default is true.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_geometry_summaries + + Return Geometry summaries. + + :param include_public_and_shared: Include Geometry summaries that are public and shared with the requester. Default is true. + :type include_public_and_shared: bool + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_geometry_summaries_serialize( + include_public_and_shared=include_public_and_shared, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[GeometrySummary]", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _get_geometry_summaries_serialize( + self, + include_public_and_shared, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + if include_public_and_shared is not None: + + _query_params.append(('includePublicAndShared', include_public_and_shared)) + + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v1/geometry/summaries', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_geometry_summary( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> GeometrySummary: + """get_geometry_summary + + All of the text based information about a Geometry (dimensions, extent, origin, etc...), but not the actual Geometry itself. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_geometry_summary_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GeometrySummary", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def get_geometry_summary_with_http_info( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[GeometrySummary]: + """get_geometry_summary + + All of the text based information about a Geometry (dimensions, extent, origin, etc...), but not the actual Geometry itself. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_geometry_summary_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GeometrySummary", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def get_geometry_summary_without_preload_content( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_geometry_summary + + All of the text based information about a Geometry (dimensions, extent, origin, etc...), but not the actual Geometry itself. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_geometry_summary_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GeometrySummary", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _get_geometry_summary_serialize( + self, + id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if id is not None: + _path_params['id'] = id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v1/geometry/summary/{id}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_geometry_vcml( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> str: + """get_geometry_vcml + + Returns as root element in VCML format. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_geometry_vcml_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def get_geometry_vcml_with_http_info( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[str]: + """get_geometry_vcml + + Returns as root element in VCML format. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_geometry_vcml_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def get_geometry_vcml_without_preload_content( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_geometry_vcml + + Returns as root element in VCML format. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_geometry_vcml_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _get_geometry_vcml_serialize( + self, + id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if id is not None: + _path_params['id'] = id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/xml', + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v1/geometry/{id}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def save_geometry( + self, + body: StrictStr, + new_name: Annotated[Optional[StrictStr], Field(description="Name to save new Geometry under. Leave blank if re-saving existing Geometry.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> str: + """save_geometry + + Save's VCML with as the root element. + + :param body: (required) + :type body: str + :param new_name: Name to save new Geometry under. Leave blank if re-saving existing Geometry. + :type new_name: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_geometry_serialize( + body=body, + new_name=new_name, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def save_geometry_with_http_info( + self, + body: StrictStr, + new_name: Annotated[Optional[StrictStr], Field(description="Name to save new Geometry under. Leave blank if re-saving existing Geometry.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[str]: + """save_geometry + + Save's VCML with as the root element. + + :param body: (required) + :type body: str + :param new_name: Name to save new Geometry under. Leave blank if re-saving existing Geometry. + :type new_name: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_geometry_serialize( + body=body, + new_name=new_name, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def save_geometry_without_preload_content( + self, + body: StrictStr, + new_name: Annotated[Optional[StrictStr], Field(description="Name to save new Geometry under. Leave blank if re-saving existing Geometry.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """save_geometry + + Save's VCML with as the root element. + + :param body: (required) + :type body: str + :param new_name: Name to save new Geometry under. Leave blank if re-saving existing Geometry. + :type new_name: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_geometry_serialize( + body=body, + new_name=new_name, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _save_geometry_serialize( + self, + body, + new_name, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + if new_name is not None: + + _query_params.append(('newName', new_name)) + + # process the header parameters + # process the form parameters + # process the body parameter + if body is not None: + _body_params = body + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/xml', + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/xml' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + 'openId' + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/api/v1/geometry', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + diff --git a/pyvcell/_internal/api/vcell_client/api/hello_world_api.py b/pyvcell/_internal/api/vcell_client/api/hello_world_api.py index e74e491..c5ac8d2 100644 --- a/pyvcell/_internal/api/vcell_client/api/hello_world_api.py +++ b/pyvcell/_internal/api/vcell_client/api/hello_world_api.py @@ -1,22 +1,25 @@ """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" -from typing import Annotated, Any, Dict, List, Optional, Tuple, Union +import warnings +from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt +from typing import Any, Dict, List, Optional, Tuple, Union +from typing_extensions import Annotated -from pydantic import Field, StrictFloat, StrictInt, StrictStr, validate_call +from pyvcell._internal.api.vcell_client.models.hello_world_message import HelloWorldMessage from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized from pyvcell._internal.api.vcell_client.api_response import ApiResponse -from pyvcell._internal.api.vcell_client.models.hello_world_message import HelloWorldMessage from pyvcell._internal.api.vcell_client.rest import RESTResponseType @@ -32,13 +35,17 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client + @validate_call def get_hello_world( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -68,29 +75,40 @@ def get_hello_world( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_hello_world_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "HelloWorldMessage", + '200': "HelloWorldMessage", + '403': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def get_hello_world_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -120,29 +138,40 @@ def get_hello_world_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_hello_world_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "HelloWorldMessage", + '200': "HelloWorldMessage", + '403': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def get_hello_world_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -172,18 +201,26 @@ def get_hello_world_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_hello_world_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "HelloWorldMessage", + '200': "HelloWorldMessage", + '403': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _get_hello_world_serialize( self, _request_auth, @@ -191,15 +228,19 @@ def _get_hello_world_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -208,16 +249,23 @@ def _get_hello_world_serialize( # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + # authentication setting - _auth_settings: List[str] = [] + _auth_settings: List[str] = [ + ] return self.api_client.param_serialize( - method="GET", - resource_path="/api/v1/helloworld", + method='GET', + resource_path='/api/v1/helloworld', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -227,5 +275,7 @@ def _get_hello_world_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + diff --git a/pyvcell/_internal/api/vcell_client/api/math_model_resource_api.py b/pyvcell/_internal/api/vcell_client/api/math_model_resource_api.py new file mode 100644 index 0000000..93881e1 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/api/math_model_resource_api.py @@ -0,0 +1,1434 @@ +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import warnings +from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt +from typing import Any, Dict, List, Optional, Tuple, Union +from typing_extensions import Annotated + +from pydantic import Field, StrictBool, StrictStr +from typing import List, Optional +from typing_extensions import Annotated +from pyvcell._internal.api.vcell_client.models.math_model_summary import MathModelSummary + +from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized +from pyvcell._internal.api.vcell_client.api_response import ApiResponse +from pyvcell._internal.api.vcell_client.rest import RESTResponseType + + +class MathModelResourceApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + + @validate_call + def delete_math_model( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> None: + """delete_math_model + + Remove specific Math Model. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_math_model_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def delete_math_model_with_http_info( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[None]: + """delete_math_model + + Remove specific Math Model. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_math_model_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def delete_math_model_without_preload_content( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """delete_math_model + + Remove specific Math Model. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_math_model_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _delete_math_model_serialize( + self, + id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if id is not None: + _path_params['id'] = id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='DELETE', + resource_path='/api/v1/mathModel/{id}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_summaries( + self, + include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include MathModel summaries that are public and shared with the requester. Default is true.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> List[MathModelSummary]: + """get_summaries + + Return MathModel summaries. + + :param include_public_and_shared: Include MathModel summaries that are public and shared with the requester. Default is true. + :type include_public_and_shared: bool + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_summaries_serialize( + include_public_and_shared=include_public_and_shared, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[MathModelSummary]", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def get_summaries_with_http_info( + self, + include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include MathModel summaries that are public and shared with the requester. Default is true.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[List[MathModelSummary]]: + """get_summaries + + Return MathModel summaries. + + :param include_public_and_shared: Include MathModel summaries that are public and shared with the requester. Default is true. + :type include_public_and_shared: bool + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_summaries_serialize( + include_public_and_shared=include_public_and_shared, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[MathModelSummary]", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def get_summaries_without_preload_content( + self, + include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include MathModel summaries that are public and shared with the requester. Default is true.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_summaries + + Return MathModel summaries. + + :param include_public_and_shared: Include MathModel summaries that are public and shared with the requester. Default is true. + :type include_public_and_shared: bool + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_summaries_serialize( + include_public_and_shared=include_public_and_shared, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[MathModelSummary]", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _get_summaries_serialize( + self, + include_public_and_shared, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + if include_public_and_shared is not None: + + _query_params.append(('includePublicAndShared', include_public_and_shared)) + + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v1/mathModel/summaries', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_summary( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> MathModelSummary: + """get_summary + + All of the text based information about a MathModel (summary, version, publication status, etc...), but not the actual MathModel itself. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_summary_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "MathModelSummary", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def get_summary_with_http_info( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[MathModelSummary]: + """get_summary + + All of the text based information about a MathModel (summary, version, publication status, etc...), but not the actual MathModel itself. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_summary_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "MathModelSummary", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def get_summary_without_preload_content( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_summary + + All of the text based information about a MathModel (summary, version, publication status, etc...), but not the actual MathModel itself. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_summary_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "MathModelSummary", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _get_summary_serialize( + self, + id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if id is not None: + _path_params['id'] = id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v1/mathModel/summary/{id}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_vcml( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> str: + """get_vcml + + Returns MathModel in VCML format. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_vcml_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def get_vcml_with_http_info( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[str]: + """get_vcml + + Returns MathModel in VCML format. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_vcml_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def get_vcml_without_preload_content( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_vcml + + Returns MathModel in VCML format. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_vcml_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _get_vcml_serialize( + self, + id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if id is not None: + _path_params['id'] = id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/xml', + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v1/mathModel/{id}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def save_math_model( + self, + body: StrictStr, + new_name: Annotated[Optional[StrictStr], Field(description="Name to save new MathModel under. Leave blank if re-saving existing MathModel.")] = None, + sim_names: Annotated[Optional[List[StrictStr]], Field(description="The name of simulations that will be prepared for future execution.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> str: + """save_math_model + + + :param body: (required) + :type body: str + :param new_name: Name to save new MathModel under. Leave blank if re-saving existing MathModel. + :type new_name: str + :param sim_names: The name of simulations that will be prepared for future execution. + :type sim_names: List[str] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_math_model_serialize( + body=body, + new_name=new_name, + sim_names=sim_names, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def save_math_model_with_http_info( + self, + body: StrictStr, + new_name: Annotated[Optional[StrictStr], Field(description="Name to save new MathModel under. Leave blank if re-saving existing MathModel.")] = None, + sim_names: Annotated[Optional[List[StrictStr]], Field(description="The name of simulations that will be prepared for future execution.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[str]: + """save_math_model + + + :param body: (required) + :type body: str + :param new_name: Name to save new MathModel under. Leave blank if re-saving existing MathModel. + :type new_name: str + :param sim_names: The name of simulations that will be prepared for future execution. + :type sim_names: List[str] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_math_model_serialize( + body=body, + new_name=new_name, + sim_names=sim_names, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def save_math_model_without_preload_content( + self, + body: StrictStr, + new_name: Annotated[Optional[StrictStr], Field(description="Name to save new MathModel under. Leave blank if re-saving existing MathModel.")] = None, + sim_names: Annotated[Optional[List[StrictStr]], Field(description="The name of simulations that will be prepared for future execution.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """save_math_model + + + :param body: (required) + :type body: str + :param new_name: Name to save new MathModel under. Leave blank if re-saving existing MathModel. + :type new_name: str + :param sim_names: The name of simulations that will be prepared for future execution. + :type sim_names: List[str] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_math_model_serialize( + body=body, + new_name=new_name, + sim_names=sim_names, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '401': "VCellHTTPError", + '403': None, + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _save_math_model_serialize( + self, + body, + new_name, + sim_names, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + 'simNames': 'multi', + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + if new_name is not None: + + _query_params.append(('newName', new_name)) + + if sim_names is not None: + + _query_params.append(('simNames', sim_names)) + + # process the header parameters + # process the form parameters + # process the body parameter + if body is not None: + _body_params = body + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/xml', + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/xml' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + 'openId' + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/api/v1/mathModel', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + diff --git a/pyvcell/_internal/api/vcell_client/api/publication_resource_api.py b/pyvcell/_internal/api/vcell_client/api/publication_resource_api.py index a421204..bf48998 100644 --- a/pyvcell/_internal/api/vcell_client/api/publication_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/publication_resource_api.py @@ -1,22 +1,27 @@ """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from typing import Annotated, Any, Dict, List, Optional, Tuple, Union -from pydantic import Field, StrictFloat, StrictInt, StrictStr, validate_call +import warnings +from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt +from typing import Any, Dict, List, Optional, Tuple, Union +from typing_extensions import Annotated + +from pydantic import StrictInt +from typing import List, Optional +from pyvcell._internal.api.vcell_client.models.publication import Publication from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized from pyvcell._internal.api.vcell_client.api_response import ApiResponse -from pyvcell._internal.api.vcell_client.models.publication import Publication from pyvcell._internal.api.vcell_client.rest import RESTResponseType @@ -32,6 +37,7 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client + @validate_call def create_publication( self, @@ -39,7 +45,10 @@ def create_publication( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -71,28 +80,33 @@ def create_publication( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._create_publication_serialize( publication=publication, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "int", - "401": None, - "403": None, + '200': "int", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def create_publication_with_http_info( self, @@ -100,7 +114,10 @@ def create_publication_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -132,28 +149,33 @@ def create_publication_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._create_publication_serialize( publication=publication, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "int", - "401": None, - "403": None, + '200': "int", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def create_publication_without_preload_content( self, @@ -161,7 +183,10 @@ def create_publication_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -193,24 +218,29 @@ def create_publication_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._create_publication_serialize( publication=publication, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "int", - "401": None, - "403": None, + '200': "int", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _create_publication_serialize( self, publication, @@ -219,15 +249,19 @@ def _create_publication_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -238,24 +272,37 @@ def _create_publication_serialize( if publication is not None: _body_params = publication + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) # set the HTTP header `Content-Type` if _content_type: - _header_params["Content-Type"] = _content_type + _header_params['Content-Type'] = _content_type else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + _header_params['Content-Type'] = _default_content_type # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="POST", - resource_path="/api/v1/publications", + method='POST', + resource_path='/api/v1/publications', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -265,9 +312,12 @@ def _create_publication_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def delete_publication( self, @@ -275,7 +325,10 @@ def delete_publication( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -307,24 +360,34 @@ def delete_publication( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._delete_publication_serialize( - id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "401": None, - "403": None, + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def delete_publication_with_http_info( self, @@ -332,7 +395,10 @@ def delete_publication_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -364,24 +430,34 @@ def delete_publication_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._delete_publication_serialize( - id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "401": None, - "403": None, + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def delete_publication_without_preload_content( self, @@ -389,7 +465,10 @@ def delete_publication_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -421,20 +500,30 @@ def delete_publication_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._delete_publication_serialize( - id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "204": None, - "401": None, - "403": None, + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _delete_publication_serialize( self, id, @@ -443,31 +532,47 @@ def _delete_publication_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters if id is not None: - _path_params["id"] = id + _path_params['id'] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="DELETE", - resource_path="/api/v1/publications/{id}", + method='DELETE', + resource_path='/api/v1/publications/{id}', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -477,9 +582,12 @@ def _delete_publication_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def get_publication_by_id( self, @@ -487,7 +595,10 @@ def get_publication_by_id( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -519,22 +630,31 @@ def get_publication_by_id( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_publication_by_id_serialize( - id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Publication", + '200': "Publication", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def get_publication_by_id_with_http_info( self, @@ -542,7 +662,10 @@ def get_publication_by_id_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -574,22 +697,31 @@ def get_publication_by_id_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_publication_by_id_serialize( - id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Publication", + '200': "Publication", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def get_publication_by_id_without_preload_content( self, @@ -597,7 +729,10 @@ def get_publication_by_id_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -629,18 +764,27 @@ def get_publication_by_id_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_publication_by_id_serialize( - id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Publication", + '200': "Publication", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _get_publication_by_id_serialize( self, id, @@ -649,35 +793,46 @@ def _get_publication_by_id_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters if id is not None: - _path_params["id"] = id + _path_params['id'] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + # authentication setting - _auth_settings: List[str] = [] + _auth_settings: List[str] = [ + ] return self.api_client.param_serialize( - method="GET", - resource_path="/api/v1/publications/{id}", + method='GET', + resource_path='/api/v1/publications/{id}', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -687,16 +842,22 @@ def _get_publication_by_id_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def get_publications( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -726,29 +887,40 @@ def get_publications( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_publications_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "List[Publication]", + '200': "List[Publication]", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def get_publications_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -778,29 +950,40 @@ def get_publications_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_publications_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "List[Publication]", + '200': "List[Publication]", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def get_publications_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -830,18 +1013,26 @@ def get_publications_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_publications_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "List[Publication]", + '200': "List[Publication]", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _get_publications_serialize( self, _request_auth, @@ -849,15 +1040,19 @@ def _get_publications_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -866,16 +1061,23 @@ def _get_publications_serialize( # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + # authentication setting - _auth_settings: List[str] = [] + _auth_settings: List[str] = [ + ] return self.api_client.param_serialize( - method="GET", - resource_path="/api/v1/publications", + method='GET', + resource_path='/api/v1/publications', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -885,9 +1087,12 @@ def _get_publications_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def update_publication( self, @@ -895,7 +1100,10 @@ def update_publication( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -927,28 +1135,33 @@ def update_publication( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._update_publication_serialize( publication=publication, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Publication", - "401": None, - "403": None, + '200': "Publication", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def update_publication_with_http_info( self, @@ -956,7 +1169,10 @@ def update_publication_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -988,28 +1204,33 @@ def update_publication_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._update_publication_serialize( publication=publication, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Publication", - "401": None, - "403": None, + '200': "Publication", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def update_publication_without_preload_content( self, @@ -1017,7 +1238,10 @@ def update_publication_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1049,24 +1273,29 @@ def update_publication_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._update_publication_serialize( publication=publication, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Publication", - "401": None, - "403": None, + '200': "Publication", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _update_publication_serialize( self, publication, @@ -1075,15 +1304,19 @@ def _update_publication_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -1094,24 +1327,37 @@ def _update_publication_serialize( if publication is not None: _body_params = publication + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) # set the HTTP header `Content-Type` if _content_type: - _header_params["Content-Type"] = _content_type + _header_params['Content-Type'] = _content_type else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + _header_params['Content-Type'] = _default_content_type # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="PUT", - resource_path="/api/v1/publications", + method='PUT', + resource_path='/api/v1/publications', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1121,5 +1367,7 @@ def _update_publication_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + diff --git a/pyvcell/_internal/api/vcell_client/api/simulation_resource_api.py b/pyvcell/_internal/api/vcell_client/api/simulation_resource_api.py index e8940ce..02aa389 100644 --- a/pyvcell/_internal/api/vcell_client/api/simulation_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/simulation_resource_api.py @@ -1,25 +1,28 @@ """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from typing import Annotated, Any, Dict, List, Optional, Tuple, Union -from pydantic import Field, StrictFloat, StrictInt, StrictStr, validate_call +import warnings +from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt +from typing import Any, Dict, List, Optional, Tuple, Union +from typing_extensions import Annotated + +from pydantic import StrictStr +from typing import List, Optional +from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import SimulationStatusPersistentRecord +from pyvcell._internal.api.vcell_client.models.status_message import StatusMessage from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized from pyvcell._internal.api.vcell_client.api_response import ApiResponse -from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import ( - SimulationStatusPersistentRecord, -) -from pyvcell._internal.api.vcell_client.models.status_message import StatusMessage from pyvcell._internal.api.vcell_client.rest import RESTResponseType @@ -35,6 +38,7 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client + @validate_call def get_simulation_status( self, @@ -44,7 +48,10 @@ def get_simulation_status( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -80,7 +87,7 @@ def get_simulation_status( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_simulation_status_serialize( sim_id=sim_id, @@ -89,21 +96,26 @@ def get_simulation_status( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "SimulationStatusPersistentRecord", - "401": None, - "403": None, + '200': "SimulationStatusPersistentRecord", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def get_simulation_status_with_http_info( self, @@ -113,7 +125,10 @@ def get_simulation_status_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -149,7 +164,7 @@ def get_simulation_status_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_simulation_status_serialize( sim_id=sim_id, @@ -158,21 +173,26 @@ def get_simulation_status_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "SimulationStatusPersistentRecord", - "401": None, - "403": None, + '200': "SimulationStatusPersistentRecord", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def get_simulation_status_without_preload_content( self, @@ -182,7 +202,10 @@ def get_simulation_status_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -218,7 +241,7 @@ def get_simulation_status_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_simulation_status_serialize( sim_id=sim_id, @@ -227,17 +250,22 @@ def get_simulation_status_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "SimulationStatusPersistentRecord", - "401": None, - "403": None, + '200': "SimulationStatusPersistentRecord", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _get_simulation_status_serialize( self, sim_id, @@ -248,41 +276,55 @@ def _get_simulation_status_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters if sim_id is not None: - _path_params["simID"] = sim_id + _path_params['simID'] = sim_id # process the query parameters if bio_model_id is not None: - _query_params.append(("bioModelID", bio_model_id)) - + + _query_params.append(('bioModelID', bio_model_id)) + if math_model_id is not None: - _query_params.append(("mathModelID", math_model_id)) - + + _query_params.append(('mathModelID', math_model_id)) + # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="GET", - resource_path="/api/v1/Simulation/{simID}/simulationStatus", + method='GET', + resource_path='/api/v1/Simulation/{simID}/simulationStatus', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -292,9 +334,12 @@ def _get_simulation_status_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def start_simulation( self, @@ -302,7 +347,10 @@ def start_simulation( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -334,28 +382,33 @@ def start_simulation( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._start_simulation_serialize( sim_id=sim_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "List[StatusMessage]", - "401": None, - "403": None, + '200': "List[StatusMessage]", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def start_simulation_with_http_info( self, @@ -363,7 +416,10 @@ def start_simulation_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -395,28 +451,33 @@ def start_simulation_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._start_simulation_serialize( sim_id=sim_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "List[StatusMessage]", - "401": None, - "403": None, + '200': "List[StatusMessage]", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def start_simulation_without_preload_content( self, @@ -424,7 +485,10 @@ def start_simulation_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -456,24 +520,29 @@ def start_simulation_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._start_simulation_serialize( sim_id=sim_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "List[StatusMessage]", - "401": None, - "403": None, + '200': "List[StatusMessage]", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _start_simulation_serialize( self, sim_id, @@ -482,35 +551,47 @@ def _start_simulation_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters if sim_id is not None: - _path_params["simID"] = sim_id + _path_params['simID'] = sim_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="POST", - resource_path="/api/v1/Simulation/{simID}/startSimulation", + method='POST', + resource_path='/api/v1/Simulation/{simID}/startSimulation', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -520,9 +601,12 @@ def _start_simulation_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def stop_simulation( self, @@ -530,7 +614,10 @@ def stop_simulation( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -562,28 +649,33 @@ def stop_simulation( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._stop_simulation_serialize( sim_id=sim_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "List[StatusMessage]", - "401": None, - "403": None, + '200': "List[StatusMessage]", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def stop_simulation_with_http_info( self, @@ -591,7 +683,10 @@ def stop_simulation_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -623,28 +718,33 @@ def stop_simulation_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._stop_simulation_serialize( sim_id=sim_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "List[StatusMessage]", - "401": None, - "403": None, + '200': "List[StatusMessage]", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def stop_simulation_without_preload_content( self, @@ -652,7 +752,10 @@ def stop_simulation_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -684,24 +787,29 @@ def stop_simulation_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._stop_simulation_serialize( sim_id=sim_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "List[StatusMessage]", - "401": None, - "403": None, + '200': "List[StatusMessage]", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _stop_simulation_serialize( self, sim_id, @@ -710,35 +818,47 @@ def _stop_simulation_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters if sim_id is not None: - _path_params["simID"] = sim_id + _path_params['simID'] = sim_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="POST", - resource_path="/api/v1/Simulation/{simID}/stopSimulation", + method='POST', + resource_path='/api/v1/Simulation/{simID}/stopSimulation', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -748,5 +868,7 @@ def _stop_simulation_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + diff --git a/pyvcell/_internal/api/vcell_client/api/solver_resource_api.py b/pyvcell/_internal/api/vcell_client/api/solver_resource_api.py index 737526c..6cad496 100644 --- a/pyvcell/_internal/api/vcell_client/api/solver_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/solver_resource_api.py @@ -1,18 +1,23 @@ """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from typing import Annotated, Any, Dict, List, Optional, Tuple, Union -from pydantic import Field, StrictBytes, StrictFloat, StrictInt, StrictStr, validate_call +import warnings +from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt +from typing import Any, Dict, List, Optional, Tuple, Union +from typing_extensions import Annotated + +from pydantic import StrictBytes, StrictFloat, StrictInt, StrictStr +from typing import Optional, Tuple, Union from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized from pyvcell._internal.api.vcell_client.api_response import ApiResponse @@ -31,6 +36,7 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client + @validate_call def get_fv_solver_input_from_sbml( self, @@ -40,7 +46,10 @@ def get_fv_solver_input_from_sbml( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -76,7 +85,7 @@ def get_fv_solver_input_from_sbml( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_fv_solver_input_from_sbml_serialize( sbml_file=sbml_file, @@ -85,19 +94,24 @@ def get_fv_solver_input_from_sbml( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bytearray", + '200': "bytearray", + '422': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def get_fv_solver_input_from_sbml_with_http_info( self, @@ -107,7 +121,10 @@ def get_fv_solver_input_from_sbml_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -143,7 +160,7 @@ def get_fv_solver_input_from_sbml_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_fv_solver_input_from_sbml_serialize( sbml_file=sbml_file, @@ -152,19 +169,24 @@ def get_fv_solver_input_from_sbml_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bytearray", + '200': "bytearray", + '422': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def get_fv_solver_input_from_sbml_without_preload_content( self, @@ -174,7 +196,10 @@ def get_fv_solver_input_from_sbml_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -210,7 +235,7 @@ def get_fv_solver_input_from_sbml_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_fv_solver_input_from_sbml_serialize( sbml_file=sbml_file, @@ -219,15 +244,20 @@ def get_fv_solver_input_from_sbml_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bytearray", + '200': "bytearray", + '422': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _get_fv_solver_input_from_sbml_serialize( self, sbml_file, @@ -238,15 +268,19 @@ def _get_fv_solver_input_from_sbml_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -254,31 +288,44 @@ def _get_fv_solver_input_from_sbml_serialize( # process the header parameters # process the form parameters if sbml_file is not None: - _files["sbmlFile"] = sbml_file + _files['sbmlFile'] = sbml_file if duration is not None: - _form_params.append(("duration", duration)) + _form_params.append(('duration', duration)) if output_time_step is not None: - _form_params.append(("output_time_step", output_time_step)) + _form_params.append(('output_time_step', output_time_step)) # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/octet-stream"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/octet-stream', + 'application/json' + ] + ) # set the HTTP header `Content-Type` if _content_type: - _header_params["Content-Type"] = _content_type + _header_params['Content-Type'] = _content_type else: - _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'multipart/form-data' + ] + ) + ) if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + _header_params['Content-Type'] = _default_content_type # authentication setting - _auth_settings: List[str] = [] + _auth_settings: List[str] = [ + ] return self.api_client.param_serialize( - method="POST", - resource_path="/api/v1/solver/getFVSolverInput", + method='POST', + resource_path='/api/v1/solver/getFVSolverInput', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -288,9 +335,12 @@ def _get_fv_solver_input_from_sbml_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def get_fv_solver_input_from_vcml( self, @@ -299,7 +349,10 @@ def get_fv_solver_input_from_vcml( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -333,7 +386,7 @@ def get_fv_solver_input_from_vcml( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_fv_solver_input_from_vcml_serialize( vcml_file=vcml_file, @@ -341,19 +394,24 @@ def get_fv_solver_input_from_vcml( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bytearray", + '200': "bytearray", + '422': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def get_fv_solver_input_from_vcml_with_http_info( self, @@ -362,7 +420,10 @@ def get_fv_solver_input_from_vcml_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -396,7 +457,7 @@ def get_fv_solver_input_from_vcml_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_fv_solver_input_from_vcml_serialize( vcml_file=vcml_file, @@ -404,19 +465,24 @@ def get_fv_solver_input_from_vcml_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bytearray", + '200': "bytearray", + '422': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def get_fv_solver_input_from_vcml_without_preload_content( self, @@ -425,7 +491,10 @@ def get_fv_solver_input_from_vcml_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -459,7 +528,7 @@ def get_fv_solver_input_from_vcml_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_fv_solver_input_from_vcml_serialize( vcml_file=vcml_file, @@ -467,15 +536,20 @@ def get_fv_solver_input_from_vcml_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bytearray", + '200': "bytearray", + '422': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _get_fv_solver_input_from_vcml_serialize( self, vcml_file, @@ -485,15 +559,19 @@ def _get_fv_solver_input_from_vcml_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -501,29 +579,42 @@ def _get_fv_solver_input_from_vcml_serialize( # process the header parameters # process the form parameters if vcml_file is not None: - _files["vcmlFile"] = vcml_file + _files['vcmlFile'] = vcml_file if simulation_name is not None: - _form_params.append(("simulation_name", simulation_name)) + _form_params.append(('simulation_name', simulation_name)) # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/octet-stream"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/octet-stream', + 'application/json' + ] + ) # set the HTTP header `Content-Type` if _content_type: - _header_params["Content-Type"] = _content_type + _header_params['Content-Type'] = _content_type else: - _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'multipart/form-data' + ] + ) + ) if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + _header_params['Content-Type'] = _default_content_type # authentication setting - _auth_settings: List[str] = [] + _auth_settings: List[str] = [ + ] return self.api_client.param_serialize( - method="POST", - resource_path="/api/v1/solver/getFVSolverInputFromVCML", + method='POST', + resource_path='/api/v1/solver/getFVSolverInputFromVCML', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -533,5 +624,7 @@ def _get_fv_solver_input_from_vcml_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + diff --git a/pyvcell/_internal/api/vcell_client/api/users_resource_api.py b/pyvcell/_internal/api/vcell_client/api/users_resource_api.py index 97fbe89..d8564f5 100644 --- a/pyvcell/_internal/api/vcell_client/api/users_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/users_resource_api.py @@ -1,26 +1,31 @@ """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from typing import Annotated, Any, Dict, List, Optional, Tuple, Union -from pydantic import Field, StrictFloat, StrictInt, StrictStr, validate_call +import warnings +from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt +from typing import Any, Dict, List, Optional, Tuple, Union +from typing_extensions import Annotated -from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized -from pyvcell._internal.api.vcell_client.api_response import ApiResponse +from pydantic import StrictBool, StrictStr +from typing import Optional from pyvcell._internal.api.vcell_client.models.acces_token_representation_record import AccesTokenRepresentationRecord from pyvcell._internal.api.vcell_client.models.identity import Identity from pyvcell._internal.api.vcell_client.models.user_identity_json_safe import UserIdentityJSONSafe from pyvcell._internal.api.vcell_client.models.user_login_info_for_mapping import UserLoginInfoForMapping from pyvcell._internal.api.vcell_client.models.user_registration_info import UserRegistrationInfo + +from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized +from pyvcell._internal.api.vcell_client.api_response import ApiResponse from pyvcell._internal.api.vcell_client.rest import RESTResponseType @@ -36,6 +41,7 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client + @validate_call def forgot_legacy_password( self, @@ -43,7 +49,10 @@ def forgot_legacy_password( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -75,29 +84,33 @@ def forgot_legacy_password( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._forgot_legacy_password_serialize( user_id=user_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": None, - "401": None, - "403": None, - "500": None, + '200': None, + '401': None, + '403': None, + '500': None, } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def forgot_legacy_password_with_http_info( self, @@ -105,7 +118,10 @@ def forgot_legacy_password_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -137,29 +153,33 @@ def forgot_legacy_password_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._forgot_legacy_password_serialize( user_id=user_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": None, - "401": None, - "403": None, - "500": None, + '200': None, + '401': None, + '403': None, + '500': None, } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def forgot_legacy_password_without_preload_content( self, @@ -167,7 +187,10 @@ def forgot_legacy_password_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -199,25 +222,29 @@ def forgot_legacy_password_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._forgot_legacy_password_serialize( user_id=user_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": None, - "401": None, - "403": None, - "500": None, + '200': None, + '401': None, + '403': None, + '500': None, } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _forgot_legacy_password_serialize( self, user_id, @@ -226,32 +253,42 @@ def _forgot_legacy_password_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if user_id is not None: - _query_params.append(("userID", user_id)) - + + _query_params.append(('userID', user_id)) + # process the header parameters # process the form parameters # process the body parameter + + + # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="POST", - resource_path="/api/v1/users/forgotLegacyPassword", + method='POST', + resource_path='/api/v1/users/forgotLegacyPassword', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -261,16 +298,22 @@ def _forgot_legacy_password_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def get_guest_legacy_api_token( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -300,29 +343,40 @@ def get_guest_legacy_api_token( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_guest_legacy_api_token_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AccesTokenRepresentationRecord", + '200': "AccesTokenRepresentationRecord", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def get_guest_legacy_api_token_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -352,29 +406,40 @@ def get_guest_legacy_api_token_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_guest_legacy_api_token_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AccesTokenRepresentationRecord", + '200': "AccesTokenRepresentationRecord", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def get_guest_legacy_api_token_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -404,18 +469,26 @@ def get_guest_legacy_api_token_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_guest_legacy_api_token_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AccesTokenRepresentationRecord", + '200': "AccesTokenRepresentationRecord", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _get_guest_legacy_api_token_serialize( self, _request_auth, @@ -423,15 +496,19 @@ def _get_guest_legacy_api_token_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -440,16 +517,23 @@ def _get_guest_legacy_api_token_serialize( # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + # authentication setting - _auth_settings: List[str] = [] + _auth_settings: List[str] = [ + ] return self.api_client.param_serialize( - method="POST", - resource_path="/api/v1/users/guestBearerToken", + method='POST', + resource_path='/api/v1/users/guestBearerToken', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -459,16 +543,22 @@ def _get_guest_legacy_api_token_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def get_legacy_api_token( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -498,31 +588,42 @@ def get_legacy_api_token( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_legacy_api_token_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AccesTokenRepresentationRecord", - "401": None, - "403": None, + '200': "AccesTokenRepresentationRecord", + '401': "VCellHTTPError", + '403': None, + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def get_legacy_api_token_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -552,31 +653,42 @@ def get_legacy_api_token_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_legacy_api_token_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AccesTokenRepresentationRecord", - "401": None, - "403": None, + '200': "AccesTokenRepresentationRecord", + '401': "VCellHTTPError", + '403': None, + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def get_legacy_api_token_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -606,20 +718,28 @@ def get_legacy_api_token_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_legacy_api_token_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AccesTokenRepresentationRecord", - "401": None, - "403": None, + '200': "AccesTokenRepresentationRecord", + '401': "VCellHTTPError", + '403': None, + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _get_legacy_api_token_serialize( self, _request_auth, @@ -627,15 +747,19 @@ def _get_legacy_api_token_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -644,16 +768,24 @@ def _get_legacy_api_token_serialize( # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="POST", - resource_path="/api/v1/users/bearerToken", + method='POST', + resource_path='/api/v1/users/bearerToken', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -663,16 +795,22 @@ def _get_legacy_api_token_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def get_mapped_user( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -702,31 +840,43 @@ def get_mapped_user( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_mapped_user_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "UserIdentityJSONSafe", - "401": None, - "403": None, + '200': "UserIdentityJSONSafe", + '401': "VCellHTTPError", + '403': None, + '409': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def get_mapped_user_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -756,31 +906,43 @@ def get_mapped_user_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_mapped_user_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "UserIdentityJSONSafe", - "401": None, - "403": None, + '200': "UserIdentityJSONSafe", + '401': "VCellHTTPError", + '403': None, + '409': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def get_mapped_user_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -810,20 +972,29 @@ def get_mapped_user_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_mapped_user_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "UserIdentityJSONSafe", - "401": None, - "403": None, + '200': "UserIdentityJSONSafe", + '401': "VCellHTTPError", + '403': None, + '409': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _get_mapped_user_serialize( self, _request_auth, @@ -831,15 +1002,19 @@ def _get_mapped_user_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -848,16 +1023,24 @@ def _get_mapped_user_serialize( # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="GET", - resource_path="/api/v1/users/mappedUser", + method='GET', + resource_path='/api/v1/users/mappedUser', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -867,16 +1050,22 @@ def _get_mapped_user_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def get_me( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -906,29 +1095,39 @@ def get_me( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_me_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Identity", + '200': "Identity", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def get_me_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -958,29 +1157,39 @@ def get_me_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_me_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Identity", + '200': "Identity", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def get_me_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1010,18 +1219,25 @@ def get_me_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._get_me_serialize( - _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "Identity", + '200': "Identity", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _get_me_serialize( self, _request_auth, @@ -1029,15 +1245,19 @@ def _get_me_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -1046,16 +1266,23 @@ def _get_me_serialize( # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + # authentication setting - _auth_settings: List[str] = [] + _auth_settings: List[str] = [ + ] return self.api_client.param_serialize( - method="GET", - resource_path="/api/v1/users/me", + method='GET', + resource_path='/api/v1/users/me', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1065,9 +1292,12 @@ def _get_me_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def map_new_user( self, @@ -1075,7 +1305,10 @@ def map_new_user( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1107,29 +1340,34 @@ def map_new_user( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._map_new_user_serialize( user_registration_info=user_registration_info, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": None, - "401": None, - "403": None, - "409": None, + '200': None, + '401': "VCellHTTPError", + '403': None, + '409': None, + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def map_new_user_with_http_info( self, @@ -1137,7 +1375,10 @@ def map_new_user_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1169,29 +1410,34 @@ def map_new_user_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._map_new_user_serialize( user_registration_info=user_registration_info, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": None, - "401": None, - "403": None, - "409": None, + '200': None, + '401': "VCellHTTPError", + '403': None, + '409': None, + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def map_new_user_without_preload_content( self, @@ -1199,7 +1445,10 @@ def map_new_user_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1231,25 +1480,30 @@ def map_new_user_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._map_new_user_serialize( user_registration_info=user_registration_info, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": None, - "401": None, - "403": None, - "409": None, + '200': None, + '401': "VCellHTTPError", + '403': None, + '409': None, + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _map_new_user_serialize( self, user_registration_info, @@ -1258,15 +1512,19 @@ def _map_new_user_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -1277,20 +1535,37 @@ def _map_new_user_serialize( if user_registration_info is not None: _body_params = user_registration_info + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + # set the HTTP header `Content-Type` if _content_type: - _header_params["Content-Type"] = _content_type + _header_params['Content-Type'] = _content_type else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + _header_params['Content-Type'] = _default_content_type # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="POST", - resource_path="/api/v1/users/newUser", + method='POST', + resource_path='/api/v1/users/newUser', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1300,9 +1575,12 @@ def _map_new_user_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def map_user( self, @@ -1310,7 +1588,10 @@ def map_user( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1342,28 +1623,33 @@ def map_user( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._map_user_serialize( user_login_info_for_mapping=user_login_info_for_mapping, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bool", - "401": None, - "403": None, + '200': "bool", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def map_user_with_http_info( self, @@ -1371,7 +1657,10 @@ def map_user_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1403,28 +1692,33 @@ def map_user_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._map_user_serialize( user_login_info_for_mapping=user_login_info_for_mapping, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bool", - "401": None, - "403": None, + '200': "bool", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def map_user_without_preload_content( self, @@ -1432,7 +1726,10 @@ def map_user_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1464,24 +1761,29 @@ def map_user_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._map_user_serialize( user_login_info_for_mapping=user_login_info_for_mapping, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bool", - "401": None, - "403": None, + '200': "bool", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _map_user_serialize( self, user_login_info_for_mapping, @@ -1490,15 +1792,19 @@ def _map_user_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -1509,24 +1815,37 @@ def _map_user_serialize( if user_login_info_for_mapping is not None: _body_params = user_login_info_for_mapping + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) # set the HTTP header `Content-Type` if _content_type: - _header_params["Content-Type"] = _content_type + _header_params['Content-Type'] = _content_type else: - _default_content_type = self.api_client.select_header_content_type(["application/json"]) + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) if _default_content_type is not None: - _header_params["Content-Type"] = _default_content_type + _header_params['Content-Type'] = _default_content_type # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="POST", - resource_path="/api/v1/users/mapUser", + method='POST', + resource_path='/api/v1/users/mapUser', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1536,9 +1855,12 @@ def _map_user_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def process_magic_link( self, @@ -1546,7 +1868,10 @@ def process_magic_link( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1578,27 +1903,33 @@ def process_magic_link( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._process_magic_link_serialize( magic=magic, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": None, - "400": None, + '200': None, + '400': None, + '401': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def process_magic_link_with_http_info( self, @@ -1606,7 +1937,10 @@ def process_magic_link_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1638,27 +1972,33 @@ def process_magic_link_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._process_magic_link_serialize( magic=magic, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": None, - "400": None, + '200': None, + '400': None, + '401': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def process_magic_link_without_preload_content( self, @@ -1666,7 +2006,10 @@ def process_magic_link_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1698,23 +2041,29 @@ def process_magic_link_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._process_magic_link_serialize( magic=magic, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": None, - "400": None, + '200': None, + '400': None, + '401': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _process_magic_link_serialize( self, magic, @@ -1723,32 +2072,48 @@ def _process_magic_link_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if magic is not None: - _query_params.append(("magic", magic)) - + + _query_params.append(('magic', magic)) + # process the header parameters # process the form parameters # process the body parameter + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # authentication setting - _auth_settings: List[str] = [] + _auth_settings: List[str] = [ + ] return self.api_client.param_serialize( - method="GET", - resource_path="/api/v1/users/processMagicLink", + method='GET', + resource_path='/api/v1/users/processMagicLink', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1758,9 +2123,12 @@ def _process_magic_link_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def request_recovery_email( self, @@ -1769,7 +2137,10 @@ def request_recovery_email( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1803,7 +2174,7 @@ def request_recovery_email( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._request_recovery_email_serialize( email=email, @@ -1811,22 +2182,28 @@ def request_recovery_email( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": None, - "400": None, - "401": None, - "403": None, + '200': None, + '400': None, + '401': "VCellHTTPError", + '403': None, + '404': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def request_recovery_email_with_http_info( self, @@ -1835,7 +2212,10 @@ def request_recovery_email_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1869,7 +2249,7 @@ def request_recovery_email_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._request_recovery_email_serialize( email=email, @@ -1877,22 +2257,28 @@ def request_recovery_email_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": None, - "400": None, - "401": None, - "403": None, + '200': None, + '400': None, + '401': "VCellHTTPError", + '403': None, + '404': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def request_recovery_email_without_preload_content( self, @@ -1901,7 +2287,10 @@ def request_recovery_email_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1935,7 +2324,7 @@ def request_recovery_email_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._request_recovery_email_serialize( email=email, @@ -1943,18 +2332,24 @@ def request_recovery_email_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": None, - "400": None, - "401": None, - "403": None, + '200': None, + '400': None, + '401': "VCellHTTPError", + '403': None, + '404': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _request_recovery_email_serialize( self, email, @@ -1964,35 +2359,53 @@ def _request_recovery_email_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if email is not None: - _query_params.append(("email", email)) - + + _query_params.append(('email', email)) + if user_id is not None: - _query_params.append(("userID", user_id)) - + + _query_params.append(('userID', user_id)) + # process the header parameters # process the form parameters # process the body parameter + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="POST", - resource_path="/api/v1/users/requestRecoveryEmail", + method='POST', + resource_path='/api/v1/users/requestRecoveryEmail', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2002,9 +2415,12 @@ def _request_recovery_email_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + + @validate_call def unmap_user( self, @@ -2012,7 +2428,10 @@ def unmap_user( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2044,28 +2463,33 @@ def unmap_user( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._unmap_user_serialize( user_name=user_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bool", - "401": None, - "403": None, + '200': "bool", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data + @validate_call def unmap_user_with_http_info( self, @@ -2073,7 +2497,10 @@ def unmap_user_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2105,28 +2532,33 @@ def unmap_user_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._unmap_user_serialize( user_name=user_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bool", - "401": None, - "403": None, + '200': "bool", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) + @validate_call def unmap_user_without_preload_content( self, @@ -2134,7 +2566,10 @@ def unmap_user_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2166,24 +2601,29 @@ def unmap_user_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ + """ # noqa: E501 _param = self._unmap_user_serialize( user_name=user_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index, + _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - "200": "bool", - "401": None, - "403": None, + '200': "bool", + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '500': "VCellHTTPError", } - response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) return response_data.response + def _unmap_user_serialize( self, user_name, @@ -2192,35 +2632,47 @@ def _unmap_user_serialize( _headers, _host_index, ) -> RequestSerialized: + _host = None - _collection_formats: Dict[str, str] = {} + _collection_formats: Dict[str, str] = { + } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} _body_params: Optional[bytes] = None # process the path parameters if user_name is not None: - _path_params["userName"] = user_name + _path_params['userName'] = user_name # process the query parameters # process the header parameters # process the form parameters # process the body parameter + # set the HTTP header `Accept` - if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + # authentication setting - _auth_settings: List[str] = ["openId"] + _auth_settings: List[str] = [ + 'openId' + ] return self.api_client.param_serialize( - method="PUT", - resource_path="/api/v1/users/unmapUser/{userName}", + method='PUT', + resource_path='/api/v1/users/unmapUser/{userName}', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2230,5 +2682,7 @@ def _unmap_user_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth, + _request_auth=_request_auth ) + + diff --git a/pyvcell/_internal/api/vcell_client/api/vc_image_resource_api.py b/pyvcell/_internal/api/vcell_client/api/vc_image_resource_api.py new file mode 100644 index 0000000..0fef2ac --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/api/vc_image_resource_api.py @@ -0,0 +1,1418 @@ +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import warnings +from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt +from typing import Any, Dict, List, Optional, Tuple, Union +from typing_extensions import Annotated + +from pydantic import Field, StrictBool, StrictStr +from typing import List, Optional +from typing_extensions import Annotated +from pyvcell._internal.api.vcell_client.models.vc_image_summary import VCImageSummary + +from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized +from pyvcell._internal.api.vcell_client.api_response import ApiResponse +from pyvcell._internal.api.vcell_client.rest import RESTResponseType + + +class VCImageResourceApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + + @validate_call + def delete_image_vcml( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> None: + """delete_image_vcml + + Remove specific image VCML. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_image_vcml_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def delete_image_vcml_with_http_info( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[None]: + """delete_image_vcml + + Remove specific image VCML. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_image_vcml_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def delete_image_vcml_without_preload_content( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """delete_image_vcml + + Remove specific image VCML. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_image_vcml_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '401': "VCellHTTPError", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _delete_image_vcml_serialize( + self, + id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if id is not None: + _path_params['id'] = id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='DELETE', + resource_path='/api/v1/image/{id}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_image_summaries( + self, + include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include Image summaries that are public and shared with the requester. Default is true.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> List[VCImageSummary]: + """get_image_summaries + + Return Image summaries. + + :param include_public_and_shared: Include Image summaries that are public and shared with the requester. Default is true. + :type include_public_and_shared: bool + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_image_summaries_serialize( + include_public_and_shared=include_public_and_shared, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[VCImageSummary]", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def get_image_summaries_with_http_info( + self, + include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include Image summaries that are public and shared with the requester. Default is true.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[List[VCImageSummary]]: + """get_image_summaries + + Return Image summaries. + + :param include_public_and_shared: Include Image summaries that are public and shared with the requester. Default is true. + :type include_public_and_shared: bool + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_image_summaries_serialize( + include_public_and_shared=include_public_and_shared, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[VCImageSummary]", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def get_image_summaries_without_preload_content( + self, + include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include Image summaries that are public and shared with the requester. Default is true.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_image_summaries + + Return Image summaries. + + :param include_public_and_shared: Include Image summaries that are public and shared with the requester. Default is true. + :type include_public_and_shared: bool + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_image_summaries_serialize( + include_public_and_shared=include_public_and_shared, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[VCImageSummary]", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _get_image_summaries_serialize( + self, + include_public_and_shared, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + if include_public_and_shared is not None: + + _query_params.append(('includePublicAndShared', include_public_and_shared)) + + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v1/image/summaries', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_image_summary( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> VCImageSummary: + """get_image_summary + + All of the miscellaneous information about an Image (Extent, ISize, preview, etc...), but not the actual Image itself. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_image_summary_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "VCImageSummary", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def get_image_summary_with_http_info( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[VCImageSummary]: + """get_image_summary + + All of the miscellaneous information about an Image (Extent, ISize, preview, etc...), but not the actual Image itself. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_image_summary_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "VCImageSummary", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def get_image_summary_without_preload_content( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_image_summary + + All of the miscellaneous information about an Image (Extent, ISize, preview, etc...), but not the actual Image itself. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_image_summary_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "VCImageSummary", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _get_image_summary_serialize( + self, + id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if id is not None: + _path_params['id'] = id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v1/image/summary/{id}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_image_vcml( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> str: + """get_image_vcml + + Get specific image VCML. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_image_vcml_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def get_image_vcml_with_http_info( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[str]: + """get_image_vcml + + Get specific image VCML. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_image_vcml_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def get_image_vcml_without_preload_content( + self, + id: StrictStr, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_image_vcml + + Get specific image VCML. + + :param id: (required) + :type id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_image_vcml_serialize( + id=id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '403': "VCellHTTPError", + '404': "VCellHTTPError", + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _get_image_vcml_serialize( + self, + id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if id is not None: + _path_params['id'] = id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'text/plain', + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v1/image/{id}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def save_image_vcml( + self, + body: StrictStr, + name: Annotated[Optional[StrictStr], Field(description="Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> str: + """save_image_vcml + + Save the VCML representation of an image. + + :param body: (required) + :type body: str + :param name: Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML. + :type name: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_image_vcml_serialize( + body=body, + name=name, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '401': "VCellHTTPError", + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ).data + + + @validate_call + def save_image_vcml_with_http_info( + self, + body: StrictStr, + name: Annotated[Optional[StrictStr], Field(description="Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[str]: + """save_image_vcml + + Save the VCML representation of an image. + + :param body: (required) + :type body: str + :param name: Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML. + :type name: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_image_vcml_serialize( + body=body, + name=name, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '401': "VCellHTTPError", + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + response_data.read() + return self.api_client.response_deserialize( + response_data=response_data, + response_types_map=_response_types_map, + ) + + + @validate_call + def save_image_vcml_without_preload_content( + self, + body: StrictStr, + name: Annotated[Optional[StrictStr], Field(description="Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """save_image_vcml + + Save the VCML representation of an image. + + :param body: (required) + :type body: str + :param name: Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML. + :type name: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._save_image_vcml_serialize( + body=body, + name=name, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "str", + '401': "VCellHTTPError", + '422': "VCellHTTPError", + '500': "VCellHTTPError", + } + response_data = self.api_client.call_api( + *_param, + _request_timeout=_request_timeout + ) + return response_data.response + + + def _save_image_vcml_serialize( + self, + body, + name, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[ + str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] + ] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + if name is not None: + + _query_params.append(('name', name)) + + # process the header parameters + # process the form parameters + # process the body parameter + if body is not None: + _body_params = body + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'text/plain', + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/api/v1/image', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + diff --git a/pyvcell/_internal/api/vcell_client/api_client.py b/pyvcell/_internal/api/vcell_client/api_client.py index 9d9fb60..88961a1 100644 --- a/pyvcell/_internal/api/vcell_client/api_client.py +++ b/pyvcell/_internal/api/vcell_client/api_client.py @@ -1,42 +1,48 @@ """ -VCell API + VCell API -VCell API + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" import datetime +from dateutil.parser import parse +from enum import Enum import decimal import json import mimetypes import os import re import tempfile -from enum import Enum -from typing import Dict, List, Optional, Tuple, Union -from urllib.parse import quote +import uuid -from dateutil.parser import parse +from urllib.parse import quote +from typing import Tuple, Optional, List, Dict, Union from pydantic import SecretStr +from pyvcell._internal.api.vcell_client.configuration import Configuration +from pyvcell._internal.api.vcell_client.api_response import ApiResponse, T as ApiResponseT import pyvcell._internal.api.vcell_client.models from pyvcell._internal.api.vcell_client import rest -from pyvcell._internal.api.vcell_client.api_response import ApiResponse -from pyvcell._internal.api.vcell_client.api_response import T as ApiResponseT -from pyvcell._internal.api.vcell_client.configuration import Configuration from pyvcell._internal.api.vcell_client.exceptions import ( - ApiException, ApiValueError, + ApiException, + BadRequestException, + UnauthorizedException, + ForbiddenException, + NotFoundException, + ServiceException ) RequestSerialized = Tuple[str, str, Dict[str, str], Optional[str], List[str]] - class ApiClient: """Generic API client for OpenAPI client library builds. @@ -55,19 +61,25 @@ class ApiClient: PRIMITIVE_TYPES = (float, bool, bytes, str, int) NATIVE_TYPES_MAPPING = { - "int": int, - "long": int, # TODO remove as only py3 is supported? - "float": float, - "str": str, - "bool": bool, - "date": datetime.date, - "datetime": datetime.datetime, - "decimal": decimal.Decimal, - "object": object, + 'int': int, + 'long': int, # TODO remove as only py3 is supported? + 'float': float, + 'str': str, + 'bool': bool, + 'date': datetime.date, + 'datetime': datetime.datetime, + 'decimal': decimal.Decimal, + 'object': object, } _pool = None - def __init__(self, configuration=None, header_name=None, header_value=None, cookie=None) -> None: + def __init__( + self, + configuration=None, + header_name=None, + header_value=None, + cookie=None + ) -> None: # use default configuration if none is provided if configuration is None: configuration = Configuration.get_default() @@ -79,7 +91,7 @@ def __init__(self, configuration=None, header_name=None, header_value=None, cook self.default_headers[header_name] = header_value self.cookie = cookie # Set default User-Agent. - self.user_agent = "OpenAPI-Generator/1.0.0/python" + self.user_agent = 'OpenAPI-Generator/1.0.0/python' self.client_side_validation = configuration.client_side_validation def __enter__(self): @@ -91,15 +103,16 @@ def __exit__(self, exc_type, exc_value, traceback): @property def user_agent(self): """User agent for this API client""" - return self.default_headers["User-Agent"] + return self.default_headers['User-Agent'] @user_agent.setter def user_agent(self, value): - self.default_headers["User-Agent"] = value + self.default_headers['User-Agent'] = value def set_default_header(self, header_name, header_value): self.default_headers[header_name] = header_value + _default = None @classmethod @@ -135,12 +148,12 @@ def param_serialize( header_params=None, body=None, post_params=None, - files=None, - auth_settings=None, + files=None, auth_settings=None, collection_formats=None, _host=None, - _request_auth=None, + _request_auth=None ) -> RequestSerialized: + """Builds the HTTP request params needed by the request. :param method: Method to call. :param resource_path: Path to method endpoint. @@ -169,30 +182,47 @@ def param_serialize( header_params = header_params or {} header_params.update(self.default_headers) if self.cookie: - header_params["Cookie"] = self.cookie + header_params['Cookie'] = self.cookie if header_params: header_params = self.sanitize_for_serialization(header_params) - header_params = dict(self.parameters_to_tuples(header_params, collection_formats)) + header_params = dict( + self.parameters_to_tuples(header_params,collection_formats) + ) # path parameters if path_params: path_params = self.sanitize_for_serialization(path_params) - path_params = self.parameters_to_tuples(path_params, collection_formats) + path_params = self.parameters_to_tuples( + path_params, + collection_formats + ) for k, v in path_params: # specified safe chars, encode everything - resource_path = resource_path.replace("{%s}" % k, quote(str(v), safe=config.safe_chars_for_path_param)) + resource_path = resource_path.replace( + '{%s}' % k, + quote(str(v), safe=config.safe_chars_for_path_param) + ) # post parameters if post_params or files: post_params = post_params if post_params else [] post_params = self.sanitize_for_serialization(post_params) - post_params = self.parameters_to_tuples(post_params, collection_formats) + post_params = self.parameters_to_tuples( + post_params, + collection_formats + ) if files: post_params.extend(self.files_parameters(files)) # auth setting self.update_params_for_auth( - header_params, query_params, auth_settings, resource_path, method, body, request_auth=_request_auth + header_params, + query_params, + auth_settings, + resource_path, + method, + body, + request_auth=_request_auth ) # body @@ -209,13 +239,23 @@ def param_serialize( # query parameters if query_params: query_params = self.sanitize_for_serialization(query_params) - url_query = self.parameters_to_url_query(query_params, collection_formats) + url_query = self.parameters_to_url_query( + query_params, + collection_formats + ) url += "?" + url_query return method, url, header_params, body, post_params + def call_api( - self, method, url, header_params=None, body=None, post_params=None, _request_timeout=None + self, + method, + url, + header_params=None, + body=None, + post_params=None, + _request_timeout=None ) -> rest.RESTResponse: """Makes the HTTP request (synchronous) :param method: Method to call. @@ -232,12 +272,10 @@ def call_api( try: # perform request and return response response_data = self.rest_client.request( - method, - url, + method, url, headers=header_params, - body=body, - post_params=post_params, - _request_timeout=_request_timeout, + body=body, post_params=post_params, + _request_timeout=_request_timeout ) except ApiException as e: @@ -246,7 +284,9 @@ def call_api( return response_data def response_deserialize( - self, response_data: rest.RESTResponse, response_types_map: Optional[Dict[str, ApiResponseT]] = None + self, + response_data: rest.RESTResponse, + response_types_map: Optional[Dict[str, ApiResponseT]]=None ) -> ApiResponse[ApiResponseT]: """Deserializes response into an object. :param response_data: RESTResponse object to be deserialized. @@ -272,7 +312,7 @@ def response_deserialize( return_data = self.__deserialize_file(response_data) elif response_type is not None: match = None - content_type = response_data.getheader("content-type") + content_type = response_data.headers.get('content-type') if content_type is not None: match = re.search(r"charset=([a-zA-Z\-\d]+)[\s;]?", content_type) encoding = match.group(1) if match else "utf-8" @@ -287,10 +327,10 @@ def response_deserialize( ) return ApiResponse( - status_code=response_data.status, - data=return_data, - headers=response_data.getheaders(), - raw_data=response_data.data, + status_code = response_data.status, + data = return_data, + headers = response_data.headers, + raw_data = response_data.data ) def sanitize_for_serialization(self, obj): @@ -317,10 +357,16 @@ def sanitize_for_serialization(self, obj): return obj.get_secret_value() elif isinstance(obj, self.PRIMITIVE_TYPES): return obj + elif isinstance(obj, uuid.UUID): + return str(obj) elif isinstance(obj, list): - return [self.sanitize_for_serialization(sub_obj) for sub_obj in obj] + return [ + self.sanitize_for_serialization(sub_obj) for sub_obj in obj + ] elif isinstance(obj, tuple): - return tuple(self.sanitize_for_serialization(sub_obj) for sub_obj in obj) + return tuple( + self.sanitize_for_serialization(sub_obj) for sub_obj in obj + ) elif isinstance(obj, (datetime.datetime, datetime.date)): return obj.isoformat() elif isinstance(obj, decimal.Decimal): @@ -334,12 +380,19 @@ def sanitize_for_serialization(self, obj): # and attributes which value is not None. # Convert attribute name to json key in # model definition for request. - if hasattr(obj, "to_dict") and callable(obj.to_dict): + if hasattr(obj, 'to_dict') and callable(getattr(obj, 'to_dict')): obj_dict = obj.to_dict() else: obj_dict = obj.__dict__ - return {key: self.sanitize_for_serialization(val) for key, val in obj_dict.items()} + if isinstance(obj_dict, list): + # here we handle instances that can either be a list or something else, and only became a real list by calling to_dict() + return self.sanitize_for_serialization(obj_dict) + + return { + key: self.sanitize_for_serialization(val) + for key, val in obj_dict.items() + } def deserialize(self, response_text: str, response_type: str, content_type: Optional[str]): """Deserializes response into an object. @@ -358,15 +411,18 @@ def deserialize(self, response_text: str, response_type: str, content_type: Opti data = json.loads(response_text) except ValueError: data = response_text - elif re.match(r"^application/(json|[\w!#$&.+-^_]+\+json)\s*(;|$)", content_type, re.IGNORECASE): + elif re.match(r'^application/(json|[\w!#$&.+\-^_]+\+json)\s*(;|$)', content_type, re.IGNORECASE): if response_text == "": data = "" else: data = json.loads(response_text) - elif re.match(r"^text\/[a-z.+-]+\s*(;|$)", content_type, re.IGNORECASE): + elif re.match(r'^text\/[a-z.+-]+\s*(;|$)', content_type, re.IGNORECASE): data = response_text else: - raise ApiException(status=0, reason=f"Unsupported content type: {content_type}") + raise ApiException( + status=0, + reason="Unsupported content type: {0}".format(content_type) + ) return self.__deserialize(data, response_type) @@ -382,17 +438,19 @@ def __deserialize(self, data, klass): return None if isinstance(klass, str): - if klass.startswith("List["): - m = re.match(r"List\[(.*)]", klass) + if klass.startswith('List['): + m = re.match(r'List\[(.*)]', klass) assert m is not None, "Malformed List type definition" sub_kls = m.group(1) - return [self.__deserialize(sub_data, sub_kls) for sub_data in data] + return [self.__deserialize(sub_data, sub_kls) + for sub_data in data] - if klass.startswith("Dict["): - m = re.match(r"Dict\[([^,]*), (.*)]", klass) + if klass.startswith('Dict['): + m = re.match(r'Dict\[([^,]*), (.*)]', klass) assert m is not None, "Malformed Dict type definition" sub_kls = m.group(2) - return {k: self.__deserialize(v, sub_kls) for k, v in data.items()} + return {k: self.__deserialize(v, sub_kls) + for k, v in data.items()} # convert str to class if klass in self.NATIVE_TYPES_MAPPING: @@ -402,13 +460,13 @@ def __deserialize(self, data, klass): if klass in self.PRIMITIVE_TYPES: return self.__deserialize_primitive(data, klass) - elif klass == object: + elif klass is object: return self.__deserialize_object(data) - elif klass == datetime.date: + elif klass is datetime.date: return self.__deserialize_date(data) - elif klass == datetime.datetime: + elif klass is datetime.datetime: return self.__deserialize_datetime(data) - elif klass == decimal.Decimal: + elif klass is decimal.Decimal: return decimal.Decimal(data) elif issubclass(klass, Enum): return self.__deserialize_enum(data, klass) @@ -428,18 +486,19 @@ def parameters_to_tuples(self, params, collection_formats): for k, v in params.items() if isinstance(params, dict) else params: if k in collection_formats: collection_format = collection_formats[k] - if collection_format == "multi": + if collection_format == 'multi': new_params.extend((k, value) for value in v) else: - if collection_format == "ssv": - delimiter = " " - elif collection_format == "tsv": - delimiter = "\t" - elif collection_format == "pipes": - delimiter = "|" + if collection_format == 'ssv': + delimiter = ' ' + elif collection_format == 'tsv': + delimiter = '\t' + elif collection_format == 'pipes': + delimiter = '|' else: # csv is the default - delimiter = "," - new_params.append((k, delimiter.join(str(value) for value in v))) + delimiter = ',' + new_params.append( + (k, delimiter.join(str(value) for value in v))) else: new_params.append((k, v)) return new_params @@ -464,18 +523,20 @@ def parameters_to_url_query(self, params, collection_formats): if k in collection_formats: collection_format = collection_formats[k] - if collection_format == "multi": - new_params.extend((k, str(value)) for value in v) + if collection_format == 'multi': + new_params.extend((k, quote(str(value))) for value in v) else: - if collection_format == "ssv": - delimiter = " " - elif collection_format == "tsv": - delimiter = "\t" - elif collection_format == "pipes": - delimiter = "|" + if collection_format == 'ssv': + delimiter = ' ' + elif collection_format == 'tsv': + delimiter = '\t' + elif collection_format == 'pipes': + delimiter = '|' else: # csv is the default - delimiter = "," - new_params.append((k, delimiter.join(quote(str(value)) for value in v))) + delimiter = ',' + new_params.append( + (k, delimiter.join(quote(str(value)) for value in v)) + ) else: new_params.append((k, quote(str(v)))) @@ -493,7 +554,7 @@ def files_parameters( params = [] for k, v in files.items(): if isinstance(v, str): - with open(v, "rb") as f: + with open(v, 'rb') as f: filename = os.path.basename(f.name) filedata = f.read() elif isinstance(v, bytes): @@ -507,8 +568,13 @@ def files_parameters( continue else: raise ValueError("Unsupported file value") - mimetype = mimetypes.guess_type(filename)[0] or "application/octet-stream" - params.append(tuple([k, tuple([filename, filedata, mimetype])])) + mimetype = ( + mimetypes.guess_type(filename)[0] + or 'application/octet-stream' + ) + params.append( + tuple([k, tuple([filename, filedata, mimetype])]) + ) return params def select_header_accept(self, accepts: List[str]) -> Optional[str]: @@ -521,7 +587,7 @@ def select_header_accept(self, accepts: List[str]) -> Optional[str]: return None for accept in accepts: - if re.search("json", accept, re.IGNORECASE): + if re.search('json', accept, re.IGNORECASE): return accept return accepts[0] @@ -536,13 +602,20 @@ def select_header_content_type(self, content_types): return None for content_type in content_types: - if re.search("json", content_type, re.IGNORECASE): + if re.search('json', content_type, re.IGNORECASE): return content_type return content_types[0] def update_params_for_auth( - self, headers, queries, auth_settings, resource_path, method, body, request_auth=None + self, + headers, + queries, + auth_settings, + resource_path, + method, + body, + request_auth=None ) -> None: """Updates header and query params based on authentication setting. @@ -560,14 +633,36 @@ def update_params_for_auth( return if request_auth: - self._apply_auth_params(headers, queries, resource_path, method, body, request_auth) + self._apply_auth_params( + headers, + queries, + resource_path, + method, + body, + request_auth + ) else: for auth in auth_settings: auth_setting = self.configuration.auth_settings().get(auth) if auth_setting: - self._apply_auth_params(headers, queries, resource_path, method, body, auth_setting) - - def _apply_auth_params(self, headers, queries, resource_path, method, body, auth_setting) -> None: + self._apply_auth_params( + headers, + queries, + resource_path, + method, + body, + auth_setting + ) + + def _apply_auth_params( + self, + headers, + queries, + resource_path, + method, + body, + auth_setting + ) -> None: """Updates the request parameters based on a single auth_setting :param headers: Header parameters dict to be updated. @@ -578,15 +673,17 @@ def _apply_auth_params(self, headers, queries, resource_path, method, body, auth The object type is the return value of sanitize_for_serialization(). :param auth_setting: auth settings for the endpoint """ - if auth_setting["in"] == "cookie": - headers["Cookie"] = auth_setting["value"] - elif auth_setting["in"] == "header": - if auth_setting["type"] != "http-signature": - headers[auth_setting["key"]] = auth_setting["value"] - elif auth_setting["in"] == "query": - queries.append((auth_setting["key"], auth_setting["value"])) + if auth_setting['in'] == 'cookie': + headers['Cookie'] = auth_setting['value'] + elif auth_setting['in'] == 'header': + if auth_setting['type'] != 'http-signature': + headers[auth_setting['key']] = auth_setting['value'] + elif auth_setting['in'] == 'query': + queries.append((auth_setting['key'], auth_setting['value'])) else: - raise ApiValueError("Authentication token must be in `query` or `header`") + raise ApiValueError( + 'Authentication token must be in `query` or `header`' + ) def __deserialize_file(self, response): """Deserializes body to file @@ -604,11 +701,16 @@ def __deserialize_file(self, response): os.close(fd) os.remove(path) - content_disposition = response.getheader("Content-Disposition") + content_disposition = response.headers.get("Content-Disposition") if content_disposition: - m = re.search(r'filename=[\'"]?([^\'"\s]+)[\'"]?', content_disposition) + m = re.search( + r'filename=[\'"]?([^\'"\s]+)[\'"]?', + content_disposition + ) assert m is not None, "Unexpected 'content-disposition' header value" - filename = m.group(1) + filename = os.path.basename(m.group(1)) # Strip any directory traversal + if filename in ("", ".", ".."): # fall back to tmp filename + filename = os.path.basename(path) path = os.path.join(os.path.dirname(path), filename) with open(path, "wb") as f: @@ -649,7 +751,10 @@ def __deserialize_date(self, string): except ImportError: return string except ValueError: - raise rest.ApiException(status=0, reason=f"Failed to parse `{string}` as date object") + raise rest.ApiException( + status=0, + reason="Failed to parse `{0}` as date object".format(string) + ) def __deserialize_datetime(self, string): """Deserializes string to datetime. @@ -664,7 +769,13 @@ def __deserialize_datetime(self, string): except ImportError: return string except ValueError: - raise rest.ApiException(status=0, reason=(f"Failed to parse `{string}` as datetime object")) + raise rest.ApiException( + status=0, + reason=( + "Failed to parse `{0}` as datetime object" + .format(string) + ) + ) def __deserialize_enum(self, data, klass): """Deserializes primitive type to enum. @@ -676,7 +787,13 @@ def __deserialize_enum(self, data, klass): try: return klass(data) except ValueError: - raise rest.ApiException(status=0, reason=(f"Failed to parse `{data}` as `{klass}`")) + raise rest.ApiException( + status=0, + reason=( + "Failed to parse `{0}` as `{1}`" + .format(data, klass) + ) + ) def __deserialize_model(self, data, klass): """Deserializes list or dict to model. diff --git a/pyvcell/_internal/api/vcell_client/api_response.py b/pyvcell/_internal/api/vcell_client/api_response.py index 5c23f00..9bc7c11 100644 --- a/pyvcell/_internal/api/vcell_client/api_response.py +++ b/pyvcell/_internal/api/vcell_client/api_response.py @@ -1,15 +1,11 @@ """API response object.""" from __future__ import annotations - -from collections.abc import Mapping -from typing import Generic, Optional, TypeVar - -from pydantic import BaseModel, Field, StrictBytes, StrictInt +from typing import Optional, Generic, Mapping, TypeVar +from pydantic import Field, StrictInt, StrictBytes, BaseModel T = TypeVar("T") - class ApiResponse(BaseModel, Generic[T]): """ API response object @@ -20,4 +16,6 @@ class ApiResponse(BaseModel, Generic[T]): data: T = Field(description="Deserialized data given the data type") raw_data: StrictBytes = Field(description="Raw data (HTTP response body)") - model_config = {"arbitrary_types_allowed": True} + model_config = { + "arbitrary_types_allowed": True + } diff --git a/pyvcell/_internal/api/vcell_client/configuration.py b/pyvcell/_internal/api/vcell_client/configuration.py index cab1183..0164bed 100644 --- a/pyvcell/_internal/api/vcell_client/configuration.py +++ b/pyvcell/_internal/api/vcell_client/configuration.py @@ -1,37 +1,32 @@ """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import copy import http.client as httplib import logging +from logging import FileHandler import multiprocessing import sys -from logging import FileHandler -from typing import Any, ClassVar, Dict, List, Literal, Optional, TypedDict +from typing import Any, ClassVar, Dict, List, Literal, Optional, TypedDict, Union +from typing_extensions import NotRequired, Self import urllib3 -from typing_extensions import NotRequired, Self + JSON_SCHEMA_VALIDATION_KEYWORDS = { - "multipleOf", - "maximum", - "exclusiveMaximum", - "minimum", - "exclusiveMinimum", - "maxLength", - "minLength", - "pattern", - "maxItems", - "minItems", + 'multipleOf', 'maximum', 'exclusiveMaximum', + 'minimum', 'exclusiveMinimum', 'maxLength', + 'minLength', 'pattern', 'maxItems', 'minItems' } ServerVariablesT = Dict[str, str] @@ -114,8 +109,12 @@ ) -class AuthSettings(TypedDict, total=False): - pass +AuthSettings = TypedDict( + "AuthSettings", + { + }, + total=False, +) class HostSettingVariable(TypedDict): @@ -159,7 +158,11 @@ class Configuration: values before. :param ssl_ca_cert: str - the path to a file of concatenated CA certificates in PEM format. - :param retries: Number of retries for API requests. + :param retries: int | urllib3.util.retry.Retry - Retry configuration. + :param ca_cert_data: verify the peer using concatenated CA certificate data + in PEM (str) or DER (bytes) format. + :param cert_file: the path to a client certificate file, for mTLS. + :param key_file: the path to a client key file, for mTLS. :Example: """ @@ -168,24 +171,28 @@ class Configuration: def __init__( self, - host: Optional[str] = None, - api_key: Optional[Dict[str, str]] = None, - api_key_prefix: Optional[Dict[str, str]] = None, - username: Optional[str] = None, - password: Optional[str] = None, - access_token: Optional[str] = None, - server_index: Optional[int] = None, - server_variables: Optional[ServerVariablesT] = None, - server_operation_index: Optional[Dict[int, int]] = None, - server_operation_variables: Optional[Dict[int, ServerVariablesT]] = None, - ignore_operation_servers: bool = False, - ssl_ca_cert: Optional[str] = None, - retries: Optional[int] = None, + host: Optional[str]=None, + api_key: Optional[Dict[str, str]]=None, + api_key_prefix: Optional[Dict[str, str]]=None, + username: Optional[str]=None, + password: Optional[str]=None, + access_token: Optional[str]=None, + server_index: Optional[int]=None, + server_variables: Optional[ServerVariablesT]=None, + server_operation_index: Optional[Dict[int, int]]=None, + server_operation_variables: Optional[Dict[int, ServerVariablesT]]=None, + ignore_operation_servers: bool=False, + ssl_ca_cert: Optional[str]=None, + retries: Optional[Union[int, Any]] = None, + ca_cert_data: Optional[Union[str, bytes]] = None, + cert_file: Optional[str]=None, + key_file: Optional[str]=None, *, debug: Optional[bool] = None, ) -> None: - """Constructor""" - self._base_path = "https://vcell-dev.cam.uchc.edu" if host is None else host + """Constructor + """ + self._base_path = "https://vcell.cam.uchc.edu" if host is None else host """Default Base url """ self.server_index = 0 if server_index is None and host is None else server_index @@ -230,7 +237,7 @@ def __init__( """ self.logger["package_logger"] = logging.getLogger("pyvcell._internal.api.vcell_client") self.logger["urllib3_logger"] = logging.getLogger("urllib3") - self.logger_format = "%(asctime)s %(levelname)s %(message)s" + self.logger_format = '%(asctime)s %(levelname)s %(message)s' """Log format """ self.logger_stream_handler = None @@ -257,10 +264,14 @@ def __init__( self.ssl_ca_cert = ssl_ca_cert """Set this to customize the certificate file to verify the peer. """ - self.cert_file = None + self.ca_cert_data = ca_cert_data + """Set this to verify the peer using PEM (str) or DER (bytes) + certificate data. + """ + self.cert_file = cert_file """client certificate file """ - self.key_file = None + self.key_file = key_file """client key file """ self.assert_hostname = None @@ -285,11 +296,11 @@ def __init__( self.proxy_headers = None """Proxy headers """ - self.safe_chars_for_path_param = "" + self.safe_chars_for_path_param = '' """Safe chars for path_param """ self.retries = retries - """Adding retries to override urllib3 default value 3 + """Retry configuration """ # Enable client side validation self.client_side_validation = True @@ -306,12 +317,12 @@ def __init__( """date format """ - def __deepcopy__(self, memo: Dict[int, Any]) -> Self: + def __deepcopy__(self, memo: Dict[int, Any]) -> Self: cls = self.__class__ result = cls.__new__(cls) memo[id(self)] = result for k, v in self.__dict__.items(): - if k not in ("logger", "logger_file_handler"): + if k not in ('logger', 'logger_file_handler'): setattr(result, k, copy.deepcopy(v, memo)) # shallow copy of loggers result.logger = copy.copy(self.logger) @@ -443,7 +454,7 @@ def logger_format(self, value: str) -> None: self.__logger_format = value self.logger_formatter = logging.Formatter(self.__logger_format) - def get_api_key_with_prefix(self, identifier: str, alias: Optional[str] = None) -> Optional[str]: + def get_api_key_with_prefix(self, identifier: str, alias: Optional[str]=None) -> Optional[str]: """Gets API key (with prefix if set). :param identifier: The identifier of apiKey. @@ -473,9 +484,12 @@ def get_basic_auth_token(self) -> Optional[str]: password = "" if self.password is not None: password = self.password - return urllib3.util.make_headers(basic_auth=username + ":" + password).get("authorization") - def auth_settings(self) -> AuthSettings: + return urllib3.util.make_headers( + basic_auth=username + ':' + password + ).get('authorization') + + def auth_settings(self)-> AuthSettings: """Gets Auth Settings dict for api client. :return: The Auth Settings information dict. @@ -488,13 +502,12 @@ def to_debug_report(self) -> str: :return: The report for debugging. """ - return ( - "Python SDK Debug Report:\n" - f"OS: {sys.platform}\n" - f"Python Version: {sys.version}\n" - "Version of the API: 1.0.1\n" - "SDK Package Version: 1.0.0" - ) + return "Python SDK Debug Report:\n"\ + "OS: {env}\n"\ + "Python Version: {pyversion}\n"\ + "Version of the API: 1.0.1\n"\ + "SDK Package Version: 1.0.0".\ + format(env=sys.platform, pyversion=sys.version) def get_host_settings(self) -> List[HostSetting]: """Gets an array of host settings @@ -503,16 +516,16 @@ def get_host_settings(self) -> List[HostSetting]: """ return [ { - "url": "https://vcell-dev.cam.uchc.edu", - "description": "No description provided", + 'url': "https://vcell.cam.uchc.edu", + 'description': "No description provided", } ] def get_host_from_settings( self, index: Optional[int], - variables: Optional[ServerVariablesT] = None, - servers: Optional[List[HostSetting]] = None, + variables: Optional[ServerVariablesT]=None, + servers: Optional[List[HostSetting]]=None, ) -> str: """Gets host URL based on the index and variables :param index: array index of the host settings @@ -530,21 +543,24 @@ def get_host_from_settings( server = servers[index] except IndexError: raise ValueError( - f"Invalid index {index} when selecting the host settings. " f"Must be less than {len(servers)}" - ) + "Invalid index {0} when selecting the host settings. " + "Must be less than {1}".format(index, len(servers))) - url = server["url"] + url = server['url'] # go through variables and replace placeholders - for variable_name, variable in server.get("variables", {}).items(): - used_value = variables.get(variable_name, variable["default_value"]) + for variable_name, variable in server.get('variables', {}).items(): + used_value = variables.get( + variable_name, variable['default_value']) - if "enum_values" in variable and used_value not in variable["enum_values"]: + if 'enum_values' in variable \ + and variable['enum_values'] \ + and used_value not in variable['enum_values']: raise ValueError( - "The variable `{0}` in the host URL has invalid value " "{1}. Must be {2}.".format( - variable_name, variables[variable_name], variable["enum_values"] - ) - ) + "The variable `{0}` in the host URL has invalid value " + "{1}. Must be {2}.".format( + variable_name, variables[variable_name], + variable['enum_values'])) url = url.replace("{" + variable_name + "}", used_value) diff --git a/pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md b/pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md index 9e3b6b4..601b1cb 100644 --- a/pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md +++ b/pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md @@ -1,14 +1,15 @@ # AccesTokenRepresentationRecord + ## Properties -| Name | Type | Description | Notes | -| ------------------------- | ------- | ----------- | ---------- | -| **token** | **str** | | [optional] | -| **creation_date_seconds** | **int** | | [optional] | -| **expire_date_seconds** | **int** | | [optional] | -| **user_id** | **str** | | [optional] | -| **user_key** | **str** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**token** | **str** | | [optional] +**creation_date_seconds** | **int** | | [optional] +**expire_date_seconds** | **int** | | [optional] +**user_id** | **str** | | [optional] +**user_key** | **str** | | [optional] ## Example @@ -25,8 +26,8 @@ print(AccesTokenRepresentationRecord.to_json()) # convert the object into a dict acces_token_representation_record_dict = acces_token_representation_record_instance.to_dict() # create an instance of AccesTokenRepresentationRecord from a dict -acces_token_representation_record_from_dict = AccesTokenRepresentationRecord.from_dict( - acces_token_representation_record_dict) +acces_token_representation_record_from_dict = AccesTokenRepresentationRecord.from_dict(acces_token_representation_record_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/AdminResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/AdminResourceApi.md index 586f7b6..778520a 100644 --- a/pyvcell/_internal/api/vcell_client/docs/AdminResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/AdminResourceApi.md @@ -1,28 +1,29 @@ -# pyvcell.\_internal.api.vcell_client.AdminResourceApi +# pyvcell._internal.api.vcell_client.AdminResourceApi -All URIs are relative to *https://vcell-dev.cam.uchc.edu* +All URIs are relative to *https://vcell.cam.uchc.edu* -| Method | HTTP request | Description | -| ---------------------------------------------- | --------------------------- | ----------------- | -| [**get_usage**](AdminResourceApi.md#get_usage) | **GET** /api/v1/admin/usage | Get usage summary | +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get_usage**](AdminResourceApi.md#get_usage) | **GET** /api/v1/admin/usage | Get usage summary -# **get_usage** +# **get_usage** > bytearray get_usage() Get usage summary ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -44,6 +45,8 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling AdminResourceApi->get_usage: %s\n" % e) ``` + + ### Parameters This endpoint does not need any parameter. @@ -58,15 +61,17 @@ This endpoint does not need any parameter. ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/pdf + - **Content-Type**: Not defined + - **Accept**: application/pdf, application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **200** | The PDF report | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | The PDF report | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/pyvcell/_internal/api/vcell_client/docs/AnalyticCurve.md b/pyvcell/_internal/api/vcell_client/docs/AnalyticCurve.md new file mode 100644 index 0000000..d860771 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/AnalyticCurve.md @@ -0,0 +1,37 @@ +# AnalyticCurve + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | | [default to 'AnalyticCurve'] +**exp_x** | **str** | | [optional] +**exp_y** | **str** | | [optional] +**exp_z** | **str** | | [optional] +**offset** | [**Coordinate**](Coordinate.md) | | [optional] +**analytic_offset** | [**Coordinate**](Coordinate.md) | | [optional] +**default_num_samples** | **int** | | [optional] +**segment_count** | **int** | | [optional] +**valid** | **bool** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.analytic_curve import AnalyticCurve + +# TODO update the JSON string below +json = "{}" +# create an instance of AnalyticCurve from a JSON string +analytic_curve_instance = AnalyticCurve.from_json(json) +# print the JSON string representation of the object +print(AnalyticCurve.to_json()) + +# convert the object into a dict +analytic_curve_dict = analytic_curve_instance.to_dict() +# create an instance of AnalyticCurve from a dict +analytic_curve_from_dict = AnalyticCurve.from_dict(analytic_curve_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/AnalyzedResultsFromFieldData.md b/pyvcell/_internal/api/vcell_client/docs/AnalyzedResultsFromFieldData.md deleted file mode 100644 index b238634..0000000 --- a/pyvcell/_internal/api/vcell_client/docs/AnalyzedResultsFromFieldData.md +++ /dev/null @@ -1,35 +0,0 @@ -# AnalyzedResultsFromFieldData - -## Properties - -| Name | Type | Description | Notes | -| ------------------- | ------------------------- | ----------- | ---------- | -| **short_spec_data** | **List[List[List[int]]]** | | [optional] | -| **var_names** | **List[str]** | | [optional] | -| **times** | **List[float]** | | [optional] | -| **origin** | [**Origin**](Origin.md) | | [optional] | -| **extent** | [**Extent**](Extent.md) | | [optional] | -| **isize** | [**ISize**](ISize.md) | | [optional] | -| **annotation** | **str** | | [optional] | -| **name** | **str** | | [optional] | - -## Example - -```python -from pyvcell._internal.api.vcell_client.models.analyzed_results_from_field_data import AnalyzedResultsFromFieldData - -# TODO update the JSON string below -json = "{}" -# create an instance of AnalyzedResultsFromFieldData from a JSON string -analyzed_results_from_field_data_instance = AnalyzedResultsFromFieldData.from_json(json) -# print the JSON string representation of the object -print(AnalyzedResultsFromFieldData.to_json()) - -# convert the object into a dict -analyzed_results_from_field_data_dict = analyzed_results_from_field_data_instance.to_dict() -# create an instance of AnalyzedResultsFromFieldData from a dict -analyzed_results_from_field_data_from_dict = AnalyzedResultsFromFieldData.from_dict( - analyzed_results_from_field_data_dict) -``` - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/AnnotatedFunctionDTO.md b/pyvcell/_internal/api/vcell_client/docs/AnnotatedFunctionDTO.md new file mode 100644 index 0000000..647f645 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/AnnotatedFunctionDTO.md @@ -0,0 +1,34 @@ +# AnnotatedFunctionDTO + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**function_name** | **str** | | [optional] +**function_expression** | **str** | | [optional] +**error** | **str** | | [optional] +**domain** | [**Domain**](Domain.md) | | [optional] +**function_type** | [**VariableType**](VariableType.md) | | [optional] +**category** | [**FunctionCategory**](FunctionCategory.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.annotated_function_dto import AnnotatedFunctionDTO + +# TODO update the JSON string below +json = "{}" +# create an instance of AnnotatedFunctionDTO from a JSON string +annotated_function_dto_instance = AnnotatedFunctionDTO.from_json(json) +# print the JSON string representation of the object +print(AnnotatedFunctionDTO.to_json()) + +# convert the object into a dict +annotated_function_dto_dict = annotated_function_dto_instance.to_dict() +# create an instance of AnnotatedFunctionDTO from a dict +annotated_function_dto_from_dict = AnnotatedFunctionDTO.from_dict(annotated_function_dto_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/ApplicationInfo.md b/pyvcell/_internal/api/vcell_client/docs/ApplicationInfo.md new file mode 100644 index 0000000..2a9cb2f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/ApplicationInfo.md @@ -0,0 +1,32 @@ +# ApplicationInfo + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**type** | [**MathType**](MathType.md) | | [optional] +**dimensions** | **int** | | [optional] +**geometry_name** | **str** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.application_info import ApplicationInfo + +# TODO update the JSON string below +json = "{}" +# create an instance of ApplicationInfo from a JSON string +application_info_instance = ApplicationInfo.from_json(json) +# print the JSON string representation of the object +print(ApplicationInfo.to_json()) + +# convert the object into a dict +application_info_dict = application_info_instance.to_dict() +# create an instance of ApplicationInfo from a dict +application_info_from_dict = ApplicationInfo.from_dict(application_info_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/BatchSystemType.md b/pyvcell/_internal/api/vcell_client/docs/BatchSystemType.md index 813e6db..e2c4aba 100644 --- a/pyvcell/_internal/api/vcell_client/docs/BatchSystemType.md +++ b/pyvcell/_internal/api/vcell_client/docs/BatchSystemType.md @@ -1,11 +1,14 @@ # BatchSystemType + ## Enum -- `PBS` (value: `'PBS'`) +* `PBS` (value: `'PBS'`) -- `SGE` (value: `'SGE'`) +* `SGE` (value: `'SGE'`) -- `SLURM` (value: `'SLURM'`) +* `SLURM` (value: `'SLURM'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/BioModel.md b/pyvcell/_internal/api/vcell_client/docs/BioModel.md index dab9d00..29b11f7 100644 --- a/pyvcell/_internal/api/vcell_client/docs/BioModel.md +++ b/pyvcell/_internal/api/vcell_client/docs/BioModel.md @@ -1,21 +1,22 @@ # BioModel + ## Properties -| Name | Type | Description | Notes | -| ----------------------- | --------------------------------- | ----------- | ---------- | -| **bm_key** | **str** | | [optional] | -| **name** | **str** | | [optional] | -| **privacy** | **int** | | [optional] | -| **group_users** | **List[str]** | | [optional] | -| **saved_date** | **int** | | [optional] | -| **annot** | **str** | | [optional] | -| **branch_id** | **str** | | [optional] | -| **phys_model_key** | **str** | | [optional] | -| **owner_name** | **str** | | [optional] | -| **owner_key** | **str** | | [optional] | -| **simulation_key_list** | [**List[KeyValue]**](KeyValue.md) | | [optional] | -| **applications** | **List[object]** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**bm_key** | **str** | | [optional] +**name** | **str** | | [optional] +**privacy** | **int** | | [optional] +**group_users** | **List[str]** | | [optional] +**saved_date** | **int** | | [optional] +**annot** | **str** | | [optional] +**branch_id** | **str** | | [optional] +**phys_model_key** | **str** | | [optional] +**owner_name** | **str** | | [optional] +**owner_key** | **str** | | [optional] +**simulation_key_list** | **List[str]** | | [optional] +**applications** | **List[object]** | | [optional] ## Example @@ -34,5 +35,6 @@ bio_model_dict = bio_model_instance.to_dict() # create an instance of BioModel from a dict bio_model_from_dict = BioModel.from_dict(bio_model_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/BioModelChildSummary.md b/pyvcell/_internal/api/vcell_client/docs/BioModelChildSummary.md new file mode 100644 index 0000000..f9d2b25 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/BioModelChildSummary.md @@ -0,0 +1,40 @@ +# BioModelChildSummary + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**sc_names** | **List[str]** | | [optional] +**sc_annots** | **List[str]** | | [optional] +**geo_names** | **List[str]** | | [optional] +**geo_dims** | **List[int]** | | [optional] +**app_types** | [**List[MathType]**](MathType.md) | | [optional] +**sim_names** | **List[List[str]]** | | [optional] +**sim_annots** | **List[List[str]]** | | [optional] +**geometry_dimensions** | **List[int]** | | [optional] +**geometry_names** | **List[str]** | | [optional] +**simulation_context_annotations** | **List[str]** | | [optional] +**simulation_context_names** | **List[str]** | | [optional] +**application_info** | [**List[ApplicationInfo]**](ApplicationInfo.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.bio_model_child_summary import BioModelChildSummary + +# TODO update the JSON string below +json = "{}" +# create an instance of BioModelChildSummary from a JSON string +bio_model_child_summary_instance = BioModelChildSummary.from_json(json) +# print the JSON string representation of the object +print(BioModelChildSummary.to_json()) + +# convert the object into a dict +bio_model_child_summary_dict = bio_model_child_summary_instance.to_dict() +# create an instance of BioModelChildSummary from a dict +bio_model_child_summary_from_dict = BioModelChildSummary.from_dict(bio_model_child_summary_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md index cda3770..a1a71c7 100644 --- a/pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md @@ -1,37 +1,42 @@ -# pyvcell.\_internal.api.vcell_client.BioModelResourceApi +# pyvcell._internal.api.vcell_client.BioModelResourceApi -All URIs are relative to *https://vcell-dev.cam.uchc.edu* +All URIs are relative to *https://vcell.cam.uchc.edu* -| Method | HTTP request | Description | -| ------------------------------------------------------------------- | ----------------------------------------- | ----------------------------------------------------------- | -| [**delete_bio_model**](BioModelResourceApi.md#delete_bio_model) | **DELETE** /api/v1/bioModel/{bioModelID} | Delete the BioModel from VCell's database. | -| [**get_biomodel_by_id**](BioModelResourceApi.md#get_biomodel_by_id) | **GET** /api/v1/bioModel/{bioModelID} | Get BioModel information in JSON format by ID. | -| [**upload_bio_model**](BioModelResourceApi.md#upload_bio_model) | **POST** /api/v1/bioModel/upload_bioModel | Upload the BioModel to VCell database. Returns BioModel ID. | +Method | HTTP request | Description +------------- | ------------- | ------------- +[**delete_bio_model**](BioModelResourceApi.md#delete_bio_model) | **DELETE** /api/v1/bioModel/{bioModelID} | Delete the BioModel from VCell's database. +[**get_bio_model**](BioModelResourceApi.md#get_bio_model) | **GET** /api/v1/bioModel/{bioModelID} | Get BioModel. +[**get_bio_model_summaries**](BioModelResourceApi.md#get_bio_model_summaries) | **GET** /api/v1/bioModel/summaries | Return BioModel summaries. +[**get_bio_model_summary**](BioModelResourceApi.md#get_bio_model_summary) | **GET** /api/v1/bioModel/{bioModelID}/summary | All of the text based information about a BioModel (summary, version, publication status, etc...), but not the actual BioModel itself. +[**get_bio_model_vcml**](BioModelResourceApi.md#get_bio_model_vcml) | **GET** /api/v1/bioModel/{bioModelID}/vcml_download | Get the BioModel in VCML format. +[**save_bio_model**](BioModelResourceApi.md#save_bio_model) | **POST** /api/v1/bioModel | Save's the given BioModel. Optional parameters of name and simulations to update due to math changes. Returns saved BioModel as VCML. -# **delete_bio_model** +# **delete_bio_model** > delete_bio_model(bio_model_id) Delete the BioModel from VCell's database. ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) + # Enter a context with an instance of the API client with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.BioModelResourceApi(api_client) - bio_model_id = 'bio_model_id_example' # str | + bio_model_id = 'bio_model_id_example' # str | try: # Delete the BioModel from VCell's database. @@ -40,11 +45,14 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling BioModelResourceApi->delete_bio_model: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ---------------- | ------- | ----------- | ----- | -| **bio_model_id** | **str** | | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **bio_model_id** | **str**| | ### Return type @@ -56,57 +64,64 @@ No authorization required ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: Not defined + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details | Status code | Description | Response headers | -| ----------- | ----------- | ---------------- | -| **204** | No Content | - | +|-------------|-------------|------------------| +**204** | No Content | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_biomodel_by_id** - -> BioModel get_biomodel_by_id(bio_model_id) +# **get_bio_model** +> BioModel get_bio_model(bio_model_id) -Get BioModel information in JSON format by ID. +Get BioModel. ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.bio_model import BioModel from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) + # Enter a context with an instance of the API client with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.BioModelResourceApi(api_client) - bio_model_id = 'bio_model_id_example' # str | + bio_model_id = 'bio_model_id_example' # str | try: - # Get BioModel information in JSON format by ID. - api_response = api_instance.get_biomodel_by_id(bio_model_id) - print("The response of BioModelResourceApi->get_biomodel_by_id:\n") + # Get BioModel. + api_response = api_instance.get_bio_model(bio_model_id) + print("The response of BioModelResourceApi->get_bio_model:\n") pprint(api_response) except Exception as e: - print("Exception when calling BioModelResourceApi->get_biomodel_by_id: %s\n" % e) + print("Exception when calling BioModelResourceApi->get_bio_model: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ---------------- | ------- | ----------- | ----- | -| **bio_model_id** | **str** | | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **bio_model_id** | **str**| | ### Return type @@ -118,35 +133,240 @@ No authorization required ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/json + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | ------------------------------------------ | ---------------- | -| **200** | return BioModel information in JSON format | - | -| **404** | BioModel not found | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**403** | Not Allowed | - | +**404** | Not found | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **upload_bio_model** +# **get_bio_model_summaries** +> List[BioModelSummary] get_bio_model_summaries(include_public_and_shared=include_public_and_shared) + +Return BioModel summaries. + +### Example + -> str upload_bio_model(body=body) +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.models.bio_model_summary import BioModelSummary +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.BioModelResourceApi(api_client) + include_public_and_shared = True # bool | Includes BioModel summaries that are public or shared with requester. Default is true. (optional) + + try: + # Return BioModel summaries. + api_response = api_instance.get_bio_model_summaries(include_public_and_shared=include_public_and_shared) + print("The response of BioModelResourceApi->get_bio_model_summaries:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling BioModelResourceApi->get_bio_model_summaries: %s\n" % e) +``` + + + +### Parameters -Upload the BioModel to VCell database. Returns BioModel ID. + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **include_public_and_shared** | **bool**| Includes BioModel summaries that are public or shared with requester. Default is true. | [optional] + +### Return type + +[**List[BioModelSummary]**](BioModelSummary.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_bio_model_summary** +> BioModelSummary get_bio_model_summary(bio_model_id) + +All of the text based information about a BioModel (summary, version, publication status, etc...), but not the actual BioModel itself. ### Example + ```python import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.models.bio_model_summary import BioModelSummary from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.BioModelResourceApi(api_client) + bio_model_id = 'bio_model_id_example' # str | + + try: + # All of the text based information about a BioModel (summary, version, publication status, etc...), but not the actual BioModel itself. + api_response = api_instance.get_bio_model_summary(bio_model_id) + print("The response of BioModelResourceApi->get_bio_model_summary:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling BioModelResourceApi->get_bio_model_summary: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **bio_model_id** | **str**| | + +### Return type + +[**BioModelSummary**](BioModelSummary.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_bio_model_vcml** +> str get_bio_model_vcml(bio_model_id) + +Get the BioModel in VCML format. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.BioModelResourceApi(api_client) + bio_model_id = 'bio_model_id_example' # str | + + try: + # Get the BioModel in VCML format. + api_response = api_instance.get_bio_model_vcml(bio_model_id) + print("The response of BioModelResourceApi->get_bio_model_vcml:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling BioModelResourceApi->get_bio_model_vcml: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **bio_model_id** | **str**| | + +### Return type + +**str** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: text/xml, application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**403** | Not Allowed | - | +**404** | Not found | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **save_bio_model** +> str save_bio_model(body, new_name=new_name, sims_requiring_updates=sims_requiring_updates) + +Save's the given BioModel. Optional parameters of name and simulations to update due to math changes. Returns saved BioModel as VCML. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -158,22 +378,29 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.BioModelResourceApi(api_client) - body = 'body_example' # str | (optional) + body = 'body_example' # str | BioModelVCML which will be saved. + new_name = 'new_name_example' # str | Name to save new BioModel under. Leave blank if re-saving existing BioModel. (optional) + sims_requiring_updates = ['sims_requiring_updates_example'] # List[str] | The name of simulations that will be prepared for future execution. (optional) try: - # Upload the BioModel to VCell database. Returns BioModel ID. - api_response = api_instance.upload_bio_model(body=body) - print("The response of BioModelResourceApi->upload_bio_model:\n") + # Save's the given BioModel. Optional parameters of name and simulations to update due to math changes. Returns saved BioModel as VCML. + api_response = api_instance.save_bio_model(body, new_name=new_name, sims_requiring_updates=sims_requiring_updates) + print("The response of BioModelResourceApi->save_bio_model:\n") pprint(api_response) except Exception as e: - print("Exception when calling BioModelResourceApi->upload_bio_model: %s\n" % e) + print("Exception when calling BioModelResourceApi->save_bio_model: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| -------- | ------- | ----------- | ---------- | -| **body** | **str** | | [optional] | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **str**| BioModelVCML which will be saved. | + **new_name** | **str**| Name to save new BioModel under. Leave blank if re-saving existing BioModel. | [optional] + **sims_requiring_updates** | [**List[str]**](str.md)| The name of simulations that will be prepared for future execution. | [optional] ### Return type @@ -185,15 +412,18 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### HTTP request headers -- **Content-Type**: text/xml -- **Accept**: text/plain + - **Content-Type**: application/xml + - **Accept**: application/xml, application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **200** | OK | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**422** | Unprocessable content submitted | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/pyvcell/_internal/api/vcell_client/docs/BioModelSummary.md b/pyvcell/_internal/api/vcell_client/docs/BioModelSummary.md new file mode 100644 index 0000000..345efa5 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/BioModelSummary.md @@ -0,0 +1,32 @@ +# BioModelSummary + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**version** | [**Version**](Version.md) | | [optional] +**summary** | [**BioModelChildSummary**](BioModelChildSummary.md) | | [optional] +**publication_information** | [**List[PublicationInfo]**](PublicationInfo.md) | | [optional] +**v_cell_software_version** | [**VCellSoftwareVersion**](VCellSoftwareVersion.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.bio_model_summary import BioModelSummary + +# TODO update the JSON string below +json = "{}" +# create an instance of BioModelSummary from a JSON string +bio_model_summary_instance = BioModelSummary.from_json(json) +# print the JSON string representation of the object +print(BioModelSummary.to_json()) + +# convert the object into a dict +bio_model_summary_dict = bio_model_summary_instance.to_dict() +# create an instance of BioModelSummary from a dict +bio_model_summary_from_dict = BioModelSummary.from_dict(bio_model_summary_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/BiomodelRef.md b/pyvcell/_internal/api/vcell_client/docs/BiomodelRef.md index 2e77f99..4527e93 100644 --- a/pyvcell/_internal/api/vcell_client/docs/BiomodelRef.md +++ b/pyvcell/_internal/api/vcell_client/docs/BiomodelRef.md @@ -1,14 +1,15 @@ # BiomodelRef + ## Properties -| Name | Type | Description | Notes | -| ---------------- | ------- | ----------- | ---------- | -| **bm_key** | **int** | | [optional] | -| **name** | **str** | | [optional] | -| **owner_name** | **str** | | [optional] | -| **owner_key** | **int** | | [optional] | -| **version_flag** | **int** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**bm_key** | **int** | | [optional] +**name** | **str** | | [optional] +**owner_name** | **str** | | [optional] +**owner_key** | **int** | | [optional] +**version_flag** | **int** | | [optional] ## Example @@ -27,5 +28,6 @@ biomodel_ref_dict = biomodel_ref_instance.to_dict() # create an instance of BiomodelRef from a dict biomodel_ref_from_dict = BiomodelRef.from_dict(biomodel_ref_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/CompositeCurve.md b/pyvcell/_internal/api/vcell_client/docs/CompositeCurve.md new file mode 100644 index 0000000..21ac558 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/CompositeCurve.md @@ -0,0 +1,34 @@ +# CompositeCurve + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | | [default to 'CompositeCurve'] +**field_curves** | **List[object]** | | [optional] +**curve_count** | **int** | | [optional] +**default_num_samples** | **int** | | [optional] +**segment_count** | **int** | | [optional] +**valid** | **bool** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.composite_curve import CompositeCurve + +# TODO update the JSON string below +json = "{}" +# create an instance of CompositeCurve from a JSON string +composite_curve_instance = CompositeCurve.from_json(json) +# print the JSON string representation of the object +print(CompositeCurve.to_json()) + +# convert the object into a dict +composite_curve_dict = composite_curve_instance.to_dict() +# create an instance of CompositeCurve from a dict +composite_curve_from_dict = CompositeCurve.from_dict(composite_curve_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/ControlPointCurve.md b/pyvcell/_internal/api/vcell_client/docs/ControlPointCurve.md new file mode 100644 index 0000000..15b7e34 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/ControlPointCurve.md @@ -0,0 +1,36 @@ +# ControlPointCurve + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | | [default to 'ControlPointCurve'] +**control_points** | [**List[Coordinate]**](Coordinate.md) | | [optional] +**control_point_count** | **int** | | [optional] +**control_points_vector** | [**List[Coordinate]**](Coordinate.md) | | [optional] +**max_control_points** | **int** | | [optional] +**min_control_points** | **int** | | [optional] +**control_point_addable** | **bool** | | [optional] +**valid** | **bool** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.control_point_curve import ControlPointCurve + +# TODO update the JSON string below +json = "{}" +# create an instance of ControlPointCurve from a JSON string +control_point_curve_instance = ControlPointCurve.from_json(json) +# print the JSON string representation of the object +print(ControlPointCurve.to_json()) + +# convert the object into a dict +control_point_curve_dict = control_point_curve_instance.to_dict() +# create an instance of ControlPointCurve from a dict +control_point_curve_from_dict = ControlPointCurve.from_dict(control_point_curve_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/Coordinate.md b/pyvcell/_internal/api/vcell_client/docs/Coordinate.md new file mode 100644 index 0000000..a997b6f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/Coordinate.md @@ -0,0 +1,31 @@ +# Coordinate + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**x** | **float** | | [optional] +**y** | **float** | | [optional] +**z** | **float** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.coordinate import Coordinate + +# TODO update the JSON string below +json = "{}" +# create an instance of Coordinate from a JSON string +coordinate_instance = Coordinate.from_json(json) +# print the JSON string representation of the object +print(Coordinate.to_json()) + +# convert the object into a dict +coordinate_dict = coordinate_instance.to_dict() +# create an instance of Coordinate from a dict +coordinate_from_dict = Coordinate.from_dict(coordinate_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/Curve.md b/pyvcell/_internal/api/vcell_client/docs/Curve.md new file mode 100644 index 0000000..6faee15 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/Curve.md @@ -0,0 +1,39 @@ +# Curve + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**b_closed** | **bool** | | [optional] +**description** | **str** | | [optional] +**type** | **str** | | +**beginning_coordinate** | [**Coordinate**](Coordinate.md) | | [optional] +**default_num_samples** | **int** | | [optional] +**ending_coordinate** | [**Coordinate**](Coordinate.md) | | [optional] +**num_sample_points** | **int** | | [optional] +**segment_count** | **int** | | [optional] +**spatial_length** | **float** | | [optional] +**closed** | **bool** | | [optional] +**valid** | **bool** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.curve import Curve + +# TODO update the JSON string below +json = "{}" +# create an instance of Curve from a JSON string +curve_instance = Curve.from_json(json) +# print the JSON string representation of the object +print(Curve.to_json()) + +# convert the object into a dict +curve_dict = curve_instance.to_dict() +# create an instance of Curve from a dict +curve_from_dict = Curve.from_dict(curve_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/CurveSelectionInfo.md b/pyvcell/_internal/api/vcell_client/docs/CurveSelectionInfo.md new file mode 100644 index 0000000..7efc1f6 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/CurveSelectionInfo.md @@ -0,0 +1,38 @@ +# CurveSelectionInfo + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**field_curve** | [**Curve**](Curve.md) | | [optional] +**field_type** | **int** | | [optional] +**field_control_point** | **int** | | [optional] +**field_segment** | **int** | | [optional] +**field_u** | **float** | | [optional] +**field_u_extended** | **float** | | [optional] +**field_control_point_extended** | **int** | | [optional] +**field_segment_extended** | **int** | | [optional] +**field_direction_negative** | **bool** | | [optional] +**crossing** | **bool** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.curve_selection_info import CurveSelectionInfo + +# TODO update the JSON string below +json = "{}" +# create an instance of CurveSelectionInfo from a JSON string +curve_selection_info_instance = CurveSelectionInfo.from_json(json) +# print the JSON string representation of the object +print(CurveSelectionInfo.to_json()) + +# convert the object into a dict +curve_selection_info_dict = curve_selection_info_instance.to_dict() +# create an instance of CurveSelectionInfo from a dict +curve_selection_info_from_dict = CurveSelectionInfo.from_dict(curve_selection_info_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/DataIdentifier.md b/pyvcell/_internal/api/vcell_client/docs/DataIdentifier.md index 6f2b1f8..4d73cbf 100644 --- a/pyvcell/_internal/api/vcell_client/docs/DataIdentifier.md +++ b/pyvcell/_internal/api/vcell_client/docs/DataIdentifier.md @@ -1,16 +1,17 @@ # DataIdentifier + ## Properties -| Name | Type | Description | Notes | -| ----------------- | ----------------------------------- | ----------- | ---------- | -| **name** | **str** | | [optional] | -| **display_name** | **str** | | [optional] | -| **variable_type** | [**VariableType**](VariableType.md) | | [optional] | -| **domain** | [**Domain**](Domain.md) | | [optional] | -| **b_function** | **bool** | | [optional] | -| **function** | **bool** | | [optional] | -| **visible** | **bool** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**display_name** | **str** | | [optional] +**variable_type** | [**VariableType**](VariableType.md) | | [optional] +**domain** | [**Domain**](Domain.md) | | [optional] +**b_function** | **bool** | | [optional] +**function** | **bool** | | [optional] +**visible** | **bool** | | [optional] ## Example @@ -29,5 +30,6 @@ data_identifier_dict = data_identifier_instance.to_dict() # create an instance of DataIdentifier from a dict data_identifier_from_dict = DataIdentifier.from_dict(data_identifier_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/DetailedState.md b/pyvcell/_internal/api/vcell_client/docs/DetailedState.md index e18878d..402f645 100644 --- a/pyvcell/_internal/api/vcell_client/docs/DetailedState.md +++ b/pyvcell/_internal/api/vcell_client/docs/DetailedState.md @@ -1,105 +1,108 @@ # DetailedState + ## Enum -- `UNKNOWN` (value: `'UNKNOWN'`) +* `UNKNOWN` (value: `'UNKNOWN'`) -- `DATAMOVEREVENT_MOVED` (value: `'DATAMOVEREVENT_MOVED'`) +* `DATAMOVEREVENT_MOVED` (value: `'DATAMOVEREVENT_MOVED'`) -- `WORKEREVENT_WORKERALIVE` (value: `'WORKEREVENT_WORKERALIVE'`) +* `WORKEREVENT_WORKERALIVE` (value: `'WORKEREVENT_WORKERALIVE'`) -- `JOB_WAITING` (value: `'JOB_WAITING'`) +* `JOB_WAITING` (value: `'JOB_WAITING'`) -- `JOB_QUEUED` (value: `'JOB_QUEUED'`) +* `JOB_QUEUED` (value: `'JOB_QUEUED'`) -- `JOB_QUEUED_RETRY` (value: `'JOB_QUEUED_RETRY'`) +* `JOB_QUEUED_RETRY` (value: `'JOB_QUEUED_RETRY'`) -- `JOB_DISPATCHED` (value: `'JOB_DISPATCHED'`) +* `JOB_DISPATCHED` (value: `'JOB_DISPATCHED'`) -- `JOB_ACCEPTED` (value: `'JOB_ACCEPTED'`) +* `JOB_ACCEPTED` (value: `'JOB_ACCEPTED'`) -- `SOLVER_READY` (value: `'SOLVER_READY'`) +* `SOLVER_READY` (value: `'SOLVER_READY'`) -- `SOLVER_STARTING_INIT` (value: `'SOLVER_STARTING_INIT'`) +* `SOLVER_STARTING_INIT` (value: `'SOLVER_STARTING_INIT'`) -- `SOLVEREVENT_STARTING_PROC_GEOM` (value: `'SOLVEREVENT_STARTING_PROC_GEOM'`) +* `SOLVEREVENT_STARTING_PROC_GEOM` (value: `'SOLVEREVENT_STARTING_PROC_GEOM'`) -- `SOLVEREVENT_STARTING_RESAMPLE_FD` (value: `'SOLVEREVENT_STARTING_RESAMPLE_FD'`) +* `SOLVEREVENT_STARTING_RESAMPLE_FD` (value: `'SOLVEREVENT_STARTING_RESAMPLE_FD'`) -- `SOLVER_RUNNING_INIT` (value: `'SOLVER_RUNNING_INIT'`) +* `SOLVER_RUNNING_INIT` (value: `'SOLVER_RUNNING_INIT'`) -- `SOLVER_RUNNING_INIT_INPUT_FILE` (value: `'SOLVER_RUNNING_INIT_INPUT_FILE'`) +* `SOLVER_RUNNING_INIT_INPUT_FILE` (value: `'SOLVER_RUNNING_INIT_INPUT_FILE'`) -- `SOLVER_RUNNING_INIT_CODEGEN` (value: `'SOLVER_RUNNING_INIT_CODEGEN'`) +* `SOLVER_RUNNING_INIT_CODEGEN` (value: `'SOLVER_RUNNING_INIT_CODEGEN'`) -- `SOLVER_RUNNING_INIT_COMPILING` (value: `'SOLVER_RUNNING_INIT_COMPILING'`) +* `SOLVER_RUNNING_INIT_COMPILING` (value: `'SOLVER_RUNNING_INIT_COMPILING'`) -- `SOLVER_RUNNING_INIT_COMPILECMD` (value: `'SOLVER_RUNNING_INIT_COMPILECMD'`) +* `SOLVER_RUNNING_INIT_COMPILECMD` (value: `'SOLVER_RUNNING_INIT_COMPILECMD'`) -- `SOLVER_RUNNING_INIT_COMPILE_OK` (value: `'SOLVER_RUNNING_INIT_COMPILE_OK'`) +* `SOLVER_RUNNING_INIT_COMPILE_OK` (value: `'SOLVER_RUNNING_INIT_COMPILE_OK'`) -- `SOLVER_RUNNING_INIT_LINKING` (value: `'SOLVER_RUNNING_INIT_LINKING'`) +* `SOLVER_RUNNING_INIT_LINKING` (value: `'SOLVER_RUNNING_INIT_LINKING'`) -- `SOLVER_RUNNING_INIT_LINKCMD` (value: `'SOLVER_RUNNING_INIT_LINKCMD'`) +* `SOLVER_RUNNING_INIT_LINKCMD` (value: `'SOLVER_RUNNING_INIT_LINKCMD'`) -- `SOLVER_RUNNING_INIT_LINK_OK` (value: `'SOLVER_RUNNING_INIT_LINK_OK'`) +* `SOLVER_RUNNING_INIT_LINK_OK` (value: `'SOLVER_RUNNING_INIT_LINK_OK'`) -- `SOLVER_RUNNING_INIT_COMPILELINK_OK` (value: `'SOLVER_RUNNING_INIT_COMPILELINK_OK'`) +* `SOLVER_RUNNING_INIT_COMPILELINK_OK` (value: `'SOLVER_RUNNING_INIT_COMPILELINK_OK'`) -- `SOLVEREVENT_STARTING_INIT` (value: `'SOLVEREVENT_STARTING_INIT'`) +* `SOLVEREVENT_STARTING_INIT` (value: `'SOLVEREVENT_STARTING_INIT'`) -- `SOLVEREVENT_STARTING_CODEGEN` (value: `'SOLVEREVENT_STARTING_CODEGEN'`) +* `SOLVEREVENT_STARTING_CODEGEN` (value: `'SOLVEREVENT_STARTING_CODEGEN'`) -- `SOLVEREVENT_STARTING_COMPILELINK` (value: `'SOLVEREVENT_STARTING_COMPILELINK'`) +* `SOLVEREVENT_STARTING_COMPILELINK` (value: `'SOLVEREVENT_STARTING_COMPILELINK'`) -- `SOLVEREVENT_STARTING_INPUT_FILE` (value: `'SOLVEREVENT_STARTING_INPUT_FILE'`) +* `SOLVEREVENT_STARTING_INPUT_FILE` (value: `'SOLVEREVENT_STARTING_INPUT_FILE'`) -- `SOLVEREVENT_STARTING` (value: `'SOLVEREVENT_STARTING'`) +* `SOLVEREVENT_STARTING` (value: `'SOLVEREVENT_STARTING'`) -- `SOLVEREVENT_STARTING_SUBMITTING` (value: `'SOLVEREVENT_STARTING_SUBMITTING'`) +* `SOLVEREVENT_STARTING_SUBMITTING` (value: `'SOLVEREVENT_STARTING_SUBMITTING'`) -- `SOLVEREVENT_STARTING_SUBMITTED` (value: `'SOLVEREVENT_STARTING_SUBMITTED'`) +* `SOLVEREVENT_STARTING_SUBMITTED` (value: `'SOLVEREVENT_STARTING_SUBMITTED'`) -- `WORKEREVENT_STARTING` (value: `'WORKEREVENT_STARTING'`) +* `WORKEREVENT_STARTING` (value: `'WORKEREVENT_STARTING'`) -- `SOLVEREVENT_RUNNING_START` (value: `'SOLVEREVENT_RUNNING_START'`) +* `SOLVEREVENT_RUNNING_START` (value: `'SOLVEREVENT_RUNNING_START'`) -- `SOLVER_RUNNING_START` (value: `'SOLVER_RUNNING_START'`) +* `SOLVER_RUNNING_START` (value: `'SOLVER_RUNNING_START'`) -- `JOB_RUNNING_UNKNOWN` (value: `'JOB_RUNNING_UNKNOWN'`) +* `JOB_RUNNING_UNKNOWN` (value: `'JOB_RUNNING_UNKNOWN'`) -- `SOLVEREVENT_PRINTED` (value: `'SOLVEREVENT_PRINTED'`) +* `SOLVEREVENT_PRINTED` (value: `'SOLVEREVENT_PRINTED'`) -- `WORKEREVENT_DATA` (value: `'WORKEREVENT_DATA'`) +* `WORKEREVENT_DATA` (value: `'WORKEREVENT_DATA'`) -- `JOB_RUNNING` (value: `'JOB_RUNNING'`) +* `JOB_RUNNING` (value: `'JOB_RUNNING'`) -- `SOLVEREVENT_PROGRESS` (value: `'SOLVEREVENT_PROGRESS'`) +* `SOLVEREVENT_PROGRESS` (value: `'SOLVEREVENT_PROGRESS'`) -- `WORKEREVENT_PROGRESS` (value: `'WORKEREVENT_PROGRESS'`) +* `WORKEREVENT_PROGRESS` (value: `'WORKEREVENT_PROGRESS'`) -- `WORKEREVENT_WORKEREXIT_NORMAL` (value: `'WORKEREVENT_WORKEREXIT_NORMAL'`) +* `WORKEREVENT_WORKEREXIT_NORMAL` (value: `'WORKEREVENT_WORKEREXIT_NORMAL'`) -- `WORKEREVENT_WORKEREXIT_ERROR` (value: `'WORKEREVENT_WORKEREXIT_ERROR'`) +* `WORKEREVENT_WORKEREXIT_ERROR` (value: `'WORKEREVENT_WORKEREXIT_ERROR'`) -- `SOLVEREVENT_FINISHED` (value: `'SOLVEREVENT_FINISHED'`) +* `SOLVEREVENT_FINISHED` (value: `'SOLVEREVENT_FINISHED'`) -- `SOLVER_FINISHED` (value: `'SOLVER_FINISHED'`) +* `SOLVER_FINISHED` (value: `'SOLVER_FINISHED'`) -- `WORKEREVENT_COMPLETED` (value: `'WORKEREVENT_COMPLETED'`) +* `WORKEREVENT_COMPLETED` (value: `'WORKEREVENT_COMPLETED'`) -- `JOB_COMPLETED` (value: `'JOB_COMPLETED'`) +* `JOB_COMPLETED` (value: `'JOB_COMPLETED'`) -- `SOLVER_STOPPED` (value: `'SOLVER_STOPPED'`) +* `SOLVER_STOPPED` (value: `'SOLVER_STOPPED'`) -- `JOB_STOPPED` (value: `'JOB_STOPPED'`) +* `JOB_STOPPED` (value: `'JOB_STOPPED'`) -- `JOB_FAILED_UNKNOWN` (value: `'JOB_FAILED_UNKNOWN'`) +* `JOB_FAILED_UNKNOWN` (value: `'JOB_FAILED_UNKNOWN'`) -- `SOLVER_ABORTED` (value: `'SOLVER_ABORTED'`) +* `SOLVER_ABORTED` (value: `'SOLVER_ABORTED'`) -- `WORKEREVENT_FAILURE` (value: `'WORKEREVENT_FAILURE'`) +* `WORKEREVENT_FAILURE` (value: `'WORKEREVENT_FAILURE'`) -- `JOB_FAILED` (value: `'JOB_FAILED'`) +* `JOB_FAILED` (value: `'JOB_FAILED'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/Domain.md b/pyvcell/_internal/api/vcell_client/docs/Domain.md index d4350d9..fec73e1 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Domain.md +++ b/pyvcell/_internal/api/vcell_client/docs/Domain.md @@ -1,10 +1,11 @@ # Domain + ## Properties -| Name | Type | Description | Notes | -| -------- | ------- | ----------- | ---------- | -| **name** | **str** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] ## Example @@ -23,5 +24,6 @@ domain_dict = domain_instance.to_dict() # create an instance of Domain from a dict domain_from_dict = Domain.from_dict(domain_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/ExportEvent.md b/pyvcell/_internal/api/vcell_client/docs/ExportEvent.md new file mode 100644 index 0000000..88a2f3a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/ExportEvent.md @@ -0,0 +1,37 @@ +# ExportEvent + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**event_type** | [**ExportProgressType**](ExportProgressType.md) | | [optional] +**progress** | **float** | | [optional] +**format** | **str** | | [optional] +**location** | **str** | | [optional] +**user** | [**User**](User.md) | | [optional] +**job_id** | **int** | | [optional] +**data_key** | **str** | | [optional] +**data_id_string** | **str** | | [optional] +**human_readable_data** | [**HumanReadableExportData**](HumanReadableExportData.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.export_event import ExportEvent + +# TODO update the JSON string below +json = "{}" +# create an instance of ExportEvent from a JSON string +export_event_instance = ExportEvent.from_json(json) +# print the JSON string representation of the object +print(ExportEvent.to_json()) + +# convert the object into a dict +export_event_dict = export_event_instance.to_dict() +# create an instance of ExportEvent from a dict +export_event_from_dict = ExportEvent.from_dict(export_event_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/ExportProgressType.md b/pyvcell/_internal/api/vcell_client/docs/ExportProgressType.md new file mode 100644 index 0000000..5c55511 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/ExportProgressType.md @@ -0,0 +1,18 @@ +# ExportProgressType + + +## Enum + +* `EXPORT_START` (value: `'EXPORT_START'`) + +* `EXPORT_COMPLETE` (value: `'EXPORT_COMPLETE'`) + +* `EXPORT_FAILURE` (value: `'EXPORT_FAILURE'`) + +* `EXPORT_ASSEMBLING` (value: `'EXPORT_ASSEMBLING'`) + +* `EXPORT_PROGRESS` (value: `'EXPORT_PROGRESS'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md new file mode 100644 index 0000000..da4cecc --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md @@ -0,0 +1,156 @@ +# pyvcell._internal.api.vcell_client.ExportResourceApi + +All URIs are relative to *https://vcell.cam.uchc.edu* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**export_n5**](ExportResourceApi.md#export_n5) | **POST** /api/v1/export/N5 | +[**export_status**](ExportResourceApi.md#export_status) | **GET** /api/v1/export/status | + + +# **export_n5** +> int export_n5(n5_export_request=n5_export_request) + +Create an N5 (ImageJ compatible) export. The request must contain the standard export information, exportable data type, dataset name, and sub-volume specifications. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.models.n5_export_request import N5ExportRequest +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.ExportResourceApi(api_client) + n5_export_request = pyvcell._internal.api.vcell_client.N5ExportRequest() # N5ExportRequest | (optional) + + try: + api_response = api_instance.export_n5(n5_export_request=n5_export_request) + print("The response of ExportResourceApi->export_n5:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ExportResourceApi->export_n5: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **n5_export_request** | [**N5ExportRequest**](N5ExportRequest.md)| | [optional] + +### Return type + +**int** + +### Authorization + +[openId](../README.md#openId) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**400** | Bad Request. | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**422** | Unprocessable content submitted | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **export_status** +> List[ExportEvent] export_status(timestamp=timestamp) + +Get the status of your export jobs past the timestamp (Unix epoch in seconds). + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.models.export_event import ExportEvent +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.ExportResourceApi(api_client) + timestamp = 56 # int | (optional) + + try: + api_response = api_instance.export_status(timestamp=timestamp) + print("The response of ExportResourceApi->export_status:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ExportResourceApi->export_status: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **timestamp** | **int**| | [optional] + +### Return type + +[**List[ExportEvent]**](ExportEvent.md) + +### Authorization + +[openId](../README.md#openId) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/pyvcell/_internal/api/vcell_client/docs/ExportableDataType.md b/pyvcell/_internal/api/vcell_client/docs/ExportableDataType.md new file mode 100644 index 0000000..cfe7391 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/ExportableDataType.md @@ -0,0 +1,14 @@ +# ExportableDataType + + +## Enum + +* `ODE_VARIABLE_DATA` (value: `'ODE_VARIABLE_DATA'`) + +* `PDE_VARIABLE_DATA` (value: `'PDE_VARIABLE_DATA'`) + +* `PDE_PARTICLE_DATA` (value: `'PDE_PARTICLE_DATA'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/Extent.md b/pyvcell/_internal/api/vcell_client/docs/Extent.md index ef1937d..2f5241e 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Extent.md +++ b/pyvcell/_internal/api/vcell_client/docs/Extent.md @@ -1,12 +1,13 @@ # Extent + ## Properties -| Name | Type | Description | Notes | -| ----- | --------- | ----------- | ---------- | -| **x** | **float** | | [optional] | -| **y** | **float** | | [optional] | -| **z** | **float** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**x** | **float** | | [optional] +**y** | **float** | | [optional] +**z** | **float** | | [optional] ## Example @@ -25,5 +26,6 @@ extent_dict = extent_instance.to_dict() # create an instance of Extent from a dict extent_from_dict = Extent.from_dict(extent_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md b/pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md index a6ae7ab..bbc92ca 100644 --- a/pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md +++ b/pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md @@ -1,16 +1,17 @@ # ExternalDataIdentifier + ## Properties -| Name | Type | Description | Notes | -| ----------------------- | --------------------------- | ----------- | ---------- | -| **key** | [**KeyValue**](KeyValue.md) | | [optional] | -| **owner** | [**User**](User.md) | | [optional] | -| **name** | **str** | | [optional] | -| **job_index** | **int** | | [optional] | -| **simulation_key** | [**KeyValue**](KeyValue.md) | | [optional] | -| **parameter_scan_type** | **bool** | | [optional] | -| **data_key** | [**KeyValue**](KeyValue.md) | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**key** | **str** | | [optional] +**owner** | [**User**](User.md) | | [optional] +**name** | **str** | | [optional] +**job_index** | **int** | | [optional] +**simulation_key** | **str** | | [optional] +**parameter_scan_type** | **bool** | | [optional] +**data_key** | **str** | | [optional] ## Example @@ -29,5 +30,6 @@ external_data_identifier_dict = external_data_identifier_instance.to_dict() # create an instance of ExternalDataIdentifier from a dict external_data_identifier_from_dict = ExternalDataIdentifier.from_dict(external_data_identifier_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/FieldData.md b/pyvcell/_internal/api/vcell_client/docs/FieldData.md new file mode 100644 index 0000000..e7f5120 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/FieldData.md @@ -0,0 +1,37 @@ +# FieldData + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**short_spec_data** | **List[List[List[int]]]** | | [optional] +**double_spec_data** | **List[List[List[float]]]** | | [optional] +**var_names** | **List[str]** | | [optional] +**times** | **List[float]** | | [optional] +**origin** | [**Origin**](Origin.md) | | [optional] +**extent** | [**Extent**](Extent.md) | | [optional] +**isize** | [**ISize**](ISize.md) | | [optional] +**annotation** | **str** | | [optional] +**name** | **str** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.field_data import FieldData + +# TODO update the JSON string below +json = "{}" +# create an instance of FieldData from a JSON string +field_data_instance = FieldData.from_json(json) +# print the JSON string representation of the object +print(FieldData.to_json()) + +# convert the object into a dict +field_data_dict = field_data_instance.to_dict() +# create an instance of FieldData from a dict +field_data_from_dict = FieldData.from_dict(field_data_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/FieldDataReference.md b/pyvcell/_internal/api/vcell_client/docs/FieldDataReference.md index b59b01d..b9bbbf2 100644 --- a/pyvcell/_internal/api/vcell_client/docs/FieldDataReference.md +++ b/pyvcell/_internal/api/vcell_client/docs/FieldDataReference.md @@ -1,12 +1,13 @@ # FieldDataReference + ## Properties -| Name | Type | Description | Notes | -| ----------------------------- | ------------------------------------------------------- | ----------- | ---------- | -| **external_data_identifier** | [**ExternalDataIdentifier**](ExternalDataIdentifier.md) | | [optional] | -| **external_data_annotation** | **str** | | [optional] | -| **external_data_id_sim_refs** | [**List[KeyValue]**](KeyValue.md) | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**field_data_id** | [**ExternalDataIdentifier**](ExternalDataIdentifier.md) | | [optional] +**annotation** | **str** | | [optional] +**simulations_referencing_this_id** | **List[str]** | | [optional] ## Example @@ -25,5 +26,6 @@ field_data_reference_dict = field_data_reference_instance.to_dict() # create an instance of FieldDataReference from a dict field_data_reference_from_dict = FieldDataReference.from_dict(field_data_reference_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md index 1f21ca5..144d44f 100644 --- a/pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md @@ -1,33 +1,41 @@ -# pyvcell.\_internal.api.vcell_client.FieldDataResourceApi +# pyvcell._internal.api.vcell_client.FieldDataResourceApi -All URIs are relative to *https://vcell-dev.cam.uchc.edu* +All URIs are relative to *https://vcell.cam.uchc.edu* -| Method | HTTP request | Description | -| -------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | -| [**analyze_field_data_file**](FieldDataResourceApi.md#analyze_field_data_file) | **POST** /api/v1/fieldData/analyzeFieldDataFile | Analyze the field data from the uploaded file. Filenames must be lowercase alphanumeric, and can contain underscores. | -| [**create_field_data_from_analyzed_file**](FieldDataResourceApi.md#create_field_data_from_analyzed_file) | **POST** /api/v1/fieldData/createFieldDataFromAnalyzedFile | Take the analyzed results of the field data, modify it to your liking, then save it on the server. | -| [**delete_field_data**](FieldDataResourceApi.md#delete_field_data) | **DELETE** /api/v1/fieldData/delete/{fieldDataID} | Delete the selected field data. | -| [**get_all_field_data_ids**](FieldDataResourceApi.md#get_all_field_data_ids) | **GET** /api/v1/fieldData/IDs | Get all of the ids used to identify, and retrieve field data. | -| [**get_field_data_shape_from_id**](FieldDataResourceApi.md#get_field_data_shape_from_id) | **GET** /api/v1/fieldData/fieldDataShape/{fieldDataID} | Get the shape of the field data. That is it's size, origin, extent, and data identifiers. | +Method | HTTP request | Description +------------- | ------------- | ------------- +[**advanced_create**](FieldDataResourceApi.md#advanced_create) | **POST** /api/v1/fieldData/advancedCreate | Create Field Data with granular detail in one request.The following files are accepted: .tif and .zip. +[**analyze_file**](FieldDataResourceApi.md#analyze_file) | **POST** /api/v1/fieldData/analyzeFile | Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and return field data. Color mapped images not supported (the colors in those images will be interpreted as separate channels). Filenames must be lowercase alphanumeric, and can contain underscores. +[**copy_models_field_data**](FieldDataResourceApi.md#copy_models_field_data) | **POST** /api/v1/fieldData/copyModelsFieldData | Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. +[**create_from_file**](FieldDataResourceApi.md#create_from_file) | **POST** /api/v1/fieldData/createFromFile | Submit a .zip or .tif file that converts into field data, with all defaults derived from the file submitted. +[**create_from_simulation**](FieldDataResourceApi.md#create_from_simulation) | **POST** /api/v1/fieldData/createFromSimulation | Create new field data from existing simulation results. +[**delete**](FieldDataResourceApi.md#delete) | **DELETE** /api/v1/fieldData/delete/{fieldDataID} | Delete the selected field data. +[**get_all_ids**](FieldDataResourceApi.md#get_all_ids) | **GET** /api/v1/fieldData/IDs | Get all of the ids used to identify, and retrieve field data. +[**get_shape_from_id**](FieldDataResourceApi.md#get_shape_from_id) | **GET** /api/v1/fieldData/shape/{fieldDataID} | Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. +[**save**](FieldDataResourceApi.md#save) | **POST** /api/v1/fieldData/save | Take the generated field data, and save it to the server. User may adjust the analyzed file before uploading to edit defaults. -# **analyze_field_data_file** -> AnalyzedResultsFromFieldData analyze_field_data_file(file=file, file_name=file_name) +# **advanced_create** +> FieldDataSavedResults advanced_create(file=file, file_name=file_name, extent=extent, i_size=i_size, channel_names=channel_names, times=times, annotation=annotation, origin=origin) -Analyze the field data from the uploaded file. Filenames must be lowercase alphanumeric, and can contain underscores. +Create Field Data with granular detail in one request.The following files are accepted: .tif and .zip. ### Example + ```python import pyvcell._internal.api.vcell_client -from pyvcell._internal.api.vcell_client.models.analyzed_results_from_field_data import AnalyzedResultsFromFieldData +from pyvcell._internal.api.vcell_client.models.extent import Extent +from pyvcell._internal.api.vcell_client.models.field_data_saved_results import FieldDataSavedResults +from pyvcell._internal.api.vcell_client.models.i_size import ISize +from pyvcell._internal.api.vcell_client.models.origin import Origin from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -39,28 +47,43 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.FieldDataResourceApi(api_client) - file = None # bytearray | (optional) - file_name = 'file_name_example' # str | (optional) + file = None # bytearray | (optional) + file_name = 'file_name_example' # str | (optional) + extent = pyvcell._internal.api.vcell_client.Extent() # Extent | (optional) + i_size = pyvcell._internal.api.vcell_client.ISize() # ISize | (optional) + channel_names = ['channel_names_example'] # List[str] | (optional) + times = [3.4] # List[float] | (optional) + annotation = 'annotation_example' # str | (optional) + origin = pyvcell._internal.api.vcell_client.Origin() # Origin | (optional) try: - # Analyze the field data from the uploaded file. Filenames must be lowercase alphanumeric, and can contain underscores. - api_response = api_instance.analyze_field_data_file(file=file, file_name=file_name) - print("The response of FieldDataResourceApi->analyze_field_data_file:\n") + # Create Field Data with granular detail in one request.The following files are accepted: .tif and .zip. + api_response = api_instance.advanced_create(file=file, file_name=file_name, extent=extent, i_size=i_size, channel_names=channel_names, times=times, annotation=annotation, origin=origin) + print("The response of FieldDataResourceApi->advanced_create:\n") pprint(api_response) except Exception as e: - print("Exception when calling FieldDataResourceApi->analyze_field_data_file: %s\n" % e) + print("Exception when calling FieldDataResourceApi->advanced_create: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ------------- | ------------- | ----------- | ---------- | -| **file** | **bytearray** | | [optional] | -| **file_name** | **str** | | [optional] | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **file** | **bytearray**| | [optional] + **file_name** | **str**| | [optional] + **extent** | [**Extent**](Extent.md)| | [optional] + **i_size** | [**ISize**](ISize.md)| | [optional] + **channel_names** | [**List[str]**](str.md)| | [optional] + **times** | [**List[float]**](float.md)| | [optional] + **annotation** | **str**| | [optional] + **origin** | [**Origin**](Origin.md)| | [optional] ### Return type -[**AnalyzedResultsFromFieldData**](AnalyzedResultsFromFieldData.md) +[**FieldDataSavedResults**](FieldDataSavedResults.md) ### Authorization @@ -68,38 +91,190 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### HTTP request headers -- **Content-Type**: multipart/form-data -- **Accept**: application/json + - **Content-Type**: multipart/form-data + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **200** | OK | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**422** | Unprocessable content submitted | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **create_field_data_from_analyzed_file** +# **analyze_file** +> FieldData analyze_file(file=file, file_name=file_name) + +Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and return field data. Color mapped images not supported (the colors in those images will be interpreted as separate channels). Filenames must be lowercase alphanumeric, and can contain underscores. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.models.field_data import FieldData +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.FieldDataResourceApi(api_client) + file = None # bytearray | (optional) + file_name = 'file_name_example' # str | (optional) + + try: + # Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and return field data. Color mapped images not supported (the colors in those images will be interpreted as separate channels). Filenames must be lowercase alphanumeric, and can contain underscores. + api_response = api_instance.analyze_file(file=file, file_name=file_name) + print("The response of FieldDataResourceApi->analyze_file:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling FieldDataResourceApi->analyze_file: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **file** | **bytearray**| | [optional] + **file_name** | **str**| | [optional] + +### Return type + +[**FieldData**](FieldData.md) + +### Authorization + +[openId](../README.md#openId) + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**422** | Unprocessable content submitted | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **copy_models_field_data** +> Dict[str, ExternalDataIdentifier] copy_models_field_data(source_model=source_model) + +Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. -> FieldDataSaveResults create_field_data_from_analyzed_file(analyzed_results_from_field_data=analyzed_results_from_field_data) +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.models.external_data_identifier import ExternalDataIdentifier +from pyvcell._internal.api.vcell_client.models.source_model import SourceModel +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.FieldDataResourceApi(api_client) + source_model = pyvcell._internal.api.vcell_client.SourceModel() # SourceModel | (optional) -Take the analyzed results of the field data, modify it to your liking, then save it on the server. + try: + # Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. + api_response = api_instance.copy_models_field_data(source_model=source_model) + print("The response of FieldDataResourceApi->copy_models_field_data:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling FieldDataResourceApi->copy_models_field_data: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **source_model** | [**SourceModel**](SourceModel.md)| | [optional] + +### Return type + +[**Dict[str, ExternalDataIdentifier]**](ExternalDataIdentifier.md) + +### Authorization + +[openId](../README.md#openId) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**422** | Unprocessable content submitted | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_from_file** +> FieldDataSavedResults create_from_file(file=file, field_data_name=field_data_name) + +Submit a .zip or .tif file that converts into field data, with all defaults derived from the file submitted. ### Example + ```python import pyvcell._internal.api.vcell_client -from pyvcell._internal.api.vcell_client.models.analyzed_results_from_field_data import AnalyzedResultsFromFieldData -from pyvcell._internal.api.vcell_client.models.field_data_save_results import FieldDataSaveResults +from pyvcell._internal.api.vcell_client.models.field_data_saved_results import FieldDataSavedResults from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -111,27 +286,31 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.FieldDataResourceApi(api_client) - analyzed_results_from_field_data = pyvcell._internal.api.vcell_client.AnalyzedResultsFromFieldData() # AnalyzedResultsFromFieldData | (optional) + file = None # bytearray | (optional) + field_data_name = 'field_data_name_example' # str | (optional) try: - # Take the analyzed results of the field data, modify it to your liking, then save it on the server. - api_response = api_instance.create_field_data_from_analyzed_file( - analyzed_results_from_field_data=analyzed_results_from_field_data) - print("The response of FieldDataResourceApi->create_field_data_from_analyzed_file:\n") + # Submit a .zip or .tif file that converts into field data, with all defaults derived from the file submitted. + api_response = api_instance.create_from_file(file=file, field_data_name=field_data_name) + print("The response of FieldDataResourceApi->create_from_file:\n") pprint(api_response) except Exception as e: - print("Exception when calling FieldDataResourceApi->create_field_data_from_analyzed_file: %s\n" % e) + print("Exception when calling FieldDataResourceApi->create_from_file: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ------------------------------------ | ------------------------------------------------------------------- | ----------- | ---------- | -| **analyzed_results_from_field_data** | [**AnalyzedResultsFromFieldData**](AnalyzedResultsFromFieldData.md) | | [optional] | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **file** | **bytearray**| | [optional] + **field_data_name** | **str**| | [optional] ### Return type -[**FieldDataSaveResults**](FieldDataSaveResults.md) +[**FieldDataSavedResults**](FieldDataSavedResults.md) ### Authorization @@ -139,36 +318,112 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### HTTP request headers -- **Content-Type**: application/json -- **Accept**: application/json + - **Content-Type**: multipart/form-data + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **200** | OK | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**422** | Unprocessable content submitted | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **delete_field_data** +# **create_from_simulation** +> create_from_simulation(sim_key_reference=sim_key_reference, job_index=job_index, new_field_data_name=new_field_data_name) + +Create new field data from existing simulation results. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.FieldDataResourceApi(api_client) + sim_key_reference = 'sim_key_reference_example' # str | (optional) + job_index = 56 # int | (optional) + new_field_data_name = 'new_field_data_name_example' # str | (optional) + + try: + # Create new field data from existing simulation results. + api_instance.create_from_simulation(sim_key_reference=sim_key_reference, job_index=job_index, new_field_data_name=new_field_data_name) + except Exception as e: + print("Exception when calling FieldDataResourceApi->create_from_simulation: %s\n" % e) +``` + + + +### Parameters -> delete_field_data(field_data_id) + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **sim_key_reference** | **str**| | [optional] + **job_index** | **int**| | [optional] + **new_field_data_name** | **str**| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[openId](../README.md#openId) + +### HTTP request headers + + - **Content-Type**: application/x-www-form-urlencoded + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | Created | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete** +> delete(field_data_id) Delete the selected field data. ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -180,20 +435,23 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.FieldDataResourceApi(api_client) - field_data_id = 'field_data_id_example' # str | + field_data_id = 'field_data_id_example' # str | try: # Delete the selected field data. - api_instance.delete_field_data(field_data_id) + api_instance.delete(field_data_id) except Exception as e: - print("Exception when calling FieldDataResourceApi->delete_field_data: %s\n" % e) + print("Exception when calling FieldDataResourceApi->delete: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ----------------- | ------- | ----------- | ----- | -| **field_data_id** | **str** | | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **field_data_id** | **str**| | ### Return type @@ -205,37 +463,38 @@ void (empty response body) ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: Not defined + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **204** | No Content | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | No Content | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_all_field_data_ids** - -> List[FieldDataReference] get_all_field_data_ids() +# **get_all_ids** +> List[FieldDataReference] get_all_ids() Get all of the ids used to identify, and retrieve field data. ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.field_data_reference import FieldDataReference from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -250,13 +509,15 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: try: # Get all of the ids used to identify, and retrieve field data. - api_response = api_instance.get_all_field_data_ids() - print("The response of FieldDataResourceApi->get_all_field_data_ids:\n") + api_response = api_instance.get_all_ids() + print("The response of FieldDataResourceApi->get_all_ids:\n") pprint(api_response) except Exception as e: - print("Exception when calling FieldDataResourceApi->get_all_field_data_ids: %s\n" % e) + print("Exception when calling FieldDataResourceApi->get_all_ids: %s\n" % e) ``` + + ### Parameters This endpoint does not need any parameter. @@ -271,37 +532,38 @@ This endpoint does not need any parameter. ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/json + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **200** | OK | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_field_data_shape_from_id** - -> FieldDataShape get_field_data_shape_from_id(field_data_id) +# **get_shape_from_id** +> FieldDataShape get_shape_from_id(field_data_id) -Get the shape of the field data. That is it's size, origin, extent, and data identifiers. +Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.field_data_shape import FieldDataShape from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -313,22 +575,25 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.FieldDataResourceApi(api_client) - field_data_id = 'field_data_id_example' # str | + field_data_id = 'field_data_id_example' # str | try: - # Get the shape of the field data. That is it's size, origin, extent, and data identifiers. - api_response = api_instance.get_field_data_shape_from_id(field_data_id) - print("The response of FieldDataResourceApi->get_field_data_shape_from_id:\n") + # Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. + api_response = api_instance.get_shape_from_id(field_data_id) + print("The response of FieldDataResourceApi->get_shape_from_id:\n") pprint(api_response) except Exception as e: - print("Exception when calling FieldDataResourceApi->get_field_data_shape_from_id: %s\n" % e) + print("Exception when calling FieldDataResourceApi->get_shape_from_id: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ----------------- | ------- | ----------- | ----- | -| **field_data_id** | **str** | | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **field_data_id** | **str**| | ### Return type @@ -340,15 +605,93 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/json + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **200** | OK | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**404** | Not found | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **save** +> FieldDataSavedResults save(field_data=field_data) + +Take the generated field data, and save it to the server. User may adjust the analyzed file before uploading to edit defaults. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.models.field_data import FieldData +from pyvcell._internal.api.vcell_client.models.field_data_saved_results import FieldDataSavedResults +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.FieldDataResourceApi(api_client) + field_data = pyvcell._internal.api.vcell_client.FieldData() # FieldData | (optional) + + try: + # Take the generated field data, and save it to the server. User may adjust the analyzed file before uploading to edit defaults. + api_response = api_instance.save(field_data=field_data) + print("The response of FieldDataResourceApi->save:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling FieldDataResourceApi->save: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **field_data** | [**FieldData**](FieldData.md)| | [optional] + +### Return type + +[**FieldDataSavedResults**](FieldDataSavedResults.md) + +### Authorization + +[openId](../README.md#openId) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**422** | Unprocessable content submitted | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/pyvcell/_internal/api/vcell_client/docs/FieldDataSaveResults.md b/pyvcell/_internal/api/vcell_client/docs/FieldDataSaveResults.md deleted file mode 100644 index 307f92e..0000000 --- a/pyvcell/_internal/api/vcell_client/docs/FieldDataSaveResults.md +++ /dev/null @@ -1,28 +0,0 @@ -# FieldDataSaveResults - -## Properties - -| Name | Type | Description | Notes | -| ------------------- | ------- | ----------- | ---------- | -| **field_data_name** | **str** | | [optional] | -| **field_data_id** | **str** | | [optional] | - -## Example - -```python -from pyvcell._internal.api.vcell_client.models.field_data_save_results import FieldDataSaveResults - -# TODO update the JSON string below -json = "{}" -# create an instance of FieldDataSaveResults from a JSON string -field_data_save_results_instance = FieldDataSaveResults.from_json(json) -# print the JSON string representation of the object -print(FieldDataSaveResults.to_json()) - -# convert the object into a dict -field_data_save_results_dict = field_data_save_results_instance.to_dict() -# create an instance of FieldDataSaveResults from a dict -field_data_save_results_from_dict = FieldDataSaveResults.from_dict(field_data_save_results_dict) -``` - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/FieldDataSavedResults.md b/pyvcell/_internal/api/vcell_client/docs/FieldDataSavedResults.md new file mode 100644 index 0000000..315dda2 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/FieldDataSavedResults.md @@ -0,0 +1,30 @@ +# FieldDataSavedResults + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**field_data_name** | **str** | | [optional] +**field_data_key** | **str** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.field_data_saved_results import FieldDataSavedResults + +# TODO update the JSON string below +json = "{}" +# create an instance of FieldDataSavedResults from a JSON string +field_data_saved_results_instance = FieldDataSavedResults.from_json(json) +# print the JSON string representation of the object +print(FieldDataSavedResults.to_json()) + +# convert the object into a dict +field_data_saved_results_dict = field_data_saved_results_instance.to_dict() +# create an instance of FieldDataSavedResults from a dict +field_data_saved_results_from_dict = FieldDataSavedResults.from_dict(field_data_saved_results_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/FieldDataShape.md b/pyvcell/_internal/api/vcell_client/docs/FieldDataShape.md index b8a2009..d227d17 100644 --- a/pyvcell/_internal/api/vcell_client/docs/FieldDataShape.md +++ b/pyvcell/_internal/api/vcell_client/docs/FieldDataShape.md @@ -1,14 +1,15 @@ # FieldDataShape + ## Properties -| Name | Type | Description | Notes | -| ------------------- | --------------------------------------------- | ----------- | ---------- | -| **extent** | [**Extent**](Extent.md) | | [optional] | -| **origin** | [**Origin**](Origin.md) | | [optional] | -| **isize** | [**ISize**](ISize.md) | | [optional] | -| **data_identifier** | [**List[DataIdentifier]**](DataIdentifier.md) | | [optional] | -| **times** | **List[float]** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**extent** | [**Extent**](Extent.md) | | [optional] +**origin** | [**Origin**](Origin.md) | | [optional] +**isize** | [**ISize**](ISize.md) | | [optional] +**data_identifier** | [**List[DataIdentifier]**](DataIdentifier.md) | | [optional] +**times** | **List[float]** | | [optional] ## Example @@ -27,5 +28,6 @@ field_data_shape_dict = field_data_shape_instance.to_dict() # create an instance of FieldDataShape from a dict field_data_shape_from_dict = FieldDataShape.from_dict(field_data_shape_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/FunctionCategory.md b/pyvcell/_internal/api/vcell_client/docs/FunctionCategory.md new file mode 100644 index 0000000..726aa62 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/FunctionCategory.md @@ -0,0 +1,16 @@ +# FunctionCategory + + +## Enum + +* `PREDEFINED` (value: `'PREDEFINED'`) + +* `OLDUSERDEFINED` (value: `'OLDUSERDEFINED'`) + +* `OUTPUTFUNCTION` (value: `'OUTPUTFUNCTION'`) + +* `POSTPROCESSFUNCTION` (value: `'POSTPROCESSFUNCTION'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/GIFImage.md b/pyvcell/_internal/api/vcell_client/docs/GIFImage.md new file mode 100644 index 0000000..72053cc --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GIFImage.md @@ -0,0 +1,30 @@ +# GIFImage + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**gif_encoded_data** | **bytearray** | | [optional] +**size** | [**ISize**](ISize.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.gif_image import GIFImage + +# TODO update the JSON string below +json = "{}" +# create an instance of GIFImage from a JSON string +gif_image_instance = GIFImage.from_json(json) +# print the JSON string representation of the object +print(GIFImage.to_json()) + +# convert the object into a dict +gif_image_dict = gif_image_instance.to_dict() +# create an instance of GIFImage from a dict +gif_image_from_dict = GIFImage.from_dict(gif_image_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/GeometryMode.md b/pyvcell/_internal/api/vcell_client/docs/GeometryMode.md new file mode 100644 index 0000000..69212ce --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GeometryMode.md @@ -0,0 +1,14 @@ +# GeometryMode + + +## Enum + +* `GEOMETRY_SELECTIONS` (value: `'GEOMETRY_SELECTIONS'`) + +* `GEOMETRY_SLICE` (value: `'GEOMETRY_SLICE'`) + +* `GEOMETRY_FULL` (value: `'GEOMETRY_FULL'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md new file mode 100644 index 0000000..84022a3 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md @@ -0,0 +1,354 @@ +# pyvcell._internal.api.vcell_client.GeometryResourceApi + +All URIs are relative to *https://vcell.cam.uchc.edu* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**delete_geometry**](GeometryResourceApi.md#delete_geometry) | **DELETE** /api/v1/geometry/{id} | +[**get_geometry_summaries**](GeometryResourceApi.md#get_geometry_summaries) | **GET** /api/v1/geometry/summaries | +[**get_geometry_summary**](GeometryResourceApi.md#get_geometry_summary) | **GET** /api/v1/geometry/summary/{id} | +[**get_geometry_vcml**](GeometryResourceApi.md#get_geometry_vcml) | **GET** /api/v1/geometry/{id} | +[**save_geometry**](GeometryResourceApi.md#save_geometry) | **POST** /api/v1/geometry | + + +# **delete_geometry** +> delete_geometry(id) + +Remove specific Geometry. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.GeometryResourceApi(api_client) + id = 'id_example' # str | + + try: + api_instance.delete_geometry(id) + except Exception as e: + print("Exception when calling GeometryResourceApi->delete_geometry: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | No Content | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**404** | Not found | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_geometry_summaries** +> List[GeometrySummary] get_geometry_summaries(include_public_and_shared=include_public_and_shared) + +Return Geometry summaries. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.models.geometry_summary import GeometrySummary +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.GeometryResourceApi(api_client) + include_public_and_shared = True # bool | Include Geometry summaries that are public and shared with the requester. Default is true. (optional) + + try: + api_response = api_instance.get_geometry_summaries(include_public_and_shared=include_public_and_shared) + print("The response of GeometryResourceApi->get_geometry_summaries:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling GeometryResourceApi->get_geometry_summaries: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **include_public_and_shared** | **bool**| Include Geometry summaries that are public and shared with the requester. Default is true. | [optional] + +### Return type + +[**List[GeometrySummary]**](GeometrySummary.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_geometry_summary** +> GeometrySummary get_geometry_summary(id) + +All of the text based information about a Geometry (dimensions, extent, origin, etc...), but not the actual Geometry itself. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.models.geometry_summary import GeometrySummary +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.GeometryResourceApi(api_client) + id = 'id_example' # str | + + try: + api_response = api_instance.get_geometry_summary(id) + print("The response of GeometryResourceApi->get_geometry_summary:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling GeometryResourceApi->get_geometry_summary: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +[**GeometrySummary**](GeometrySummary.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**403** | Not Allowed | - | +**404** | Not found | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_geometry_vcml** +> str get_geometry_vcml(id) + +Returns as root element in VCML format. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.GeometryResourceApi(api_client) + id = 'id_example' # str | + + try: + api_response = api_instance.get_geometry_vcml(id) + print("The response of GeometryResourceApi->get_geometry_vcml:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling GeometryResourceApi->get_geometry_vcml: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +**str** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**403** | Not Allowed | - | +**404** | Not found | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **save_geometry** +> str save_geometry(body, new_name=new_name) + +Save's VCML with as the root element. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.GeometryResourceApi(api_client) + body = 'body_example' # str | + new_name = 'new_name_example' # str | Name to save new Geometry under. Leave blank if re-saving existing Geometry. (optional) + + try: + api_response = api_instance.save_geometry(body, new_name=new_name) + print("The response of GeometryResourceApi->save_geometry:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling GeometryResourceApi->save_geometry: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **str**| | + **new_name** | **str**| Name to save new Geometry under. Leave blank if re-saving existing Geometry. | [optional] + +### Return type + +**str** + +### Authorization + +[openId](../README.md#openId) + +### HTTP request headers + + - **Content-Type**: application/xml + - **Accept**: application/xml, application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**422** | Unprocessable content submitted | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/pyvcell/_internal/api/vcell_client/docs/GeometrySpecDTO.md b/pyvcell/_internal/api/vcell_client/docs/GeometrySpecDTO.md new file mode 100644 index 0000000..ca62721 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GeometrySpecDTO.md @@ -0,0 +1,32 @@ +# GeometrySpecDTO + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**selections** | [**List[SpatialSelection]**](SpatialSelection.md) | | [optional] +**axis** | **int** | | [optional] +**slice_number** | **int** | | [optional] +**geometry_mode** | [**GeometryMode**](GeometryMode.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.geometry_spec_dto import GeometrySpecDTO + +# TODO update the JSON string below +json = "{}" +# create an instance of GeometrySpecDTO from a JSON string +geometry_spec_dto_instance = GeometrySpecDTO.from_json(json) +# print the JSON string representation of the object +print(GeometrySpecDTO.to_json()) + +# convert the object into a dict +geometry_spec_dto_dict = geometry_spec_dto_instance.to_dict() +# create an instance of GeometrySpecDTO from a dict +geometry_spec_dto_from_dict = GeometrySpecDTO.from_dict(geometry_spec_dto_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/GeometrySummary.md b/pyvcell/_internal/api/vcell_client/docs/GeometrySummary.md new file mode 100644 index 0000000..d183755 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GeometrySummary.md @@ -0,0 +1,34 @@ +# GeometrySummary + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**dimension** | **int** | | [optional] +**origin** | [**Origin**](Origin.md) | | [optional] +**extent** | [**Extent**](Extent.md) | | [optional] +**image_ref** | **str** | | [optional] +**version** | [**Version**](Version.md) | | [optional] +**software_version** | [**VCellSoftwareVersion**](VCellSoftwareVersion.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.geometry_summary import GeometrySummary + +# TODO update the JSON string below +json = "{}" +# create an instance of GeometrySummary from a JSON string +geometry_summary_instance = GeometrySummary.from_json(json) +# print the JSON string representation of the object +print(GeometrySummary.to_json()) + +# convert the object into a dict +geometry_summary_dict = geometry_summary_instance.to_dict() +# create an instance of GeometrySummary from a dict +geometry_summary_from_dict = GeometrySummary.from_dict(geometry_summary_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/GroupAccess.md b/pyvcell/_internal/api/vcell_client/docs/GroupAccess.md new file mode 100644 index 0000000..a1a7999 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GroupAccess.md @@ -0,0 +1,30 @@ +# GroupAccess + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**groupid** | **float** | | +**description** | **str** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.group_access import GroupAccess + +# TODO update the JSON string below +json = "{}" +# create an instance of GroupAccess from a JSON string +group_access_instance = GroupAccess.from_json(json) +# print the JSON string representation of the object +print(GroupAccess.to_json()) + +# convert the object into a dict +group_access_dict = group_access_instance.to_dict() +# create an instance of GroupAccess from a dict +group_access_from_dict = GroupAccess.from_dict(group_access_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/GroupAccessAll.md b/pyvcell/_internal/api/vcell_client/docs/GroupAccessAll.md new file mode 100644 index 0000000..69db73e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GroupAccessAll.md @@ -0,0 +1,30 @@ +# GroupAccessAll + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | | [default to 'GroupAccessAll'] +**description** | **str** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.group_access_all import GroupAccessAll + +# TODO update the JSON string below +json = "{}" +# create an instance of GroupAccessAll from a JSON string +group_access_all_instance = GroupAccessAll.from_json(json) +# print the JSON string representation of the object +print(GroupAccessAll.to_json()) + +# convert the object into a dict +group_access_all_dict = group_access_all_instance.to_dict() +# create an instance of GroupAccessAll from a dict +group_access_all_from_dict = GroupAccessAll.from_dict(group_access_all_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/GroupAccessNone.md b/pyvcell/_internal/api/vcell_client/docs/GroupAccessNone.md new file mode 100644 index 0000000..398fbe2 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GroupAccessNone.md @@ -0,0 +1,30 @@ +# GroupAccessNone + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | | [default to 'GroupAccessNone'] +**description** | **str** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.group_access_none import GroupAccessNone + +# TODO update the JSON string below +json = "{}" +# create an instance of GroupAccessNone from a JSON string +group_access_none_instance = GroupAccessNone.from_json(json) +# print the JSON string representation of the object +print(GroupAccessNone.to_json()) + +# convert the object into a dict +group_access_none_dict = group_access_none_instance.to_dict() +# create an instance of GroupAccessNone from a dict +group_access_none_from_dict = GroupAccessNone.from_dict(group_access_none_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/GroupAccessSome.md b/pyvcell/_internal/api/vcell_client/docs/GroupAccessSome.md new file mode 100644 index 0000000..c19bfb1 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GroupAccessSome.md @@ -0,0 +1,35 @@ +# GroupAccessSome + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | | [default to 'GroupAccessSome'] +**hash** | **float** | | [optional] +**group_members** | [**List[User]**](User.md) | | [optional] +**hidden_members** | **List[bool]** | | [optional] +**description** | **str** | | [optional] +**hidden_group_members** | [**List[User]**](User.md) | | [optional] +**normal_group_members** | [**List[User]**](User.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.group_access_some import GroupAccessSome + +# TODO update the JSON string below +json = "{}" +# create an instance of GroupAccessSome from a JSON string +group_access_some_instance = GroupAccessSome.from_json(json) +# print the JSON string representation of the object +print(GroupAccessSome.to_json()) + +# convert the object into a dict +group_access_some_dict = group_access_some_instance.to_dict() +# create an instance of GroupAccessSome from a dict +group_access_some_from_dict = GroupAccessSome.from_dict(group_access_some_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/HelloWorldApi.md b/pyvcell/_internal/api/vcell_client/docs/HelloWorldApi.md index a082eb1..fb14fc8 100644 --- a/pyvcell/_internal/api/vcell_client/docs/HelloWorldApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/HelloWorldApi.md @@ -1,31 +1,33 @@ -# pyvcell.\_internal.api.vcell_client.HelloWorldApi +# pyvcell._internal.api.vcell_client.HelloWorldApi -All URIs are relative to *https://vcell-dev.cam.uchc.edu* +All URIs are relative to *https://vcell.cam.uchc.edu* -| Method | HTTP request | Description | -| ------------------------------------------------------- | -------------------------- | ------------------------ | -| [**get_hello_world**](HelloWorldApi.md#get_hello_world) | **GET** /api/v1/helloworld | Get hello world message. | +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get_hello_world**](HelloWorldApi.md#get_hello_world) | **GET** /api/v1/helloworld | Get hello world message. -# **get_hello_world** +# **get_hello_world** > HelloWorldMessage get_hello_world() Get hello world message. ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.hello_world_message import HelloWorldMessage from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) + # Enter a context with an instance of the API client with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class @@ -40,6 +42,8 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling HelloWorldApi->get_hello_world: %s\n" % e) ``` + + ### Parameters This endpoint does not need any parameter. @@ -54,13 +58,15 @@ No authorization required ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/json + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details | Status code | Description | Response headers | -| ----------- | ----------- | ---------------- | -| **200** | OK | - | +|-------------|-------------|------------------| +**200** | OK | - | +**403** | Not Allowed | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/pyvcell/_internal/api/vcell_client/docs/HelloWorldMessage.md b/pyvcell/_internal/api/vcell_client/docs/HelloWorldMessage.md index fe1b404..e58b2d9 100644 --- a/pyvcell/_internal/api/vcell_client/docs/HelloWorldMessage.md +++ b/pyvcell/_internal/api/vcell_client/docs/HelloWorldMessage.md @@ -1,10 +1,11 @@ # HelloWorldMessage + ## Properties -| Name | Type | Description | Notes | -| ----------- | ------- | ----------- | ---------- | -| **message** | **str** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**message** | **str** | | [optional] ## Example @@ -23,5 +24,6 @@ hello_world_message_dict = hello_world_message_instance.to_dict() # create an instance of HelloWorldMessage from a dict hello_world_message_from_dict = HelloWorldMessage.from_dict(hello_world_message_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/HtcJobID.md b/pyvcell/_internal/api/vcell_client/docs/HtcJobID.md index d80dcf2..b83606a 100644 --- a/pyvcell/_internal/api/vcell_client/docs/HtcJobID.md +++ b/pyvcell/_internal/api/vcell_client/docs/HtcJobID.md @@ -1,12 +1,13 @@ # HtcJobID + ## Properties -| Name | Type | Description | Notes | -| --------------------- | ----------------------------------------- | ----------- | ---------- | -| **job_number** | **int** | | [optional] | -| **server** | **str** | | [optional] | -| **batch_system_type** | [**BatchSystemType**](BatchSystemType.md) | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**job_number** | **int** | | [optional] +**server** | **str** | | [optional] +**batch_system_type** | [**BatchSystemType**](BatchSystemType.md) | | [optional] ## Example @@ -25,5 +26,6 @@ htc_job_id_dict = htc_job_id_instance.to_dict() # create an instance of HtcJobID from a dict htc_job_id_from_dict = HtcJobID.from_dict(htc_job_id_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/HumanReadableExportData.md b/pyvcell/_internal/api/vcell_client/docs/HumanReadableExportData.md new file mode 100644 index 0000000..90fb7ef --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/HumanReadableExportData.md @@ -0,0 +1,39 @@ +# HumanReadableExportData + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**simulation_name** | **str** | | [optional] +**biomodel_name** | **str** | | [optional] +**application_name** | **str** | | [optional] +**different_parameter_values** | **List[str]** | | [optional] +**application_type** | **str** | | [optional] +**server_saved_file_name** | **str** | | [optional] +**non_spatial** | **bool** | | [optional] +**sub_volume** | **Dict[str, str]** | | [optional] +**z_slices** | **int** | | [optional] +**t_slices** | **int** | | [optional] +**num_channels** | **int** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.human_readable_export_data import HumanReadableExportData + +# TODO update the JSON string below +json = "{}" +# create an instance of HumanReadableExportData from a JSON string +human_readable_export_data_instance = HumanReadableExportData.from_json(json) +# print the JSON string representation of the object +print(HumanReadableExportData.to_json()) + +# convert the object into a dict +human_readable_export_data_dict = human_readable_export_data_instance.to_dict() +# create an instance of HumanReadableExportData from a dict +human_readable_export_data_from_dict = HumanReadableExportData.from_dict(human_readable_export_data_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/ISize.md b/pyvcell/_internal/api/vcell_client/docs/ISize.md index fd44862..45c0107 100644 --- a/pyvcell/_internal/api/vcell_client/docs/ISize.md +++ b/pyvcell/_internal/api/vcell_client/docs/ISize.md @@ -1,12 +1,13 @@ # ISize + ## Properties -| Name | Type | Description | Notes | -| ----- | ------- | ----------- | ---------- | -| **x** | **int** | | [optional] | -| **y** | **int** | | [optional] | -| **z** | **int** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**x** | **int** | | [optional] +**y** | **int** | | [optional] +**z** | **int** | | [optional] ## Example @@ -25,5 +26,6 @@ i_size_dict = i_size_instance.to_dict() # create an instance of ISize from a dict i_size_from_dict = ISize.from_dict(i_size_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/Identity.md b/pyvcell/_internal/api/vcell_client/docs/Identity.md index 3dc10be..ec24c96 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Identity.md +++ b/pyvcell/_internal/api/vcell_client/docs/Identity.md @@ -1,13 +1,14 @@ # Identity + ## Properties -| Name | Type | Description | Notes | -| ------------------ | ------------- | ----------- | ---------- | -| **principal_name** | **str** | | [optional] | -| **roles** | **List[str]** | | [optional] | -| **attributes** | **List[str]** | | [optional] | -| **credentials** | **List[str]** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**principal_name** | **str** | | [optional] +**roles** | **List[str]** | | [optional] +**attributes** | **List[str]** | | [optional] +**credentials** | **List[str]** | | [optional] ## Example @@ -26,5 +27,6 @@ identity_dict = identity_instance.to_dict() # create an instance of Identity from a dict identity_from_dict = Identity.from_dict(identity_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/KeyValue.md b/pyvcell/_internal/api/vcell_client/docs/KeyValue.md deleted file mode 100644 index 296dce3..0000000 --- a/pyvcell/_internal/api/vcell_client/docs/KeyValue.md +++ /dev/null @@ -1,27 +0,0 @@ -# KeyValue - -## Properties - -| Name | Type | Description | Notes | -| --------- | --------- | ----------- | ---------- | -| **value** | **float** | | [optional] | - -## Example - -```python -from pyvcell._internal.api.vcell_client.models.key_value import KeyValue - -# TODO update the JSON string below -json = "{}" -# create an instance of KeyValue from a JSON string -key_value_instance = KeyValue.from_json(json) -# print the JSON string representation of the object -print(KeyValue.to_json()) - -# convert the object into a dict -key_value_dict = key_value_instance.to_dict() -# create an instance of KeyValue from a dict -key_value_from_dict = KeyValue.from_dict(key_value_dict) -``` - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/MathModelChildSummary.md b/pyvcell/_internal/api/vcell_client/docs/MathModelChildSummary.md new file mode 100644 index 0000000..b6f590f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/MathModelChildSummary.md @@ -0,0 +1,33 @@ +# MathModelChildSummary + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**model_type** | [**MathType**](MathType.md) | | [optional] +**geometry_dimension** | **int** | | [optional] +**geometry_name** | **str** | | [optional] +**simulation_annotations** | **List[str]** | | [optional] +**simulation_names** | **List[str]** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.math_model_child_summary import MathModelChildSummary + +# TODO update the JSON string below +json = "{}" +# create an instance of MathModelChildSummary from a JSON string +math_model_child_summary_instance = MathModelChildSummary.from_json(json) +# print the JSON string representation of the object +print(MathModelChildSummary.to_json()) + +# convert the object into a dict +math_model_child_summary_dict = math_model_child_summary_instance.to_dict() +# create an instance of MathModelChildSummary from a dict +math_model_child_summary_from_dict = MathModelChildSummary.from_dict(math_model_child_summary_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md new file mode 100644 index 0000000..2b2d17f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md @@ -0,0 +1,354 @@ +# pyvcell._internal.api.vcell_client.MathModelResourceApi + +All URIs are relative to *https://vcell.cam.uchc.edu* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**delete_math_model**](MathModelResourceApi.md#delete_math_model) | **DELETE** /api/v1/mathModel/{id} | +[**get_summaries**](MathModelResourceApi.md#get_summaries) | **GET** /api/v1/mathModel/summaries | +[**get_summary**](MathModelResourceApi.md#get_summary) | **GET** /api/v1/mathModel/summary/{id} | +[**get_vcml**](MathModelResourceApi.md#get_vcml) | **GET** /api/v1/mathModel/{id} | +[**save_math_model**](MathModelResourceApi.md#save_math_model) | **POST** /api/v1/mathModel | + + +# **delete_math_model** +> delete_math_model(id) + +Remove specific Math Model. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.MathModelResourceApi(api_client) + id = 'id_example' # str | + + try: + api_instance.delete_math_model(id) + except Exception as e: + print("Exception when calling MathModelResourceApi->delete_math_model: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | No Content | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**404** | Not found | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_summaries** +> List[MathModelSummary] get_summaries(include_public_and_shared=include_public_and_shared) + +Return MathModel summaries. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.models.math_model_summary import MathModelSummary +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.MathModelResourceApi(api_client) + include_public_and_shared = True # bool | Include MathModel summaries that are public and shared with the requester. Default is true. (optional) + + try: + api_response = api_instance.get_summaries(include_public_and_shared=include_public_and_shared) + print("The response of MathModelResourceApi->get_summaries:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling MathModelResourceApi->get_summaries: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **include_public_and_shared** | **bool**| Include MathModel summaries that are public and shared with the requester. Default is true. | [optional] + +### Return type + +[**List[MathModelSummary]**](MathModelSummary.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_summary** +> MathModelSummary get_summary(id) + +All of the text based information about a MathModel (summary, version, publication status, etc...), but not the actual MathModel itself. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.models.math_model_summary import MathModelSummary +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.MathModelResourceApi(api_client) + id = 'id_example' # str | + + try: + api_response = api_instance.get_summary(id) + print("The response of MathModelResourceApi->get_summary:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling MathModelResourceApi->get_summary: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +[**MathModelSummary**](MathModelSummary.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**403** | Not Allowed | - | +**404** | Not found | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_vcml** +> str get_vcml(id) + +Returns MathModel in VCML format. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.MathModelResourceApi(api_client) + id = 'id_example' # str | + + try: + api_response = api_instance.get_vcml(id) + print("The response of MathModelResourceApi->get_vcml:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling MathModelResourceApi->get_vcml: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +**str** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/xml, application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**403** | Not Allowed | - | +**404** | Not found | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **save_math_model** +> str save_math_model(body, new_name=new_name, sim_names=sim_names) + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.MathModelResourceApi(api_client) + body = 'body_example' # str | + new_name = 'new_name_example' # str | Name to save new MathModel under. Leave blank if re-saving existing MathModel. (optional) + sim_names = ['sim_names_example'] # List[str] | The name of simulations that will be prepared for future execution. (optional) + + try: + api_response = api_instance.save_math_model(body, new_name=new_name, sim_names=sim_names) + print("The response of MathModelResourceApi->save_math_model:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling MathModelResourceApi->save_math_model: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **str**| | + **new_name** | **str**| Name to save new MathModel under. Leave blank if re-saving existing MathModel. | [optional] + **sim_names** | [**List[str]**](str.md)| The name of simulations that will be prepared for future execution. | [optional] + +### Return type + +**str** + +### Authorization + +[openId](../README.md#openId) + +### HTTP request headers + + - **Content-Type**: application/xml + - **Accept**: application/xml, application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**422** | Unprocessable content submitted | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/pyvcell/_internal/api/vcell_client/docs/MathModelSummary.md b/pyvcell/_internal/api/vcell_client/docs/MathModelSummary.md new file mode 100644 index 0000000..fcda35d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/MathModelSummary.md @@ -0,0 +1,34 @@ +# MathModelSummary + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**version** | [**Version**](Version.md) | | [optional] +**key_value** | **str** | | [optional] +**model_info** | [**MathModelChildSummary**](MathModelChildSummary.md) | | [optional] +**software_version** | [**VCellSoftwareVersion**](VCellSoftwareVersion.md) | | [optional] +**publication_infos** | [**List[PublicationInfo]**](PublicationInfo.md) | | [optional] +**annotated_functions** | **str** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.math_model_summary import MathModelSummary + +# TODO update the JSON string below +json = "{}" +# create an instance of MathModelSummary from a JSON string +math_model_summary_instance = MathModelSummary.from_json(json) +# print the JSON string representation of the object +print(MathModelSummary.to_json()) + +# convert the object into a dict +math_model_summary_dict = math_model_summary_instance.to_dict() +# create an instance of MathModelSummary from a dict +math_model_summary_from_dict = MathModelSummary.from_dict(math_model_summary_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/MathType.md b/pyvcell/_internal/api/vcell_client/docs/MathType.md new file mode 100644 index 0000000..12c6ee8 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/MathType.md @@ -0,0 +1,18 @@ +# MathType + + +## Enum + +* `RULEBASED` (value: `'RuleBased'`) + +* `STOCHASTIC` (value: `'Stochastic'`) + +* `DETERMINISTIC` (value: `'Deterministic'`) + +* `SPRINGSALAD` (value: `'SpringSaLaD'`) + +* `UNKNOWN` (value: `'Unknown'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/MathmodelRef.md b/pyvcell/_internal/api/vcell_client/docs/MathmodelRef.md index b4c94fb..287e48f 100644 --- a/pyvcell/_internal/api/vcell_client/docs/MathmodelRef.md +++ b/pyvcell/_internal/api/vcell_client/docs/MathmodelRef.md @@ -1,14 +1,15 @@ # MathmodelRef + ## Properties -| Name | Type | Description | Notes | -| ---------------- | ------- | ----------- | ---------- | -| **mm_key** | **int** | | [optional] | -| **name** | **str** | | [optional] | -| **owner_name** | **str** | | [optional] | -| **owner_key** | **int** | | [optional] | -| **version_flag** | **int** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**mm_key** | **int** | | [optional] +**name** | **str** | | [optional] +**owner_name** | **str** | | [optional] +**owner_key** | **int** | | [optional] +**version_flag** | **int** | | [optional] ## Example @@ -27,5 +28,6 @@ mathmodel_ref_dict = mathmodel_ref_instance.to_dict() # create an instance of MathmodelRef from a dict mathmodel_ref_from_dict = MathmodelRef.from_dict(mathmodel_ref_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/ModelType.md b/pyvcell/_internal/api/vcell_client/docs/ModelType.md new file mode 100644 index 0000000..8800e13 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/ModelType.md @@ -0,0 +1,12 @@ +# ModelType + + +## Enum + +* `BIOMODEL` (value: `'BIOMODEL'`) + +* `MATHMODEL` (value: `'MATHMODEL'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/N5ExportRequest.md b/pyvcell/_internal/api/vcell_client/docs/N5ExportRequest.md new file mode 100644 index 0000000..fba7bd0 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/N5ExportRequest.md @@ -0,0 +1,32 @@ +# N5ExportRequest + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**standard_export_information** | [**StandardExportInfo**](StandardExportInfo.md) | | [optional] +**sub_volume** | **Dict[str, str]** | | [optional] +**exportable_data_type** | [**ExportableDataType**](ExportableDataType.md) | | [optional] +**dataset_name** | **str** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.n5_export_request import N5ExportRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of N5ExportRequest from a JSON string +n5_export_request_instance = N5ExportRequest.from_json(json) +# print the JSON string representation of the object +print(N5ExportRequest.to_json()) + +# convert the object into a dict +n5_export_request_dict = n5_export_request_instance.to_dict() +# create an instance of N5ExportRequest from a dict +n5_export_request_from_dict = N5ExportRequest.from_dict(n5_export_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/Origin.md b/pyvcell/_internal/api/vcell_client/docs/Origin.md index 80cefe7..b3e4401 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Origin.md +++ b/pyvcell/_internal/api/vcell_client/docs/Origin.md @@ -1,12 +1,13 @@ # Origin + ## Properties -| Name | Type | Description | Notes | -| ----- | --------- | ----------- | ---------- | -| **x** | **float** | | [optional] | -| **y** | **float** | | [optional] | -| **z** | **float** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**x** | **float** | | [optional] +**y** | **float** | | [optional] +**z** | **float** | | [optional] ## Example @@ -25,5 +26,6 @@ origin_dict = origin_instance.to_dict() # create an instance of Origin from a dict origin_from_dict = Origin.from_dict(origin_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/Publication.md b/pyvcell/_internal/api/vcell_client/docs/Publication.md index a0992ac..fd5e15d 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Publication.md +++ b/pyvcell/_internal/api/vcell_client/docs/Publication.md @@ -1,22 +1,23 @@ # Publication + ## Properties -| Name | Type | Description | Notes | -| ------------------ | ----------------------------------------- | ----------- | ---------- | -| **pub_key** | **int** | | [optional] | -| **title** | **str** | | [optional] | -| **authors** | **List[str]** | | [optional] | -| **year** | **int** | | [optional] | -| **citation** | **str** | | [optional] | -| **pubmedid** | **str** | | [optional] | -| **doi** | **str** | | [optional] | -| **endnoteid** | **int** | | [optional] | -| **url** | **str** | | [optional] | -| **wittid** | **int** | | [optional] | -| **biomodel_refs** | [**List[BiomodelRef]**](BiomodelRef.md) | | [optional] | -| **mathmodel_refs** | [**List[MathmodelRef]**](MathmodelRef.md) | | [optional] | -| **var_date** | **date** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**pub_key** | **int** | | [optional] +**title** | **str** | | [optional] +**authors** | **List[str]** | | [optional] +**year** | **int** | | [optional] +**citation** | **str** | | [optional] +**pubmedid** | **str** | | [optional] +**doi** | **str** | | [optional] +**endnoteid** | **int** | | [optional] +**url** | **str** | | [optional] +**wittid** | **int** | | [optional] +**biomodel_refs** | [**List[BiomodelRef]**](BiomodelRef.md) | | [optional] +**mathmodel_refs** | [**List[MathmodelRef]**](MathmodelRef.md) | | [optional] +**var_date** | **date** | | [optional] ## Example @@ -35,5 +36,6 @@ publication_dict = publication_instance.to_dict() # create an instance of Publication from a dict publication_from_dict = Publication.from_dict(publication_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/PublicationInfo.md b/pyvcell/_internal/api/vcell_client/docs/PublicationInfo.md new file mode 100644 index 0000000..1c3ff69 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/PublicationInfo.md @@ -0,0 +1,40 @@ +# PublicationInfo + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**publication_key** | **str** | | [optional] +**version_key** | **str** | | [optional] +**title** | **str** | | [optional] +**authors** | **List[str]** | | [optional] +**citation** | **str** | | [optional] +**pubmedid** | **str** | | [optional] +**doi** | **str** | | [optional] +**url** | **str** | | [optional] +**pubdate** | **date** | | [optional] +**vc_document_type** | [**VCDocumentType**](VCDocumentType.md) | | [optional] +**user** | [**User**](User.md) | | [optional] +**the_hash_code** | **int** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.publication_info import PublicationInfo + +# TODO update the JSON string below +json = "{}" +# create an instance of PublicationInfo from a JSON string +publication_info_instance = PublicationInfo.from_json(json) +# print the JSON string representation of the object +print(PublicationInfo.to_json()) + +# convert the object into a dict +publication_info_dict = publication_info_instance.to_dict() +# create an instance of PublicationInfo from a dict +publication_info_from_dict = PublicationInfo.from_dict(publication_info_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md index c7b19f2..4af56c0 100644 --- a/pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md @@ -1,33 +1,34 @@ -# pyvcell.\_internal.api.vcell_client.PublicationResourceApi +# pyvcell._internal.api.vcell_client.PublicationResourceApi -All URIs are relative to *https://vcell-dev.cam.uchc.edu* +All URIs are relative to *https://vcell.cam.uchc.edu* -| Method | HTTP request | Description | -| ---------------------------------------------------------------------------- | ------------------------------------ | --------------------- | -| [**create_publication**](PublicationResourceApi.md#create_publication) | **POST** /api/v1/publications | Create publication | -| [**delete_publication**](PublicationResourceApi.md#delete_publication) | **DELETE** /api/v1/publications/{id} | Delete publication | -| [**get_publication_by_id**](PublicationResourceApi.md#get_publication_by_id) | **GET** /api/v1/publications/{id} | Get publication by ID | -| [**get_publications**](PublicationResourceApi.md#get_publications) | **GET** /api/v1/publications | Get all publications | -| [**update_publication**](PublicationResourceApi.md#update_publication) | **PUT** /api/v1/publications | Update publication | +Method | HTTP request | Description +------------- | ------------- | ------------- +[**create_publication**](PublicationResourceApi.md#create_publication) | **POST** /api/v1/publications | Create publication +[**delete_publication**](PublicationResourceApi.md#delete_publication) | **DELETE** /api/v1/publications/{id} | Delete publication +[**get_publication_by_id**](PublicationResourceApi.md#get_publication_by_id) | **GET** /api/v1/publications/{id} | Get publication by ID +[**get_publications**](PublicationResourceApi.md#get_publications) | **GET** /api/v1/publications | Get all publications +[**update_publication**](PublicationResourceApi.md#update_publication) | **PUT** /api/v1/publications | Update publication -# **create_publication** +# **create_publication** > int create_publication(publication=publication) Create publication ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.publication import Publication from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -39,7 +40,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.PublicationResourceApi(api_client) - publication = pyvcell._internal.api.vcell_client.Publication() # Publication | (optional) + publication = pyvcell._internal.api.vcell_client.Publication() # Publication | (optional) try: # Create publication @@ -50,11 +51,14 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling PublicationResourceApi->create_publication: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| --------------- | --------------------------------- | ----------- | ---------- | -| **publication** | [**Publication**](Publication.md) | | [optional] | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **publication** | [**Publication**](Publication.md)| | [optional] ### Return type @@ -66,36 +70,37 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### HTTP request headers -- **Content-Type**: application/json -- **Accept**: application/json + - **Content-Type**: application/json + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **200** | OK | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **delete_publication** - > delete_publication(id) Delete publication ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -107,7 +112,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.PublicationResourceApi(api_client) - id = 56 # int | + id = 56 # int | try: # Delete publication @@ -116,11 +121,14 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling PublicationResourceApi->delete_publication: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ------ | ------- | ----------- | ----- | -| **id** | **int** | | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **int**| | ### Return type @@ -132,44 +140,47 @@ void (empty response body) ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: Not defined + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **204** | No Content | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | No Content | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**404** | Not found | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_publication_by_id** - > Publication get_publication_by_id(id) Get publication by ID ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.publication import Publication from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) + # Enter a context with an instance of the API client with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.PublicationResourceApi(api_client) - id = 56 # int | + id = 56 # int | try: # Get publication by ID @@ -180,11 +191,14 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling PublicationResourceApi->get_publication_by_id: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ------ | ------- | ----------- | ----- | -| **id** | **int** | | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **int**| | ### Return type @@ -196,37 +210,39 @@ No authorization required ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/json + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details | Status code | Description | Response headers | -| ----------- | ----------- | ---------------- | -| **200** | OK | - | +|-------------|-------------|------------------| +**200** | OK | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_publications** - > List[Publication] get_publications() Get all publications ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.publication import Publication from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) + # Enter a context with an instance of the API client with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class @@ -241,6 +257,8 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling PublicationResourceApi->get_publications: %s\n" % e) ``` + + ### Parameters This endpoint does not need any parameter. @@ -255,35 +273,36 @@ No authorization required ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/json + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details | Status code | Description | Response headers | -| ----------- | ----------- | ---------------- | -| **200** | OK | - | +|-------------|-------------|------------------| +**200** | OK | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **update_publication** - > Publication update_publication(publication=publication) Update publication ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.publication import Publication from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -295,7 +314,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.PublicationResourceApi(api_client) - publication = pyvcell._internal.api.vcell_client.Publication() # Publication | (optional) + publication = pyvcell._internal.api.vcell_client.Publication() # Publication | (optional) try: # Update publication @@ -306,11 +325,14 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling PublicationResourceApi->update_publication: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| --------------- | --------------------------------- | ----------- | ---------- | -| **publication** | [**Publication**](Publication.md) | | [optional] | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **publication** | [**Publication**](Publication.md)| | [optional] ### Return type @@ -322,15 +344,17 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### HTTP request headers -- **Content-Type**: application/json -- **Accept**: application/json + - **Content-Type**: application/json + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **200** | OK | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/pyvcell/_internal/api/vcell_client/docs/SPECIALCLAIM.md b/pyvcell/_internal/api/vcell_client/docs/SPECIALCLAIM.md new file mode 100644 index 0000000..235a46d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/SPECIALCLAIM.md @@ -0,0 +1,16 @@ +# SPECIALCLAIM + + +## Enum + +* `ADMINS` (value: `'admins'`) + +* `POWERUSERS` (value: `'powerUsers'`) + +* `PUBLICATIONEDITORS` (value: `'publicationEditors'`) + +* `VCELLSUPPORT` (value: `'vcellSupport'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/SampledCurve.md b/pyvcell/_internal/api/vcell_client/docs/SampledCurve.md new file mode 100644 index 0000000..8267c06 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/SampledCurve.md @@ -0,0 +1,34 @@ +# SampledCurve + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | | [default to 'SampledCurve'] +**default_num_samples** | **int** | | [optional] +**max_control_points** | **int** | | [optional] +**min_control_points** | **int** | | [optional] +**segment_count** | **int** | | [optional] +**spatial_length** | **float** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.sampled_curve import SampledCurve + +# TODO update the JSON string below +json = "{}" +# create an instance of SampledCurve from a JSON string +sampled_curve_instance = SampledCurve.from_json(json) +# print the JSON string representation of the object +print(SampledCurve.to_json()) + +# convert the object into a dict +sampled_curve_dict = sampled_curve_instance.to_dict() +# create an instance of SampledCurve from a dict +sampled_curve_from_dict = SampledCurve.from_dict(sampled_curve_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/SchedulerStatus.md b/pyvcell/_internal/api/vcell_client/docs/SchedulerStatus.md index abc050c..2065b83 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SchedulerStatus.md +++ b/pyvcell/_internal/api/vcell_client/docs/SchedulerStatus.md @@ -1,19 +1,22 @@ # SchedulerStatus + ## Enum -- `WAITING` (value: `'WAITING'`) +* `WAITING` (value: `'WAITING'`) -- `QUEUED` (value: `'QUEUED'`) +* `QUEUED` (value: `'QUEUED'`) -- `DISPATCHED` (value: `'DISPATCHED'`) +* `DISPATCHED` (value: `'DISPATCHED'`) -- `RUNNING` (value: `'RUNNING'`) +* `RUNNING` (value: `'RUNNING'`) -- `COMPLETED` (value: `'COMPLETED'`) +* `COMPLETED` (value: `'COMPLETED'`) -- `STOPPED` (value: `'STOPPED'`) +* `STOPPED` (value: `'STOPPED'`) -- `FAILED` (value: `'FAILED'`) +* `FAILED` (value: `'FAILED'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md b/pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md index abfc768..ea90f95 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md @@ -1,15 +1,16 @@ # SimulationExecutionStatusRecord + ## Properties -| Name | Type | Description | Notes | -| ---------------------------- | --------------------------- | ----------- | ---------- | -| **field_start_date** | **datetime** | | [optional] | -| **field_latest_update_date** | **datetime** | | [optional] | -| **field_end_date** | **datetime** | | [optional] | -| **field_compute_host** | **str** | | [optional] | -| **field_has_data** | **bool** | | [optional] | -| **field_htc_job_id** | [**HtcJobID**](HtcJobID.md) | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**field_start_date** | **datetime** | | [optional] +**field_latest_update_date** | **datetime** | | [optional] +**field_end_date** | **datetime** | | [optional] +**field_compute_host** | **str** | | [optional] +**field_has_data** | **bool** | | [optional] +**field_htc_job_id** | [**HtcJobID**](HtcJobID.md) | | [optional] ## Example @@ -26,8 +27,8 @@ print(SimulationExecutionStatusRecord.to_json()) # convert the object into a dict simulation_execution_status_record_dict = simulation_execution_status_record_instance.to_dict() # create an instance of SimulationExecutionStatusRecord from a dict -simulation_execution_status_record_from_dict = SimulationExecutionStatusRecord.from_dict( - simulation_execution_status_record_dict) +simulation_execution_status_record_from_dict = SimulationExecutionStatusRecord.from_dict(simulation_execution_status_record_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/SimulationJobStatusRecord.md b/pyvcell/_internal/api/vcell_client/docs/SimulationJobStatusRecord.md index 6620065..e71bf0a 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationJobStatusRecord.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationJobStatusRecord.md @@ -1,19 +1,20 @@ # SimulationJobStatusRecord + ## Properties -| Name | Type | Description | Notes | -| --------------------------------------- | --------------------------------------------------------------------------- | ----------- | ---------- | -| **field_time_data_stamp** | **datetime** | | [optional] | -| **field_vc_sim_id** | [**VCSimulationIdentifier**](VCSimulationIdentifier.md) | | [optional] | -| **field_submit_date** | **datetime** | | [optional] | -| **field_scheduler_status** | [**SchedulerStatus**](SchedulerStatus.md) | | [optional] | -| **field_simulation_message** | [**SimulationMessage**](SimulationMessage.md) | | [optional] | -| **field_task_id** | **int** | | [optional] | -| **field_server_id** | **str** | | [optional] | -| **field_job_index** | **int** | | [optional] | -| **field_simulation_execution_status** | [**SimulationExecutionStatusRecord**](SimulationExecutionStatusRecord.md) | | [optional] | -| **field_simulation_queue_entry_status** | [**SimulationQueueEntryStatusRecord**](SimulationQueueEntryStatusRecord.md) | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**field_time_data_stamp** | **datetime** | | [optional] +**field_vc_sim_id** | [**VCSimulationIdentifier**](VCSimulationIdentifier.md) | | [optional] +**field_submit_date** | **datetime** | | [optional] +**field_scheduler_status** | [**SchedulerStatus**](SchedulerStatus.md) | | [optional] +**field_simulation_message** | [**SimulationMessage**](SimulationMessage.md) | | [optional] +**field_task_id** | **int** | | [optional] +**field_server_id** | **str** | | [optional] +**field_job_index** | **int** | | [optional] +**field_simulation_execution_status** | [**SimulationExecutionStatusRecord**](SimulationExecutionStatusRecord.md) | | [optional] +**field_simulation_queue_entry_status** | [**SimulationQueueEntryStatusRecord**](SimulationQueueEntryStatusRecord.md) | | [optional] ## Example @@ -32,5 +33,6 @@ simulation_job_status_record_dict = simulation_job_status_record_instance.to_dic # create an instance of SimulationJobStatusRecord from a dict simulation_job_status_record_from_dict = SimulationJobStatusRecord.from_dict(simulation_job_status_record_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/SimulationMessage.md b/pyvcell/_internal/api/vcell_client/docs/SimulationMessage.md index 1c086fb..4255d67 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationMessage.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationMessage.md @@ -1,13 +1,14 @@ # SimulationMessage + ## Properties -| Name | Type | Description | Notes | -| ------------------- | ------------------------------------- | ----------- | ---------- | -| **detailed_state** | [**DetailedState**](DetailedState.md) | | [optional] | -| **message** | **str** | | [optional] | -| **htc_job_id** | [**HtcJobID**](HtcJobID.md) | | [optional] | -| **display_message** | **str** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**detailed_state** | [**DetailedState**](DetailedState.md) | | [optional] +**message** | **str** | | [optional] +**htc_job_id** | [**HtcJobID**](HtcJobID.md) | | [optional] +**display_message** | **str** | | [optional] ## Example @@ -26,5 +27,6 @@ simulation_message_dict = simulation_message_instance.to_dict() # create an instance of SimulationMessage from a dict simulation_message_from_dict = SimulationMessage.from_dict(simulation_message_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md b/pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md index ff1df5c..19bb5f7 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md @@ -1,18 +1,18 @@ # SimulationQueueEntryStatusRecord + ## Properties -| Name | Type | Description | Notes | -| ------------------------ | --------------------------------------------- | ----------- | ---------- | -| **field_queue_priority** | **int** | | [optional] | -| **field_queue_date** | **datetime** | | [optional] | -| **field_queue_id** | [**SimulationQueueID**](SimulationQueueID.md) | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**field_queue_priority** | **int** | | [optional] +**field_queue_date** | **datetime** | | [optional] +**field_queue_id** | [**SimulationQueueID**](SimulationQueueID.md) | | [optional] ## Example ```python -from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import - SimulationQueueEntryStatusRecord +from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import SimulationQueueEntryStatusRecord # TODO update the JSON string below json = "{}" @@ -24,8 +24,8 @@ print(SimulationQueueEntryStatusRecord.to_json()) # convert the object into a dict simulation_queue_entry_status_record_dict = simulation_queue_entry_status_record_instance.to_dict() # create an instance of SimulationQueueEntryStatusRecord from a dict -simulation_queue_entry_status_record_from_dict = SimulationQueueEntryStatusRecord.from_dict( - simulation_queue_entry_status_record_dict) +simulation_queue_entry_status_record_from_dict = SimulationQueueEntryStatusRecord.from_dict(simulation_queue_entry_status_record_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/SimulationQueueID.md b/pyvcell/_internal/api/vcell_client/docs/SimulationQueueID.md index 67dda8e..6d8f422 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationQueueID.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationQueueID.md @@ -1,11 +1,14 @@ # SimulationQueueID + ## Enum -- `QUEUE_ID_WAITING` (value: `'QUEUE_ID_WAITING'`) +* `QUEUE_ID_WAITING` (value: `'QUEUE_ID_WAITING'`) -- `QUEUE_ID_SIMULATIONJOB` (value: `'QUEUE_ID_SIMULATIONJOB'`) +* `QUEUE_ID_SIMULATIONJOB` (value: `'QUEUE_ID_SIMULATIONJOB'`) -- `QUEUE_ID_NULL` (value: `'QUEUE_ID_NULL'`) +* `QUEUE_ID_NULL` (value: `'QUEUE_ID_NULL'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md index aa2daeb..3342fb0 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md @@ -1,32 +1,32 @@ -# pyvcell.\_internal.api.vcell_client.SimulationResourceApi +# pyvcell._internal.api.vcell_client.SimulationResourceApi -All URIs are relative to *https://vcell-dev.cam.uchc.edu* +All URIs are relative to *https://vcell.cam.uchc.edu* -| Method | HTTP request | Description | -| --------------------------------------------------------------------------- | --------------------------------------------------- | ------------------------------------ | -| [**get_simulation_status**](SimulationResourceApi.md#get_simulation_status) | **GET** /api/v1/Simulation/{simID}/simulationStatus | Get the status of simulation running | -| [**start_simulation**](SimulationResourceApi.md#start_simulation) | **POST** /api/v1/Simulation/{simID}/startSimulation | Start a simulation. | -| [**stop_simulation**](SimulationResourceApi.md#stop_simulation) | **POST** /api/v1/Simulation/{simID}/stopSimulation | Stop a simulation. | +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get_simulation_status**](SimulationResourceApi.md#get_simulation_status) | **GET** /api/v1/Simulation/{simID}/simulationStatus | Get the status of simulation running +[**start_simulation**](SimulationResourceApi.md#start_simulation) | **POST** /api/v1/Simulation/{simID}/startSimulation | Start a simulation. +[**stop_simulation**](SimulationResourceApi.md#stop_simulation) | **POST** /api/v1/Simulation/{simID}/stopSimulation | Stop a simulation. -# **get_simulation_status** +# **get_simulation_status** > SimulationStatusPersistentRecord get_simulation_status(sim_id, bio_model_id=bio_model_id, math_model_id=math_model_id) Get the status of simulation running ### Example + ```python import pyvcell._internal.api.vcell_client -from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import - SimulationStatusPersistentRecord +from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import SimulationStatusPersistentRecord from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -38,27 +38,29 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.SimulationResourceApi(api_client) - sim_id = 'sim_id_example' # str | - bio_model_id = 'bio_model_id_example' # str | (optional) - math_model_id = 'math_model_id_example' # str | (optional) + sim_id = 'sim_id_example' # str | + bio_model_id = 'bio_model_id_example' # str | (optional) + math_model_id = 'math_model_id_example' # str | (optional) try: # Get the status of simulation running - api_response = api_instance.get_simulation_status(sim_id, bio_model_id=bio_model_id, - math_model_id=math_model_id) + api_response = api_instance.get_simulation_status(sim_id, bio_model_id=bio_model_id, math_model_id=math_model_id) print("The response of SimulationResourceApi->get_simulation_status:\n") pprint(api_response) except Exception as e: print("Exception when calling SimulationResourceApi->get_simulation_status: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ----------------- | ------- | ----------- | ---------- | -| **sim_id** | **str** | | -| **bio_model_id** | **str** | | [optional] | -| **math_model_id** | **str** | | [optional] | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **sim_id** | **str**| | + **bio_model_id** | **str**| | [optional] + **math_model_id** | **str**| | [optional] ### Return type @@ -70,37 +72,38 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/json + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **200** | OK | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **start_simulation** - > List[StatusMessage] start_simulation(sim_id) Start a simulation. ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.status_message import StatusMessage from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -112,7 +115,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.SimulationResourceApi(api_client) - sim_id = 'sim_id_example' # str | + sim_id = 'sim_id_example' # str | try: # Start a simulation. @@ -123,11 +126,14 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling SimulationResourceApi->start_simulation: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ---------- | ------- | ----------- | ----- | -| **sim_id** | **str** | | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **sim_id** | **str**| | ### Return type @@ -139,37 +145,38 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/json + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **200** | OK | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **stop_simulation** - > List[StatusMessage] stop_simulation(sim_id) Stop a simulation. ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.status_message import StatusMessage from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -181,7 +188,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.SimulationResourceApi(api_client) - sim_id = 'sim_id_example' # str | + sim_id = 'sim_id_example' # str | try: # Stop a simulation. @@ -192,11 +199,14 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling SimulationResourceApi->stop_simulation: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ---------- | ------- | ----------- | ----- | -| **sim_id** | **str** | | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **sim_id** | **str**| | ### Return type @@ -208,15 +218,17 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/json + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **200** | OK | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/pyvcell/_internal/api/vcell_client/docs/SimulationStatusPersistentRecord.md b/pyvcell/_internal/api/vcell_client/docs/SimulationStatusPersistentRecord.md index fac02f1..5a5ffc9 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationStatusPersistentRecord.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationStatusPersistentRecord.md @@ -1,18 +1,18 @@ # SimulationStatusPersistentRecord + ## Properties -| Name | Type | Description | Notes | -| ------------ | ----------------------- | ----------- | ---------- | -| **status** | [**Status**](Status.md) | | [optional] | -| **details** | **str** | | [optional] | -| **has_data** | **bool** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**status** | [**Status**](Status.md) | | [optional] +**details** | **str** | | [optional] +**has_data** | **bool** | | [optional] ## Example ```python -from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import - SimulationStatusPersistentRecord +from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import SimulationStatusPersistentRecord # TODO update the JSON string below json = "{}" @@ -24,8 +24,8 @@ print(SimulationStatusPersistentRecord.to_json()) # convert the object into a dict simulation_status_persistent_record_dict = simulation_status_persistent_record_instance.to_dict() # create an instance of SimulationStatusPersistentRecord from a dict -simulation_status_persistent_record_from_dict = SimulationStatusPersistentRecord.from_dict( - simulation_status_persistent_record_dict) +simulation_status_persistent_record_from_dict = SimulationStatusPersistentRecord.from_dict(simulation_status_persistent_record_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md index 02c2d6d..3409213 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md @@ -1,56 +1,60 @@ -# pyvcell.\_internal.api.vcell_client.SolverResourceApi +# pyvcell._internal.api.vcell_client.SolverResourceApi -All URIs are relative to *https://vcell-dev.cam.uchc.edu* +All URIs are relative to *https://vcell.cam.uchc.edu* -| Method | HTTP request | Description | -| --------------------------------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------------------------- | -| [**get_fv_solver_input_from_sbml**](SolverResourceApi.md#get_fv_solver_input_from_sbml) | **POST** /api/v1/solver/getFVSolverInput | Retrieve finite volume input from SBML spatial model. | -| [**get_fv_solver_input_from_vcml**](SolverResourceApi.md#get_fv_solver_input_from_vcml) | **POST** /api/v1/solver/getFVSolverInputFromVCML | Retrieve finite volume input from SBML spatial model. | +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get_fv_solver_input_from_sbml**](SolverResourceApi.md#get_fv_solver_input_from_sbml) | **POST** /api/v1/solver/getFVSolverInput | Retrieve finite volume input from SBML spatial model. +[**get_fv_solver_input_from_vcml**](SolverResourceApi.md#get_fv_solver_input_from_vcml) | **POST** /api/v1/solver/getFVSolverInputFromVCML | Retrieve finite volume input from SBML spatial model. -# **get_fv_solver_input_from_sbml** +# **get_fv_solver_input_from_sbml** > bytearray get_fv_solver_input_from_sbml(sbml_file=sbml_file, duration=duration, output_time_step=output_time_step) Retrieve finite volume input from SBML spatial model. ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) + # Enter a context with an instance of the API client with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.SolverResourceApi(api_client) - sbml_file = None # bytearray | (optional) - duration = 5.0 # float | (optional) (default to 5.0) - output_time_step = 0.1 # float | (optional) (default to 0.1) + sbml_file = None # bytearray | (optional) + duration = 5.0 # float | (optional) (default to 5.0) + output_time_step = 0.1 # float | (optional) (default to 0.1) try: # Retrieve finite volume input from SBML spatial model. - api_response = api_instance.get_fv_solver_input_from_sbml(sbml_file=sbml_file, duration=duration, - output_time_step=output_time_step) + api_response = api_instance.get_fv_solver_input_from_sbml(sbml_file=sbml_file, duration=duration, output_time_step=output_time_step) print("The response of SolverResourceApi->get_fv_solver_input_from_sbml:\n") pprint(api_response) except Exception as e: print("Exception when calling SolverResourceApi->get_fv_solver_input_from_sbml: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| -------------------- | ------------- | ----------- | --------------------------- | -| **sbml_file** | **bytearray** | | [optional] | -| **duration** | **float** | | [optional] [default to 5.0] | -| **output_time_step** | **float** | | [optional] [default to 0.1] | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **sbml_file** | **bytearray**| | [optional] + **duration** | **float**| | [optional] [default to 5.0] + **output_time_step** | **float**| | [optional] [default to 0.1] ### Return type @@ -62,42 +66,44 @@ No authorization required ### HTTP request headers -- **Content-Type**: multipart/form-data -- **Accept**: application/octet-stream + - **Content-Type**: multipart/form-data + - **Accept**: application/octet-stream, application/json ### HTTP response details | Status code | Description | Response headers | -| ----------- | ----------- | ---------------- | -| **200** | OK | - | +|-------------|-------------|------------------| +**200** | OK | - | +**422** | Unprocessable content submitted | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_fv_solver_input_from_vcml** - > bytearray get_fv_solver_input_from_vcml(vcml_file=vcml_file, simulation_name=simulation_name) Retrieve finite volume input from SBML spatial model. ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) + # Enter a context with an instance of the API client with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.SolverResourceApi(api_client) - vcml_file = None # bytearray | (optional) - simulation_name = 'simulation_name_example' # str | (optional) + vcml_file = None # bytearray | (optional) + simulation_name = 'simulation_name_example' # str | (optional) try: # Retrieve finite volume input from SBML spatial model. @@ -108,12 +114,15 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling SolverResourceApi->get_fv_solver_input_from_vcml: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ------------------- | ------------- | ----------- | ---------- | -| **vcml_file** | **bytearray** | | [optional] | -| **simulation_name** | **str** | | [optional] | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **vcml_file** | **bytearray**| | [optional] + **simulation_name** | **str**| | [optional] ### Return type @@ -125,13 +134,15 @@ No authorization required ### HTTP request headers -- **Content-Type**: multipart/form-data -- **Accept**: application/octet-stream + - **Content-Type**: multipart/form-data + - **Accept**: application/octet-stream, application/json ### HTTP response details | Status code | Description | Response headers | -| ----------- | ----------- | ---------------- | -| **200** | OK | - | +|-------------|-------------|------------------| +**200** | OK | - | +**422** | Unprocessable content submitted | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/pyvcell/_internal/api/vcell_client/docs/SourceModel.md b/pyvcell/_internal/api/vcell_client/docs/SourceModel.md new file mode 100644 index 0000000..db840be --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/SourceModel.md @@ -0,0 +1,30 @@ +# SourceModel + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**model_id** | **str** | | [optional] +**model_type** | [**ModelType**](ModelType.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.source_model import SourceModel + +# TODO update the JSON string below +json = "{}" +# create an instance of SourceModel from a JSON string +source_model_instance = SourceModel.from_json(json) +# print the JSON string representation of the object +print(SourceModel.to_json()) + +# convert the object into a dict +source_model_dict = source_model_instance.to_dict() +# create an instance of SourceModel from a dict +source_model_from_dict = SourceModel.from_dict(source_model_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/SpatialSelection.md b/pyvcell/_internal/api/vcell_client/docs/SpatialSelection.md new file mode 100644 index 0000000..c5fa0d5 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/SpatialSelection.md @@ -0,0 +1,35 @@ +# SpatialSelection + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**curve_selection_info** | [**CurveSelectionInfo**](CurveSelectionInfo.md) | | [optional] +**var_type** | [**VariableType**](VariableType.md) | | [optional] +**type** | **str** | | +**smallest_mesh_cell_dimension_length** | **float** | | [optional] +**variable_type** | [**VariableType**](VariableType.md) | | [optional] +**closed** | **bool** | | [optional] +**point** | **bool** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.spatial_selection import SpatialSelection + +# TODO update the JSON string below +json = "{}" +# create an instance of SpatialSelection from a JSON string +spatial_selection_instance = SpatialSelection.from_json(json) +# print the JSON string representation of the object +print(SpatialSelection.to_json()) + +# convert the object into a dict +spatial_selection_dict = spatial_selection_instance.to_dict() +# create an instance of SpatialSelection from a dict +spatial_selection_from_dict = SpatialSelection.from_dict(spatial_selection_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionContour.md b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionContour.md new file mode 100644 index 0000000..d84945f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionContour.md @@ -0,0 +1,32 @@ +# SpatialSelectionContour + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | | [default to 'Contour'] +**field_sampled_data_indexes** | **List[int]** | | [optional] +**index_samples** | **List[int]** | | [optional] +**sampled_data_indexes** | **List[int]** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.spatial_selection_contour import SpatialSelectionContour + +# TODO update the JSON string below +json = "{}" +# create an instance of SpatialSelectionContour from a JSON string +spatial_selection_contour_instance = SpatialSelectionContour.from_json(json) +# print the JSON string representation of the object +print(SpatialSelectionContour.to_json()) + +# convert the object into a dict +spatial_selection_contour_dict = spatial_selection_contour_instance.to_dict() +# create an instance of SpatialSelectionContour from a dict +spatial_selection_contour_from_dict = SpatialSelectionContour.from_dict(spatial_selection_contour_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionMembrane.md b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionMembrane.md new file mode 100644 index 0000000..ced7a7a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionMembrane.md @@ -0,0 +1,31 @@ +# SpatialSelectionMembrane + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | | [default to 'Membrane'] +**field_sampled_data_indexes** | **List[int]** | | [optional] +**selection_source** | [**SampledCurve**](SampledCurve.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.spatial_selection_membrane import SpatialSelectionMembrane + +# TODO update the JSON string below +json = "{}" +# create an instance of SpatialSelectionMembrane from a JSON string +spatial_selection_membrane_instance = SpatialSelectionMembrane.from_json(json) +# print the JSON string representation of the object +print(SpatialSelectionMembrane.to_json()) + +# convert the object into a dict +spatial_selection_membrane_dict = spatial_selection_membrane_instance.to_dict() +# create an instance of SpatialSelectionMembrane from a dict +spatial_selection_membrane_from_dict = SpatialSelectionMembrane.from_dict(spatial_selection_membrane_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionVolume.md b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionVolume.md new file mode 100644 index 0000000..82d1145 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionVolume.md @@ -0,0 +1,30 @@ +# SpatialSelectionVolume + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | | [default to 'Volume'] +**symmetric** | **bool** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.spatial_selection_volume import SpatialSelectionVolume + +# TODO update the JSON string below +json = "{}" +# create an instance of SpatialSelectionVolume from a JSON string +spatial_selection_volume_instance = SpatialSelectionVolume.from_json(json) +# print the JSON string representation of the object +print(SpatialSelectionVolume.to_json()) + +# convert the object into a dict +spatial_selection_volume_dict = spatial_selection_volume_instance.to_dict() +# create an instance of SpatialSelectionVolume from a dict +spatial_selection_volume_from_dict = SpatialSelectionVolume.from_dict(spatial_selection_volume_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/Spline.md b/pyvcell/_internal/api/vcell_client/docs/Spline.md new file mode 100644 index 0000000..d577c86 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/Spline.md @@ -0,0 +1,33 @@ +# Spline + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | | [default to 'Spline'] +**default_num_samples** | **int** | | [optional] +**max_control_points** | **int** | | [optional] +**min_control_points** | **int** | | [optional] +**segment_count** | **int** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.spline import Spline + +# TODO update the JSON string below +json = "{}" +# create an instance of Spline from a JSON string +spline_instance = Spline.from_json(json) +# print the JSON string representation of the object +print(Spline.to_json()) + +# convert the object into a dict +spline_dict = spline_instance.to_dict() +# create an instance of Spline from a dict +spline_from_dict = Spline.from_dict(spline_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/StandardExportInfo.md b/pyvcell/_internal/api/vcell_client/docs/StandardExportInfo.md new file mode 100644 index 0000000..4835a3b --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/StandardExportInfo.md @@ -0,0 +1,36 @@ +# StandardExportInfo + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**output_context** | [**List[AnnotatedFunctionDTO]**](AnnotatedFunctionDTO.md) | | [optional] +**context_name** | **str** | | [optional] +**simulation_name** | **str** | | [optional] +**simulation_key** | **str** | | [optional] +**simulation_job** | **int** | | [optional] +**geometry_specs** | [**GeometrySpecDTO**](GeometrySpecDTO.md) | | [optional] +**time_specs** | [**TimeSpecs**](TimeSpecs.md) | | [optional] +**variable_specs** | [**VariableSpecs**](VariableSpecs.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.standard_export_info import StandardExportInfo + +# TODO update the JSON string below +json = "{}" +# create an instance of StandardExportInfo from a JSON string +standard_export_info_instance = StandardExportInfo.from_json(json) +# print the JSON string representation of the object +print(StandardExportInfo.to_json()) + +# convert the object into a dict +standard_export_info_dict = standard_export_info_instance.to_dict() +# create an instance of StandardExportInfo from a dict +standard_export_info_from_dict = StandardExportInfo.from_dict(standard_export_info_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/Status.md b/pyvcell/_internal/api/vcell_client/docs/Status.md index b50bb83..024617b 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Status.md +++ b/pyvcell/_internal/api/vcell_client/docs/Status.md @@ -1,29 +1,32 @@ # Status + ## Enum -- `UNKNOWN` (value: `'UNKNOWN'`) +* `UNKNOWN` (value: `'UNKNOWN'`) -- `NEVER_RAN` (value: `'NEVER_RAN'`) +* `NEVER_RAN` (value: `'NEVER_RAN'`) -- `START_REQUESTED` (value: `'START_REQUESTED'`) +* `START_REQUESTED` (value: `'START_REQUESTED'`) -- `DISPATCHED` (value: `'DISPATCHED'`) +* `DISPATCHED` (value: `'DISPATCHED'`) -- `WAITING` (value: `'WAITING'`) +* `WAITING` (value: `'WAITING'`) -- `QUEUED` (value: `'QUEUED'`) +* `QUEUED` (value: `'QUEUED'`) -- `RUNNING` (value: `'RUNNING'`) +* `RUNNING` (value: `'RUNNING'`) -- `COMPLETED` (value: `'COMPLETED'`) +* `COMPLETED` (value: `'COMPLETED'`) -- `FAILED` (value: `'FAILED'`) +* `FAILED` (value: `'FAILED'`) -- `STOP_REQUESTED` (value: `'STOP_REQUESTED'`) +* `STOP_REQUESTED` (value: `'STOP_REQUESTED'`) -- `STOPPED` (value: `'STOPPED'`) +* `STOPPED` (value: `'STOPPED'`) -- `NOT_SAVED` (value: `'NOT_SAVED'`) +* `NOT_SAVED` (value: `'NOT_SAVED'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/StatusMessage.md b/pyvcell/_internal/api/vcell_client/docs/StatusMessage.md index 0cb0cc6..fd7a50b 100644 --- a/pyvcell/_internal/api/vcell_client/docs/StatusMessage.md +++ b/pyvcell/_internal/api/vcell_client/docs/StatusMessage.md @@ -1,13 +1,14 @@ # StatusMessage + ## Properties -| Name | Type | Description | Notes | -| -------------- | ------------------------------------------------------------- | ----------- | ---------- | -| **job_status** | [**SimulationJobStatusRecord**](SimulationJobStatusRecord.md) | | [optional] | -| **user_name** | **str** | | [optional] | -| **progress** | **float** | | [optional] | -| **timepoint** | **float** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**job_status** | [**SimulationJobStatusRecord**](SimulationJobStatusRecord.md) | | [optional] +**user_name** | **str** | | [optional] +**progress** | **float** | | [optional] +**timepoint** | **float** | | [optional] ## Example @@ -26,5 +27,6 @@ status_message_dict = status_message_instance.to_dict() # create an instance of StatusMessage from a dict status_message_from_dict = StatusMessage.from_dict(status_message_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/TimeMode.md b/pyvcell/_internal/api/vcell_client/docs/TimeMode.md new file mode 100644 index 0000000..fcf7d2d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/TimeMode.md @@ -0,0 +1,12 @@ +# TimeMode + + +## Enum + +* `TIME_POINT` (value: `'TIME_POINT'`) + +* `TIME_RANGE` (value: `'TIME_RANGE'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/TimeSpecs.md b/pyvcell/_internal/api/vcell_client/docs/TimeSpecs.md new file mode 100644 index 0000000..592fda6 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/TimeSpecs.md @@ -0,0 +1,32 @@ +# TimeSpecs + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**begin_time_index** | **int** | | [optional] +**end_time_index** | **int** | | [optional] +**all_times** | **List[float]** | | [optional] +**mode** | [**TimeMode**](TimeMode.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.time_specs import TimeSpecs + +# TODO update the JSON string below +json = "{}" +# create an instance of TimeSpecs from a JSON string +time_specs_instance = TimeSpecs.from_json(json) +# print the JSON string representation of the object +print(TimeSpecs.to_json()) + +# convert the object into a dict +time_specs_dict = time_specs_instance.to_dict() +# create an instance of TimeSpecs from a dict +time_specs_from_dict = TimeSpecs.from_dict(time_specs_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/User.md b/pyvcell/_internal/api/vcell_client/docs/User.md index 532fd01..0b92a28 100644 --- a/pyvcell/_internal/api/vcell_client/docs/User.md +++ b/pyvcell/_internal/api/vcell_client/docs/User.md @@ -1,13 +1,13 @@ # User + ## Properties -| Name | Type | Description | Notes | -| ---------------- | --------------------------- | ----------- | ---------- | -| **user_name** | **str** | | [optional] | -| **key** | [**KeyValue**](KeyValue.md) | | [optional] | -| **name** | **str** | | [optional] | -| **test_account** | **bool** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**user_name** | **str** | | [optional] +**key** | **str** | | [optional] +**my_specials** | [**List[SPECIALCLAIM]**](SPECIALCLAIM.md) | | [optional] ## Example @@ -26,5 +26,6 @@ user_dict = user_instance.to_dict() # create an instance of User from a dict user_from_dict = User.from_dict(user_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/UserIdentityJSONSafe.md b/pyvcell/_internal/api/vcell_client/docs/UserIdentityJSONSafe.md index 4532488..e707cb3 100644 --- a/pyvcell/_internal/api/vcell_client/docs/UserIdentityJSONSafe.md +++ b/pyvcell/_internal/api/vcell_client/docs/UserIdentityJSONSafe.md @@ -1,14 +1,15 @@ # UserIdentityJSONSafe + ## Properties -| Name | Type | Description | Notes | -| --------------- | --------- | ----------- | ---------- | -| **mapped** | **bool** | | [optional] | -| **user_name** | **str** | | [optional] | -| **id** | **float** | | [optional] | -| **subject** | **str** | | [optional] | -| **insert_date** | **str** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**mapped** | **bool** | | [optional] +**user_name** | **str** | | [optional] +**id** | **float** | | [optional] +**subject** | **str** | | [optional] +**insert_date** | **str** | | [optional] ## Example @@ -27,5 +28,6 @@ user_identity_json_safe_dict = user_identity_json_safe_instance.to_dict() # create an instance of UserIdentityJSONSafe from a dict user_identity_json_safe_from_dict = UserIdentityJSONSafe.from_dict(user_identity_json_safe_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/UserLoginInfoForMapping.md b/pyvcell/_internal/api/vcell_client/docs/UserLoginInfoForMapping.md index b6859a5..84a02ef 100644 --- a/pyvcell/_internal/api/vcell_client/docs/UserLoginInfoForMapping.md +++ b/pyvcell/_internal/api/vcell_client/docs/UserLoginInfoForMapping.md @@ -1,11 +1,12 @@ # UserLoginInfoForMapping + ## Properties -| Name | Type | Description | Notes | -| ------------ | ------- | ----------- | ---------- | -| **user_id** | **str** | | [optional] | -| **password** | **str** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**user_id** | **str** | | [optional] +**password** | **str** | | [optional] ## Example @@ -24,5 +25,6 @@ user_login_info_for_mapping_dict = user_login_info_for_mapping_instance.to_dict( # create an instance of UserLoginInfoForMapping from a dict user_login_info_for_mapping_from_dict = UserLoginInfoForMapping.from_dict(user_login_info_for_mapping_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/UserRegistrationInfo.md b/pyvcell/_internal/api/vcell_client/docs/UserRegistrationInfo.md index 64f078f..4bb8fb4 100644 --- a/pyvcell/_internal/api/vcell_client/docs/UserRegistrationInfo.md +++ b/pyvcell/_internal/api/vcell_client/docs/UserRegistrationInfo.md @@ -1,14 +1,15 @@ # UserRegistrationInfo + ## Properties -| Name | Type | Description | Notes | -| ---------------------- | -------- | ----------- | ---------- | -| **user_id** | **str** | | [optional] | -| **title** | **str** | | [optional] | -| **organization** | **str** | | [optional] | -| **country** | **str** | | [optional] | -| **email_notification** | **bool** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**user_id** | **str** | | [optional] +**title** | **str** | | [optional] +**organization** | **str** | | [optional] +**country** | **str** | | [optional] +**email_notification** | **bool** | | [optional] ## Example @@ -27,5 +28,6 @@ user_registration_info_dict = user_registration_info_instance.to_dict() # create an instance of UserRegistrationInfo from a dict user_registration_info_from_dict = UserRegistrationInfo.from_dict(user_registration_info_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md index 99b13e3..d10ec4c 100644 --- a/pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md @@ -1,37 +1,38 @@ -# pyvcell.\_internal.api.vcell_client.UsersResourceApi - -All URIs are relative to *https://vcell-dev.cam.uchc.edu* - -| Method | HTTP request | Description | -| -------------------------------------------------------------------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------- | -| [**forgot_legacy_password**](UsersResourceApi.md#forgot_legacy_password) | **POST** /api/v1/users/forgotLegacyPassword | The end user has forgotten the legacy password they used for VCell, so they will be emailed it. | -| [**get_guest_legacy_api_token**](UsersResourceApi.md#get_guest_legacy_api_token) | **POST** /api/v1/users/guestBearerToken | Method to get legacy tokens for guest users | -| [**get_legacy_api_token**](UsersResourceApi.md#get_legacy_api_token) | **POST** /api/v1/users/bearerToken | Get token for legacy API | -| [**get_mapped_user**](UsersResourceApi.md#get_mapped_user) | **GET** /api/v1/users/mappedUser | Get mapped VCell identity | -| [**get_me**](UsersResourceApi.md#get_me) | **GET** /api/v1/users/me | Get current user | -| [**map_new_user**](UsersResourceApi.md#map_new_user) | **POST** /api/v1/users/newUser | create vcell user | -| [**map_user**](UsersResourceApi.md#map_user) | **POST** /api/v1/users/mapUser | map vcell user | -| [**process_magic_link**](UsersResourceApi.md#process_magic_link) | **GET** /api/v1/users/processMagicLink | Process the magic link and map the user | -| [**request_recovery_email**](UsersResourceApi.md#request_recovery_email) | **POST** /api/v1/users/requestRecoveryEmail | request a recovery email to link a VCell account. | -| [**unmap_user**](UsersResourceApi.md#unmap_user) | **PUT** /api/v1/users/unmapUser/{userName} | remove vcell identity mapping | +# pyvcell._internal.api.vcell_client.UsersResourceApi -# **forgot_legacy_password** +All URIs are relative to *https://vcell.cam.uchc.edu* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**forgot_legacy_password**](UsersResourceApi.md#forgot_legacy_password) | **POST** /api/v1/users/forgotLegacyPassword | The end user has forgotten the legacy password they used for VCell, so they will be emailed it. +[**get_guest_legacy_api_token**](UsersResourceApi.md#get_guest_legacy_api_token) | **POST** /api/v1/users/guestBearerToken | Method to get legacy tokens for guest users +[**get_legacy_api_token**](UsersResourceApi.md#get_legacy_api_token) | **POST** /api/v1/users/bearerToken | Get token for legacy API +[**get_mapped_user**](UsersResourceApi.md#get_mapped_user) | **GET** /api/v1/users/mappedUser | Get mapped VCell identity +[**get_me**](UsersResourceApi.md#get_me) | **GET** /api/v1/users/me | Get current user +[**map_new_user**](UsersResourceApi.md#map_new_user) | **POST** /api/v1/users/newUser | create vcell user +[**map_user**](UsersResourceApi.md#map_user) | **POST** /api/v1/users/mapUser | map vcell user +[**process_magic_link**](UsersResourceApi.md#process_magic_link) | **GET** /api/v1/users/processMagicLink | Process the magic link and map the user +[**request_recovery_email**](UsersResourceApi.md#request_recovery_email) | **POST** /api/v1/users/requestRecoveryEmail | request a recovery email to link a VCell account. +[**unmap_user**](UsersResourceApi.md#unmap_user) | **PUT** /api/v1/users/unmapUser/{userName} | remove vcell identity mapping + +# **forgot_legacy_password** > forgot_legacy_password(user_id=user_id) The end user has forgotten the legacy password they used for VCell, so they will be emailed it. ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -43,7 +44,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.UsersResourceApi(api_client) - user_id = 'user_id_example' # str | (optional) + user_id = 'user_id_example' # str | (optional) try: # The end user has forgotten the legacy password they used for VCell, so they will be emailed it. @@ -52,11 +53,14 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->forgot_legacy_password: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ----------- | ------- | ----------- | ---------- | -| **user_id** | **str** | | [optional] | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **user_id** | **str**| | [optional] ### Return type @@ -68,40 +72,41 @@ void (empty response body) ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: Not defined + - **Content-Type**: Not defined + - **Accept**: Not defined ### HTTP response details -| Status code | Description | Response headers | -| ----------- | ----------------------------- | ---------------- | -| **200** | Legacy password sent in email | - | -| **401** | Need to login to Auth0 | - | -| **403** | Not Allowed | - | -| **500** | Internal Error | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Legacy password sent in email | - | +**401** | Need to login to Auth0 | - | +**403** | Not Allowed | - | +**500** | Internal Error | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_guest_legacy_api_token** - > AccesTokenRepresentationRecord get_guest_legacy_api_token() Method to get legacy tokens for guest users ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.acces_token_representation_record import AccesTokenRepresentationRecord from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) + # Enter a context with an instance of the API client with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class @@ -116,6 +121,8 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->get_guest_legacy_api_token: %s\n" % e) ``` + + ### Parameters This endpoint does not need any parameter. @@ -130,35 +137,36 @@ No authorization required ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/json + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details | Status code | Description | Response headers | -| ----------- | ----------- | ---------------- | -| **200** | OK | - | +|-------------|-------------|------------------| +**200** | OK | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_legacy_api_token** - > AccesTokenRepresentationRecord get_legacy_api_token() Get token for legacy API ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.acces_token_representation_record import AccesTokenRepresentationRecord from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -180,6 +188,8 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->get_legacy_api_token: %s\n" % e) ``` + + ### Parameters This endpoint does not need any parameter. @@ -194,37 +204,38 @@ This endpoint does not need any parameter. ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/json + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **200** | OK | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_mapped_user** - > UserIdentityJSONSafe get_mapped_user() Get mapped VCell identity ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.user_identity_json_safe import UserIdentityJSONSafe from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -246,6 +257,8 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->get_mapped_user: %s\n" % e) ``` + + ### Parameters This endpoint does not need any parameter. @@ -260,39 +273,42 @@ This endpoint does not need any parameter. ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/json + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | ---------------------------------- | ---------------- | -| **200** | Successful, returning the identity | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful, returning the identity | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**409** | Conflict with server state. | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_me** - > Identity get_me() Get current user ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.identity import Identity from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) + # Enter a context with an instance of the API client with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class @@ -307,6 +323,8 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->get_me: %s\n" % e) ``` + + ### Parameters This endpoint does not need any parameter. @@ -321,35 +339,35 @@ No authorization required ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/json + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details | Status code | Description | Response headers | -| ----------- | ----------- | ---------------- | -| **200** | OK | - | +|-------------|-------------|------------------| +**200** | OK | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **map_new_user** - > map_new_user(user_registration_info=user_registration_info) create vcell user ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.user_registration_info import UserRegistrationInfo from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -361,7 +379,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.UsersResourceApi(api_client) - user_registration_info = pyvcell._internal.api.vcell_client.UserRegistrationInfo() # UserRegistrationInfo | (optional) + user_registration_info = pyvcell._internal.api.vcell_client.UserRegistrationInfo() # UserRegistrationInfo | (optional) try: # create vcell user @@ -370,11 +388,14 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->map_new_user: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| -------------------------- | --------------------------------------------------- | ----------- | ---------- | -| **user_registration_info** | [**UserRegistrationInfo**](UserRegistrationInfo.md) | | [optional] | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **user_registration_info** | [**UserRegistrationInfo**](UserRegistrationInfo.md)| | [optional] ### Return type @@ -386,38 +407,39 @@ void (empty response body) ### HTTP request headers -- **Content-Type**: application/json -- **Accept**: Not defined + - **Content-Type**: application/json + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | ------------------------------------------------ | ---------------- | -| **200** | Successful, returning the identity | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | -| **409** | VCell Identity not mapped, userid already exists | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful, returning the identity | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**409** | VCell Identity not mapped, userid already exists | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **map_user** - > bool map_user(user_login_info_for_mapping=user_login_info_for_mapping) map vcell user ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.user_login_info_for_mapping import UserLoginInfoForMapping from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -429,7 +451,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.UsersResourceApi(api_client) - user_login_info_for_mapping = pyvcell._internal.api.vcell_client.UserLoginInfoForMapping() # UserLoginInfoForMapping | (optional) + user_login_info_for_mapping = pyvcell._internal.api.vcell_client.UserLoginInfoForMapping() # UserLoginInfoForMapping | (optional) try: # map vcell user @@ -440,11 +462,14 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->map_user: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ------------------------------- | --------------------------------------------------------- | ----------- | ---------- | -| **user_login_info_for_mapping** | [**UserLoginInfoForMapping**](UserLoginInfoForMapping.md) | | [optional] | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **user_login_info_for_mapping** | [**UserLoginInfoForMapping**](UserLoginInfoForMapping.md)| | [optional] ### Return type @@ -456,43 +481,45 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### HTTP request headers -- **Content-Type**: application/json -- **Accept**: application/json + - **Content-Type**: application/json + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **200** | OK | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **process_magic_link** - > process_magic_link(magic=magic) Process the magic link and map the user ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) + # Enter a context with an instance of the API client with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.UsersResourceApi(api_client) - magic = 'magic_example' # str | (optional) + magic = 'magic_example' # str | (optional) try: # Process the magic link and map the user @@ -501,11 +528,14 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->process_magic_link: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| --------- | ------- | ----------- | ---------- | -| **magic** | **str** | | [optional] | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **magic** | **str**| | [optional] ### Return type @@ -517,35 +547,37 @@ No authorization required ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: Not defined + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | ----------------------------- | ---------------- | -| **200** | User mapped successfully | - | -| **400** | Invalid or expired magic link | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | User mapped successfully | - | +**400** | Invalid or expired magic link | - | +**401** | Not Authenticated | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **request_recovery_email** - > request_recovery_email(email=email, user_id=user_id) request a recovery email to link a VCell account. ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -557,8 +589,8 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.UsersResourceApi(api_client) - email = 'email_example' # str | (optional) - user_id = 'user_id_example' # str | (optional) + email = 'email_example' # str | (optional) + user_id = 'user_id_example' # str | (optional) try: # request a recovery email to link a VCell account. @@ -567,12 +599,15 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->request_recovery_email: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ----------- | ------- | ----------- | ---------- | -| **email** | **str** | | [optional] | -| **user_id** | **str** | | [optional] | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **email** | **str**| | [optional] + **user_id** | **str**| | [optional] ### Return type @@ -584,37 +619,39 @@ void (empty response body) ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: Not defined + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | --------------------------------------- | ---------------- | -| **200** | magic link sent in email if appropriate | - | -| **400** | unable to process request | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | magic link sent in email if appropriate | - | +**400** | unable to process request | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**404** | Not found | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **unmap_user** - > bool unmap_user(user_name) remove vcell identity mapping ### Example + ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -626,7 +663,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.UsersResourceApi(api_client) - user_name = 'user_name_example' # str | + user_name = 'user_name_example' # str | try: # remove vcell identity mapping @@ -637,11 +674,14 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->unmap_user: %s\n" % e) ``` + + ### Parameters -| Name | Type | Description | Notes | -| ------------- | ------- | ----------- | ----- | -| **user_name** | **str** | | + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **user_name** | **str**| | ### Return type @@ -653,15 +693,17 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### HTTP request headers -- **Content-Type**: Not defined -- **Accept**: application/json + - **Content-Type**: Not defined + - **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | -------------- | ---------------- | -| **200** | OK | - | -| **401** | Not Authorized | - | -| **403** | Not Allowed | - | +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/pyvcell/_internal/api/vcell_client/docs/VCDocumentType.md b/pyvcell/_internal/api/vcell_client/docs/VCDocumentType.md new file mode 100644 index 0000000..3730ea8 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VCDocumentType.md @@ -0,0 +1,16 @@ +# VCDocumentType + + +## Enum + +* `BIOMODEL_DOC` (value: `'BIOMODEL_DOC'`) + +* `MATHMODEL_DOC` (value: `'MATHMODEL_DOC'`) + +* `GEOMETRY_DOC` (value: `'GEOMETRY_DOC'`) + +* `EXTERNALFILE_DOC` (value: `'EXTERNALFILE_DOC'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md new file mode 100644 index 0000000..4589d71 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md @@ -0,0 +1,350 @@ +# pyvcell._internal.api.vcell_client.VCImageResourceApi + +All URIs are relative to *https://vcell.cam.uchc.edu* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**delete_image_vcml**](VCImageResourceApi.md#delete_image_vcml) | **DELETE** /api/v1/image/{id} | +[**get_image_summaries**](VCImageResourceApi.md#get_image_summaries) | **GET** /api/v1/image/summaries | +[**get_image_summary**](VCImageResourceApi.md#get_image_summary) | **GET** /api/v1/image/summary/{id} | +[**get_image_vcml**](VCImageResourceApi.md#get_image_vcml) | **GET** /api/v1/image/{id} | +[**save_image_vcml**](VCImageResourceApi.md#save_image_vcml) | **POST** /api/v1/image | + + +# **delete_image_vcml** +> delete_image_vcml(id) + +Remove specific image VCML. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.VCImageResourceApi(api_client) + id = 'id_example' # str | + + try: + api_instance.delete_image_vcml(id) + except Exception as e: + print("Exception when calling VCImageResourceApi->delete_image_vcml: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | No Content | - | +**401** | Not Authenticated | - | +**403** | Not Allowed | - | +**404** | Not found | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_image_summaries** +> List[VCImageSummary] get_image_summaries(include_public_and_shared=include_public_and_shared) + +Return Image summaries. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.models.vc_image_summary import VCImageSummary +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.VCImageResourceApi(api_client) + include_public_and_shared = True # bool | Include Image summaries that are public and shared with the requester. Default is true. (optional) + + try: + api_response = api_instance.get_image_summaries(include_public_and_shared=include_public_and_shared) + print("The response of VCImageResourceApi->get_image_summaries:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling VCImageResourceApi->get_image_summaries: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **include_public_and_shared** | **bool**| Include Image summaries that are public and shared with the requester. Default is true. | [optional] + +### Return type + +[**List[VCImageSummary]**](VCImageSummary.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_image_summary** +> VCImageSummary get_image_summary(id) + +All of the miscellaneous information about an Image (Extent, ISize, preview, etc...), but not the actual Image itself. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.models.vc_image_summary import VCImageSummary +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.VCImageResourceApi(api_client) + id = 'id_example' # str | + + try: + api_response = api_instance.get_image_summary(id) + print("The response of VCImageResourceApi->get_image_summary:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling VCImageResourceApi->get_image_summary: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +[**VCImageSummary**](VCImageSummary.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**403** | Not Allowed | - | +**404** | Not found | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_image_vcml** +> str get_image_vcml(id) + +Get specific image VCML. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.VCImageResourceApi(api_client) + id = 'id_example' # str | + + try: + api_response = api_instance.get_image_vcml(id) + print("The response of VCImageResourceApi->get_image_vcml:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling VCImageResourceApi->get_image_vcml: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +**str** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: text/plain, application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**403** | Not Allowed | - | +**404** | Not found | - | +**422** | Unprocessable content submitted | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **save_image_vcml** +> str save_image_vcml(body, name=name) + +Save the VCML representation of an image. + +### Example + + +```python +import pyvcell._internal.api.vcell_client +from pyvcell._internal.api.vcell_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu +# See configuration.py for a list of all supported configuration parameters. +configuration = pyvcell._internal.api.vcell_client.Configuration( + host = "https://vcell.cam.uchc.edu" +) + + +# Enter a context with an instance of the API client +with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = pyvcell._internal.api.vcell_client.VCImageResourceApi(api_client) + body = 'body_example' # str | + name = 'name_example' # str | Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML. (optional) + + try: + api_response = api_instance.save_image_vcml(body, name=name) + print("The response of VCImageResourceApi->save_image_vcml:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling VCImageResourceApi->save_image_vcml: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **str**| | + **name** | **str**| Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML. | [optional] + +### Return type + +**str** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: text/plain, application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**401** | Not Authenticated | - | +**422** | Unprocessable content submitted | - | +**500** | Data Access Exception | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/pyvcell/_internal/api/vcell_client/docs/VCImageSummary.md b/pyvcell/_internal/api/vcell_client/docs/VCImageSummary.md new file mode 100644 index 0000000..d0c1d9e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VCImageSummary.md @@ -0,0 +1,33 @@ +# VCImageSummary + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**size** | [**ISize**](ISize.md) | | [optional] +**extent** | [**Extent**](Extent.md) | | [optional] +**version** | [**Version**](Version.md) | | [optional] +**preview** | [**GIFImage**](GIFImage.md) | | [optional] +**software_version** | [**VCellSoftwareVersion**](VCellSoftwareVersion.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.vc_image_summary import VCImageSummary + +# TODO update the JSON string below +json = "{}" +# create an instance of VCImageSummary from a JSON string +vc_image_summary_instance = VCImageSummary.from_json(json) +# print the JSON string representation of the object +print(VCImageSummary.to_json()) + +# convert the object into a dict +vc_image_summary_dict = vc_image_summary_instance.to_dict() +# create an instance of VCImageSummary from a dict +vc_image_summary_from_dict = VCImageSummary.from_dict(vc_image_summary_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/VCSimulationIdentifier.md b/pyvcell/_internal/api/vcell_client/docs/VCSimulationIdentifier.md index 003951c..20548ca 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VCSimulationIdentifier.md +++ b/pyvcell/_internal/api/vcell_client/docs/VCSimulationIdentifier.md @@ -1,12 +1,13 @@ # VCSimulationIdentifier + ## Properties -| Name | Type | Description | Notes | -| ------------------ | --------------------------- | ----------- | ---------- | -| **simulation_key** | [**KeyValue**](KeyValue.md) | | [optional] | -| **owner** | [**User**](User.md) | | [optional] | -| **i_d** | **str** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**simulation_key** | **str** | | [optional] +**owner** | [**User**](User.md) | | [optional] +**id** | **str** | | [optional] ## Example @@ -25,5 +26,6 @@ vc_simulation_identifier_dict = vc_simulation_identifier_instance.to_dict() # create an instance of VCSimulationIdentifier from a dict vc_simulation_identifier_from_dict = VCSimulationIdentifier.from_dict(vc_simulation_identifier_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/VCellHTTPError.md b/pyvcell/_internal/api/vcell_client/docs/VCellHTTPError.md new file mode 100644 index 0000000..b4e041a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VCellHTTPError.md @@ -0,0 +1,30 @@ +# VCellHTTPError + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**exception_type** | **str** | | [optional] +**message** | **str** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.v_cell_http_error import VCellHTTPError + +# TODO update the JSON string below +json = "{}" +# create an instance of VCellHTTPError from a JSON string +v_cell_http_error_instance = VCellHTTPError.from_json(json) +# print the JSON string representation of the object +print(VCellHTTPError.to_json()) + +# convert the object into a dict +v_cell_http_error_dict = v_cell_http_error_instance.to_dict() +# create an instance of VCellHTTPError from a dict +v_cell_http_error_from_dict = VCellHTTPError.from_dict(v_cell_http_error_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/VCellSite.md b/pyvcell/_internal/api/vcell_client/docs/VCellSite.md new file mode 100644 index 0000000..60b6714 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VCellSite.md @@ -0,0 +1,18 @@ +# VCellSite + + +## Enum + +* `ALPHA` (value: `'alpha'`) + +* `BETA` (value: `'beta'`) + +* `REL` (value: `'rel'`) + +* `OTHER` (value: `'other'`) + +* `UNKNOWN` (value: `'unknown'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/VCellSoftwareVersion.md b/pyvcell/_internal/api/vcell_client/docs/VCellSoftwareVersion.md new file mode 100644 index 0000000..d44a4a1 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VCellSoftwareVersion.md @@ -0,0 +1,37 @@ +# VCellSoftwareVersion + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**software_version_string** | **str** | | [optional] +**vcell_site** | [**VCellSite**](VCellSite.md) | | [optional] +**build_number** | **str** | | [optional] +**version_number** | **str** | | [optional] +**major_version** | **int** | | [optional] +**minor_version** | **int** | | [optional] +**patch_version** | **int** | | [optional] +**build_int** | **int** | | [optional] +**description** | **str** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.v_cell_software_version import VCellSoftwareVersion + +# TODO update the JSON string below +json = "{}" +# create an instance of VCellSoftwareVersion from a JSON string +v_cell_software_version_instance = VCellSoftwareVersion.from_json(json) +# print the JSON string representation of the object +print(VCellSoftwareVersion.to_json()) + +# convert the object into a dict +v_cell_software_version_dict = v_cell_software_version_instance.to_dict() +# create an instance of VCellSoftwareVersion from a dict +v_cell_software_version_from_dict = VCellSoftwareVersion.from_dict(v_cell_software_version_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/VariableDomain.md b/pyvcell/_internal/api/vcell_client/docs/VariableDomain.md index 6970765..645265b 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VariableDomain.md +++ b/pyvcell/_internal/api/vcell_client/docs/VariableDomain.md @@ -1,19 +1,22 @@ # VariableDomain + ## Enum -- `VARIABLEDOMAIN_POSTPROCESSING` (value: `'VARIABLEDOMAIN_POSTPROCESSING'`) +* `VARIABLEDOMAIN_POSTPROCESSING` (value: `'VARIABLEDOMAIN_POSTPROCESSING'`) -- `VARIABLEDOMAIN_UNKNOWN` (value: `'VARIABLEDOMAIN_UNKNOWN'`) +* `VARIABLEDOMAIN_UNKNOWN` (value: `'VARIABLEDOMAIN_UNKNOWN'`) -- `VARIABLEDOMAIN_VOLUME` (value: `'VARIABLEDOMAIN_VOLUME'`) +* `VARIABLEDOMAIN_VOLUME` (value: `'VARIABLEDOMAIN_VOLUME'`) -- `VARIABLEDOMAIN_MEMBRANE` (value: `'VARIABLEDOMAIN_MEMBRANE'`) +* `VARIABLEDOMAIN_MEMBRANE` (value: `'VARIABLEDOMAIN_MEMBRANE'`) -- `VARIABLEDOMAIN_CONTOUR` (value: `'VARIABLEDOMAIN_CONTOUR'`) +* `VARIABLEDOMAIN_CONTOUR` (value: `'VARIABLEDOMAIN_CONTOUR'`) -- `VARIABLEDOMAIN_NONSPATIAL` (value: `'VARIABLEDOMAIN_NONSPATIAL'`) +* `VARIABLEDOMAIN_NONSPATIAL` (value: `'VARIABLEDOMAIN_NONSPATIAL'`) -- `VARIABLEDOMAIN_POINT` (value: `'VARIABLEDOMAIN_POINT'`) +* `VARIABLEDOMAIN_POINT` (value: `'VARIABLEDOMAIN_POINT'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/VariableMode.md b/pyvcell/_internal/api/vcell_client/docs/VariableMode.md new file mode 100644 index 0000000..8521a74 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VariableMode.md @@ -0,0 +1,14 @@ +# VariableMode + + +## Enum + +* `VARIABLE_ONE` (value: `'VARIABLE_ONE'`) + +* `VARIABLE_MULTI` (value: `'VARIABLE_MULTI'`) + +* `VARIABLE_ALL` (value: `'VARIABLE_ALL'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/VariableSpecs.md b/pyvcell/_internal/api/vcell_client/docs/VariableSpecs.md new file mode 100644 index 0000000..1743c39 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VariableSpecs.md @@ -0,0 +1,30 @@ +# VariableSpecs + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**variable_names** | **List[str]** | | [optional] +**mode** | [**VariableMode**](VariableMode.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.variable_specs import VariableSpecs + +# TODO update the JSON string below +json = "{}" +# create an instance of VariableSpecs from a JSON string +variable_specs_instance = VariableSpecs.from_json(json) +# print the JSON string representation of the object +print(VariableSpecs.to_json()) + +# convert the object into a dict +variable_specs_dict = variable_specs_instance.to_dict() +# create an instance of VariableSpecs from a dict +variable_specs_from_dict = VariableSpecs.from_dict(variable_specs_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/VariableType.md b/pyvcell/_internal/api/vcell_client/docs/VariableType.md index 66555bb..69fefa5 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VariableType.md +++ b/pyvcell/_internal/api/vcell_client/docs/VariableType.md @@ -1,18 +1,19 @@ # VariableType + ## Properties -| Name | Type | Description | Notes | -| ------------------- | --------------------------------------- | ----------- | ---------- | -| **type** | **int** | | [optional] | -| **variable_domain** | [**VariableDomain**](VariableDomain.md) | | [optional] | -| **name** | **str** | | [optional] | -| **units** | **str** | | [optional] | -| **label** | **str** | | [optional] | -| **legacy_warn** | **bool** | | [optional] | -| **default_label** | **str** | | [optional] | -| **default_units** | **str** | | [optional] | -| **type_name** | **str** | | [optional] | +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **int** | | [optional] +**variable_domain** | [**VariableDomain**](VariableDomain.md) | | [optional] +**name** | **str** | | [optional] +**units** | **str** | | [optional] +**label** | **str** | | [optional] +**legacy_warn** | **bool** | | [optional] +**default_label** | **str** | | [optional] +**default_units** | **str** | | [optional] +**type_name** | **str** | | [optional] ## Example @@ -31,5 +32,6 @@ variable_type_dict = variable_type_instance.to_dict() # create an instance of VariableType from a dict variable_type_from_dict = VariableType.from_dict(variable_type_dict) ``` - [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/Version.md b/pyvcell/_internal/api/vcell_client/docs/Version.md new file mode 100644 index 0000000..257c8cd --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/Version.md @@ -0,0 +1,37 @@ +# Version + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**version_key** | **str** | | [optional] +**annot** | **str** | | [optional] +**branch_id** | **float** | | [optional] +**branch_point_ref_key** | **str** | | [optional] +**var_date** | **datetime** | | [optional] +**flag** | [**VersionFlag**](VersionFlag.md) | | [optional] +**group_access** | [**GroupAccess**](GroupAccess.md) | | [optional] +**name** | **str** | | [optional] +**owner** | [**User**](User.md) | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.version import Version + +# TODO update the JSON string below +json = "{}" +# create an instance of Version from a JSON string +version_instance = Version.from_json(json) +# print the JSON string representation of the object +print(Version.to_json()) + +# convert the object into a dict +version_dict = version_instance.to_dict() +# create an instance of Version from a dict +version_from_dict = Version.from_dict(version_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/docs/VersionFlag.md b/pyvcell/_internal/api/vcell_client/docs/VersionFlag.md new file mode 100644 index 0000000..75eec1e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VersionFlag.md @@ -0,0 +1,33 @@ +# VersionFlag + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**version_flag** | **int** | | [optional] +**int_value** | **int** | | [optional] +**archived** | **bool** | | [optional] +**current** | **bool** | | [optional] +**published** | **bool** | | [optional] + +## Example + +```python +from pyvcell._internal.api.vcell_client.models.version_flag import VersionFlag + +# TODO update the JSON string below +json = "{}" +# create an instance of VersionFlag from a JSON string +version_flag_instance = VersionFlag.from_json(json) +# print the JSON string representation of the object +print(VersionFlag.to_json()) + +# convert the object into a dict +version_flag_dict = version_flag_instance.to_dict() +# create an instance of VersionFlag from a dict +version_flag_from_dict = VersionFlag.from_dict(version_flag_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyvcell/_internal/api/vcell_client/exceptions.py b/pyvcell/_internal/api/vcell_client/exceptions.py index 181465c..bd4ce24 100644 --- a/pyvcell/_internal/api/vcell_client/exceptions.py +++ b/pyvcell/_internal/api/vcell_client/exceptions.py @@ -1,27 +1,27 @@ """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from typing import Any, Optional +from typing import Any, Optional from typing_extensions import Self - class OpenApiException(Exception): """The base exception class for all OpenAPIExceptions""" class ApiTypeError(OpenApiException, TypeError): - def __init__(self, msg, path_to_item=None, valid_classes=None, key_type=None) -> None: - """Raises an exception for TypeErrors + def __init__(self, msg, path_to_item=None, valid_classes=None, + key_type=None) -> None: + """ Raises an exception for TypeErrors Args: msg (str): the exception message @@ -43,7 +43,7 @@ def __init__(self, msg, path_to_item=None, valid_classes=None, key_type=None) -> self.key_type = key_type full_msg = msg if path_to_item: - full_msg = f"{msg} at {render_path(path_to_item)}" + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) super(ApiTypeError, self).__init__(full_msg) @@ -61,7 +61,7 @@ def __init__(self, msg, path_to_item=None) -> None: self.path_to_item = path_to_item full_msg = msg if path_to_item: - full_msg = f"{msg} at {render_path(path_to_item)}" + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) super(ApiValueError, self).__init__(full_msg) @@ -80,7 +80,7 @@ def __init__(self, msg, path_to_item=None) -> None: self.path_to_item = path_to_item full_msg = msg if path_to_item: - full_msg = f"{msg} at {render_path(path_to_item)}" + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) super(ApiAttributeError, self).__init__(full_msg) @@ -97,15 +97,16 @@ def __init__(self, msg, path_to_item=None) -> None: self.path_to_item = path_to_item full_msg = msg if path_to_item: - full_msg = f"{msg} at {render_path(path_to_item)}" + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) super(ApiKeyError, self).__init__(full_msg) class ApiException(OpenApiException): + def __init__( - self, - status=None, - reason=None, + self, + status=None, + reason=None, http_resp=None, *, body: Optional[str] = None, @@ -124,17 +125,17 @@ def __init__( self.reason = http_resp.reason if self.body is None: try: - self.body = http_resp.data.decode("utf-8") + self.body = http_resp.data.decode('utf-8') except Exception: pass - self.headers = http_resp.getheaders() + self.headers = http_resp.headers @classmethod def from_response( - cls, - *, - http_resp, - body: Optional[str], + cls, + *, + http_resp, + body: Optional[str], data: Optional[Any], ) -> Self: if http_resp.status == 400: @@ -149,18 +150,30 @@ def from_response( if http_resp.status == 404: raise NotFoundException(http_resp=http_resp, body=body, data=data) + # Added new conditions for 409 and 422 + if http_resp.status == 409: + raise ConflictException(http_resp=http_resp, body=body, data=data) + + if http_resp.status == 422: + raise UnprocessableEntityException(http_resp=http_resp, body=body, data=data) + if 500 <= http_resp.status <= 599: raise ServiceException(http_resp=http_resp, body=body, data=data) raise ApiException(http_resp=http_resp, body=body, data=data) def __str__(self): """Custom error messages for exception""" - error_message = f"({self.status})\n" f"Reason: {self.reason}\n" + error_message = "({0})\n"\ + "Reason: {1}\n".format(self.status, self.reason) if self.headers: - error_message += f"HTTP response headers: {self.headers}\n" + error_message += "HTTP response headers: {0}\n".format( + self.headers) - if self.data or self.body: - error_message += f"HTTP response body: {self.data or self.body}\n" + if self.body: + error_message += "HTTP response body: {0}\n".format(self.body) + + if self.data: + error_message += "HTTP response data: {0}\n".format(self.data) return error_message @@ -185,12 +198,22 @@ class ServiceException(ApiException): pass +class ConflictException(ApiException): + """Exception for HTTP 409 Conflict.""" + pass + + +class UnprocessableEntityException(ApiException): + """Exception for HTTP 422 Unprocessable Entity.""" + pass + + def render_path(path_to_item): """Returns a string representation of a path""" result = "" for pth in path_to_item: if isinstance(pth, int): - result += f"[{pth}]" + result += "[{0}]".format(pth) else: - result += f"['{pth}']" + result += "['{0}']".format(pth) return result diff --git a/pyvcell/_internal/api/vcell_client/models/__init__.py b/pyvcell/_internal/api/vcell_client/models/__init__.py index a172dd9..82b67ea 100644 --- a/pyvcell/_internal/api/vcell_client/models/__init__.py +++ b/pyvcell/_internal/api/vcell_client/models/__init__.py @@ -2,96 +2,101 @@ # flake8: noqa """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. + Do not edit the class manually. """ # noqa: E501 # import models into model package from pyvcell._internal.api.vcell_client.models.acces_token_representation_record import AccesTokenRepresentationRecord -from pyvcell._internal.api.vcell_client.models.analyzed_results_from_field_data import AnalyzedResultsFromFieldData +from pyvcell._internal.api.vcell_client.models.analytic_curve import AnalyticCurve +from pyvcell._internal.api.vcell_client.models.annotated_function_dto import AnnotatedFunctionDTO +from pyvcell._internal.api.vcell_client.models.application_info import ApplicationInfo from pyvcell._internal.api.vcell_client.models.batch_system_type import BatchSystemType from pyvcell._internal.api.vcell_client.models.bio_model import BioModel +from pyvcell._internal.api.vcell_client.models.bio_model_child_summary import BioModelChildSummary +from pyvcell._internal.api.vcell_client.models.bio_model_summary import BioModelSummary from pyvcell._internal.api.vcell_client.models.biomodel_ref import BiomodelRef +from pyvcell._internal.api.vcell_client.models.composite_curve import CompositeCurve +from pyvcell._internal.api.vcell_client.models.control_point_curve import ControlPointCurve +from pyvcell._internal.api.vcell_client.models.coordinate import Coordinate +from pyvcell._internal.api.vcell_client.models.curve import Curve +from pyvcell._internal.api.vcell_client.models.curve_selection_info import CurveSelectionInfo from pyvcell._internal.api.vcell_client.models.data_identifier import DataIdentifier from pyvcell._internal.api.vcell_client.models.detailed_state import DetailedState from pyvcell._internal.api.vcell_client.models.domain import Domain +from pyvcell._internal.api.vcell_client.models.export_event import ExportEvent +from pyvcell._internal.api.vcell_client.models.export_progress_type import ExportProgressType +from pyvcell._internal.api.vcell_client.models.exportable_data_type import ExportableDataType from pyvcell._internal.api.vcell_client.models.extent import Extent from pyvcell._internal.api.vcell_client.models.external_data_identifier import ExternalDataIdentifier +from pyvcell._internal.api.vcell_client.models.field_data import FieldData from pyvcell._internal.api.vcell_client.models.field_data_reference import FieldDataReference -from pyvcell._internal.api.vcell_client.models.field_data_save_results import FieldDataSaveResults +from pyvcell._internal.api.vcell_client.models.field_data_saved_results import FieldDataSavedResults from pyvcell._internal.api.vcell_client.models.field_data_shape import FieldDataShape +from pyvcell._internal.api.vcell_client.models.function_category import FunctionCategory +from pyvcell._internal.api.vcell_client.models.gif_image import GIFImage +from pyvcell._internal.api.vcell_client.models.geometry_mode import GeometryMode +from pyvcell._internal.api.vcell_client.models.geometry_spec_dto import GeometrySpecDTO +from pyvcell._internal.api.vcell_client.models.geometry_summary import GeometrySummary +from pyvcell._internal.api.vcell_client.models.group_access import GroupAccess +from pyvcell._internal.api.vcell_client.models.group_access_all import GroupAccessAll +from pyvcell._internal.api.vcell_client.models.group_access_none import GroupAccessNone +from pyvcell._internal.api.vcell_client.models.group_access_some import GroupAccessSome from pyvcell._internal.api.vcell_client.models.hello_world_message import HelloWorldMessage from pyvcell._internal.api.vcell_client.models.htc_job_id import HtcJobID +from pyvcell._internal.api.vcell_client.models.human_readable_export_data import HumanReadableExportData from pyvcell._internal.api.vcell_client.models.i_size import ISize from pyvcell._internal.api.vcell_client.models.identity import Identity -from pyvcell._internal.api.vcell_client.models.key_value import KeyValue +from pyvcell._internal.api.vcell_client.models.math_model_child_summary import MathModelChildSummary +from pyvcell._internal.api.vcell_client.models.math_model_summary import MathModelSummary +from pyvcell._internal.api.vcell_client.models.math_type import MathType from pyvcell._internal.api.vcell_client.models.mathmodel_ref import MathmodelRef +from pyvcell._internal.api.vcell_client.models.model_type import ModelType +from pyvcell._internal.api.vcell_client.models.n5_export_request import N5ExportRequest from pyvcell._internal.api.vcell_client.models.origin import Origin from pyvcell._internal.api.vcell_client.models.publication import Publication +from pyvcell._internal.api.vcell_client.models.publication_info import PublicationInfo +from pyvcell._internal.api.vcell_client.models.specialclaim import SPECIALCLAIM +from pyvcell._internal.api.vcell_client.models.sampled_curve import SampledCurve from pyvcell._internal.api.vcell_client.models.scheduler_status import SchedulerStatus from pyvcell._internal.api.vcell_client.models.simulation_execution_status_record import SimulationExecutionStatusRecord from pyvcell._internal.api.vcell_client.models.simulation_job_status_record import SimulationJobStatusRecord from pyvcell._internal.api.vcell_client.models.simulation_message import SimulationMessage -from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import ( - SimulationQueueEntryStatusRecord, -) +from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import SimulationQueueEntryStatusRecord from pyvcell._internal.api.vcell_client.models.simulation_queue_id import SimulationQueueID -from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import ( - SimulationStatusPersistentRecord, -) +from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import SimulationStatusPersistentRecord +from pyvcell._internal.api.vcell_client.models.source_model import SourceModel +from pyvcell._internal.api.vcell_client.models.spatial_selection import SpatialSelection +from pyvcell._internal.api.vcell_client.models.spatial_selection_contour import SpatialSelectionContour +from pyvcell._internal.api.vcell_client.models.spatial_selection_membrane import SpatialSelectionMembrane +from pyvcell._internal.api.vcell_client.models.spatial_selection_volume import SpatialSelectionVolume +from pyvcell._internal.api.vcell_client.models.spline import Spline +from pyvcell._internal.api.vcell_client.models.standard_export_info import StandardExportInfo from pyvcell._internal.api.vcell_client.models.status import Status from pyvcell._internal.api.vcell_client.models.status_message import StatusMessage +from pyvcell._internal.api.vcell_client.models.time_mode import TimeMode +from pyvcell._internal.api.vcell_client.models.time_specs import TimeSpecs from pyvcell._internal.api.vcell_client.models.user import User from pyvcell._internal.api.vcell_client.models.user_identity_json_safe import UserIdentityJSONSafe from pyvcell._internal.api.vcell_client.models.user_login_info_for_mapping import UserLoginInfoForMapping from pyvcell._internal.api.vcell_client.models.user_registration_info import UserRegistrationInfo +from pyvcell._internal.api.vcell_client.models.vc_document_type import VCDocumentType +from pyvcell._internal.api.vcell_client.models.vc_image_summary import VCImageSummary from pyvcell._internal.api.vcell_client.models.vc_simulation_identifier import VCSimulationIdentifier +from pyvcell._internal.api.vcell_client.models.v_cell_http_error import VCellHTTPError +from pyvcell._internal.api.vcell_client.models.v_cell_site import VCellSite +from pyvcell._internal.api.vcell_client.models.v_cell_software_version import VCellSoftwareVersion from pyvcell._internal.api.vcell_client.models.variable_domain import VariableDomain +from pyvcell._internal.api.vcell_client.models.variable_mode import VariableMode +from pyvcell._internal.api.vcell_client.models.variable_specs import VariableSpecs from pyvcell._internal.api.vcell_client.models.variable_type import VariableType +from pyvcell._internal.api.vcell_client.models.version import Version +from pyvcell._internal.api.vcell_client.models.version_flag import VersionFlag -__all__ = [ - "AccesTokenRepresentationRecord", - "AnalyzedResultsFromFieldData", - "BatchSystemType", - "BioModel", - "BiomodelRef", - "DataIdentifier", - "DetailedState", - "Domain", - "Extent", - "ExternalDataIdentifier", - "FieldDataReference", - "FieldDataSaveResults", - "FieldDataShape", - "HelloWorldMessage", - "HtcJobID", - "ISize", - "Identity", - "KeyValue", - "MathmodelRef", - "Origin", - "Publication", - "SchedulerStatus", - "SimulationExecutionStatusRecord", - "SimulationJobStatusRecord", - "SimulationMessage", - "SimulationQueueEntryStatusRecord", - "SimulationQueueID", - "SimulationStatusPersistentRecord", - "Status", - "StatusMessage", - "User", - "UserIdentityJSONSafe", - "UserLoginInfoForMapping", - "UserRegistrationInfo", - "VCSimulationIdentifier", - "VariableDomain", - "VariableType", -] diff --git a/pyvcell/_internal/api/vcell_client/models/acces_token_representation_record.py b/pyvcell/_internal/api/vcell_client/models/acces_token_representation_record.py index eb92e8f..fc3f6d7 100644 --- a/pyvcell/_internal/api/vcell_client/models/acces_token_representation_record.py +++ b/pyvcell/_internal/api/vcell_client/models/acces_token_representation_record.py @@ -1,31 +1,32 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set from typing_extensions import Self - class AccesTokenRepresentationRecord(BaseModel): """ AccesTokenRepresentationRecord - """ - + """ # noqa: E501 token: Optional[StrictStr] = None creation_date_seconds: Optional[StrictInt] = Field(default=None, alias="creationDateSeconds") expire_date_seconds: Optional[StrictInt] = Field(default=None, alias="expireDateSeconds") @@ -39,6 +40,7 @@ class AccesTokenRepresentationRecord(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,7 +65,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -84,16 +87,15 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in AccesTokenRepresentationRecord) in the input: " - + _key - ) + raise ValueError("Error due to additional fields (not defined in AccesTokenRepresentationRecord) in the input: " + _key) _obj = cls.model_validate({ "token": obj.get("token"), "creationDateSeconds": obj.get("creationDateSeconds"), "expireDateSeconds": obj.get("expireDateSeconds"), "userId": obj.get("userId"), - "userKey": obj.get("userKey"), + "userKey": obj.get("userKey") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/analytic_curve.py b/pyvcell/_internal/api/vcell_client/models/analytic_curve.py new file mode 100644 index 0000000..b05a54a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/analytic_curve.py @@ -0,0 +1,130 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import ConfigDict, Field, StrictBool, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.coordinate import Coordinate +from pyvcell._internal.api.vcell_client.models.curve import Curve +from typing import Optional, Set +from typing_extensions import Self + +class AnalyticCurve(Curve): + """ + AnalyticCurve + """ # noqa: E501 + type: StrictStr + exp_x: Optional[StrictStr] = Field(default=None, alias="expX") + exp_y: Optional[StrictStr] = Field(default=None, alias="expY") + exp_z: Optional[StrictStr] = Field(default=None, alias="expZ") + offset: Optional[Coordinate] = None + analytic_offset: Optional[Coordinate] = Field(default=None, alias="analyticOffset") + default_num_samples: Optional[StrictInt] = Field(default=None, alias="defaultNumSamples") + segment_count: Optional[StrictInt] = Field(default=None, alias="segmentCount") + valid: Optional[StrictBool] = None + __properties: ClassVar[List[str]] = ["bClosed", "description", "type", "beginningCoordinate", "defaultNumSamples", "endingCoordinate", "numSamplePoints", "segmentCount", "spatialLength", "closed", "valid", "expX", "expY", "expZ", "offset", "analyticOffset"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of AnalyticCurve from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of beginning_coordinate + if self.beginning_coordinate: + _dict['beginningCoordinate'] = self.beginning_coordinate.to_dict() + # override the default output from pydantic by calling `to_dict()` of ending_coordinate + if self.ending_coordinate: + _dict['endingCoordinate'] = self.ending_coordinate.to_dict() + # override the default output from pydantic by calling `to_dict()` of offset + if self.offset: + _dict['offset'] = self.offset.to_dict() + # override the default output from pydantic by calling `to_dict()` of analytic_offset + if self.analytic_offset: + _dict['analyticOffset'] = self.analytic_offset.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of AnalyticCurve from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in AnalyticCurve) in the input: " + _key) + + _obj = cls.model_validate({ + "bClosed": obj.get("bClosed"), + "description": obj.get("description"), + "type": obj.get("type") if obj.get("type") is not None else 'AnalyticCurve', + "beginningCoordinate": Coordinate.from_dict(obj["beginningCoordinate"]) if obj.get("beginningCoordinate") is not None else None, + "defaultNumSamples": obj.get("defaultNumSamples"), + "endingCoordinate": Coordinate.from_dict(obj["endingCoordinate"]) if obj.get("endingCoordinate") is not None else None, + "numSamplePoints": obj.get("numSamplePoints"), + "segmentCount": obj.get("segmentCount"), + "spatialLength": obj.get("spatialLength"), + "closed": obj.get("closed"), + "valid": obj.get("valid"), + "expX": obj.get("expX"), + "expY": obj.get("expY"), + "expZ": obj.get("expZ"), + "offset": Coordinate.from_dict(obj["offset"]) if obj.get("offset") is not None else None, + "analyticOffset": Coordinate.from_dict(obj["analyticOffset"]) if obj.get("analyticOffset") is not None else None + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/annotated_function_dto.py b/pyvcell/_internal/api/vcell_client/models/annotated_function_dto.py new file mode 100644 index 0000000..d899080 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/annotated_function_dto.py @@ -0,0 +1,112 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.domain import Domain +from pyvcell._internal.api.vcell_client.models.function_category import FunctionCategory +from pyvcell._internal.api.vcell_client.models.variable_type import VariableType +from typing import Optional, Set +from typing_extensions import Self + +class AnnotatedFunctionDTO(BaseModel): + """ + AnnotatedFunctionDTO + """ # noqa: E501 + function_name: Optional[StrictStr] = Field(default=None, alias="functionName") + function_expression: Optional[StrictStr] = Field(default=None, alias="functionExpression") + error: Optional[StrictStr] = None + domain: Optional[Domain] = None + function_type: Optional[VariableType] = Field(default=None, alias="functionType") + category: Optional[FunctionCategory] = None + __properties: ClassVar[List[str]] = ["functionName", "functionExpression", "error", "domain", "functionType", "category"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of AnnotatedFunctionDTO from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of domain + if self.domain: + _dict['domain'] = self.domain.to_dict() + # override the default output from pydantic by calling `to_dict()` of function_type + if self.function_type: + _dict['functionType'] = self.function_type.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of AnnotatedFunctionDTO from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in AnnotatedFunctionDTO) in the input: " + _key) + + _obj = cls.model_validate({ + "functionName": obj.get("functionName"), + "functionExpression": obj.get("functionExpression"), + "error": obj.get("error"), + "domain": Domain.from_dict(obj["domain"]) if obj.get("domain") is not None else None, + "functionType": VariableType.from_dict(obj["functionType"]) if obj.get("functionType") is not None else None, + "category": obj.get("category") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/application_info.py b/pyvcell/_internal/api/vcell_client/models/application_info.py new file mode 100644 index 0000000..acbc657 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/application_info.py @@ -0,0 +1,100 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.math_type import MathType +from typing import Optional, Set +from typing_extensions import Self + +class ApplicationInfo(BaseModel): + """ + ApplicationInfo + """ # noqa: E501 + name: Optional[StrictStr] = None + type: Optional[MathType] = None + dimensions: Optional[StrictInt] = None + geometry_name: Optional[StrictStr] = Field(default=None, alias="geometryName") + __properties: ClassVar[List[str]] = ["name", "type", "dimensions", "geometryName"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of ApplicationInfo from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of ApplicationInfo from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in ApplicationInfo) in the input: " + _key) + + _obj = cls.model_validate({ + "name": obj.get("name"), + "type": obj.get("type"), + "dimensions": obj.get("dimensions"), + "geometryName": obj.get("geometryName") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/batch_system_type.py b/pyvcell/_internal/api/vcell_client/models/batch_system_type.py index 6f236df..37ca1c2 100644 --- a/pyvcell/_internal/api/vcell_client/models/batch_system_type.py +++ b/pyvcell/_internal/api/vcell_client/models/batch_system_type.py @@ -1,20 +1,21 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations +from __future__ import annotations import json from enum import Enum - from typing_extensions import Self @@ -26,11 +27,13 @@ class BatchSystemType(str, Enum): """ allowed enum values """ - PBS = "PBS" - SGE = "SGE" - SLURM = "SLURM" + PBS = 'PBS' + SGE = 'SGE' + SLURM = 'SLURM' @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of BatchSystemType from a JSON string""" return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/bio_model.py b/pyvcell/_internal/api/vcell_client/models/bio_model.py index 93e9995..300d5e7 100644 --- a/pyvcell/_internal/api/vcell_client/models/bio_model.py +++ b/pyvcell/_internal/api/vcell_client/models/bio_model.py @@ -1,33 +1,32 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set from typing_extensions import Self -from pyvcell._internal.api.vcell_client.models.key_value import KeyValue - - class BioModel(BaseModel): """ BioModel - """ - + """ # noqa: E501 bm_key: Optional[StrictStr] = Field(default=None, alias="bmKey") name: Optional[StrictStr] = None privacy: Optional[StrictInt] = None @@ -38,22 +37,9 @@ class BioModel(BaseModel): phys_model_key: Optional[StrictStr] = Field(default=None, alias="physModelKey") owner_name: Optional[StrictStr] = Field(default=None, alias="ownerName") owner_key: Optional[StrictStr] = Field(default=None, alias="ownerKey") - simulation_key_list: Optional[List[KeyValue]] = Field(default=None, alias="simulationKeyList") + simulation_key_list: Optional[List[StrictStr]] = Field(default=None, alias="simulationKeyList") applications: Optional[List[Dict[str, Any]]] = None - __properties: ClassVar[List[str]] = [ - "bmKey", - "name", - "privacy", - "groupUsers", - "savedDate", - "annot", - "branchID", - "physModelKey", - "ownerName", - "ownerKey", - "simulationKeyList", - "applications", - ] + __properties: ClassVar[List[str]] = ["bmKey", "name", "privacy", "groupUsers", "savedDate", "annot", "branchID", "physModelKey", "ownerName", "ownerKey", "simulationKeyList", "applications"] model_config = ConfigDict( populate_by_name=True, @@ -61,6 +47,7 @@ class BioModel(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -85,20 +72,14 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, exclude=excluded_fields, exclude_none=True, ) - # override the default output from pydantic by calling `to_dict()` of each item in simulation_key_list (list) - _items = [] - if self.simulation_key_list: - for _item_simulation_key_list in self.simulation_key_list: - if _item_simulation_key_list: - _items.append(_item_simulation_key_list.to_dict()) - _dict["simulationKeyList"] = _items return _dict @classmethod @@ -126,9 +107,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "physModelKey": obj.get("physModelKey"), "ownerName": obj.get("ownerName"), "ownerKey": obj.get("ownerKey"), - "simulationKeyList": [KeyValue.from_dict(_item) for _item in obj["simulationKeyList"]] - if obj.get("simulationKeyList") is not None - else None, - "applications": obj.get("applications"), + "simulationKeyList": obj.get("simulationKeyList"), + "applications": obj.get("applications") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/bio_model_child_summary.py b/pyvcell/_internal/api/vcell_client/models/bio_model_child_summary.py new file mode 100644 index 0000000..0c431af --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/bio_model_child_summary.py @@ -0,0 +1,124 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.application_info import ApplicationInfo +from pyvcell._internal.api.vcell_client.models.math_type import MathType +from typing import Optional, Set +from typing_extensions import Self + +class BioModelChildSummary(BaseModel): + """ + BioModelChildSummary + """ # noqa: E501 + sc_names: Optional[List[StrictStr]] = Field(default=None, alias="scNames") + sc_annots: Optional[List[StrictStr]] = Field(default=None, alias="scAnnots") + geo_names: Optional[List[StrictStr]] = Field(default=None, alias="geoNames") + geo_dims: Optional[List[StrictInt]] = Field(default=None, alias="geoDims") + app_types: Optional[List[MathType]] = Field(default=None, alias="appTypes") + sim_names: Optional[List[List[StrictStr]]] = Field(default=None, alias="simNames") + sim_annots: Optional[List[List[StrictStr]]] = Field(default=None, alias="simAnnots") + geometry_dimensions: Optional[List[StrictInt]] = Field(default=None, alias="geometryDimensions") + geometry_names: Optional[List[StrictStr]] = Field(default=None, alias="geometryNames") + simulation_context_annotations: Optional[List[StrictStr]] = Field(default=None, alias="simulationContextAnnotations") + simulation_context_names: Optional[List[StrictStr]] = Field(default=None, alias="simulationContextNames") + application_info: Optional[List[ApplicationInfo]] = Field(default=None, alias="applicationInfo") + __properties: ClassVar[List[str]] = ["scNames", "scAnnots", "geoNames", "geoDims", "appTypes", "simNames", "simAnnots", "geometryDimensions", "geometryNames", "simulationContextAnnotations", "simulationContextNames", "applicationInfo"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of BioModelChildSummary from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in application_info (list) + _items = [] + if self.application_info: + for _item_application_info in self.application_info: + if _item_application_info: + _items.append(_item_application_info.to_dict()) + _dict['applicationInfo'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of BioModelChildSummary from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in BioModelChildSummary) in the input: " + _key) + + _obj = cls.model_validate({ + "scNames": obj.get("scNames"), + "scAnnots": obj.get("scAnnots"), + "geoNames": obj.get("geoNames"), + "geoDims": obj.get("geoDims"), + "appTypes": obj.get("appTypes"), + "simNames": obj.get("simNames"), + "simAnnots": obj.get("simAnnots"), + "geometryDimensions": obj.get("geometryDimensions"), + "geometryNames": obj.get("geometryNames"), + "simulationContextAnnotations": obj.get("simulationContextAnnotations"), + "simulationContextNames": obj.get("simulationContextNames"), + "applicationInfo": [ApplicationInfo.from_dict(_item) for _item in obj["applicationInfo"]] if obj.get("applicationInfo") is not None else None + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/bio_model_summary.py b/pyvcell/_internal/api/vcell_client/models/bio_model_summary.py new file mode 100644 index 0000000..7af76d5 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/bio_model_summary.py @@ -0,0 +1,119 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.bio_model_child_summary import BioModelChildSummary +from pyvcell._internal.api.vcell_client.models.publication_info import PublicationInfo +from pyvcell._internal.api.vcell_client.models.v_cell_software_version import VCellSoftwareVersion +from pyvcell._internal.api.vcell_client.models.version import Version +from typing import Optional, Set +from typing_extensions import Self + +class BioModelSummary(BaseModel): + """ + BioModelSummary + """ # noqa: E501 + version: Optional[Version] = None + summary: Optional[BioModelChildSummary] = None + publication_information: Optional[List[PublicationInfo]] = Field(default=None, alias="publicationInformation") + v_cell_software_version: Optional[VCellSoftwareVersion] = Field(default=None, alias="vCellSoftwareVersion") + __properties: ClassVar[List[str]] = ["version", "summary", "publicationInformation", "vCellSoftwareVersion"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of BioModelSummary from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of version + if self.version: + _dict['version'] = self.version.to_dict() + # override the default output from pydantic by calling `to_dict()` of summary + if self.summary: + _dict['summary'] = self.summary.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in publication_information (list) + _items = [] + if self.publication_information: + for _item_publication_information in self.publication_information: + if _item_publication_information: + _items.append(_item_publication_information.to_dict()) + _dict['publicationInformation'] = _items + # override the default output from pydantic by calling `to_dict()` of v_cell_software_version + if self.v_cell_software_version: + _dict['vCellSoftwareVersion'] = self.v_cell_software_version.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of BioModelSummary from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in BioModelSummary) in the input: " + _key) + + _obj = cls.model_validate({ + "version": Version.from_dict(obj["version"]) if obj.get("version") is not None else None, + "summary": BioModelChildSummary.from_dict(obj["summary"]) if obj.get("summary") is not None else None, + "publicationInformation": [PublicationInfo.from_dict(_item) for _item in obj["publicationInformation"]] if obj.get("publicationInformation") is not None else None, + "vCellSoftwareVersion": VCellSoftwareVersion.from_dict(obj["vCellSoftwareVersion"]) if obj.get("vCellSoftwareVersion") is not None else None + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/biomodel_ref.py b/pyvcell/_internal/api/vcell_client/models/biomodel_ref.py index 5064a71..e8848f6 100644 --- a/pyvcell/_internal/api/vcell_client/models/biomodel_ref.py +++ b/pyvcell/_internal/api/vcell_client/models/biomodel_ref.py @@ -1,31 +1,32 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set from typing_extensions import Self - class BiomodelRef(BaseModel): """ BiomodelRef - """ - + """ # noqa: E501 bm_key: Optional[StrictInt] = Field(default=None, alias="bmKey") name: Optional[StrictStr] = None owner_name: Optional[StrictStr] = Field(default=None, alias="ownerName") @@ -39,6 +40,7 @@ class BiomodelRef(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,7 +65,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -91,6 +94,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "name": obj.get("name"), "ownerName": obj.get("ownerName"), "ownerKey": obj.get("ownerKey"), - "versionFlag": obj.get("versionFlag"), + "versionFlag": obj.get("versionFlag") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/composite_curve.py b/pyvcell/_internal/api/vcell_client/models/composite_curve.py new file mode 100644 index 0000000..64f7345 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/composite_curve.py @@ -0,0 +1,118 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import ConfigDict, Field, StrictBool, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.coordinate import Coordinate +from pyvcell._internal.api.vcell_client.models.curve import Curve +from typing import Optional, Set +from typing_extensions import Self + +class CompositeCurve(Curve): + """ + CompositeCurve + """ # noqa: E501 + type: StrictStr + field_curves: Optional[List[Any]] = Field(default=None, alias="fieldCurves") + curve_count: Optional[StrictInt] = Field(default=None, alias="curveCount") + default_num_samples: Optional[StrictInt] = Field(default=None, alias="defaultNumSamples") + segment_count: Optional[StrictInt] = Field(default=None, alias="segmentCount") + valid: Optional[StrictBool] = None + __properties: ClassVar[List[str]] = ["bClosed", "description", "type", "beginningCoordinate", "defaultNumSamples", "endingCoordinate", "numSamplePoints", "segmentCount", "spatialLength", "closed", "valid", "fieldCurves", "curveCount"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of CompositeCurve from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of beginning_coordinate + if self.beginning_coordinate: + _dict['beginningCoordinate'] = self.beginning_coordinate.to_dict() + # override the default output from pydantic by calling `to_dict()` of ending_coordinate + if self.ending_coordinate: + _dict['endingCoordinate'] = self.ending_coordinate.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of CompositeCurve from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in CompositeCurve) in the input: " + _key) + + _obj = cls.model_validate({ + "bClosed": obj.get("bClosed"), + "description": obj.get("description"), + "type": obj.get("type") if obj.get("type") is not None else 'CompositeCurve', + "beginningCoordinate": Coordinate.from_dict(obj["beginningCoordinate"]) if obj.get("beginningCoordinate") is not None else None, + "defaultNumSamples": obj.get("defaultNumSamples"), + "endingCoordinate": Coordinate.from_dict(obj["endingCoordinate"]) if obj.get("endingCoordinate") is not None else None, + "numSamplePoints": obj.get("numSamplePoints"), + "segmentCount": obj.get("segmentCount"), + "spatialLength": obj.get("spatialLength"), + "closed": obj.get("closed"), + "valid": obj.get("valid"), + "fieldCurves": obj.get("fieldCurves"), + "curveCount": obj.get("curveCount") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/control_point_curve.py b/pyvcell/_internal/api/vcell_client/models/control_point_curve.py new file mode 100644 index 0000000..2cb6bc8 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/control_point_curve.py @@ -0,0 +1,140 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from importlib import import_module +from pydantic import ConfigDict, Field, StrictBool, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional, Union +from pyvcell._internal.api.vcell_client.models.coordinate import Coordinate +from pyvcell._internal.api.vcell_client.models.curve import Curve +from typing import Optional, Set +from typing_extensions import Self + +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from pyvcell._internal.api.vcell_client.models.sampled_curve import SampledCurve + from pyvcell._internal.api.vcell_client.models.spline import Spline + +class ControlPointCurve(Curve): + """ + ControlPointCurve + """ # noqa: E501 + type: StrictStr + control_points: Optional[List[Coordinate]] = Field(default=None, alias="controlPoints") + control_point_count: Optional[StrictInt] = Field(default=None, alias="controlPointCount") + control_points_vector: Optional[List[Coordinate]] = Field(default=None, alias="controlPointsVector") + max_control_points: Optional[StrictInt] = Field(default=None, alias="maxControlPoints") + min_control_points: Optional[StrictInt] = Field(default=None, alias="minControlPoints") + control_point_addable: Optional[StrictBool] = Field(default=None, alias="controlPointAddable") + valid: Optional[StrictBool] = None + __properties: ClassVar[List[str]] = ["bClosed", "description", "type", "beginningCoordinate", "defaultNumSamples", "endingCoordinate", "numSamplePoints", "segmentCount", "spatialLength", "closed", "valid", "controlPoints", "controlPointCount", "controlPointsVector", "maxControlPoints", "minControlPoints", "controlPointAddable"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + # JSON field name that stores the object type + __discriminator_property_name: ClassVar[str] = 'type' + + # discriminator mappings + __discriminator_value_class_map: ClassVar[Dict[str, str]] = { + 'SampledCurve': 'SampledCurve','Spline': 'Spline' + } + + @classmethod + def get_discriminator_value(cls, obj: Dict[str, Any]) -> Optional[str]: + """Returns the discriminator value (object type) of the data""" + discriminator_value = obj[cls.__discriminator_property_name] + if discriminator_value: + return cls.__discriminator_value_class_map.get(discriminator_value) + else: + return None + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Union[SampledCurve, Spline]]: + """Create an instance of ControlPointCurve from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of beginning_coordinate + if self.beginning_coordinate: + _dict['beginningCoordinate'] = self.beginning_coordinate.to_dict() + # override the default output from pydantic by calling `to_dict()` of ending_coordinate + if self.ending_coordinate: + _dict['endingCoordinate'] = self.ending_coordinate.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in control_points (list) + _items = [] + if self.control_points: + for _item_control_points in self.control_points: + if _item_control_points: + _items.append(_item_control_points.to_dict()) + _dict['controlPoints'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in control_points_vector (list) + _items = [] + if self.control_points_vector: + for _item_control_points_vector in self.control_points_vector: + if _item_control_points_vector: + _items.append(_item_control_points_vector.to_dict()) + _dict['controlPointsVector'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Dict[str, Any]) -> Optional[Union[SampledCurve, Spline]]: + """Create an instance of ControlPointCurve from a dict""" + # look up the object type based on discriminator mapping + object_type = cls.get_discriminator_value(obj) + if object_type == 'SampledCurve': + return import_module("pyvcell._internal.api.vcell_client.models.sampled_curve").SampledCurve.from_dict(obj) + if object_type == 'Spline': + return import_module("pyvcell._internal.api.vcell_client.models.spline").Spline.from_dict(obj) + + raise ValueError("ControlPointCurve failed to lookup discriminator value from " + + json.dumps(obj) + ". Discriminator property name: " + cls.__discriminator_property_name + + ", mapping: " + json.dumps(cls.__discriminator_value_class_map)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/key_value.py b/pyvcell/_internal/api/vcell_client/models/coordinate.py similarity index 65% rename from pyvcell/_internal/api/vcell_client/models/key_value.py rename to pyvcell/_internal/api/vcell_client/models/coordinate.py index aaa9b41..263d18b 100644 --- a/pyvcell/_internal/api/vcell_client/models/key_value.py +++ b/pyvcell/_internal/api/vcell_client/models/coordinate.py @@ -1,33 +1,36 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set, Union +import json from pydantic import BaseModel, ConfigDict, StrictFloat, StrictInt +from typing import Any, ClassVar, Dict, List, Optional, Union +from typing import Optional, Set from typing_extensions import Self - -class KeyValue(BaseModel): - """ - KeyValue +class Coordinate(BaseModel): """ - - value: Optional[Union[StrictFloat, StrictInt]] = None - __properties: ClassVar[List[str]] = ["value"] + Coordinate + """ # noqa: E501 + x: Optional[Union[StrictFloat, StrictInt]] = None + y: Optional[Union[StrictFloat, StrictInt]] = None + z: Optional[Union[StrictFloat, StrictInt]] = None + __properties: ClassVar[List[str]] = ["x", "y", "z"] model_config = ConfigDict( populate_by_name=True, @@ -35,6 +38,7 @@ class KeyValue(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -46,7 +50,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of KeyValue from a JSON string""" + """Create an instance of Coordinate from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -59,7 +63,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -70,7 +75,7 @@ def to_dict(self) -> Dict[str, Any]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of KeyValue from a dict""" + """Create an instance of Coordinate from a dict""" if obj is None: return None @@ -80,7 +85,13 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in KeyValue) in the input: " + _key) + raise ValueError("Error due to additional fields (not defined in Coordinate) in the input: " + _key) - _obj = cls.model_validate({"value": obj.get("value")}) + _obj = cls.model_validate({ + "x": obj.get("x"), + "y": obj.get("y"), + "z": obj.get("z") + }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/curve.py b/pyvcell/_internal/api/vcell_client/models/curve.py new file mode 100644 index 0000000..74e811c --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/curve.py @@ -0,0 +1,137 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from importlib import import_module +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictFloat, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional, Union +from pyvcell._internal.api.vcell_client.models.coordinate import Coordinate +from typing import Optional, Set +from typing_extensions import Self + +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from pyvcell._internal.api.vcell_client.models.analytic_curve import AnalyticCurve + from pyvcell._internal.api.vcell_client.models.composite_curve import CompositeCurve + from pyvcell._internal.api.vcell_client.models.control_point_curve import ControlPointCurve + from pyvcell._internal.api.vcell_client.models.sampled_curve import SampledCurve + from pyvcell._internal.api.vcell_client.models.spline import Spline + +class Curve(BaseModel): + """ + Curve + """ # noqa: E501 + b_closed: Optional[StrictBool] = Field(default=None, alias="bClosed") + description: Optional[StrictStr] = None + type: StrictStr + beginning_coordinate: Optional[Coordinate] = Field(default=None, alias="beginningCoordinate") + default_num_samples: Optional[StrictInt] = Field(default=None, alias="defaultNumSamples") + ending_coordinate: Optional[Coordinate] = Field(default=None, alias="endingCoordinate") + num_sample_points: Optional[StrictInt] = Field(default=None, alias="numSamplePoints") + segment_count: Optional[StrictInt] = Field(default=None, alias="segmentCount") + spatial_length: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="spatialLength") + closed: Optional[StrictBool] = None + valid: Optional[StrictBool] = None + __properties: ClassVar[List[str]] = ["bClosed", "description", "type", "beginningCoordinate", "defaultNumSamples", "endingCoordinate", "numSamplePoints", "segmentCount", "spatialLength", "closed", "valid"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + # JSON field name that stores the object type + __discriminator_property_name: ClassVar[str] = 'type' + + # discriminator mappings + __discriminator_value_class_map: ClassVar[Dict[str, str]] = { + 'AnalyticCurve': 'AnalyticCurve','CompositeCurve': 'CompositeCurve','ControlPointCurve': 'ControlPointCurve','SampledCurve': 'SampledCurve','Spline': 'Spline' + } + + @classmethod + def get_discriminator_value(cls, obj: Dict[str, Any]) -> Optional[str]: + """Returns the discriminator value (object type) of the data""" + discriminator_value = obj[cls.__discriminator_property_name] + if discriminator_value: + return cls.__discriminator_value_class_map.get(discriminator_value) + else: + return None + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Union[AnalyticCurve, CompositeCurve, ControlPointCurve, SampledCurve, Spline]]: + """Create an instance of Curve from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of beginning_coordinate + if self.beginning_coordinate: + _dict['beginningCoordinate'] = self.beginning_coordinate.to_dict() + # override the default output from pydantic by calling `to_dict()` of ending_coordinate + if self.ending_coordinate: + _dict['endingCoordinate'] = self.ending_coordinate.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Dict[str, Any]) -> Optional[Union[AnalyticCurve, CompositeCurve, ControlPointCurve, SampledCurve, Spline]]: + """Create an instance of Curve from a dict""" + # look up the object type based on discriminator mapping + object_type = cls.get_discriminator_value(obj) + if object_type == 'AnalyticCurve': + return import_module("pyvcell._internal.api.vcell_client.models.analytic_curve").AnalyticCurve.from_dict(obj) + if object_type == 'CompositeCurve': + return import_module("pyvcell._internal.api.vcell_client.models.composite_curve").CompositeCurve.from_dict(obj) + if object_type == 'ControlPointCurve': + return import_module("pyvcell._internal.api.vcell_client.models.control_point_curve").ControlPointCurve.from_dict(obj) + if object_type == 'SampledCurve': + return import_module("pyvcell._internal.api.vcell_client.models.sampled_curve").SampledCurve.from_dict(obj) + if object_type == 'Spline': + return import_module("pyvcell._internal.api.vcell_client.models.spline").Spline.from_dict(obj) + + raise ValueError("Curve failed to lookup discriminator value from " + + json.dumps(obj) + ". Discriminator property name: " + cls.__discriminator_property_name + + ", mapping: " + json.dumps(cls.__discriminator_value_class_map)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/curve_selection_info.py b/pyvcell/_internal/api/vcell_client/models/curve_selection_info.py new file mode 100644 index 0000000..6493e68 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/curve_selection_info.py @@ -0,0 +1,115 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictFloat, StrictInt +from typing import Any, ClassVar, Dict, List, Optional, Union +from pyvcell._internal.api.vcell_client.models.curve import Curve +from typing import Optional, Set +from typing_extensions import Self + +class CurveSelectionInfo(BaseModel): + """ + CurveSelectionInfo + """ # noqa: E501 + field_curve: Optional[Curve] = Field(default=None, alias="fieldCurve") + field_type: Optional[StrictInt] = Field(default=None, alias="fieldType") + field_control_point: Optional[StrictInt] = Field(default=None, alias="fieldControlPoint") + field_segment: Optional[StrictInt] = Field(default=None, alias="fieldSegment") + field_u: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="fieldU") + field_u_extended: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="fieldUExtended") + field_control_point_extended: Optional[StrictInt] = Field(default=None, alias="fieldControlPointExtended") + field_segment_extended: Optional[StrictInt] = Field(default=None, alias="fieldSegmentExtended") + field_direction_negative: Optional[StrictBool] = Field(default=None, alias="fieldDirectionNegative") + crossing: Optional[StrictBool] = None + __properties: ClassVar[List[str]] = ["fieldCurve", "fieldType", "fieldControlPoint", "fieldSegment", "fieldU", "fieldUExtended", "fieldControlPointExtended", "fieldSegmentExtended", "fieldDirectionNegative", "crossing"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of CurveSelectionInfo from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of field_curve + if self.field_curve: + _dict['fieldCurve'] = self.field_curve.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of CurveSelectionInfo from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in CurveSelectionInfo) in the input: " + _key) + + _obj = cls.model_validate({ + "fieldCurve": Curve.from_dict(obj["fieldCurve"]) if obj.get("fieldCurve") is not None else None, + "fieldType": obj.get("fieldType"), + "fieldControlPoint": obj.get("fieldControlPoint"), + "fieldSegment": obj.get("fieldSegment"), + "fieldU": obj.get("fieldU"), + "fieldUExtended": obj.get("fieldUExtended"), + "fieldControlPointExtended": obj.get("fieldControlPointExtended"), + "fieldSegmentExtended": obj.get("fieldSegmentExtended"), + "fieldDirectionNegative": obj.get("fieldDirectionNegative"), + "crossing": obj.get("crossing") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/data_identifier.py b/pyvcell/_internal/api/vcell_client/models/data_identifier.py index be1432c..d538548 100644 --- a/pyvcell/_internal/api/vcell_client/models/data_identifier.py +++ b/pyvcell/_internal/api/vcell_client/models/data_identifier.py @@ -1,34 +1,34 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr -from typing_extensions import Self - +from typing import Any, ClassVar, Dict, List, Optional from pyvcell._internal.api.vcell_client.models.domain import Domain from pyvcell._internal.api.vcell_client.models.variable_type import VariableType - +from typing import Optional, Set +from typing_extensions import Self class DataIdentifier(BaseModel): """ DataIdentifier - """ - + """ # noqa: E501 name: Optional[StrictStr] = None display_name: Optional[StrictStr] = Field(default=None, alias="displayName") variable_type: Optional[VariableType] = Field(default=None, alias="variableType") @@ -36,15 +36,7 @@ class DataIdentifier(BaseModel): b_function: Optional[StrictBool] = Field(default=None, alias="bFunction") function: Optional[StrictBool] = None visible: Optional[StrictBool] = None - __properties: ClassVar[List[str]] = [ - "name", - "displayName", - "variableType", - "domain", - "bFunction", - "function", - "visible", - ] + __properties: ClassVar[List[str]] = ["name", "displayName", "variableType", "domain", "bFunction", "function", "visible"] model_config = ConfigDict( populate_by_name=True, @@ -52,6 +44,7 @@ class DataIdentifier(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -76,7 +69,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -85,10 +79,10 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of variable_type if self.variable_type: - _dict["variableType"] = self.variable_type.to_dict() + _dict['variableType'] = self.variable_type.to_dict() # override the default output from pydantic by calling `to_dict()` of domain if self.domain: - _dict["domain"] = self.domain.to_dict() + _dict['domain'] = self.domain.to_dict() return _dict @classmethod @@ -108,12 +102,12 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "name": obj.get("name"), "displayName": obj.get("displayName"), - "variableType": VariableType.from_dict(obj["variableType"]) - if obj.get("variableType") is not None - else None, + "variableType": VariableType.from_dict(obj["variableType"]) if obj.get("variableType") is not None else None, "domain": Domain.from_dict(obj["domain"]) if obj.get("domain") is not None else None, "bFunction": obj.get("bFunction"), "function": obj.get("function"), - "visible": obj.get("visible"), + "visible": obj.get("visible") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/detailed_state.py b/pyvcell/_internal/api/vcell_client/models/detailed_state.py index b3e2b3a..9239bb4 100644 --- a/pyvcell/_internal/api/vcell_client/models/detailed_state.py +++ b/pyvcell/_internal/api/vcell_client/models/detailed_state.py @@ -1,20 +1,21 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations +from __future__ import annotations import json from enum import Enum - from typing_extensions import Self @@ -26,58 +27,60 @@ class DetailedState(str, Enum): """ allowed enum values """ - UNKNOWN = "UNKNOWN" - DATAMOVEREVENT_MOVED = "DATAMOVEREVENT_MOVED" - WORKEREVENT_WORKERALIVE = "WORKEREVENT_WORKERALIVE" - JOB_WAITING = "JOB_WAITING" - JOB_QUEUED = "JOB_QUEUED" - JOB_QUEUED_RETRY = "JOB_QUEUED_RETRY" - JOB_DISPATCHED = "JOB_DISPATCHED" - JOB_ACCEPTED = "JOB_ACCEPTED" - SOLVER_READY = "SOLVER_READY" - SOLVER_STARTING_INIT = "SOLVER_STARTING_INIT" - SOLVEREVENT_STARTING_PROC_GEOM = "SOLVEREVENT_STARTING_PROC_GEOM" - SOLVEREVENT_STARTING_RESAMPLE_FD = "SOLVEREVENT_STARTING_RESAMPLE_FD" - SOLVER_RUNNING_INIT = "SOLVER_RUNNING_INIT" - SOLVER_RUNNING_INIT_INPUT_FILE = "SOLVER_RUNNING_INIT_INPUT_FILE" - SOLVER_RUNNING_INIT_CODEGEN = "SOLVER_RUNNING_INIT_CODEGEN" - SOLVER_RUNNING_INIT_COMPILING = "SOLVER_RUNNING_INIT_COMPILING" - SOLVER_RUNNING_INIT_COMPILECMD = "SOLVER_RUNNING_INIT_COMPILECMD" - SOLVER_RUNNING_INIT_COMPILE_OK = "SOLVER_RUNNING_INIT_COMPILE_OK" - SOLVER_RUNNING_INIT_LINKING = "SOLVER_RUNNING_INIT_LINKING" - SOLVER_RUNNING_INIT_LINKCMD = "SOLVER_RUNNING_INIT_LINKCMD" - SOLVER_RUNNING_INIT_LINK_OK = "SOLVER_RUNNING_INIT_LINK_OK" - SOLVER_RUNNING_INIT_COMPILELINK_OK = "SOLVER_RUNNING_INIT_COMPILELINK_OK" - SOLVEREVENT_STARTING_INIT = "SOLVEREVENT_STARTING_INIT" - SOLVEREVENT_STARTING_CODEGEN = "SOLVEREVENT_STARTING_CODEGEN" - SOLVEREVENT_STARTING_COMPILELINK = "SOLVEREVENT_STARTING_COMPILELINK" - SOLVEREVENT_STARTING_INPUT_FILE = "SOLVEREVENT_STARTING_INPUT_FILE" - SOLVEREVENT_STARTING = "SOLVEREVENT_STARTING" - SOLVEREVENT_STARTING_SUBMITTING = "SOLVEREVENT_STARTING_SUBMITTING" - SOLVEREVENT_STARTING_SUBMITTED = "SOLVEREVENT_STARTING_SUBMITTED" - WORKEREVENT_STARTING = "WORKEREVENT_STARTING" - SOLVEREVENT_RUNNING_START = "SOLVEREVENT_RUNNING_START" - SOLVER_RUNNING_START = "SOLVER_RUNNING_START" - JOB_RUNNING_UNKNOWN = "JOB_RUNNING_UNKNOWN" - SOLVEREVENT_PRINTED = "SOLVEREVENT_PRINTED" - WORKEREVENT_DATA = "WORKEREVENT_DATA" - JOB_RUNNING = "JOB_RUNNING" - SOLVEREVENT_PROGRESS = "SOLVEREVENT_PROGRESS" - WORKEREVENT_PROGRESS = "WORKEREVENT_PROGRESS" - WORKEREVENT_WORKEREXIT_NORMAL = "WORKEREVENT_WORKEREXIT_NORMAL" - WORKEREVENT_WORKEREXIT_ERROR = "WORKEREVENT_WORKEREXIT_ERROR" - SOLVEREVENT_FINISHED = "SOLVEREVENT_FINISHED" - SOLVER_FINISHED = "SOLVER_FINISHED" - WORKEREVENT_COMPLETED = "WORKEREVENT_COMPLETED" - JOB_COMPLETED = "JOB_COMPLETED" - SOLVER_STOPPED = "SOLVER_STOPPED" - JOB_STOPPED = "JOB_STOPPED" - JOB_FAILED_UNKNOWN = "JOB_FAILED_UNKNOWN" - SOLVER_ABORTED = "SOLVER_ABORTED" - WORKEREVENT_FAILURE = "WORKEREVENT_FAILURE" - JOB_FAILED = "JOB_FAILED" + UNKNOWN = 'UNKNOWN' + DATAMOVEREVENT_MOVED = 'DATAMOVEREVENT_MOVED' + WORKEREVENT_WORKERALIVE = 'WORKEREVENT_WORKERALIVE' + JOB_WAITING = 'JOB_WAITING' + JOB_QUEUED = 'JOB_QUEUED' + JOB_QUEUED_RETRY = 'JOB_QUEUED_RETRY' + JOB_DISPATCHED = 'JOB_DISPATCHED' + JOB_ACCEPTED = 'JOB_ACCEPTED' + SOLVER_READY = 'SOLVER_READY' + SOLVER_STARTING_INIT = 'SOLVER_STARTING_INIT' + SOLVEREVENT_STARTING_PROC_GEOM = 'SOLVEREVENT_STARTING_PROC_GEOM' + SOLVEREVENT_STARTING_RESAMPLE_FD = 'SOLVEREVENT_STARTING_RESAMPLE_FD' + SOLVER_RUNNING_INIT = 'SOLVER_RUNNING_INIT' + SOLVER_RUNNING_INIT_INPUT_FILE = 'SOLVER_RUNNING_INIT_INPUT_FILE' + SOLVER_RUNNING_INIT_CODEGEN = 'SOLVER_RUNNING_INIT_CODEGEN' + SOLVER_RUNNING_INIT_COMPILING = 'SOLVER_RUNNING_INIT_COMPILING' + SOLVER_RUNNING_INIT_COMPILECMD = 'SOLVER_RUNNING_INIT_COMPILECMD' + SOLVER_RUNNING_INIT_COMPILE_OK = 'SOLVER_RUNNING_INIT_COMPILE_OK' + SOLVER_RUNNING_INIT_LINKING = 'SOLVER_RUNNING_INIT_LINKING' + SOLVER_RUNNING_INIT_LINKCMD = 'SOLVER_RUNNING_INIT_LINKCMD' + SOLVER_RUNNING_INIT_LINK_OK = 'SOLVER_RUNNING_INIT_LINK_OK' + SOLVER_RUNNING_INIT_COMPILELINK_OK = 'SOLVER_RUNNING_INIT_COMPILELINK_OK' + SOLVEREVENT_STARTING_INIT = 'SOLVEREVENT_STARTING_INIT' + SOLVEREVENT_STARTING_CODEGEN = 'SOLVEREVENT_STARTING_CODEGEN' + SOLVEREVENT_STARTING_COMPILELINK = 'SOLVEREVENT_STARTING_COMPILELINK' + SOLVEREVENT_STARTING_INPUT_FILE = 'SOLVEREVENT_STARTING_INPUT_FILE' + SOLVEREVENT_STARTING = 'SOLVEREVENT_STARTING' + SOLVEREVENT_STARTING_SUBMITTING = 'SOLVEREVENT_STARTING_SUBMITTING' + SOLVEREVENT_STARTING_SUBMITTED = 'SOLVEREVENT_STARTING_SUBMITTED' + WORKEREVENT_STARTING = 'WORKEREVENT_STARTING' + SOLVEREVENT_RUNNING_START = 'SOLVEREVENT_RUNNING_START' + SOLVER_RUNNING_START = 'SOLVER_RUNNING_START' + JOB_RUNNING_UNKNOWN = 'JOB_RUNNING_UNKNOWN' + SOLVEREVENT_PRINTED = 'SOLVEREVENT_PRINTED' + WORKEREVENT_DATA = 'WORKEREVENT_DATA' + JOB_RUNNING = 'JOB_RUNNING' + SOLVEREVENT_PROGRESS = 'SOLVEREVENT_PROGRESS' + WORKEREVENT_PROGRESS = 'WORKEREVENT_PROGRESS' + WORKEREVENT_WORKEREXIT_NORMAL = 'WORKEREVENT_WORKEREXIT_NORMAL' + WORKEREVENT_WORKEREXIT_ERROR = 'WORKEREVENT_WORKEREXIT_ERROR' + SOLVEREVENT_FINISHED = 'SOLVEREVENT_FINISHED' + SOLVER_FINISHED = 'SOLVER_FINISHED' + WORKEREVENT_COMPLETED = 'WORKEREVENT_COMPLETED' + JOB_COMPLETED = 'JOB_COMPLETED' + SOLVER_STOPPED = 'SOLVER_STOPPED' + JOB_STOPPED = 'JOB_STOPPED' + JOB_FAILED_UNKNOWN = 'JOB_FAILED_UNKNOWN' + SOLVER_ABORTED = 'SOLVER_ABORTED' + WORKEREVENT_FAILURE = 'WORKEREVENT_FAILURE' + JOB_FAILED = 'JOB_FAILED' @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of DetailedState from a JSON string""" return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/domain.py b/pyvcell/_internal/api/vcell_client/models/domain.py index 4a6903b..16c6694 100644 --- a/pyvcell/_internal/api/vcell_client/models/domain.py +++ b/pyvcell/_internal/api/vcell_client/models/domain.py @@ -1,31 +1,32 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set from typing_extensions import Self - class Domain(BaseModel): """ Domain - """ - + """ # noqa: E501 name: Optional[StrictStr] = None __properties: ClassVar[List[str]] = ["name"] @@ -35,6 +36,7 @@ class Domain(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -59,7 +61,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -82,5 +85,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if _key not in cls.__properties: raise ValueError("Error due to additional fields (not defined in Domain) in the input: " + _key) - _obj = cls.model_validate({"name": obj.get("name")}) + _obj = cls.model_validate({ + "name": obj.get("name") + }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/export_event.py b/pyvcell/_internal/api/vcell_client/models/export_event.py new file mode 100644 index 0000000..5fcee64 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/export_event.py @@ -0,0 +1,118 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional, Union +from pyvcell._internal.api.vcell_client.models.export_progress_type import ExportProgressType +from pyvcell._internal.api.vcell_client.models.human_readable_export_data import HumanReadableExportData +from pyvcell._internal.api.vcell_client.models.user import User +from typing import Optional, Set +from typing_extensions import Self + +class ExportEvent(BaseModel): + """ + ExportEvent + """ # noqa: E501 + event_type: Optional[ExportProgressType] = Field(default=None, alias="eventType") + progress: Optional[Union[StrictFloat, StrictInt]] = None + format: Optional[StrictStr] = None + location: Optional[StrictStr] = None + user: Optional[User] = None + job_id: Optional[StrictInt] = Field(default=None, alias="jobID") + data_key: Optional[StrictStr] = Field(default=None, alias="dataKey") + data_id_string: Optional[StrictStr] = Field(default=None, alias="dataIdString") + human_readable_data: Optional[HumanReadableExportData] = Field(default=None, alias="humanReadableData") + __properties: ClassVar[List[str]] = ["eventType", "progress", "format", "location", "user", "jobID", "dataKey", "dataIdString", "humanReadableData"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of ExportEvent from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of user + if self.user: + _dict['user'] = self.user.to_dict() + # override the default output from pydantic by calling `to_dict()` of human_readable_data + if self.human_readable_data: + _dict['humanReadableData'] = self.human_readable_data.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of ExportEvent from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in ExportEvent) in the input: " + _key) + + _obj = cls.model_validate({ + "eventType": obj.get("eventType"), + "progress": obj.get("progress"), + "format": obj.get("format"), + "location": obj.get("location"), + "user": User.from_dict(obj["user"]) if obj.get("user") is not None else None, + "jobID": obj.get("jobID"), + "dataKey": obj.get("dataKey"), + "dataIdString": obj.get("dataIdString"), + "humanReadableData": HumanReadableExportData.from_dict(obj["humanReadableData"]) if obj.get("humanReadableData") is not None else None + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/export_progress_type.py b/pyvcell/_internal/api/vcell_client/models/export_progress_type.py new file mode 100644 index 0000000..3657e38 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/export_progress_type.py @@ -0,0 +1,41 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class ExportProgressType(str, Enum): + """ + ExportProgressType + """ + + """ + allowed enum values + """ + EXPORT_START = 'EXPORT_START' + EXPORT_COMPLETE = 'EXPORT_COMPLETE' + EXPORT_FAILURE = 'EXPORT_FAILURE' + EXPORT_ASSEMBLING = 'EXPORT_ASSEMBLING' + EXPORT_PROGRESS = 'EXPORT_PROGRESS' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of ExportProgressType from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/exportable_data_type.py b/pyvcell/_internal/api/vcell_client/models/exportable_data_type.py new file mode 100644 index 0000000..87facf9 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/exportable_data_type.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class ExportableDataType(str, Enum): + """ + ExportableDataType + """ + + """ + allowed enum values + """ + ODE_VARIABLE_DATA = 'ODE_VARIABLE_DATA' + PDE_VARIABLE_DATA = 'PDE_VARIABLE_DATA' + PDE_PARTICLE_DATA = 'PDE_PARTICLE_DATA' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of ExportableDataType from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/extent.py b/pyvcell/_internal/api/vcell_client/models/extent.py index 79cefed..8f1763a 100644 --- a/pyvcell/_internal/api/vcell_client/models/extent.py +++ b/pyvcell/_internal/api/vcell_client/models/extent.py @@ -1,31 +1,32 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set, Union +import json from pydantic import BaseModel, ConfigDict, StrictFloat, StrictInt +from typing import Any, ClassVar, Dict, List, Optional, Union +from typing import Optional, Set from typing_extensions import Self - class Extent(BaseModel): """ Extent - """ - + """ # noqa: E501 x: Optional[Union[StrictFloat, StrictInt]] = None y: Optional[Union[StrictFloat, StrictInt]] = None z: Optional[Union[StrictFloat, StrictInt]] = None @@ -37,6 +38,7 @@ class Extent(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -61,7 +63,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -84,5 +87,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if _key not in cls.__properties: raise ValueError("Error due to additional fields (not defined in Extent) in the input: " + _key) - _obj = cls.model_validate({"x": obj.get("x"), "y": obj.get("y"), "z": obj.get("z")}) + _obj = cls.model_validate({ + "x": obj.get("x"), + "y": obj.get("y"), + "z": obj.get("z") + }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/external_data_identifier.py b/pyvcell/_internal/api/vcell_client/models/external_data_identifier.py index 7c58b92..cbf3d71 100644 --- a/pyvcell/_internal/api/vcell_client/models/external_data_identifier.py +++ b/pyvcell/_internal/api/vcell_client/models/external_data_identifier.py @@ -1,50 +1,41 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr -from typing_extensions import Self - -from pyvcell._internal.api.vcell_client.models.key_value import KeyValue +from typing import Any, ClassVar, Dict, List, Optional from pyvcell._internal.api.vcell_client.models.user import User - +from typing import Optional, Set +from typing_extensions import Self class ExternalDataIdentifier(BaseModel): """ ExternalDataIdentifier - """ - - key: Optional[KeyValue] = None + """ # noqa: E501 + key: Optional[StrictStr] = None owner: Optional[User] = None name: Optional[StrictStr] = None job_index: Optional[StrictInt] = Field(default=None, alias="jobIndex") - simulation_key: Optional[KeyValue] = Field(default=None, alias="simulationKey") + simulation_key: Optional[StrictStr] = Field(default=None, alias="simulationKey") parameter_scan_type: Optional[StrictBool] = Field(default=None, alias="parameterScanType") - data_key: Optional[KeyValue] = Field(default=None, alias="dataKey") - __properties: ClassVar[List[str]] = [ - "key", - "owner", - "name", - "jobIndex", - "simulationKey", - "parameterScanType", - "dataKey", - ] + data_key: Optional[StrictStr] = Field(default=None, alias="dataKey") + __properties: ClassVar[List[str]] = ["key", "owner", "name", "jobIndex", "simulationKey", "parameterScanType", "dataKey"] model_config = ConfigDict( populate_by_name=True, @@ -52,6 +43,7 @@ class ExternalDataIdentifier(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -76,25 +68,17 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, exclude=excluded_fields, exclude_none=True, ) - # override the default output from pydantic by calling `to_dict()` of key - if self.key: - _dict["key"] = self.key.to_dict() # override the default output from pydantic by calling `to_dict()` of owner if self.owner: - _dict["owner"] = self.owner.to_dict() - # override the default output from pydantic by calling `to_dict()` of simulation_key - if self.simulation_key: - _dict["simulationKey"] = self.simulation_key.to_dict() - # override the default output from pydantic by calling `to_dict()` of data_key - if self.data_key: - _dict["dataKey"] = self.data_key.to_dict() + _dict['owner'] = self.owner.to_dict() return _dict @classmethod @@ -109,17 +93,17 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in ExternalDataIdentifier) in the input: " + _key - ) + raise ValueError("Error due to additional fields (not defined in ExternalDataIdentifier) in the input: " + _key) _obj = cls.model_validate({ - "key": KeyValue.from_dict(obj["key"]) if obj.get("key") is not None else None, + "key": obj.get("key"), "owner": User.from_dict(obj["owner"]) if obj.get("owner") is not None else None, "name": obj.get("name"), "jobIndex": obj.get("jobIndex"), - "simulationKey": KeyValue.from_dict(obj["simulationKey"]) if obj.get("simulationKey") is not None else None, + "simulationKey": obj.get("simulationKey"), "parameterScanType": obj.get("parameterScanType"), - "dataKey": KeyValue.from_dict(obj["dataKey"]) if obj.get("dataKey") is not None else None, + "dataKey": obj.get("dataKey") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/analyzed_results_from_field_data.py b/pyvcell/_internal/api/vcell_client/models/field_data.py similarity index 73% rename from pyvcell/_internal/api/vcell_client/models/analyzed_results_from_field_data.py rename to pyvcell/_internal/api/vcell_client/models/field_data.py index f61e66a..220877e 100644 --- a/pyvcell/_internal/api/vcell_client/models/analyzed_results_from_field_data.py +++ b/pyvcell/_internal/api/vcell_client/models/field_data.py @@ -1,36 +1,37 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set, Union +import json from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr -from typing_extensions import Self - +from typing import Any, ClassVar, Dict, List, Optional, Union from pyvcell._internal.api.vcell_client.models.extent import Extent from pyvcell._internal.api.vcell_client.models.i_size import ISize from pyvcell._internal.api.vcell_client.models.origin import Origin +from typing import Optional, Set +from typing_extensions import Self - -class AnalyzedResultsFromFieldData(BaseModel): +class FieldData(BaseModel): """ - AnalyzedResultsFromFieldData - """ - + FieldData + """ # noqa: E501 short_spec_data: Optional[List[List[List[StrictInt]]]] = Field(default=None, alias="shortSpecData") + double_spec_data: Optional[List[List[List[Union[StrictFloat, StrictInt]]]]] = Field(default=None, alias="doubleSpecData") var_names: Optional[List[StrictStr]] = Field(default=None, alias="varNames") times: Optional[List[Union[StrictFloat, StrictInt]]] = None origin: Optional[Origin] = None @@ -38,16 +39,7 @@ class AnalyzedResultsFromFieldData(BaseModel): isize: Optional[ISize] = None annotation: Optional[StrictStr] = None name: Optional[StrictStr] = None - __properties: ClassVar[List[str]] = [ - "shortSpecData", - "varNames", - "times", - "origin", - "extent", - "isize", - "annotation", - "name", - ] + __properties: ClassVar[List[str]] = ["shortSpecData", "doubleSpecData", "varNames", "times", "origin", "extent", "isize", "annotation", "name"] model_config = ConfigDict( populate_by_name=True, @@ -55,6 +47,7 @@ class AnalyzedResultsFromFieldData(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -66,7 +59,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of AnalyzedResultsFromFieldData from a JSON string""" + """Create an instance of FieldData from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -79,7 +72,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -88,18 +82,18 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of origin if self.origin: - _dict["origin"] = self.origin.to_dict() + _dict['origin'] = self.origin.to_dict() # override the default output from pydantic by calling `to_dict()` of extent if self.extent: - _dict["extent"] = self.extent.to_dict() + _dict['extent'] = self.extent.to_dict() # override the default output from pydantic by calling `to_dict()` of isize if self.isize: - _dict["isize"] = self.isize.to_dict() + _dict['isize'] = self.isize.to_dict() return _dict @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of AnalyzedResultsFromFieldData from a dict""" + """Create an instance of FieldData from a dict""" if obj is None: return None @@ -109,18 +103,19 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in AnalyzedResultsFromFieldData) in the input: " + _key - ) + raise ValueError("Error due to additional fields (not defined in FieldData) in the input: " + _key) _obj = cls.model_validate({ "shortSpecData": obj.get("shortSpecData"), + "doubleSpecData": obj.get("doubleSpecData"), "varNames": obj.get("varNames"), "times": obj.get("times"), "origin": Origin.from_dict(obj["origin"]) if obj.get("origin") is not None else None, "extent": Extent.from_dict(obj["extent"]) if obj.get("extent") is not None else None, "isize": ISize.from_dict(obj["isize"]) if obj.get("isize") is not None else None, "annotation": obj.get("annotation"), - "name": obj.get("name"), + "name": obj.get("name") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/field_data_reference.py b/pyvcell/_internal/api/vcell_client/models/field_data_reference.py index b1c4b2d..61ddf82 100644 --- a/pyvcell/_internal/api/vcell_client/models/field_data_reference.py +++ b/pyvcell/_internal/api/vcell_client/models/field_data_reference.py @@ -1,38 +1,37 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictStr -from typing_extensions import Self - +from typing import Any, ClassVar, Dict, List, Optional from pyvcell._internal.api.vcell_client.models.external_data_identifier import ExternalDataIdentifier -from pyvcell._internal.api.vcell_client.models.key_value import KeyValue - +from typing import Optional, Set +from typing_extensions import Self class FieldDataReference(BaseModel): """ FieldDataReference - """ - - external_data_identifier: Optional[ExternalDataIdentifier] = Field(default=None, alias="externalDataIdentifier") - external_data_annotation: Optional[StrictStr] = Field(default=None, alias="externalDataAnnotation") - external_data_id_sim_refs: Optional[List[KeyValue]] = Field(default=None, alias="externalDataIDSimRefs") - __properties: ClassVar[List[str]] = ["externalDataIdentifier", "externalDataAnnotation", "externalDataIDSimRefs"] + """ # noqa: E501 + field_data_id: Optional[ExternalDataIdentifier] = Field(default=None, alias="fieldDataID") + annotation: Optional[StrictStr] = None + simulations_referencing_this_id: Optional[List[StrictStr]] = Field(default=None, alias="simulationsReferencingThisID") + __properties: ClassVar[List[str]] = ["fieldDataID", "annotation", "simulationsReferencingThisID"] model_config = ConfigDict( populate_by_name=True, @@ -40,6 +39,7 @@ class FieldDataReference(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -64,23 +64,17 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, exclude=excluded_fields, exclude_none=True, ) - # override the default output from pydantic by calling `to_dict()` of external_data_identifier - if self.external_data_identifier: - _dict["externalDataIdentifier"] = self.external_data_identifier.to_dict() - # override the default output from pydantic by calling `to_dict()` of each item in external_data_id_sim_refs (list) - _items = [] - if self.external_data_id_sim_refs: - for _item_external_data_id_sim_refs in self.external_data_id_sim_refs: - if _item_external_data_id_sim_refs: - _items.append(_item_external_data_id_sim_refs.to_dict()) - _dict["externalDataIDSimRefs"] = _items + # override the default output from pydantic by calling `to_dict()` of field_data_id + if self.field_data_id: + _dict['fieldDataID'] = self.field_data_id.to_dict() return _dict @classmethod @@ -95,17 +89,13 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in FieldDataReference) in the input: " + _key - ) + raise ValueError("Error due to additional fields (not defined in FieldDataReference) in the input: " + _key) _obj = cls.model_validate({ - "externalDataIdentifier": ExternalDataIdentifier.from_dict(obj["externalDataIdentifier"]) - if obj.get("externalDataIdentifier") is not None - else None, - "externalDataAnnotation": obj.get("externalDataAnnotation"), - "externalDataIDSimRefs": [KeyValue.from_dict(_item) for _item in obj["externalDataIDSimRefs"]] - if obj.get("externalDataIDSimRefs") is not None - else None, + "fieldDataID": ExternalDataIdentifier.from_dict(obj["fieldDataID"]) if obj.get("fieldDataID") is not None else None, + "annotation": obj.get("annotation"), + "simulationsReferencingThisID": obj.get("simulationsReferencingThisID") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/field_data_save_results.py b/pyvcell/_internal/api/vcell_client/models/field_data_saved_results.py similarity index 66% rename from pyvcell/_internal/api/vcell_client/models/field_data_save_results.py rename to pyvcell/_internal/api/vcell_client/models/field_data_saved_results.py index 42a249b..cc6ce31 100644 --- a/pyvcell/_internal/api/vcell_client/models/field_data_save_results.py +++ b/pyvcell/_internal/api/vcell_client/models/field_data_saved_results.py @@ -1,34 +1,35 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set from typing_extensions import Self - -class FieldDataSaveResults(BaseModel): - """ - FieldDataSaveResults +class FieldDataSavedResults(BaseModel): """ - + FieldDataSavedResults + """ # noqa: E501 field_data_name: Optional[StrictStr] = Field(default=None, alias="fieldDataName") - field_data_id: Optional[StrictStr] = Field(default=None, alias="fieldDataID") - __properties: ClassVar[List[str]] = ["fieldDataName", "fieldDataID"] + field_data_key: Optional[StrictStr] = Field(default=None, alias="fieldDataKey") + __properties: ClassVar[List[str]] = ["fieldDataName", "fieldDataKey"] model_config = ConfigDict( populate_by_name=True, @@ -36,6 +37,7 @@ class FieldDataSaveResults(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -47,7 +49,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of FieldDataSaveResults from a JSON string""" + """Create an instance of FieldDataSavedResults from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -60,7 +62,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -71,7 +74,7 @@ def to_dict(self) -> Dict[str, Any]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of FieldDataSaveResults from a dict""" + """Create an instance of FieldDataSavedResults from a dict""" if obj is None: return None @@ -81,9 +84,12 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in FieldDataSaveResults) in the input: " + _key - ) + raise ValueError("Error due to additional fields (not defined in FieldDataSavedResults) in the input: " + _key) - _obj = cls.model_validate({"fieldDataName": obj.get("fieldDataName"), "fieldDataID": obj.get("fieldDataID")}) + _obj = cls.model_validate({ + "fieldDataName": obj.get("fieldDataName"), + "fieldDataKey": obj.get("fieldDataKey") + }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/field_data_shape.py b/pyvcell/_internal/api/vcell_client/models/field_data_shape.py index eb75ad3..402c9d8 100644 --- a/pyvcell/_internal/api/vcell_client/models/field_data_shape.py +++ b/pyvcell/_internal/api/vcell_client/models/field_data_shape.py @@ -1,36 +1,36 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set, Union +import json from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt -from typing_extensions import Self - +from typing import Any, ClassVar, Dict, List, Optional, Union from pyvcell._internal.api.vcell_client.models.data_identifier import DataIdentifier from pyvcell._internal.api.vcell_client.models.extent import Extent from pyvcell._internal.api.vcell_client.models.i_size import ISize from pyvcell._internal.api.vcell_client.models.origin import Origin - +from typing import Optional, Set +from typing_extensions import Self class FieldDataShape(BaseModel): """ FieldDataShape - """ - + """ # noqa: E501 extent: Optional[Extent] = None origin: Optional[Origin] = None isize: Optional[ISize] = None @@ -44,6 +44,7 @@ class FieldDataShape(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -68,7 +69,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -77,20 +79,20 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of extent if self.extent: - _dict["extent"] = self.extent.to_dict() + _dict['extent'] = self.extent.to_dict() # override the default output from pydantic by calling `to_dict()` of origin if self.origin: - _dict["origin"] = self.origin.to_dict() + _dict['origin'] = self.origin.to_dict() # override the default output from pydantic by calling `to_dict()` of isize if self.isize: - _dict["isize"] = self.isize.to_dict() + _dict['isize'] = self.isize.to_dict() # override the default output from pydantic by calling `to_dict()` of each item in data_identifier (list) _items = [] if self.data_identifier: for _item_data_identifier in self.data_identifier: if _item_data_identifier: _items.append(_item_data_identifier.to_dict()) - _dict["dataIdentifier"] = _items + _dict['dataIdentifier'] = _items return _dict @classmethod @@ -111,9 +113,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "extent": Extent.from_dict(obj["extent"]) if obj.get("extent") is not None else None, "origin": Origin.from_dict(obj["origin"]) if obj.get("origin") is not None else None, "isize": ISize.from_dict(obj["isize"]) if obj.get("isize") is not None else None, - "dataIdentifier": [DataIdentifier.from_dict(_item) for _item in obj["dataIdentifier"]] - if obj.get("dataIdentifier") is not None - else None, - "times": obj.get("times"), + "dataIdentifier": [DataIdentifier.from_dict(_item) for _item in obj["dataIdentifier"]] if obj.get("dataIdentifier") is not None else None, + "times": obj.get("times") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/function_category.py b/pyvcell/_internal/api/vcell_client/models/function_category.py new file mode 100644 index 0000000..68d643c --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/function_category.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class FunctionCategory(str, Enum): + """ + FunctionCategory + """ + + """ + allowed enum values + """ + PREDEFINED = 'PREDEFINED' + OLDUSERDEFINED = 'OLDUSERDEFINED' + OUTPUTFUNCTION = 'OUTPUTFUNCTION' + POSTPROCESSFUNCTION = 'POSTPROCESSFUNCTION' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of FunctionCategory from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/geometry_mode.py b/pyvcell/_internal/api/vcell_client/models/geometry_mode.py new file mode 100644 index 0000000..3475914 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/geometry_mode.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class GeometryMode(str, Enum): + """ + GeometryMode + """ + + """ + allowed enum values + """ + GEOMETRY_SELECTIONS = 'GEOMETRY_SELECTIONS' + GEOMETRY_SLICE = 'GEOMETRY_SLICE' + GEOMETRY_FULL = 'GEOMETRY_FULL' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of GeometryMode from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/geometry_spec_dto.py b/pyvcell/_internal/api/vcell_client/models/geometry_spec_dto.py new file mode 100644 index 0000000..02aa771 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/geometry_spec_dto.py @@ -0,0 +1,108 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.geometry_mode import GeometryMode +from pyvcell._internal.api.vcell_client.models.spatial_selection import SpatialSelection +from typing import Optional, Set +from typing_extensions import Self + +class GeometrySpecDTO(BaseModel): + """ + GeometrySpecDTO + """ # noqa: E501 + selections: Optional[List[SpatialSelection]] = None + axis: Optional[StrictInt] = None + slice_number: Optional[StrictInt] = Field(default=None, alias="sliceNumber") + geometry_mode: Optional[GeometryMode] = Field(default=None, alias="geometryMode") + __properties: ClassVar[List[str]] = ["selections", "axis", "sliceNumber", "geometryMode"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GeometrySpecDTO from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in selections (list) + _items = [] + if self.selections: + for _item_selections in self.selections: + if _item_selections: + _items.append(_item_selections.to_dict()) + _dict['selections'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GeometrySpecDTO from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in GeometrySpecDTO) in the input: " + _key) + + _obj = cls.model_validate({ + "selections": [SpatialSelection.from_dict(_item) for _item in obj["selections"]] if obj.get("selections") is not None else None, + "axis": obj.get("axis"), + "sliceNumber": obj.get("sliceNumber"), + "geometryMode": obj.get("geometryMode") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/geometry_summary.py b/pyvcell/_internal/api/vcell_client/models/geometry_summary.py new file mode 100644 index 0000000..9937706 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/geometry_summary.py @@ -0,0 +1,119 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.extent import Extent +from pyvcell._internal.api.vcell_client.models.origin import Origin +from pyvcell._internal.api.vcell_client.models.v_cell_software_version import VCellSoftwareVersion +from pyvcell._internal.api.vcell_client.models.version import Version +from typing import Optional, Set +from typing_extensions import Self + +class GeometrySummary(BaseModel): + """ + GeometrySummary + """ # noqa: E501 + dimension: Optional[StrictInt] = None + origin: Optional[Origin] = None + extent: Optional[Extent] = None + image_ref: Optional[StrictStr] = Field(default=None, alias="imageRef") + version: Optional[Version] = None + software_version: Optional[VCellSoftwareVersion] = Field(default=None, alias="softwareVersion") + __properties: ClassVar[List[str]] = ["dimension", "origin", "extent", "imageRef", "version", "softwareVersion"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GeometrySummary from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of origin + if self.origin: + _dict['origin'] = self.origin.to_dict() + # override the default output from pydantic by calling `to_dict()` of extent + if self.extent: + _dict['extent'] = self.extent.to_dict() + # override the default output from pydantic by calling `to_dict()` of version + if self.version: + _dict['version'] = self.version.to_dict() + # override the default output from pydantic by calling `to_dict()` of software_version + if self.software_version: + _dict['softwareVersion'] = self.software_version.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GeometrySummary from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in GeometrySummary) in the input: " + _key) + + _obj = cls.model_validate({ + "dimension": obj.get("dimension"), + "origin": Origin.from_dict(obj["origin"]) if obj.get("origin") is not None else None, + "extent": Extent.from_dict(obj["extent"]) if obj.get("extent") is not None else None, + "imageRef": obj.get("imageRef"), + "version": Version.from_dict(obj["version"]) if obj.get("version") is not None else None, + "softwareVersion": VCellSoftwareVersion.from_dict(obj["softwareVersion"]) if obj.get("softwareVersion") is not None else None + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/gif_image.py b/pyvcell/_internal/api/vcell_client/models/gif_image.py new file mode 100644 index 0000000..a2197a1 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/gif_image.py @@ -0,0 +1,99 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBytes, StrictStr +from typing import Any, ClassVar, Dict, List, Optional, Tuple, Union +from pyvcell._internal.api.vcell_client.models.i_size import ISize +from typing import Optional, Set +from typing_extensions import Self + +class GIFImage(BaseModel): + """ + GIFImage + """ # noqa: E501 + gif_encoded_data: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = Field(default=None, alias="gifEncodedData") + size: Optional[ISize] = None + __properties: ClassVar[List[str]] = ["gifEncodedData", "size"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GIFImage from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of size + if self.size: + _dict['size'] = self.size.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GIFImage from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in GIFImage) in the input: " + _key) + + _obj = cls.model_validate({ + "gifEncodedData": obj.get("gifEncodedData"), + "size": ISize.from_dict(obj["size"]) if obj.get("size") is not None else None + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/group_access.py b/pyvcell/_internal/api/vcell_client/models/group_access.py new file mode 100644 index 0000000..1a6159a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/group_access.py @@ -0,0 +1,115 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from importlib import import_module +from pydantic import BaseModel, ConfigDict, StrictFloat, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional, Union +from typing import Optional, Set +from typing_extensions import Self + +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from pyvcell._internal.api.vcell_client.models.group_access_all import GroupAccessAll + from pyvcell._internal.api.vcell_client.models.group_access_none import GroupAccessNone + from pyvcell._internal.api.vcell_client.models.group_access_some import GroupAccessSome + +class GroupAccess(BaseModel): + """ + GroupAccess + """ # noqa: E501 + groupid: Union[StrictFloat, StrictInt] + description: Optional[StrictStr] = None + __properties: ClassVar[List[str]] = ["groupid", "description"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + # JSON field name that stores the object type + __discriminator_property_name: ClassVar[str] = 'type' + + # discriminator mappings + __discriminator_value_class_map: ClassVar[Dict[str, str]] = { + 'GroupAccessAll': 'GroupAccessAll','GroupAccessNone': 'GroupAccessNone','GroupAccessSome': 'GroupAccessSome' + } + + @classmethod + def get_discriminator_value(cls, obj: Dict[str, Any]) -> Optional[str]: + """Returns the discriminator value (object type) of the data""" + discriminator_value = obj[cls.__discriminator_property_name] + if discriminator_value: + return cls.__discriminator_value_class_map.get(discriminator_value) + else: + return None + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Union[GroupAccessAll, GroupAccessNone, GroupAccessSome]]: + """Create an instance of GroupAccess from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Dict[str, Any]) -> Optional[Union[GroupAccessAll, GroupAccessNone, GroupAccessSome]]: + """Create an instance of GroupAccess from a dict""" + # look up the object type based on discriminator mapping + object_type = cls.get_discriminator_value(obj) + if object_type == 'GroupAccessAll': + return import_module("pyvcell._internal.api.vcell_client.models.group_access_all").GroupAccessAll.from_dict(obj) + if object_type == 'GroupAccessNone': + return import_module("pyvcell._internal.api.vcell_client.models.group_access_none").GroupAccessNone.from_dict(obj) + if object_type == 'GroupAccessSome': + return import_module("pyvcell._internal.api.vcell_client.models.group_access_some").GroupAccessSome.from_dict(obj) + + raise ValueError("GroupAccess failed to lookup discriminator value from " + + json.dumps(obj) + ". Discriminator property name: " + cls.__discriminator_property_name + + ", mapping: " + json.dumps(cls.__discriminator_value_class_map)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/group_access_all.py b/pyvcell/_internal/api/vcell_client/models/group_access_all.py new file mode 100644 index 0000000..1960d39 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/group_access_all.py @@ -0,0 +1,97 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import ConfigDict, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.group_access import GroupAccess +from typing import Optional, Set +from typing_extensions import Self + +class GroupAccessAll(GroupAccess): + """ + GroupAccessAll + """ # noqa: E501 + type: StrictStr + description: Optional[StrictStr] = None + __properties: ClassVar[List[str]] = ["groupid", "description", "type"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GroupAccessAll from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GroupAccessAll from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in GroupAccessAll) in the input: " + _key) + + _obj = cls.model_validate({ + "groupid": obj.get("groupid"), + "description": obj.get("description"), + "type": obj.get("type") if obj.get("type") is not None else 'GroupAccessAll' + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/group_access_none.py b/pyvcell/_internal/api/vcell_client/models/group_access_none.py new file mode 100644 index 0000000..84dbbed --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/group_access_none.py @@ -0,0 +1,97 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import ConfigDict, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.group_access import GroupAccess +from typing import Optional, Set +from typing_extensions import Self + +class GroupAccessNone(GroupAccess): + """ + GroupAccessNone + """ # noqa: E501 + type: StrictStr + description: Optional[StrictStr] = None + __properties: ClassVar[List[str]] = ["groupid", "description", "type"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GroupAccessNone from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GroupAccessNone from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in GroupAccessNone) in the input: " + _key) + + _obj = cls.model_validate({ + "groupid": obj.get("groupid"), + "description": obj.get("description"), + "type": obj.get("type") if obj.get("type") is not None else 'GroupAccessNone' + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/group_access_some.py b/pyvcell/_internal/api/vcell_client/models/group_access_some.py new file mode 100644 index 0000000..d3fe28a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/group_access_some.py @@ -0,0 +1,129 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import ConfigDict, Field, StrictBool, StrictFloat, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional, Union +from pyvcell._internal.api.vcell_client.models.group_access import GroupAccess +from pyvcell._internal.api.vcell_client.models.user import User +from typing import Optional, Set +from typing_extensions import Self + +class GroupAccessSome(GroupAccess): + """ + GroupAccessSome + """ # noqa: E501 + type: StrictStr + hash: Optional[Union[StrictFloat, StrictInt]] = None + group_members: Optional[List[User]] = Field(default=None, alias="groupMembers") + hidden_members: Optional[List[StrictBool]] = Field(default=None, alias="hiddenMembers") + description: Optional[StrictStr] = None + hidden_group_members: Optional[List[User]] = Field(default=None, alias="hiddenGroupMembers") + normal_group_members: Optional[List[User]] = Field(default=None, alias="normalGroupMembers") + __properties: ClassVar[List[str]] = ["groupid", "description", "type", "hash", "groupMembers", "hiddenMembers", "hiddenGroupMembers", "normalGroupMembers"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GroupAccessSome from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in group_members (list) + _items = [] + if self.group_members: + for _item_group_members in self.group_members: + if _item_group_members: + _items.append(_item_group_members.to_dict()) + _dict['groupMembers'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in hidden_group_members (list) + _items = [] + if self.hidden_group_members: + for _item_hidden_group_members in self.hidden_group_members: + if _item_hidden_group_members: + _items.append(_item_hidden_group_members.to_dict()) + _dict['hiddenGroupMembers'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in normal_group_members (list) + _items = [] + if self.normal_group_members: + for _item_normal_group_members in self.normal_group_members: + if _item_normal_group_members: + _items.append(_item_normal_group_members.to_dict()) + _dict['normalGroupMembers'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GroupAccessSome from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in GroupAccessSome) in the input: " + _key) + + _obj = cls.model_validate({ + "groupid": obj.get("groupid"), + "description": obj.get("description"), + "type": obj.get("type") if obj.get("type") is not None else 'GroupAccessSome', + "hash": obj.get("hash"), + "groupMembers": [User.from_dict(_item) for _item in obj["groupMembers"]] if obj.get("groupMembers") is not None else None, + "hiddenMembers": obj.get("hiddenMembers"), + "hiddenGroupMembers": [User.from_dict(_item) for _item in obj["hiddenGroupMembers"]] if obj.get("hiddenGroupMembers") is not None else None, + "normalGroupMembers": [User.from_dict(_item) for _item in obj["normalGroupMembers"]] if obj.get("normalGroupMembers") is not None else None + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/hello_world_message.py b/pyvcell/_internal/api/vcell_client/models/hello_world_message.py index f06c311..20b47c8 100644 --- a/pyvcell/_internal/api/vcell_client/models/hello_world_message.py +++ b/pyvcell/_internal/api/vcell_client/models/hello_world_message.py @@ -1,31 +1,32 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set from typing_extensions import Self - class HelloWorldMessage(BaseModel): """ HelloWorldMessage - """ - + """ # noqa: E501 message: Optional[StrictStr] = None __properties: ClassVar[List[str]] = ["message"] @@ -35,6 +36,7 @@ class HelloWorldMessage(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -59,7 +61,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -80,9 +83,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in HelloWorldMessage) in the input: " + _key - ) + raise ValueError("Error due to additional fields (not defined in HelloWorldMessage) in the input: " + _key) - _obj = cls.model_validate({"message": obj.get("message")}) + _obj = cls.model_validate({ + "message": obj.get("message") + }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/htc_job_id.py b/pyvcell/_internal/api/vcell_client/models/htc_job_id.py index b756a53..bccf16a 100644 --- a/pyvcell/_internal/api/vcell_client/models/htc_job_id.py +++ b/pyvcell/_internal/api/vcell_client/models/htc_job_id.py @@ -1,33 +1,33 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr -from typing_extensions import Self - +from typing import Any, ClassVar, Dict, List, Optional from pyvcell._internal.api.vcell_client.models.batch_system_type import BatchSystemType - +from typing import Optional, Set +from typing_extensions import Self class HtcJobID(BaseModel): """ HtcJobID - """ - + """ # noqa: E501 job_number: Optional[StrictInt] = Field(default=None, alias="jobNumber") server: Optional[StrictStr] = None batch_system_type: Optional[BatchSystemType] = Field(default=None, alias="batchSystemType") @@ -39,6 +39,7 @@ class HtcJobID(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,7 +64,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -89,6 +91,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "jobNumber": obj.get("jobNumber"), "server": obj.get("server"), - "batchSystemType": obj.get("batchSystemType"), + "batchSystemType": obj.get("batchSystemType") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/human_readable_export_data.py b/pyvcell/_internal/api/vcell_client/models/human_readable_export_data.py new file mode 100644 index 0000000..cd5101d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/human_readable_export_data.py @@ -0,0 +1,113 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + +class HumanReadableExportData(BaseModel): + """ + HumanReadableExportData + """ # noqa: E501 + simulation_name: Optional[StrictStr] = Field(default=None, alias="simulationName") + biomodel_name: Optional[StrictStr] = Field(default=None, alias="biomodelName") + application_name: Optional[StrictStr] = Field(default=None, alias="applicationName") + different_parameter_values: Optional[List[StrictStr]] = Field(default=None, alias="differentParameterValues") + application_type: Optional[StrictStr] = Field(default=None, alias="applicationType") + server_saved_file_name: Optional[StrictStr] = Field(default=None, alias="serverSavedFileName") + non_spatial: Optional[StrictBool] = Field(default=None, alias="nonSpatial") + sub_volume: Optional[Dict[str, StrictStr]] = Field(default=None, alias="subVolume") + z_slices: Optional[StrictInt] = Field(default=None, alias="zSlices") + t_slices: Optional[StrictInt] = Field(default=None, alias="tSlices") + num_channels: Optional[StrictInt] = Field(default=None, alias="numChannels") + __properties: ClassVar[List[str]] = ["simulationName", "biomodelName", "applicationName", "differentParameterValues", "applicationType", "serverSavedFileName", "nonSpatial", "subVolume", "zSlices", "tSlices", "numChannels"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of HumanReadableExportData from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of HumanReadableExportData from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in HumanReadableExportData) in the input: " + _key) + + _obj = cls.model_validate({ + "simulationName": obj.get("simulationName"), + "biomodelName": obj.get("biomodelName"), + "applicationName": obj.get("applicationName"), + "differentParameterValues": obj.get("differentParameterValues"), + "applicationType": obj.get("applicationType"), + "serverSavedFileName": obj.get("serverSavedFileName"), + "nonSpatial": obj.get("nonSpatial"), + "subVolume": obj.get("subVolume"), + "zSlices": obj.get("zSlices"), + "tSlices": obj.get("tSlices"), + "numChannels": obj.get("numChannels") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/i_size.py b/pyvcell/_internal/api/vcell_client/models/i_size.py index da654e3..8f2a1cd 100644 --- a/pyvcell/_internal/api/vcell_client/models/i_size.py +++ b/pyvcell/_internal/api/vcell_client/models/i_size.py @@ -1,31 +1,32 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, StrictInt +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set from typing_extensions import Self - class ISize(BaseModel): """ ISize - """ - + """ # noqa: E501 x: Optional[StrictInt] = None y: Optional[StrictInt] = None z: Optional[StrictInt] = None @@ -37,6 +38,7 @@ class ISize(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -61,7 +63,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -84,5 +87,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if _key not in cls.__properties: raise ValueError("Error due to additional fields (not defined in ISize) in the input: " + _key) - _obj = cls.model_validate({"x": obj.get("x"), "y": obj.get("y"), "z": obj.get("z")}) + _obj = cls.model_validate({ + "x": obj.get("x"), + "y": obj.get("y"), + "z": obj.get("z") + }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/identity.py b/pyvcell/_internal/api/vcell_client/models/identity.py index 20746af..aa0ccea 100644 --- a/pyvcell/_internal/api/vcell_client/models/identity.py +++ b/pyvcell/_internal/api/vcell_client/models/identity.py @@ -1,31 +1,32 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set from typing_extensions import Self - class Identity(BaseModel): """ Identity - """ - + """ # noqa: E501 principal_name: Optional[StrictStr] = None roles: Optional[List[StrictStr]] = None attributes: Optional[List[StrictStr]] = None @@ -38,6 +39,7 @@ class Identity(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -62,7 +64,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -89,6 +92,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "principal_name": obj.get("principal_name"), "roles": obj.get("roles"), "attributes": obj.get("attributes"), - "credentials": obj.get("credentials"), + "credentials": obj.get("credentials") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/math_model_child_summary.py b/pyvcell/_internal/api/vcell_client/models/math_model_child_summary.py new file mode 100644 index 0000000..765bd52 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/math_model_child_summary.py @@ -0,0 +1,102 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.math_type import MathType +from typing import Optional, Set +from typing_extensions import Self + +class MathModelChildSummary(BaseModel): + """ + MathModelChildSummary + """ # noqa: E501 + model_type: Optional[MathType] = Field(default=None, alias="modelType") + geometry_dimension: Optional[StrictInt] = Field(default=None, alias="geometryDimension") + geometry_name: Optional[StrictStr] = Field(default=None, alias="geometryName") + simulation_annotations: Optional[List[StrictStr]] = Field(default=None, alias="simulationAnnotations") + simulation_names: Optional[List[StrictStr]] = Field(default=None, alias="simulationNames") + __properties: ClassVar[List[str]] = ["modelType", "geometryDimension", "geometryName", "simulationAnnotations", "simulationNames"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of MathModelChildSummary from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of MathModelChildSummary from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in MathModelChildSummary) in the input: " + _key) + + _obj = cls.model_validate({ + "modelType": obj.get("modelType"), + "geometryDimension": obj.get("geometryDimension"), + "geometryName": obj.get("geometryName"), + "simulationAnnotations": obj.get("simulationAnnotations"), + "simulationNames": obj.get("simulationNames") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/math_model_summary.py b/pyvcell/_internal/api/vcell_client/models/math_model_summary.py new file mode 100644 index 0000000..79824ad --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/math_model_summary.py @@ -0,0 +1,123 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.math_model_child_summary import MathModelChildSummary +from pyvcell._internal.api.vcell_client.models.publication_info import PublicationInfo +from pyvcell._internal.api.vcell_client.models.v_cell_software_version import VCellSoftwareVersion +from pyvcell._internal.api.vcell_client.models.version import Version +from typing import Optional, Set +from typing_extensions import Self + +class MathModelSummary(BaseModel): + """ + MathModelSummary + """ # noqa: E501 + version: Optional[Version] = None + key_value: Optional[StrictStr] = Field(default=None, alias="keyValue") + model_info: Optional[MathModelChildSummary] = Field(default=None, alias="modelInfo") + software_version: Optional[VCellSoftwareVersion] = Field(default=None, alias="softwareVersion") + publication_infos: Optional[List[PublicationInfo]] = Field(default=None, alias="publicationInfos") + annotated_functions: Optional[StrictStr] = Field(default=None, alias="annotatedFunctions") + __properties: ClassVar[List[str]] = ["version", "keyValue", "modelInfo", "softwareVersion", "publicationInfos", "annotatedFunctions"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of MathModelSummary from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of version + if self.version: + _dict['version'] = self.version.to_dict() + # override the default output from pydantic by calling `to_dict()` of model_info + if self.model_info: + _dict['modelInfo'] = self.model_info.to_dict() + # override the default output from pydantic by calling `to_dict()` of software_version + if self.software_version: + _dict['softwareVersion'] = self.software_version.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in publication_infos (list) + _items = [] + if self.publication_infos: + for _item_publication_infos in self.publication_infos: + if _item_publication_infos: + _items.append(_item_publication_infos.to_dict()) + _dict['publicationInfos'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of MathModelSummary from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in MathModelSummary) in the input: " + _key) + + _obj = cls.model_validate({ + "version": Version.from_dict(obj["version"]) if obj.get("version") is not None else None, + "keyValue": obj.get("keyValue"), + "modelInfo": MathModelChildSummary.from_dict(obj["modelInfo"]) if obj.get("modelInfo") is not None else None, + "softwareVersion": VCellSoftwareVersion.from_dict(obj["softwareVersion"]) if obj.get("softwareVersion") is not None else None, + "publicationInfos": [PublicationInfo.from_dict(_item) for _item in obj["publicationInfos"]] if obj.get("publicationInfos") is not None else None, + "annotatedFunctions": obj.get("annotatedFunctions") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/math_type.py b/pyvcell/_internal/api/vcell_client/models/math_type.py new file mode 100644 index 0000000..3b2473c --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/math_type.py @@ -0,0 +1,41 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class MathType(str, Enum): + """ + MathType + """ + + """ + allowed enum values + """ + RULEBASED = 'RuleBased' + STOCHASTIC = 'Stochastic' + DETERMINISTIC = 'Deterministic' + SPRINGSALAD = 'SpringSaLaD' + UNKNOWN = 'Unknown' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of MathType from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/mathmodel_ref.py b/pyvcell/_internal/api/vcell_client/models/mathmodel_ref.py index 77b86fa..f0ba88e 100644 --- a/pyvcell/_internal/api/vcell_client/models/mathmodel_ref.py +++ b/pyvcell/_internal/api/vcell_client/models/mathmodel_ref.py @@ -1,31 +1,32 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set from typing_extensions import Self - class MathmodelRef(BaseModel): """ MathmodelRef - """ - + """ # noqa: E501 mm_key: Optional[StrictInt] = Field(default=None, alias="mmKey") name: Optional[StrictStr] = None owner_name: Optional[StrictStr] = Field(default=None, alias="ownerName") @@ -39,6 +40,7 @@ class MathmodelRef(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,7 +65,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -91,6 +94,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "name": obj.get("name"), "ownerName": obj.get("ownerName"), "ownerKey": obj.get("ownerKey"), - "versionFlag": obj.get("versionFlag"), + "versionFlag": obj.get("versionFlag") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/model_type.py b/pyvcell/_internal/api/vcell_client/models/model_type.py new file mode 100644 index 0000000..1b6bdd2 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/model_type.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class ModelType(str, Enum): + """ + ModelType + """ + + """ + allowed enum values + """ + BIOMODEL = 'BIOMODEL' + MATHMODEL = 'MATHMODEL' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of ModelType from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/n5_export_request.py b/pyvcell/_internal/api/vcell_client/models/n5_export_request.py new file mode 100644 index 0000000..8efead2 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/n5_export_request.py @@ -0,0 +1,104 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.exportable_data_type import ExportableDataType +from pyvcell._internal.api.vcell_client.models.standard_export_info import StandardExportInfo +from typing import Optional, Set +from typing_extensions import Self + +class N5ExportRequest(BaseModel): + """ + N5ExportRequest + """ # noqa: E501 + standard_export_information: Optional[StandardExportInfo] = Field(default=None, alias="standardExportInformation") + sub_volume: Optional[Dict[str, StrictStr]] = Field(default=None, alias="subVolume") + exportable_data_type: Optional[ExportableDataType] = Field(default=None, alias="exportableDataType") + dataset_name: Optional[StrictStr] = Field(default=None, alias="datasetName") + __properties: ClassVar[List[str]] = ["standardExportInformation", "subVolume", "exportableDataType", "datasetName"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of N5ExportRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of standard_export_information + if self.standard_export_information: + _dict['standardExportInformation'] = self.standard_export_information.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of N5ExportRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in N5ExportRequest) in the input: " + _key) + + _obj = cls.model_validate({ + "standardExportInformation": StandardExportInfo.from_dict(obj["standardExportInformation"]) if obj.get("standardExportInformation") is not None else None, + "subVolume": obj.get("subVolume"), + "exportableDataType": obj.get("exportableDataType"), + "datasetName": obj.get("datasetName") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/origin.py b/pyvcell/_internal/api/vcell_client/models/origin.py index 65d29f9..ed2e661 100644 --- a/pyvcell/_internal/api/vcell_client/models/origin.py +++ b/pyvcell/_internal/api/vcell_client/models/origin.py @@ -1,31 +1,32 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set, Union +import json from pydantic import BaseModel, ConfigDict, StrictFloat, StrictInt +from typing import Any, ClassVar, Dict, List, Optional, Union +from typing import Optional, Set from typing_extensions import Self - class Origin(BaseModel): """ Origin - """ - + """ # noqa: E501 x: Optional[Union[StrictFloat, StrictInt]] = None y: Optional[Union[StrictFloat, StrictInt]] = None z: Optional[Union[StrictFloat, StrictInt]] = None @@ -37,6 +38,7 @@ class Origin(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -61,7 +63,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -84,5 +87,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if _key not in cls.__properties: raise ValueError("Error due to additional fields (not defined in Origin) in the input: " + _key) - _obj = cls.model_validate({"x": obj.get("x"), "y": obj.get("y"), "z": obj.get("z")}) + _obj = cls.model_validate({ + "x": obj.get("x"), + "y": obj.get("y"), + "z": obj.get("z") + }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/publication.py b/pyvcell/_internal/api/vcell_client/models/publication.py index 4b9b8b6..98a7b80 100644 --- a/pyvcell/_internal/api/vcell_client/models/publication.py +++ b/pyvcell/_internal/api/vcell_client/models/publication.py @@ -1,35 +1,35 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from datetime import date -from typing import Any, ClassVar, Dict, List, Optional, Set +import json +from datetime import date from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr -from typing_extensions import Self - +from typing import Any, ClassVar, Dict, List, Optional from pyvcell._internal.api.vcell_client.models.biomodel_ref import BiomodelRef from pyvcell._internal.api.vcell_client.models.mathmodel_ref import MathmodelRef - +from typing import Optional, Set +from typing_extensions import Self class Publication(BaseModel): """ Publication - """ - + """ # noqa: E501 pub_key: Optional[StrictInt] = Field(default=None, alias="pubKey") title: Optional[StrictStr] = None authors: Optional[List[StrictStr]] = None @@ -43,21 +43,7 @@ class Publication(BaseModel): biomodel_refs: Optional[List[BiomodelRef]] = Field(default=None, alias="biomodelRefs") mathmodel_refs: Optional[List[MathmodelRef]] = Field(default=None, alias="mathmodelRefs") var_date: Optional[date] = Field(default=None, alias="date") - __properties: ClassVar[List[str]] = [ - "pubKey", - "title", - "authors", - "year", - "citation", - "pubmedid", - "doi", - "endnoteid", - "url", - "wittid", - "biomodelRefs", - "mathmodelRefs", - "date", - ] + __properties: ClassVar[List[str]] = ["pubKey", "title", "authors", "year", "citation", "pubmedid", "doi", "endnoteid", "url", "wittid", "biomodelRefs", "mathmodelRefs", "date"] model_config = ConfigDict( populate_by_name=True, @@ -65,6 +51,7 @@ class Publication(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -89,7 +76,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -102,14 +90,14 @@ def to_dict(self) -> Dict[str, Any]: for _item_biomodel_refs in self.biomodel_refs: if _item_biomodel_refs: _items.append(_item_biomodel_refs.to_dict()) - _dict["biomodelRefs"] = _items + _dict['biomodelRefs'] = _items # override the default output from pydantic by calling `to_dict()` of each item in mathmodel_refs (list) _items = [] if self.mathmodel_refs: for _item_mathmodel_refs in self.mathmodel_refs: if _item_mathmodel_refs: _items.append(_item_mathmodel_refs.to_dict()) - _dict["mathmodelRefs"] = _items + _dict['mathmodelRefs'] = _items return _dict @classmethod @@ -137,12 +125,10 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "endnoteid": obj.get("endnoteid"), "url": obj.get("url"), "wittid": obj.get("wittid"), - "biomodelRefs": [BiomodelRef.from_dict(_item) for _item in obj["biomodelRefs"]] - if obj.get("biomodelRefs") is not None - else None, - "mathmodelRefs": [MathmodelRef.from_dict(_item) for _item in obj["mathmodelRefs"]] - if obj.get("mathmodelRefs") is not None - else None, - "date": obj.get("date"), + "biomodelRefs": [BiomodelRef.from_dict(_item) for _item in obj["biomodelRefs"]] if obj.get("biomodelRefs") is not None else None, + "mathmodelRefs": [MathmodelRef.from_dict(_item) for _item in obj["mathmodelRefs"]] if obj.get("mathmodelRefs") is not None else None, + "date": obj.get("date") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/publication_info.py b/pyvcell/_internal/api/vcell_client/models/publication_info.py new file mode 100644 index 0000000..6b7871d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/publication_info.py @@ -0,0 +1,121 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import date +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.user import User +from pyvcell._internal.api.vcell_client.models.vc_document_type import VCDocumentType +from typing import Optional, Set +from typing_extensions import Self + +class PublicationInfo(BaseModel): + """ + PublicationInfo + """ # noqa: E501 + publication_key: Optional[StrictStr] = Field(default=None, alias="publicationKey") + version_key: Optional[StrictStr] = Field(default=None, alias="versionKey") + title: Optional[StrictStr] = None + authors: Optional[List[StrictStr]] = None + citation: Optional[StrictStr] = None + pubmedid: Optional[StrictStr] = None + doi: Optional[StrictStr] = None + url: Optional[StrictStr] = None + pubdate: Optional[date] = None + vc_document_type: Optional[VCDocumentType] = Field(default=None, alias="vcDocumentType") + user: Optional[User] = None + the_hash_code: Optional[StrictInt] = Field(default=None, alias="theHashCode") + __properties: ClassVar[List[str]] = ["publicationKey", "versionKey", "title", "authors", "citation", "pubmedid", "doi", "url", "pubdate", "vcDocumentType", "user", "theHashCode"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of PublicationInfo from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of user + if self.user: + _dict['user'] = self.user.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of PublicationInfo from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in PublicationInfo) in the input: " + _key) + + _obj = cls.model_validate({ + "publicationKey": obj.get("publicationKey"), + "versionKey": obj.get("versionKey"), + "title": obj.get("title"), + "authors": obj.get("authors"), + "citation": obj.get("citation"), + "pubmedid": obj.get("pubmedid"), + "doi": obj.get("doi"), + "url": obj.get("url"), + "pubdate": obj.get("pubdate"), + "vcDocumentType": obj.get("vcDocumentType"), + "user": User.from_dict(obj["user"]) if obj.get("user") is not None else None, + "theHashCode": obj.get("theHashCode") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/sampled_curve.py b/pyvcell/_internal/api/vcell_client/models/sampled_curve.py new file mode 100644 index 0000000..05dde15 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/sampled_curve.py @@ -0,0 +1,136 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import ConfigDict, Field, StrictFloat, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional, Union +from pyvcell._internal.api.vcell_client.models.control_point_curve import ControlPointCurve +from pyvcell._internal.api.vcell_client.models.coordinate import Coordinate +from typing import Optional, Set +from typing_extensions import Self + +class SampledCurve(ControlPointCurve): + """ + SampledCurve + """ # noqa: E501 + type: StrictStr + default_num_samples: Optional[StrictInt] = Field(default=None, alias="defaultNumSamples") + max_control_points: Optional[StrictInt] = Field(default=None, alias="maxControlPoints") + min_control_points: Optional[StrictInt] = Field(default=None, alias="minControlPoints") + segment_count: Optional[StrictInt] = Field(default=None, alias="segmentCount") + spatial_length: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="spatialLength") + __properties: ClassVar[List[str]] = ["bClosed", "description", "type", "beginningCoordinate", "defaultNumSamples", "endingCoordinate", "numSamplePoints", "segmentCount", "spatialLength", "closed", "valid", "controlPoints", "controlPointCount", "controlPointsVector", "maxControlPoints", "minControlPoints", "controlPointAddable"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of SampledCurve from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of beginning_coordinate + if self.beginning_coordinate: + _dict['beginningCoordinate'] = self.beginning_coordinate.to_dict() + # override the default output from pydantic by calling `to_dict()` of ending_coordinate + if self.ending_coordinate: + _dict['endingCoordinate'] = self.ending_coordinate.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in control_points (list) + _items = [] + if self.control_points: + for _item_control_points in self.control_points: + if _item_control_points: + _items.append(_item_control_points.to_dict()) + _dict['controlPoints'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in control_points_vector (list) + _items = [] + if self.control_points_vector: + for _item_control_points_vector in self.control_points_vector: + if _item_control_points_vector: + _items.append(_item_control_points_vector.to_dict()) + _dict['controlPointsVector'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of SampledCurve from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in SampledCurve) in the input: " + _key) + + _obj = cls.model_validate({ + "bClosed": obj.get("bClosed"), + "description": obj.get("description"), + "type": obj.get("type") if obj.get("type") is not None else 'SampledCurve', + "beginningCoordinate": Coordinate.from_dict(obj["beginningCoordinate"]) if obj.get("beginningCoordinate") is not None else None, + "defaultNumSamples": obj.get("defaultNumSamples"), + "endingCoordinate": Coordinate.from_dict(obj["endingCoordinate"]) if obj.get("endingCoordinate") is not None else None, + "numSamplePoints": obj.get("numSamplePoints"), + "segmentCount": obj.get("segmentCount"), + "spatialLength": obj.get("spatialLength"), + "closed": obj.get("closed"), + "valid": obj.get("valid"), + "controlPoints": [Coordinate.from_dict(_item) for _item in obj["controlPoints"]] if obj.get("controlPoints") is not None else None, + "controlPointCount": obj.get("controlPointCount"), + "controlPointsVector": [Coordinate.from_dict(_item) for _item in obj["controlPointsVector"]] if obj.get("controlPointsVector") is not None else None, + "maxControlPoints": obj.get("maxControlPoints"), + "minControlPoints": obj.get("minControlPoints"), + "controlPointAddable": obj.get("controlPointAddable") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/scheduler_status.py b/pyvcell/_internal/api/vcell_client/models/scheduler_status.py index d382a7f..c43e051 100644 --- a/pyvcell/_internal/api/vcell_client/models/scheduler_status.py +++ b/pyvcell/_internal/api/vcell_client/models/scheduler_status.py @@ -1,20 +1,21 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations +from __future__ import annotations import json from enum import Enum - from typing_extensions import Self @@ -26,15 +27,17 @@ class SchedulerStatus(str, Enum): """ allowed enum values """ - WAITING = "WAITING" - QUEUED = "QUEUED" - DISPATCHED = "DISPATCHED" - RUNNING = "RUNNING" - COMPLETED = "COMPLETED" - STOPPED = "STOPPED" - FAILED = "FAILED" + WAITING = 'WAITING' + QUEUED = 'QUEUED' + DISPATCHED = 'DISPATCHED' + RUNNING = 'RUNNING' + COMPLETED = 'COMPLETED' + STOPPED = 'STOPPED' + FAILED = 'FAILED' @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of SchedulerStatus from a JSON string""" return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/simulation_execution_status_record.py b/pyvcell/_internal/api/vcell_client/models/simulation_execution_status_record.py index cfc63f6..5938915 100644 --- a/pyvcell/_internal/api/vcell_client/models/simulation_execution_status_record.py +++ b/pyvcell/_internal/api/vcell_client/models/simulation_execution_status_record.py @@ -1,48 +1,41 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from datetime import datetime -from typing import Any, ClassVar, Dict, List, Optional, Set +import json +from datetime import datetime from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr -from typing_extensions import Self - +from typing import Any, ClassVar, Dict, List, Optional from pyvcell._internal.api.vcell_client.models.htc_job_id import HtcJobID - +from typing import Optional, Set +from typing_extensions import Self class SimulationExecutionStatusRecord(BaseModel): """ SimulationExecutionStatusRecord - """ - + """ # noqa: E501 field_start_date: Optional[datetime] = Field(default=None, alias="fieldStartDate") field_latest_update_date: Optional[datetime] = Field(default=None, alias="fieldLatestUpdateDate") field_end_date: Optional[datetime] = Field(default=None, alias="fieldEndDate") field_compute_host: Optional[StrictStr] = Field(default=None, alias="fieldComputeHost") field_has_data: Optional[StrictBool] = Field(default=None, alias="fieldHasData") field_htc_job_id: Optional[HtcJobID] = Field(default=None, alias="fieldHtcJobID") - __properties: ClassVar[List[str]] = [ - "fieldStartDate", - "fieldLatestUpdateDate", - "fieldEndDate", - "fieldComputeHost", - "fieldHasData", - "fieldHtcJobID", - ] + __properties: ClassVar[List[str]] = ["fieldStartDate", "fieldLatestUpdateDate", "fieldEndDate", "fieldComputeHost", "fieldHasData", "fieldHtcJobID"] model_config = ConfigDict( populate_by_name=True, @@ -50,6 +43,7 @@ class SimulationExecutionStatusRecord(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -74,7 +68,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -83,7 +78,7 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of field_htc_job_id if self.field_htc_job_id: - _dict["fieldHtcJobID"] = self.field_htc_job_id.to_dict() + _dict['fieldHtcJobID'] = self.field_htc_job_id.to_dict() return _dict @classmethod @@ -98,10 +93,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in SimulationExecutionStatusRecord) in the input: " - + _key - ) + raise ValueError("Error due to additional fields (not defined in SimulationExecutionStatusRecord) in the input: " + _key) _obj = cls.model_validate({ "fieldStartDate": obj.get("fieldStartDate"), @@ -109,6 +101,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "fieldEndDate": obj.get("fieldEndDate"), "fieldComputeHost": obj.get("fieldComputeHost"), "fieldHasData": obj.get("fieldHasData"), - "fieldHtcJobID": HtcJobID.from_dict(obj["fieldHtcJobID"]) if obj.get("fieldHtcJobID") is not None else None, + "fieldHtcJobID": HtcJobID.from_dict(obj["fieldHtcJobID"]) if obj.get("fieldHtcJobID") is not None else None }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/simulation_job_status_record.py b/pyvcell/_internal/api/vcell_client/models/simulation_job_status_record.py index 2db3acd..a84b1cd 100644 --- a/pyvcell/_internal/api/vcell_client/models/simulation_job_status_record.py +++ b/pyvcell/_internal/api/vcell_client/models/simulation_job_status_record.py @@ -1,40 +1,38 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from datetime import datetime -from typing import Any, ClassVar, Dict, List, Optional, Set +import json +from datetime import datetime from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr -from typing_extensions import Self - +from typing import Any, ClassVar, Dict, List, Optional from pyvcell._internal.api.vcell_client.models.scheduler_status import SchedulerStatus from pyvcell._internal.api.vcell_client.models.simulation_execution_status_record import SimulationExecutionStatusRecord from pyvcell._internal.api.vcell_client.models.simulation_message import SimulationMessage -from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import ( - SimulationQueueEntryStatusRecord, -) +from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import SimulationQueueEntryStatusRecord from pyvcell._internal.api.vcell_client.models.vc_simulation_identifier import VCSimulationIdentifier - +from typing import Optional, Set +from typing_extensions import Self class SimulationJobStatusRecord(BaseModel): """ SimulationJobStatusRecord - """ - + """ # noqa: E501 field_time_data_stamp: Optional[datetime] = Field(default=None, alias="fieldTimeDataStamp") field_vc_sim_id: Optional[VCSimulationIdentifier] = Field(default=None, alias="fieldVCSimID") field_submit_date: Optional[datetime] = Field(default=None, alias="fieldSubmitDate") @@ -43,24 +41,9 @@ class SimulationJobStatusRecord(BaseModel): field_task_id: Optional[StrictInt] = Field(default=None, alias="fieldTaskID") field_server_id: Optional[StrictStr] = Field(default=None, alias="fieldServerID") field_job_index: Optional[StrictInt] = Field(default=None, alias="fieldJobIndex") - field_simulation_execution_status: Optional[SimulationExecutionStatusRecord] = Field( - default=None, alias="fieldSimulationExecutionStatus" - ) - field_simulation_queue_entry_status: Optional[SimulationQueueEntryStatusRecord] = Field( - default=None, alias="fieldSimulationQueueEntryStatus" - ) - __properties: ClassVar[List[str]] = [ - "fieldTimeDataStamp", - "fieldVCSimID", - "fieldSubmitDate", - "fieldSchedulerStatus", - "fieldSimulationMessage", - "fieldTaskID", - "fieldServerID", - "fieldJobIndex", - "fieldSimulationExecutionStatus", - "fieldSimulationQueueEntryStatus", - ] + field_simulation_execution_status: Optional[SimulationExecutionStatusRecord] = Field(default=None, alias="fieldSimulationExecutionStatus") + field_simulation_queue_entry_status: Optional[SimulationQueueEntryStatusRecord] = Field(default=None, alias="fieldSimulationQueueEntryStatus") + __properties: ClassVar[List[str]] = ["fieldTimeDataStamp", "fieldVCSimID", "fieldSubmitDate", "fieldSchedulerStatus", "fieldSimulationMessage", "fieldTaskID", "fieldServerID", "fieldJobIndex", "fieldSimulationExecutionStatus", "fieldSimulationQueueEntryStatus"] model_config = ConfigDict( populate_by_name=True, @@ -68,6 +51,7 @@ class SimulationJobStatusRecord(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -92,7 +76,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -101,16 +86,16 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of field_vc_sim_id if self.field_vc_sim_id: - _dict["fieldVCSimID"] = self.field_vc_sim_id.to_dict() + _dict['fieldVCSimID'] = self.field_vc_sim_id.to_dict() # override the default output from pydantic by calling `to_dict()` of field_simulation_message if self.field_simulation_message: - _dict["fieldSimulationMessage"] = self.field_simulation_message.to_dict() + _dict['fieldSimulationMessage'] = self.field_simulation_message.to_dict() # override the default output from pydantic by calling `to_dict()` of field_simulation_execution_status if self.field_simulation_execution_status: - _dict["fieldSimulationExecutionStatus"] = self.field_simulation_execution_status.to_dict() + _dict['fieldSimulationExecutionStatus'] = self.field_simulation_execution_status.to_dict() # override the default output from pydantic by calling `to_dict()` of field_simulation_queue_entry_status if self.field_simulation_queue_entry_status: - _dict["fieldSimulationQueueEntryStatus"] = self.field_simulation_queue_entry_status.to_dict() + _dict['fieldSimulationQueueEntryStatus'] = self.field_simulation_queue_entry_status.to_dict() return _dict @classmethod @@ -125,32 +110,20 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in SimulationJobStatusRecord) in the input: " + _key - ) + raise ValueError("Error due to additional fields (not defined in SimulationJobStatusRecord) in the input: " + _key) _obj = cls.model_validate({ "fieldTimeDataStamp": obj.get("fieldTimeDataStamp"), - "fieldVCSimID": VCSimulationIdentifier.from_dict(obj["fieldVCSimID"]) - if obj.get("fieldVCSimID") is not None - else None, + "fieldVCSimID": VCSimulationIdentifier.from_dict(obj["fieldVCSimID"]) if obj.get("fieldVCSimID") is not None else None, "fieldSubmitDate": obj.get("fieldSubmitDate"), "fieldSchedulerStatus": obj.get("fieldSchedulerStatus"), - "fieldSimulationMessage": SimulationMessage.from_dict(obj["fieldSimulationMessage"]) - if obj.get("fieldSimulationMessage") is not None - else None, + "fieldSimulationMessage": SimulationMessage.from_dict(obj["fieldSimulationMessage"]) if obj.get("fieldSimulationMessage") is not None else None, "fieldTaskID": obj.get("fieldTaskID"), "fieldServerID": obj.get("fieldServerID"), "fieldJobIndex": obj.get("fieldJobIndex"), - "fieldSimulationExecutionStatus": SimulationExecutionStatusRecord.from_dict( - obj["fieldSimulationExecutionStatus"] - ) - if obj.get("fieldSimulationExecutionStatus") is not None - else None, - "fieldSimulationQueueEntryStatus": SimulationQueueEntryStatusRecord.from_dict( - obj["fieldSimulationQueueEntryStatus"] - ) - if obj.get("fieldSimulationQueueEntryStatus") is not None - else None, + "fieldSimulationExecutionStatus": SimulationExecutionStatusRecord.from_dict(obj["fieldSimulationExecutionStatus"]) if obj.get("fieldSimulationExecutionStatus") is not None else None, + "fieldSimulationQueueEntryStatus": SimulationQueueEntryStatusRecord.from_dict(obj["fieldSimulationQueueEntryStatus"]) if obj.get("fieldSimulationQueueEntryStatus") is not None else None }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/simulation_message.py b/pyvcell/_internal/api/vcell_client/models/simulation_message.py index f422524..aa993bb 100644 --- a/pyvcell/_internal/api/vcell_client/models/simulation_message.py +++ b/pyvcell/_internal/api/vcell_client/models/simulation_message.py @@ -1,34 +1,34 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictStr -from typing_extensions import Self - +from typing import Any, ClassVar, Dict, List, Optional from pyvcell._internal.api.vcell_client.models.detailed_state import DetailedState from pyvcell._internal.api.vcell_client.models.htc_job_id import HtcJobID - +from typing import Optional, Set +from typing_extensions import Self class SimulationMessage(BaseModel): """ SimulationMessage - """ - + """ # noqa: E501 detailed_state: Optional[DetailedState] = Field(default=None, alias="detailedState") message: Optional[StrictStr] = None htc_job_id: Optional[HtcJobID] = Field(default=None, alias="htcJobId") @@ -41,6 +41,7 @@ class SimulationMessage(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -65,7 +66,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -74,7 +76,7 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of htc_job_id if self.htc_job_id: - _dict["htcJobId"] = self.htc_job_id.to_dict() + _dict['htcJobId'] = self.htc_job_id.to_dict() return _dict @classmethod @@ -89,14 +91,14 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in SimulationMessage) in the input: " + _key - ) + raise ValueError("Error due to additional fields (not defined in SimulationMessage) in the input: " + _key) _obj = cls.model_validate({ "detailedState": obj.get("detailedState"), "message": obj.get("message"), "htcJobId": HtcJobID.from_dict(obj["htcJobId"]) if obj.get("htcJobId") is not None else None, - "displayMessage": obj.get("displayMessage"), + "displayMessage": obj.get("displayMessage") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/simulation_queue_entry_status_record.py b/pyvcell/_internal/api/vcell_client/models/simulation_queue_entry_status_record.py index 8e67a42..fa6fcdb 100644 --- a/pyvcell/_internal/api/vcell_client/models/simulation_queue_entry_status_record.py +++ b/pyvcell/_internal/api/vcell_client/models/simulation_queue_entry_status_record.py @@ -1,34 +1,34 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from datetime import datetime -from typing import Any, ClassVar, Dict, List, Optional, Set +import json +from datetime import datetime from pydantic import BaseModel, ConfigDict, Field, StrictInt -from typing_extensions import Self - +from typing import Any, ClassVar, Dict, List, Optional from pyvcell._internal.api.vcell_client.models.simulation_queue_id import SimulationQueueID - +from typing import Optional, Set +from typing_extensions import Self class SimulationQueueEntryStatusRecord(BaseModel): """ SimulationQueueEntryStatusRecord - """ - + """ # noqa: E501 field_queue_priority: Optional[StrictInt] = Field(default=None, alias="fieldQueuePriority") field_queue_date: Optional[datetime] = Field(default=None, alias="fieldQueueDate") field_queue_id: Optional[SimulationQueueID] = Field(default=None, alias="fieldQueueID") @@ -40,6 +40,7 @@ class SimulationQueueEntryStatusRecord(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -64,7 +65,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -85,14 +87,13 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in SimulationQueueEntryStatusRecord) in the input: " - + _key - ) + raise ValueError("Error due to additional fields (not defined in SimulationQueueEntryStatusRecord) in the input: " + _key) _obj = cls.model_validate({ "fieldQueuePriority": obj.get("fieldQueuePriority"), "fieldQueueDate": obj.get("fieldQueueDate"), - "fieldQueueID": obj.get("fieldQueueID"), + "fieldQueueID": obj.get("fieldQueueID") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/simulation_queue_id.py b/pyvcell/_internal/api/vcell_client/models/simulation_queue_id.py index aad5032..1cf6448 100644 --- a/pyvcell/_internal/api/vcell_client/models/simulation_queue_id.py +++ b/pyvcell/_internal/api/vcell_client/models/simulation_queue_id.py @@ -1,20 +1,21 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations +from __future__ import annotations import json from enum import Enum - from typing_extensions import Self @@ -26,11 +27,13 @@ class SimulationQueueID(str, Enum): """ allowed enum values """ - QUEUE_ID_WAITING = "QUEUE_ID_WAITING" - QUEUE_ID_SIMULATIONJOB = "QUEUE_ID_SIMULATIONJOB" - QUEUE_ID_NULL = "QUEUE_ID_NULL" + QUEUE_ID_WAITING = 'QUEUE_ID_WAITING' + QUEUE_ID_SIMULATIONJOB = 'QUEUE_ID_SIMULATIONJOB' + QUEUE_ID_NULL = 'QUEUE_ID_NULL' @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of SimulationQueueID from a JSON string""" return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/simulation_status_persistent_record.py b/pyvcell/_internal/api/vcell_client/models/simulation_status_persistent_record.py index 0e7f680..e736cff 100644 --- a/pyvcell/_internal/api/vcell_client/models/simulation_status_persistent_record.py +++ b/pyvcell/_internal/api/vcell_client/models/simulation_status_persistent_record.py @@ -1,33 +1,33 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr -from typing_extensions import Self - +from typing import Any, ClassVar, Dict, List, Optional from pyvcell._internal.api.vcell_client.models.status import Status - +from typing import Optional, Set +from typing_extensions import Self class SimulationStatusPersistentRecord(BaseModel): """ SimulationStatusPersistentRecord - """ - + """ # noqa: E501 status: Optional[Status] = None details: Optional[StrictStr] = None has_data: Optional[StrictBool] = Field(default=None, alias="hasData") @@ -39,6 +39,7 @@ class SimulationStatusPersistentRecord(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,7 +64,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -84,14 +86,13 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in SimulationStatusPersistentRecord) in the input: " - + _key - ) + raise ValueError("Error due to additional fields (not defined in SimulationStatusPersistentRecord) in the input: " + _key) _obj = cls.model_validate({ "status": obj.get("status"), "details": obj.get("details"), - "hasData": obj.get("hasData"), + "hasData": obj.get("hasData") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/source_model.py b/pyvcell/_internal/api/vcell_client/models/source_model.py new file mode 100644 index 0000000..9ec835a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/source_model.py @@ -0,0 +1,96 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.model_type import ModelType +from typing import Optional, Set +from typing_extensions import Self + +class SourceModel(BaseModel): + """ + SourceModel + """ # noqa: E501 + model_id: Optional[StrictStr] = Field(default=None, alias="modelID") + model_type: Optional[ModelType] = Field(default=None, alias="modelType") + __properties: ClassVar[List[str]] = ["modelID", "modelType"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of SourceModel from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of SourceModel from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in SourceModel) in the input: " + _key) + + _obj = cls.model_validate({ + "modelID": obj.get("modelID"), + "modelType": obj.get("modelType") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/spatial_selection.py b/pyvcell/_internal/api/vcell_client/models/spatial_selection.py new file mode 100644 index 0000000..1c2ab0f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/spatial_selection.py @@ -0,0 +1,131 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from importlib import import_module +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictFloat, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional, Union +from pyvcell._internal.api.vcell_client.models.curve_selection_info import CurveSelectionInfo +from pyvcell._internal.api.vcell_client.models.variable_type import VariableType +from typing import Optional, Set +from typing_extensions import Self + +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from pyvcell._internal.api.vcell_client.models.spatial_selection_contour import SpatialSelectionContour + from pyvcell._internal.api.vcell_client.models.spatial_selection_membrane import SpatialSelectionMembrane + from pyvcell._internal.api.vcell_client.models.spatial_selection_volume import SpatialSelectionVolume + +class SpatialSelection(BaseModel): + """ + SpatialSelection + """ # noqa: E501 + curve_selection_info: Optional[CurveSelectionInfo] = Field(default=None, alias="curveSelectionInfo") + var_type: Optional[VariableType] = Field(default=None, alias="varType") + type: StrictStr + smallest_mesh_cell_dimension_length: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="smallestMeshCellDimensionLength") + variable_type: Optional[VariableType] = Field(default=None, alias="variableType") + closed: Optional[StrictBool] = None + point: Optional[StrictBool] = None + __properties: ClassVar[List[str]] = ["curveSelectionInfo", "varType", "type", "smallestMeshCellDimensionLength", "variableType", "closed", "point"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + # JSON field name that stores the object type + __discriminator_property_name: ClassVar[str] = 'type' + + # discriminator mappings + __discriminator_value_class_map: ClassVar[Dict[str, str]] = { + 'Contour': 'SpatialSelectionContour','Membrane': 'SpatialSelectionMembrane','Volume': 'SpatialSelectionVolume' + } + + @classmethod + def get_discriminator_value(cls, obj: Dict[str, Any]) -> Optional[str]: + """Returns the discriminator value (object type) of the data""" + discriminator_value = obj[cls.__discriminator_property_name] + if discriminator_value: + return cls.__discriminator_value_class_map.get(discriminator_value) + else: + return None + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Union[SpatialSelectionContour, SpatialSelectionMembrane, SpatialSelectionVolume]]: + """Create an instance of SpatialSelection from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of curve_selection_info + if self.curve_selection_info: + _dict['curveSelectionInfo'] = self.curve_selection_info.to_dict() + # override the default output from pydantic by calling `to_dict()` of var_type + if self.var_type: + _dict['varType'] = self.var_type.to_dict() + # override the default output from pydantic by calling `to_dict()` of variable_type + if self.variable_type: + _dict['variableType'] = self.variable_type.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Dict[str, Any]) -> Optional[Union[SpatialSelectionContour, SpatialSelectionMembrane, SpatialSelectionVolume]]: + """Create an instance of SpatialSelection from a dict""" + # look up the object type based on discriminator mapping + object_type = cls.get_discriminator_value(obj) + if object_type == 'SpatialSelectionContour': + return import_module("pyvcell._internal.api.vcell_client.models.spatial_selection_contour").SpatialSelectionContour.from_dict(obj) + if object_type == 'SpatialSelectionMembrane': + return import_module("pyvcell._internal.api.vcell_client.models.spatial_selection_membrane").SpatialSelectionMembrane.from_dict(obj) + if object_type == 'SpatialSelectionVolume': + return import_module("pyvcell._internal.api.vcell_client.models.spatial_selection_volume").SpatialSelectionVolume.from_dict(obj) + + raise ValueError("SpatialSelection failed to lookup discriminator value from " + + json.dumps(obj) + ". Discriminator property name: " + cls.__discriminator_property_name + + ", mapping: " + json.dumps(cls.__discriminator_value_class_map)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/spatial_selection_contour.py b/pyvcell/_internal/api/vcell_client/models/spatial_selection_contour.py new file mode 100644 index 0000000..dde81f8 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/spatial_selection_contour.py @@ -0,0 +1,117 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.curve_selection_info import CurveSelectionInfo +from pyvcell._internal.api.vcell_client.models.spatial_selection import SpatialSelection +from pyvcell._internal.api.vcell_client.models.variable_type import VariableType +from typing import Optional, Set +from typing_extensions import Self + +class SpatialSelectionContour(SpatialSelection): + """ + SpatialSelectionContour + """ # noqa: E501 + type: StrictStr + field_sampled_data_indexes: Optional[List[StrictInt]] = Field(default=None, alias="fieldSampledDataIndexes") + index_samples: Optional[List[StrictInt]] = Field(default=None, alias="indexSamples") + sampled_data_indexes: Optional[List[StrictInt]] = Field(default=None, alias="sampledDataIndexes") + __properties: ClassVar[List[str]] = ["curveSelectionInfo", "varType", "type", "smallestMeshCellDimensionLength", "variableType", "closed", "point", "fieldSampledDataIndexes", "indexSamples", "sampledDataIndexes"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of SpatialSelectionContour from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of curve_selection_info + if self.curve_selection_info: + _dict['curveSelectionInfo'] = self.curve_selection_info.to_dict() + # override the default output from pydantic by calling `to_dict()` of var_type + if self.var_type: + _dict['varType'] = self.var_type.to_dict() + # override the default output from pydantic by calling `to_dict()` of variable_type + if self.variable_type: + _dict['variableType'] = self.variable_type.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of SpatialSelectionContour from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in SpatialSelectionContour) in the input: " + _key) + + _obj = cls.model_validate({ + "curveSelectionInfo": CurveSelectionInfo.from_dict(obj["curveSelectionInfo"]) if obj.get("curveSelectionInfo") is not None else None, + "varType": VariableType.from_dict(obj["varType"]) if obj.get("varType") is not None else None, + "type": obj.get("type") if obj.get("type") is not None else 'Contour', + "smallestMeshCellDimensionLength": obj.get("smallestMeshCellDimensionLength"), + "variableType": VariableType.from_dict(obj["variableType"]) if obj.get("variableType") is not None else None, + "closed": obj.get("closed"), + "point": obj.get("point"), + "fieldSampledDataIndexes": obj.get("fieldSampledDataIndexes"), + "indexSamples": obj.get("indexSamples"), + "sampledDataIndexes": obj.get("sampledDataIndexes") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/spatial_selection_membrane.py b/pyvcell/_internal/api/vcell_client/models/spatial_selection_membrane.py new file mode 100644 index 0000000..eae57bd --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/spatial_selection_membrane.py @@ -0,0 +1,119 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.curve_selection_info import CurveSelectionInfo +from pyvcell._internal.api.vcell_client.models.sampled_curve import SampledCurve +from pyvcell._internal.api.vcell_client.models.spatial_selection import SpatialSelection +from pyvcell._internal.api.vcell_client.models.variable_type import VariableType +from typing import Optional, Set +from typing_extensions import Self + +class SpatialSelectionMembrane(SpatialSelection): + """ + SpatialSelectionMembrane + """ # noqa: E501 + type: StrictStr + field_sampled_data_indexes: Optional[List[StrictInt]] = Field(default=None, alias="fieldSampledDataIndexes") + selection_source: Optional[SampledCurve] = Field(default=None, alias="selectionSource") + __properties: ClassVar[List[str]] = ["curveSelectionInfo", "varType", "type", "smallestMeshCellDimensionLength", "variableType", "closed", "point", "fieldSampledDataIndexes", "selectionSource"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of SpatialSelectionMembrane from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of curve_selection_info + if self.curve_selection_info: + _dict['curveSelectionInfo'] = self.curve_selection_info.to_dict() + # override the default output from pydantic by calling `to_dict()` of var_type + if self.var_type: + _dict['varType'] = self.var_type.to_dict() + # override the default output from pydantic by calling `to_dict()` of variable_type + if self.variable_type: + _dict['variableType'] = self.variable_type.to_dict() + # override the default output from pydantic by calling `to_dict()` of selection_source + if self.selection_source: + _dict['selectionSource'] = self.selection_source.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of SpatialSelectionMembrane from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in SpatialSelectionMembrane) in the input: " + _key) + + _obj = cls.model_validate({ + "curveSelectionInfo": CurveSelectionInfo.from_dict(obj["curveSelectionInfo"]) if obj.get("curveSelectionInfo") is not None else None, + "varType": VariableType.from_dict(obj["varType"]) if obj.get("varType") is not None else None, + "type": obj.get("type") if obj.get("type") is not None else 'Membrane', + "smallestMeshCellDimensionLength": obj.get("smallestMeshCellDimensionLength"), + "variableType": VariableType.from_dict(obj["variableType"]) if obj.get("variableType") is not None else None, + "closed": obj.get("closed"), + "point": obj.get("point"), + "fieldSampledDataIndexes": obj.get("fieldSampledDataIndexes"), + "selectionSource": SampledCurve.from_dict(obj["selectionSource"]) if obj.get("selectionSource") is not None else None + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/spatial_selection_volume.py b/pyvcell/_internal/api/vcell_client/models/spatial_selection_volume.py new file mode 100644 index 0000000..e3729f5 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/spatial_selection_volume.py @@ -0,0 +1,113 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import ConfigDict, StrictBool, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.curve_selection_info import CurveSelectionInfo +from pyvcell._internal.api.vcell_client.models.spatial_selection import SpatialSelection +from pyvcell._internal.api.vcell_client.models.variable_type import VariableType +from typing import Optional, Set +from typing_extensions import Self + +class SpatialSelectionVolume(SpatialSelection): + """ + SpatialSelectionVolume + """ # noqa: E501 + type: StrictStr + symmetric: Optional[StrictBool] = None + __properties: ClassVar[List[str]] = ["curveSelectionInfo", "varType", "type", "smallestMeshCellDimensionLength", "variableType", "closed", "point", "symmetric"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of SpatialSelectionVolume from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of curve_selection_info + if self.curve_selection_info: + _dict['curveSelectionInfo'] = self.curve_selection_info.to_dict() + # override the default output from pydantic by calling `to_dict()` of var_type + if self.var_type: + _dict['varType'] = self.var_type.to_dict() + # override the default output from pydantic by calling `to_dict()` of variable_type + if self.variable_type: + _dict['variableType'] = self.variable_type.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of SpatialSelectionVolume from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in SpatialSelectionVolume) in the input: " + _key) + + _obj = cls.model_validate({ + "curveSelectionInfo": CurveSelectionInfo.from_dict(obj["curveSelectionInfo"]) if obj.get("curveSelectionInfo") is not None else None, + "varType": VariableType.from_dict(obj["varType"]) if obj.get("varType") is not None else None, + "type": obj.get("type") if obj.get("type") is not None else 'Volume', + "smallestMeshCellDimensionLength": obj.get("smallestMeshCellDimensionLength"), + "variableType": VariableType.from_dict(obj["variableType"]) if obj.get("variableType") is not None else None, + "closed": obj.get("closed"), + "point": obj.get("point"), + "symmetric": obj.get("symmetric") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/specialclaim.py b/pyvcell/_internal/api/vcell_client/models/specialclaim.py new file mode 100644 index 0000000..6f8a24d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/specialclaim.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class SPECIALCLAIM(str, Enum): + """ + SPECIALCLAIM + """ + + """ + allowed enum values + """ + ADMINS = 'admins' + POWERUSERS = 'powerUsers' + PUBLICATIONEDITORS = 'publicationEditors' + VCELLSUPPORT = 'vcellSupport' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of SPECIALCLAIM from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/spline.py b/pyvcell/_internal/api/vcell_client/models/spline.py new file mode 100644 index 0000000..e76ea08 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/spline.py @@ -0,0 +1,135 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.control_point_curve import ControlPointCurve +from pyvcell._internal.api.vcell_client.models.coordinate import Coordinate +from typing import Optional, Set +from typing_extensions import Self + +class Spline(ControlPointCurve): + """ + Spline + """ # noqa: E501 + type: StrictStr + default_num_samples: Optional[StrictInt] = Field(default=None, alias="defaultNumSamples") + max_control_points: Optional[StrictInt] = Field(default=None, alias="maxControlPoints") + min_control_points: Optional[StrictInt] = Field(default=None, alias="minControlPoints") + segment_count: Optional[StrictInt] = Field(default=None, alias="segmentCount") + __properties: ClassVar[List[str]] = ["bClosed", "description", "type", "beginningCoordinate", "defaultNumSamples", "endingCoordinate", "numSamplePoints", "segmentCount", "spatialLength", "closed", "valid", "controlPoints", "controlPointCount", "controlPointsVector", "maxControlPoints", "minControlPoints", "controlPointAddable"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of Spline from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of beginning_coordinate + if self.beginning_coordinate: + _dict['beginningCoordinate'] = self.beginning_coordinate.to_dict() + # override the default output from pydantic by calling `to_dict()` of ending_coordinate + if self.ending_coordinate: + _dict['endingCoordinate'] = self.ending_coordinate.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in control_points (list) + _items = [] + if self.control_points: + for _item_control_points in self.control_points: + if _item_control_points: + _items.append(_item_control_points.to_dict()) + _dict['controlPoints'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in control_points_vector (list) + _items = [] + if self.control_points_vector: + for _item_control_points_vector in self.control_points_vector: + if _item_control_points_vector: + _items.append(_item_control_points_vector.to_dict()) + _dict['controlPointsVector'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of Spline from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in Spline) in the input: " + _key) + + _obj = cls.model_validate({ + "bClosed": obj.get("bClosed"), + "description": obj.get("description"), + "type": obj.get("type") if obj.get("type") is not None else 'Spline', + "beginningCoordinate": Coordinate.from_dict(obj["beginningCoordinate"]) if obj.get("beginningCoordinate") is not None else None, + "defaultNumSamples": obj.get("defaultNumSamples"), + "endingCoordinate": Coordinate.from_dict(obj["endingCoordinate"]) if obj.get("endingCoordinate") is not None else None, + "numSamplePoints": obj.get("numSamplePoints"), + "segmentCount": obj.get("segmentCount"), + "spatialLength": obj.get("spatialLength"), + "closed": obj.get("closed"), + "valid": obj.get("valid"), + "controlPoints": [Coordinate.from_dict(_item) for _item in obj["controlPoints"]] if obj.get("controlPoints") is not None else None, + "controlPointCount": obj.get("controlPointCount"), + "controlPointsVector": [Coordinate.from_dict(_item) for _item in obj["controlPointsVector"]] if obj.get("controlPointsVector") is not None else None, + "maxControlPoints": obj.get("maxControlPoints"), + "minControlPoints": obj.get("minControlPoints"), + "controlPointAddable": obj.get("controlPointAddable") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/standard_export_info.py b/pyvcell/_internal/api/vcell_client/models/standard_export_info.py new file mode 100644 index 0000000..1812f38 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/standard_export_info.py @@ -0,0 +1,127 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.annotated_function_dto import AnnotatedFunctionDTO +from pyvcell._internal.api.vcell_client.models.geometry_spec_dto import GeometrySpecDTO +from pyvcell._internal.api.vcell_client.models.time_specs import TimeSpecs +from pyvcell._internal.api.vcell_client.models.variable_specs import VariableSpecs +from typing import Optional, Set +from typing_extensions import Self + +class StandardExportInfo(BaseModel): + """ + StandardExportInfo + """ # noqa: E501 + output_context: Optional[List[AnnotatedFunctionDTO]] = Field(default=None, alias="outputContext") + context_name: Optional[StrictStr] = Field(default=None, alias="contextName") + simulation_name: Optional[StrictStr] = Field(default=None, alias="simulationName") + simulation_key: Optional[StrictStr] = Field(default=None, alias="simulationKey") + simulation_job: Optional[StrictInt] = Field(default=None, alias="simulationJob") + geometry_specs: Optional[GeometrySpecDTO] = Field(default=None, alias="geometrySpecs") + time_specs: Optional[TimeSpecs] = Field(default=None, alias="timeSpecs") + variable_specs: Optional[VariableSpecs] = Field(default=None, alias="variableSpecs") + __properties: ClassVar[List[str]] = ["outputContext", "contextName", "simulationName", "simulationKey", "simulationJob", "geometrySpecs", "timeSpecs", "variableSpecs"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of StandardExportInfo from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in output_context (list) + _items = [] + if self.output_context: + for _item_output_context in self.output_context: + if _item_output_context: + _items.append(_item_output_context.to_dict()) + _dict['outputContext'] = _items + # override the default output from pydantic by calling `to_dict()` of geometry_specs + if self.geometry_specs: + _dict['geometrySpecs'] = self.geometry_specs.to_dict() + # override the default output from pydantic by calling `to_dict()` of time_specs + if self.time_specs: + _dict['timeSpecs'] = self.time_specs.to_dict() + # override the default output from pydantic by calling `to_dict()` of variable_specs + if self.variable_specs: + _dict['variableSpecs'] = self.variable_specs.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of StandardExportInfo from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in StandardExportInfo) in the input: " + _key) + + _obj = cls.model_validate({ + "outputContext": [AnnotatedFunctionDTO.from_dict(_item) for _item in obj["outputContext"]] if obj.get("outputContext") is not None else None, + "contextName": obj.get("contextName"), + "simulationName": obj.get("simulationName"), + "simulationKey": obj.get("simulationKey"), + "simulationJob": obj.get("simulationJob"), + "geometrySpecs": GeometrySpecDTO.from_dict(obj["geometrySpecs"]) if obj.get("geometrySpecs") is not None else None, + "timeSpecs": TimeSpecs.from_dict(obj["timeSpecs"]) if obj.get("timeSpecs") is not None else None, + "variableSpecs": VariableSpecs.from_dict(obj["variableSpecs"]) if obj.get("variableSpecs") is not None else None + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/status.py b/pyvcell/_internal/api/vcell_client/models/status.py index 412b5c7..3f27b9a 100644 --- a/pyvcell/_internal/api/vcell_client/models/status.py +++ b/pyvcell/_internal/api/vcell_client/models/status.py @@ -1,20 +1,21 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations +from __future__ import annotations import json from enum import Enum - from typing_extensions import Self @@ -26,20 +27,22 @@ class Status(str, Enum): """ allowed enum values """ - UNKNOWN = "UNKNOWN" - NEVER_RAN = "NEVER_RAN" - START_REQUESTED = "START_REQUESTED" - DISPATCHED = "DISPATCHED" - WAITING = "WAITING" - QUEUED = "QUEUED" - RUNNING = "RUNNING" - COMPLETED = "COMPLETED" - FAILED = "FAILED" - STOP_REQUESTED = "STOP_REQUESTED" - STOPPED = "STOPPED" - NOT_SAVED = "NOT_SAVED" + UNKNOWN = 'UNKNOWN' + NEVER_RAN = 'NEVER_RAN' + START_REQUESTED = 'START_REQUESTED' + DISPATCHED = 'DISPATCHED' + WAITING = 'WAITING' + QUEUED = 'QUEUED' + RUNNING = 'RUNNING' + COMPLETED = 'COMPLETED' + FAILED = 'FAILED' + STOP_REQUESTED = 'STOP_REQUESTED' + STOPPED = 'STOPPED' + NOT_SAVED = 'NOT_SAVED' @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of Status from a JSON string""" return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/status_message.py b/pyvcell/_internal/api/vcell_client/models/status_message.py index 195d34a..d4db24a 100644 --- a/pyvcell/_internal/api/vcell_client/models/status_message.py +++ b/pyvcell/_internal/api/vcell_client/models/status_message.py @@ -1,33 +1,33 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set, Union +import json from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr -from typing_extensions import Self - +from typing import Any, ClassVar, Dict, List, Optional, Union from pyvcell._internal.api.vcell_client.models.simulation_job_status_record import SimulationJobStatusRecord - +from typing import Optional, Set +from typing_extensions import Self class StatusMessage(BaseModel): """ StatusMessage - """ - + """ # noqa: E501 job_status: Optional[SimulationJobStatusRecord] = Field(default=None, alias="jobStatus") user_name: Optional[StrictStr] = Field(default=None, alias="userName") progress: Optional[Union[StrictFloat, StrictInt]] = None @@ -40,6 +40,7 @@ class StatusMessage(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -64,7 +65,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -73,7 +75,7 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of job_status if self.job_status: - _dict["jobStatus"] = self.job_status.to_dict() + _dict['jobStatus'] = self.job_status.to_dict() return _dict @classmethod @@ -91,11 +93,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: raise ValueError("Error due to additional fields (not defined in StatusMessage) in the input: " + _key) _obj = cls.model_validate({ - "jobStatus": SimulationJobStatusRecord.from_dict(obj["jobStatus"]) - if obj.get("jobStatus") is not None - else None, + "jobStatus": SimulationJobStatusRecord.from_dict(obj["jobStatus"]) if obj.get("jobStatus") is not None else None, "userName": obj.get("userName"), "progress": obj.get("progress"), - "timepoint": obj.get("timepoint"), + "timepoint": obj.get("timepoint") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/time_mode.py b/pyvcell/_internal/api/vcell_client/models/time_mode.py new file mode 100644 index 0000000..7916b52 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/time_mode.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class TimeMode(str, Enum): + """ + TimeMode + """ + + """ + allowed enum values + """ + TIME_POINT = 'TIME_POINT' + TIME_RANGE = 'TIME_RANGE' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of TimeMode from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/time_specs.py b/pyvcell/_internal/api/vcell_client/models/time_specs.py new file mode 100644 index 0000000..bc0a2e8 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/time_specs.py @@ -0,0 +1,100 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt +from typing import Any, ClassVar, Dict, List, Optional, Union +from pyvcell._internal.api.vcell_client.models.time_mode import TimeMode +from typing import Optional, Set +from typing_extensions import Self + +class TimeSpecs(BaseModel): + """ + TimeSpecs + """ # noqa: E501 + begin_time_index: Optional[StrictInt] = Field(default=None, alias="beginTimeIndex") + end_time_index: Optional[StrictInt] = Field(default=None, alias="endTimeIndex") + all_times: Optional[List[Union[StrictFloat, StrictInt]]] = Field(default=None, alias="allTimes") + mode: Optional[TimeMode] = None + __properties: ClassVar[List[str]] = ["beginTimeIndex", "endTimeIndex", "allTimes", "mode"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of TimeSpecs from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of TimeSpecs from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in TimeSpecs) in the input: " + _key) + + _obj = cls.model_validate({ + "beginTimeIndex": obj.get("beginTimeIndex"), + "endTimeIndex": obj.get("endTimeIndex"), + "allTimes": obj.get("allTimes"), + "mode": obj.get("mode") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/user.py b/pyvcell/_internal/api/vcell_client/models/user.py index 5e1959b..0d1b6e8 100644 --- a/pyvcell/_internal/api/vcell_client/models/user.py +++ b/pyvcell/_internal/api/vcell_client/models/user.py @@ -1,38 +1,37 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json -from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.specialclaim import SPECIALCLAIM +from typing import Optional, Set from typing_extensions import Self -from pyvcell._internal.api.vcell_client.models.key_value import KeyValue - - class User(BaseModel): """ User - """ - + """ # noqa: E501 user_name: Optional[StrictStr] = Field(default=None, alias="userName") - key: Optional[KeyValue] = None - name: Optional[StrictStr] = None - test_account: Optional[StrictBool] = Field(default=None, alias="testAccount") - __properties: ClassVar[List[str]] = ["userName", "key", "name", "testAccount"] + key: Optional[StrictStr] = None + my_specials: Optional[List[SPECIALCLAIM]] = Field(default=None, alias="mySpecials") + __properties: ClassVar[List[str]] = ["userName", "key", "mySpecials"] model_config = ConfigDict( populate_by_name=True, @@ -40,6 +39,7 @@ class User(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -64,16 +64,14 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, exclude=excluded_fields, exclude_none=True, ) - # override the default output from pydantic by calling `to_dict()` of key - if self.key: - _dict["key"] = self.key.to_dict() return _dict @classmethod @@ -92,8 +90,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "userName": obj.get("userName"), - "key": KeyValue.from_dict(obj["key"]) if obj.get("key") is not None else None, - "name": obj.get("name"), - "testAccount": obj.get("testAccount"), + "key": obj.get("key"), + "mySpecials": obj.get("mySpecials") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/user_identity_json_safe.py b/pyvcell/_internal/api/vcell_client/models/user_identity_json_safe.py index 21939dc..a353684 100644 --- a/pyvcell/_internal/api/vcell_client/models/user_identity_json_safe.py +++ b/pyvcell/_internal/api/vcell_client/models/user_identity_json_safe.py @@ -1,31 +1,32 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set, Union +import json from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictFloat, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional, Union +from typing import Optional, Set from typing_extensions import Self - class UserIdentityJSONSafe(BaseModel): """ UserIdentityJSONSafe - """ - + """ # noqa: E501 mapped: Optional[StrictBool] = None user_name: Optional[StrictStr] = Field(default=None, alias="userName") id: Optional[Union[StrictFloat, StrictInt]] = None @@ -39,6 +40,7 @@ class UserIdentityJSONSafe(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,7 +65,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -84,15 +87,15 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in UserIdentityJSONSafe) in the input: " + _key - ) + raise ValueError("Error due to additional fields (not defined in UserIdentityJSONSafe) in the input: " + _key) _obj = cls.model_validate({ "mapped": obj.get("mapped"), "userName": obj.get("userName"), "id": obj.get("id"), "subject": obj.get("subject"), - "insertDate": obj.get("insertDate"), + "insertDate": obj.get("insertDate") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/user_login_info_for_mapping.py b/pyvcell/_internal/api/vcell_client/models/user_login_info_for_mapping.py index 359650d..1dbc186 100644 --- a/pyvcell/_internal/api/vcell_client/models/user_login_info_for_mapping.py +++ b/pyvcell/_internal/api/vcell_client/models/user_login_info_for_mapping.py @@ -1,31 +1,32 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set from typing_extensions import Self - class UserLoginInfoForMapping(BaseModel): """ UserLoginInfoForMapping - """ - + """ # noqa: E501 user_id: Optional[StrictStr] = Field(default=None, alias="userID") password: Optional[StrictStr] = None __properties: ClassVar[List[str]] = ["userID", "password"] @@ -36,6 +37,7 @@ class UserLoginInfoForMapping(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -60,7 +62,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -81,9 +84,12 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in UserLoginInfoForMapping) in the input: " + _key - ) + raise ValueError("Error due to additional fields (not defined in UserLoginInfoForMapping) in the input: " + _key) - _obj = cls.model_validate({"userID": obj.get("userID"), "password": obj.get("password")}) + _obj = cls.model_validate({ + "userID": obj.get("userID"), + "password": obj.get("password") + }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/user_registration_info.py b/pyvcell/_internal/api/vcell_client/models/user_registration_info.py index df37afc..cefb91d 100644 --- a/pyvcell/_internal/api/vcell_client/models/user_registration_info.py +++ b/pyvcell/_internal/api/vcell_client/models/user_registration_info.py @@ -1,31 +1,32 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set from typing_extensions import Self - class UserRegistrationInfo(BaseModel): """ UserRegistrationInfo - """ - + """ # noqa: E501 user_id: Optional[StrictStr] = Field(default=None, alias="userID") title: Optional[StrictStr] = None organization: Optional[StrictStr] = None @@ -39,6 +40,7 @@ class UserRegistrationInfo(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,7 +65,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -84,15 +87,15 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in UserRegistrationInfo) in the input: " + _key - ) + raise ValueError("Error due to additional fields (not defined in UserRegistrationInfo) in the input: " + _key) _obj = cls.model_validate({ "userID": obj.get("userID"), "title": obj.get("title"), "organization": obj.get("organization"), "country": obj.get("country"), - "emailNotification": obj.get("emailNotification"), + "emailNotification": obj.get("emailNotification") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/v_cell_http_error.py b/pyvcell/_internal/api/vcell_client/models/v_cell_http_error.py new file mode 100644 index 0000000..08949f2 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/v_cell_http_error.py @@ -0,0 +1,95 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + +class VCellHTTPError(BaseModel): + """ + VCellHTTPError + """ # noqa: E501 + exception_type: Optional[StrictStr] = Field(default=None, alias="exceptionType") + message: Optional[StrictStr] = None + __properties: ClassVar[List[str]] = ["exceptionType", "message"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of VCellHTTPError from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of VCellHTTPError from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in VCellHTTPError) in the input: " + _key) + + _obj = cls.model_validate({ + "exceptionType": obj.get("exceptionType"), + "message": obj.get("message") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/v_cell_site.py b/pyvcell/_internal/api/vcell_client/models/v_cell_site.py new file mode 100644 index 0000000..0ad4f1d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/v_cell_site.py @@ -0,0 +1,41 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class VCellSite(str, Enum): + """ + VCellSite + """ + + """ + allowed enum values + """ + ALPHA = 'alpha' + BETA = 'beta' + REL = 'rel' + OTHER = 'other' + UNKNOWN = 'unknown' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of VCellSite from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/v_cell_software_version.py b/pyvcell/_internal/api/vcell_client/models/v_cell_software_version.py new file mode 100644 index 0000000..97d0d2f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/v_cell_software_version.py @@ -0,0 +1,110 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.v_cell_site import VCellSite +from typing import Optional, Set +from typing_extensions import Self + +class VCellSoftwareVersion(BaseModel): + """ + VCellSoftwareVersion + """ # noqa: E501 + software_version_string: Optional[StrictStr] = Field(default=None, alias="softwareVersionString") + vcell_site: Optional[VCellSite] = Field(default=None, alias="vcellSite") + build_number: Optional[StrictStr] = Field(default=None, alias="buildNumber") + version_number: Optional[StrictStr] = Field(default=None, alias="versionNumber") + major_version: Optional[StrictInt] = Field(default=None, alias="majorVersion") + minor_version: Optional[StrictInt] = Field(default=None, alias="minorVersion") + patch_version: Optional[StrictInt] = Field(default=None, alias="patchVersion") + build_int: Optional[StrictInt] = Field(default=None, alias="buildInt") + description: Optional[StrictStr] = None + __properties: ClassVar[List[str]] = ["softwareVersionString", "vcellSite", "buildNumber", "versionNumber", "majorVersion", "minorVersion", "patchVersion", "buildInt", "description"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of VCellSoftwareVersion from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of VCellSoftwareVersion from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in VCellSoftwareVersion) in the input: " + _key) + + _obj = cls.model_validate({ + "softwareVersionString": obj.get("softwareVersionString"), + "vcellSite": obj.get("vcellSite"), + "buildNumber": obj.get("buildNumber"), + "versionNumber": obj.get("versionNumber"), + "majorVersion": obj.get("majorVersion"), + "minorVersion": obj.get("minorVersion"), + "patchVersion": obj.get("patchVersion"), + "buildInt": obj.get("buildInt"), + "description": obj.get("description") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/variable_domain.py b/pyvcell/_internal/api/vcell_client/models/variable_domain.py index 7fc36cf..514417c 100644 --- a/pyvcell/_internal/api/vcell_client/models/variable_domain.py +++ b/pyvcell/_internal/api/vcell_client/models/variable_domain.py @@ -1,20 +1,21 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations +from __future__ import annotations import json from enum import Enum - from typing_extensions import Self @@ -26,15 +27,17 @@ class VariableDomain(str, Enum): """ allowed enum values """ - VARIABLEDOMAIN_POSTPROCESSING = "VARIABLEDOMAIN_POSTPROCESSING" - VARIABLEDOMAIN_UNKNOWN = "VARIABLEDOMAIN_UNKNOWN" - VARIABLEDOMAIN_VOLUME = "VARIABLEDOMAIN_VOLUME" - VARIABLEDOMAIN_MEMBRANE = "VARIABLEDOMAIN_MEMBRANE" - VARIABLEDOMAIN_CONTOUR = "VARIABLEDOMAIN_CONTOUR" - VARIABLEDOMAIN_NONSPATIAL = "VARIABLEDOMAIN_NONSPATIAL" - VARIABLEDOMAIN_POINT = "VARIABLEDOMAIN_POINT" + VARIABLEDOMAIN_POSTPROCESSING = 'VARIABLEDOMAIN_POSTPROCESSING' + VARIABLEDOMAIN_UNKNOWN = 'VARIABLEDOMAIN_UNKNOWN' + VARIABLEDOMAIN_VOLUME = 'VARIABLEDOMAIN_VOLUME' + VARIABLEDOMAIN_MEMBRANE = 'VARIABLEDOMAIN_MEMBRANE' + VARIABLEDOMAIN_CONTOUR = 'VARIABLEDOMAIN_CONTOUR' + VARIABLEDOMAIN_NONSPATIAL = 'VARIABLEDOMAIN_NONSPATIAL' + VARIABLEDOMAIN_POINT = 'VARIABLEDOMAIN_POINT' @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of VariableDomain from a JSON string""" return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/variable_mode.py b/pyvcell/_internal/api/vcell_client/models/variable_mode.py new file mode 100644 index 0000000..f49726d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/variable_mode.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class VariableMode(str, Enum): + """ + VariableMode + """ + + """ + allowed enum values + """ + VARIABLE_ONE = 'VARIABLE_ONE' + VARIABLE_MULTI = 'VARIABLE_MULTI' + VARIABLE_ALL = 'VARIABLE_ALL' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of VariableMode from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/variable_specs.py b/pyvcell/_internal/api/vcell_client/models/variable_specs.py new file mode 100644 index 0000000..07f7093 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/variable_specs.py @@ -0,0 +1,96 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.variable_mode import VariableMode +from typing import Optional, Set +from typing_extensions import Self + +class VariableSpecs(BaseModel): + """ + VariableSpecs + """ # noqa: E501 + variable_names: Optional[List[StrictStr]] = Field(default=None, alias="variableNames") + mode: Optional[VariableMode] = None + __properties: ClassVar[List[str]] = ["variableNames", "mode"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of VariableSpecs from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of VariableSpecs from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in VariableSpecs) in the input: " + _key) + + _obj = cls.model_validate({ + "variableNames": obj.get("variableNames"), + "mode": obj.get("mode") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/variable_type.py b/pyvcell/_internal/api/vcell_client/models/variable_type.py index cf69f7f..730d6cf 100644 --- a/pyvcell/_internal/api/vcell_client/models/variable_type.py +++ b/pyvcell/_internal/api/vcell_client/models/variable_type.py @@ -1,33 +1,33 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr -from typing_extensions import Self - +from typing import Any, ClassVar, Dict, List, Optional from pyvcell._internal.api.vcell_client.models.variable_domain import VariableDomain - +from typing import Optional, Set +from typing_extensions import Self class VariableType(BaseModel): """ VariableType - """ - + """ # noqa: E501 type: Optional[StrictInt] = None variable_domain: Optional[VariableDomain] = Field(default=None, alias="variableDomain") name: Optional[StrictStr] = None @@ -37,17 +37,7 @@ class VariableType(BaseModel): default_label: Optional[StrictStr] = Field(default=None, alias="defaultLabel") default_units: Optional[StrictStr] = Field(default=None, alias="defaultUnits") type_name: Optional[StrictStr] = Field(default=None, alias="typeName") - __properties: ClassVar[List[str]] = [ - "type", - "variableDomain", - "name", - "units", - "label", - "legacyWarn", - "defaultLabel", - "defaultUnits", - "typeName", - ] + __properties: ClassVar[List[str]] = ["type", "variableDomain", "name", "units", "label", "legacyWarn", "defaultLabel", "defaultUnits", "typeName"] model_config = ConfigDict( populate_by_name=True, @@ -55,6 +45,7 @@ class VariableType(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -79,7 +70,8 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, @@ -111,6 +103,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "legacyWarn": obj.get("legacyWarn"), "defaultLabel": obj.get("defaultLabel"), "defaultUnits": obj.get("defaultUnits"), - "typeName": obj.get("typeName"), + "typeName": obj.get("typeName") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/vc_document_type.py b/pyvcell/_internal/api/vcell_client/models/vc_document_type.py new file mode 100644 index 0000000..bb6ce8a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/vc_document_type.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class VCDocumentType(str, Enum): + """ + VCDocumentType + """ + + """ + allowed enum values + """ + BIOMODEL_DOC = 'BIOMODEL_DOC' + MATHMODEL_DOC = 'MATHMODEL_DOC' + GEOMETRY_DOC = 'GEOMETRY_DOC' + EXTERNALFILE_DOC = 'EXTERNALFILE_DOC' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of VCDocumentType from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/pyvcell/_internal/api/vcell_client/models/vc_image_summary.py b/pyvcell/_internal/api/vcell_client/models/vc_image_summary.py new file mode 100644 index 0000000..ede7ea8 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/vc_image_summary.py @@ -0,0 +1,121 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field +from typing import Any, ClassVar, Dict, List, Optional +from pyvcell._internal.api.vcell_client.models.extent import Extent +from pyvcell._internal.api.vcell_client.models.gif_image import GIFImage +from pyvcell._internal.api.vcell_client.models.i_size import ISize +from pyvcell._internal.api.vcell_client.models.v_cell_software_version import VCellSoftwareVersion +from pyvcell._internal.api.vcell_client.models.version import Version +from typing import Optional, Set +from typing_extensions import Self + +class VCImageSummary(BaseModel): + """ + VCImageSummary + """ # noqa: E501 + size: Optional[ISize] = None + extent: Optional[Extent] = None + version: Optional[Version] = None + preview: Optional[GIFImage] = None + software_version: Optional[VCellSoftwareVersion] = Field(default=None, alias="softwareVersion") + __properties: ClassVar[List[str]] = ["size", "extent", "version", "preview", "softwareVersion"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of VCImageSummary from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of size + if self.size: + _dict['size'] = self.size.to_dict() + # override the default output from pydantic by calling `to_dict()` of extent + if self.extent: + _dict['extent'] = self.extent.to_dict() + # override the default output from pydantic by calling `to_dict()` of version + if self.version: + _dict['version'] = self.version.to_dict() + # override the default output from pydantic by calling `to_dict()` of preview + if self.preview: + _dict['preview'] = self.preview.to_dict() + # override the default output from pydantic by calling `to_dict()` of software_version + if self.software_version: + _dict['softwareVersion'] = self.software_version.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of VCImageSummary from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in VCImageSummary) in the input: " + _key) + + _obj = cls.model_validate({ + "size": ISize.from_dict(obj["size"]) if obj.get("size") is not None else None, + "extent": Extent.from_dict(obj["extent"]) if obj.get("extent") is not None else None, + "version": Version.from_dict(obj["version"]) if obj.get("version") is not None else None, + "preview": GIFImage.from_dict(obj["preview"]) if obj.get("preview") is not None else None, + "softwareVersion": VCellSoftwareVersion.from_dict(obj["softwareVersion"]) if obj.get("softwareVersion") is not None else None + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/vc_simulation_identifier.py b/pyvcell/_internal/api/vcell_client/models/vc_simulation_identifier.py index ec4763d..1ba5d8c 100644 --- a/pyvcell/_internal/api/vcell_client/models/vc_simulation_identifier.py +++ b/pyvcell/_internal/api/vcell_client/models/vc_simulation_identifier.py @@ -1,38 +1,37 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -from __future__ import annotations -import json +from __future__ import annotations import pprint import re # noqa: F401 -from typing import Any, ClassVar, Dict, List, Optional, Set +import json from pydantic import BaseModel, ConfigDict, Field, StrictStr -from typing_extensions import Self - -from pyvcell._internal.api.vcell_client.models.key_value import KeyValue +from typing import Any, ClassVar, Dict, List, Optional from pyvcell._internal.api.vcell_client.models.user import User - +from typing import Optional, Set +from typing_extensions import Self class VCSimulationIdentifier(BaseModel): """ VCSimulationIdentifier - """ - - simulation_key: Optional[KeyValue] = Field(default=None, alias="simulationKey") + """ # noqa: E501 + simulation_key: Optional[StrictStr] = Field(default=None, alias="simulationKey") owner: Optional[User] = None - i_d: Optional[StrictStr] = Field(default=None, alias="iD") - __properties: ClassVar[List[str]] = ["simulationKey", "owner", "iD"] + id: Optional[StrictStr] = None + __properties: ClassVar[List[str]] = ["simulationKey", "owner", "id"] model_config = ConfigDict( populate_by_name=True, @@ -40,6 +39,7 @@ class VCSimulationIdentifier(BaseModel): protected_namespaces=(), ) + def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -64,19 +64,17 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([]) + excluded_fields: Set[str] = set([ + ]) _dict = self.model_dump( by_alias=True, exclude=excluded_fields, exclude_none=True, ) - # override the default output from pydantic by calling `to_dict()` of simulation_key - if self.simulation_key: - _dict["simulationKey"] = self.simulation_key.to_dict() # override the default output from pydantic by calling `to_dict()` of owner if self.owner: - _dict["owner"] = self.owner.to_dict() + _dict['owner'] = self.owner.to_dict() return _dict @classmethod @@ -91,13 +89,13 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError( - "Error due to additional fields (not defined in VCSimulationIdentifier) in the input: " + _key - ) + raise ValueError("Error due to additional fields (not defined in VCSimulationIdentifier) in the input: " + _key) _obj = cls.model_validate({ - "simulationKey": KeyValue.from_dict(obj["simulationKey"]) if obj.get("simulationKey") is not None else None, + "simulationKey": obj.get("simulationKey"), "owner": User.from_dict(obj["owner"]) if obj.get("owner") is not None else None, - "iD": obj.get("iD"), + "id": obj.get("id") }) return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/version.py b/pyvcell/_internal/api/vcell_client/models/version.py new file mode 100644 index 0000000..1599c99 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/version.py @@ -0,0 +1,122 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional, Union +from pyvcell._internal.api.vcell_client.models.group_access import GroupAccess +from pyvcell._internal.api.vcell_client.models.user import User +from pyvcell._internal.api.vcell_client.models.version_flag import VersionFlag +from typing import Optional, Set +from typing_extensions import Self + +class Version(BaseModel): + """ + Version + """ # noqa: E501 + version_key: Optional[StrictStr] = Field(default=None, alias="versionKey") + annot: Optional[StrictStr] = None + branch_id: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="branchID") + branch_point_ref_key: Optional[StrictStr] = Field(default=None, alias="branchPointRefKey") + var_date: Optional[datetime] = Field(default=None, alias="date") + flag: Optional[VersionFlag] = None + group_access: Optional[GroupAccess] = Field(default=None, alias="groupAccess") + name: Optional[StrictStr] = None + owner: Optional[User] = None + __properties: ClassVar[List[str]] = ["versionKey", "annot", "branchID", "branchPointRefKey", "date", "flag", "groupAccess", "name", "owner"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of Version from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of flag + if self.flag: + _dict['flag'] = self.flag.to_dict() + # override the default output from pydantic by calling `to_dict()` of group_access + if self.group_access: + _dict['groupAccess'] = self.group_access.to_dict() + # override the default output from pydantic by calling `to_dict()` of owner + if self.owner: + _dict['owner'] = self.owner.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of Version from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in Version) in the input: " + _key) + + _obj = cls.model_validate({ + "versionKey": obj.get("versionKey"), + "annot": obj.get("annot"), + "branchID": obj.get("branchID"), + "branchPointRefKey": obj.get("branchPointRefKey"), + "date": obj.get("date"), + "flag": VersionFlag.from_dict(obj["flag"]) if obj.get("flag") is not None else None, + "groupAccess": GroupAccess.from_dict(obj["groupAccess"]) if obj.get("groupAccess") is not None else None, + "name": obj.get("name"), + "owner": User.from_dict(obj["owner"]) if obj.get("owner") is not None else None + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/models/version_flag.py b/pyvcell/_internal/api/vcell_client/models/version_flag.py new file mode 100644 index 0000000..37d2f78 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/version_flag.py @@ -0,0 +1,101 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set +from typing_extensions import Self + +class VersionFlag(BaseModel): + """ + VersionFlag + """ # noqa: E501 + version_flag: Optional[StrictInt] = Field(default=None, alias="versionFlag") + int_value: Optional[StrictInt] = Field(default=None, alias="intValue") + archived: Optional[StrictBool] = None + current: Optional[StrictBool] = None + published: Optional[StrictBool] = None + __properties: ClassVar[List[str]] = ["versionFlag", "intValue", "archived", "current", "published"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of VersionFlag from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of VersionFlag from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + # raise errors for additional fields in the input + for _key in obj.keys(): + if _key not in cls.__properties: + raise ValueError("Error due to additional fields (not defined in VersionFlag) in the input: " + _key) + + _obj = cls.model_validate({ + "versionFlag": obj.get("versionFlag"), + "intValue": obj.get("intValue"), + "archived": obj.get("archived"), + "current": obj.get("current"), + "published": obj.get("published") + }) + return _obj + + diff --git a/pyvcell/_internal/api/vcell_client/rest.py b/pyvcell/_internal/api/vcell_client/rest.py index bd127c5..3d75098 100644 --- a/pyvcell/_internal/api/vcell_client/rest.py +++ b/pyvcell/_internal/api/vcell_client/rest.py @@ -1,14 +1,17 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import io import json @@ -34,6 +37,7 @@ def is_socks_proxy_url(url): class RESTResponse(io.IOBase): + def __init__(self, resp) -> None: self.response = resp self.status = resp.status @@ -45,21 +49,27 @@ def read(self): self.data = self.response.data return self.data + @property + def headers(self): + """Returns a dictionary of response headers.""" + return self.response.headers + def getheaders(self): - """Returns a dictionary of the response headers.""" + """Returns a dictionary of the response headers; use ``headers`` instead.""" return self.response.headers def getheader(self, name, default=None): - """Returns a given response header.""" + """Returns a given response header; use ``headers.get()`` instead.""" return self.response.headers.get(name, default) class RESTClientObject: + def __init__(self, configuration) -> None: # urllib3.PoolManager will pass all kw parameters to connectionpool - # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 - # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 - # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501 + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501 + # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501 # cert_reqs if configuration.verify_ssl: @@ -72,21 +82,25 @@ def __init__(self, configuration) -> None: "ca_certs": configuration.ssl_ca_cert, "cert_file": configuration.cert_file, "key_file": configuration.key_file, + "ca_cert_data": configuration.ca_cert_data, } if configuration.assert_hostname is not None: - pool_args["assert_hostname"] = configuration.assert_hostname + pool_args['assert_hostname'] = ( + configuration.assert_hostname + ) if configuration.retries is not None: - pool_args["retries"] = configuration.retries + pool_args['retries'] = configuration.retries if configuration.tls_server_name: - pool_args["server_hostname"] = configuration.tls_server_name + pool_args['server_hostname'] = configuration.tls_server_name + if configuration.socket_options is not None: - pool_args["socket_options"] = configuration.socket_options + pool_args['socket_options'] = configuration.socket_options if configuration.connection_pool_maxsize is not None: - pool_args["maxsize"] = configuration.connection_pool_maxsize + pool_args['maxsize'] = configuration.connection_pool_maxsize # https pool manager self.pool_manager: urllib3.PoolManager @@ -94,7 +108,6 @@ def __init__(self, configuration) -> None: if configuration.proxy: if is_socks_proxy_url(configuration.proxy): from urllib3.contrib.socks import SOCKSProxyManager - pool_args["proxy_url"] = configuration.proxy pool_args["headers"] = configuration.proxy_headers self.pool_manager = SOCKSProxyManager(**pool_args) @@ -105,7 +118,15 @@ def __init__(self, configuration) -> None: else: self.pool_manager = urllib3.PoolManager(**pool_args) - def request(self, method, url, headers=None, body=None, post_params=None, _request_timeout=None): + def request( + self, + method, + url, + headers=None, + body=None, + post_params=None, + _request_timeout=None + ): """Perform requests. :param method: http request method @@ -121,10 +142,20 @@ def request(self, method, url, headers=None, body=None, post_params=None, _reque (connection, read) timeouts. """ method = method.upper() - assert method in ["GET", "HEAD", "DELETE", "POST", "PUT", "PATCH", "OPTIONS"] + assert method in [ + 'GET', + 'HEAD', + 'DELETE', + 'POST', + 'PUT', + 'PATCH', + 'OPTIONS' + ] if post_params and body: - raise ApiValueError("body parameter cannot be used with post_params parameter.") + raise ApiValueError( + "body parameter cannot be used with post_params parameter." + ) post_params = post_params or {} headers = headers or {} @@ -133,22 +164,37 @@ def request(self, method, url, headers=None, body=None, post_params=None, _reque if _request_timeout: if isinstance(_request_timeout, (int, float)): timeout = urllib3.Timeout(total=_request_timeout) - elif isinstance(_request_timeout, tuple) and len(_request_timeout) == 2: - timeout = urllib3.Timeout(connect=_request_timeout[0], read=_request_timeout[1]) + elif ( + isinstance(_request_timeout, tuple) + and len(_request_timeout) == 2 + ): + timeout = urllib3.Timeout( + connect=_request_timeout[0], + read=_request_timeout[1] + ) try: # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE` - if method in ["POST", "PUT", "PATCH", "OPTIONS", "DELETE"]: + if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']: + # no content type provided or payload is json - content_type = headers.get("Content-Type") - if not content_type or re.search("json", content_type, re.IGNORECASE): + content_type = headers.get('Content-Type') + if ( + not content_type + or re.search('json', content_type, re.IGNORECASE) + ): request_body = None if body is not None: request_body = json.dumps(body) r = self.pool_manager.request( - method, url, body=request_body, timeout=timeout, headers=headers, preload_content=False + method, + url, + body=request_body, + timeout=timeout, + headers=headers, + preload_content=False ) - elif content_type == "application/x-www-form-urlencoded": + elif content_type == 'application/x-www-form-urlencoded': r = self.pool_manager.request( method, url, @@ -156,15 +202,15 @@ def request(self, method, url, headers=None, body=None, post_params=None, _reque encode_multipart=False, timeout=timeout, headers=headers, - preload_content=False, + preload_content=False ) - elif content_type == "multipart/form-data": + elif content_type == 'multipart/form-data': # must del headers['Content-Type'], or the correct # Content-Type which generated by urllib3 will be # overwritten. - del headers["Content-Type"] + del headers['Content-Type'] # Ensures that dict objects are serialized - post_params = [(a, json.dumps(b)) if isinstance(b, dict) else (a, b) for a, b in post_params] + post_params = [(a, json.dumps(b)) if isinstance(b, dict) else (a,b) for a, b in post_params] r = self.pool_manager.request( method, url, @@ -172,20 +218,29 @@ def request(self, method, url, headers=None, body=None, post_params=None, _reque encode_multipart=True, timeout=timeout, headers=headers, - preload_content=False, + preload_content=False ) # Pass a `string` parameter directly in the body to support # other content types than JSON when `body` argument is # provided in serialized form. elif isinstance(body, str) or isinstance(body, bytes): r = self.pool_manager.request( - method, url, body=body, timeout=timeout, headers=headers, preload_content=False + method, + url, + body=body, + timeout=timeout, + headers=headers, + preload_content=False ) - elif headers["Content-Type"].startswith("text/") and isinstance(body, bool): + elif headers['Content-Type'].startswith('text/') and isinstance(body, bool): request_body = "true" if body else "false" r = self.pool_manager.request( - method, url, body=request_body, preload_content=False, timeout=timeout, headers=headers - ) + method, + url, + body=request_body, + preload_content=False, + timeout=timeout, + headers=headers) else: # Cannot generate the request from given parameters msg = """Cannot prepare a request message for provided @@ -195,7 +250,12 @@ def request(self, method, url, headers=None, body=None, post_params=None, _reque # For `GET`, `HEAD` else: r = self.pool_manager.request( - method, url, fields={}, timeout=timeout, headers=headers, preload_content=False + method, + url, + fields={}, + timeout=timeout, + headers=headers, + preload_content=False ) except urllib3.exceptions.SSLError as e: msg = "\n".join([type(e).__name__, str(e)]) diff --git a/pyvcell/_internal/api/vcell_client/test/test_acces_token_representation_record.py b/pyvcell/_internal/api/vcell_client/test/test_acces_token_representation_record.py index 328a572..58c6f48 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_acces_token_representation_record.py +++ b/pyvcell/_internal/api/vcell_client/test/test_acces_token_representation_record.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.acces_token_representation_record import AccesTokenRepresentationRecord - class TestAccesTokenRepresentationRecord(unittest.TestCase): """AccesTokenRepresentationRecord unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> AccesTokenRepresentationRecord: """Test AccesTokenRepresentationRecord - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `AccesTokenRepresentationRecord` """ model = AccesTokenRepresentationRecord() @@ -50,6 +52,5 @@ def testAccesTokenRepresentationRecord(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_admin_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_admin_resource_api.py index 3058822..4f65f16 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_admin_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_admin_resource_api.py @@ -1,14 +1,17 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest @@ -32,5 +35,5 @@ def test_get_usage(self) -> None: pass -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_analytic_curve.py b/pyvcell/_internal/api/vcell_client/test/test_analytic_curve.py new file mode 100644 index 0000000..6ca0bea --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_analytic_curve.py @@ -0,0 +1,67 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.analytic_curve import AnalyticCurve + +class TestAnalyticCurve(unittest.TestCase): + """AnalyticCurve unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> AnalyticCurve: + """Test AnalyticCurve + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `AnalyticCurve` + """ + model = AnalyticCurve() + if include_optional: + return AnalyticCurve( + type = 'AnalyticCurve', + exp_x = '', + exp_y = '', + exp_z = '', + offset = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ), + analytic_offset = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ), + default_num_samples = 56, + segment_count = 56, + valid = True + ) + else: + return AnalyticCurve( + type = 'AnalyticCurve', + ) + """ + + def testAnalyticCurve(self): + """Test AnalyticCurve""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_analyzed_results_from_field_data.py b/pyvcell/_internal/api/vcell_client/test/test_analyzed_results_from_field_data.py deleted file mode 100644 index d096941..0000000 --- a/pyvcell/_internal/api/vcell_client/test/test_analyzed_results_from_field_data.py +++ /dev/null @@ -1,77 +0,0 @@ -""" -VCell API - -VCell API - -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) - -Do not edit the class manually. -""" - -import unittest - -from pyvcell._internal.api.vcell_client.models.analyzed_results_from_field_data import AnalyzedResultsFromFieldData - - -class TestAnalyzedResultsFromFieldData(unittest.TestCase): - """AnalyzedResultsFromFieldData unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def make_instance(self, include_optional) -> AnalyzedResultsFromFieldData: - """Test AnalyzedResultsFromFieldData - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" - # uncomment below to create an instance of `AnalyzedResultsFromFieldData` - """ - model = AnalyzedResultsFromFieldData() - if include_optional: - return AnalyzedResultsFromFieldData( - short_spec_data = [ - [ - [ - 56 - ] - ] - ], - var_names = [ - '' - ], - times = [ - 1.337 - ], - origin = pyvcell._internal.api.vcell_client.models.origin.Origin( - x = 1.337, - y = 1.337, - z = 1.337, ), - extent = pyvcell._internal.api.vcell_client.models.extent.Extent( - x = 1.337, - y = 1.337, - z = 1.337, ), - isize = pyvcell._internal.api.vcell_client.models.i_size.ISize( - x = 56, - y = 56, - z = 56, ), - annotation = '', - name = '' - ) - else: - return AnalyzedResultsFromFieldData( - ) - """ - - def testAnalyzedResultsFromFieldData(self): - """Test AnalyzedResultsFromFieldData""" - # inst_req_only = self.make_instance(include_optional=False) - # inst_req_and_optional = self.make_instance(include_optional=True) - - -if __name__ == "__main__": - unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_annotated_function_dto.py b/pyvcell/_internal/api/vcell_client/test/test_annotated_function_dto.py new file mode 100644 index 0000000..9e083ee --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_annotated_function_dto.py @@ -0,0 +1,67 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.annotated_function_dto import AnnotatedFunctionDTO + +class TestAnnotatedFunctionDTO(unittest.TestCase): + """AnnotatedFunctionDTO unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> AnnotatedFunctionDTO: + """Test AnnotatedFunctionDTO + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `AnnotatedFunctionDTO` + """ + model = AnnotatedFunctionDTO() + if include_optional: + return AnnotatedFunctionDTO( + function_name = '', + function_expression = '', + error = '', + domain = pyvcell._internal.api.vcell_client.models.domain.Domain( + name = '', ), + function_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + category = 'PREDEFINED' + ) + else: + return AnnotatedFunctionDTO( + ) + """ + + def testAnnotatedFunctionDTO(self): + """Test AnnotatedFunctionDTO""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_application_info.py b/pyvcell/_internal/api/vcell_client/test/test_application_info.py new file mode 100644 index 0000000..219426e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_application_info.py @@ -0,0 +1,55 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.application_info import ApplicationInfo + +class TestApplicationInfo(unittest.TestCase): + """ApplicationInfo unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> ApplicationInfo: + """Test ApplicationInfo + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ApplicationInfo` + """ + model = ApplicationInfo() + if include_optional: + return ApplicationInfo( + name = '', + type = 'RuleBased', + dimensions = 56, + geometry_name = '' + ) + else: + return ApplicationInfo( + ) + """ + + def testApplicationInfo(self): + """Test ApplicationInfo""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_batch_system_type.py b/pyvcell/_internal/api/vcell_client/test/test_batch_system_type.py index b521cfa..a89b596 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_batch_system_type.py +++ b/pyvcell/_internal/api/vcell_client/test/test_batch_system_type.py @@ -1,17 +1,21 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest +from pyvcell._internal.api.vcell_client.models.batch_system_type import BatchSystemType class TestBatchSystemType(unittest.TestCase): """BatchSystemType unit test stubs""" @@ -26,6 +30,5 @@ def testBatchSystemType(self): """Test BatchSystemType""" # inst = BatchSystemType() - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_bio_model.py b/pyvcell/_internal/api/vcell_client/test/test_bio_model.py index c57174c..c9ba7a8 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_bio_model.py +++ b/pyvcell/_internal/api/vcell_client/test/test_bio_model.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.bio_model import BioModel - class TestBioModel(unittest.TestCase): """BioModel unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> BioModel: """Test BioModel - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `BioModel` """ model = BioModel() @@ -47,8 +49,7 @@ def make_instance(self, include_optional) -> BioModel: owner_name = '', owner_key = '', simulation_key_list = [ - pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ) + '' ], applications = [ pyvcell._internal.api.vcell_client.models.application.Application() @@ -64,6 +65,5 @@ def testBioModel(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_bio_model_child_summary.py b/pyvcell/_internal/api/vcell_client/test/test_bio_model_child_summary.py new file mode 100644 index 0000000..51e929b --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_bio_model_child_summary.py @@ -0,0 +1,95 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.bio_model_child_summary import BioModelChildSummary + +class TestBioModelChildSummary(unittest.TestCase): + """BioModelChildSummary unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> BioModelChildSummary: + """Test BioModelChildSummary + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `BioModelChildSummary` + """ + model = BioModelChildSummary() + if include_optional: + return BioModelChildSummary( + sc_names = [ + '' + ], + sc_annots = [ + '' + ], + geo_names = [ + '' + ], + geo_dims = [ + 56 + ], + app_types = [ + 'RuleBased' + ], + sim_names = [ + [ + '' + ] + ], + sim_annots = [ + [ + '' + ] + ], + geometry_dimensions = [ + 56 + ], + geometry_names = [ + '' + ], + simulation_context_annotations = [ + '' + ], + simulation_context_names = [ + '' + ], + application_info = [ + pyvcell._internal.api.vcell_client.models.application_info.ApplicationInfo( + name = '', + type = 'RuleBased', + dimensions = 56, + geometry_name = '', ) + ] + ) + else: + return BioModelChildSummary( + ) + """ + + def testBioModelChildSummary(self): + """Test BioModelChildSummary""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_bio_model_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_bio_model_resource_api.py index 7e2306c..bb3087a 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_bio_model_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_bio_model_resource_api.py @@ -1,14 +1,17 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest @@ -31,20 +34,41 @@ def test_delete_bio_model(self) -> None: """ pass - def test_get_biomodel_by_id(self) -> None: - """Test case for get_biomodel_by_id + def test_get_bio_model(self) -> None: + """Test case for get_bio_model + + Get BioModel. + """ + pass + + def test_get_bio_model_summaries(self) -> None: + """Test case for get_bio_model_summaries + + Return BioModel summaries. + """ + pass + + def test_get_bio_model_summary(self) -> None: + """Test case for get_bio_model_summary + + All of the text based information about a BioModel (summary, version, publication status, etc...), but not the actual BioModel itself. + """ + pass + + def test_get_bio_model_vcml(self) -> None: + """Test case for get_bio_model_vcml - Get BioModel information in JSON format by ID. + Get the BioModel in VCML format. """ pass - def test_upload_bio_model(self) -> None: - """Test case for upload_bio_model + def test_save_bio_model(self) -> None: + """Test case for save_bio_model - Upload the BioModel to VCell database. Returns BioModel ID. + Save's the given BioModel. Optional parameters of name and simulations to update due to math changes. Returns saved BioModel as VCML. """ pass -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_bio_model_summary.py b/pyvcell/_internal/api/vcell_client/test/test_bio_model_summary.py new file mode 100644 index 0000000..fab62bd --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_bio_model_summary.py @@ -0,0 +1,150 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.bio_model_summary import BioModelSummary + +class TestBioModelSummary(unittest.TestCase): + """BioModelSummary unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> BioModelSummary: + """Test BioModelSummary + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `BioModelSummary` + """ + model = BioModelSummary() + if include_optional: + return BioModelSummary( + version = pyvcell._internal.api.vcell_client.models.version.Version( + version_key = '', + annot = '', + branch_id = 1.337, + branch_point_ref_key = '', + date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + flag = pyvcell._internal.api.vcell_client.models.version_flag.VersionFlag( + version_flag = 56, + int_value = 56, + archived = True, + current = True, + published = True, ), + group_access = pyvcell._internal.api.vcell_client.models.group_access.GroupAccess( + groupid = 1.337, + description = '', ), + name = '', + owner = pyvcell._internal.api.vcell_client.models.user.User( + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ), ), + summary = pyvcell._internal.api.vcell_client.models.bio_model_child_summary.BioModelChildSummary( + sc_names = [ + '' + ], + sc_annots = [ + '' + ], + geo_names = [ + '' + ], + geo_dims = [ + 56 + ], + app_types = [ + 'RuleBased' + ], + sim_names = [ + [ + '' + ] + ], + sim_annots = [ + [ + '' + ] + ], + geometry_dimensions = [ + 56 + ], + geometry_names = [ + '' + ], + simulation_context_annotations = [ + '' + ], + simulation_context_names = [ + '' + ], + application_info = [ + pyvcell._internal.api.vcell_client.models.application_info.ApplicationInfo( + name = '', + type = 'RuleBased', + dimensions = 56, + geometry_name = '', ) + ], ), + publication_information = [ + pyvcell._internal.api.vcell_client.models.publication_info.PublicationInfo( + publication_key = '', + version_key = '', + title = '', + authors = [ + '' + ], + citation = '', + pubmedid = '', + doi = '', + url = '', + pubdate = 'Wed Mar 09 19:00:00 EST 2022', + vc_document_type = 'BIOMODEL_DOC', + user = pyvcell._internal.api.vcell_client.models.user.User( + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ), + the_hash_code = 56, ) + ], + v_cell_software_version = pyvcell._internal.api.vcell_client.models.v_cell_software_version.VCellSoftwareVersion( + software_version_string = '', + vcell_site = 'alpha', + build_number = '', + version_number = '', + major_version = 56, + minor_version = 56, + patch_version = 56, + build_int = 56, + description = '', ) + ) + else: + return BioModelSummary( + ) + """ + + def testBioModelSummary(self): + """Test BioModelSummary""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_biomodel_ref.py b/pyvcell/_internal/api/vcell_client/test/test_biomodel_ref.py index c584e55..025e954 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_biomodel_ref.py +++ b/pyvcell/_internal/api/vcell_client/test/test_biomodel_ref.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.biomodel_ref import BiomodelRef - class TestBiomodelRef(unittest.TestCase): """BiomodelRef unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> BiomodelRef: """Test BiomodelRef - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `BiomodelRef` """ model = BiomodelRef() @@ -50,6 +52,5 @@ def testBiomodelRef(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_composite_curve.py b/pyvcell/_internal/api/vcell_client/test/test_composite_curve.py new file mode 100644 index 0000000..711c498 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_composite_curve.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.composite_curve import CompositeCurve + +class TestCompositeCurve(unittest.TestCase): + """CompositeCurve unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CompositeCurve: + """Test CompositeCurve + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CompositeCurve` + """ + model = CompositeCurve() + if include_optional: + return CompositeCurve( + type = 'CompositeCurve', + field_curves = [ + null + ], + curve_count = 56, + default_num_samples = 56, + segment_count = 56, + valid = True + ) + else: + return CompositeCurve( + type = 'CompositeCurve', + ) + """ + + def testCompositeCurve(self): + """Test CompositeCurve""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_control_point_curve.py b/pyvcell/_internal/api/vcell_client/test/test_control_point_curve.py new file mode 100644 index 0000000..d7c09c3 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_control_point_curve.py @@ -0,0 +1,70 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.control_point_curve import ControlPointCurve + +class TestControlPointCurve(unittest.TestCase): + """ControlPointCurve unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> ControlPointCurve: + """Test ControlPointCurve + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ControlPointCurve` + """ + model = ControlPointCurve() + if include_optional: + return ControlPointCurve( + type = 'ControlPointCurve', + control_points = [ + pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ) + ], + control_point_count = 56, + control_points_vector = [ + pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ) + ], + max_control_points = 56, + min_control_points = 56, + control_point_addable = True, + valid = True + ) + else: + return ControlPointCurve( + type = 'ControlPointCurve', + ) + """ + + def testControlPointCurve(self): + """Test ControlPointCurve""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_coordinate.py b/pyvcell/_internal/api/vcell_client/test/test_coordinate.py new file mode 100644 index 0000000..68e4df7 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_coordinate.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.coordinate import Coordinate + +class TestCoordinate(unittest.TestCase): + """Coordinate unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> Coordinate: + """Test Coordinate + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `Coordinate` + """ + model = Coordinate() + if include_optional: + return Coordinate( + x = 1.337, + y = 1.337, + z = 1.337 + ) + else: + return Coordinate( + ) + """ + + def testCoordinate(self): + """Test Coordinate""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_curve.py b/pyvcell/_internal/api/vcell_client/test/test_curve.py new file mode 100644 index 0000000..52a953c --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_curve.py @@ -0,0 +1,69 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.curve import Curve + +class TestCurve(unittest.TestCase): + """Curve unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> Curve: + """Test Curve + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `Curve` + """ + model = Curve() + if include_optional: + return Curve( + b_closed = True, + description = '', + type = '', + beginning_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ), + default_num_samples = 56, + ending_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ), + num_sample_points = 56, + segment_count = 56, + spatial_length = 1.337, + closed = True, + valid = True + ) + else: + return Curve( + type = '', + ) + """ + + def testCurve(self): + """Test Curve""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_curve_selection_info.py b/pyvcell/_internal/api/vcell_client/test/test_curve_selection_info.py new file mode 100644 index 0000000..aa0e807 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_curve_selection_info.py @@ -0,0 +1,78 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.curve_selection_info import CurveSelectionInfo + +class TestCurveSelectionInfo(unittest.TestCase): + """CurveSelectionInfo unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CurveSelectionInfo: + """Test CurveSelectionInfo + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CurveSelectionInfo` + """ + model = CurveSelectionInfo() + if include_optional: + return CurveSelectionInfo( + field_curve = pyvcell._internal.api.vcell_client.models.curve.Curve( + b_closed = True, + description = '', + type = '', + beginning_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ), + default_num_samples = 56, + ending_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ), + num_sample_points = 56, + segment_count = 56, + spatial_length = 1.337, + closed = True, + valid = True, ), + field_type = 56, + field_control_point = 56, + field_segment = 56, + field_u = 1.337, + field_u_extended = 1.337, + field_control_point_extended = 56, + field_segment_extended = 56, + field_direction_negative = True, + crossing = True + ) + else: + return CurveSelectionInfo( + ) + """ + + def testCurveSelectionInfo(self): + """Test CurveSelectionInfo""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_data_identifier.py b/pyvcell/_internal/api/vcell_client/test/test_data_identifier.py index 23bb27b..79e6356 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_data_identifier.py +++ b/pyvcell/_internal/api/vcell_client/test/test_data_identifier.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.data_identifier import DataIdentifier - class TestDataIdentifier(unittest.TestCase): """DataIdentifier unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> DataIdentifier: """Test DataIdentifier - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `DataIdentifier` """ model = DataIdentifier() @@ -37,14 +39,14 @@ def make_instance(self, include_optional) -> DataIdentifier: name = '', display_name = '', variable_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( - type = 56, - variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', - name = '', - units = '', - label = '', - legacy_warn = True, - default_label = '', - default_units = '', + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', type_name = '', ), domain = pyvcell._internal.api.vcell_client.models.domain.Domain( name = '', ), @@ -62,6 +64,5 @@ def testDataIdentifier(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_detailed_state.py b/pyvcell/_internal/api/vcell_client/test/test_detailed_state.py index 37a23ca..8a4e085 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_detailed_state.py +++ b/pyvcell/_internal/api/vcell_client/test/test_detailed_state.py @@ -1,17 +1,21 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest +from pyvcell._internal.api.vcell_client.models.detailed_state import DetailedState class TestDetailedState(unittest.TestCase): """DetailedState unit test stubs""" @@ -26,6 +30,5 @@ def testDetailedState(self): """Test DetailedState""" # inst = DetailedState() - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_domain.py b/pyvcell/_internal/api/vcell_client/test/test_domain.py index 53ba49d..791a934 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_domain.py +++ b/pyvcell/_internal/api/vcell_client/test/test_domain.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.domain import Domain - class TestDomain(unittest.TestCase): """Domain unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> Domain: """Test Domain - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `Domain` """ model = Domain() @@ -46,6 +48,5 @@ def testDomain(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_export_event.py b/pyvcell/_internal/api/vcell_client/test/test_export_event.py new file mode 100644 index 0000000..f27f6a4 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_export_event.py @@ -0,0 +1,80 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.export_event import ExportEvent + +class TestExportEvent(unittest.TestCase): + """ExportEvent unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> ExportEvent: + """Test ExportEvent + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ExportEvent` + """ + model = ExportEvent() + if include_optional: + return ExportEvent( + event_type = 'EXPORT_START', + progress = 1.337, + format = '', + location = '', + user = pyvcell._internal.api.vcell_client.models.user.User( + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ), + job_id = 56, + data_key = '', + data_id_string = '', + human_readable_data = pyvcell._internal.api.vcell_client.models.human_readable_export_data.HumanReadableExportData( + simulation_name = '', + biomodel_name = '', + application_name = '', + different_parameter_values = [ + '' + ], + application_type = '', + server_saved_file_name = '', + non_spatial = True, + sub_volume = { + 'key' : '' + }, + z_slices = 56, + t_slices = 56, + num_channels = 56, ) + ) + else: + return ExportEvent( + ) + """ + + def testExportEvent(self): + """Test ExportEvent""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_export_progress_type.py b/pyvcell/_internal/api/vcell_client/test/test_export_progress_type.py new file mode 100644 index 0000000..f028885 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_export_progress_type.py @@ -0,0 +1,34 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.export_progress_type import ExportProgressType + +class TestExportProgressType(unittest.TestCase): + """ExportProgressType unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testExportProgressType(self): + """Test ExportProgressType""" + # inst = ExportProgressType() + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_export_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_export_resource_api.py new file mode 100644 index 0000000..79fe4ca --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_export_resource_api.py @@ -0,0 +1,44 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.api.export_resource_api import ExportResourceApi + + +class TestExportResourceApi(unittest.TestCase): + """ExportResourceApi unit test stubs""" + + def setUp(self) -> None: + self.api = ExportResourceApi() + + def tearDown(self) -> None: + pass + + def test_export_n5(self) -> None: + """Test case for export_n5 + + """ + pass + + def test_export_status(self) -> None: + """Test case for export_status + + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_exportable_data_type.py b/pyvcell/_internal/api/vcell_client/test/test_exportable_data_type.py new file mode 100644 index 0000000..8e673cb --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_exportable_data_type.py @@ -0,0 +1,34 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.exportable_data_type import ExportableDataType + +class TestExportableDataType(unittest.TestCase): + """ExportableDataType unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testExportableDataType(self): + """Test ExportableDataType""" + # inst = ExportableDataType() + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_extent.py b/pyvcell/_internal/api/vcell_client/test/test_extent.py index f26b12b..89e5698 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_extent.py +++ b/pyvcell/_internal/api/vcell_client/test/test_extent.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.extent import Extent - class TestExtent(unittest.TestCase): """Extent unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> Extent: """Test Extent - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `Extent` """ model = Extent() @@ -48,6 +50,5 @@ def testExtent(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_external_data_identifier.py b/pyvcell/_internal/api/vcell_client/test/test_external_data_identifier.py index 53da141..04fe62f 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_external_data_identifier.py +++ b/pyvcell/_internal/api/vcell_client/test/test_external_data_identifier.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.external_data_identifier import ExternalDataIdentifier - class TestExternalDataIdentifier(unittest.TestCase): """ExternalDataIdentifier unit test stubs""" @@ -26,29 +28,26 @@ def tearDown(self): def make_instance(self, include_optional) -> ExternalDataIdentifier: """Test ExternalDataIdentifier - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `ExternalDataIdentifier` """ model = ExternalDataIdentifier() if include_optional: return ExternalDataIdentifier( - key = pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ), + key = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ), - name = '', - test_account = True, ), + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ), name = '', job_index = 56, - simulation_key = pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ), + simulation_key = '', parameter_scan_type = True, - data_key = pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ) + data_key = '' ) else: return ExternalDataIdentifier( @@ -60,6 +59,5 @@ def testExternalDataIdentifier(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_field_data.py b/pyvcell/_internal/api/vcell_client/test/test_field_data.py new file mode 100644 index 0000000..8f9253e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_field_data.py @@ -0,0 +1,85 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.field_data import FieldData + +class TestFieldData(unittest.TestCase): + """FieldData unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> FieldData: + """Test FieldData + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `FieldData` + """ + model = FieldData() + if include_optional: + return FieldData( + short_spec_data = [ + [ + [ + 56 + ] + ] + ], + double_spec_data = [ + [ + [ + 1.337 + ] + ] + ], + var_names = [ + '' + ], + times = [ + 1.337 + ], + origin = pyvcell._internal.api.vcell_client.models.origin.Origin( + x = 1.337, + y = 1.337, + z = 1.337, ), + extent = pyvcell._internal.api.vcell_client.models.extent.Extent( + x = 1.337, + y = 1.337, + z = 1.337, ), + isize = pyvcell._internal.api.vcell_client.models.i_size.ISize( + x = 56, + y = 56, + z = 56, ), + annotation = '', + name = '' + ) + else: + return FieldData( + ) + """ + + def testFieldData(self): + """Test FieldData""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_field_data_reference.py b/pyvcell/_internal/api/vcell_client/test/test_field_data_reference.py index e7e92ef..c89b3c9 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_field_data_reference.py +++ b/pyvcell/_internal/api/vcell_client/test/test_field_data_reference.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.field_data_reference import FieldDataReference - class TestFieldDataReference(unittest.TestCase): """FieldDataReference unit test stubs""" @@ -26,31 +28,30 @@ def tearDown(self): def make_instance(self, include_optional) -> FieldDataReference: """Test FieldDataReference - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `FieldDataReference` """ model = FieldDataReference() if include_optional: return FieldDataReference( - external_data_identifier = pyvcell._internal.api.vcell_client.models.external_data_identifier.ExternalDataIdentifier( - key = pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ), + field_data_id = pyvcell._internal.api.vcell_client.models.external_data_identifier.ExternalDataIdentifier( + key = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - name = '', - test_account = True, ), - name = '', - job_index = 56, - simulation_key = pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ), - parameter_scan_type = True, - data_key = , ), - external_data_annotation = '', - external_data_id_sim_refs = [ - pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ) + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ), + name = '', + job_index = 56, + simulation_key = '', + parameter_scan_type = True, + data_key = '', ), + annotation = '', + simulations_referencing_this_id = [ + '' ] ) else: @@ -63,6 +64,5 @@ def testFieldDataReference(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_field_data_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_field_data_resource_api.py index 2eb4270..80a2bf5 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_field_data_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_field_data_resource_api.py @@ -1,14 +1,17 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest @@ -24,41 +27,69 @@ def setUp(self) -> None: def tearDown(self) -> None: pass - def test_analyze_field_data_file(self) -> None: - """Test case for analyze_field_data_file + def test_advanced_create(self) -> None: + """Test case for advanced_create + + Create Field Data with granular detail in one request.The following files are accepted: .tif and .zip. + """ + pass + + def test_analyze_file(self) -> None: + """Test case for analyze_file - Analyze the field data from the uploaded file. Filenames must be lowercase alphanumeric, and can contain underscores. + Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and return field data. Color mapped images not supported (the colors in those images will be interpreted as separate channels). Filenames must be lowercase alphanumeric, and can contain underscores. """ pass - def test_create_field_data_from_analyzed_file(self) -> None: - """Test case for create_field_data_from_analyzed_file + def test_copy_models_field_data(self) -> None: + """Test case for copy_models_field_data - Take the analyzed results of the field data, modify it to your liking, then save it on the server. + Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. """ pass - def test_delete_field_data(self) -> None: - """Test case for delete_field_data + def test_create_from_file(self) -> None: + """Test case for create_from_file + + Submit a .zip or .tif file that converts into field data, with all defaults derived from the file submitted. + """ + pass + + def test_create_from_simulation(self) -> None: + """Test case for create_from_simulation + + Create new field data from existing simulation results. + """ + pass + + def test_delete(self) -> None: + """Test case for delete Delete the selected field data. """ pass - def test_get_all_field_data_ids(self) -> None: - """Test case for get_all_field_data_ids + def test_get_all_ids(self) -> None: + """Test case for get_all_ids Get all of the ids used to identify, and retrieve field data. """ pass - def test_get_field_data_shape_from_id(self) -> None: - """Test case for get_field_data_shape_from_id + def test_get_shape_from_id(self) -> None: + """Test case for get_shape_from_id + + Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. + """ + pass + + def test_save(self) -> None: + """Test case for save - Get the shape of the field data. That is it's size, origin, extent, and data identifiers. + Take the generated field data, and save it to the server. User may adjust the analyzed file before uploading to edit defaults. """ pass -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_field_data_save_results.py b/pyvcell/_internal/api/vcell_client/test/test_field_data_save_results.py deleted file mode 100644 index 0ae7582..0000000 --- a/pyvcell/_internal/api/vcell_client/test/test_field_data_save_results.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -VCell API - -VCell API - -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) - -Do not edit the class manually. -""" - -import unittest - -from pyvcell._internal.api.vcell_client.models.field_data_save_results import FieldDataSaveResults - - -class TestFieldDataSaveResults(unittest.TestCase): - """FieldDataSaveResults unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def make_instance(self, include_optional) -> FieldDataSaveResults: - """Test FieldDataSaveResults - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" - # uncomment below to create an instance of `FieldDataSaveResults` - """ - model = FieldDataSaveResults() - if include_optional: - return FieldDataSaveResults( - field_data_name = '', - field_data_id = '' - ) - else: - return FieldDataSaveResults( - ) - """ - - def testFieldDataSaveResults(self): - """Test FieldDataSaveResults""" - # inst_req_only = self.make_instance(include_optional=False) - # inst_req_and_optional = self.make_instance(include_optional=True) - - -if __name__ == "__main__": - unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_field_data_saved_results.py b/pyvcell/_internal/api/vcell_client/test/test_field_data_saved_results.py new file mode 100644 index 0000000..ea5bfeb --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_field_data_saved_results.py @@ -0,0 +1,53 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.field_data_saved_results import FieldDataSavedResults + +class TestFieldDataSavedResults(unittest.TestCase): + """FieldDataSavedResults unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> FieldDataSavedResults: + """Test FieldDataSavedResults + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `FieldDataSavedResults` + """ + model = FieldDataSavedResults() + if include_optional: + return FieldDataSavedResults( + field_data_name = '', + field_data_key = '' + ) + else: + return FieldDataSavedResults( + ) + """ + + def testFieldDataSavedResults(self): + """Test FieldDataSavedResults""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_field_data_shape.py b/pyvcell/_internal/api/vcell_client/test/test_field_data_shape.py index 29016da..64c17a7 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_field_data_shape.py +++ b/pyvcell/_internal/api/vcell_client/test/test_field_data_shape.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.field_data_shape import FieldDataShape - class TestFieldDataShape(unittest.TestCase): """FieldDataShape unit test stubs""" @@ -26,44 +28,44 @@ def tearDown(self): def make_instance(self, include_optional) -> FieldDataShape: """Test FieldDataShape - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `FieldDataShape` """ model = FieldDataShape() if include_optional: return FieldDataShape( extent = pyvcell._internal.api.vcell_client.models.extent.Extent( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ), origin = pyvcell._internal.api.vcell_client.models.origin.Origin( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ), isize = pyvcell._internal.api.vcell_client.models.i_size.ISize( - x = 56, - y = 56, + x = 56, + y = 56, z = 56, ), data_identifier = [ pyvcell._internal.api.vcell_client.models.data_identifier.DataIdentifier( - name = '', - display_name = '', + name = '', + display_name = '', variable_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( - type = 56, - variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', - name = '', - units = '', - label = '', - legacy_warn = True, - default_label = '', - default_units = '', - type_name = '', ), + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), domain = pyvcell._internal.api.vcell_client.models.domain.Domain( - name = '', ), - b_function = True, - function = True, + name = '', ), + b_function = True, + function = True, visible = True, ) ], times = [ @@ -80,6 +82,5 @@ def testFieldDataShape(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_function_category.py b/pyvcell/_internal/api/vcell_client/test/test_function_category.py new file mode 100644 index 0000000..e47d4d2 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_function_category.py @@ -0,0 +1,34 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.function_category import FunctionCategory + +class TestFunctionCategory(unittest.TestCase): + """FunctionCategory unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testFunctionCategory(self): + """Test FunctionCategory""" + # inst = FunctionCategory() + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_geometry_mode.py b/pyvcell/_internal/api/vcell_client/test/test_geometry_mode.py new file mode 100644 index 0000000..fed3cc8 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_geometry_mode.py @@ -0,0 +1,34 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.geometry_mode import GeometryMode + +class TestGeometryMode(unittest.TestCase): + """GeometryMode unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testGeometryMode(self): + """Test GeometryMode""" + # inst = GeometryMode() + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_geometry_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_geometry_resource_api.py new file mode 100644 index 0000000..f64a358 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_geometry_resource_api.py @@ -0,0 +1,62 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.api.geometry_resource_api import GeometryResourceApi + + +class TestGeometryResourceApi(unittest.TestCase): + """GeometryResourceApi unit test stubs""" + + def setUp(self) -> None: + self.api = GeometryResourceApi() + + def tearDown(self) -> None: + pass + + def test_delete_geometry(self) -> None: + """Test case for delete_geometry + + """ + pass + + def test_get_geometry_summaries(self) -> None: + """Test case for get_geometry_summaries + + """ + pass + + def test_get_geometry_summary(self) -> None: + """Test case for get_geometry_summary + + """ + pass + + def test_get_geometry_vcml(self) -> None: + """Test case for get_geometry_vcml + + """ + pass + + def test_save_geometry(self) -> None: + """Test case for save_geometry + + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_geometry_spec_dto.py b/pyvcell/_internal/api/vcell_client/test/test_geometry_spec_dto.py new file mode 100644 index 0000000..8c0a848 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_geometry_spec_dto.py @@ -0,0 +1,108 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.geometry_spec_dto import GeometrySpecDTO + +class TestGeometrySpecDTO(unittest.TestCase): + """GeometrySpecDTO unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GeometrySpecDTO: + """Test GeometrySpecDTO + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GeometrySpecDTO` + """ + model = GeometrySpecDTO() + if include_optional: + return GeometrySpecDTO( + selections = [ + pyvcell._internal.api.vcell_client.models.spatial_selection.SpatialSelection( + curve_selection_info = pyvcell._internal.api.vcell_client.models.curve_selection_info.CurveSelectionInfo( + field_curve = pyvcell._internal.api.vcell_client.models.curve.Curve( + b_closed = True, + description = '', + type = '', + beginning_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ), + default_num_samples = 56, + ending_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ), + num_sample_points = 56, + segment_count = 56, + spatial_length = 1.337, + closed = True, + valid = True, ), + field_type = 56, + field_control_point = 56, + field_segment = 56, + field_u = 1.337, + field_u_extended = 1.337, + field_control_point_extended = 56, + field_segment_extended = 56, + field_direction_negative = True, + crossing = True, ), + var_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + type = '', + smallest_mesh_cell_dimension_length = 1.337, + variable_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( + type = 56, + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + closed = True, + point = True, ) + ], + axis = 56, + slice_number = 56, + geometry_mode = 'GEOMETRY_SELECTIONS' + ) + else: + return GeometrySpecDTO( + ) + """ + + def testGeometrySpecDTO(self): + """Test GeometrySpecDTO""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_geometry_summary.py b/pyvcell/_internal/api/vcell_client/test/test_geometry_summary.py new file mode 100644 index 0000000..72dadee --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_geometry_summary.py @@ -0,0 +1,93 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.geometry_summary import GeometrySummary + +class TestGeometrySummary(unittest.TestCase): + """GeometrySummary unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GeometrySummary: + """Test GeometrySummary + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GeometrySummary` + """ + model = GeometrySummary() + if include_optional: + return GeometrySummary( + dimension = 56, + origin = pyvcell._internal.api.vcell_client.models.origin.Origin( + x = 1.337, + y = 1.337, + z = 1.337, ), + extent = pyvcell._internal.api.vcell_client.models.extent.Extent( + x = 1.337, + y = 1.337, + z = 1.337, ), + image_ref = '', + version = pyvcell._internal.api.vcell_client.models.version.Version( + version_key = '', + annot = '', + branch_id = 1.337, + branch_point_ref_key = '', + date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + flag = pyvcell._internal.api.vcell_client.models.version_flag.VersionFlag( + version_flag = 56, + int_value = 56, + archived = True, + current = True, + published = True, ), + group_access = pyvcell._internal.api.vcell_client.models.group_access.GroupAccess( + groupid = 1.337, + description = '', ), + name = '', + owner = pyvcell._internal.api.vcell_client.models.user.User( + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ), ), + software_version = pyvcell._internal.api.vcell_client.models.v_cell_software_version.VCellSoftwareVersion( + software_version_string = '', + vcell_site = 'alpha', + build_number = '', + version_number = '', + major_version = 56, + minor_version = 56, + patch_version = 56, + build_int = 56, + description = '', ) + ) + else: + return GeometrySummary( + ) + """ + + def testGeometrySummary(self): + """Test GeometrySummary""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_gif_image.py b/pyvcell/_internal/api/vcell_client/test/test_gif_image.py new file mode 100644 index 0000000..7b507c2 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_gif_image.py @@ -0,0 +1,56 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.gif_image import GIFImage + +class TestGIFImage(unittest.TestCase): + """GIFImage unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GIFImage: + """Test GIFImage + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GIFImage` + """ + model = GIFImage() + if include_optional: + return GIFImage( + gif_encoded_data = bytes(b'blah'), + size = pyvcell._internal.api.vcell_client.models.i_size.ISize( + x = 56, + y = 56, + z = 56, ) + ) + else: + return GIFImage( + ) + """ + + def testGIFImage(self): + """Test GIFImage""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_group_access.py b/pyvcell/_internal/api/vcell_client/test/test_group_access.py new file mode 100644 index 0000000..4772964 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_group_access.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.group_access import GroupAccess + +class TestGroupAccess(unittest.TestCase): + """GroupAccess unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GroupAccess: + """Test GroupAccess + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GroupAccess` + """ + model = GroupAccess() + if include_optional: + return GroupAccess( + groupid = 1.337, + description = '' + ) + else: + return GroupAccess( + groupid = 1.337, + ) + """ + + def testGroupAccess(self): + """Test GroupAccess""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_group_access_all.py b/pyvcell/_internal/api/vcell_client/test/test_group_access_all.py new file mode 100644 index 0000000..e62ed4f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_group_access_all.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.group_access_all import GroupAccessAll + +class TestGroupAccessAll(unittest.TestCase): + """GroupAccessAll unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GroupAccessAll: + """Test GroupAccessAll + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GroupAccessAll` + """ + model = GroupAccessAll() + if include_optional: + return GroupAccessAll( + type = 'GroupAccessAll', + description = '' + ) + else: + return GroupAccessAll( + type = 'GroupAccessAll', + ) + """ + + def testGroupAccessAll(self): + """Test GroupAccessAll""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_group_access_none.py b/pyvcell/_internal/api/vcell_client/test/test_group_access_none.py new file mode 100644 index 0000000..31dcfe7 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_group_access_none.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.group_access_none import GroupAccessNone + +class TestGroupAccessNone(unittest.TestCase): + """GroupAccessNone unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GroupAccessNone: + """Test GroupAccessNone + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GroupAccessNone` + """ + model = GroupAccessNone() + if include_optional: + return GroupAccessNone( + type = 'GroupAccessNone', + description = '' + ) + else: + return GroupAccessNone( + type = 'GroupAccessNone', + ) + """ + + def testGroupAccessNone(self): + """Test GroupAccessNone""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_group_access_some.py b/pyvcell/_internal/api/vcell_client/test/test_group_access_some.py new file mode 100644 index 0000000..2a7da7c --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_group_access_some.py @@ -0,0 +1,82 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.group_access_some import GroupAccessSome + +class TestGroupAccessSome(unittest.TestCase): + """GroupAccessSome unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GroupAccessSome: + """Test GroupAccessSome + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GroupAccessSome` + """ + model = GroupAccessSome() + if include_optional: + return GroupAccessSome( + type = 'GroupAccessSome', + hash = 1.337, + group_members = [ + pyvcell._internal.api.vcell_client.models.user.User( + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ) + ], + hidden_members = [ + True + ], + description = '', + hidden_group_members = [ + pyvcell._internal.api.vcell_client.models.user.User( + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ) + ], + normal_group_members = [ + pyvcell._internal.api.vcell_client.models.user.User( + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ) + ] + ) + else: + return GroupAccessSome( + type = 'GroupAccessSome', + ) + """ + + def testGroupAccessSome(self): + """Test GroupAccessSome""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_hello_world_api.py b/pyvcell/_internal/api/vcell_client/test/test_hello_world_api.py index 35c36e2..fc70518 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_hello_world_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_hello_world_api.py @@ -1,14 +1,17 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest @@ -32,5 +35,5 @@ def test_get_hello_world(self) -> None: pass -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_hello_world_message.py b/pyvcell/_internal/api/vcell_client/test/test_hello_world_message.py index 92a0741..e2c6161 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_hello_world_message.py +++ b/pyvcell/_internal/api/vcell_client/test/test_hello_world_message.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.hello_world_message import HelloWorldMessage - class TestHelloWorldMessage(unittest.TestCase): """HelloWorldMessage unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> HelloWorldMessage: """Test HelloWorldMessage - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `HelloWorldMessage` """ model = HelloWorldMessage() @@ -46,6 +48,5 @@ def testHelloWorldMessage(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_htc_job_id.py b/pyvcell/_internal/api/vcell_client/test/test_htc_job_id.py index 750a210..08ba025 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_htc_job_id.py +++ b/pyvcell/_internal/api/vcell_client/test/test_htc_job_id.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.htc_job_id import HtcJobID - class TestHtcJobID(unittest.TestCase): """HtcJobID unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> HtcJobID: """Test HtcJobID - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `HtcJobID` """ model = HtcJobID() @@ -48,6 +50,5 @@ def testHtcJobID(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_human_readable_export_data.py b/pyvcell/_internal/api/vcell_client/test/test_human_readable_export_data.py new file mode 100644 index 0000000..19c1bdd --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_human_readable_export_data.py @@ -0,0 +1,66 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.human_readable_export_data import HumanReadableExportData + +class TestHumanReadableExportData(unittest.TestCase): + """HumanReadableExportData unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> HumanReadableExportData: + """Test HumanReadableExportData + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `HumanReadableExportData` + """ + model = HumanReadableExportData() + if include_optional: + return HumanReadableExportData( + simulation_name = '', + biomodel_name = '', + application_name = '', + different_parameter_values = [ + '' + ], + application_type = '', + server_saved_file_name = '', + non_spatial = True, + sub_volume = { + 'key' : '' + }, + z_slices = 56, + t_slices = 56, + num_channels = 56 + ) + else: + return HumanReadableExportData( + ) + """ + + def testHumanReadableExportData(self): + """Test HumanReadableExportData""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_i_size.py b/pyvcell/_internal/api/vcell_client/test/test_i_size.py index 8443b5c..f2e167f 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_i_size.py +++ b/pyvcell/_internal/api/vcell_client/test/test_i_size.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.i_size import ISize - class TestISize(unittest.TestCase): """ISize unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> ISize: """Test ISize - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `ISize` """ model = ISize() @@ -48,6 +50,5 @@ def testISize(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_identity.py b/pyvcell/_internal/api/vcell_client/test/test_identity.py index a472400..914a0bc 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_identity.py +++ b/pyvcell/_internal/api/vcell_client/test/test_identity.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.identity import Identity - class TestIdentity(unittest.TestCase): """Identity unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> Identity: """Test Identity - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `Identity` """ model = Identity() @@ -55,6 +57,5 @@ def testIdentity(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_key_value.py b/pyvcell/_internal/api/vcell_client/test/test_key_value.py deleted file mode 100644 index 1fab973..0000000 --- a/pyvcell/_internal/api/vcell_client/test/test_key_value.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -VCell API - -VCell API - -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) - -Do not edit the class manually. -""" - -import unittest - -from pyvcell._internal.api.vcell_client.models.key_value import KeyValue - - -class TestKeyValue(unittest.TestCase): - """KeyValue unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def make_instance(self, include_optional) -> KeyValue: - """Test KeyValue - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" - # uncomment below to create an instance of `KeyValue` - """ - model = KeyValue() - if include_optional: - return KeyValue( - value = 1.337 - ) - else: - return KeyValue( - ) - """ - - def testKeyValue(self): - """Test KeyValue""" - # inst_req_only = self.make_instance(include_optional=False) - # inst_req_and_optional = self.make_instance(include_optional=True) - - -if __name__ == "__main__": - unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_math_model_child_summary.py b/pyvcell/_internal/api/vcell_client/test/test_math_model_child_summary.py new file mode 100644 index 0000000..17758fd --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_math_model_child_summary.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.math_model_child_summary import MathModelChildSummary + +class TestMathModelChildSummary(unittest.TestCase): + """MathModelChildSummary unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> MathModelChildSummary: + """Test MathModelChildSummary + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `MathModelChildSummary` + """ + model = MathModelChildSummary() + if include_optional: + return MathModelChildSummary( + model_type = 'RuleBased', + geometry_dimension = 56, + geometry_name = '', + simulation_annotations = [ + '' + ], + simulation_names = [ + '' + ] + ) + else: + return MathModelChildSummary( + ) + """ + + def testMathModelChildSummary(self): + """Test MathModelChildSummary""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_math_model_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_math_model_resource_api.py new file mode 100644 index 0000000..8ede569 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_math_model_resource_api.py @@ -0,0 +1,62 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.api.math_model_resource_api import MathModelResourceApi + + +class TestMathModelResourceApi(unittest.TestCase): + """MathModelResourceApi unit test stubs""" + + def setUp(self) -> None: + self.api = MathModelResourceApi() + + def tearDown(self) -> None: + pass + + def test_delete_math_model(self) -> None: + """Test case for delete_math_model + + """ + pass + + def test_get_summaries(self) -> None: + """Test case for get_summaries + + """ + pass + + def test_get_summary(self) -> None: + """Test case for get_summary + + """ + pass + + def test_get_vcml(self) -> None: + """Test case for get_vcml + + """ + pass + + def test_save_math_model(self) -> None: + """Test case for save_math_model + + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_math_model_summary.py b/pyvcell/_internal/api/vcell_client/test/test_math_model_summary.py new file mode 100644 index 0000000..f1ed645 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_math_model_summary.py @@ -0,0 +1,117 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.math_model_summary import MathModelSummary + +class TestMathModelSummary(unittest.TestCase): + """MathModelSummary unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> MathModelSummary: + """Test MathModelSummary + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `MathModelSummary` + """ + model = MathModelSummary() + if include_optional: + return MathModelSummary( + version = pyvcell._internal.api.vcell_client.models.version.Version( + version_key = '', + annot = '', + branch_id = 1.337, + branch_point_ref_key = '', + date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + flag = pyvcell._internal.api.vcell_client.models.version_flag.VersionFlag( + version_flag = 56, + int_value = 56, + archived = True, + current = True, + published = True, ), + group_access = pyvcell._internal.api.vcell_client.models.group_access.GroupAccess( + groupid = 1.337, + description = '', ), + name = '', + owner = pyvcell._internal.api.vcell_client.models.user.User( + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ), ), + key_value = '', + model_info = pyvcell._internal.api.vcell_client.models.math_model_child_summary.MathModelChildSummary( + model_type = 'RuleBased', + geometry_dimension = 56, + geometry_name = '', + simulation_annotations = [ + '' + ], + simulation_names = [ + '' + ], ), + software_version = pyvcell._internal.api.vcell_client.models.v_cell_software_version.VCellSoftwareVersion( + software_version_string = '', + vcell_site = 'alpha', + build_number = '', + version_number = '', + major_version = 56, + minor_version = 56, + patch_version = 56, + build_int = 56, + description = '', ), + publication_infos = [ + pyvcell._internal.api.vcell_client.models.publication_info.PublicationInfo( + publication_key = '', + version_key = '', + title = '', + authors = [ + '' + ], + citation = '', + pubmedid = '', + doi = '', + url = '', + pubdate = 'Wed Mar 09 19:00:00 EST 2022', + vc_document_type = 'BIOMODEL_DOC', + user = pyvcell._internal.api.vcell_client.models.user.User( + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ), + the_hash_code = 56, ) + ], + annotated_functions = '' + ) + else: + return MathModelSummary( + ) + """ + + def testMathModelSummary(self): + """Test MathModelSummary""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_math_type.py b/pyvcell/_internal/api/vcell_client/test/test_math_type.py new file mode 100644 index 0000000..83c9c23 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_math_type.py @@ -0,0 +1,34 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.math_type import MathType + +class TestMathType(unittest.TestCase): + """MathType unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testMathType(self): + """Test MathType""" + # inst = MathType() + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_mathmodel_ref.py b/pyvcell/_internal/api/vcell_client/test/test_mathmodel_ref.py index c9a6c69..f5db863 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_mathmodel_ref.py +++ b/pyvcell/_internal/api/vcell_client/test/test_mathmodel_ref.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.mathmodel_ref import MathmodelRef - class TestMathmodelRef(unittest.TestCase): """MathmodelRef unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> MathmodelRef: """Test MathmodelRef - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `MathmodelRef` """ model = MathmodelRef() @@ -50,6 +52,5 @@ def testMathmodelRef(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_model_type.py b/pyvcell/_internal/api/vcell_client/test/test_model_type.py new file mode 100644 index 0000000..a11a86e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_model_type.py @@ -0,0 +1,34 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.model_type import ModelType + +class TestModelType(unittest.TestCase): + """ModelType unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testModelType(self): + """Test ModelType""" + # inst = ModelType() + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_n5_export_request.py b/pyvcell/_internal/api/vcell_client/test/test_n5_export_request.py new file mode 100644 index 0000000..3cee49e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_n5_export_request.py @@ -0,0 +1,140 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.n5_export_request import N5ExportRequest + +class TestN5ExportRequest(unittest.TestCase): + """N5ExportRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> N5ExportRequest: + """Test N5ExportRequest + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `N5ExportRequest` + """ + model = N5ExportRequest() + if include_optional: + return N5ExportRequest( + standard_export_information = pyvcell._internal.api.vcell_client.models.standard_export_info.StandardExportInfo( + output_context = [ + pyvcell._internal.api.vcell_client.models.annotated_function_dto.AnnotatedFunctionDTO( + function_name = '', + function_expression = '', + error = '', + domain = pyvcell._internal.api.vcell_client.models.domain.Domain( + name = '', ), + function_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + category = 'PREDEFINED', ) + ], + context_name = '', + simulation_name = '', + simulation_key = '', + simulation_job = 56, + geometry_specs = pyvcell._internal.api.vcell_client.models.geometry_spec_dto.GeometrySpecDTO( + selections = [ + pyvcell._internal.api.vcell_client.models.spatial_selection.SpatialSelection( + curve_selection_info = pyvcell._internal.api.vcell_client.models.curve_selection_info.CurveSelectionInfo( + field_curve = pyvcell._internal.api.vcell_client.models.curve.Curve( + b_closed = True, + description = '', + type = '', + beginning_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ), + default_num_samples = 56, + ending_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ), + num_sample_points = 56, + segment_count = 56, + spatial_length = 1.337, + closed = True, + valid = True, ), + field_type = 56, + field_control_point = 56, + field_segment = 56, + field_u = 1.337, + field_u_extended = 1.337, + field_control_point_extended = 56, + field_segment_extended = 56, + field_direction_negative = True, + crossing = True, ), + var_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( + type = 56, + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + type = '', + smallest_mesh_cell_dimension_length = 1.337, + variable_type = , + closed = True, + point = True, ) + ], + axis = 56, + slice_number = 56, + geometry_mode = 'GEOMETRY_SELECTIONS', ), + time_specs = pyvcell._internal.api.vcell_client.models.time_specs.TimeSpecs( + begin_time_index = 56, + end_time_index = 56, + all_times = [ + 1.337 + ], + mode = 'TIME_POINT', ), + variable_specs = pyvcell._internal.api.vcell_client.models.variable_specs.VariableSpecs( + variable_names = [ + '' + ], ), ), + sub_volume = { + 'key' : '' + }, + exportable_data_type = 'ODE_VARIABLE_DATA', + dataset_name = '' + ) + else: + return N5ExportRequest( + ) + """ + + def testN5ExportRequest(self): + """Test N5ExportRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_origin.py b/pyvcell/_internal/api/vcell_client/test/test_origin.py index dea72a9..c08d24f 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_origin.py +++ b/pyvcell/_internal/api/vcell_client/test/test_origin.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.origin import Origin - class TestOrigin(unittest.TestCase): """Origin unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> Origin: """Test Origin - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `Origin` """ model = Origin() @@ -48,6 +50,5 @@ def testOrigin(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_publication.py b/pyvcell/_internal/api/vcell_client/test/test_publication.py index 8c5733e..49078d0 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_publication.py +++ b/pyvcell/_internal/api/vcell_client/test/test_publication.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.publication import Publication - class TestPublication(unittest.TestCase): """Publication unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> Publication: """Test Publication - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `Publication` """ model = Publication() @@ -48,18 +50,18 @@ def make_instance(self, include_optional) -> Publication: wittid = 56, biomodel_refs = [ pyvcell._internal.api.vcell_client.models.biomodel_ref.BiomodelRef( - bm_key = 56, - name = '', - owner_name = '', - owner_key = 56, + bm_key = 56, + name = '', + owner_name = '', + owner_key = 56, version_flag = 56, ) ], mathmodel_refs = [ pyvcell._internal.api.vcell_client.models.mathmodel_ref.MathmodelRef( - mm_key = 56, - name = '', - owner_name = '', - owner_key = 56, + mm_key = 56, + name = '', + owner_name = '', + owner_key = 56, version_flag = 56, ) ], var_date = 'Wed Mar 09 19:00:00 EST 2022' @@ -74,6 +76,5 @@ def testPublication(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_publication_info.py b/pyvcell/_internal/api/vcell_client/test/test_publication_info.py new file mode 100644 index 0000000..b1ffa9b --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_publication_info.py @@ -0,0 +1,70 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.publication_info import PublicationInfo + +class TestPublicationInfo(unittest.TestCase): + """PublicationInfo unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> PublicationInfo: + """Test PublicationInfo + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `PublicationInfo` + """ + model = PublicationInfo() + if include_optional: + return PublicationInfo( + publication_key = '', + version_key = '', + title = '', + authors = [ + '' + ], + citation = '', + pubmedid = '', + doi = '', + url = '', + pubdate = 'Wed Mar 09 19:00:00 EST 2022', + vc_document_type = 'BIOMODEL_DOC', + user = pyvcell._internal.api.vcell_client.models.user.User( + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ), + the_hash_code = 56 + ) + else: + return PublicationInfo( + ) + """ + + def testPublicationInfo(self): + """Test PublicationInfo""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_publication_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_publication_resource_api.py index ccd3181..4390744 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_publication_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_publication_resource_api.py @@ -1,14 +1,17 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest @@ -55,10 +58,10 @@ def test_get_publications(self) -> None: def test_update_publication(self) -> None: """Test case for update_publication - Create publication + Update publication """ pass -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_sampled_curve.py b/pyvcell/_internal/api/vcell_client/test/test_sampled_curve.py new file mode 100644 index 0000000..734a929 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_sampled_curve.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.sampled_curve import SampledCurve + +class TestSampledCurve(unittest.TestCase): + """SampledCurve unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> SampledCurve: + """Test SampledCurve + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `SampledCurve` + """ + model = SampledCurve() + if include_optional: + return SampledCurve( + type = 'SampledCurve', + default_num_samples = 56, + max_control_points = 56, + min_control_points = 56, + segment_count = 56, + spatial_length = 1.337 + ) + else: + return SampledCurve( + type = 'SampledCurve', + ) + """ + + def testSampledCurve(self): + """Test SampledCurve""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_scheduler_status.py b/pyvcell/_internal/api/vcell_client/test/test_scheduler_status.py index 6bf47b4..b5b7a3a 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_scheduler_status.py +++ b/pyvcell/_internal/api/vcell_client/test/test_scheduler_status.py @@ -1,17 +1,21 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest +from pyvcell._internal.api.vcell_client.models.scheduler_status import SchedulerStatus class TestSchedulerStatus(unittest.TestCase): """SchedulerStatus unit test stubs""" @@ -26,6 +30,5 @@ def testSchedulerStatus(self): """Test SchedulerStatus""" # inst = SchedulerStatus() - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_simulation_execution_status_record.py b/pyvcell/_internal/api/vcell_client/test/test_simulation_execution_status_record.py index e785adb..21a4017 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_simulation_execution_status_record.py +++ b/pyvcell/_internal/api/vcell_client/test/test_simulation_execution_status_record.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.simulation_execution_status_record import SimulationExecutionStatusRecord - class TestSimulationExecutionStatusRecord(unittest.TestCase): """SimulationExecutionStatusRecord unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SimulationExecutionStatusRecord: """Test SimulationExecutionStatusRecord - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `SimulationExecutionStatusRecord` """ model = SimulationExecutionStatusRecord() @@ -40,8 +42,8 @@ def make_instance(self, include_optional) -> SimulationExecutionStatusRecord: field_compute_host = '', field_has_data = True, field_htc_job_id = pyvcell._internal.api.vcell_client.models.htc_job_id.HtcJobID( - job_number = 56, - server = '', + job_number = 56, + server = '', batch_system_type = 'PBS', ) ) else: @@ -54,6 +56,5 @@ def testSimulationExecutionStatusRecord(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_simulation_job_status_record.py b/pyvcell/_internal/api/vcell_client/test/test_simulation_job_status_record.py index c942c8f..06338ea 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_simulation_job_status_record.py +++ b/pyvcell/_internal/api/vcell_client/test/test_simulation_job_status_record.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.simulation_job_status_record import SimulationJobStatusRecord - class TestSimulationJobStatusRecord(unittest.TestCase): """SimulationJobStatusRecord unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SimulationJobStatusRecord: """Test SimulationJobStatusRecord - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `SimulationJobStatusRecord` """ model = SimulationJobStatusRecord() @@ -36,41 +38,40 @@ def make_instance(self, include_optional) -> SimulationJobStatusRecord: return SimulationJobStatusRecord( field_time_data_stamp = '2022-03-10T16:15:50Z', field_vc_sim_id = pyvcell._internal.api.vcell_client.models.vc_simulation_identifier.VCSimulationIdentifier( - simulation_key = pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ), + simulation_key = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ), - name = '', - test_account = True, ), - i_d = '', ), + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ), + id = '', ), field_submit_date = '2022-03-10T16:15:50Z', field_scheduler_status = 'WAITING', field_simulation_message = pyvcell._internal.api.vcell_client.models.simulation_message.SimulationMessage( - detailed_state = 'UNKNOWN', - message = '', + detailed_state = 'UNKNOWN', + message = '', htc_job_id = pyvcell._internal.api.vcell_client.models.htc_job_id.HtcJobID( - job_number = 56, - server = '', - batch_system_type = 'PBS', ), + job_number = 56, + server = '', + batch_system_type = 'PBS', ), display_message = '', ), field_task_id = 56, field_server_id = '', field_job_index = 56, field_simulation_execution_status = pyvcell._internal.api.vcell_client.models.simulation_execution_status_record.SimulationExecutionStatusRecord( - field_start_date = '2022-03-10T16:15:50Z', - field_latest_update_date = '2022-03-10T16:15:50Z', - field_end_date = '2022-03-10T16:15:50Z', - field_compute_host = '', - field_has_data = True, + field_start_date = '2022-03-10T16:15:50Z', + field_latest_update_date = '2022-03-10T16:15:50Z', + field_end_date = '2022-03-10T16:15:50Z', + field_compute_host = '', + field_has_data = True, field_htc_job_id = pyvcell._internal.api.vcell_client.models.htc_job_id.HtcJobID( - job_number = 56, - server = '', + job_number = 56, + server = '', batch_system_type = 'PBS', ), ), field_simulation_queue_entry_status = pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record.SimulationQueueEntryStatusRecord( - field_queue_priority = 56, - field_queue_date = '2022-03-10T16:15:50Z', + field_queue_priority = 56, + field_queue_date = '2022-03-10T16:15:50Z', field_queue_id = 'QUEUE_ID_WAITING', ) ) else: @@ -83,6 +84,5 @@ def testSimulationJobStatusRecord(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_simulation_message.py b/pyvcell/_internal/api/vcell_client/test/test_simulation_message.py index 814c5b6..154bbed 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_simulation_message.py +++ b/pyvcell/_internal/api/vcell_client/test/test_simulation_message.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.simulation_message import SimulationMessage - class TestSimulationMessage(unittest.TestCase): """SimulationMessage unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SimulationMessage: """Test SimulationMessage - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `SimulationMessage` """ model = SimulationMessage() @@ -37,8 +39,8 @@ def make_instance(self, include_optional) -> SimulationMessage: detailed_state = 'UNKNOWN', message = '', htc_job_id = pyvcell._internal.api.vcell_client.models.htc_job_id.HtcJobID( - job_number = 56, - server = '', + job_number = 56, + server = '', batch_system_type = 'PBS', ), display_message = '' ) @@ -52,6 +54,5 @@ def testSimulationMessage(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_entry_status_record.py b/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_entry_status_record.py index 6c56be0..d087231 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_entry_status_record.py +++ b/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_entry_status_record.py @@ -1,21 +1,21 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -import unittest -from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import ( - SimulationQueueEntryStatusRecord, -) +import unittest +from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import SimulationQueueEntryStatusRecord class TestSimulationQueueEntryStatusRecord(unittest.TestCase): """SimulationQueueEntryStatusRecord unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SimulationQueueEntryStatusRecord: """Test SimulationQueueEntryStatusRecord - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `SimulationQueueEntryStatusRecord` """ model = SimulationQueueEntryStatusRecord() @@ -50,6 +50,5 @@ def testSimulationQueueEntryStatusRecord(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_id.py b/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_id.py index bbb5f18..8853494 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_id.py +++ b/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_id.py @@ -1,17 +1,21 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest +from pyvcell._internal.api.vcell_client.models.simulation_queue_id import SimulationQueueID class TestSimulationQueueID(unittest.TestCase): """SimulationQueueID unit test stubs""" @@ -26,6 +30,5 @@ def testSimulationQueueID(self): """Test SimulationQueueID""" # inst = SimulationQueueID() - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_simulation_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_simulation_resource_api.py index d74992c..3aa7c85 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_simulation_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_simulation_resource_api.py @@ -1,14 +1,17 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest @@ -46,5 +49,5 @@ def test_stop_simulation(self) -> None: pass -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_simulation_status_persistent_record.py b/pyvcell/_internal/api/vcell_client/test/test_simulation_status_persistent_record.py index 50e948b..39012c4 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_simulation_status_persistent_record.py +++ b/pyvcell/_internal/api/vcell_client/test/test_simulation_status_persistent_record.py @@ -1,21 +1,21 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) -Do not edit the class manually. -""" + Do not edit the class manually. +""" # noqa: E501 -import unittest -from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import ( - SimulationStatusPersistentRecord, -) +import unittest +from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import SimulationStatusPersistentRecord class TestSimulationStatusPersistentRecord(unittest.TestCase): """SimulationStatusPersistentRecord unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SimulationStatusPersistentRecord: """Test SimulationStatusPersistentRecord - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `SimulationStatusPersistentRecord` """ model = SimulationStatusPersistentRecord() @@ -50,6 +50,5 @@ def testSimulationStatusPersistentRecord(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_solver_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_solver_resource_api.py index c2f1344..c8d8591 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_solver_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_solver_resource_api.py @@ -1,14 +1,17 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest @@ -24,13 +27,20 @@ def setUp(self) -> None: def tearDown(self) -> None: pass - def test_get_fv_solver_input(self) -> None: - """Test case for get_fv_solver_input + def test_get_fv_solver_input_from_sbml(self) -> None: + """Test case for get_fv_solver_input_from_sbml + + Retrieve finite volume input from SBML spatial model. + """ + pass + + def test_get_fv_solver_input_from_vcml(self) -> None: + """Test case for get_fv_solver_input_from_vcml Retrieve finite volume input from SBML spatial model. """ pass -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_source_model.py b/pyvcell/_internal/api/vcell_client/test/test_source_model.py new file mode 100644 index 0000000..5c9651d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_source_model.py @@ -0,0 +1,53 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.source_model import SourceModel + +class TestSourceModel(unittest.TestCase): + """SourceModel unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> SourceModel: + """Test SourceModel + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `SourceModel` + """ + model = SourceModel() + if include_optional: + return SourceModel( + model_id = '', + model_type = 'BIOMODEL' + ) + else: + return SourceModel( + ) + """ + + def testSourceModel(self): + """Test SourceModel""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_spatial_selection.py b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection.py new file mode 100644 index 0000000..7b02585 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection.py @@ -0,0 +1,104 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.spatial_selection import SpatialSelection + +class TestSpatialSelection(unittest.TestCase): + """SpatialSelection unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> SpatialSelection: + """Test SpatialSelection + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `SpatialSelection` + """ + model = SpatialSelection() + if include_optional: + return SpatialSelection( + curve_selection_info = pyvcell._internal.api.vcell_client.models.curve_selection_info.CurveSelectionInfo( + field_curve = pyvcell._internal.api.vcell_client.models.curve.Curve( + b_closed = True, + description = '', + type = '', + beginning_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ), + default_num_samples = 56, + ending_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ), + num_sample_points = 56, + segment_count = 56, + spatial_length = 1.337, + closed = True, + valid = True, ), + field_type = 56, + field_control_point = 56, + field_segment = 56, + field_u = 1.337, + field_u_extended = 1.337, + field_control_point_extended = 56, + field_segment_extended = 56, + field_direction_negative = True, + crossing = True, ), + var_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + type = '', + smallest_mesh_cell_dimension_length = 1.337, + variable_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + closed = True, + point = True + ) + else: + return SpatialSelection( + type = '', + ) + """ + + def testSpatialSelection(self): + """Test SpatialSelection""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_contour.py b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_contour.py new file mode 100644 index 0000000..5463da4 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_contour.py @@ -0,0 +1,62 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.spatial_selection_contour import SpatialSelectionContour + +class TestSpatialSelectionContour(unittest.TestCase): + """SpatialSelectionContour unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> SpatialSelectionContour: + """Test SpatialSelectionContour + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `SpatialSelectionContour` + """ + model = SpatialSelectionContour() + if include_optional: + return SpatialSelectionContour( + type = 'Contour', + field_sampled_data_indexes = [ + 56 + ], + index_samples = [ + 56 + ], + sampled_data_indexes = [ + 56 + ] + ) + else: + return SpatialSelectionContour( + type = 'Contour', + ) + """ + + def testSpatialSelectionContour(self): + """Test SpatialSelectionContour""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_membrane.py b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_membrane.py new file mode 100644 index 0000000..dd75e5e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_membrane.py @@ -0,0 +1,63 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.spatial_selection_membrane import SpatialSelectionMembrane + +class TestSpatialSelectionMembrane(unittest.TestCase): + """SpatialSelectionMembrane unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> SpatialSelectionMembrane: + """Test SpatialSelectionMembrane + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `SpatialSelectionMembrane` + """ + model = SpatialSelectionMembrane() + if include_optional: + return SpatialSelectionMembrane( + type = 'Membrane', + field_sampled_data_indexes = [ + 56 + ], + selection_source = pyvcell._internal.api.vcell_client.models.sampled_curve.SampledCurve( + type = 'SampledCurve', + default_num_samples = 56, + max_control_points = 56, + min_control_points = 56, + segment_count = 56, + spatial_length = 1.337, ) + ) + else: + return SpatialSelectionMembrane( + type = 'Membrane', + ) + """ + + def testSpatialSelectionMembrane(self): + """Test SpatialSelectionMembrane""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_volume.py b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_volume.py new file mode 100644 index 0000000..af4001a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_volume.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.spatial_selection_volume import SpatialSelectionVolume + +class TestSpatialSelectionVolume(unittest.TestCase): + """SpatialSelectionVolume unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> SpatialSelectionVolume: + """Test SpatialSelectionVolume + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `SpatialSelectionVolume` + """ + model = SpatialSelectionVolume() + if include_optional: + return SpatialSelectionVolume( + type = 'Volume', + symmetric = True + ) + else: + return SpatialSelectionVolume( + type = 'Volume', + ) + """ + + def testSpatialSelectionVolume(self): + """Test SpatialSelectionVolume""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_specialclaim.py b/pyvcell/_internal/api/vcell_client/test/test_specialclaim.py new file mode 100644 index 0000000..1d8f302 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_specialclaim.py @@ -0,0 +1,34 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.specialclaim import SPECIALCLAIM + +class TestSPECIALCLAIM(unittest.TestCase): + """SPECIALCLAIM unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testSPECIALCLAIM(self): + """Test SPECIALCLAIM""" + # inst = SPECIALCLAIM() + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_spline.py b/pyvcell/_internal/api/vcell_client/test/test_spline.py new file mode 100644 index 0000000..33c9f06 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_spline.py @@ -0,0 +1,57 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.spline import Spline + +class TestSpline(unittest.TestCase): + """Spline unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> Spline: + """Test Spline + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `Spline` + """ + model = Spline() + if include_optional: + return Spline( + type = 'Spline', + default_num_samples = 56, + max_control_points = 56, + min_control_points = 56, + segment_count = 56 + ) + else: + return Spline( + type = 'Spline', + ) + """ + + def testSpline(self): + """Test Spline""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_standard_export_info.py b/pyvcell/_internal/api/vcell_client/test/test_standard_export_info.py new file mode 100644 index 0000000..cc3ed10 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_standard_export_info.py @@ -0,0 +1,144 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.standard_export_info import StandardExportInfo + +class TestStandardExportInfo(unittest.TestCase): + """StandardExportInfo unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> StandardExportInfo: + """Test StandardExportInfo + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `StandardExportInfo` + """ + model = StandardExportInfo() + if include_optional: + return StandardExportInfo( + output_context = [ + pyvcell._internal.api.vcell_client.models.annotated_function_dto.AnnotatedFunctionDTO( + function_name = '', + function_expression = '', + error = '', + domain = pyvcell._internal.api.vcell_client.models.domain.Domain( + name = '', ), + function_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + category = 'PREDEFINED', ) + ], + context_name = '', + simulation_name = '', + simulation_key = '', + simulation_job = 56, + geometry_specs = pyvcell._internal.api.vcell_client.models.geometry_spec_dto.GeometrySpecDTO( + selections = [ + pyvcell._internal.api.vcell_client.models.spatial_selection.SpatialSelection( + curve_selection_info = pyvcell._internal.api.vcell_client.models.curve_selection_info.CurveSelectionInfo( + field_curve = pyvcell._internal.api.vcell_client.models.curve.Curve( + b_closed = True, + description = '', + type = '', + beginning_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ), + default_num_samples = 56, + ending_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( + x = 1.337, + y = 1.337, + z = 1.337, ), + num_sample_points = 56, + segment_count = 56, + spatial_length = 1.337, + closed = True, + valid = True, ), + field_type = 56, + field_control_point = 56, + field_segment = 56, + field_u = 1.337, + field_u_extended = 1.337, + field_control_point_extended = 56, + field_segment_extended = 56, + field_direction_negative = True, + crossing = True, ), + var_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + type = '', + smallest_mesh_cell_dimension_length = 1.337, + variable_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( + type = 56, + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + closed = True, + point = True, ) + ], + axis = 56, + slice_number = 56, + geometry_mode = 'GEOMETRY_SELECTIONS', ), + time_specs = pyvcell._internal.api.vcell_client.models.time_specs.TimeSpecs( + begin_time_index = 56, + end_time_index = 56, + all_times = [ + 1.337 + ], + mode = 'TIME_POINT', ), + variable_specs = pyvcell._internal.api.vcell_client.models.variable_specs.VariableSpecs( + variable_names = [ + '' + ], + mode = 'VARIABLE_ONE', ) + ) + else: + return StandardExportInfo( + ) + """ + + def testStandardExportInfo(self): + """Test StandardExportInfo""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_status.py b/pyvcell/_internal/api/vcell_client/test/test_status.py index fd208c7..72edf1f 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_status.py +++ b/pyvcell/_internal/api/vcell_client/test/test_status.py @@ -1,17 +1,21 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest +from pyvcell._internal.api.vcell_client.models.status import Status class TestStatus(unittest.TestCase): """Status unit test stubs""" @@ -26,6 +30,5 @@ def testStatus(self): """Test Status""" # inst = Status() - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_status_message.py b/pyvcell/_internal/api/vcell_client/test/test_status_message.py index 4639c09..9369250 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_status_message.py +++ b/pyvcell/_internal/api/vcell_client/test/test_status_message.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.status_message import StatusMessage - class TestStatusMessage(unittest.TestCase): """StatusMessage unit test stubs""" @@ -26,51 +28,50 @@ def tearDown(self): def make_instance(self, include_optional) -> StatusMessage: """Test StatusMessage - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `StatusMessage` """ model = StatusMessage() if include_optional: return StatusMessage( job_status = pyvcell._internal.api.vcell_client.models.simulation_job_status_record.SimulationJobStatusRecord( - field_time_data_stamp = '2022-03-10T16:15:50Z', + field_time_data_stamp = '2022-03-10T16:15:50Z', field_vc_sim_id = pyvcell._internal.api.vcell_client.models.vc_simulation_identifier.VCSimulationIdentifier( - simulation_key = pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ), + simulation_key = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ), - name = '', - test_account = True, ), - i_d = '', ), - field_submit_date = '2022-03-10T16:15:50Z', - field_scheduler_status = 'WAITING', + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ), + id = '', ), + field_submit_date = '2022-03-10T16:15:50Z', + field_scheduler_status = 'WAITING', field_simulation_message = pyvcell._internal.api.vcell_client.models.simulation_message.SimulationMessage( - detailed_state = 'UNKNOWN', - message = '', + detailed_state = 'UNKNOWN', + message = '', htc_job_id = pyvcell._internal.api.vcell_client.models.htc_job_id.HtcJobID( - job_number = 56, - server = '', - batch_system_type = 'PBS', ), - display_message = '', ), - field_task_id = 56, - field_server_id = '', - field_job_index = 56, + job_number = 56, + server = '', + batch_system_type = 'PBS', ), + display_message = '', ), + field_task_id = 56, + field_server_id = '', + field_job_index = 56, field_simulation_execution_status = pyvcell._internal.api.vcell_client.models.simulation_execution_status_record.SimulationExecutionStatusRecord( - field_start_date = '2022-03-10T16:15:50Z', - field_latest_update_date = '2022-03-10T16:15:50Z', - field_end_date = '2022-03-10T16:15:50Z', - field_compute_host = '', - field_has_data = True, + field_start_date = '2022-03-10T16:15:50Z', + field_latest_update_date = '2022-03-10T16:15:50Z', + field_end_date = '2022-03-10T16:15:50Z', + field_compute_host = '', + field_has_data = True, field_htc_job_id = pyvcell._internal.api.vcell_client.models.htc_job_id.HtcJobID( - job_number = 56, - server = '', ), ), + job_number = 56, + server = '', ), ), field_simulation_queue_entry_status = pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record.SimulationQueueEntryStatusRecord( - field_queue_priority = 56, - field_queue_date = '2022-03-10T16:15:50Z', + field_queue_priority = 56, + field_queue_date = '2022-03-10T16:15:50Z', field_queue_id = 'QUEUE_ID_WAITING', ), ), user_name = '', progress = 1.337, @@ -86,6 +87,5 @@ def testStatusMessage(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_time_mode.py b/pyvcell/_internal/api/vcell_client/test/test_time_mode.py new file mode 100644 index 0000000..5fe758d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_time_mode.py @@ -0,0 +1,34 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.time_mode import TimeMode + +class TestTimeMode(unittest.TestCase): + """TimeMode unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testTimeMode(self): + """Test TimeMode""" + # inst = TimeMode() + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_time_specs.py b/pyvcell/_internal/api/vcell_client/test/test_time_specs.py new file mode 100644 index 0000000..3d8d2b3 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_time_specs.py @@ -0,0 +1,57 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.time_specs import TimeSpecs + +class TestTimeSpecs(unittest.TestCase): + """TimeSpecs unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> TimeSpecs: + """Test TimeSpecs + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `TimeSpecs` + """ + model = TimeSpecs() + if include_optional: + return TimeSpecs( + begin_time_index = 56, + end_time_index = 56, + all_times = [ + 1.337 + ], + mode = 'TIME_POINT' + ) + else: + return TimeSpecs( + ) + """ + + def testTimeSpecs(self): + """Test TimeSpecs""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_user.py b/pyvcell/_internal/api/vcell_client/test/test_user.py index 8094ca5..e462996 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_user.py +++ b/pyvcell/_internal/api/vcell_client/test/test_user.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.user import User - class TestUser(unittest.TestCase): """User unit test stubs""" @@ -26,19 +28,19 @@ def tearDown(self): def make_instance(self, include_optional) -> User: """Test User - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `User` """ model = User() if include_optional: return User( user_name = '', - key = pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ), - name = '', - test_account = True + key = '', + my_specials = [ + 'admins' + ] ) else: return User( @@ -50,6 +52,5 @@ def testUser(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_user_identity_json_safe.py b/pyvcell/_internal/api/vcell_client/test/test_user_identity_json_safe.py index 4c11355..85c5ab9 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_user_identity_json_safe.py +++ b/pyvcell/_internal/api/vcell_client/test/test_user_identity_json_safe.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.user_identity_json_safe import UserIdentityJSONSafe - class TestUserIdentityJSONSafe(unittest.TestCase): """UserIdentityJSONSafe unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> UserIdentityJSONSafe: """Test UserIdentityJSONSafe - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `UserIdentityJSONSafe` """ model = UserIdentityJSONSafe() @@ -50,6 +52,5 @@ def testUserIdentityJSONSafe(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_user_login_info_for_mapping.py b/pyvcell/_internal/api/vcell_client/test/test_user_login_info_for_mapping.py index 58c2892..eb676da 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_user_login_info_for_mapping.py +++ b/pyvcell/_internal/api/vcell_client/test/test_user_login_info_for_mapping.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.user_login_info_for_mapping import UserLoginInfoForMapping - class TestUserLoginInfoForMapping(unittest.TestCase): """UserLoginInfoForMapping unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> UserLoginInfoForMapping: """Test UserLoginInfoForMapping - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `UserLoginInfoForMapping` """ model = UserLoginInfoForMapping() @@ -47,6 +49,5 @@ def testUserLoginInfoForMapping(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_user_registration_info.py b/pyvcell/_internal/api/vcell_client/test/test_user_registration_info.py index 94b74c9..f560cb6 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_user_registration_info.py +++ b/pyvcell/_internal/api/vcell_client/test/test_user_registration_info.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.user_registration_info import UserRegistrationInfo - class TestUserRegistrationInfo(unittest.TestCase): """UserRegistrationInfo unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> UserRegistrationInfo: """Test UserRegistrationInfo - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `UserRegistrationInfo` """ model = UserRegistrationInfo() @@ -50,6 +52,5 @@ def testUserRegistrationInfo(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_users_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_users_resource_api.py index 26989ce..29341d6 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_users_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_users_resource_api.py @@ -1,14 +1,17 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest @@ -95,5 +98,5 @@ def test_unmap_user(self) -> None: pass -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_v_cell_http_error.py b/pyvcell/_internal/api/vcell_client/test/test_v_cell_http_error.py new file mode 100644 index 0000000..4ba7d66 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_v_cell_http_error.py @@ -0,0 +1,53 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.v_cell_http_error import VCellHTTPError + +class TestVCellHTTPError(unittest.TestCase): + """VCellHTTPError unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> VCellHTTPError: + """Test VCellHTTPError + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `VCellHTTPError` + """ + model = VCellHTTPError() + if include_optional: + return VCellHTTPError( + exception_type = '', + message = '' + ) + else: + return VCellHTTPError( + ) + """ + + def testVCellHTTPError(self): + """Test VCellHTTPError""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_v_cell_site.py b/pyvcell/_internal/api/vcell_client/test/test_v_cell_site.py new file mode 100644 index 0000000..7010fc1 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_v_cell_site.py @@ -0,0 +1,34 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.v_cell_site import VCellSite + +class TestVCellSite(unittest.TestCase): + """VCellSite unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testVCellSite(self): + """Test VCellSite""" + # inst = VCellSite() + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_v_cell_software_version.py b/pyvcell/_internal/api/vcell_client/test/test_v_cell_software_version.py new file mode 100644 index 0000000..5cf80fa --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_v_cell_software_version.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.v_cell_software_version import VCellSoftwareVersion + +class TestVCellSoftwareVersion(unittest.TestCase): + """VCellSoftwareVersion unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> VCellSoftwareVersion: + """Test VCellSoftwareVersion + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `VCellSoftwareVersion` + """ + model = VCellSoftwareVersion() + if include_optional: + return VCellSoftwareVersion( + software_version_string = '', + vcell_site = 'alpha', + build_number = '', + version_number = '', + major_version = 56, + minor_version = 56, + patch_version = 56, + build_int = 56, + description = '' + ) + else: + return VCellSoftwareVersion( + ) + """ + + def testVCellSoftwareVersion(self): + """Test VCellSoftwareVersion""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_variable_domain.py b/pyvcell/_internal/api/vcell_client/test/test_variable_domain.py index 06522dc..4f5c4bf 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_variable_domain.py +++ b/pyvcell/_internal/api/vcell_client/test/test_variable_domain.py @@ -1,17 +1,21 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest +from pyvcell._internal.api.vcell_client.models.variable_domain import VariableDomain class TestVariableDomain(unittest.TestCase): """VariableDomain unit test stubs""" @@ -26,6 +30,5 @@ def testVariableDomain(self): """Test VariableDomain""" # inst = VariableDomain() - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_variable_mode.py b/pyvcell/_internal/api/vcell_client/test/test_variable_mode.py new file mode 100644 index 0000000..50a8bea --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_variable_mode.py @@ -0,0 +1,34 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.variable_mode import VariableMode + +class TestVariableMode(unittest.TestCase): + """VariableMode unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testVariableMode(self): + """Test VariableMode""" + # inst = VariableMode() + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_variable_specs.py b/pyvcell/_internal/api/vcell_client/test/test_variable_specs.py new file mode 100644 index 0000000..2e7d4a8 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_variable_specs.py @@ -0,0 +1,55 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.variable_specs import VariableSpecs + +class TestVariableSpecs(unittest.TestCase): + """VariableSpecs unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> VariableSpecs: + """Test VariableSpecs + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `VariableSpecs` + """ + model = VariableSpecs() + if include_optional: + return VariableSpecs( + variable_names = [ + '' + ], + mode = 'VARIABLE_ONE' + ) + else: + return VariableSpecs( + ) + """ + + def testVariableSpecs(self): + """Test VariableSpecs""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_variable_type.py b/pyvcell/_internal/api/vcell_client/test/test_variable_type.py index b810c45..92c7e4b 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_variable_type.py +++ b/pyvcell/_internal/api/vcell_client/test/test_variable_type.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.variable_type import VariableType - class TestVariableType(unittest.TestCase): """VariableType unit test stubs""" @@ -26,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> VariableType: """Test VariableType - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `VariableType` """ model = VariableType() @@ -54,6 +56,5 @@ def testVariableType(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_vc_document_type.py b/pyvcell/_internal/api/vcell_client/test/test_vc_document_type.py new file mode 100644 index 0000000..5636c31 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_vc_document_type.py @@ -0,0 +1,34 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.vc_document_type import VCDocumentType + +class TestVCDocumentType(unittest.TestCase): + """VCDocumentType unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testVCDocumentType(self): + """Test VCDocumentType""" + # inst = VCDocumentType() + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_vc_image_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_vc_image_resource_api.py new file mode 100644 index 0000000..5d9cf3d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_vc_image_resource_api.py @@ -0,0 +1,62 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.api.vc_image_resource_api import VCImageResourceApi + + +class TestVCImageResourceApi(unittest.TestCase): + """VCImageResourceApi unit test stubs""" + + def setUp(self) -> None: + self.api = VCImageResourceApi() + + def tearDown(self) -> None: + pass + + def test_delete_image_vcml(self) -> None: + """Test case for delete_image_vcml + + """ + pass + + def test_get_image_summaries(self) -> None: + """Test case for get_image_summaries + + """ + pass + + def test_get_image_summary(self) -> None: + """Test case for get_image_summary + + """ + pass + + def test_get_image_vcml(self) -> None: + """Test case for get_image_vcml + + """ + pass + + def test_save_image_vcml(self) -> None: + """Test case for save_image_vcml + + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_vc_image_summary.py b/pyvcell/_internal/api/vcell_client/test/test_vc_image_summary.py new file mode 100644 index 0000000..44a03a0 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_vc_image_summary.py @@ -0,0 +1,97 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.vc_image_summary import VCImageSummary + +class TestVCImageSummary(unittest.TestCase): + """VCImageSummary unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> VCImageSummary: + """Test VCImageSummary + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `VCImageSummary` + """ + model = VCImageSummary() + if include_optional: + return VCImageSummary( + size = pyvcell._internal.api.vcell_client.models.i_size.ISize( + x = 56, + y = 56, + z = 56, ), + extent = pyvcell._internal.api.vcell_client.models.extent.Extent( + x = 1.337, + y = 1.337, + z = 1.337, ), + version = pyvcell._internal.api.vcell_client.models.version.Version( + version_key = '', + annot = '', + branch_id = 1.337, + branch_point_ref_key = '', + date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + flag = pyvcell._internal.api.vcell_client.models.version_flag.VersionFlag( + version_flag = 56, + int_value = 56, + archived = True, + current = True, + published = True, ), + group_access = pyvcell._internal.api.vcell_client.models.group_access.GroupAccess( + groupid = 1.337, + description = '', ), + name = '', + owner = pyvcell._internal.api.vcell_client.models.user.User( + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ), ), + preview = pyvcell._internal.api.vcell_client.models.gif_image.GIFImage( + gif_encoded_data = bytes(b'blah'), + size = pyvcell._internal.api.vcell_client.models.i_size.ISize( + x = 56, + y = 56, + z = 56, ), ), + software_version = pyvcell._internal.api.vcell_client.models.v_cell_software_version.VCellSoftwareVersion( + software_version_string = '', + vcell_site = 'alpha', + build_number = '', + version_number = '', + major_version = 56, + minor_version = 56, + patch_version = 56, + build_int = 56, + description = '', ) + ) + else: + return VCImageSummary( + ) + """ + + def testVCImageSummary(self): + """Test VCImageSummary""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_vc_simulation_identifier.py b/pyvcell/_internal/api/vcell_client/test/test_vc_simulation_identifier.py index d0398b5..f2ad9d1 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_vc_simulation_identifier.py +++ b/pyvcell/_internal/api/vcell_client/test/test_vc_simulation_identifier.py @@ -1,20 +1,22 @@ +# coding: utf-8 + """ -VCell API + VCell API -VCell API + VCell API -The version of the OpenAPI document: 1.0.1 -Contact: vcell_support@uchc.com -Generated by OpenAPI Generator (https://openapi-generator.tech) + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 -Do not edit the class manually. -""" import unittest from pyvcell._internal.api.vcell_client.models.vc_simulation_identifier import VCSimulationIdentifier - class TestVCSimulationIdentifier(unittest.TestCase): """VCSimulationIdentifier unit test stubs""" @@ -26,23 +28,22 @@ def tearDown(self): def make_instance(self, include_optional) -> VCSimulationIdentifier: """Test VCSimulationIdentifier - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included""" + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ # uncomment below to create an instance of `VCSimulationIdentifier` """ model = VCSimulationIdentifier() if include_optional: return VCSimulationIdentifier( - simulation_key = pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ), + simulation_key = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ), - name = '', - test_account = True, ), - i_d = '' + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ), + id = '' ) else: return VCSimulationIdentifier( @@ -54,6 +55,5 @@ def testVCSimulationIdentifier(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == "__main__": +if __name__ == '__main__': unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_version.py b/pyvcell/_internal/api/vcell_client/test/test_version.py new file mode 100644 index 0000000..8dcdae3 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_version.py @@ -0,0 +1,72 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.version import Version + +class TestVersion(unittest.TestCase): + """Version unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> Version: + """Test Version + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `Version` + """ + model = Version() + if include_optional: + return Version( + version_key = '', + annot = '', + branch_id = 1.337, + branch_point_ref_key = '', + var_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + flag = pyvcell._internal.api.vcell_client.models.version_flag.VersionFlag( + version_flag = 56, + int_value = 56, + archived = True, + current = True, + published = True, ), + group_access = pyvcell._internal.api.vcell_client.models.group_access.GroupAccess( + groupid = 1.337, + description = '', ), + name = '', + owner = pyvcell._internal.api.vcell_client.models.user.User( + user_name = '', + key = '', + my_specials = [ + 'admins' + ], ) + ) + else: + return Version( + ) + """ + + def testVersion(self): + """Test Version""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_version_flag.py b/pyvcell/_internal/api/vcell_client/test/test_version_flag.py new file mode 100644 index 0000000..4a80098 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_version_flag.py @@ -0,0 +1,56 @@ +# coding: utf-8 + +""" + VCell API + + VCell API + + The version of the OpenAPI document: 1.0.1 + Contact: vcell_support@uchc.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from pyvcell._internal.api.vcell_client.models.version_flag import VersionFlag + +class TestVersionFlag(unittest.TestCase): + """VersionFlag unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> VersionFlag: + """Test VersionFlag + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `VersionFlag` + """ + model = VersionFlag() + if include_optional: + return VersionFlag( + version_flag = 56, + int_value = 56, + archived = True, + current = True, + published = True + ) + else: + return VersionFlag( + ) + """ + + def testVersionFlag(self): + """Test VersionFlag""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/pyvcell/_internal/api/vcell_client_README.md b/pyvcell/_internal/api/vcell_client_README.md index 5464595..07a20e2 100644 --- a/pyvcell/_internal/api/vcell_client_README.md +++ b/pyvcell/_internal/api/vcell_client_README.md @@ -1,18 +1,17 @@ # vcell-api - VCell API The `pyvcell._internal.api.vcell_client` package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: - API version: 1.0.1 - Package version: 1.0.0 -- Generator version: 7.10.0 +- Generator version: 7.20.0 - Build package: org.openapitools.codegen.languages.PythonClientCodegen - For more information, please visit [http://exampleurl.com/contact](http://exampleurl.com/contact) +For more information, please visit [https://vcell.org](https://vcell.org) ## Requirements. -Python 3.8+ +Python 3.9+ ## Installation & Usage @@ -20,10 +19,10 @@ This python library package is generated without supporting files like setup.py To be able to use it, you will need these dependencies in your own package that uses this library: -- urllib3 >= 1.25.3, < 3.0.0 -- python-dateutil >= 2.8.2 -- pydantic >= 2 -- typing-extensions >= 4.7.1 +* urllib3 >= 2.1.0, < 3.0.0 +* python-dateutil >= 2.8.2 +* pydantic >= 2 +* typing-extensions >= 4.7.1 ## Getting Started @@ -36,10 +35,10 @@ import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException from pprint import pprint -# Defining the host is optional and defaults to https://vcell-dev.cam.uchc.edu +# Defining the host is optional and defaults to https://vcell.cam.uchc.edu # See configuration.py for a list of all supported configuration parameters. configuration = pyvcell._internal.api.vcell_client.Configuration( - host="https://vcell-dev.cam.uchc.edu" + host = "https://vcell.cam.uchc.edu" ) # The client must configure the authentication and authorization parameters @@ -65,90 +64,167 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ## Documentation for API Endpoints -All URIs are relative to *https://vcell-dev.cam.uchc.edu* - -| Class | Method | HTTP request | Description | -| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | -| _AdminResourceApi_ | [**get_usage**](pyvcell/core/api/vcell_client/docs/AdminResourceApi.md#get_usage) | **GET** /api/v1/admin/usage | Get usage summary | -| _BioModelResourceApi_ | [**delete_bio_model**](pyvcell/core/api/vcell_client/docs/BioModelResourceApi.md#delete_bio_model) | **DELETE** /api/v1/bioModel/{bioModelID} | Delete the BioModel from VCell's database. | -| _BioModelResourceApi_ | [**get_biomodel_by_id**](pyvcell/core/api/vcell_client/docs/BioModelResourceApi.md#get_biomodel_by_id) | **GET** /api/v1/bioModel/{bioModelID} | Get BioModel information in JSON format by ID. | -| _BioModelResourceApi_ | [**upload_bio_model**](pyvcell/core/api/vcell_client/docs/BioModelResourceApi.md#upload_bio_model) | **POST** /api/v1/bioModel/upload_bioModel | Upload the BioModel to VCell database. Returns BioModel ID. | -| _FieldDataResourceApi_ | [**analyze_field_data_file**](pyvcell/core/api/vcell_client/docs/FieldDataResourceApi.md#analyze_field_data_file) | **POST** /api/v1/fieldData/analyzeFieldDataFile | Analyze the field data from the uploaded file. Filenames must be lowercase alphanumeric, and can contain underscores. | -| _FieldDataResourceApi_ | [**create_field_data_from_analyzed_file**](pyvcell/core/api/vcell_client/docs/FieldDataResourceApi.md#create_field_data_from_analyzed_file) | **POST** /api/v1/fieldData/createFieldDataFromAnalyzedFile | Take the analyzed results of the field data, modify it to your liking, then save it on the server. | -| _FieldDataResourceApi_ | [**delete_field_data**](pyvcell/core/api/vcell_client/docs/FieldDataResourceApi.md#delete_field_data) | **DELETE** /api/v1/fieldData/delete/{fieldDataID} | Delete the selected field data. | -| _FieldDataResourceApi_ | [**get_all_field_data_ids**](pyvcell/core/api/vcell_client/docs/FieldDataResourceApi.md#get_all_field_data_ids) | **GET** /api/v1/fieldData/IDs | Get all of the ids used to identify, and retrieve field data. | -| _FieldDataResourceApi_ | [**get_field_data_shape_from_id**](pyvcell/core/api/vcell_client/docs/FieldDataResourceApi.md#get_field_data_shape_from_id) | **GET** /api/v1/fieldData/fieldDataShape/{fieldDataID} | Get the shape of the field data. That is it's size, origin, extent, and data identifiers. | -| _HelloWorldApi_ | [**get_hello_world**](pyvcell/core/api/vcell_client/docs/HelloWorldApi.md#get_hello_world) | **GET** /api/v1/helloworld | Get hello world message. | -| _PublicationResourceApi_ | [**create_publication**](pyvcell/core/api/vcell_client/docs/PublicationResourceApi.md#create_publication) | **POST** /api/v1/publications | Create publication | -| _PublicationResourceApi_ | [**delete_publication**](pyvcell/core/api/vcell_client/docs/PublicationResourceApi.md#delete_publication) | **DELETE** /api/v1/publications/{id} | Delete publication | -| _PublicationResourceApi_ | [**get_publication_by_id**](pyvcell/core/api/vcell_client/docs/PublicationResourceApi.md#get_publication_by_id) | **GET** /api/v1/publications/{id} | Get publication by ID | -| _PublicationResourceApi_ | [**get_publications**](pyvcell/core/api/vcell_client/docs/PublicationResourceApi.md#get_publications) | **GET** /api/v1/publications | Get all publications | -| _PublicationResourceApi_ | [**update_publication**](pyvcell/core/api/vcell_client/docs/PublicationResourceApi.md#update_publication) | **PUT** /api/v1/publications | Update publication | -| _SimulationResourceApi_ | [**get_simulation_status**](pyvcell/core/api/vcell_client/docs/SimulationResourceApi.md#get_simulation_status) | **GET** /api/v1/Simulation/{simID}/simulationStatus | Get the status of simulation running | -| _SimulationResourceApi_ | [**start_simulation**](pyvcell/core/api/vcell_client/docs/SimulationResourceApi.md#start_simulation) | **POST** /api/v1/Simulation/{simID}/startSimulation | Start a simulation. | -| _SimulationResourceApi_ | [**stop_simulation**](pyvcell/core/api/vcell_client/docs/SimulationResourceApi.md#stop_simulation) | **POST** /api/v1/Simulation/{simID}/stopSimulation | Stop a simulation. | -| _SolverResourceApi_ | [**get_fv_solver_input_from_sbml**](pyvcell/core/api/vcell_client/docs/SolverResourceApi.md#get_fv_solver_input_from_sbml) | **POST** /api/v1/solver/getFVSolverInput | Retrieve finite volume input from SBML spatial model. | -| _SolverResourceApi_ | [**get_fv_solver_input_from_vcml**](pyvcell/core/api/vcell_client/docs/SolverResourceApi.md#get_fv_solver_input_from_vcml) | **POST** /api/v1/solver/getFVSolverInputFromVCML | Retrieve finite volume input from SBML spatial model. | -| _UsersResourceApi_ | [**forgot_legacy_password**](pyvcell/core/api/vcell_client/docs/UsersResourceApi.md#forgot_legacy_password) | **POST** /api/v1/users/forgotLegacyPassword | The end user has forgotten the legacy password they used for VCell, so they will be emailed it. | -| _UsersResourceApi_ | [**get_guest_legacy_api_token**](pyvcell/core/api/vcell_client/docs/UsersResourceApi.md#get_guest_legacy_api_token) | **POST** /api/v1/users/guestBearerToken | Method to get legacy tokens for guest users | -| _UsersResourceApi_ | [**get_legacy_api_token**](pyvcell/core/api/vcell_client/docs/UsersResourceApi.md#get_legacy_api_token) | **POST** /api/v1/users/bearerToken | Get token for legacy API | -| _UsersResourceApi_ | [**get_mapped_user**](pyvcell/core/api/vcell_client/docs/UsersResourceApi.md#get_mapped_user) | **GET** /api/v1/users/mappedUser | Get mapped VCell identity | -| _UsersResourceApi_ | [**get_me**](pyvcell/core/api/vcell_client/docs/UsersResourceApi.md#get_me) | **GET** /api/v1/users/me | Get current user | -| _UsersResourceApi_ | [**map_new_user**](pyvcell/core/api/vcell_client/docs/UsersResourceApi.md#map_new_user) | **POST** /api/v1/users/newUser | create vcell user | -| _UsersResourceApi_ | [**map_user**](pyvcell/core/api/vcell_client/docs/UsersResourceApi.md#map_user) | **POST** /api/v1/users/mapUser | map vcell user | -| _UsersResourceApi_ | [**process_magic_link**](pyvcell/core/api/vcell_client/docs/UsersResourceApi.md#process_magic_link) | **GET** /api/v1/users/processMagicLink | Process the magic link and map the user | -| _UsersResourceApi_ | [**request_recovery_email**](pyvcell/core/api/vcell_client/docs/UsersResourceApi.md#request_recovery_email) | **POST** /api/v1/users/requestRecoveryEmail | request a recovery email to link a VCell account. | -| _UsersResourceApi_ | [**unmap_user**](pyvcell/core/api/vcell_client/docs/UsersResourceApi.md#unmap_user) | **PUT** /api/v1/users/unmapUser/{userName} | remove vcell identity mapping | +All URIs are relative to *https://vcell.cam.uchc.edu* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*AdminResourceApi* | [**get_usage**](pyvcell/_internal/api/vcell_client/docs/AdminResourceApi.md#get_usage) | **GET** /api/v1/admin/usage | Get usage summary +*BioModelResourceApi* | [**delete_bio_model**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#delete_bio_model) | **DELETE** /api/v1/bioModel/{bioModelID} | Delete the BioModel from VCell's database. +*BioModelResourceApi* | [**get_bio_model**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#get_bio_model) | **GET** /api/v1/bioModel/{bioModelID} | Get BioModel. +*BioModelResourceApi* | [**get_bio_model_summaries**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#get_bio_model_summaries) | **GET** /api/v1/bioModel/summaries | Return BioModel summaries. +*BioModelResourceApi* | [**get_bio_model_summary**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#get_bio_model_summary) | **GET** /api/v1/bioModel/{bioModelID}/summary | All of the text based information about a BioModel (summary, version, publication status, etc...), but not the actual BioModel itself. +*BioModelResourceApi* | [**get_bio_model_vcml**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#get_bio_model_vcml) | **GET** /api/v1/bioModel/{bioModelID}/vcml_download | Get the BioModel in VCML format. +*BioModelResourceApi* | [**save_bio_model**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#save_bio_model) | **POST** /api/v1/bioModel | Save's the given BioModel. Optional parameters of name and simulations to update due to math changes. Returns saved BioModel as VCML. +*ExportResourceApi* | [**export_n5**](pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md#export_n5) | **POST** /api/v1/export/N5 | +*ExportResourceApi* | [**export_status**](pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md#export_status) | **GET** /api/v1/export/status | +*FieldDataResourceApi* | [**advanced_create**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#advanced_create) | **POST** /api/v1/fieldData/advancedCreate | Create Field Data with granular detail in one request.The following files are accepted: .tif and .zip. +*FieldDataResourceApi* | [**analyze_file**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#analyze_file) | **POST** /api/v1/fieldData/analyzeFile | Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and return field data. Color mapped images not supported (the colors in those images will be interpreted as separate channels). Filenames must be lowercase alphanumeric, and can contain underscores. +*FieldDataResourceApi* | [**copy_models_field_data**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#copy_models_field_data) | **POST** /api/v1/fieldData/copyModelsFieldData | Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. +*FieldDataResourceApi* | [**create_from_file**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#create_from_file) | **POST** /api/v1/fieldData/createFromFile | Submit a .zip or .tif file that converts into field data, with all defaults derived from the file submitted. +*FieldDataResourceApi* | [**create_from_simulation**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#create_from_simulation) | **POST** /api/v1/fieldData/createFromSimulation | Create new field data from existing simulation results. +*FieldDataResourceApi* | [**delete**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#delete) | **DELETE** /api/v1/fieldData/delete/{fieldDataID} | Delete the selected field data. +*FieldDataResourceApi* | [**get_all_ids**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#get_all_ids) | **GET** /api/v1/fieldData/IDs | Get all of the ids used to identify, and retrieve field data. +*FieldDataResourceApi* | [**get_shape_from_id**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#get_shape_from_id) | **GET** /api/v1/fieldData/shape/{fieldDataID} | Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. +*FieldDataResourceApi* | [**save**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#save) | **POST** /api/v1/fieldData/save | Take the generated field data, and save it to the server. User may adjust the analyzed file before uploading to edit defaults. +*GeometryResourceApi* | [**delete_geometry**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#delete_geometry) | **DELETE** /api/v1/geometry/{id} | +*GeometryResourceApi* | [**get_geometry_summaries**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#get_geometry_summaries) | **GET** /api/v1/geometry/summaries | +*GeometryResourceApi* | [**get_geometry_summary**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#get_geometry_summary) | **GET** /api/v1/geometry/summary/{id} | +*GeometryResourceApi* | [**get_geometry_vcml**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#get_geometry_vcml) | **GET** /api/v1/geometry/{id} | +*GeometryResourceApi* | [**save_geometry**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#save_geometry) | **POST** /api/v1/geometry | +*HelloWorldApi* | [**get_hello_world**](pyvcell/_internal/api/vcell_client/docs/HelloWorldApi.md#get_hello_world) | **GET** /api/v1/helloworld | Get hello world message. +*MathModelResourceApi* | [**delete_math_model**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#delete_math_model) | **DELETE** /api/v1/mathModel/{id} | +*MathModelResourceApi* | [**get_summaries**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#get_summaries) | **GET** /api/v1/mathModel/summaries | +*MathModelResourceApi* | [**get_summary**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#get_summary) | **GET** /api/v1/mathModel/summary/{id} | +*MathModelResourceApi* | [**get_vcml**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#get_vcml) | **GET** /api/v1/mathModel/{id} | +*MathModelResourceApi* | [**save_math_model**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#save_math_model) | **POST** /api/v1/mathModel | +*PublicationResourceApi* | [**create_publication**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#create_publication) | **POST** /api/v1/publications | Create publication +*PublicationResourceApi* | [**delete_publication**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#delete_publication) | **DELETE** /api/v1/publications/{id} | Delete publication +*PublicationResourceApi* | [**get_publication_by_id**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#get_publication_by_id) | **GET** /api/v1/publications/{id} | Get publication by ID +*PublicationResourceApi* | [**get_publications**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#get_publications) | **GET** /api/v1/publications | Get all publications +*PublicationResourceApi* | [**update_publication**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#update_publication) | **PUT** /api/v1/publications | Update publication +*SimulationResourceApi* | [**get_simulation_status**](pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md#get_simulation_status) | **GET** /api/v1/Simulation/{simID}/simulationStatus | Get the status of simulation running +*SimulationResourceApi* | [**start_simulation**](pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md#start_simulation) | **POST** /api/v1/Simulation/{simID}/startSimulation | Start a simulation. +*SimulationResourceApi* | [**stop_simulation**](pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md#stop_simulation) | **POST** /api/v1/Simulation/{simID}/stopSimulation | Stop a simulation. +*SolverResourceApi* | [**get_fv_solver_input_from_sbml**](pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md#get_fv_solver_input_from_sbml) | **POST** /api/v1/solver/getFVSolverInput | Retrieve finite volume input from SBML spatial model. +*SolverResourceApi* | [**get_fv_solver_input_from_vcml**](pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md#get_fv_solver_input_from_vcml) | **POST** /api/v1/solver/getFVSolverInputFromVCML | Retrieve finite volume input from SBML spatial model. +*UsersResourceApi* | [**forgot_legacy_password**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#forgot_legacy_password) | **POST** /api/v1/users/forgotLegacyPassword | The end user has forgotten the legacy password they used for VCell, so they will be emailed it. +*UsersResourceApi* | [**get_guest_legacy_api_token**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#get_guest_legacy_api_token) | **POST** /api/v1/users/guestBearerToken | Method to get legacy tokens for guest users +*UsersResourceApi* | [**get_legacy_api_token**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#get_legacy_api_token) | **POST** /api/v1/users/bearerToken | Get token for legacy API +*UsersResourceApi* | [**get_mapped_user**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#get_mapped_user) | **GET** /api/v1/users/mappedUser | Get mapped VCell identity +*UsersResourceApi* | [**get_me**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#get_me) | **GET** /api/v1/users/me | Get current user +*UsersResourceApi* | [**map_new_user**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#map_new_user) | **POST** /api/v1/users/newUser | create vcell user +*UsersResourceApi* | [**map_user**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#map_user) | **POST** /api/v1/users/mapUser | map vcell user +*UsersResourceApi* | [**process_magic_link**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#process_magic_link) | **GET** /api/v1/users/processMagicLink | Process the magic link and map the user +*UsersResourceApi* | [**request_recovery_email**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#request_recovery_email) | **POST** /api/v1/users/requestRecoveryEmail | request a recovery email to link a VCell account. +*UsersResourceApi* | [**unmap_user**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#unmap_user) | **PUT** /api/v1/users/unmapUser/{userName} | remove vcell identity mapping +*VCImageResourceApi* | [**delete_image_vcml**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#delete_image_vcml) | **DELETE** /api/v1/image/{id} | +*VCImageResourceApi* | [**get_image_summaries**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#get_image_summaries) | **GET** /api/v1/image/summaries | +*VCImageResourceApi* | [**get_image_summary**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#get_image_summary) | **GET** /api/v1/image/summary/{id} | +*VCImageResourceApi* | [**get_image_vcml**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#get_image_vcml) | **GET** /api/v1/image/{id} | +*VCImageResourceApi* | [**save_image_vcml**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#save_image_vcml) | **POST** /api/v1/image | + ## Documentation For Models -- [AccesTokenRepresentationRecord](pyvcell/core/api/vcell_client/docs/AccesTokenRepresentationRecord.md) -- [AnalyzedResultsFromFieldData](pyvcell/core/api/vcell_client/docs/AnalyzedResultsFromFieldData.md) -- [BatchSystemType](pyvcell/core/api/vcell_client/docs/BatchSystemType.md) -- [BioModel](pyvcell/core/api/vcell_client/docs/BioModel.md) -- [BiomodelRef](pyvcell/core/api/vcell_client/docs/BiomodelRef.md) -- [DataIdentifier](pyvcell/core/api/vcell_client/docs/DataIdentifier.md) -- [DetailedState](pyvcell/core/api/vcell_client/docs/DetailedState.md) -- [Domain](pyvcell/core/api/vcell_client/docs/Domain.md) -- [Extent](pyvcell/core/api/vcell_client/docs/Extent.md) -- [ExternalDataIdentifier](pyvcell/core/api/vcell_client/docs/ExternalDataIdentifier.md) -- [FieldDataReference](pyvcell/core/api/vcell_client/docs/FieldDataReference.md) -- [FieldDataSaveResults](pyvcell/core/api/vcell_client/docs/FieldDataSaveResults.md) -- [FieldDataShape](pyvcell/core/api/vcell_client/docs/FieldDataShape.md) -- [HelloWorldMessage](pyvcell/core/api/vcell_client/docs/HelloWorldMessage.md) -- [HtcJobID](pyvcell/core/api/vcell_client/docs/HtcJobID.md) -- [ISize](pyvcell/core/api/vcell_client/docs/ISize.md) -- [Identity](pyvcell/core/api/vcell_client/docs/Identity.md) -- [KeyValue](pyvcell/core/api/vcell_client/docs/KeyValue.md) -- [MathmodelRef](pyvcell/core/api/vcell_client/docs/MathmodelRef.md) -- [Origin](pyvcell/core/api/vcell_client/docs/Origin.md) -- [Publication](pyvcell/core/api/vcell_client/docs/Publication.md) -- [SchedulerStatus](pyvcell/core/api/vcell_client/docs/SchedulerStatus.md) -- [SimulationExecutionStatusRecord](pyvcell/core/api/vcell_client/docs/SimulationExecutionStatusRecord.md) -- [SimulationJobStatusRecord](pyvcell/core/api/vcell_client/docs/SimulationJobStatusRecord.md) -- [SimulationMessage](pyvcell/core/api/vcell_client/docs/SimulationMessage.md) -- [SimulationQueueEntryStatusRecord](pyvcell/core/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md) -- [SimulationQueueID](pyvcell/core/api/vcell_client/docs/SimulationQueueID.md) -- [SimulationStatusPersistentRecord](pyvcell/core/api/vcell_client/docs/SimulationStatusPersistentRecord.md) -- [Status](pyvcell/core/api/vcell_client/docs/Status.md) -- [StatusMessage](pyvcell/core/api/vcell_client/docs/StatusMessage.md) -- [User](pyvcell/core/api/vcell_client/docs/User.md) -- [UserIdentityJSONSafe](pyvcell/core/api/vcell_client/docs/UserIdentityJSONSafe.md) -- [UserLoginInfoForMapping](pyvcell/core/api/vcell_client/docs/UserLoginInfoForMapping.md) -- [UserRegistrationInfo](pyvcell/core/api/vcell_client/docs/UserRegistrationInfo.md) -- [VCSimulationIdentifier](pyvcell/core/api/vcell_client/docs/VCSimulationIdentifier.md) -- [VariableDomain](pyvcell/core/api/vcell_client/docs/VariableDomain.md) -- [VariableType](pyvcell/core/api/vcell_client/docs/VariableType.md) + - [AccesTokenRepresentationRecord](pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md) + - [AnalyticCurve](pyvcell/_internal/api/vcell_client/docs/AnalyticCurve.md) + - [AnnotatedFunctionDTO](pyvcell/_internal/api/vcell_client/docs/AnnotatedFunctionDTO.md) + - [ApplicationInfo](pyvcell/_internal/api/vcell_client/docs/ApplicationInfo.md) + - [BatchSystemType](pyvcell/_internal/api/vcell_client/docs/BatchSystemType.md) + - [BioModel](pyvcell/_internal/api/vcell_client/docs/BioModel.md) + - [BioModelChildSummary](pyvcell/_internal/api/vcell_client/docs/BioModelChildSummary.md) + - [BioModelSummary](pyvcell/_internal/api/vcell_client/docs/BioModelSummary.md) + - [BiomodelRef](pyvcell/_internal/api/vcell_client/docs/BiomodelRef.md) + - [CompositeCurve](pyvcell/_internal/api/vcell_client/docs/CompositeCurve.md) + - [ControlPointCurve](pyvcell/_internal/api/vcell_client/docs/ControlPointCurve.md) + - [Coordinate](pyvcell/_internal/api/vcell_client/docs/Coordinate.md) + - [Curve](pyvcell/_internal/api/vcell_client/docs/Curve.md) + - [CurveSelectionInfo](pyvcell/_internal/api/vcell_client/docs/CurveSelectionInfo.md) + - [DataIdentifier](pyvcell/_internal/api/vcell_client/docs/DataIdentifier.md) + - [DetailedState](pyvcell/_internal/api/vcell_client/docs/DetailedState.md) + - [Domain](pyvcell/_internal/api/vcell_client/docs/Domain.md) + - [ExportEvent](pyvcell/_internal/api/vcell_client/docs/ExportEvent.md) + - [ExportProgressType](pyvcell/_internal/api/vcell_client/docs/ExportProgressType.md) + - [ExportableDataType](pyvcell/_internal/api/vcell_client/docs/ExportableDataType.md) + - [Extent](pyvcell/_internal/api/vcell_client/docs/Extent.md) + - [ExternalDataIdentifier](pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md) + - [FieldData](pyvcell/_internal/api/vcell_client/docs/FieldData.md) + - [FieldDataReference](pyvcell/_internal/api/vcell_client/docs/FieldDataReference.md) + - [FieldDataSavedResults](pyvcell/_internal/api/vcell_client/docs/FieldDataSavedResults.md) + - [FieldDataShape](pyvcell/_internal/api/vcell_client/docs/FieldDataShape.md) + - [FunctionCategory](pyvcell/_internal/api/vcell_client/docs/FunctionCategory.md) + - [GIFImage](pyvcell/_internal/api/vcell_client/docs/GIFImage.md) + - [GeometryMode](pyvcell/_internal/api/vcell_client/docs/GeometryMode.md) + - [GeometrySpecDTO](pyvcell/_internal/api/vcell_client/docs/GeometrySpecDTO.md) + - [GeometrySummary](pyvcell/_internal/api/vcell_client/docs/GeometrySummary.md) + - [GroupAccess](pyvcell/_internal/api/vcell_client/docs/GroupAccess.md) + - [GroupAccessAll](pyvcell/_internal/api/vcell_client/docs/GroupAccessAll.md) + - [GroupAccessNone](pyvcell/_internal/api/vcell_client/docs/GroupAccessNone.md) + - [GroupAccessSome](pyvcell/_internal/api/vcell_client/docs/GroupAccessSome.md) + - [HelloWorldMessage](pyvcell/_internal/api/vcell_client/docs/HelloWorldMessage.md) + - [HtcJobID](pyvcell/_internal/api/vcell_client/docs/HtcJobID.md) + - [HumanReadableExportData](pyvcell/_internal/api/vcell_client/docs/HumanReadableExportData.md) + - [ISize](pyvcell/_internal/api/vcell_client/docs/ISize.md) + - [Identity](pyvcell/_internal/api/vcell_client/docs/Identity.md) + - [MathModelChildSummary](pyvcell/_internal/api/vcell_client/docs/MathModelChildSummary.md) + - [MathModelSummary](pyvcell/_internal/api/vcell_client/docs/MathModelSummary.md) + - [MathType](pyvcell/_internal/api/vcell_client/docs/MathType.md) + - [MathmodelRef](pyvcell/_internal/api/vcell_client/docs/MathmodelRef.md) + - [ModelType](pyvcell/_internal/api/vcell_client/docs/ModelType.md) + - [N5ExportRequest](pyvcell/_internal/api/vcell_client/docs/N5ExportRequest.md) + - [Origin](pyvcell/_internal/api/vcell_client/docs/Origin.md) + - [Publication](pyvcell/_internal/api/vcell_client/docs/Publication.md) + - [PublicationInfo](pyvcell/_internal/api/vcell_client/docs/PublicationInfo.md) + - [SPECIALCLAIM](pyvcell/_internal/api/vcell_client/docs/SPECIALCLAIM.md) + - [SampledCurve](pyvcell/_internal/api/vcell_client/docs/SampledCurve.md) + - [SchedulerStatus](pyvcell/_internal/api/vcell_client/docs/SchedulerStatus.md) + - [SimulationExecutionStatusRecord](pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md) + - [SimulationJobStatusRecord](pyvcell/_internal/api/vcell_client/docs/SimulationJobStatusRecord.md) + - [SimulationMessage](pyvcell/_internal/api/vcell_client/docs/SimulationMessage.md) + - [SimulationQueueEntryStatusRecord](pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md) + - [SimulationQueueID](pyvcell/_internal/api/vcell_client/docs/SimulationQueueID.md) + - [SimulationStatusPersistentRecord](pyvcell/_internal/api/vcell_client/docs/SimulationStatusPersistentRecord.md) + - [SourceModel](pyvcell/_internal/api/vcell_client/docs/SourceModel.md) + - [SpatialSelection](pyvcell/_internal/api/vcell_client/docs/SpatialSelection.md) + - [SpatialSelectionContour](pyvcell/_internal/api/vcell_client/docs/SpatialSelectionContour.md) + - [SpatialSelectionMembrane](pyvcell/_internal/api/vcell_client/docs/SpatialSelectionMembrane.md) + - [SpatialSelectionVolume](pyvcell/_internal/api/vcell_client/docs/SpatialSelectionVolume.md) + - [Spline](pyvcell/_internal/api/vcell_client/docs/Spline.md) + - [StandardExportInfo](pyvcell/_internal/api/vcell_client/docs/StandardExportInfo.md) + - [Status](pyvcell/_internal/api/vcell_client/docs/Status.md) + - [StatusMessage](pyvcell/_internal/api/vcell_client/docs/StatusMessage.md) + - [TimeMode](pyvcell/_internal/api/vcell_client/docs/TimeMode.md) + - [TimeSpecs](pyvcell/_internal/api/vcell_client/docs/TimeSpecs.md) + - [User](pyvcell/_internal/api/vcell_client/docs/User.md) + - [UserIdentityJSONSafe](pyvcell/_internal/api/vcell_client/docs/UserIdentityJSONSafe.md) + - [UserLoginInfoForMapping](pyvcell/_internal/api/vcell_client/docs/UserLoginInfoForMapping.md) + - [UserRegistrationInfo](pyvcell/_internal/api/vcell_client/docs/UserRegistrationInfo.md) + - [VCDocumentType](pyvcell/_internal/api/vcell_client/docs/VCDocumentType.md) + - [VCImageSummary](pyvcell/_internal/api/vcell_client/docs/VCImageSummary.md) + - [VCSimulationIdentifier](pyvcell/_internal/api/vcell_client/docs/VCSimulationIdentifier.md) + - [VCellHTTPError](pyvcell/_internal/api/vcell_client/docs/VCellHTTPError.md) + - [VCellSite](pyvcell/_internal/api/vcell_client/docs/VCellSite.md) + - [VCellSoftwareVersion](pyvcell/_internal/api/vcell_client/docs/VCellSoftwareVersion.md) + - [VariableDomain](pyvcell/_internal/api/vcell_client/docs/VariableDomain.md) + - [VariableMode](pyvcell/_internal/api/vcell_client/docs/VariableMode.md) + - [VariableSpecs](pyvcell/_internal/api/vcell_client/docs/VariableSpecs.md) + - [VariableType](pyvcell/_internal/api/vcell_client/docs/VariableType.md) + - [Version](pyvcell/_internal/api/vcell_client/docs/Version.md) + - [VersionFlag](pyvcell/_internal/api/vcell_client/docs/VersionFlag.md) - + ## Documentation For Authorization + Authentication schemes defined for the API: - ### openId + + ## Author vcell_support@uchc.com + + diff --git a/scripts/openapi.yaml b/scripts/openapi.yaml index 202540f..0c7df40 100644 --- a/scripts/openapi.yaml +++ b/scripts/openapi.yaml @@ -6,61 +6,75 @@ info: termsOfService: Your terms of service here contact: name: VCell API Support - url: http://exampleurl.com/contact + url: https://vcell.org email: vcell_support@uchc.com license: name: MIT url: http://opensource.org/licenses/MIT version: 1.0.1 servers: - - url: https://vcell-dev.cam.uchc.edu +- url: https://vcell.cam.uchc.edu paths: /api/v1/Simulation/{simID}/simulationStatus: get: tags: - - Simulation Resource + - Simulation Resource summary: Get the status of simulation running operationId: getSimulationStatus parameters: - - name: simID - in: path - required: true - schema: - type: string - - name: bioModelID - in: query - schema: - type: string - - name: mathModelID - in: query - schema: - type: string + - name: simID + in: path + required: true + schema: + type: string + - name: bioModelID + in: query + schema: + type: string + - name: mathModelID + in: query + schema: + type: string responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/SimulationStatusPersistentRecord" + $ref: '#/components/schemas/SimulationStatusPersistentRecord' "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user + - openId: + - user /api/v1/Simulation/{simID}/startSimulation: post: tags: - - Simulation Resource + - Simulation Resource summary: Start a simulation. operationId: startSimulation parameters: - - name: simID - in: path - required: true - schema: - type: string + - name: simID + in: path + required: true + schema: + type: string responses: "200": description: OK @@ -69,26 +83,40 @@ paths: schema: type: array items: - $ref: "#/components/schemas/StatusMessage" + $ref: '#/components/schemas/StatusMessage' "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user + - openId: + - user /api/v1/Simulation/{simID}/stopSimulation: post: tags: - - Simulation Resource + - Simulation Resource summary: Stop a simulation. operationId: stopSimulation parameters: - - name: simID - in: path - required: true - schema: - type: string + - name: simID + in: path + required: true + schema: + type: string responses: "200": description: OK @@ -97,18 +125,32 @@ paths: schema: type: array items: - $ref: "#/components/schemas/StatusMessage" + $ref: '#/components/schemas/StatusMessage' "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user + - openId: + - user /api/v1/admin/usage: get: tags: - - Admin Resource + - Admin Resource summary: Get usage summary operationId: getUsage responses: @@ -120,223 +162,350 @@ paths: format: binary type: string "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user - /api/v1/bioModel/upload_bioModel: + - openId: + - user + /api/v1/bioModel: post: tags: - - Bio Model Resource - summary: Upload the BioModel to VCell database. Returns BioModel ID. - operationId: uploadBioModel + - Bio Model Resource + summary: Save's the given BioModel. Optional parameters of name and simulations + to update due to math changes. Returns saved BioModel as VCML. + operationId: saveBioModel + parameters: + - name: newName + in: query + description: Name to save new BioModel under. Leave blank if re-saving existing + BioModel. + required: false + schema: + type: string + allowEmptyValue: true + - name: simsRequiringUpdates + in: query + description: The name of simulations that will be prepared for future execution. + required: false + schema: + type: array + items: + type: string + allowEmptyValue: true requestBody: + description: BioModelVCML which will be saved. content: - text/xml: + application/xml: schema: type: string + required: true responses: "200": description: OK content: - text/plain: + application/xml: schema: type: string "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed + "422": + description: Unprocessable content submitted + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user + - openId: + - user + /api/v1/bioModel/summaries: + get: + tags: + - Bio Model Resource + summary: Return BioModel summaries. + operationId: getBioModelSummaries + parameters: + - name: includePublicAndShared + in: query + description: Includes BioModel summaries that are public or shared with requester. + Default is true. + required: false + schema: + type: boolean + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BioModelSummary' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' /api/v1/bioModel/{bioModelID}: get: tags: - - Bio Model Resource - summary: Get BioModel information in JSON format by ID. - operationId: getBiomodelById + - Bio Model Resource + summary: Get BioModel. + operationId: getBioModel parameters: - - name: bioModelID - in: path - required: true - schema: - type: string + - name: bioModelID + in: path + required: true + schema: + type: string responses: "200": - description: return BioModel information in JSON format + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/BioModel' + "403": + description: Not Allowed content: application/json: schema: - $ref: "#/components/schemas/BioModel" + $ref: '#/components/schemas/VCellHTTPError' "404": - description: BioModel not found + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' delete: tags: - - Bio Model Resource + - Bio Model Resource summary: Delete the BioModel from VCell's database. operationId: deleteBioModel parameters: - - name: bioModelID - in: path - required: true - schema: - type: string + - name: bioModelID + in: path + required: true + schema: + type: string responses: "204": description: No Content - /api/v1/fieldData/IDs: + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + /api/v1/bioModel/{bioModelID}/summary: get: tags: - - Field Data Resource - summary: "Get all of the ids used to identify, and retrieve field data." - operationId: getAllFieldDataIDs + - Bio Model Resource + summary: "All of the text based information about a BioModel (summary, version,\ + \ publication status, etc...), but not the actual BioModel itself." + operationId: getBioModelSummary + parameters: + - name: bioModelID + in: path + required: true + schema: + type: string responses: "200": description: OK content: application/json: schema: - type: array - items: - $ref: "#/components/schemas/FieldDataReference" - "401": - description: Not Authorized + $ref: '#/components/schemas/BioModelSummary' "403": description: Not Allowed - security: - - openId: - - user - /api/v1/fieldData/analyzeFieldDataFile: - post: + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + /api/v1/bioModel/{bioModelID}/vcml_download: + get: tags: - - Field Data Resource - summary: - "Analyze the field data from the uploaded file. Filenames must be lowercase\ - \ alphanumeric, and can contain underscores." - operationId: analyzeFieldDataFile - requestBody: - content: - multipart/form-data: - schema: - type: object - properties: - file: - format: binary - type: string - fileName: - type: string + - Bio Model Resource + summary: Get the BioModel in VCML format. + operationId: getBioModelVCML + parameters: + - name: bioModelID + in: path + required: true + schema: + type: string responses: "200": description: OK content: - application/json: + text/xml: schema: - $ref: "#/components/schemas/AnalyzedResultsFromFieldData" - "401": - description: Not Authorized + type: string "403": description: Not Allowed - security: - - openId: - - user - /api/v1/fieldData/createFieldDataFromAnalyzedFile: + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "404": + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + /api/v1/export/N5: post: tags: - - Field Data Resource - summary: - "Take the analyzed results of the field data, modify it to your liking,\ - \ then save it on the server." - operationId: createFieldDataFromAnalyzedFile + - Export Resource + description: "Create an N5 (ImageJ compatible) export. The request must contain\ + \ the standard export information, exportable data type, dataset name, and\ + \ sub-volume specifications." + operationId: exportN5 requestBody: content: application/json: schema: - $ref: "#/components/schemas/AnalyzedResultsFromFieldData" + $ref: '#/components/schemas/N5ExportRequest' responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/FieldDataSaveResults" - "401": - description: Not Authorized - "403": - description: Not Allowed - security: - - openId: - - user - /api/v1/fieldData/delete/{fieldDataID}: - delete: - tags: - - Field Data Resource - summary: Delete the selected field data. - operationId: deleteFieldData - parameters: - - name: fieldDataID - in: path - required: true - schema: - type: string - responses: - "204": - description: No Content + format: int64 + type: integer + "400": + description: Bad Request. + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed + "422": + description: Unprocessable content submitted + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user - /api/v1/fieldData/fieldDataShape/{fieldDataID}: + - openId: + - user + /api/v1/export/status: get: tags: - - Field Data Resource - summary: - "Get the shape of the field data. That is it's size, origin, extent,\ - \ and data identifiers." - operationId: getFieldDataShapeFromID + - Export Resource + description: Get the status of your export jobs past the timestamp (Unix epoch + in seconds). + operationId: exportStatus parameters: - - name: fieldDataID - in: path - required: true - schema: - type: string + - name: timestamp + in: query + schema: + format: int64 + type: integer responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/FieldDataShape" + type: array + items: + $ref: '#/components/schemas/ExportEvent' "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed - security: - - openId: - - user - /api/v1/helloworld: - get: - tags: - - Hello World - summary: Get hello world message. - operationId: getHelloWorld - responses: - "200": - description: OK + "500": + description: Data Access Exception content: application/json: schema: - $ref: "#/components/schemas/HelloWorldMessage" - /api/v1/publications: + $ref: '#/components/schemas/VCellHTTPError' + security: + - openId: + - user + /api/v1/fieldData/IDs: get: tags: - - Publication Resource - summary: Get all publications - operationId: getPublications + - Field Data Resource + summary: "Get all of the ids used to identify, and retrieve field data." + operationId: getAllIDs responses: "200": description: OK @@ -345,102 +514,1200 @@ paths: schema: type: array items: - $ref: "#/components/schemas/Publication" - put: - tags: - - Publication Resource - summary: Update publication - operationId: updatePublication - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/Publication" - responses: - "200": - description: OK + $ref: '#/components/schemas/FieldDataReference' + "401": + description: Not Authenticated content: application/json: schema: - $ref: "#/components/schemas/Publication" - "401": - description: Not Authorized + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user + - openId: + - user + /api/v1/fieldData/advancedCreate: post: tags: - - Publication Resource - summary: Create publication - operationId: createPublication + - Field Data Resource + summary: "Create Field Data with granular detail in one request.The following\ + \ files are accepted: .tif and .zip." + operationId: advancedCreate requestBody: content: - application/json: + multipart/form-data: schema: - $ref: "#/components/schemas/Publication" + type: object + properties: + file: + format: binary + type: string + fileName: + type: string + extent: + $ref: '#/components/schemas/Extent' + iSize: + $ref: '#/components/schemas/ISize' + channelNames: + type: array + items: + type: string + times: + type: array + items: + format: double + type: number + annotation: + type: string + origin: + $ref: '#/components/schemas/Origin' + encoding: + extent: + contentType: application/json + annotation: + contentType: text/plain + fileName: + contentType: text/plain + times: + contentType: text/plain + file: + contentType: application/octet-stream + iSize: + contentType: application/json + channelNames: + contentType: text/plain + origin: + contentType: application/json responses: "200": description: OK content: application/json: schema: - format: int64 - type: integer + $ref: '#/components/schemas/FieldDataSavedResults' "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed + "422": + description: Unprocessable content submitted + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user - /api/v1/publications/{id}: + - openId: + - user + /api/v1/fieldData/analyzeFile: + post: + tags: + - Field Data Resource + summary: "Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and\ + \ return field data. Color mapped images not supported (the colors in those\ + \ images will be interpreted as separate channels). Filenames must be lowercase\ + \ alphanumeric, and can contain underscores." + operationId: analyzeFile + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + file: + format: binary + type: string + fileName: + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/FieldData' + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + "422": + description: Unprocessable content submitted + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + security: + - openId: + - user + /api/v1/fieldData/copyModelsFieldData: + post: + tags: + - Field Data Resource + summary: "Copy all existing field data from a BioModel/MathModel that you have\ + \ access to, but don't own." + operationId: copyModelsFieldData + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SourceModel' + responses: + "200": + description: OK + content: + application/json: + schema: + type: object + additionalProperties: + $ref: '#/components/schemas/ExternalDataIdentifier' + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "422": + description: Unprocessable content submitted + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + security: + - openId: + - user + /api/v1/fieldData/createFromFile: + post: + tags: + - Field Data Resource + summary: "Submit a .zip or .tif file that converts into field data, with all\ + \ defaults derived from the file submitted." + operationId: createFromFile + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + file: + format: binary + type: string + fieldDataName: + type: string + encoding: + file: + contentType: application/octet-stream + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/FieldDataSavedResults' + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + "422": + description: Unprocessable content submitted + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + security: + - openId: + - user + /api/v1/fieldData/createFromSimulation: + post: + tags: + - Field Data Resource + summary: Create new field data from existing simulation results. + operationId: createFromSimulation + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + properties: + simKeyReference: + type: string + jobIndex: + format: int32 + type: integer + newFieldDataName: + type: string + responses: + "201": + description: Created + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + security: + - openId: + - user + /api/v1/fieldData/delete/{fieldDataID}: + delete: + tags: + - Field Data Resource + summary: Delete the selected field data. + operationId: delete + parameters: + - name: fieldDataID + in: path + required: true + schema: + type: string + responses: + "204": + description: No Content + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + security: + - openId: + - user + /api/v1/fieldData/save: + post: + tags: + - Field Data Resource + summary: "Take the generated field data, and save it to the server. User may\ + \ adjust the analyzed file before uploading to edit defaults." + operationId: save + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FieldData' + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/FieldDataSavedResults' + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + "422": + description: Unprocessable content submitted + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + security: + - openId: + - user + /api/v1/fieldData/shape/{fieldDataID}: + get: + tags: + - Field Data Resource + summary: "Get the shape of the field data. That is it's size, origin, extent,\ + \ times, and data identifiers." + operationId: getShapeFromID + parameters: + - name: fieldDataID + in: path + required: true + schema: + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/FieldDataShape' + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "404": + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + security: + - openId: + - user + /api/v1/geometry: + post: + tags: + - Geometry Resource + description: Save's VCML with as the root element. + operationId: saveGeometry + parameters: + - name: newName + in: query + description: Name to save new Geometry under. Leave blank if re-saving existing + Geometry. + required: false + schema: + type: string + requestBody: + content: + application/xml: + schema: + type: string + required: true + responses: + "200": + description: OK + content: + application/xml: + schema: + type: string + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + "422": + description: Unprocessable content submitted + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + security: + - openId: + - user + /api/v1/geometry/summaries: + get: + tags: + - Geometry Resource + description: Return Geometry summaries. + operationId: getGeometrySummaries + parameters: + - name: includePublicAndShared + in: query + description: Include Geometry summaries that are public and shared with the + requester. Default is true. + required: false + schema: + type: boolean + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/GeometrySummary' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + /api/v1/geometry/summary/{id}: + get: + tags: + - Geometry Resource + description: "All of the text based information about a Geometry (dimensions,\ + \ extent, origin, etc...), but not the actual Geometry itself." + operationId: getGeometrySummary + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/GeometrySummary' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "404": + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + /api/v1/geometry/{id}: + get: + tags: + - Geometry Resource + description: Returns as root element in VCML format. + operationId: getGeometryVCML + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + "200": + description: OK + content: + application/xml: + schema: + type: string + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "404": + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + delete: + tags: + - Geometry Resource + description: Remove specific Geometry. + operationId: deleteGeometry + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + "204": + description: No Content + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "404": + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + /api/v1/helloworld: + get: + tags: + - Hello World + summary: Get hello world message. + operationId: getHelloWorld + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/HelloWorldMessage' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + /api/v1/image: + post: + tags: + - VC Image Resource + description: Save the VCML representation of an image. + operationId: saveImageVCML + parameters: + - name: name + in: query + description: Name to save new ImageVCML under. Leave blank if re-saving existing + ImageVCML. + required: false + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: true + responses: + "200": + description: OK + content: + text/plain: + schema: + type: string + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "422": + description: Unprocessable content submitted + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + /api/v1/image/summaries: + get: + tags: + - VC Image Resource + description: Return Image summaries. + operationId: getImageSummaries + parameters: + - name: includePublicAndShared + in: query + description: Include Image summaries that are public and shared with the requester. + Default is true. + required: false + schema: + type: boolean + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/VCImageSummary' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + /api/v1/image/summary/{id}: + get: + tags: + - VC Image Resource + description: "All of the miscellaneous information about an Image (Extent, ISize,\ + \ preview, etc...), but not the actual Image itself." + operationId: getImageSummary + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/VCImageSummary' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "404": + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + /api/v1/image/{id}: + get: + tags: + - VC Image Resource + description: Get specific image VCML. + operationId: getImageVCML + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + "200": + description: OK + content: + text/plain: + schema: + type: string + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "404": + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "422": + description: Unprocessable content submitted + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + delete: + tags: + - VC Image Resource + description: Remove specific image VCML. + operationId: deleteImageVCML + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + "204": + description: No Content + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "404": + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + /api/v1/mathModel: + post: + tags: + - Math Model Resource + operationId: saveMathModel + parameters: + - name: newName + in: query + description: Name to save new MathModel under. Leave blank if re-saving existing + MathModel. + required: false + schema: + type: string + - name: simNames + in: query + description: The name of simulations that will be prepared for future execution. + required: false + schema: + type: array + items: + type: string + requestBody: + content: + application/xml: + schema: + type: string + required: true + responses: + "200": + description: OK + content: + application/xml: + schema: + type: string + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + "422": + description: Unprocessable content submitted + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + security: + - openId: + - user + /api/v1/mathModel/summaries: + get: + tags: + - Math Model Resource + description: Return MathModel summaries. + operationId: getSummaries + parameters: + - name: includePublicAndShared + in: query + description: Include MathModel summaries that are public and shared with the + requester. Default is true. + required: false + schema: + type: boolean + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/MathModelSummary' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + /api/v1/mathModel/summary/{id}: + get: + tags: + - Math Model Resource + description: "All of the text based information about a MathModel (summary,\ + \ version, publication status, etc...), but not the actual MathModel itself." + operationId: getSummary + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/MathModelSummary' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "404": + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + /api/v1/mathModel/{id}: + get: + tags: + - Math Model Resource + description: Returns MathModel in VCML format. + operationId: getVCML + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + "200": + description: OK + content: + application/xml: + schema: + type: string + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "404": + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + delete: + tags: + - Math Model Resource + description: Remove specific Math Model. + operationId: deleteMathModel + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + "204": + description: No Content + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "404": + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + /api/v1/publications: + get: + tags: + - Publication Resource + summary: Get all publications + operationId: getPublications + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Publication' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + put: + tags: + - Publication Resource + summary: Update publication + operationId: updatePublication + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Publication' + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Publication' + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + security: + - openId: + - user + post: + tags: + - Publication Resource + summary: Create publication + operationId: createPublication + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Publication' + responses: + "200": + description: OK + content: + application/json: + schema: + format: int64 + type: integer + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + security: + - openId: + - user + /api/v1/publications/{id}: get: tags: - - Publication Resource + - Publication Resource summary: Get publication by ID operationId: getPublicationById parameters: - - name: id - in: path - required: true - schema: - format: int64 - type: integer + - name: id + in: path + required: true + schema: + format: int64 + type: integer responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/Publication" + $ref: '#/components/schemas/Publication' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' delete: tags: - - Publication Resource + - Publication Resource summary: Delete publication operationId: deletePublication parameters: - - name: id - in: path - required: true - schema: - format: int64 - type: integer + - name: id + in: path + required: true + schema: + format: int64 + type: integer responses: "204": description: No Content "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "404": + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user + - openId: + - user /api/v1/solver/getFVSolverInput: post: tags: - - Solver Resource + - Solver Resource summary: Retrieve finite volume input from SBML spatial model. operationId: getFVSolverInputFromSBML requestBody: @@ -468,10 +1735,16 @@ paths: schema: format: binary type: string + "422": + description: Unprocessable content submitted + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' /api/v1/solver/getFVSolverInputFromVCML: post: tags: - - Solver Resource + - Solver Resource summary: Retrieve finite volume input from SBML spatial model. operationId: getFVSolverInputFromVCML requestBody: @@ -493,10 +1766,16 @@ paths: schema: format: binary type: string + "422": + description: Unprocessable content submitted + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' /api/v1/users/bearerToken: post: tags: - - Users Resource + - Users Resource summary: Get token for legacy API operationId: getLegacyApiToken responses: @@ -505,27 +1784,36 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/AccesTokenRepresentationRecord" + $ref: '#/components/schemas/AccesTokenRepresentationRecord' "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user + - openId: + - user /api/v1/users/forgotLegacyPassword: post: tags: - - Users Resource - summary: - "The end user has forgotten the legacy password they used for VCell,\ + - Users Resource + summary: "The end user has forgotten the legacy password they used for VCell,\ \ so they will be emailed it." operationId: forgotLegacyPassword parameters: - - name: userID - in: query - schema: - type: string + - name: userID + in: query + schema: + type: string responses: "200": description: Legacy password sent in email @@ -536,12 +1824,12 @@ paths: "500": description: Internal Error security: - - openId: - - user + - openId: + - user /api/v1/users/guestBearerToken: post: tags: - - Users Resource + - Users Resource summary: Method to get legacy tokens for guest users operationId: getGuestLegacyApiToken responses: @@ -550,18 +1838,24 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/AccesTokenRepresentationRecord" + $ref: '#/components/schemas/AccesTokenRepresentationRecord' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' /api/v1/users/mapUser: post: tags: - - Users Resource + - Users Resource summary: map vcell user operationId: mapUser requestBody: content: application/json: schema: - $ref: "#/components/schemas/UserLoginInfoForMapping" + $ref: '#/components/schemas/UserLoginInfoForMapping' responses: "200": description: OK @@ -570,16 +1864,30 @@ paths: schema: type: boolean "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user + - openId: + - user /api/v1/users/mappedUser: get: tags: - - Users Resource + - Users Resource summary: Get mapped VCell identity operationId: getMappedUser responses: @@ -588,18 +1896,34 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/UserIdentityJSONSafe" + $ref: '#/components/schemas/UserIdentityJSONSafe' "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed + "409": + description: Conflict with server state. + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user + - openId: + - user /api/v1/users/me: get: tags: - - Users Resource + - Users Resource summary: Get current user operationId: getMe responses: @@ -608,99 +1932,151 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/Identity" + $ref: '#/components/schemas/Identity' /api/v1/users/newUser: post: tags: - - Users Resource + - Users Resource summary: create vcell user operationId: mapNewUser requestBody: content: application/json: schema: - $ref: "#/components/schemas/UserRegistrationInfo" + $ref: '#/components/schemas/UserRegistrationInfo' responses: "200": description: "Successful, returning the identity" "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed "409": description: "VCell Identity not mapped, userid already exists" + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user + - openId: + - user /api/v1/users/processMagicLink: get: tags: - - Users Resource + - Users Resource summary: Process the magic link and map the user operationId: processMagicLink parameters: - - name: magic - in: query - schema: - type: string + - name: magic + in: query + schema: + type: string responses: "200": description: User mapped successfully "400": description: Invalid or expired magic link + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' /api/v1/users/requestRecoveryEmail: post: tags: - - Users Resource + - Users Resource summary: request a recovery email to link a VCell account. operationId: requestRecoveryEmail parameters: - - name: email - in: query - schema: - type: string - - name: userID - in: query - schema: - type: string + - name: email + in: query + schema: + type: string + - name: userID + in: query + schema: + type: string responses: "200": description: magic link sent in email if appropriate "400": description: unable to process request "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' "403": description: Not Allowed + "404": + description: Not found + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user + - openId: + - user /api/v1/users/unmapUser/{userName}: put: tags: - - Users Resource + - Users Resource summary: remove vcell identity mapping operationId: unmapUser parameters: - - name: userName - in: path - required: true - schema: - type: string + - name: userName + in: path + required: true + schema: + type: string responses: "200": description: OK content: application/json: schema: - type: boolean - "401": - description: Not Authorized - "403": - description: Not Allowed + type: boolean + "401": + description: Not Authenticated + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "403": + description: Not Allowed + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: '#/components/schemas/VCellHTTPError' security: - - openId: - - user + - openId: + - user components: schemas: AccesTokenRepresentationRecord: @@ -718,43 +2094,68 @@ components: type: string userKey: type: string - AnalyzedResultsFromFieldData: + AnalyticCurve: + required: + - type type: object + allOf: + - $ref: '#/components/schemas/Curve' properties: - shortSpecData: - type: array - items: - type: array - items: - type: array - items: - type: integer - varNames: - type: array - items: - type: string - times: - type: array - items: - format: double - type: number - origin: - $ref: "#/components/schemas/Origin" - extent: - $ref: "#/components/schemas/Extent" - isize: - $ref: "#/components/schemas/ISize" - annotation: + type: + default: AnalyticCurve type: string - name: + expX: + $ref: '#/components/schemas/Expression' + expY: + $ref: '#/components/schemas/Expression' + expZ: + $ref: '#/components/schemas/Expression' + offset: + $ref: '#/components/schemas/Coordinate' + analyticOffset: + $ref: '#/components/schemas/Coordinate' + defaultNumSamples: + format: int32 + type: integer + segmentCount: + format: int32 + type: integer + valid: + type: boolean + AnnotatedFunctionDTO: + type: object + properties: + functionName: + type: string + functionExpression: type: string + error: + type: string + domain: + $ref: '#/components/schemas/Domain' + functionType: + $ref: '#/components/schemas/VariableType' + category: + $ref: '#/components/schemas/FunctionCategory' Application: type: object + ApplicationInfo: + type: object + properties: + name: + type: string + type: + $ref: '#/components/schemas/MathType' + dimensions: + format: int32 + type: integer + geometryName: + type: string BatchSystemType: enum: - - PBS - - SGE - - SLURM + - PBS + - SGE + - SLURM type: string BioModel: type: object @@ -786,11 +2187,81 @@ components: simulationKeyList: type: array items: - $ref: "#/components/schemas/KeyValue" + $ref: '#/components/schemas/KeyValue' applications: type: array items: - $ref: "#/components/schemas/Application" + $ref: '#/components/schemas/Application' + BioModelChildSummary: + type: object + properties: + scNames: + type: array + items: + type: string + scAnnots: + type: array + items: + type: string + geoNames: + type: array + items: + type: string + geoDims: + type: array + items: + format: int32 + type: integer + appTypes: + type: array + items: + $ref: '#/components/schemas/MathType' + simNames: + type: array + items: + type: array + items: + type: string + simAnnots: + type: array + items: + type: array + items: + type: string + geometryDimensions: + type: array + items: + format: int32 + type: integer + geometryNames: + type: array + items: + type: string + simulationContextAnnotations: + type: array + items: + type: string + simulationContextNames: + type: array + items: + type: string + applicationInfo: + type: array + items: + $ref: '#/components/schemas/ApplicationInfo' + BioModelSummary: + type: object + properties: + version: + $ref: '#/components/schemas/Version' + summary: + $ref: '#/components/schemas/BioModelChildSummary' + publicationInformation: + type: array + items: + $ref: '#/components/schemas/PublicationInfo' + vCellSoftwareVersion: + $ref: '#/components/schemas/VCellSoftwareVersion' BiomodelRef: type: object properties: @@ -807,6 +2278,145 @@ components: versionFlag: format: int32 type: integer + CompositeCurve: + required: + - type + type: object + allOf: + - $ref: '#/components/schemas/Curve' + properties: + type: + default: CompositeCurve + type: string + fieldCurves: + type: array + items: {} + curveCount: + format: int32 + type: integer + defaultNumSamples: + format: int32 + type: integer + segmentCount: + format: int32 + type: integer + valid: + type: boolean + ControlPointCurve: + required: + - type + type: object + allOf: + - $ref: '#/components/schemas/Curve' + properties: + type: + default: ControlPointCurve + type: string + controlPoints: + type: array + items: + $ref: '#/components/schemas/Coordinate' + controlPointCount: + format: int32 + type: integer + controlPointsVector: + type: array + items: + $ref: '#/components/schemas/Coordinate' + maxControlPoints: + format: int32 + type: integer + minControlPoints: + format: int32 + type: integer + controlPointAddable: + type: boolean + valid: + type: boolean + discriminator: + propertyName: type + mapping: + Spline: '#/components/schemas/Spline' + SampledCurve: '#/components/schemas/SampledCurve' + Coordinate: + type: object + properties: + x: + format: double + type: number + "y": + format: double + type: number + z: + format: double + type: number + Curve: + required: + - type + type: object + properties: + bClosed: + type: boolean + description: + type: string + type: + type: string + beginningCoordinate: + $ref: '#/components/schemas/Coordinate' + defaultNumSamples: + format: int32 + type: integer + endingCoordinate: + $ref: '#/components/schemas/Coordinate' + numSamplePoints: + format: int32 + type: integer + segmentCount: + format: int32 + type: integer + spatialLength: + format: double + type: number + closed: + type: boolean + valid: + type: boolean + discriminator: + propertyName: type + mapping: + AnalyticCurve: '#/components/schemas/AnalyticCurve' + CompositeCurve: '#/components/schemas/CompositeCurve' + ControlPointCurve: '#/components/schemas/ControlPointCurve' + CurveSelectionInfo: + type: object + properties: + fieldCurve: + $ref: '#/components/schemas/Curve' + fieldType: + format: int32 + type: integer + fieldControlPoint: + format: int32 + type: integer + fieldSegment: + format: int32 + type: integer + fieldU: + format: double + type: number + fieldUExtended: + format: double + type: number + fieldControlPointExtended: + format: int32 + type: integer + fieldSegmentExtended: + format: int32 + type: integer + fieldDirectionNegative: + type: boolean + crossing: + type: boolean DataIdentifier: type: object properties: @@ -815,9 +2425,9 @@ components: displayName: type: string variableType: - $ref: "#/components/schemas/VariableType" + $ref: '#/components/schemas/VariableType' domain: - $ref: "#/components/schemas/Domain" + $ref: '#/components/schemas/Domain' bFunction: type: boolean function: @@ -830,62 +2440,101 @@ components: example: 2022-03-10 DetailedState: enum: - - UNKNOWN - - DATAMOVEREVENT_MOVED - - WORKEREVENT_WORKERALIVE - - JOB_WAITING - - JOB_QUEUED - - JOB_QUEUED_RETRY - - JOB_DISPATCHED - - JOB_ACCEPTED - - SOLVER_READY - - SOLVER_STARTING_INIT - - SOLVEREVENT_STARTING_PROC_GEOM - - SOLVEREVENT_STARTING_RESAMPLE_FD - - SOLVER_RUNNING_INIT - - SOLVER_RUNNING_INIT_INPUT_FILE - - SOLVER_RUNNING_INIT_CODEGEN - - SOLVER_RUNNING_INIT_COMPILING - - SOLVER_RUNNING_INIT_COMPILECMD - - SOLVER_RUNNING_INIT_COMPILE_OK - - SOLVER_RUNNING_INIT_LINKING - - SOLVER_RUNNING_INIT_LINKCMD - - SOLVER_RUNNING_INIT_LINK_OK - - SOLVER_RUNNING_INIT_COMPILELINK_OK - - SOLVEREVENT_STARTING_INIT - - SOLVEREVENT_STARTING_CODEGEN - - SOLVEREVENT_STARTING_COMPILELINK - - SOLVEREVENT_STARTING_INPUT_FILE - - SOLVEREVENT_STARTING - - SOLVEREVENT_STARTING_SUBMITTING - - SOLVEREVENT_STARTING_SUBMITTED - - WORKEREVENT_STARTING - - SOLVEREVENT_RUNNING_START - - SOLVER_RUNNING_START - - JOB_RUNNING_UNKNOWN - - SOLVEREVENT_PRINTED - - WORKEREVENT_DATA - - JOB_RUNNING - - SOLVEREVENT_PROGRESS - - WORKEREVENT_PROGRESS - - WORKEREVENT_WORKEREXIT_NORMAL - - WORKEREVENT_WORKEREXIT_ERROR - - SOLVEREVENT_FINISHED - - SOLVER_FINISHED - - WORKEREVENT_COMPLETED - - JOB_COMPLETED - - SOLVER_STOPPED - - JOB_STOPPED - - JOB_FAILED_UNKNOWN - - SOLVER_ABORTED - - WORKEREVENT_FAILURE - - JOB_FAILED + - UNKNOWN + - DATAMOVEREVENT_MOVED + - WORKEREVENT_WORKERALIVE + - JOB_WAITING + - JOB_QUEUED + - JOB_QUEUED_RETRY + - JOB_DISPATCHED + - JOB_ACCEPTED + - SOLVER_READY + - SOLVER_STARTING_INIT + - SOLVEREVENT_STARTING_PROC_GEOM + - SOLVEREVENT_STARTING_RESAMPLE_FD + - SOLVER_RUNNING_INIT + - SOLVER_RUNNING_INIT_INPUT_FILE + - SOLVER_RUNNING_INIT_CODEGEN + - SOLVER_RUNNING_INIT_COMPILING + - SOLVER_RUNNING_INIT_COMPILECMD + - SOLVER_RUNNING_INIT_COMPILE_OK + - SOLVER_RUNNING_INIT_LINKING + - SOLVER_RUNNING_INIT_LINKCMD + - SOLVER_RUNNING_INIT_LINK_OK + - SOLVER_RUNNING_INIT_COMPILELINK_OK + - SOLVEREVENT_STARTING_INIT + - SOLVEREVENT_STARTING_CODEGEN + - SOLVEREVENT_STARTING_COMPILELINK + - SOLVEREVENT_STARTING_INPUT_FILE + - SOLVEREVENT_STARTING + - SOLVEREVENT_STARTING_SUBMITTING + - SOLVEREVENT_STARTING_SUBMITTED + - WORKEREVENT_STARTING + - SOLVEREVENT_RUNNING_START + - SOLVER_RUNNING_START + - JOB_RUNNING_UNKNOWN + - SOLVEREVENT_PRINTED + - WORKEREVENT_DATA + - JOB_RUNNING + - SOLVEREVENT_PROGRESS + - WORKEREVENT_PROGRESS + - WORKEREVENT_WORKEREXIT_NORMAL + - WORKEREVENT_WORKEREXIT_ERROR + - SOLVEREVENT_FINISHED + - SOLVER_FINISHED + - WORKEREVENT_COMPLETED + - JOB_COMPLETED + - SOLVER_STOPPED + - JOB_STOPPED + - JOB_FAILED_UNKNOWN + - SOLVER_ABORTED + - WORKEREVENT_FAILURE + - JOB_FAILED type: string Domain: type: object properties: name: type: string + ExportEvent: + type: object + properties: + eventType: + $ref: '#/components/schemas/ExportProgressType' + progress: + format: double + type: number + format: + type: string + location: + type: string + user: + $ref: '#/components/schemas/User' + jobID: + format: int64 + type: integer + dataKey: + $ref: '#/components/schemas/KeyValue' + dataIdString: + type: string + humanReadableData: + $ref: '#/components/schemas/HumanReadableExportData' + ExportProgressType: + enum: + - EXPORT_START + - EXPORT_COMPLETE + - EXPORT_FAILURE + - EXPORT_ASSEMBLING + - EXPORT_PROGRESS + type: string + ExportableDataType: + enum: + - ODE_VARIABLE_DATA + - PDE_VARIABLE_DATA + - PDE_PARTICLE_DATA + type: string + Expression: + type: string Extent: type: object properties: @@ -907,57 +2556,217 @@ components: ExternalDataIdentifier: type: object properties: - key: - $ref: "#/components/schemas/KeyValue" - owner: - $ref: "#/components/schemas/User" - name: - type: string - jobIndex: + key: + $ref: '#/components/schemas/KeyValue' + owner: + $ref: '#/components/schemas/User' + name: + type: string + jobIndex: + format: int32 + type: integer + simulationKey: + $ref: '#/components/schemas/KeyValue' + parameterScanType: + type: boolean + dataKey: + $ref: '#/components/schemas/KeyValue' + FieldData: + type: object + properties: + shortSpecData: + type: array + items: + type: array + items: + type: array + items: + type: integer + doubleSpecData: + type: array + items: + type: array + items: + type: array + items: + format: double + type: number + varNames: + type: array + items: + type: string + times: + type: array + items: + format: double + type: number + origin: + $ref: '#/components/schemas/Origin' + extent: + $ref: '#/components/schemas/Extent' + isize: + $ref: '#/components/schemas/ISize' + annotation: + type: string + name: + type: string + FieldDataReference: + type: object + properties: + fieldDataID: + $ref: '#/components/schemas/ExternalDataIdentifier' + annotation: + type: string + simulationsReferencingThisID: + type: array + items: + $ref: '#/components/schemas/KeyValue' + FieldDataSavedResults: + type: object + properties: + fieldDataName: + type: string + fieldDataKey: + type: string + FieldDataShape: + type: object + properties: + extent: + $ref: '#/components/schemas/Extent' + origin: + $ref: '#/components/schemas/Origin' + isize: + $ref: '#/components/schemas/ISize' + dataIdentifier: + type: array + items: + $ref: '#/components/schemas/DataIdentifier' + times: + type: array + items: + format: double + type: number + FunctionCategory: + enum: + - PREDEFINED + - OLDUSERDEFINED + - OUTPUTFUNCTION + - POSTPROCESSFUNCTION + type: string + GIFImage: + type: object + properties: + gifEncodedData: + format: binary + type: string + size: + $ref: '#/components/schemas/ISize' + GeometryMode: + enum: + - GEOMETRY_SELECTIONS + - GEOMETRY_SLICE + - GEOMETRY_FULL + type: string + GeometrySpecDTO: + type: object + properties: + selections: + type: array + items: + $ref: '#/components/schemas/SpatialSelection' + axis: format: int32 type: integer - simulationKey: - $ref: "#/components/schemas/KeyValue" - parameterScanType: - type: boolean - dataKey: - $ref: "#/components/schemas/KeyValue" - FieldDataReference: + sliceNumber: + format: int32 + type: integer + geometryMode: + $ref: '#/components/schemas/GeometryMode' + GeometrySummary: type: object properties: - externalDataIdentifier: - $ref: "#/components/schemas/ExternalDataIdentifier" - externalDataAnnotation: + dimension: + format: int32 + type: integer + origin: + $ref: '#/components/schemas/Origin' + extent: + $ref: '#/components/schemas/Extent' + imageRef: + $ref: '#/components/schemas/KeyValue' + version: + $ref: '#/components/schemas/Version' + softwareVersion: + $ref: '#/components/schemas/VCellSoftwareVersion' + GroupAccess: + required: + - groupid + type: object + properties: + groupid: + type: number + description: type: string - externalDataIDSimRefs: - type: array - items: - $ref: "#/components/schemas/KeyValue" - FieldDataSaveResults: + discriminator: + propertyName: type + mapping: + GroupAccessNone: '#/components/schemas/GroupAccessNone' + GroupAccessSome: '#/components/schemas/GroupAccessSome' + GroupAccessAll: '#/components/schemas/GroupAccessAll' + GroupAccessAll: + required: + - type type: object + allOf: + - $ref: '#/components/schemas/GroupAccess' properties: - fieldDataName: + type: + default: GroupAccessAll type: string - fieldDataID: + description: type: string - FieldDataShape: + GroupAccessNone: + required: + - type type: object + allOf: + - $ref: '#/components/schemas/GroupAccess' properties: - extent: - $ref: "#/components/schemas/Extent" - origin: - $ref: "#/components/schemas/Origin" - isize: - $ref: "#/components/schemas/ISize" - dataIdentifier: + type: + default: GroupAccessNone + type: string + description: + type: string + GroupAccessSome: + required: + - type + type: object + allOf: + - $ref: '#/components/schemas/GroupAccess' + properties: + type: + default: GroupAccessSome + type: string + hash: + type: number + groupMembers: type: array items: - $ref: "#/components/schemas/DataIdentifier" - times: + $ref: '#/components/schemas/User' + hiddenMembers: type: array items: - format: double - type: number + type: boolean + description: + type: string + hiddenGroupMembers: + type: array + items: + $ref: '#/components/schemas/User' + normalGroupMembers: + type: array + items: + $ref: '#/components/schemas/User' HelloWorldMessage: type: object properties: @@ -972,7 +2781,39 @@ components: server: type: string batchSystemType: - $ref: "#/components/schemas/BatchSystemType" + $ref: '#/components/schemas/BatchSystemType' + HumanReadableExportData: + type: object + properties: + simulationName: + type: string + biomodelName: + type: string + applicationName: + type: string + differentParameterValues: + type: array + items: + type: string + applicationType: + type: string + serverSavedFileName: + type: string + nonSpatial: + type: boolean + subVolume: + type: object + additionalProperties: + type: string + zSlices: + format: int32 + type: integer + tSlices: + format: int32 + type: integer + numChannels: + format: int32 + type: integer ISize: type: object properties: @@ -1007,10 +2848,50 @@ components: type: string example: 2022-03-10T16:15:50Z KeyValue: + type: string + MathModelChildSummary: type: object properties: - value: - type: number + modelType: + $ref: '#/components/schemas/MathType' + geometryDimension: + format: int32 + type: integer + geometryName: + type: string + simulationAnnotations: + type: array + items: + type: string + simulationNames: + type: array + items: + type: string + MathModelSummary: + type: object + properties: + version: + $ref: '#/components/schemas/Version' + keyValue: + $ref: '#/components/schemas/KeyValue' + modelInfo: + $ref: '#/components/schemas/MathModelChildSummary' + softwareVersion: + $ref: '#/components/schemas/VCellSoftwareVersion' + publicationInfos: + type: array + items: + $ref: '#/components/schemas/PublicationInfo' + annotatedFunctions: + type: string + MathType: + enum: + - RuleBased + - Stochastic + - Deterministic + - SpringSaLaD + - Unknown + type: string MathmodelRef: type: object properties: @@ -1027,6 +2908,24 @@ components: versionFlag: format: int32 type: integer + ModelType: + enum: + - BIOMODEL + - MATHMODEL + type: string + N5ExportRequest: + type: object + properties: + standardExportInformation: + $ref: '#/components/schemas/StandardExportInfo' + subVolume: + type: object + additionalProperties: + type: string + exportableDataType: + $ref: '#/components/schemas/ExportableDataType' + datasetName: + type: string Origin: type: object properties: @@ -1077,51 +2976,113 @@ components: biomodelRefs: type: array items: - $ref: "#/components/schemas/BiomodelRef" + $ref: '#/components/schemas/BiomodelRef' mathmodelRefs: type: array items: - $ref: "#/components/schemas/MathmodelRef" + $ref: '#/components/schemas/MathmodelRef' date: - $ref: "#/components/schemas/Date" + $ref: '#/components/schemas/Date' + PublicationInfo: + type: object + properties: + publicationKey: + $ref: '#/components/schemas/KeyValue' + versionKey: + $ref: '#/components/schemas/KeyValue' + title: + type: string + authors: + type: array + items: + type: string + citation: + type: string + pubmedid: + type: string + doi: + type: string + url: + type: string + pubdate: + $ref: '#/components/schemas/Date' + vcDocumentType: + $ref: '#/components/schemas/VCDocumentType' + user: + $ref: '#/components/schemas/User' + theHashCode: + format: int32 + type: integer + SPECIAL_CLAIM: + enum: + - admins + - powerUsers + - publicationEditors + - vcellSupport + type: string + SampledCurve: + required: + - type + type: object + allOf: + - $ref: '#/components/schemas/ControlPointCurve' + properties: + type: + default: SampledCurve + type: string + defaultNumSamples: + format: int32 + type: integer + maxControlPoints: + format: int32 + type: integer + minControlPoints: + format: int32 + type: integer + segmentCount: + format: int32 + type: integer + spatialLength: + format: double + type: number SchedulerStatus: enum: - - WAITING - - QUEUED - - DISPATCHED - - RUNNING - - COMPLETED - - STOPPED - - FAILED + - WAITING + - QUEUED + - DISPATCHED + - RUNNING + - COMPLETED + - STOPPED + - FAILED type: string SimulationExecutionStatusRecord: type: object properties: fieldStartDate: - $ref: "#/components/schemas/Instant" + $ref: '#/components/schemas/Instant' fieldLatestUpdateDate: - $ref: "#/components/schemas/Instant" + $ref: '#/components/schemas/Instant' fieldEndDate: - $ref: "#/components/schemas/Instant" + $ref: '#/components/schemas/Instant' fieldComputeHost: type: string fieldHasData: type: boolean fieldHtcJobID: - $ref: "#/components/schemas/HtcJobID" + $ref: '#/components/schemas/HtcJobID' SimulationJobStatusRecord: type: object properties: fieldTimeDataStamp: - $ref: "#/components/schemas/Instant" + $ref: '#/components/schemas/Instant' fieldVCSimID: - $ref: "#/components/schemas/VCSimulationIdentifier" + $ref: '#/components/schemas/VCSimulationIdentifier' fieldSubmitDate: - $ref: "#/components/schemas/Instant" + $ref: '#/components/schemas/Instant' fieldSchedulerStatus: - $ref: "#/components/schemas/SchedulerStatus" + $ref: '#/components/schemas/SchedulerStatus' fieldSimulationMessage: - $ref: "#/components/schemas/SimulationMessage" + $ref: '#/components/schemas/SimulationMessage' fieldTaskID: format: int32 type: integer @@ -1131,18 +3092,18 @@ components: format: int32 type: integer fieldSimulationExecutionStatus: - $ref: "#/components/schemas/SimulationExecutionStatusRecord" + $ref: '#/components/schemas/SimulationExecutionStatusRecord' fieldSimulationQueueEntryStatus: - $ref: "#/components/schemas/SimulationQueueEntryStatusRecord" + $ref: '#/components/schemas/SimulationQueueEntryStatusRecord' SimulationMessage: type: object properties: detailedState: - $ref: "#/components/schemas/DetailedState" + $ref: '#/components/schemas/DetailedState' message: type: string htcJobId: - $ref: "#/components/schemas/HtcJobID" + $ref: '#/components/schemas/HtcJobID' displayMessage: type: string SimulationQueueEntryStatusRecord: @@ -1152,44 +3113,175 @@ components: format: int32 type: integer fieldQueueDate: - $ref: "#/components/schemas/Instant" + $ref: '#/components/schemas/Instant' fieldQueueID: - $ref: "#/components/schemas/SimulationQueueID" + $ref: '#/components/schemas/SimulationQueueID' SimulationQueueID: enum: - - QUEUE_ID_WAITING - - QUEUE_ID_SIMULATIONJOB - - QUEUE_ID_NULL + - QUEUE_ID_WAITING + - QUEUE_ID_SIMULATIONJOB + - QUEUE_ID_NULL type: string SimulationStatusPersistentRecord: type: object properties: status: - $ref: "#/components/schemas/Status" + $ref: '#/components/schemas/Status' details: type: string hasData: type: boolean + SourceModel: + type: object + properties: + modelID: + type: string + modelType: + $ref: '#/components/schemas/ModelType' + SpatialSelection: + required: + - type + type: object + properties: + curveSelectionInfo: + $ref: '#/components/schemas/CurveSelectionInfo' + varType: + $ref: '#/components/schemas/VariableType' + type: + type: string + smallestMeshCellDimensionLength: + format: double + type: number + variableType: + $ref: '#/components/schemas/VariableType' + closed: + type: boolean + point: + type: boolean + discriminator: + propertyName: type + mapping: + Membrane: '#/components/schemas/SpatialSelectionMembrane' + Contour: '#/components/schemas/SpatialSelectionContour' + Volume: '#/components/schemas/SpatialSelectionVolume' + SpatialSelectionContour: + required: + - type + type: object + allOf: + - $ref: '#/components/schemas/SpatialSelection' + properties: + type: + default: Contour + type: string + fieldSampledDataIndexes: + type: array + items: + format: int32 + type: integer + indexSamples: + type: array + items: + format: int32 + type: integer + sampledDataIndexes: + type: array + items: + format: int32 + type: integer + SpatialSelectionMembrane: + required: + - type + type: object + allOf: + - $ref: '#/components/schemas/SpatialSelection' + properties: + type: + default: Membrane + type: string + fieldSampledDataIndexes: + type: array + items: + format: int32 + type: integer + selectionSource: + $ref: '#/components/schemas/SampledCurve' + SpatialSelectionVolume: + required: + - type + type: object + allOf: + - $ref: '#/components/schemas/SpatialSelection' + properties: + type: + default: Volume + type: string + symmetric: + type: boolean + Spline: + required: + - type + type: object + allOf: + - $ref: '#/components/schemas/ControlPointCurve' + properties: + type: + default: Spline + type: string + defaultNumSamples: + format: int32 + type: integer + maxControlPoints: + format: int32 + type: integer + minControlPoints: + format: int32 + type: integer + segmentCount: + format: int32 + type: integer + StandardExportInfo: + type: object + properties: + outputContext: + type: array + items: + $ref: '#/components/schemas/AnnotatedFunctionDTO' + contextName: + type: string + simulationName: + type: string + simulationKey: + type: string + simulationJob: + format: int32 + type: integer + geometrySpecs: + $ref: '#/components/schemas/GeometrySpecDTO' + timeSpecs: + $ref: '#/components/schemas/TimeSpecs' + variableSpecs: + $ref: '#/components/schemas/VariableSpecs' Status: enum: - - UNKNOWN - - NEVER_RAN - - START_REQUESTED - - DISPATCHED - - WAITING - - QUEUED - - RUNNING - - COMPLETED - - FAILED - - STOP_REQUESTED - - STOPPED - - NOT_SAVED + - UNKNOWN + - NEVER_RAN + - START_REQUESTED + - DISPATCHED + - WAITING + - QUEUED + - RUNNING + - COMPLETED + - FAILED + - STOP_REQUESTED + - STOPPED + - NOT_SAVED type: string StatusMessage: type: object properties: jobStatus: - $ref: "#/components/schemas/SimulationJobStatusRecord" + $ref: '#/components/schemas/SimulationJobStatusRecord' userName: type: string progress: @@ -1198,17 +3290,38 @@ components: timepoint: format: double type: number + TimeMode: + enum: + - TIME_POINT + - TIME_RANGE + type: string + TimeSpecs: + type: object + properties: + beginTimeIndex: + format: int32 + type: integer + endTimeIndex: + format: int32 + type: integer + allTimes: + type: array + items: + format: double + type: number + mode: + $ref: '#/components/schemas/TimeMode' User: type: object properties: userName: type: string key: - $ref: "#/components/schemas/KeyValue" - name: - type: string - testAccount: - type: boolean + $ref: '#/components/schemas/KeyValue' + mySpecials: + type: array + items: + $ref: '#/components/schemas/SPECIAL_CLAIM' UserIdentityJSONSafe: type: object properties: @@ -1242,25 +3355,100 @@ components: type: string emailNotification: type: boolean + VCDocumentType: + enum: + - BIOMODEL_DOC + - MATHMODEL_DOC + - GEOMETRY_DOC + - EXTERNALFILE_DOC + type: string + VCImageSummary: + type: object + properties: + size: + $ref: '#/components/schemas/ISize' + extent: + $ref: '#/components/schemas/Extent' + version: + $ref: '#/components/schemas/Version' + preview: + $ref: '#/components/schemas/GIFImage' + softwareVersion: + $ref: '#/components/schemas/VCellSoftwareVersion' VCSimulationIdentifier: type: object properties: simulationKey: - $ref: "#/components/schemas/KeyValue" + $ref: '#/components/schemas/KeyValue' owner: - $ref: "#/components/schemas/User" - iD: + $ref: '#/components/schemas/User' + id: + type: string + VCellHTTPError: + type: object + properties: + exceptionType: + type: string + message: + type: string + VCellSite: + enum: + - alpha + - beta + - rel + - other + - unknown + type: string + VCellSoftwareVersion: + type: object + properties: + softwareVersionString: + type: string + vcellSite: + $ref: '#/components/schemas/VCellSite' + buildNumber: + type: string + versionNumber: + type: string + majorVersion: + format: int32 + type: integer + minorVersion: + format: int32 + type: integer + patchVersion: + format: int32 + type: integer + buildInt: + format: int32 + type: integer + description: type: string VariableDomain: enum: - - VARIABLEDOMAIN_POSTPROCESSING - - VARIABLEDOMAIN_UNKNOWN - - VARIABLEDOMAIN_VOLUME - - VARIABLEDOMAIN_MEMBRANE - - VARIABLEDOMAIN_CONTOUR - - VARIABLEDOMAIN_NONSPATIAL - - VARIABLEDOMAIN_POINT + - VARIABLEDOMAIN_POSTPROCESSING + - VARIABLEDOMAIN_UNKNOWN + - VARIABLEDOMAIN_VOLUME + - VARIABLEDOMAIN_MEMBRANE + - VARIABLEDOMAIN_CONTOUR + - VARIABLEDOMAIN_NONSPATIAL + - VARIABLEDOMAIN_POINT type: string + VariableMode: + enum: + - VARIABLE_ONE + - VARIABLE_MULTI + - VARIABLE_ALL + type: string + VariableSpecs: + type: object + properties: + variableNames: + type: array + items: + type: string + mode: + $ref: '#/components/schemas/VariableMode' VariableType: type: object properties: @@ -1268,7 +3456,7 @@ components: format: int32 type: integer variableDomain: - $ref: "#/components/schemas/VariableDomain" + $ref: '#/components/schemas/VariableDomain' name: type: string units: @@ -1283,6 +3471,44 @@ components: type: string typeName: type: string + Version: + type: object + properties: + versionKey: + $ref: '#/components/schemas/KeyValue' + annot: + type: string + branchID: + type: number + branchPointRefKey: + $ref: '#/components/schemas/KeyValue' + date: + format: date-time + type: string + example: 2022-03-10 + flag: + $ref: '#/components/schemas/VersionFlag' + groupAccess: + $ref: '#/components/schemas/GroupAccess' + name: + type: string + owner: + $ref: '#/components/schemas/User' + VersionFlag: + type: object + properties: + versionFlag: + format: int32 + type: integer + intValue: + format: int32 + type: integer + archived: + type: boolean + current: + type: boolean + published: + type: boolean securitySchemes: openId: type: openIdConnect From 23f22e42a67cb74656f711d638be5a5a7ac3a2ee Mon Sep 17 00:00:00 2001 From: Jim Schaff Date: Sun, 8 Mar 2026 23:41:41 -0400 Subject: [PATCH 09/24] fix API client bugs: base URL, Accept header, XML deserialization login_interactive() defaulted api_base_url to include /api/v1, causing a doubled path prefix since the generated client already includes it in resource paths. The generated saveBioModel method listed application/json in the Accept header but the server only @Produces(APPLICATION_XML). The deserializer did not handle application/xml responses from the server. Added scripts/python-fix.sh to patch these code-generator bugs after regeneration, and wired it into generate.sh. Co-Authored-By: Claude Opus 4.6 --- .../api/bio_model_resource_api.py | 3 +- .../_internal/api/vcell_client/api_client.py | 2 + .../api/vcell_client/auth/auth_utils.py | 2 +- scripts/generate.sh | 3 ++ scripts/python-fix.sh | 38 +++++++++++++++++++ 5 files changed, 45 insertions(+), 3 deletions(-) create mode 100755 scripts/python-fix.sh diff --git a/pyvcell/_internal/api/vcell_client/api/bio_model_resource_api.py b/pyvcell/_internal/api/vcell_client/api/bio_model_resource_api.py index a0a412f..60a31c1 100644 --- a/pyvcell/_internal/api/vcell_client/api/bio_model_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/bio_model_resource_api.py @@ -1641,8 +1641,7 @@ def _save_bio_model_serialize( if 'Accept' not in _header_params: _header_params['Accept'] = self.api_client.select_header_accept( [ - 'application/xml', - 'application/json' + 'application/xml' ] ) diff --git a/pyvcell/_internal/api/vcell_client/api_client.py b/pyvcell/_internal/api/vcell_client/api_client.py index 88961a1..a9c1df2 100644 --- a/pyvcell/_internal/api/vcell_client/api_client.py +++ b/pyvcell/_internal/api/vcell_client/api_client.py @@ -418,6 +418,8 @@ def deserialize(self, response_text: str, response_type: str, content_type: Opti data = json.loads(response_text) elif re.match(r'^text\/[a-z.+-]+\s*(;|$)', content_type, re.IGNORECASE): data = response_text + elif re.match(r'^application\/xml\s*(;|$)', content_type, re.IGNORECASE): + data = response_text else: raise ApiException( status=0, diff --git a/pyvcell/_internal/api/vcell_client/auth/auth_utils.py b/pyvcell/_internal/api/vcell_client/auth/auth_utils.py index dfc6d3b..3186103 100644 --- a/pyvcell/_internal/api/vcell_client/auth/auth_utils.py +++ b/pyvcell/_internal/api/vcell_client/auth/auth_utils.py @@ -138,7 +138,7 @@ def get_authorization_and_token_endpoints(issuer_url: str) -> tuple[str, str, st def login_interactive( - api_base_url: str = "https://vcell.cam.uchc.edu/api/v1", + api_base_url: str = "https://vcell.cam.uchc.edu", client_id: str = "cjoWhd7W8A8znf7Z7vizyvKJCiqTgRtf", issuer_url: str = "https://dev-dzhx7i2db3x3kkvq.us.auth0.com", insecure: bool = False, diff --git a/scripts/generate.sh b/scripts/generate.sh index ea7d48a..c3504d0 100755 --- a/scripts/generate.sh +++ b/scripts/generate.sh @@ -15,3 +15,6 @@ openapi-generator generate \ -i ${ROOT_DIR}/scripts/openapi.yaml \ -o ${ROOT_DIR} \ -c ${ROOT_DIR}/scripts/openapi_config.yaml + +# Apply post-generation fixes for known code-generator bugs +${ROOT_DIR}/scripts/python-fix.sh diff --git a/scripts/python-fix.sh b/scripts/python-fix.sh new file mode 100755 index 0000000..59fa682 --- /dev/null +++ b/scripts/python-fix.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# This script applies fixes to the generated Python REST client code. +# Run this after generate.sh to patch known code-generator bugs. + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" + +BIO_MODEL_API="${ROOT_DIR}/pyvcell/_internal/api/vcell_client/api/bio_model_resource_api.py" +API_CLIENT="${ROOT_DIR}/pyvcell/_internal/api/vcell_client/api_client.py" + +# Fix 1: saveBioModel Accept header — the generator incorrectly includes application/json +# (from error response content types) in the Accept header for a method that only +# @Produces(APPLICATION_XML). This causes a NotAcceptableException on the server. +sed -i '' "/_save_bio_model_serialize/,/return self.api_client.param_serialize/ { + s|'application/xml', *$|'application/xml'| + /^ *'application\/json'$/d +}" "$BIO_MODEL_API" + +# Fix 2: deserializer application/xml support — the generated client only handles +# application/json and text/* content types, but the server returns +# application/xml;charset=UTF-8 for VCML endpoints. +python3 -c " +import pathlib, re +p = pathlib.Path('$API_CLIENT') +src = p.read_text() +old = \" elif re.match(r'^text\\\\/[a-z.+-]+\\\\s*(;|\$)', content_type, re.IGNORECASE):\\n data = response_text\\n else:\" +new = old.replace(' else:', \" elif re.match(r'^application\\\\/xml\\\\s*(;|\$)', content_type, re.IGNORECASE):\\n data = response_text\\n else:\") +if old in src: + p.write_text(src.replace(old, new)) + print(' - Patched api_client.py: added application/xml deserialization support') +elif 'application\\\\/xml' in src: + print(' - api_client.py: application/xml fix already applied') +else: + print(' - WARNING: could not find expected pattern in api_client.py') +" + +echo "Applied fixes to generated Python client." From b5e6bb4dbe64dafd3a8438ff369b678455bdb61f Mon Sep 17 00:00:00 2001 From: Jim Schaff Date: Sun, 8 Mar 2026 23:44:05 -0400 Subject: [PATCH 10/24] Add Version model to VCML pydantic models Parse server-assigned version metadata (key, name, owner, date) from VCML XML into Biomodel and Simulation objects, enabling programmatic access to server keys after save/load round-trips. Co-Authored-By: Claude Opus 4.6 --- pyvcell/vcml/__init__.py | 2 ++ pyvcell/vcml/models.py | 13 +++++++++++++ pyvcell/vcml/vcml_reader.py | 27 +++++++++++++++++++++++++-- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/pyvcell/vcml/__init__.py b/pyvcell/vcml/__init__.py index 441097f..b266aa8 100644 --- a/pyvcell/vcml/__init__.py +++ b/pyvcell/vcml/__init__.py @@ -22,6 +22,7 @@ SubVolumeType, SurfaceClass, VCMLDocument, + Version, ) from pyvcell.vcml.utils import ( field_data_refs, @@ -73,6 +74,7 @@ "BoundaryType", "Application", "Simulation", + "Version", "update_biomodel", "field_data_refs", "to_vcml_str", diff --git a/pyvcell/vcml/models.py b/pyvcell/vcml/models.py index 51be5a0..74a38fa 100644 --- a/pyvcell/vcml/models.py +++ b/pyvcell/vcml/models.py @@ -413,11 +413,23 @@ class ReactionMapping(VcmlNode): included: bool = True +class Version(VcmlNode): + """Server-assigned version metadata, present only for models loaded from the VCell server.""" + + key: str + name: str | None = None + branch_id: str | None = None + date: str | None = None + owner_name: str | None = None + owner_id: str | None = None + + class Simulation(VcmlNode): name: str duration: float output_time_step: float mesh_size: tuple[int, int, int] + version: Version | None = None @property def mesh_array_shape(self) -> tuple[int, ...]: @@ -485,6 +497,7 @@ class Biomodel(VcmlNode): name: str model: Model | None = None applications: list[Application] = Field(default_factory=list) + version: Version | None = None def __repr__(self) -> str: return f"Biomodel(model={self.model.__repr__()}, applications={self.application_names}, simulations={self.simulation_names})" diff --git a/pyvcell/vcml/vcml_reader.py b/pyvcell/vcml/vcml_reader.py index bd22a60..6ca63f5 100644 --- a/pyvcell/vcml/vcml_reader.py +++ b/pyvcell/vcml/vcml_reader.py @@ -73,9 +73,29 @@ def __init__(self, document: vc.VCMLDocument) -> None: def visit_BioModel(self, element: _Element, node: vc.VCMLDocument) -> None: name = element.get("Name", default="unnamed") - node.biomodel = vc.Biomodel(name=name) + node.biomodel = vc.Biomodel(name=name, version=self._parse_version(element)) self.generic_visit(element, node.biomodel) + def _parse_version(self, element: _Element) -> vc.Version | None: + """Extract a Version child element, if present.""" + ns = element.nsmap.get(None, "") + version_tag = f"{{{ns}}}Version" if ns else "Version" + version_elem = element.find(version_tag) + if version_elem is None: + return None + key = version_elem.get("KeyValue") + if key is None: + return None + owner_elem = version_elem.find(f"{{{ns}}}Owner" if ns else "Owner") + return vc.Version( + key=key, + name=version_elem.get("Name"), + branch_id=version_elem.get("BranchId"), + date=version_elem.get("Date"), + owner_name=owner_elem.get("Name") if owner_elem is not None else None, + owner_id=owner_elem.get("Identifier") if owner_elem is not None else None, + ) + def visit_Model(self, element: _Element, node: vc.Biomodel) -> None: name: str = element.get("Name", default="unnamed") node.model = vc.Model(name=name) @@ -203,7 +223,10 @@ def visit_Simulation(self, element: _Element, node: vc.Application) -> None: return # nonspatial simulation if duration is None or output_time_step is None or mesh_size is None: raise ValueError("Simulation element is missing required child elements") - simulation = vc.Simulation(name=name, duration=duration, output_time_step=output_time_step, mesh_size=mesh_size) + simulation = vc.Simulation( + name=name, duration=duration, output_time_step=output_time_step, + mesh_size=mesh_size, version=self._parse_version(element), + ) node.simulations.append(simulation) def visit_Geometry(self, element: _Element, node: vc.Application) -> None: From f72649a955a741f5af0699b4eeff5f3e5b7dbec4 Mon Sep 17 00:00:00 2001 From: Jim Schaff Date: Sun, 8 Mar 2026 23:44:14 -0400 Subject: [PATCH 11/24] Add remote-simulations tutorial notebook and docs integration Create notebook walking through authenticate, save, run, monitor, and export workflow against the live VCell server. Exclude from CI execution since it requires interactive OAuth login. Co-Authored-By: Claude Opus 4.6 --- .gitignore | 2 + Makefile | 2 +- .../guides/notebooks/remote-simulations.ipynb | 349 ++++++++++++++++++ docs/guides/remote-simulations.md | 322 ++++++++++++++++ mkdocs.yml | 2 + tests/guides/test_notebooks.py | 4 + 6 files changed, 680 insertions(+), 1 deletion(-) create mode 100644 docs/guides/notebooks/remote-simulations.ipynb create mode 100644 docs/guides/remote-simulations.md diff --git a/.gitignore b/.gitignore index ca82aa5..f822c47 100644 --- a/.gitignore +++ b/.gitignore @@ -185,3 +185,5 @@ examples/scripts/workspace/ workspace docs/guides/notebooks/workspace/ + +docs/guides/notebooks/results.n5.zip diff --git a/Makefile b/Makefile index 5fe3058..746e810 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ build-and-publish: build publish ## Build and publish. .PHONY: docs-execute-notebooks docs-execute-notebooks: ## Execute guide notebooks and save outputs @echo "🚀 Executing guide notebooks" - @poetry run jupyter nbconvert --to notebook --execute --inplace docs/guides/notebooks/*.ipynb + @poetry run jupyter nbconvert --to notebook --execute --inplace $(filter-out docs/guides/notebooks/remote-simulations.ipynb,$(wildcard docs/guides/notebooks/*.ipynb)) .PHONY: docs-test docs-test: ## Test if documentation can be built without warnings or errors diff --git a/docs/guides/notebooks/remote-simulations.ipynb b/docs/guides/notebooks/remote-simulations.ipynb new file mode 100644 index 0000000..a5aaf86 --- /dev/null +++ b/docs/guides/notebooks/remote-simulations.ipynb @@ -0,0 +1,349 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tutorial: Remote Simulations\n", + "\n", + "This tutorial walks through authenticating with the VCell server, saving a model, starting a simulation, monitoring progress, and exporting results.\n", + "\n", + "**Note:** This notebook requires a VCell account and access to the VCell server. It cannot be run in CI.\n", + "\n", + "See also the [Remote Simulations](../remote-simulations.md) reference guide." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Authenticate" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-09T03:17:07.633891Z", + "start_time": "2026-03-09T03:17:05.643332Z" + } + }, + "source": [ + "from pyvcell._internal.api.vcell_client.auth.auth_utils import login_interactive\n", + "\n", + "api_client = login_interactive()" + ], + "outputs": [], + "execution_count": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Build and save model to VCell server" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-09T03:17:08.388312Z", + "start_time": "2026-03-09T03:17:07.635280Z" + } + }, + "source": "import pyvcell.vcml as vc\n\nantimony_str = \"\"\"\n compartment ec = 1;\n compartment cell = 2;\n compartment pm = 1;\n species A in cell;\n species B in cell;\n J0: A -> B; cell * (k1*A - k2*B)\n J0 in cell;\n k1 = 5.0; k2 = 2.0\n A = 10\n\"\"\"\nbiomodel = vc.load_antimony_str(antimony_str)\nmodel = biomodel.model\nmodel.get_compartment(\"pm\").dim = 2\n\ngeo = vc.Geometry(name=\"geo\", origin=(0, 0, 0), extent=(10, 10, 10), dim=3)\ngeo.add_sphere(name=\"cell_domain\", radius=4, center=(5, 5, 5))\ngeo.add_background(name=\"ec_domain\")\ngeo.add_surface(name=\"pm_domain\", sub_volume_1=\"cell_domain\", sub_volume_2=\"ec_domain\")\n\napp = biomodel.add_application(\"app1\", geometry=geo)\napp.map_compartment(\"cell\", \"cell_domain\")\napp.map_compartment(\"ec\", \"ec_domain\")\napp.map_species(\"A\", init_conc=\"3+sin(x)\", diff_coef=1.0)\napp.map_species(\"B\", init_conc=\"2+cos(x+y+z)\", diff_coef=1.0)\n\nsim = app.add_sim(name=\"sim1\", duration=2.0, output_time_step=0.05, mesh_size=(50, 50, 50))", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-03-09T03:17:08.362156Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "Please remove the `packages` attribute from your configuration file.\n", + "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", + "2026-03-08 23:17:08,365 ERROR (SBMLDocument.java:573) - There was an error accessing the sbml online validator!\n", + "2026-03-09T03:17:08.370828Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@7db7c1ba and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-09T03:17:08.373834Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@7db7c1ba and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-08 23:17:08,374 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-08 23:17:08,374 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-08 23:17:08,374 INFO (Entrypoints.java:172) - Returning from sbmlToVcell: {\"success\":true,\"message\":\"Success\"}\n" + ] + } + ], + "execution_count": 2 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-09T03:17:09.189719Z", + "start_time": "2026-03-09T03:17:08.419055Z" + } + }, + "source": "from datetime import datetime\nfrom pyvcell._internal.api.vcell_client.api.bio_model_resource_api import BioModelResourceApi\n\nvcml_str = vc.to_vcml_str(biomodel)\n\nbm_api = BioModelResourceApi(api_client)\nmodel_name = f\"MyRemoteModel_{datetime.now().strftime('%Y%m%d_%H%M%S')}\"\nsaved_vcml = bm_api.save_bio_model(body=vcml_str, new_name=model_name)\nprint(f\"Saved model as: {model_name}\")", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-03-09T03:17:08.433364Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "Please remove the `packages` attribute from your configuration file.\n", + "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", + "2026-03-09T03:17:08.436947Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@32604cea and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-09T03:17:08.631082Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@32604cea and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-08 23:17:08,631 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-08 23:17:08,640 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", + "Saved model as: MyRemoteModel_20260308_231708\n" + ] + } + ], + "execution_count": 3 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-09T03:17:09.207898Z", + "start_time": "2026-03-09T03:17:09.194421Z" + } + }, + "source": "saved_biomodel = vc.load_vcml_str(saved_vcml)\nbm_key = saved_biomodel.version.key\nsaved_app = next(a for a in saved_biomodel.applications if a.name == \"app1\")\nsim_key = saved_app.simulations[0].version.key\nsim_name = saved_app.simulations[0].name\nprint(f\"BioModel key: {bm_key}, Simulation key: {sim_key}\")", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "BioModel key: 306560214, Simulation key: 306560211\n" + ] + } + ], + "execution_count": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Start simulation" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-09T03:17:09.277386Z", + "start_time": "2026-03-09T03:17:09.208499Z" + } + }, + "source": "from pyvcell._internal.api.vcell_client.api.simulation_resource_api import SimulationResourceApi\n\nsim_api = SimulationResourceApi(api_client)\nsim_api.start_simulation(sim_id=sim_key)\nprint(\"Simulation started\")", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Simulation started\n" + ] + } + ], + "execution_count": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Monitor progress" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-09T03:17:39.585576Z", + "start_time": "2026-03-09T03:17:09.278583Z" + } + }, + "source": [ + "import time\n", + "\n", + "while True:\n", + " status_record = sim_api.get_simulation_status(\n", + " sim_id=sim_key,\n", + " bio_model_id=bm_key,\n", + " )\n", + " print(f\"Status: {status_record.status}, Details: {status_record.details}\")\n", + "\n", + " if status_record.status in (\"COMPLETED\", \"FAILED\", \"STOPPED\"):\n", + " break\n", + "\n", + " time.sleep(5)\n", + "\n", + "if status_record.status != \"COMPLETED\":\n", + " raise RuntimeError(f\"Simulation ended with status: {status_record.status}\")" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Status: Status.WAITING, Details: waiting to be dispatched\n", + "Status: Status.RUNNING, Details: running...\n", + "Status: Status.RUNNING, Details: initializing mesh\n", + "Status: Status.RUNNING, Details: simulation [SimID_306560211_0_] started\n", + "Status: Status.RUNNING, Details: simulation [SimID_306560211_0_] started\n", + "Status: Status.RUNNING, Details: simulation [SimID_306560211_0_] started\n", + "Status: Status.COMPLETED, Details: completed\n" + ] + } + ], + "execution_count": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Export results (N5 format)" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-09T03:17:39.658804Z", + "start_time": "2026-03-09T03:17:39.598623Z" + } + }, + "source": "from pyvcell._internal.api.vcell_client.api.export_resource_api import ExportResourceApi\nfrom pyvcell._internal.api.vcell_client.models.n5_export_request import N5ExportRequest\nfrom pyvcell._internal.api.vcell_client.models.standard_export_info import StandardExportInfo\nfrom pyvcell._internal.api.vcell_client.models.exportable_data_type import ExportableDataType\nfrom pyvcell._internal.api.vcell_client.models.variable_specs import VariableSpecs\nfrom pyvcell._internal.api.vcell_client.models.variable_mode import VariableMode\nfrom pyvcell._internal.api.vcell_client.models.time_specs import TimeSpecs\nfrom pyvcell._internal.api.vcell_client.models.time_mode import TimeMode\n\nexport_api = ExportResourceApi(api_client)\n\n# Compute time indices from simulation parameters\nnum_time_points = int(sim.duration / sim.output_time_step) + 1\nall_times = [i * sim.output_time_step for i in range(num_time_points)]\n\nrequest = N5ExportRequest(\n standard_export_information=StandardExportInfo(\n simulation_name=sim_name,\n simulation_key=sim_key,\n simulation_job=0,\n variable_specs=VariableSpecs(\n variable_names=[\"A\", \"B\"],\n mode=VariableMode.VARIABLE_MULTI,\n ),\n time_specs=TimeSpecs(\n begin_time_index=0,\n end_time_index=num_time_points - 1,\n all_times=all_times,\n mode=TimeMode.TIME_RANGE,\n ),\n ),\n exportable_data_type=ExportableDataType.PDE_VARIABLE_DATA,\n dataset_name=\"my_results\",\n)\n\njob_id = export_api.export_n5(n5_export_request=request)\nprint(f\"Export job started: {job_id}\")", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Export job started: 6645597857\n" + ] + } + ], + "execution_count": 7 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-09T03:27:28.829558Z", + "start_time": "2026-03-09T03:23:57.829942Z" + } + }, + "source": [ + "import requests\n", + "\n", + "while True:\n", + " events = export_api.export_status()\n", + " for event in events:\n", + " if event.job_id == job_id:\n", + " if event.event_type == \"EXPORT_COMPLETE\":\n", + " download_url = event.location\n", + " print(f\"Export complete: {download_url}\")\n", + " break\n", + " elif event.event_type == \"EXPORT_FAILURE\":\n", + " raise RuntimeError(f\"Export failed: {event}\")\n", + " else:\n", + " print(f\"Export event in progress: status={event.event_type}, job_id={job_id}\")\n", + " else:\n", + " time.sleep(5)\n", + " continue\n", + " break\n", + "\n", + "response = requests.get(download_url)\n", + "with open(\"results.n5.zip\", \"wb\") as f:\n", + " f.write(response.content)\n", + "print(f\"Results downloaded to results.n5.zip ({len(response.content)} bytes)\")" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Export event in progress: status=ExportProgressType.EXPORT_ASSEMBLING, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_START, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", + "Export complete: https://vcell.cam.uchc.edu/n5Data/schaff/41cc1234ce3540f.n5?dataSetName=6645597857\n", + "Results downloaded to results.n5.zip (166 bytes)\n" + ] + } + ], + "execution_count": 12 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.12.0" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/guides/remote-simulations.md b/docs/guides/remote-simulations.md new file mode 100644 index 0000000..961f2aa --- /dev/null +++ b/docs/guides/remote-simulations.md @@ -0,0 +1,322 @@ +# Remote Simulations + +This guide shows how to run simulations on the VCell server cluster: authenticate, save a model, start a simulation, monitor progress, and export results. + +!!! note + This guide requires a VCell account and access to the VCell server. Code examples cannot be run in CI — they require interactive browser-based login. + +## Prerequisites + +- pyvcell installed (`pip install pyvcell`) +- A [VCell account](https://vcell.org) +- Familiarity with [Building a Model](building-a-model.md) + +## Authenticate + +Use `login_interactive()` to authenticate via OAuth2. This opens your browser for login and returns an authenticated API client: + +```python +from pyvcell._internal.api.vcell_client.auth.auth_utils import login_interactive + +api_client = login_interactive() +``` + +The defaults connect to the production VCell server (`https://vcell.cam.uchc.edu`). Only change them if you know what you are doing: + +```python +api_client = login_interactive( + api_base_url="https://vcell.cam.uchc.edu", + client_id="cjoWhd7W8A8znf7Z7vizyvKJCiqTgRtf", + issuer_url="https://dev-dzhx7i2db3x3kkvq.us.auth0.com", +) +``` + +## Save model to VCell server + +Build a model locally (see [Building a Model](building-a-model.md) for details), then save it to the server: + +```python +import pyvcell.vcml as vc +from pyvcell._internal.api.vcell_client.api.bio_model_resource_api import BioModelResourceApi + +# Build a model locally +antimony_str = """ + compartment ec = 1; + compartment cell = 2; + compartment pm = 1; + species A in cell; + species B in cell; + J0: A -> B; cell * (k1*A - k2*B) + J0 in cell; + k1 = 5.0; k2 = 2.0 + A = 10 +""" +biomodel = vc.load_antimony_str(antimony_str) +model = biomodel.model +model.get_compartment("pm").dim = 2 + +geo = vc.Geometry(name="geo", origin=(0, 0, 0), extent=(10, 10, 10), dim=3) +geo.add_sphere(name="cell_domain", radius=4, center=(5, 5, 5)) +geo.add_background(name="ec_domain") +geo.add_surface(name="pm_domain", sub_volume_1="cell_domain", sub_volume_2="ec_domain") + +app = biomodel.add_application("app1", geometry=geo) +app.map_compartment("cell", "cell_domain") +app.map_compartment("ec", "ec_domain") +app.map_species("A", init_conc="3+sin(x)", diff_coef=1.0) +app.map_species("B", init_conc="2+cos(x+y+z)", diff_coef=1.0) + +sim = app.add_sim(name="sim1", duration=2.0, output_time_step=0.05, mesh_size=(50, 50, 50)) + +# Serialize and save to server +vcml_str = vc.to_vcml_str(biomodel) + +bm_api = BioModelResourceApi(api_client) +saved_vcml = bm_api.save_bio_model(body=vcml_str, new_name="MyRemoteModel") +``` + +Parse the saved VCML to get the biomodel ID and simulation key, which you'll need for the next steps: + +```python +saved_biomodel = vc.load_vcml_str(saved_vcml) +bm_key = saved_biomodel.version.key +saved_app = next(a for a in saved_biomodel.applications if a.name == "app1") +sim_key = saved_app.simulations[0].version.key +sim_name = saved_app.simulations[0].name +``` + +## Start simulation + +Use `SimulationResourceApi` to start the simulation on the server: + +```python +from pyvcell._internal.api.vcell_client.api.simulation_resource_api import SimulationResourceApi + +sim_api = SimulationResourceApi(api_client) +status_messages = sim_api.start_simulation(sim_id=sim_key) +print(status_messages) +``` + +## Monitor progress + +Poll the simulation status until it reaches a terminal state: + +```python +import time + +while True: + status_record = sim_api.get_simulation_status( + sim_id=sim_key, + bio_model_id=bm_key, + ) + print(f"Status: {status_record.status}, Details: {status_record.details}") + + if status_record.status in ("COMPLETED", "FAILED", "STOPPED"): + break + + time.sleep(5) + +if status_record.status != "COMPLETED": + raise RuntimeError(f"Simulation ended with status: {status_record.status}") +``` + +The simulation lifecycle follows these states: + +`NEVER_RAN` → `START_REQUESTED` → `DISPATCHED` → `QUEUED` → `RUNNING` → `COMPLETED` + +A simulation can also end in `FAILED` or `STOPPED`. + +## Export results (N5 format) + +Once the simulation completes, export the results in N5 format (ImageJ-compatible): + +```python +from pyvcell._internal.api.vcell_client.api.export_resource_api import ExportResourceApi +from pyvcell._internal.api.vcell_client.models.n5_export_request import N5ExportRequest +from pyvcell._internal.api.vcell_client.models.standard_export_info import StandardExportInfo +from pyvcell._internal.api.vcell_client.models.exportable_data_type import ExportableDataType +from pyvcell._internal.api.vcell_client.models.variable_specs import VariableSpecs +from pyvcell._internal.api.vcell_client.models.variable_mode import VariableMode +from pyvcell._internal.api.vcell_client.models.time_specs import TimeSpecs +from pyvcell._internal.api.vcell_client.models.time_mode import TimeMode + +export_api = ExportResourceApi(api_client) + +# Compute time indices from simulation parameters +num_time_points = int(sim.duration / sim.output_time_step) + 1 +all_times = [i * sim.output_time_step for i in range(num_time_points)] + +request = N5ExportRequest( + standard_export_information=StandardExportInfo( + simulation_name=sim_name, + simulation_key=sim_key, + simulation_job=0, + variable_specs=VariableSpecs( + variable_names=["A", "B"], + mode=VariableMode.VARIABLE_MULTI, + ), + time_specs=TimeSpecs( + begin_time_index=0, + end_time_index=num_time_points - 1, + all_times=all_times, + mode=TimeMode.TIME_RANGE, + ), + ), + exportable_data_type=ExportableDataType.PDE_VARIABLE_DATA, + dataset_name="my_results", +) + +job_id = export_api.export_n5(n5_export_request=request) +print(f"Export job started: {job_id}") +``` + +Poll for export completion, then download: + +```python +import requests + +while True: + events = export_api.export_status() + for event in events: + if event.job_id == job_id: + if event.event_type == "EXPORT_COMPLETE": + download_url = event.location + print(f"Export complete: {download_url}") + break + elif event.event_type == "EXPORT_FAILURE": + raise RuntimeError(f"Export failed: {event}") + else: + time.sleep(5) + continue + break + +# Download the exported file +response = requests.get(download_url) +with open("results.n5.zip", "wb") as f: + f.write(response.content) +``` + +## Complete example + +```python +import time +import requests +import pyvcell.vcml as vc +from pyvcell._internal.api.vcell_client.auth.auth_utils import login_interactive +from pyvcell._internal.api.vcell_client.api.bio_model_resource_api import BioModelResourceApi +from pyvcell._internal.api.vcell_client.api.simulation_resource_api import SimulationResourceApi +from pyvcell._internal.api.vcell_client.api.export_resource_api import ExportResourceApi +from pyvcell._internal.api.vcell_client.models.n5_export_request import N5ExportRequest +from pyvcell._internal.api.vcell_client.models.standard_export_info import StandardExportInfo +from pyvcell._internal.api.vcell_client.models.exportable_data_type import ExportableDataType +from pyvcell._internal.api.vcell_client.models.variable_specs import VariableSpecs +from pyvcell._internal.api.vcell_client.models.variable_mode import VariableMode +from pyvcell._internal.api.vcell_client.models.time_specs import TimeSpecs +from pyvcell._internal.api.vcell_client.models.time_mode import TimeMode + +# 1. Authenticate +api_client = login_interactive() + +# 2. Build model locally +antimony_str = """ + compartment ec = 1; + compartment cell = 2; + compartment pm = 1; + species A in cell; + species B in cell; + J0: A -> B; cell * (k1*A - k2*B) + J0 in cell; + k1 = 5.0; k2 = 2.0 + A = 10 +""" +biomodel = vc.load_antimony_str(antimony_str) +model = biomodel.model +model.get_compartment("pm").dim = 2 + +geo = vc.Geometry(name="geo", origin=(0, 0, 0), extent=(10, 10, 10), dim=3) +geo.add_sphere(name="cell_domain", radius=4, center=(5, 5, 5)) +geo.add_background(name="ec_domain") +geo.add_surface(name="pm_domain", sub_volume_1="cell_domain", sub_volume_2="ec_domain") + +app = biomodel.add_application("app1", geometry=geo) +app.map_compartment("cell", "cell_domain") +app.map_compartment("ec", "ec_domain") +app.map_species("A", init_conc="3+sin(x)", diff_coef=1.0) +app.map_species("B", init_conc="2+cos(x+y+z)", diff_coef=1.0) +sim = app.add_sim(name="sim1", duration=2.0, output_time_step=0.05, mesh_size=(50, 50, 50)) + +# 3. Save to server +vcml_str = vc.to_vcml_str(biomodel) +bm_api = BioModelResourceApi(api_client) +saved_vcml = bm_api.save_bio_model(body=vcml_str, new_name="MyRemoteModel") + +saved_biomodel = vc.load_vcml_str(saved_vcml) +bm_key = saved_biomodel.version.key +saved_app = next(a for a in saved_biomodel.applications if a.name == "app1") +sim_key = saved_app.simulations[0].version.key +sim_name = saved_app.simulations[0].name + +# 4. Start simulation +sim_api = SimulationResourceApi(api_client) +sim_api.start_simulation(sim_id=sim_key) + +# 5. Monitor progress +while True: + status_record = sim_api.get_simulation_status(sim_id=sim_key, bio_model_id=bm_key) + print(f"Status: {status_record.status}") + if status_record.status in ("COMPLETED", "FAILED", "STOPPED"): + break + time.sleep(5) + +if status_record.status != "COMPLETED": + raise RuntimeError(f"Simulation ended with status: {status_record.status}") + +# 6. Export results +export_api = ExportResourceApi(api_client) +num_time_points = int(sim.duration / sim.output_time_step) + 1 +all_times = [i * sim.output_time_step for i in range(num_time_points)] +request = N5ExportRequest( + standard_export_information=StandardExportInfo( + simulation_name=sim_name, + simulation_key=sim_key, + simulation_job=0, + variable_specs=VariableSpecs( + variable_names=["A", "B"], + mode=VariableMode.VARIABLE_MULTI, + ), + time_specs=TimeSpecs( + begin_time_index=0, + end_time_index=num_time_points - 1, + all_times=all_times, + mode=TimeMode.TIME_RANGE, + ), + ), + exportable_data_type=ExportableDataType.PDE_VARIABLE_DATA, + dataset_name="my_results", +) +job_id = export_api.export_n5(n5_export_request=request) + +while True: + events = export_api.export_status() + for event in events: + if event.job_id == job_id: + if event.event_type == "EXPORT_COMPLETE": + download_url = event.location + break + elif event.event_type == "EXPORT_FAILURE": + raise RuntimeError(f"Export failed: {event}") + else: + time.sleep(5) + continue + break + +response = requests.get(download_url) +with open("results.n5.zip", "wb") as f: + f.write(response.content) +print("Results downloaded to results.n5.zip") +``` + +## Next steps + +- [Parameter Exploration](parameter-exploration.md) — Run batch simulations with varied parameters +- [Field Data Workflows](field-data.md) — Upload experimental data and use it in simulations diff --git a/mkdocs.yml b/mkdocs.yml index 268b07c..ce2893c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -17,10 +17,12 @@ nav: - Working with SBML: guides/sbml-models.md - Complex Geometries: guides/complex-geometries.md - Parameter Exploration: guides/parameter-exploration.md + - Remote Simulations: guides/remote-simulations.md - Field Data Workflows: guides/field-data.md - Visualization & Analysis: guides/visualization.md - "Tutorial: Building a Model": guides/notebooks/building-a-model.ipynb - "Tutorial: Complex Geometries": guides/notebooks/complex-geometries.ipynb + - "Tutorial: Remote Simulations": guides/notebooks/remote-simulations.ipynb - "Tutorial: Visualization": guides/notebooks/visualization.ipynb - API Reference: - Models: reference/models.md diff --git a/tests/guides/test_notebooks.py b/tests/guides/test_notebooks.py index fa48a6f..8eb62d2 100644 --- a/tests/guides/test_notebooks.py +++ b/tests/guides/test_notebooks.py @@ -10,6 +10,8 @@ NOTEBOOKS_DIR = Path(__file__).resolve().parents[2] / "docs" / "guides" / "notebooks" +SKIP_NOTEBOOKS = {"remote-simulations"} + notebook_paths = sorted(NOTEBOOKS_DIR.glob("*.ipynb")) @@ -20,6 +22,8 @@ ) def test_notebook_executes(notebook: Path, tmp_path: Path) -> None: """Run a notebook with nbconvert --execute and assert zero exit code.""" + if notebook.stem in SKIP_NOTEBOOKS: + pytest.skip(f"{notebook.name} requires interactive auth and a live server") output = tmp_path / notebook.name result = subprocess.run( [ From ada30eab1aecdcc09f3853a16b10191e78d46b58 Mon Sep 17 00:00:00 2001 From: Jim Schaff Date: Sun, 8 Mar 2026 23:44:25 -0400 Subject: [PATCH 12/24] Update viz-concentrations image Co-Authored-By: Claude Opus 4.6 --- docs/guides/images/viz-concentrations.png | Bin 65615 -> 56465 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/guides/images/viz-concentrations.png b/docs/guides/images/viz-concentrations.png index 2b251365a5c98c9ee25c55de52cab3af005847dc..67c16cd585c080d527bea1cd258ae351c73426b1 100644 GIT binary patch literal 56465 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 ff1J_i-IPm`hr6ODj literal 65615 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 F{|3f}gc1M% From 44e55af4c34a9ea34c9b3d422e2df1f280d7aeb0 Mon Sep 17 00:00:00 2001 From: Jim Schaff Date: Mon, 9 Mar 2026 00:49:21 -0400 Subject: [PATCH 13/24] Use TensorStore to read remote N5 export results Replace file download approach with lazy chunked reads via TensorStore's HTTP driver against VCell's S3 proxy. Update guide and notebook to parse the export URL and open the N5 dataset remotely. Co-Authored-By: Claude Opus 4.6 --- .gitignore | 1 - .../guides/notebooks/remote-simulations.ipynb | 179 +++++++----------- docs/guides/remote-simulations.md | 83 ++++++-- 3 files changed, 131 insertions(+), 132 deletions(-) diff --git a/.gitignore b/.gitignore index f822c47..d857be9 100644 --- a/.gitignore +++ b/.gitignore @@ -186,4 +186,3 @@ workspace docs/guides/notebooks/workspace/ -docs/guides/notebooks/results.n5.zip diff --git a/docs/guides/notebooks/remote-simulations.ipynb b/docs/guides/notebooks/remote-simulations.ipynb index a5aaf86..3a9bf3a 100644 --- a/docs/guides/notebooks/remote-simulations.ipynb +++ b/docs/guides/notebooks/remote-simulations.ipynb @@ -24,8 +24,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T03:17:07.633891Z", - "start_time": "2026-03-09T03:17:05.643332Z" + "end_time": "2026-03-09T04:34:40.274303Z", + "start_time": "2026-03-09T04:34:38.509559Z" } }, "source": [ @@ -47,8 +47,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T03:17:08.388312Z", - "start_time": "2026-03-09T03:17:07.635280Z" + "end_time": "2026-03-09T04:34:41.024994Z", + "start_time": "2026-03-09T04:34:40.274881Z" } }, "source": "import pyvcell.vcml as vc\n\nantimony_str = \"\"\"\n compartment ec = 1;\n compartment cell = 2;\n compartment pm = 1;\n species A in cell;\n species B in cell;\n J0: A -> B; cell * (k1*A - k2*B)\n J0 in cell;\n k1 = 5.0; k2 = 2.0\n A = 10\n\"\"\"\nbiomodel = vc.load_antimony_str(antimony_str)\nmodel = biomodel.model\nmodel.get_compartment(\"pm\").dim = 2\n\ngeo = vc.Geometry(name=\"geo\", origin=(0, 0, 0), extent=(10, 10, 10), dim=3)\ngeo.add_sphere(name=\"cell_domain\", radius=4, center=(5, 5, 5))\ngeo.add_background(name=\"ec_domain\")\ngeo.add_surface(name=\"pm_domain\", sub_volume_1=\"cell_domain\", sub_volume_2=\"ec_domain\")\n\napp = biomodel.add_application(\"app1\", geometry=geo)\napp.map_compartment(\"cell\", \"cell_domain\")\napp.map_compartment(\"ec\", \"ec_domain\")\napp.map_species(\"A\", init_conc=\"3+sin(x)\", diff_coef=1.0)\napp.map_species(\"B\", init_conc=\"2+cos(x+y+z)\", diff_coef=1.0)\n\nsim = app.add_sim(name=\"sim1\", duration=2.0, output_time_step=0.05, mesh_size=(50, 50, 50))", @@ -57,15 +57,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "2026-03-09T03:17:08.362156Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "2026-03-09T04:34:40.985144Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", "Please remove the `packages` attribute from your configuration file.\n", "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", - "2026-03-08 23:17:08,365 ERROR (SBMLDocument.java:573) - There was an error accessing the sbml online validator!\n", - "2026-03-09T03:17:08.370828Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@7db7c1ba and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-09T03:17:08.373834Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@7db7c1ba and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-08 23:17:08,374 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-08 23:17:08,374 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-08 23:17:08,374 INFO (Entrypoints.java:172) - Returning from sbmlToVcell: {\"success\":true,\"message\":\"Success\"}\n" + "2026-03-09 00:34:40,988 ERROR (SBMLDocument.java:573) - There was an error accessing the sbml online validator!\n", + "2026-03-09T04:34:40.993246Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@1484e65e and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-09T04:34:40.996174Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@1484e65e and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-09 00:34:40,996 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-09 00:34:40,996 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-09 00:34:40,997 INFO (Entrypoints.java:172) - Returning from sbmlToVcell: {\"success\":true,\"message\":\"Success\"}\n" ] } ], @@ -75,8 +75,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T03:17:09.189719Z", - "start_time": "2026-03-09T03:17:08.419055Z" + "end_time": "2026-03-09T04:34:41.905696Z", + "start_time": "2026-03-09T04:34:41.058989Z" } }, "source": "from datetime import datetime\nfrom pyvcell._internal.api.vcell_client.api.bio_model_resource_api import BioModelResourceApi\n\nvcml_str = vc.to_vcml_str(biomodel)\n\nbm_api = BioModelResourceApi(api_client)\nmodel_name = f\"MyRemoteModel_{datetime.now().strftime('%Y%m%d_%H%M%S')}\"\nsaved_vcml = bm_api.save_bio_model(body=vcml_str, new_name=model_name)\nprint(f\"Saved model as: {model_name}\")", @@ -85,14 +85,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "2026-03-09T03:17:08.433364Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "2026-03-09T04:34:41.074412Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", "Please remove the `packages` attribute from your configuration file.\n", "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", - "2026-03-09T03:17:08.436947Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@32604cea and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-09T03:17:08.631082Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@32604cea and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-08 23:17:08,631 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-08 23:17:08,640 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", - "Saved model as: MyRemoteModel_20260308_231708\n" + "2026-03-09T04:34:41.078702Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@2c56e564 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-09T04:34:41.274695Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@2c56e564 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-09 00:34:41,275 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-09 00:34:41,285 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", + "Saved model as: MyRemoteModel_20260309_003441\n" ] } ], @@ -102,8 +102,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T03:17:09.207898Z", - "start_time": "2026-03-09T03:17:09.194421Z" + "end_time": "2026-03-09T04:34:41.926350Z", + "start_time": "2026-03-09T04:34:41.910648Z" } }, "source": "saved_biomodel = vc.load_vcml_str(saved_vcml)\nbm_key = saved_biomodel.version.key\nsaved_app = next(a for a in saved_biomodel.applications if a.name == \"app1\")\nsim_key = saved_app.simulations[0].version.key\nsim_name = saved_app.simulations[0].name\nprint(f\"BioModel key: {bm_key}, Simulation key: {sim_key}\")", @@ -112,7 +112,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "BioModel key: 306560214, Simulation key: 306560211\n" + "BioModel key: 306566374, Simulation key: 306566371\n" ] } ], @@ -129,8 +129,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T03:17:09.277386Z", - "start_time": "2026-03-09T03:17:09.208499Z" + "end_time": "2026-03-09T04:34:42.003514Z", + "start_time": "2026-03-09T04:34:41.927873Z" } }, "source": "from pyvcell._internal.api.vcell_client.api.simulation_resource_api import SimulationResourceApi\n\nsim_api = SimulationResourceApi(api_client)\nsim_api.start_simulation(sim_id=sim_key)\nprint(\"Simulation started\")", @@ -156,8 +156,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T03:17:39.585576Z", - "start_time": "2026-03-09T03:17:09.278583Z" + "end_time": "2026-03-09T04:35:12.297403Z", + "start_time": "2026-03-09T04:34:42.004925Z" } }, "source": [ @@ -185,10 +185,10 @@ "text": [ "Status: Status.WAITING, Details: waiting to be dispatched\n", "Status: Status.RUNNING, Details: running...\n", - "Status: Status.RUNNING, Details: initializing mesh\n", - "Status: Status.RUNNING, Details: simulation [SimID_306560211_0_] started\n", - "Status: Status.RUNNING, Details: simulation [SimID_306560211_0_] started\n", - "Status: Status.RUNNING, Details: simulation [SimID_306560211_0_] started\n", + "Status: Status.RUNNING, Details: simulation [SimID_306566371_0_] started\n", + "Status: Status.RUNNING, Details: simulation [SimID_306566371_0_] started\n", + "Status: Status.RUNNING, Details: simulation [SimID_306566371_0_] started\n", + "Status: Status.RUNNING, Details: 1.8\n", "Status: Status.COMPLETED, Details: completed\n" ] } @@ -206,8 +206,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T03:17:39.658804Z", - "start_time": "2026-03-09T03:17:39.598623Z" + "end_time": "2026-03-09T04:35:12.355770Z", + "start_time": "2026-03-09T04:35:12.309435Z" } }, "source": "from pyvcell._internal.api.vcell_client.api.export_resource_api import ExportResourceApi\nfrom pyvcell._internal.api.vcell_client.models.n5_export_request import N5ExportRequest\nfrom pyvcell._internal.api.vcell_client.models.standard_export_info import StandardExportInfo\nfrom pyvcell._internal.api.vcell_client.models.exportable_data_type import ExportableDataType\nfrom pyvcell._internal.api.vcell_client.models.variable_specs import VariableSpecs\nfrom pyvcell._internal.api.vcell_client.models.variable_mode import VariableMode\nfrom pyvcell._internal.api.vcell_client.models.time_specs import TimeSpecs\nfrom pyvcell._internal.api.vcell_client.models.time_mode import TimeMode\n\nexport_api = ExportResourceApi(api_client)\n\n# Compute time indices from simulation parameters\nnum_time_points = int(sim.duration / sim.output_time_step) + 1\nall_times = [i * sim.output_time_step for i in range(num_time_points)]\n\nrequest = N5ExportRequest(\n standard_export_information=StandardExportInfo(\n simulation_name=sim_name,\n simulation_key=sim_key,\n simulation_job=0,\n variable_specs=VariableSpecs(\n variable_names=[\"A\", \"B\"],\n mode=VariableMode.VARIABLE_MULTI,\n ),\n time_specs=TimeSpecs(\n begin_time_index=0,\n end_time_index=num_time_points - 1,\n all_times=all_times,\n mode=TimeMode.TIME_RANGE,\n ),\n ),\n exportable_data_type=ExportableDataType.PDE_VARIABLE_DATA,\n dataset_name=\"my_results\",\n)\n\njob_id = export_api.export_n5(n5_export_request=request)\nprint(f\"Export job started: {job_id}\")", @@ -216,7 +216,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Export job started: 6645597857\n" + "Export job started: 3572129570\n" ] } ], @@ -226,111 +226,62 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T03:27:28.829558Z", - "start_time": "2026-03-09T03:23:57.829942Z" + "end_time": "2026-03-09T04:46:26.399405Z", + "start_time": "2026-03-09T04:46:26.201591Z" } }, "source": [ - "import requests\n", - "\n", "while True:\n", " events = export_api.export_status()\n", " for event in events:\n", " if event.job_id == job_id:\n", " if event.event_type == \"EXPORT_COMPLETE\":\n", - " download_url = event.location\n", - " print(f\"Export complete: {download_url}\")\n", + " export_url = event.location\n", + " print(f\"Export complete: {export_url}\")\n", " break\n", " elif event.event_type == \"EXPORT_FAILURE\":\n", " raise RuntimeError(f\"Export failed: {event}\")\n", - " else:\n", - " print(f\"Export event in progress: status={event.event_type}, job_id={job_id}\")\n", " else:\n", " time.sleep(5)\n", " continue\n", - " break\n", - "\n", - "response = requests.get(download_url)\n", - "with open(\"results.n5.zip\", \"wb\") as f:\n", - " f.write(response.content)\n", - "print(f\"Results downloaded to results.n5.zip ({len(response.content)} bytes)\")" + " break" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Export event in progress: status=ExportProgressType.EXPORT_ASSEMBLING, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_START, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export event in progress: status=ExportProgressType.EXPORT_PROGRESS, job_id=6645597857\n", - "Export complete: https://vcell.cam.uchc.edu/n5Data/schaff/41cc1234ce3540f.n5?dataSetName=6645597857\n", - "Results downloaded to results.n5.zip (166 bytes)\n" + "Export complete: https://vcell.cam.uchc.edu/n5Data/schaff/608917899885cb0.n5?dataSetName=3572129570\n" ] } ], "execution_count": 12 + }, + { + "cell_type": "markdown", + "source": "## Read N5 results with TensorStore\n\nThe export URL is not a direct download — it points to a remote N5 dataset served via S3-compatible storage. Parse the URL and open with TensorStore for lazy chunked reads:", + "metadata": {} + }, + { + "cell_type": "code", + "source": "from urllib.parse import urlparse, parse_qs\nimport tensorstore as ts\n\nparsed = urlparse(export_url)\npath_parts = parsed.path.strip(\"/\").split(\"/\", 1)\nbucket = path_parts[0] # \"n5Data\"\ncontainer_key = path_parts[1] # \"{user}/{hash}.n5\"\ns3_endpoint = f\"{parsed.scheme}://{parsed.netloc}\" # \"https://vcell.cam.uchc.edu\"\ndataset_name = parse_qs(parsed.query)[\"dataSetName\"][0] # export job ID\n\nstore = ts.open({\n \"driver\": \"n5\",\n \"kvstore\": {\n \"driver\": \"http\",\n \"base_url\": f\"{s3_endpoint}/{bucket}/{container_key}/{dataset_name}\",\n },\n \"open\": True,\n}).result()\n\nprint(f\"Shape: {store.shape}, Dtype: {store.dtype}\")\n# Shape is (X, Y, Variables, Z, Time)\n# Channels 0..N-2 are exported variables (A, B), channel N-1 is the domain mask\n\n# Read a slice — e.g. variable A, all X/Y, first z-slice, first timepoint\nslice_data = store[:, :, 0, 0, 0].read().result()\nprint(f\"Slice shape: {slice_data.shape}\")", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-09T04:46:30.945280Z", + "start_time": "2026-03-09T04:46:30.802102Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape: (98, 98, 3, 98, 41), Dtype: dtype(\"float64\")\n", + "Slice shape: (98, 98)\n" + ] + } + ], + "execution_count": 13 } ], "metadata": { diff --git a/docs/guides/remote-simulations.md b/docs/guides/remote-simulations.md index 961f2aa..9119c85 100644 --- a/docs/guides/remote-simulations.md +++ b/docs/guides/remote-simulations.md @@ -128,7 +128,7 @@ A simulation can also end in `FAILED` or `STOPPED`. ## Export results (N5 format) -Once the simulation completes, export the results in N5 format (ImageJ-compatible): +Once the simulation completes, export the results in N5 format. The server writes the N5 dataset to S3-compatible storage and returns a URL you can read remotely with `zarr` and `s3fs`: ```python from pyvcell._internal.api.vcell_client.api.export_resource_api import ExportResourceApi @@ -170,18 +170,16 @@ job_id = export_api.export_n5(n5_export_request=request) print(f"Export job started: {job_id}") ``` -Poll for export completion, then download: +Poll for export completion: ```python -import requests - while True: events = export_api.export_status() for event in events: if event.job_id == job_id: if event.event_type == "EXPORT_COMPLETE": - download_url = event.location - print(f"Export complete: {download_url}") + export_url = event.location + print(f"Export complete: {export_url}") break elif event.event_type == "EXPORT_FAILURE": raise RuntimeError(f"Export failed: {event}") @@ -189,18 +187,53 @@ while True: time.sleep(5) continue break +``` + +## Read N5 results with TensorStore -# Download the exported file -response = requests.get(download_url) -with open("results.n5.zip", "wb") as f: - f.write(response.content) +The export URL is not a direct download — it points to a remote N5 dataset served via S3-compatible storage. Parse the URL to extract the S3 endpoint, bucket, container path, and dataset name: + +```python +from urllib.parse import urlparse, parse_qs + +parsed = urlparse(export_url) +path_parts = parsed.path.strip("/").split("/", 1) +bucket = path_parts[0] # "n5Data" +container_key = path_parts[1] # "{user}/{hash}.n5" +s3_endpoint = f"{parsed.scheme}://{parsed.netloc}" # "https://vcell.cam.uchc.edu" +dataset_name = parse_qs(parsed.query)["dataSetName"][0] # export job ID +``` + +Open the N5 dataset with TensorStore. Reads are lazy — only the N5 blocks you access are fetched: + +```python +import tensorstore as ts + +store = ts.open({ + "driver": "n5", + "kvstore": { + "driver": "http", + "base_url": f"{s3_endpoint}/{bucket}/{container_key}/{dataset_name}", + }, + "open": True, +}).result() + +print(f"Shape: {store.shape}, Dtype: {store.dtype}") +# Shape is (X, Y, Variables, Z, Time) +# Channels 0..N-2 are exported variables (A, B), channel N-1 is the domain mask + +# Read a slice — e.g. variable A, all X/Y, first z-slice, first timepoint +slice_data = store[:, :, 0, 0, 0].read().result() ``` ## Complete example ```python import time -import requests +from datetime import datetime +from urllib.parse import urlparse, parse_qs + +import tensorstore as ts import pyvcell.vcml as vc from pyvcell._internal.api.vcell_client.auth.auth_utils import login_interactive from pyvcell._internal.api.vcell_client.api.bio_model_resource_api import BioModelResourceApi @@ -248,7 +281,8 @@ sim = app.add_sim(name="sim1", duration=2.0, output_time_step=0.05, mesh_size=(5 # 3. Save to server vcml_str = vc.to_vcml_str(biomodel) bm_api = BioModelResourceApi(api_client) -saved_vcml = bm_api.save_bio_model(body=vcml_str, new_name="MyRemoteModel") +model_name = f"MyRemoteModel_{datetime.now().strftime('%Y%m%d_%H%M%S')}" +saved_vcml = bm_api.save_bio_model(body=vcml_str, new_name=model_name) saved_biomodel = vc.load_vcml_str(saved_vcml) bm_key = saved_biomodel.version.key @@ -301,7 +335,7 @@ while True: for event in events: if event.job_id == job_id: if event.event_type == "EXPORT_COMPLETE": - download_url = event.location + export_url = event.location break elif event.event_type == "EXPORT_FAILURE": raise RuntimeError(f"Export failed: {event}") @@ -310,10 +344,25 @@ while True: continue break -response = requests.get(download_url) -with open("results.n5.zip", "wb") as f: - f.write(response.content) -print("Results downloaded to results.n5.zip") +# 7. Read N5 results with TensorStore (lazy chunked reads) +parsed = urlparse(export_url) +path_parts = parsed.path.strip("/").split("/", 1) +bucket = path_parts[0] +container_key = path_parts[1] +s3_endpoint = f"{parsed.scheme}://{parsed.netloc}" +dataset_name = parse_qs(parsed.query)["dataSetName"][0] + +store = ts.open({ + "driver": "n5", + "kvstore": { + "driver": "http", + "base_url": f"{s3_endpoint}/{bucket}/{container_key}/{dataset_name}", + }, + "open": True, +}).result() +print(f"Results shape: {store.shape}, dtype: {store.dtype}") +# Shape is (X, Y, Variables, Z, Time) +# Channels 0..N-2 are exported variables (A, B), channel N-1 is the domain mask ``` ## Next steps From 2c248c62f1c3955131c5a0c05c941f8fdb2dbcb6 Mon Sep 17 00:00:00 2001 From: jcschaff Date: Wed, 18 Mar 2026 23:25:12 -0400 Subject: [PATCH 14/24] Add high-level convenience API for remote VCell simulations Introduce the `vcml_remote` module to automate the multi-step process of saving a model, starting a simulation, polling for completion, and exporting results to N5. The new `run_remote` function provides a single-call entry point that returns a TensorStore, while composable functions like `save_and_start` and `export_n5` offer more granular control. Update the tutorial notebook and documentation to demonstrate this simplified workflow. Co-Authored-By: Claude Opus 4.6 --- .../guides/notebooks/remote-simulations.ipynb | 131 +++++--- docs/guides/remote-simulations.md | 34 +++ pyvcell/vcml/__init__.py | 5 + pyvcell/vcml/vcml_remote.py | 288 ++++++++++++++++++ 4 files changed, 418 insertions(+), 40 deletions(-) create mode 100644 pyvcell/vcml/vcml_remote.py diff --git a/docs/guides/notebooks/remote-simulations.ipynb b/docs/guides/notebooks/remote-simulations.ipynb index 3a9bf3a..db9e87b 100644 --- a/docs/guides/notebooks/remote-simulations.ipynb +++ b/docs/guides/notebooks/remote-simulations.ipynb @@ -24,8 +24,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T04:34:40.274303Z", - "start_time": "2026-03-09T04:34:38.509559Z" + "end_time": "2026-03-09T12:59:50.326001Z", + "start_time": "2026-03-09T12:59:48.311989Z" } }, "source": [ @@ -47,8 +47,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T04:34:41.024994Z", - "start_time": "2026-03-09T04:34:40.274881Z" + "end_time": "2026-03-09T12:59:51.116135Z", + "start_time": "2026-03-09T12:59:50.326519Z" } }, "source": "import pyvcell.vcml as vc\n\nantimony_str = \"\"\"\n compartment ec = 1;\n compartment cell = 2;\n compartment pm = 1;\n species A in cell;\n species B in cell;\n J0: A -> B; cell * (k1*A - k2*B)\n J0 in cell;\n k1 = 5.0; k2 = 2.0\n A = 10\n\"\"\"\nbiomodel = vc.load_antimony_str(antimony_str)\nmodel = biomodel.model\nmodel.get_compartment(\"pm\").dim = 2\n\ngeo = vc.Geometry(name=\"geo\", origin=(0, 0, 0), extent=(10, 10, 10), dim=3)\ngeo.add_sphere(name=\"cell_domain\", radius=4, center=(5, 5, 5))\ngeo.add_background(name=\"ec_domain\")\ngeo.add_surface(name=\"pm_domain\", sub_volume_1=\"cell_domain\", sub_volume_2=\"ec_domain\")\n\napp = biomodel.add_application(\"app1\", geometry=geo)\napp.map_compartment(\"cell\", \"cell_domain\")\napp.map_compartment(\"ec\", \"ec_domain\")\napp.map_species(\"A\", init_conc=\"3+sin(x)\", diff_coef=1.0)\napp.map_species(\"B\", init_conc=\"2+cos(x+y+z)\", diff_coef=1.0)\n\nsim = app.add_sim(name=\"sim1\", duration=2.0, output_time_step=0.05, mesh_size=(50, 50, 50))", @@ -57,15 +57,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "2026-03-09T04:34:40.985144Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "2026-03-09T12:59:51.082123Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", "Please remove the `packages` attribute from your configuration file.\n", "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", - "2026-03-09 00:34:40,988 ERROR (SBMLDocument.java:573) - There was an error accessing the sbml online validator!\n", - "2026-03-09T04:34:40.993246Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@1484e65e and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-09T04:34:40.996174Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@1484e65e and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-09 00:34:40,996 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-09 00:34:40,996 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-09 00:34:40,997 INFO (Entrypoints.java:172) - Returning from sbmlToVcell: {\"success\":true,\"message\":\"Success\"}\n" + "2026-03-09 08:59:51,085 ERROR (SBMLDocument.java:573) - There was an error accessing the sbml online validator!\n", + "2026-03-09T12:59:51.090261Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@67b1217b and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-09T12:59:51.093216Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@67b1217b and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-09 08:59:51,093 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-09 08:59:51,093 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-09 08:59:51,094 INFO (Entrypoints.java:172) - Returning from sbmlToVcell: {\"success\":true,\"message\":\"Success\"}\n" ] } ], @@ -75,8 +75,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T04:34:41.905696Z", - "start_time": "2026-03-09T04:34:41.058989Z" + "end_time": "2026-03-09T12:59:52.619682Z", + "start_time": "2026-03-09T12:59:51.154384Z" } }, "source": "from datetime import datetime\nfrom pyvcell._internal.api.vcell_client.api.bio_model_resource_api import BioModelResourceApi\n\nvcml_str = vc.to_vcml_str(biomodel)\n\nbm_api = BioModelResourceApi(api_client)\nmodel_name = f\"MyRemoteModel_{datetime.now().strftime('%Y%m%d_%H%M%S')}\"\nsaved_vcml = bm_api.save_bio_model(body=vcml_str, new_name=model_name)\nprint(f\"Saved model as: {model_name}\")", @@ -85,14 +85,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "2026-03-09T04:34:41.074412Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "2026-03-09T12:59:51.168514Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", "Please remove the `packages` attribute from your configuration file.\n", "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", - "2026-03-09T04:34:41.078702Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@2c56e564 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-09T04:34:41.274695Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@2c56e564 and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", - "2026-03-09 00:34:41,275 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", - "2026-03-09 00:34:41,285 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", - "Saved model as: MyRemoteModel_20260309_003441\n" + "2026-03-09T12:59:51.171992Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@3248a0bf and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-09T12:59:51.363477Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@3248a0bf and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-09 08:59:51,364 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-09 08:59:51,373 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", + "Saved model as: MyRemoteModel_20260309_085951\n" ] } ], @@ -102,8 +102,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T04:34:41.926350Z", - "start_time": "2026-03-09T04:34:41.910648Z" + "end_time": "2026-03-09T12:59:52.638062Z", + "start_time": "2026-03-09T12:59:52.625336Z" } }, "source": "saved_biomodel = vc.load_vcml_str(saved_vcml)\nbm_key = saved_biomodel.version.key\nsaved_app = next(a for a in saved_biomodel.applications if a.name == \"app1\")\nsim_key = saved_app.simulations[0].version.key\nsim_name = saved_app.simulations[0].name\nprint(f\"BioModel key: {bm_key}, Simulation key: {sim_key}\")", @@ -112,7 +112,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "BioModel key: 306566374, Simulation key: 306566371\n" + "BioModel key: 306602051, Simulation key: 306602048\n" ] } ], @@ -129,8 +129,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T04:34:42.003514Z", - "start_time": "2026-03-09T04:34:41.927873Z" + "end_time": "2026-03-09T12:59:52.767952Z", + "start_time": "2026-03-09T12:59:52.639633Z" } }, "source": "from pyvcell._internal.api.vcell_client.api.simulation_resource_api import SimulationResourceApi\n\nsim_api = SimulationResourceApi(api_client)\nsim_api.start_simulation(sim_id=sim_key)\nprint(\"Simulation started\")", @@ -156,8 +156,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T04:35:12.297403Z", - "start_time": "2026-03-09T04:34:42.004925Z" + "end_time": "2026-03-09T13:00:43.209502Z", + "start_time": "2026-03-09T12:59:52.769842Z" } }, "source": [ @@ -185,10 +185,14 @@ "text": [ "Status: Status.WAITING, Details: waiting to be dispatched\n", "Status: Status.RUNNING, Details: running...\n", - "Status: Status.RUNNING, Details: simulation [SimID_306566371_0_] started\n", - "Status: Status.RUNNING, Details: simulation [SimID_306566371_0_] started\n", - "Status: Status.RUNNING, Details: simulation [SimID_306566371_0_] started\n", - "Status: Status.RUNNING, Details: 1.8\n", + "Status: Status.RUNNING, Details: running...\n", + "Status: Status.RUNNING, Details: running...\n", + "Status: Status.RUNNING, Details: simulation [SimID_306602048_0_] started\n", + "Status: Status.RUNNING, Details: simulation [SimID_306602048_0_] started\n", + "Status: Status.RUNNING, Details: simulation [SimID_306602048_0_] started\n", + "Status: Status.RUNNING, Details: 1.35\n", + "Status: Status.RUNNING, Details: 1.35\n", + "Status: Status.RUNNING, Details: 1.35\n", "Status: Status.COMPLETED, Details: completed\n" ] } @@ -206,8 +210,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T04:35:12.355770Z", - "start_time": "2026-03-09T04:35:12.309435Z" + "end_time": "2026-03-09T13:00:43.280494Z", + "start_time": "2026-03-09T13:00:43.223492Z" } }, "source": "from pyvcell._internal.api.vcell_client.api.export_resource_api import ExportResourceApi\nfrom pyvcell._internal.api.vcell_client.models.n5_export_request import N5ExportRequest\nfrom pyvcell._internal.api.vcell_client.models.standard_export_info import StandardExportInfo\nfrom pyvcell._internal.api.vcell_client.models.exportable_data_type import ExportableDataType\nfrom pyvcell._internal.api.vcell_client.models.variable_specs import VariableSpecs\nfrom pyvcell._internal.api.vcell_client.models.variable_mode import VariableMode\nfrom pyvcell._internal.api.vcell_client.models.time_specs import TimeSpecs\nfrom pyvcell._internal.api.vcell_client.models.time_mode import TimeMode\n\nexport_api = ExportResourceApi(api_client)\n\n# Compute time indices from simulation parameters\nnum_time_points = int(sim.duration / sim.output_time_step) + 1\nall_times = [i * sim.output_time_step for i in range(num_time_points)]\n\nrequest = N5ExportRequest(\n standard_export_information=StandardExportInfo(\n simulation_name=sim_name,\n simulation_key=sim_key,\n simulation_job=0,\n variable_specs=VariableSpecs(\n variable_names=[\"A\", \"B\"],\n mode=VariableMode.VARIABLE_MULTI,\n ),\n time_specs=TimeSpecs(\n begin_time_index=0,\n end_time_index=num_time_points - 1,\n all_times=all_times,\n mode=TimeMode.TIME_RANGE,\n ),\n ),\n exportable_data_type=ExportableDataType.PDE_VARIABLE_DATA,\n dataset_name=\"my_results\",\n)\n\njob_id = export_api.export_n5(n5_export_request=request)\nprint(f\"Export job started: {job_id}\")", @@ -216,7 +220,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Export job started: 3572129570\n" + "Export job started: 4919316062\n" ] } ], @@ -226,8 +230,8 @@ "cell_type": "code", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T04:46:26.399405Z", - "start_time": "2026-03-09T04:46:26.201591Z" + "end_time": "2026-03-09T13:06:19.664644Z", + "start_time": "2026-03-09T13:00:43.281212Z" } }, "source": [ @@ -251,11 +255,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "Export complete: https://vcell.cam.uchc.edu/n5Data/schaff/608917899885cb0.n5?dataSetName=3572129570\n" + "Export complete: https://vcell.cam.uchc.edu/n5Data/schaff/ffea0744240babd.n5?dataSetName=4919316062\n" ] } ], - "execution_count": 12 + "execution_count": 8 }, { "cell_type": "markdown", @@ -267,8 +271,8 @@ "source": "from urllib.parse import urlparse, parse_qs\nimport tensorstore as ts\n\nparsed = urlparse(export_url)\npath_parts = parsed.path.strip(\"/\").split(\"/\", 1)\nbucket = path_parts[0] # \"n5Data\"\ncontainer_key = path_parts[1] # \"{user}/{hash}.n5\"\ns3_endpoint = f\"{parsed.scheme}://{parsed.netloc}\" # \"https://vcell.cam.uchc.edu\"\ndataset_name = parse_qs(parsed.query)[\"dataSetName\"][0] # export job ID\n\nstore = ts.open({\n \"driver\": \"n5\",\n \"kvstore\": {\n \"driver\": \"http\",\n \"base_url\": f\"{s3_endpoint}/{bucket}/{container_key}/{dataset_name}\",\n },\n \"open\": True,\n}).result()\n\nprint(f\"Shape: {store.shape}, Dtype: {store.dtype}\")\n# Shape is (X, Y, Variables, Z, Time)\n# Channels 0..N-2 are exported variables (A, B), channel N-1 is the domain mask\n\n# Read a slice — e.g. variable A, all X/Y, first z-slice, first timepoint\nslice_data = store[:, :, 0, 0, 0].read().result()\nprint(f\"Slice shape: {slice_data.shape}\")", "metadata": { "ExecuteTime": { - "end_time": "2026-03-09T04:46:30.945280Z", - "start_time": "2026-03-09T04:46:30.802102Z" + "end_time": "2026-03-09T13:06:19.913631Z", + "start_time": "2026-03-09T13:06:19.673180Z" } }, "outputs": [ @@ -281,7 +285,54 @@ ] } ], - "execution_count": 13 + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": "## Convenience API\n\nThe steps above (save, start, monitor, export, open TensorStore) can be replaced with a few convenience functions from `pyvcell.vcml`:\n\n```python\n# One-liner: save, run, export, and open TensorStore\nstore = vc.run_remote(api_client, biomodel, \"sim1\")\n\n# Or composable:\nsaved_bm, saved_sim = vc.save_and_start(api_client, biomodel, \"sim1\")\nvc.wait_for_simulation(api_client, saved_bm, saved_sim)\nstore = vc.export_n5(api_client, saved_sim, biomodel=saved_bm)\n```", + "metadata": {} + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-09T13:24:18.971823Z", + "start_time": "2026-03-09T13:17:59.723184Z" + } + }, + "cell_type": "code", + "source": "# One-liner: save, run, export, and open TensorStore\nmodel_name = f\"MyRemoteModel_{datetime.now().strftime('%Y%m%d_%H%M%S')}\"\nstore = vc.run_remote(api_client, biomodel, \"sim1\", model_name=model_name, on_progress=print)\nprint(f\"Shape: {store.shape}, Dtype: {store.dtype}\")", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-03-09T13:17:59.738617Z main WARN The use of package scanning to locate Log4j plugins is deprecated.\n", + "Please remove the `packages` attribute from your configuration file.\n", + "See https://logging.apache.org/log4j/2.x/faq.html#package-scanning for details.\n", + "2026-03-09T13:17:59.742812Z main WARN The Logger cbit.vcell.model.Kinetics was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@ae32def and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-09T13:17:59.931398Z main WARN The Logger cbit.vcell.mapping.AbstractMathMapping was created with the message factory org.apache.logging.log4j.message.ReusableMessageFactory@ae32def and is now requested with a null message factory (defaults to org.apache.logging.log4j.message.ParameterizedMessageFactory), which may create log events with unexpected formatting.\n", + "2026-03-09 09:17:59,932 INFO (DiffEquMathMapping.java:1457) - WARNING:::: MathMapping.refreshMathDescription() ... assigning boundary condition types not unique\n", + "2026-03-09 09:17:59,941 INFO (Entrypoints.java:200) - Returning from vcellToVcml: {\"success\":true,\"message\":\"Success\"}\n", + "Saving biomodel to server...\n", + "Starting simulation...\n", + "Status: Status.WAITING, Details: waiting to be dispatched\n", + "Status: Status.RUNNING, Details: running...\n", + "Status: Status.RUNNING, Details: initializing mesh\n", + "Status: Status.RUNNING, Details: simulation [SimID_306603569_0_] started\n", + "Status: Status.RUNNING, Details: simulation [SimID_306603569_0_] started\n", + "Status: Status.RUNNING, Details: simulation [SimID_306603569_0_] started\n", + "Status: Status.RUNNING, Details: 1.35\n", + "Status: Status.RUNNING, Details: 1.35\n", + "Status: Status.RUNNING, Details: 1.35\n", + "Status: Status.COMPLETED, Details: completed\n", + "Starting N5 export...\n", + "Export job started: 4957758156\n", + "Export complete: https://vcell.cam.uchc.edu/n5Data/schaff/98e993615baa16f.n5?dataSetName=4957758156\n", + "Shape: (98, 98, 3, 98, 41), Dtype: dtype(\"float64\")\n" + ] + } + ], + "execution_count": 11 } ], "metadata": { diff --git a/docs/guides/remote-simulations.md b/docs/guides/remote-simulations.md index 9119c85..4d74bca 100644 --- a/docs/guides/remote-simulations.md +++ b/docs/guides/remote-simulations.md @@ -365,6 +365,40 @@ print(f"Results shape: {store.shape}, dtype: {store.dtype}") # Channels 0..N-2 are exported variables (A, B), channel N-1 is the domain mask ``` +## Convenience API + +The `pyvcell.vcml` module provides high-level functions that wrap the steps above into a few calls: + +```python +import pyvcell.vcml as vc +from pyvcell._internal.api.vcell_client.auth.auth_utils import login_interactive + +api_client = login_interactive() + +# ... build biomodel and sim as above ... + +# One call does everything: save, run, export, and open TensorStore +store = vc.run_remote(api_client, biomodel, "sim1") +data = store[:, :, 0, 0, 0].read().result() +``` + +Or use the composable functions for more control: + +```python +saved_bm, saved_sim = vc.save_and_start(api_client, biomodel, "sim1") +vc.wait_for_simulation(api_client, saved_bm, saved_sim) +store = vc.export_n5(api_client, saved_sim, biomodel=saved_bm) +``` + +| Function | Purpose | Returns | +|---|---|---| +| `save_and_start()` | Save biomodel + start simulation | `(Biomodel, Simulation)` with version keys | +| `wait_for_simulation()` | Poll until completed/failed/stopped | `None` (raises on failure) | +| `export_n5()` | Export + poll + open TensorStore | `TensorStore` | +| `run_remote()` | All three chained | `TensorStore` | + +All functions accept an optional `on_progress` callback and `timeout` parameter. + ## Next steps - [Parameter Exploration](parameter-exploration.md) — Run batch simulations with varied parameters diff --git a/pyvcell/vcml/__init__.py b/pyvcell/vcml/__init__.py index b266aa8..78a1c5f 100644 --- a/pyvcell/vcml/__init__.py +++ b/pyvcell/vcml/__init__.py @@ -45,6 +45,7 @@ write_vcml_file, ) from pyvcell.vcml.vcml_reader import VcmlReader +from pyvcell.vcml.vcml_remote import export_n5, run_remote, save_and_start, wait_for_simulation from pyvcell.vcml.vcml_simulation import simulate from pyvcell.vcml.vcml_writer import VcmlWriter from pyvcell.vcml.workspace import get_workspace_dir, set_workspace_dir @@ -92,6 +93,10 @@ "get_workspace_dir", "set_workspace_dir", "simulate", + "run_remote", + "save_and_start", + "wait_for_simulation", + "export_n5", "Field", "load_vcml_url", "load_sbml_url", diff --git a/pyvcell/vcml/vcml_remote.py b/pyvcell/vcml/vcml_remote.py new file mode 100644 index 0000000..c56b847 --- /dev/null +++ b/pyvcell/vcml/vcml_remote.py @@ -0,0 +1,288 @@ +from __future__ import annotations + +import time +from collections.abc import Callable +from urllib.parse import parse_qs, urlparse + +from tensorstore._tensorstore import TensorStore # type: ignore[import-untyped] + +from pyvcell._internal.api.vcell_client.api.bio_model_resource_api import BioModelResourceApi +from pyvcell._internal.api.vcell_client.api.export_resource_api import ExportResourceApi +from pyvcell._internal.api.vcell_client.api.simulation_resource_api import SimulationResourceApi +from pyvcell._internal.api.vcell_client.api_client import ApiClient +from pyvcell._internal.api.vcell_client.models.exportable_data_type import ExportableDataType +from pyvcell._internal.api.vcell_client.models.n5_export_request import N5ExportRequest +from pyvcell._internal.api.vcell_client.models.standard_export_info import StandardExportInfo +from pyvcell._internal.api.vcell_client.models.status import Status +from pyvcell._internal.api.vcell_client.models.time_mode import TimeMode +from pyvcell._internal.api.vcell_client.models.time_specs import TimeSpecs +from pyvcell._internal.api.vcell_client.models.variable_mode import VariableMode +from pyvcell._internal.api.vcell_client.models.variable_specs import VariableSpecs +from pyvcell._internal.simdata.n5_data import vcell_n5_datastore +from pyvcell.vcml.models import Application, Biomodel, Simulation +from pyvcell.vcml.utils import load_vcml_str, to_vcml_str + +_TERMINAL_STATUSES = {Status.COMPLETED, Status.FAILED, Status.STOPPED} + + +def _find_simulation(biomodel: Biomodel, sim_name: str) -> tuple[Application, Simulation]: + """Find a simulation by name across all applications.""" + for app in biomodel.applications: + for sim in app.simulations: + if sim.name == sim_name: + return app, sim + raise ValueError(f"Simulation '{sim_name}' not found in biomodel '{biomodel.name}'") + + +def _find_app_for_simulation(biomodel: Biomodel, simulation: Simulation) -> Application: + """Find the application that contains a simulation.""" + for app in biomodel.applications: + for sim in app.simulations: + if sim.name == simulation.name: + return app + raise ValueError(f"Simulation '{simulation.name}' not found in biomodel '{biomodel.name}'") + + +def _open_n5_from_export_url(url: str) -> TensorStore: + """Parse an N5 export URL and open via TensorStore.""" + parsed = urlparse(url) + path_parts = parsed.path.strip("/").split("/", 1) + container_key = path_parts[1] # "{user}/{hash}.n5" + base_url = f"{parsed.scheme}://{parsed.netloc}/{path_parts[0]}/{container_key}" + dataset_name = parse_qs(parsed.query)["dataSetName"][0] + return vcell_n5_datastore(base_url=base_url, dataset_name=dataset_name) + + +def save_and_start( + api_client: ApiClient, + biomodel: Biomodel, + simulation: Simulation | str, + model_name: str | None = None, + on_progress: Callable[[str], None] | None = None, +) -> tuple[Biomodel, Simulation]: + """Save a biomodel to the VCell server and start a simulation. + + Args: + api_client: Authenticated API client from ``login_interactive()``. + biomodel: The biomodel to save. + simulation: Simulation object or name string identifying the simulation to start. + model_name: Name for the saved model on the server. Defaults to ``biomodel.name``. + on_progress: Optional callback for status messages. + + Returns: + A tuple of (saved_biomodel, saved_simulation) with server-assigned version keys. + """ + sim_name = simulation if isinstance(simulation, str) else simulation.name + + # Serialize and save + vcml_str = to_vcml_str(biomodel) + if on_progress: + on_progress("Saving biomodel to server...") + + bm_api = BioModelResourceApi(api_client) + saved_vcml = bm_api.save_bio_model(body=vcml_str, new_name=model_name or biomodel.name) + + # Parse saved model to get version keys + saved_biomodel = load_vcml_str(saved_vcml) + _app, saved_sim = _find_simulation(saved_biomodel, sim_name) + + if saved_sim.version is None or saved_sim.version.key is None: + raise RuntimeError("Server did not assign a version key to the simulation") + + # Start + if on_progress: + on_progress("Starting simulation...") + sim_api = SimulationResourceApi(api_client) + sim_api.start_simulation(sim_id=saved_sim.version.key) + + return saved_biomodel, saved_sim + + +def wait_for_simulation( + api_client: ApiClient, + biomodel: Biomodel, + simulation: Simulation, + poll_interval: float = 5.0, + timeout: float | None = None, + on_progress: Callable[[str], None] | None = None, +) -> None: + """Poll simulation status until it reaches a terminal state. + + Args: + api_client: Authenticated API client. + biomodel: Saved biomodel (must have ``version.key``). + simulation: Saved simulation (must have ``version.key``). + poll_interval: Seconds between status polls. + timeout: Maximum seconds to wait. ``None`` means wait indefinitely. + on_progress: Optional callback receiving status strings. + + Raises: + RuntimeError: If the simulation fails, is stopped, or times out. + ValueError: If the biomodel or simulation is missing version keys. + """ + if biomodel.version is None or biomodel.version.key is None: + raise ValueError("biomodel must have a version key (save it to the server first)") + if simulation.version is None or simulation.version.key is None: + raise ValueError("simulation must have a version key (save it to the server first)") + + sim_api = SimulationResourceApi(api_client) + start_time = time.monotonic() + + while True: + status_record = sim_api.get_simulation_status( + sim_id=simulation.version.key, + bio_model_id=biomodel.version.key, + ) + status = status_record.status + if on_progress: + on_progress(f"Status: {status}, Details: {status_record.details}") + + if status in _TERMINAL_STATUSES: + if status != Status.COMPLETED: + raise RuntimeError( + f"Simulation ended with status: {status}, details: {status_record.details}" + ) + return + + if timeout is not None and (time.monotonic() - start_time) >= timeout: + raise RuntimeError(f"Simulation timed out after {timeout}s (last status: {status})") + + time.sleep(poll_interval) + + +def export_n5( + api_client: ApiClient, + simulation: Simulation, + biomodel: Biomodel | None = None, + variable_names: list[str] | None = None, + dataset_name: str | None = None, + poll_interval: float = 5.0, + timeout: float | None = None, + on_progress: Callable[[str], None] | None = None, +) -> TensorStore: + """Export simulation results as N5 and open as a TensorStore. + + Args: + api_client: Authenticated API client. + simulation: Saved simulation (must have ``version.key``). + biomodel: Saved biomodel. Required when ``variable_names`` is ``None`` + so that species names can be derived from the application. + variable_names: Variables to export. ``None`` exports all species + from the application (requires ``biomodel``). + dataset_name: Name for the N5 dataset. Defaults to ``None`` (server-assigned). + poll_interval: Seconds between export status polls. + timeout: Maximum seconds to wait for the export. ``None`` means wait indefinitely. + on_progress: Optional callback receiving status strings. + + Returns: + A TensorStore pointing to the exported N5 data. + + Raises: + ValueError: If the simulation is missing a version key, or if + ``variable_names`` is ``None`` and ``biomodel`` is not provided. + RuntimeError: If the export fails or times out. + """ + if simulation.version is None or simulation.version.key is None: + raise ValueError("simulation must have a version key (save and run it first)") + + # Build time specs from simulation parameters + num_time_points = int(simulation.duration / simulation.output_time_step) + 1 + all_times = [i * simulation.output_time_step for i in range(num_time_points)] + + # Build variable specs + if variable_names is None: + if biomodel is None: + raise ValueError("biomodel is required when variable_names is not specified") + app = _find_app_for_simulation(biomodel, simulation) + variable_names = [sm.species_name for sm in app.species_mappings] + if len(variable_names) == 1: + var_specs = VariableSpecs(variable_names=variable_names, mode=VariableMode.VARIABLE_ONE) + else: + var_specs = VariableSpecs(variable_names=variable_names, mode=VariableMode.VARIABLE_MULTI) + + request = N5ExportRequest( + standard_export_information=StandardExportInfo( + simulation_name=simulation.name, + simulation_key=simulation.version.key, + simulation_job=0, + variable_specs=var_specs, + time_specs=TimeSpecs( + begin_time_index=0, + end_time_index=num_time_points - 1, + all_times=all_times, + mode=TimeMode.TIME_RANGE, + ), + ), + exportable_data_type=ExportableDataType.PDE_VARIABLE_DATA, + dataset_name=dataset_name, + ) + + if on_progress: + on_progress("Starting N5 export...") + + export_api = ExportResourceApi(api_client) + job_id = export_api.export_n5(n5_export_request=request) + + if on_progress: + on_progress(f"Export job started: {job_id}") + + # Poll for completion + start_time = time.monotonic() + while True: + events = export_api.export_status() + for event in events: + if event.job_id == job_id: + if event.event_type == "EXPORT_COMPLETE": + if on_progress: + on_progress(f"Export complete: {event.location}") + return _open_n5_from_export_url(event.location) + elif event.event_type == "EXPORT_FAILURE": + raise RuntimeError(f"Export failed: {event}") + + if timeout is not None and (time.monotonic() - start_time) >= timeout: + raise RuntimeError(f"Export timed out after {timeout}s") + + time.sleep(poll_interval) + + +def run_remote( + api_client: ApiClient, + biomodel: Biomodel, + simulation: Simulation | str, + model_name: str | None = None, + variable_names: list[str] | None = None, + dataset_name: str | None = None, + poll_interval: float = 5.0, + timeout: float | None = None, + on_progress: Callable[[str], None] | None = None, +) -> TensorStore: + """Save, run, and export a simulation in one call. + + This combines :func:`save_and_start`, :func:`wait_for_simulation`, and + :func:`export_n5` into a single convenience function. + + Args: + api_client: Authenticated API client from ``login_interactive()``. + biomodel: The biomodel to save and simulate. + simulation: Simulation object or name string. + model_name: Name for the saved model on the server. + variable_names: Variables to export. ``None`` exports all. + dataset_name: Name for the N5 dataset. + poll_interval: Seconds between status polls. + timeout: Maximum seconds to wait for each phase (simulation and export). + on_progress: Optional callback receiving status strings. + + Returns: + A TensorStore pointing to the exported N5 results. + """ + saved_bm, saved_sim = save_and_start( + api_client, biomodel, simulation, model_name=model_name, on_progress=on_progress + ) + wait_for_simulation( + api_client, saved_bm, saved_sim, poll_interval=poll_interval, timeout=timeout, on_progress=on_progress + ) + return export_n5( + api_client, saved_sim, biomodel=saved_bm, variable_names=variable_names, + dataset_name=dataset_name, poll_interval=poll_interval, timeout=timeout, + on_progress=on_progress + ) From c942dcc156f3c4880c725040bc5a9ded1cbd0208 Mon Sep 17 00:00:00 2001 From: jcschaff Date: Thu, 19 Mar 2026 01:03:56 -0400 Subject: [PATCH 15/24] update poetry.lock for MacOS 15 --- poetry.lock | 1988 +++++++++++++++++++++++++-------------------------- 1 file changed, 971 insertions(+), 1017 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4b55628..d712e94 100644 --- a/poetry.lock +++ b/poetry.lock @@ -346,14 +346,14 @@ test = ["astroid (>=2,<5)", "pytest (<9.0)", "pytest-cov", "pytest-xdist"] [[package]] name = "async-lru" -version = "2.2.0" +version = "2.3.0" description = "Simple LRU cache for asyncio" optional = false python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "async_lru-2.2.0-py3-none-any.whl", hash = "sha256:e2c1cf731eba202b59c5feedaef14ffd9d02ad0037fcda64938699f2c380eafe"}, - {file = "async_lru-2.2.0.tar.gz", hash = "sha256:80abae2a237dbc6c60861d621619af39f0d920aea306de34cb992c879e01370c"}, + {file = "async_lru-2.3.0-py3-none-any.whl", hash = "sha256:eea27b01841909316f2cc739807acea1c623df2be8c5cfad7583286397bb8315"}, + {file = "async_lru-2.3.0.tar.gz", hash = "sha256:89bdb258a0140d7313cf8f4031d816a042202faa61d0ab310a0a538baa1c24b6"}, ] [[package]] @@ -362,7 +362,6 @@ version = "25.4.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.9" -python-versions = ">=3.8" groups = ["main", "dev", "docs"] files = [ {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, @@ -448,7 +447,6 @@ version = "6.3.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false python-versions = ">=3.10" -python-versions = ">=3.9" groups = ["dev", "docs"] files = [ {file = "bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6"}, @@ -464,14 +462,14 @@ css = ["tinycss2 (>=1.1.0,<1.5)"] [[package]] name = "cachetools" -version = "7.0.3" +version = "7.0.5" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "cachetools-7.0.3-py3-none-any.whl", hash = "sha256:c128ffca156eef344c25fcd08a96a5952803786fa33097f5f2d49edf76f79d53"}, - {file = "cachetools-7.0.3.tar.gz", hash = "sha256:8c246313b95849964e54a909c03b327a87ab0428b068fac10da7b105ca275ef6"}, + {file = "cachetools-7.0.5-py3-none-any.whl", hash = "sha256:46bc8ebefbe485407621d0a4264b23c080cedd913921bad7ac3ed2f26c183114"}, + {file = "cachetools-7.0.5.tar.gz", hash = "sha256:0cd042c24377200c1dcd225f8b7b12b0ca53cc2c961b43757e774ebe190fd990"}, ] [[package]] @@ -491,7 +489,7 @@ name = "cffi" version = "2.0.0" description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main", "dev", "docs"] files = [ {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, @@ -598,125 +596,141 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.4.5" +version = "3.4.6" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" groups = ["main", "dev", "docs"] files = [ - {file = "charset_normalizer-3.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4167a621a9a1a986c73777dbc15d4b5eac8ac5c10393374109a343d4013ec765"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3f64c6bf8f32f9133b668c7f7a7cbdbc453412bc95ecdbd157f3b1e377a92990"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:568e3c34b58422075a1b49575a6abc616d9751b4d61b23f712e12ebb78fe47b2"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:036c079aa08a6a592b82487f97c60b439428320ed1b2ea0b3912e99d30c77765"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:340810d34ef83af92148e96e3e44cb2d3f910d2bf95e5618a5c467d9f102231d"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:cd2d0f0ec9aa977a27731a3209ebbcacebebaf41f902bd453a928bfd281cf7f8"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0b362bcd27819f9c07cbf23db4e0e8cd4b44c5ecd900c2ff907b2b92274a7412"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:77be992288f720306ab4108fe5c74797de327f3248368dfc7e1a916d6ed9e5a2"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:8b78d8a609a4b82c273257ee9d631ded7fac0d875bdcdccc109f3ee8328cfcb1"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ba20bdf69bd127f66d0174d6f2a93e69045e0b4036dc1ca78e091bcc765830c4"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:76a9d0de4d0eab387822e7b35d8f89367dd237c72e82ab42b9f7bf5e15ada00f"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8fff79bf5978c693c9b1a4d71e4a94fddfb5fe744eb062a318e15f4a2f63a550"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c7e84e0c0005e3bdc1a9211cd4e62c78ba80bc37b2365ef4410cd2007a9047f2"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-win32.whl", hash = "sha256:58ad8270cfa5d4bef1bc85bd387217e14ff154d6630e976c6f56f9a040757475"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:02a9d1b01c1e12c27883b0c9349e0bcd9ae92e727ff1a277207e1a262b1cbf05"}, - {file = "charset_normalizer-3.4.5-cp310-cp310-win_arm64.whl", hash = "sha256:039215608ac7b358c4da0191d10fc76868567fbf276d54c14721bdedeb6de064"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:610f72c0ee565dfb8ae1241b666119582fdbfe7c0975c175be719f940e110694"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60d68e820af339df4ae8358c7a2e7596badeb61e544438e489035f9fbf3246a5"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:10b473fc8dca1c3ad8559985794815f06ca3fc71942c969129070f2c3cdf7281"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d4eb8ac7469b2a5d64b5b8c04f84d8bf3ad340f4514b98523805cbf46e3b3923"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bcb3227c3d9aaf73eaaab1db7ccd80a8995c509ee9941e2aae060ca6e4e5d81"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:75ee9c1cce2911581a70a3c0919d8bccf5b1cbc9b0e5171400ec736b4b569497"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1d1401945cb77787dbd3af2446ff2d75912327c4c3a1526ab7955ecf8600687c"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a45e504f5e1be0bd385935a8e1507c442349ca36f511a47057a71c9d1d6ea9e"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e09f671a54ce70b79a1fc1dc6da3072b7ef7251fadb894ed92d9aa8218465a5f"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d01de5e768328646e6a3fa9e562706f8f6641708c115c62588aef2b941a4f88e"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:131716d6786ad5e3dc542f5cc6f397ba3339dc0fb87f87ac30e550e8987756af"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a374cc0b88aa710e8865dc1bd6edb3743c59f27830f0293ab101e4cf3ce9f85"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d31f0d1671e1534e395f9eb84a68e0fb670e1edb1fe819a9d7f564ae3bc4e53f"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-win32.whl", hash = "sha256:cace89841c0599d736d3d74a27bc5821288bb47c5441923277afc6059d7fbcb4"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:f8102ae93c0bc863b1d41ea0f4499c20a83229f52ed870850892df555187154a"}, - {file = "charset_normalizer-3.4.5-cp311-cp311-win_arm64.whl", hash = "sha256:ed98364e1c262cf5f9363c3eca8c2df37024f52a8fa1180a3610014f26eac51c"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ed97c282ee4f994ef814042423a529df9497e3c666dca19be1d4cd1129dc7ade"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0294916d6ccf2d069727d65973c3a1ca477d68708db25fd758dd28b0827cff54"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dc57a0baa3eeedd99fafaef7511b5a6ef4581494e8168ee086031744e2679467"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ed1a9a204f317ef879b32f9af507d47e49cd5e7f8e8d5d96358c98373314fc60"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ad83b8f9379176c841f8865884f3514d905bcd2a9a3b210eaa446e7d2223e4d"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:a118e2e0b5ae6b0120d5efa5f866e58f2bb826067a646431da4d6a2bdae7950e"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:754f96058e61a5e22e91483f823e07df16416ce76afa4ebf306f8e1d1296d43f"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0c300cefd9b0970381a46394902cd18eaf2aa00163f999590ace991989dcd0fc"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c108f8619e504140569ee7de3f97d234f0fbae338a7f9f360455071ef9855a95"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d1028de43596a315e2720a9849ee79007ab742c06ad8b45a50db8cdb7ed4a82a"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:19092dde50335accf365cce21998a1c6dd8eafd42c7b226eb54b2747cdce2fac"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4354e401eb6dab9aed3c7b4030514328a6c748d05e1c3e19175008ca7de84fb1"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a68766a3c58fde7f9aaa22b3786276f62ab2f594efb02d0a1421b6282e852e98"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-win32.whl", hash = "sha256:1827734a5b308b65ac54e86a618de66f935a4f63a8a462ff1e19a6788d6c2262"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:728c6a963dfab66ef865f49286e45239384249672cd598576765acc2a640a636"}, - {file = "charset_normalizer-3.4.5-cp312-cp312-win_arm64.whl", hash = "sha256:75dfd1afe0b1647449e852f4fb428195a7ed0588947218f7ba929f6538487f02"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ac59c15e3f1465f722607800c68713f9fbc2f672b9eb649fe831da4019ae9b23"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:165c7b21d19365464e8f70e5ce5e12524c58b48c78c1f5a57524603c1ab003f8"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:28269983f25a4da0425743d0d257a2d6921ea7d9b83599d4039486ec5b9f911d"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d27ce22ec453564770d29d03a9506d449efbb9fa13c00842262b2f6801c48cce"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0625665e4ebdddb553ab185de5db7054393af8879fb0c87bd5690d14379d6819"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:c23eb3263356d94858655b3e63f85ac5d50970c6e8febcdde7830209139cc37d"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e6302ca4ae283deb0af68d2fbf467474b8b6aedcd3dab4db187e07f94c109763"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e51ae7d81c825761d941962450f50d041db028b7278e7b08930b4541b3e45cb9"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:597d10dec876923e5c59e48dbd366e852eacb2b806029491d307daea6b917d7c"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5cffde4032a197bd3b42fd0b9509ec60fb70918d6970e4cc773f20fc9180ca67"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2da4eedcb6338e2321e831a0165759c0c620e37f8cd044a263ff67493be8ffb3"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:65a126fb4b070d05340a84fc709dd9e7c75d9b063b610ece8a60197a291d0adf"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7a80a9242963416bd81f99349d5f3fce1843c303bd404f204918b6d75a75fd6"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-win32.whl", hash = "sha256:f1d725b754e967e648046f00c4facc42d414840f5ccc670c5670f59f83693e4f"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-win_amd64.whl", hash = "sha256:e37bd100d2c5d3ba35db9c7c5ba5a9228cbcffe5c4778dc824b164e5257813d7"}, - {file = "charset_normalizer-3.4.5-cp313-cp313-win_arm64.whl", hash = "sha256:93b3b2cc5cf1b8743660ce77a4f45f3f6d1172068207c1defc779a36eea6bb36"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8197abe5ca1ffb7d91e78360f915eef5addff270f8a71c1fc5be24a56f3e4873"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2aecdb364b8a1802afdc7f9327d55dad5366bc97d8502d0f5854e50712dbc5f"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a66aa5022bf81ab4b1bebfb009db4fd68e0c6d4307a1ce5ef6a26e5878dfc9e4"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d77f97e515688bd615c1d1f795d540f32542d514242067adcb8ef532504cb9ee"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01a1ed54b953303ca7e310fafe0fe347aab348bd81834a0bcd602eb538f89d66"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:b2d37d78297b39a9eb9eb92c0f6df98c706467282055419df141389b23f93362"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e71bbb595973622b817c042bd943c3f3667e9c9983ce3d205f973f486fec98a7"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4cd966c2559f501c6fd69294d082c2934c8dd4719deb32c22961a5ac6db0df1d"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d5e52d127045d6ae01a1e821acfad2f3a1866c54d0e837828538fabe8d9d1bd6"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:30a2b1a48478c3428d047ed9690d57c23038dac838a87ad624c85c0a78ebeb39"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d8ed79b8f6372ca4254955005830fd61c1ccdd8c0fac6603e2c145c61dd95db6"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:c5af897b45fa606b12464ccbe0014bbf8c09191e0a66aab6aa9d5cf6e77e0c94"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1088345bcc93c58d8d8f3d783eca4a6e7a7752bbff26c3eee7e73c597c191c2e"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-win32.whl", hash = "sha256:ee57b926940ba00bca7ba7041e665cc956e55ef482f851b9b65acb20d867e7a2"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-win_amd64.whl", hash = "sha256:4481e6da1830c8a1cc0b746b47f603b653dadb690bcd851d039ffaefe70533aa"}, - {file = "charset_normalizer-3.4.5-cp314-cp314-win_arm64.whl", hash = "sha256:97ab7787092eb9b50fb47fa04f24c75b768a606af1bcba1957f07f128a7219e4"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e22d1059b951e7ae7c20ef6b06afd10fb95e3c41bf3c4fbc874dba113321c193"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:afca7f78067dd27c2b848f1b234623d26b87529296c6c5652168cc1954f2f3b2"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ec56a2266f32bc06ed3c3e2a8f58417ce02f7e0356edc89786e52db13c593c98"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2b970382e4a36bed897c19f310f31d7d13489c11b4f468ddfba42d41cddfb918"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:573ef5814c4b7c0d59a7710aa920eaaaef383bd71626aa420fba27b5cab92e8d"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-manylinux_2_31_armv7l.whl", hash = "sha256:50bcbca6603c06a1dcc7b056ed45c37715fb5d2768feb3bcd37d2313c587a5b9"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1f2da5cbb9becfcd607757a169e38fb82aa5fd86fae6653dea716e7b613fe2cf"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fc1c64934b8faf7584924143eb9db4770bbdb16659626e1a1a4d9efbcb68d947"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:ae8b03427410731469c4033934cf473426faff3e04b69d2dfb64a4281a3719f8"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:b3e71afc578b98512bfe7bdb822dd6bc57d4b0093b4b6e5487c1e96ad4ace242"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:4b8551b6e6531e156db71193771c93bda78ffc4d1e6372517fe58ad3b91e4659"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:65b3c403a5b6b8034b655e7385de4f72b7b244869a22b32d4030b99a60593eca"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:8ce11cd4d62d11166f2b441e30ace226c19a3899a7cf0796f668fba49a9fb123"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-win32.whl", hash = "sha256:66dee73039277eb35380d1b82cccc69cc82b13a66f9f4a18da32d573acf02b7c"}, - {file = "charset_normalizer-3.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:d29dd9c016f2078b43d0c357511e87eee5b05108f3dd603423cb389b89813969"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:259cd1ca995ad525f638e131dbcc2353a586564c038fc548a3fe450a91882139"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a28afb04baa55abf26df544e3e5c6534245d3daa5178bc4a8eeb48202060d0e"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ff95a9283de8a457e6b12989de3f9f5193430f375d64297d323a615ea52cbdb3"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:708c7acde173eedd4bfa4028484426ba689d2103b28588c513b9db2cd5ecde9c"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa92ec1102eaff840ccd1021478af176a831f1bccb08e526ce844b7ddda85c22"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:5fea359734b140d0d6741189fea5478c6091b54ffc69d7ce119e0a05637d8c99"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e545b51da9f9af5c67815ca0eb40676c0f016d0b0381c86f20451e35696c5f95"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:30987f4a8ed169983f93e1be8ffeea5214a779e27ed0b059835c7afe96550ad7"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:149ec69866c3d6c2fb6f758dbc014ecb09f30b35a5ca90b6a8a2d4e54e18fdfe"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:530beedcec9b6e027e7a4b6ce26eed36678aa39e17da85e6e03d7bd9e8e9d7c9"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:14498a429321de554b140013142abe7608f9d8ccc04d7baf2ad60498374aefa2"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2820a98460c83663dd8ec015d9ddfd1e4879f12e06bb7d0500f044fb477d2770"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:aa2f963b4da26daf46231d9b9e0e2c9408a751f8f0d0f44d2de56d3caf51d294"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-win32.whl", hash = "sha256:82cc7c2ad42faec8b574351f8bc2a0c049043893853317bd9bb309f5aba6cb5a"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:92263f7eca2f4af326cd20de8d16728d2602f7cfea02e790dcde9d83c365d7cc"}, - {file = "charset_normalizer-3.4.5-cp39-cp39-win_arm64.whl", hash = "sha256:014837af6fabf57121b6254fa8ade10dceabc3528b27b721a64bbc7b8b1d4eb4"}, - {file = "charset_normalizer-3.4.5-py3-none-any.whl", hash = "sha256:9db5e3fcdcee89a78c04dffb3fe33c79f77bd741a624946db2591c81b2fc85b0"}, - {file = "charset_normalizer-3.4.5.tar.gz", hash = "sha256:95adae7b6c42a6c5b5b559b1a99149f090a57128155daeea91732c8d970d8644"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-win32.whl", hash = "sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-win_amd64.whl", hash = "sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-win_arm64.whl", hash = "sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-win32.whl", hash = "sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-win32.whl", hash = "sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-win32.whl", hash = "sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-win32.whl", hash = "sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-win32.whl", hash = "sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux_2_31_armv7l.whl", hash = "sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-win32.whl", hash = "sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-win_amd64.whl", hash = "sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-win32.whl", hash = "sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-win_amd64.whl", hash = "sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-win_arm64.whl", hash = "sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8"}, + {file = "charset_normalizer-3.4.6-py3-none-any.whl", hash = "sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69"}, + {file = "charset_normalizer-3.4.6.tar.gz", hash = "sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6"}, ] [[package]] @@ -856,118 +870,118 @@ test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist" [[package]] name = "coverage" -version = "7.13.4" +version = "7.13.5" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "coverage-7.13.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fc31c787a84f8cd6027eba44010517020e0d18487064cd3d8968941856d1415"}, - {file = "coverage-7.13.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a32ebc02a1805adf637fc8dec324b5cdacd2e493515424f70ee33799573d661b"}, - {file = "coverage-7.13.4-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e24f9156097ff9dc286f2f913df3a7f63c0e333dcafa3c196f2c18b4175ca09a"}, - {file = "coverage-7.13.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8041b6c5bfdc03257666e9881d33b1abc88daccaf73f7b6340fb7946655cd10f"}, - {file = "coverage-7.13.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a09cfa6a5862bc2fc6ca7c3def5b2926194a56b8ab78ffcf617d28911123012"}, - {file = "coverage-7.13.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:296f8b0af861d3970c2a4d8c91d48eb4dd4771bcef9baedec6a9b515d7de3def"}, - {file = "coverage-7.13.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e101609bcbbfb04605ea1027b10dc3735c094d12d40826a60f897b98b1c30256"}, - {file = "coverage-7.13.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:aa3feb8db2e87ff5e6d00d7e1480ae241876286691265657b500886c98f38bda"}, - {file = "coverage-7.13.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4fc7fa81bbaf5a02801b65346c8b3e657f1d93763e58c0abdf7c992addd81a92"}, - {file = "coverage-7.13.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:33901f604424145c6e9c2398684b92e176c0b12df77d52db81c20abd48c3794c"}, - {file = "coverage-7.13.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:bb28c0f2cf2782508a40cec377935829d5fcc3ad9a3681375af4e84eb34b6b58"}, - {file = "coverage-7.13.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9d107aff57a83222ddbd8d9ee705ede2af2cc926608b57abed8ef96b50b7e8f9"}, - {file = "coverage-7.13.4-cp310-cp310-win32.whl", hash = "sha256:a6f94a7d00eb18f1b6d403c91a88fd58cfc92d4b16080dfdb774afc8294469bf"}, - {file = "coverage-7.13.4-cp310-cp310-win_amd64.whl", hash = "sha256:2cb0f1e000ebc419632bbe04366a8990b6e32c4e0b51543a6484ffe15eaeda95"}, - {file = "coverage-7.13.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d490ba50c3f35dd7c17953c68f3270e7ccd1c6642e2d2afe2d8e720b98f5a053"}, - {file = "coverage-7.13.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:19bc3c88078789f8ef36acb014d7241961dbf883fd2533d18cb1e7a5b4e28b11"}, - {file = "coverage-7.13.4-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3998e5a32e62fdf410c0dbd3115df86297995d6e3429af80b8798aad894ca7aa"}, - {file = "coverage-7.13.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8e264226ec98e01a8e1054314af91ee6cde0eacac4f465cc93b03dbe0bce2fd7"}, - {file = "coverage-7.13.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a3aa4e7b9e416774b21797365b358a6e827ffadaaca81b69ee02946852449f00"}, - {file = "coverage-7.13.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:71ca20079dd8f27fcf808817e281e90220475cd75115162218d0e27549f95fef"}, - {file = "coverage-7.13.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e2f25215f1a359ab17320b47bcdaca3e6e6356652e8256f2441e4ef972052903"}, - {file = "coverage-7.13.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d65b2d373032411e86960604dc4edac91fdfb5dca539461cf2cbe78327d1e64f"}, - {file = "coverage-7.13.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94eb63f9b363180aff17de3e7c8760c3ba94664ea2695c52f10111244d16a299"}, - {file = "coverage-7.13.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e856bf6616714c3a9fbc270ab54103f4e685ba236fa98c054e8f87f266c93505"}, - {file = "coverage-7.13.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:65dfcbe305c3dfe658492df2d85259e0d79ead4177f9ae724b6fb245198f55d6"}, - {file = "coverage-7.13.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b507778ae8a4c915436ed5c2e05b4a6cecfa70f734e19c22a005152a11c7b6a9"}, - {file = "coverage-7.13.4-cp311-cp311-win32.whl", hash = "sha256:784fc3cf8be001197b652d51d3fd259b1e2262888693a4636e18879f613a62a9"}, - {file = "coverage-7.13.4-cp311-cp311-win_amd64.whl", hash = "sha256:2421d591f8ca05b308cf0092807308b2facbefe54af7c02ac22548b88b95c98f"}, - {file = "coverage-7.13.4-cp311-cp311-win_arm64.whl", hash = "sha256:79e73a76b854d9c6088fe5d8b2ebe745f8681c55f7397c3c0a016192d681045f"}, - {file = "coverage-7.13.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:02231499b08dabbe2b96612993e5fc34217cdae907a51b906ac7fca8027a4459"}, - {file = "coverage-7.13.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40aa8808140e55dc022b15d8aa7f651b6b3d68b365ea0398f1441e0b04d859c3"}, - {file = "coverage-7.13.4-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5b856a8ccf749480024ff3bd7310adaef57bf31fd17e1bfc404b7940b6986634"}, - {file = "coverage-7.13.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2c048ea43875fbf8b45d476ad79f179809c590ec7b79e2035c662e7afa3192e3"}, - {file = "coverage-7.13.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b7b38448866e83176e28086674fe7368ab8590e4610fb662b44e345b86d63ffa"}, - {file = "coverage-7.13.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:de6defc1c9badbf8b9e67ae90fd00519186d6ab64e5cc5f3d21359c2a9b2c1d3"}, - {file = "coverage-7.13.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7eda778067ad7ffccd23ecffce537dface96212576a07924cbf0d8799d2ded5a"}, - {file = "coverage-7.13.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e87f6c587c3f34356c3759f0420693e35e7eb0e2e41e4c011cb6ec6ecbbf1db7"}, - {file = "coverage-7.13.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8248977c2e33aecb2ced42fef99f2d319e9904a36e55a8a68b69207fb7e43edc"}, - {file = "coverage-7.13.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:25381386e80ae727608e662474db537d4df1ecd42379b5ba33c84633a2b36d47"}, - {file = "coverage-7.13.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:ee756f00726693e5ba94d6df2bdfd64d4852d23b09bb0bc700e3b30e6f333985"}, - {file = "coverage-7.13.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fdfc1e28e7c7cdce44985b3043bc13bbd9c747520f94a4d7164af8260b3d91f0"}, - {file = "coverage-7.13.4-cp312-cp312-win32.whl", hash = "sha256:01d4cbc3c283a17fc1e42d614a119f7f438eabb593391283adca8dc86eff1246"}, - {file = "coverage-7.13.4-cp312-cp312-win_amd64.whl", hash = "sha256:9401ebc7ef522f01d01d45532c68c5ac40fb27113019b6b7d8b208f6e9baa126"}, - {file = "coverage-7.13.4-cp312-cp312-win_arm64.whl", hash = "sha256:b1ec7b6b6e93255f952e27ab58fbc68dcc468844b16ecbee881aeb29b6ab4d8d"}, - {file = "coverage-7.13.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b66a2da594b6068b48b2692f043f35d4d3693fb639d5ea8b39533c2ad9ac3ab9"}, - {file = "coverage-7.13.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3599eb3992d814d23b35c536c28df1a882caa950f8f507cef23d1cbf334995ac"}, - {file = "coverage-7.13.4-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:93550784d9281e374fb5a12bf1324cc8a963fd63b2d2f223503ef0fd4aa339ea"}, - {file = "coverage-7.13.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b720ce6a88a2755f7c697c23268ddc47a571b88052e6b155224347389fdf6a3b"}, - {file = "coverage-7.13.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7b322db1284a2ed3aa28ffd8ebe3db91c929b7a333c0820abec3d838ef5b3525"}, - {file = "coverage-7.13.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f4594c67d8a7c89cf922d9df0438c7c7bb022ad506eddb0fdb2863359ff78242"}, - {file = "coverage-7.13.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:53d133df809c743eb8bce33b24bcababb371f4441340578cd406e084d94a6148"}, - {file = "coverage-7.13.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:76451d1978b95ba6507a039090ba076105c87cc76fc3efd5d35d72093964d49a"}, - {file = "coverage-7.13.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7f57b33491e281e962021de110b451ab8a24182589be17e12a22c79047935e23"}, - {file = "coverage-7.13.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1731dc33dc276dafc410a885cbf5992f1ff171393e48a21453b78727d090de80"}, - {file = "coverage-7.13.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:bd60d4fe2f6fa7dff9223ca1bbc9f05d2b6697bc5961072e5d3b952d46e1b1ea"}, - {file = "coverage-7.13.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9181a3ccead280b828fae232df12b16652702b49d41e99d657f46cc7b1f6ec7a"}, - {file = "coverage-7.13.4-cp313-cp313-win32.whl", hash = "sha256:f53d492307962561ac7de4cd1de3e363589b000ab69617c6156a16ba7237998d"}, - {file = "coverage-7.13.4-cp313-cp313-win_amd64.whl", hash = "sha256:e6f70dec1cc557e52df5306d051ef56003f74d56e9c4dd7ddb07e07ef32a84dd"}, - {file = "coverage-7.13.4-cp313-cp313-win_arm64.whl", hash = "sha256:fb07dc5da7e849e2ad31a5d74e9bece81f30ecf5a42909d0a695f8bd1874d6af"}, - {file = "coverage-7.13.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:40d74da8e6c4b9ac18b15331c4b5ebc35a17069410cad462ad4f40dcd2d50c0d"}, - {file = "coverage-7.13.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4223b4230a376138939a9173f1bdd6521994f2aff8047fae100d6d94d50c5a12"}, - {file = "coverage-7.13.4-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1d4be36a5114c499f9f1f9195e95ebf979460dbe2d88e6816ea202010ba1c34b"}, - {file = "coverage-7.13.4-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:200dea7d1e8095cc6e98cdabe3fd1d21ab17d3cee6dab00cadbb2fe35d9c15b9"}, - {file = "coverage-7.13.4-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b8eb931ee8e6d8243e253e5ed7336deea6904369d2fd8ae6e43f68abbf167092"}, - {file = "coverage-7.13.4-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:75eab1ebe4f2f64d9509b984f9314d4aa788540368218b858dad56dc8f3e5eb9"}, - {file = "coverage-7.13.4-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c35eb28c1d085eb7d8c9b3296567a1bebe03ce72962e932431b9a61f28facf26"}, - {file = "coverage-7.13.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb88b316ec33760714a4720feb2816a3a59180fd58c1985012054fa7aebee4c2"}, - {file = "coverage-7.13.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7d41eead3cc673cbd38a4417deb7fd0b4ca26954ff7dc6078e33f6ff97bed940"}, - {file = "coverage-7.13.4-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:fb26a934946a6afe0e326aebe0730cdff393a8bc0bbb65a2f41e30feddca399c"}, - {file = "coverage-7.13.4-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:dae88bc0fc77edaa65c14be099bd57ee140cf507e6bfdeea7938457ab387efb0"}, - {file = "coverage-7.13.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:845f352911777a8e722bfce168958214951e07e47e5d5d9744109fa5fe77f79b"}, - {file = "coverage-7.13.4-cp313-cp313t-win32.whl", hash = "sha256:2fa8d5f8de70688a28240de9e139fa16b153cc3cbb01c5f16d88d6505ebdadf9"}, - {file = "coverage-7.13.4-cp313-cp313t-win_amd64.whl", hash = "sha256:9351229c8c8407645840edcc277f4a2d44814d1bc34a2128c11c2a031d45a5dd"}, - {file = "coverage-7.13.4-cp313-cp313t-win_arm64.whl", hash = "sha256:30b8d0512f2dc8c8747557e8fb459d6176a2c9e5731e2b74d311c03b78451997"}, - {file = "coverage-7.13.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:300deaee342f90696ed186e3a00c71b5b3d27bffe9e827677954f4ee56969601"}, - {file = "coverage-7.13.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:29e3220258d682b6226a9b0925bc563ed9a1ebcff3cad30f043eceea7eaf2689"}, - {file = "coverage-7.13.4-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:391ee8f19bef69210978363ca930f7328081c6a0152f1166c91f0b5fdd2a773c"}, - {file = "coverage-7.13.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0dd7ab8278f0d58a0128ba2fca25824321f05d059c1441800e934ff2efa52129"}, - {file = "coverage-7.13.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78cdf0d578b15148b009ccf18c686aa4f719d887e76e6b40c38ffb61d264a552"}, - {file = "coverage-7.13.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:48685fee12c2eb3b27c62f2658e7ea21e9c3239cba5a8a242801a0a3f6a8c62a"}, - {file = "coverage-7.13.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4e83efc079eb39480e6346a15a1bcb3e9b04759c5202d157e1dd4303cd619356"}, - {file = "coverage-7.13.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ecae9737b72408d6a950f7e525f30aca12d4bd8dd95e37342e5beb3a2a8c4f71"}, - {file = "coverage-7.13.4-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ae4578f8528569d3cf303fef2ea569c7f4c4059a38c8667ccef15c6e1f118aa5"}, - {file = "coverage-7.13.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:6fdef321fdfbb30a197efa02d48fcd9981f0d8ad2ae8903ac318adc653f5df98"}, - {file = "coverage-7.13.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b0f6ccf3dbe577170bebfce1318707d0e8c3650003cb4b3a9dd744575daa8b5"}, - {file = "coverage-7.13.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:75fcd519f2a5765db3f0e391eb3b7d150cce1a771bf4c9f861aeab86c767a3c0"}, - {file = "coverage-7.13.4-cp314-cp314-win32.whl", hash = "sha256:8e798c266c378da2bd819b0677df41ab46d78065fb2a399558f3f6cae78b2fbb"}, - {file = "coverage-7.13.4-cp314-cp314-win_amd64.whl", hash = "sha256:245e37f664d89861cf2329c9afa2c1fe9e6d4e1a09d872c947e70718aeeac505"}, - {file = "coverage-7.13.4-cp314-cp314-win_arm64.whl", hash = "sha256:ad27098a189e5838900ce4c2a99f2fe42a0bf0c2093c17c69b45a71579e8d4a2"}, - {file = "coverage-7.13.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:85480adfb35ffc32d40918aad81b89c69c9cc5661a9b8a81476d3e645321a056"}, - {file = "coverage-7.13.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:79be69cf7f3bf9b0deeeb062eab7ac7f36cd4cc4c4dd694bd28921ba4d8596cc"}, - {file = "coverage-7.13.4-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:caa421e2684e382c5d8973ac55e4f36bed6821a9bad5c953494de960c74595c9"}, - {file = "coverage-7.13.4-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:14375934243ee05f56c45393fe2ce81fe5cc503c07cee2bdf1725fb8bef3ffaf"}, - {file = "coverage-7.13.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25a41c3104d08edb094d9db0d905ca54d0cd41c928bb6be3c4c799a54753af55"}, - {file = "coverage-7.13.4-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6f01afcff62bf9a08fb32b2c1d6e924236c0383c02c790732b6537269e466a72"}, - {file = "coverage-7.13.4-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eb9078108fbf0bcdde37c3f4779303673c2fa1fe8f7956e68d447d0dd426d38a"}, - {file = "coverage-7.13.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0e086334e8537ddd17e5f16a344777c1ab8194986ec533711cbe6c41cde841b6"}, - {file = "coverage-7.13.4-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:725d985c5ab621268b2edb8e50dfe57633dc69bda071abc470fed55a14935fd3"}, - {file = "coverage-7.13.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:3c06f0f1337c667b971ca2f975523347e63ec5e500b9aa5882d91931cd3ef750"}, - {file = "coverage-7.13.4-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:590c0ed4bf8e85f745e6b805b2e1c457b2e33d5255dd9729743165253bc9ad39"}, - {file = "coverage-7.13.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:eb30bf180de3f632cd043322dad5751390e5385108b2807368997d1a92a509d0"}, - {file = "coverage-7.13.4-cp314-cp314t-win32.whl", hash = "sha256:c4240e7eded42d131a2d2c4dec70374b781b043ddc79a9de4d55ca71f8e98aea"}, - {file = "coverage-7.13.4-cp314-cp314t-win_amd64.whl", hash = "sha256:4c7d3cc01e7350f2f0f6f7036caaf5673fb56b6998889ccfe9e1c1fe75a9c932"}, - {file = "coverage-7.13.4-cp314-cp314t-win_arm64.whl", hash = "sha256:23e3f687cf945070d1c90f85db66d11e3025665d8dafa831301a0e0038f3db9b"}, - {file = "coverage-7.13.4-py3-none-any.whl", hash = "sha256:1af1641e57cf7ba1bd67d677c9abdbcd6cc2ab7da3bca7fa1e2b7e50e65f2ad0"}, - {file = "coverage-7.13.4.tar.gz", hash = "sha256:e5c8f6ed1e61a8b2dcdf31eb0b9bbf0130750ca79c1c49eb898e2ad86f5ccc91"}, + {file = "coverage-7.13.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0723d2c96324561b9aa76fb982406e11d93cdb388a7a7da2b16e04719cf7ca5"}, + {file = "coverage-7.13.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52f444e86475992506b32d4e5ca55c24fc88d73bcbda0e9745095b28ef4dc0cf"}, + {file = "coverage-7.13.5-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:704de6328e3d612a8f6c07000a878ff38181ec3263d5a11da1db294fa6a9bdf8"}, + {file = "coverage-7.13.5-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a1a6d79a14e1ec1832cabc833898636ad5f3754a678ef8bb4908515208bf84f4"}, + {file = "coverage-7.13.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79060214983769c7ba3f0cee10b54c97609dca4d478fa1aa32b914480fd5738d"}, + {file = "coverage-7.13.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:356e76b46783a98c2a2fe81ec79df4883a1e62895ea952968fb253c114e7f930"}, + {file = "coverage-7.13.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0cef0cdec915d11254a7f549c1170afecce708d30610c6abdded1f74e581666d"}, + {file = "coverage-7.13.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dc022073d063b25a402454e5712ef9e007113e3a676b96c5f29b2bda29352f40"}, + {file = "coverage-7.13.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9b74db26dfea4f4e50d48a4602207cd1e78be33182bc9cbf22da94f332f99878"}, + {file = "coverage-7.13.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ad146744ca4fd09b50c482650e3c1b1f4dfa1d4792e0a04a369c7f23336f0400"}, + {file = "coverage-7.13.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:c555b48be1853fe3997c11c4bd521cdd9a9612352de01fa4508f16ec341e6fe0"}, + {file = "coverage-7.13.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7034b5c56a58ae5e85f23949d52c14aca2cfc6848a31764995b7de88f13a1ea0"}, + {file = "coverage-7.13.5-cp310-cp310-win32.whl", hash = "sha256:eb7fdf1ef130660e7415e0253a01a7d5a88c9c4d158bcf75cbbd922fd65a5b58"}, + {file = "coverage-7.13.5-cp310-cp310-win_amd64.whl", hash = "sha256:3e1bb5f6c78feeb1be3475789b14a0f0a5b47d505bfc7267126ccbd50289999e"}, + {file = "coverage-7.13.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66a80c616f80181f4d643b0f9e709d97bcea413ecd9631e1dedc7401c8e6695d"}, + {file = "coverage-7.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:145ede53ccbafb297c1c9287f788d1bc3efd6c900da23bf6931b09eafc931587"}, + {file = "coverage-7.13.5-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0672854dc733c342fa3e957e0605256d2bf5934feeac328da9e0b5449634a642"}, + {file = "coverage-7.13.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ec10e2a42b41c923c2209b846126c6582db5e43a33157e9870ba9fb70dc7854b"}, + {file = "coverage-7.13.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be3d4bbad9d4b037791794ddeedd7d64a56f5933a2c1373e18e9e568b9141686"}, + {file = "coverage-7.13.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d2afbc5cc54d286bfb54541aa50b64cdb07a718227168c87b9e2fb8f25e1743"}, + {file = "coverage-7.13.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3ad050321264c49c2fa67bb599100456fc51d004b82534f379d16445da40fb75"}, + {file = "coverage-7.13.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7300c8a6d13335b29bb76d7651c66af6bd8658517c43499f110ddc6717bfc209"}, + {file = "coverage-7.13.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:eb07647a5738b89baab047f14edd18ded523de60f3b30e75c2acc826f79c839a"}, + {file = "coverage-7.13.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9adb6688e3b53adffefd4a52d72cbd8b02602bfb8f74dcd862337182fd4d1a4e"}, + {file = "coverage-7.13.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7c8d4bc913dd70b93488d6c496c77f3aff5ea99a07e36a18f865bca55adef8bd"}, + {file = "coverage-7.13.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0e3c426ffc4cd952f54ee9ffbdd10345709ecc78a3ecfd796a57236bfad0b9b8"}, + {file = "coverage-7.13.5-cp311-cp311-win32.whl", hash = "sha256:259b69bb83ad9894c4b25be2528139eecba9a82646ebdda2d9db1ba28424a6bf"}, + {file = "coverage-7.13.5-cp311-cp311-win_amd64.whl", hash = "sha256:258354455f4e86e3e9d0d17571d522e13b4e1e19bf0f8596bcf9476d61e7d8a9"}, + {file = "coverage-7.13.5-cp311-cp311-win_arm64.whl", hash = "sha256:bff95879c33ec8da99fc9b6fe345ddb5be6414b41d6d1ad1c8f188d26f36e028"}, + {file = "coverage-7.13.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:460cf0114c5016fa841214ff5564aa4864f11948da9440bc97e21ad1f4ba1e01"}, + {file = "coverage-7.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e223ce4b4ed47f065bfb123687686512e37629be25cc63728557ae7db261422"}, + {file = "coverage-7.13.5-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6e3370441f4513c6252bf042b9c36d22491142385049243253c7e48398a15a9f"}, + {file = "coverage-7.13.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:03ccc709a17a1de074fb1d11f217342fb0d2b1582ed544f554fc9fc3f07e95f5"}, + {file = "coverage-7.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3f4818d065964db3c1c66dc0fbdac5ac692ecbc875555e13374fdbe7eedb4376"}, + {file = "coverage-7.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:012d5319e66e9d5a218834642d6c35d265515a62f01157a45bcc036ecf947256"}, + {file = "coverage-7.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8dd02af98971bdb956363e4827d34425cb3df19ee550ef92855b0acb9c7ce51c"}, + {file = "coverage-7.13.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f08fd75c50a760c7eb068ae823777268daaf16a80b918fa58eea888f8e3919f5"}, + {file = "coverage-7.13.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:843ea8643cf967d1ac7e8ecd4bb00c99135adf4816c0c0593fdcc47b597fcf09"}, + {file = "coverage-7.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:9d44d7aa963820b1b971dbecd90bfe5fe8f81cff79787eb6cca15750bd2f79b9"}, + {file = "coverage-7.13.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7132bed4bd7b836200c591410ae7d97bf7ae8be6fc87d160b2bd881df929e7bf"}, + {file = "coverage-7.13.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a698e363641b98843c517817db75373c83254781426e94ada3197cabbc2c919c"}, + {file = "coverage-7.13.5-cp312-cp312-win32.whl", hash = "sha256:bdba0a6b8812e8c7df002d908a9a2ea3c36e92611b5708633c50869e6d922fdf"}, + {file = "coverage-7.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:d2c87e0c473a10bffe991502eac389220533024c8082ec1ce849f4218dded810"}, + {file = "coverage-7.13.5-cp312-cp312-win_arm64.whl", hash = "sha256:bf69236a9a81bdca3bff53796237aab096cdbf8d78a66ad61e992d9dac7eb2de"}, + {file = "coverage-7.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ec4af212df513e399cf11610cc27063f1586419e814755ab362e50a85ea69c1"}, + {file = "coverage-7.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:941617e518602e2d64942c88ec8499f7fbd49d3f6c4327d3a71d43a1973032f3"}, + {file = "coverage-7.13.5-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:da305e9937617ee95c2e39d8ff9f040e0487cbf1ac174f777ed5eddd7a7c1f26"}, + {file = "coverage-7.13.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:78e696e1cc714e57e8b25760b33a8b1026b7048d270140d25dafe1b0a1ee05a3"}, + {file = "coverage-7.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:02ca0eed225b2ff301c474aeeeae27d26e2537942aa0f87491d3e147e784a82b"}, + {file = "coverage-7.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:04690832cbea4e4663d9149e05dba142546ca05cb1848816760e7f58285c970a"}, + {file = "coverage-7.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0590e44dd2745c696a778f7bab6aa95256de2cbc8b8cff4f7db8ff09813d6969"}, + {file = "coverage-7.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d7cfad2d6d81dd298ab6b89fe72c3b7b05ec7544bdda3b707ddaecff8d25c161"}, + {file = "coverage-7.13.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e092b9499de38ae0fbfbc603a74660eb6ff3e869e507b50d85a13b6db9863e15"}, + {file = "coverage-7.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:48c39bc4a04d983a54a705a6389512883d4a3b9862991b3617d547940e9f52b1"}, + {file = "coverage-7.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2d3807015f138ffea1ed9afeeb8624fd781703f2858b62a8dd8da5a0994c57b6"}, + {file = "coverage-7.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee2aa19e03161671ec964004fb74b2257805d9710bf14a5c704558b9d8dbaf17"}, + {file = "coverage-7.13.5-cp313-cp313-win32.whl", hash = "sha256:ce1998c0483007608c8382f4ff50164bfc5bd07a2246dd272aa4043b75e61e85"}, + {file = "coverage-7.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:631efb83f01569670a5e866ceb80fe483e7c159fac6f167e6571522636104a0b"}, + {file = "coverage-7.13.5-cp313-cp313-win_arm64.whl", hash = "sha256:f4cd16206ad171cbc2470dbea9103cf9a7607d5fe8c242fdf1edf36174020664"}, + {file = "coverage-7.13.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0428cbef5783ad91fe240f673cc1f76b25e74bbfe1a13115e4aa30d3f538162d"}, + {file = "coverage-7.13.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e0b216a19534b2427cc201a26c25da4a48633f29a487c61258643e89d28200c0"}, + {file = "coverage-7.13.5-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:972a9cd27894afe4bc2b1480107054e062df08e671df7c2f18c205e805ccd806"}, + {file = "coverage-7.13.5-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4b59148601efcd2bac8c4dbf1f0ad6391693ccf7a74b8205781751637076aee3"}, + {file = "coverage-7.13.5-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:505d7083c8b0c87a8fa8c07370c285847c1f77739b22e299ad75a6af6c32c5c9"}, + {file = "coverage-7.13.5-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:60365289c3741e4db327e7baff2a4aaacf22f788e80fa4683393891b70a89fbd"}, + {file = "coverage-7.13.5-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1b88c69c8ef5d4b6fe7dea66d6636056a0f6a7527c440e890cf9259011f5e606"}, + {file = "coverage-7.13.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5b13955d31d1633cf9376908089b7cebe7d15ddad7aeaabcbe969a595a97e95e"}, + {file = "coverage-7.13.5-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f70c9ab2595c56f81a89620e22899eea8b212a4041bd728ac6f4a28bf5d3ddd0"}, + {file = "coverage-7.13.5-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:084b84a8c63e8d6fc7e3931b316a9bcafca1458d753c539db82d31ed20091a87"}, + {file = "coverage-7.13.5-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ad14385487393e386e2ea988b09d62dd42c397662ac2dabc3832d71253eee479"}, + {file = "coverage-7.13.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7f2c47b36fe7709a6e83bfadf4eefb90bd25fbe4014d715224c4316f808e59a2"}, + {file = "coverage-7.13.5-cp313-cp313t-win32.whl", hash = "sha256:67e9bc5449801fad0e5dff329499fb090ba4c5800b86805c80617b4e29809b2a"}, + {file = "coverage-7.13.5-cp313-cp313t-win_amd64.whl", hash = "sha256:da86cdcf10d2519e10cabb8ac2de03da1bcb6e4853790b7fbd48523332e3a819"}, + {file = "coverage-7.13.5-cp313-cp313t-win_arm64.whl", hash = "sha256:0ecf12ecb326fe2c339d93fc131816f3a7367d223db37817208905c89bded911"}, + {file = "coverage-7.13.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fbabfaceaeb587e16f7008f7795cd80d20ec548dc7f94fbb0d4ec2e038ce563f"}, + {file = "coverage-7.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9bb2a28101a443669a423b665939381084412b81c3f8c0fcfbac57f4e30b5b8e"}, + {file = "coverage-7.13.5-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bd3a2fbc1c6cccb3c5106140d87cc6a8715110373ef42b63cf5aea29df8c217a"}, + {file = "coverage-7.13.5-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6c36ddb64ed9d7e496028d1d00dfec3e428e0aabf4006583bb1839958d280510"}, + {file = "coverage-7.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:380e8e9084d8eb38db3a9176a1a4f3c0082c3806fa0dc882d1d87abc3c789247"}, + {file = "coverage-7.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e808af52a0513762df4d945ea164a24b37f2f518cbe97e03deaa0ee66139b4d6"}, + {file = "coverage-7.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e301d30dd7e95ae068671d746ba8c34e945a82682e62918e41b2679acd2051a0"}, + {file = "coverage-7.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:800bc829053c80d240a687ceeb927a94fd108bbdc68dfbe505d0d75ab578a882"}, + {file = "coverage-7.13.5-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:0b67af5492adb31940ee418a5a655c28e48165da5afab8c7fa6fd72a142f8740"}, + {file = "coverage-7.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c9136ff29c3a91e25b1d1552b5308e53a1e0653a23e53b6366d7c2dcbbaf8a16"}, + {file = "coverage-7.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:cff784eef7f0b8f6cb28804fbddcfa99f89efe4cc35fb5627e3ac58f91ed3ac0"}, + {file = "coverage-7.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:68a4953be99b17ac3c23b6efbc8a38330d99680c9458927491d18700ef23ded0"}, + {file = "coverage-7.13.5-cp314-cp314-win32.whl", hash = "sha256:35a31f2b1578185fbe6aa2e74cea1b1d0bbf4c552774247d9160d29b80ed56cc"}, + {file = "coverage-7.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:2aa055ae1857258f9e0045be26a6d62bdb47a72448b62d7b55f4820f361a2633"}, + {file = "coverage-7.13.5-cp314-cp314-win_arm64.whl", hash = "sha256:1b11eef33edeae9d142f9b4358edb76273b3bfd30bc3df9a4f95d0e49caf94e8"}, + {file = "coverage-7.13.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:10a0c37f0b646eaff7cce1874c31d1f1ccb297688d4c747291f4f4c70741cc8b"}, + {file = "coverage-7.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b5db73ba3c41c7008037fa731ad5459fc3944cb7452fc0aa9f822ad3533c583c"}, + {file = "coverage-7.13.5-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:750db93a81e3e5a9831b534be7b1229df848b2e125a604fe6651e48aa070e5f9"}, + {file = "coverage-7.13.5-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9ddb4f4a5479f2539644be484da179b653273bca1a323947d48ab107b3ed1f29"}, + {file = "coverage-7.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8a7a2049c14f413163e2bdabd37e41179b1d1ccb10ffc6ccc4b7a718429c607"}, + {file = "coverage-7.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1c85e0b6c05c592ea6d8768a66a254bfb3874b53774b12d4c89c481eb78cb90"}, + {file = "coverage-7.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:777c4d1eff1b67876139d24288aaf1817f6c03d6bae9c5cc8d27b83bcfe38fe3"}, + {file = "coverage-7.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6697e29b93707167687543480a40f0db8f356e86d9f67ddf2e37e2dfd91a9dab"}, + {file = "coverage-7.13.5-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8fdf453a942c3e4d99bd80088141c4c6960bb232c409d9c3558e2dbaa3998562"}, + {file = "coverage-7.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:32ca0c0114c9834a43f045a87dcebd69d108d8ffb666957ea65aa132f50332e2"}, + {file = "coverage-7.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:8769751c10f339021e2638cd354e13adeac54004d1941119b2c96fe5276d45ea"}, + {file = "coverage-7.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cec2d83125531bd153175354055cdb7a09987af08a9430bd173c937c6d0fba2a"}, + {file = "coverage-7.13.5-cp314-cp314t-win32.whl", hash = "sha256:0cd9ed7a8b181775459296e402ca4fb27db1279740a24e93b3b41942ebe4b215"}, + {file = "coverage-7.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:301e3b7dfefecaca37c9f1aa6f0049b7d4ab8dd933742b607765d757aca77d43"}, + {file = "coverage-7.13.5-cp314-cp314t-win_arm64.whl", hash = "sha256:9dacc2ad679b292709e0f5fc1ac74a6d4d5562e424058962c7bb0c658ad25e45"}, + {file = "coverage-7.13.5-py3-none-any.whl", hash = "sha256:34b02417cf070e173989b3db962f7ed56d2f644307b2cf9d5a0f258e13084a61"}, + {file = "coverage-7.13.5.tar.gz", hash = "sha256:c81f6515c4c40141f83f502b07bbfa5c240ba25bbe73da7b33f1e5b6120ff179"}, ] [package.extras] @@ -1225,74 +1239,74 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.25.0" +version = "3.25.2" description = "A platform independent file lock." optional = false python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "filelock-3.25.0-py3-none-any.whl", hash = "sha256:5ccf8069f7948f494968fc0713c10e5c182a9c9d9eef3a636307a20c2490f047"}, - {file = "filelock-3.25.0.tar.gz", hash = "sha256:8f00faf3abf9dc730a1ffe9c354ae5c04e079ab7d3a683b7c32da5dd05f26af3"}, + {file = "filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70"}, + {file = "filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694"}, ] [[package]] name = "fonttools" -version = "4.61.1" +version = "4.62.1" description = "Tools to manipulate font files" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "fonttools-4.61.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c7db70d57e5e1089a274cbb2b1fd635c9a24de809a231b154965d415d6c6d24"}, - {file = "fonttools-4.61.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5fe9fd43882620017add5eabb781ebfbc6998ee49b35bd7f8f79af1f9f99a958"}, - {file = "fonttools-4.61.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8db08051fc9e7d8bc622f2112511b8107d8f27cd89e2f64ec45e9825e8288da"}, - {file = "fonttools-4.61.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a76d4cb80f41ba94a6691264be76435e5f72f2cb3cab0b092a6212855f71c2f6"}, - {file = "fonttools-4.61.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a13fc8aeb24bad755eea8f7f9d409438eb94e82cf86b08fe77a03fbc8f6a96b1"}, - {file = "fonttools-4.61.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b846a1fcf8beadeb9ea4f44ec5bdde393e2f1569e17d700bfc49cd69bde75881"}, - {file = "fonttools-4.61.1-cp310-cp310-win32.whl", hash = "sha256:78a7d3ab09dc47ac1a363a493e6112d8cabed7ba7caad5f54dbe2f08676d1b47"}, - {file = "fonttools-4.61.1-cp310-cp310-win_amd64.whl", hash = "sha256:eff1ac3cc66c2ac7cda1e64b4e2f3ffef474b7335f92fc3833fc632d595fcee6"}, - {file = "fonttools-4.61.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c6604b735bb12fef8e0efd5578c9fb5d3d8532d5001ea13a19cddf295673ee09"}, - {file = "fonttools-4.61.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5ce02f38a754f207f2f06557523cd39a06438ba3aafc0639c477ac409fc64e37"}, - {file = "fonttools-4.61.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77efb033d8d7ff233385f30c62c7c79271c8885d5c9657d967ede124671bbdfb"}, - {file = "fonttools-4.61.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:75c1a6dfac6abd407634420c93864a1e274ebc1c7531346d9254c0d8f6ca00f9"}, - {file = "fonttools-4.61.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0de30bfe7745c0d1ffa2b0b7048fb7123ad0d71107e10ee090fa0b16b9452e87"}, - {file = "fonttools-4.61.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:58b0ee0ab5b1fc9921eccfe11d1435added19d6494dde14e323f25ad2bc30c56"}, - {file = "fonttools-4.61.1-cp311-cp311-win32.whl", hash = "sha256:f79b168428351d11e10c5aeb61a74e1851ec221081299f4cf56036a95431c43a"}, - {file = "fonttools-4.61.1-cp311-cp311-win_amd64.whl", hash = "sha256:fe2efccb324948a11dd09d22136fe2ac8a97d6c1347cf0b58a911dcd529f66b7"}, - {file = "fonttools-4.61.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f3cb4a569029b9f291f88aafc927dd53683757e640081ca8c412781ea144565e"}, - {file = "fonttools-4.61.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41a7170d042e8c0024703ed13b71893519a1a6d6e18e933e3ec7507a2c26a4b2"}, - {file = "fonttools-4.61.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10d88e55330e092940584774ee5e8a6971b01fc2f4d3466a1d6c158230880796"}, - {file = "fonttools-4.61.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:15acc09befd16a0fb8a8f62bc147e1a82817542d72184acca9ce6e0aeda9fa6d"}, - {file = "fonttools-4.61.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e6bcdf33aec38d16508ce61fd81838f24c83c90a1d1b8c68982857038673d6b8"}, - {file = "fonttools-4.61.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5fade934607a523614726119164ff621e8c30e8fa1ffffbbd358662056ba69f0"}, - {file = "fonttools-4.61.1-cp312-cp312-win32.whl", hash = "sha256:75da8f28eff26defba42c52986de97b22106cb8f26515b7c22443ebc9c2d3261"}, - {file = "fonttools-4.61.1-cp312-cp312-win_amd64.whl", hash = "sha256:497c31ce314219888c0e2fce5ad9178ca83fe5230b01a5006726cdf3ac9f24d9"}, - {file = "fonttools-4.61.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c56c488ab471628ff3bfa80964372fc13504ece601e0d97a78ee74126b2045c"}, - {file = "fonttools-4.61.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc492779501fa723b04d0ab1f5be046797fee17d27700476edc7ee9ae535a61e"}, - {file = "fonttools-4.61.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:64102ca87e84261419c3747a0d20f396eb024bdbeb04c2bfb37e2891f5fadcb5"}, - {file = "fonttools-4.61.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c1b526c8d3f615a7b1867f38a9410849c8f4aef078535742198e942fba0e9bd"}, - {file = "fonttools-4.61.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:41ed4b5ec103bd306bb68f81dc166e77409e5209443e5773cb4ed837bcc9b0d3"}, - {file = "fonttools-4.61.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b501c862d4901792adaec7c25b1ecc749e2662543f68bb194c42ba18d6eec98d"}, - {file = "fonttools-4.61.1-cp313-cp313-win32.whl", hash = "sha256:4d7092bb38c53bbc78e9255a59158b150bcdc115a1e3b3ce0b5f267dc35dd63c"}, - {file = "fonttools-4.61.1-cp313-cp313-win_amd64.whl", hash = "sha256:21e7c8d76f62ab13c9472ccf74515ca5b9a761d1bde3265152a6dc58700d895b"}, - {file = "fonttools-4.61.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fff4f534200a04b4a36e7ae3cb74493afe807b517a09e99cb4faa89a34ed6ecd"}, - {file = "fonttools-4.61.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d9203500f7c63545b4ce3799319fe4d9feb1a1b89b28d3cb5abd11b9dd64147e"}, - {file = "fonttools-4.61.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fa646ecec9528bef693415c79a86e733c70a4965dd938e9a226b0fc64c9d2e6c"}, - {file = "fonttools-4.61.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:11f35ad7805edba3aac1a3710d104592df59f4b957e30108ae0ba6c10b11dd75"}, - {file = "fonttools-4.61.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b931ae8f62db78861b0ff1ac017851764602288575d65b8e8ff1963fed419063"}, - {file = "fonttools-4.61.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b148b56f5de675ee16d45e769e69f87623a4944f7443850bf9a9376e628a89d2"}, - {file = "fonttools-4.61.1-cp314-cp314-win32.whl", hash = "sha256:9b666a475a65f4e839d3d10473fad6d47e0a9db14a2f4a224029c5bfde58ad2c"}, - {file = "fonttools-4.61.1-cp314-cp314-win_amd64.whl", hash = "sha256:4f5686e1fe5fce75d82d93c47a438a25bf0d1319d2843a926f741140b2b16e0c"}, - {file = "fonttools-4.61.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:e76ce097e3c57c4bcb67c5aa24a0ecdbd9f74ea9219997a707a4061fbe2707aa"}, - {file = "fonttools-4.61.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9cfef3ab326780c04d6646f68d4b4742aae222e8b8ea1d627c74e38afcbc9d91"}, - {file = "fonttools-4.61.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a75c301f96db737e1c5ed5fd7d77d9c34466de16095a266509e13da09751bd19"}, - {file = "fonttools-4.61.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:91669ccac46bbc1d09e9273546181919064e8df73488ea087dcac3e2968df9ba"}, - {file = "fonttools-4.61.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c33ab3ca9d3ccd581d58e989d67554e42d8d4ded94ab3ade3508455fe70e65f7"}, - {file = "fonttools-4.61.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:664c5a68ec406f6b1547946683008576ef8b38275608e1cee6c061828171c118"}, - {file = "fonttools-4.61.1-cp314-cp314t-win32.whl", hash = "sha256:aed04cabe26f30c1647ef0e8fbb207516fd40fe9472e9439695f5c6998e60ac5"}, - {file = "fonttools-4.61.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2180f14c141d2f0f3da43f3a81bc8aa4684860f6b0e6f9e165a4831f24e6a23b"}, - {file = "fonttools-4.61.1-py3-none-any.whl", hash = "sha256:17d2bf5d541add43822bcf0c43d7d847b160c9bb01d15d5007d84e2217aaa371"}, - {file = "fonttools-4.61.1.tar.gz", hash = "sha256:6675329885c44657f826ef01d9e4fb33b9158e9d93c537d84ad8399539bc6f69"}, + {file = "fonttools-4.62.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ad5cca75776cd453b1b035b530e943334957ae152a36a88a320e779d61fc980c"}, + {file = "fonttools-4.62.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0b3ae47e8636156a9accff64c02c0924cbebad62854c4a6dbdc110cd5b4b341a"}, + {file = "fonttools-4.62.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9b9e288b4da2f64fd6180644221749de651703e8d0c16bd4b719533a3a7d6e3"}, + {file = "fonttools-4.62.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7bca7a1c1faf235ffe25d4f2e555246b4750220b38de8261d94ebc5ce8a23c23"}, + {file = "fonttools-4.62.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b4e0fcf265ad26e487c56cb12a42dffe7162de708762db951e1b3f755319507d"}, + {file = "fonttools-4.62.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2d850f66830a27b0d498ee05adb13a3781637b1826982cd7e2b3789ef0cc71ae"}, + {file = "fonttools-4.62.1-cp310-cp310-win32.whl", hash = "sha256:486f32c8047ccd05652aba17e4a8819a3a9d78570eb8a0e3b4503142947880ed"}, + {file = "fonttools-4.62.1-cp310-cp310-win_amd64.whl", hash = "sha256:5a648bde915fba9da05ae98856987ca91ba832949a9e2888b48c47ef8b96c5a9"}, + {file = "fonttools-4.62.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:40975849bac44fb0b9253d77420c6d8b523ac4dcdcefeff6e4d706838a5b80f7"}, + {file = "fonttools-4.62.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9dde91633f77fa576879a0c76b1d89de373cae751a98ddf0109d54e173b40f14"}, + {file = "fonttools-4.62.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6acb4109f8bee00fec985c8c7afb02299e35e9c94b57287f3ea542f28bd0b0a7"}, + {file = "fonttools-4.62.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1c5c25671ce8805e0d080e2ffdeca7f1e86778c5cbfbeae86d7f866d8830517b"}, + {file = "fonttools-4.62.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a5d8825e1140f04e6c99bb7d37a9e31c172f3bc208afbe02175339e699c710e1"}, + {file = "fonttools-4.62.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:268abb1cb221e66c014acc234e872b7870d8b5d4657a83a8f4205094c32d2416"}, + {file = "fonttools-4.62.1-cp311-cp311-win32.whl", hash = "sha256:942b03094d7edbb99bdf1ae7e9090898cad7bf9030b3d21f33d7072dbcb51a53"}, + {file = "fonttools-4.62.1-cp311-cp311-win_amd64.whl", hash = "sha256:e8514f4924375f77084e81467e63238b095abda5107620f49421c368a6017ed2"}, + {file = "fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:90365821debbd7db678809c7491ca4acd1e0779b9624cdc6ddaf1f31992bf974"}, + {file = "fonttools-4.62.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:12859ff0b47dd20f110804c3e0d0970f7b832f561630cd879969011541a464a9"}, + {file = "fonttools-4.62.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c125ffa00c3d9003cdaaf7f2c79e6e535628093e14b5de1dccb08859b680936"}, + {file = "fonttools-4.62.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:149f7d84afca659d1a97e39a4778794a2f83bf344c5ee5134e09995086cc2392"}, + {file = "fonttools-4.62.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0aa72c43a601cfa9273bb1ae0518f1acadc01ee181a6fc60cd758d7fdadffc04"}, + {file = "fonttools-4.62.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:19177c8d96c7c36359266e571c5173bcee9157b59cfc8cb0153c5673dc5a3a7d"}, + {file = "fonttools-4.62.1-cp312-cp312-win32.whl", hash = "sha256:a24decd24d60744ee8b4679d38e88b8303d86772053afc29b19d23bb8207803c"}, + {file = "fonttools-4.62.1-cp312-cp312-win_amd64.whl", hash = "sha256:9e7863e10b3de72376280b515d35b14f5eeed639d1aa7824f4cf06779ec65e42"}, + {file = "fonttools-4.62.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c22b1014017111c401469e3acc5433e6acf6ebcc6aa9efb538a533c800971c79"}, + {file = "fonttools-4.62.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:68959f5fc58ed4599b44aad161c2837477d7f35f5f79402d97439974faebfebe"}, + {file = "fonttools-4.62.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef46db46c9447103b8f3ff91e8ba009d5fe181b1920a83757a5762551e32bb68"}, + {file = "fonttools-4.62.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6706d1cb1d5e6251a97ad3c1b9347505c5615c112e66047abbef0f8545fa30d1"}, + {file = "fonttools-4.62.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2e7abd2b1e11736f58c1de27819e1955a53267c21732e78243fa2fa2e5c1e069"}, + {file = "fonttools-4.62.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:403d28ce06ebfc547fbcb0cb8b7f7cc2f7a2d3e1a67ba9a34b14632df9e080f9"}, + {file = "fonttools-4.62.1-cp313-cp313-win32.whl", hash = "sha256:93c316e0f5301b2adbe6a5f658634307c096fd5aae60a5b3412e4f3e1728ab24"}, + {file = "fonttools-4.62.1-cp313-cp313-win_amd64.whl", hash = "sha256:7aa21ff53e28a9c2157acbc44e5b401149d3c9178107130e82d74ceb500e5056"}, + {file = "fonttools-4.62.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fa1d16210b6b10a826d71bed68dd9ec24a9e218d5a5e2797f37c573e7ec215ca"}, + {file = "fonttools-4.62.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:aa69d10ed420d8121118e628ad47d86e4caa79ba37f968597b958f6cceab7eca"}, + {file = "fonttools-4.62.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd13b7999d59c5eb1c2b442eb2d0c427cb517a0b7a1f5798fc5c9e003f5ff782"}, + {file = "fonttools-4.62.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8d337fdd49a79b0d51c4da87bc38169d21c3abbf0c1aa9367eff5c6656fb6dae"}, + {file = "fonttools-4.62.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d241cdc4a67b5431c6d7f115fdf63335222414995e3a1df1a41e1182acd4bcc7"}, + {file = "fonttools-4.62.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c05557a78f8fa514da0f869556eeda40887a8abc77c76ee3f74cf241778afd5a"}, + {file = "fonttools-4.62.1-cp314-cp314-win32.whl", hash = "sha256:49a445d2f544ce4a69338694cad575ba97b9a75fff02720da0882d1a73f12800"}, + {file = "fonttools-4.62.1-cp314-cp314-win_amd64.whl", hash = "sha256:1eecc128c86c552fb963fe846ca4e011b1be053728f798185a1687502f6d398e"}, + {file = "fonttools-4.62.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:1596aeaddf7f78e21e68293c011316a25267b3effdaccaf4d59bc9159d681b82"}, + {file = "fonttools-4.62.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:8f8fca95d3bb3208f59626a4b0ea6e526ee51f5a8ad5d91821c165903e8d9260"}, + {file = "fonttools-4.62.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee91628c08e76f77b533d65feb3fbe6d9dad699f95be51cf0d022db94089cdc4"}, + {file = "fonttools-4.62.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f37df1cac61d906e7b836abe356bc2f34c99d4477467755c216b72aa3dc748b"}, + {file = "fonttools-4.62.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:92bb00a947e666169c99b43753c4305fc95a890a60ef3aeb2a6963e07902cc87"}, + {file = "fonttools-4.62.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bdfe592802ef939a0e33106ea4a318eeb17822c7ee168c290273cbd5fabd746c"}, + {file = "fonttools-4.62.1-cp314-cp314t-win32.whl", hash = "sha256:b820fcb92d4655513d8402d5b219f94481c4443d825b4372c75a2072aa4b357a"}, + {file = "fonttools-4.62.1-cp314-cp314t-win_amd64.whl", hash = "sha256:59b372b4f0e113d3746b88985f1c796e7bf830dd54b28374cd85c2b8acd7583e"}, + {file = "fonttools-4.62.1-py3-none-any.whl", hash = "sha256:7487782e2113861f4ddcc07c3436450659e3caa5e470b27dc2177cade2d8e7fd"}, + {file = "fonttools-4.62.1.tar.gz", hash = "sha256:e54c75fd6041f1122476776880f7c3c3295ffa31962dc6ebe2543c00dca58b5d"}, ] [package.extras] @@ -1634,14 +1648,14 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "identify" -version = "2.6.17" +version = "2.6.18" description = "File identification library for Python" optional = false python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "identify-2.6.17-py2.py3-none-any.whl", hash = "sha256:be5f8412d5ed4b20f2bd41a65f920990bdccaa6a4a18a08f1eefdcd0bdd885f0"}, - {file = "identify-2.6.17.tar.gz", hash = "sha256:f816b0b596b204c9fdf076ded172322f2723cf958d02f9c3587504834c8ff04d"}, + {file = "identify-2.6.18-py2.py3-none-any.whl", hash = "sha256:8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737"}, + {file = "identify-2.6.18.tar.gz", hash = "sha256:873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd"}, ] [package.extras] @@ -1664,14 +1678,14 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 [[package]] name = "imageio" -version = "2.37.2" +version = "2.37.3" description = "Read and write images and video across all major formats. Supports scientific and volumetric data." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] files = [ - {file = "imageio-2.37.2-py3-none-any.whl", hash = "sha256:ad9adfb20335d718c03de457358ed69f141021a333c40a53e57273d8a5bd0b9b"}, - {file = "imageio-2.37.2.tar.gz", hash = "sha256:0212ef2727ac9caa5ca4b2c75ae89454312f440a756fcfc8ef1993e718f50f8a"}, + {file = "imageio-2.37.3-py3-none-any.whl", hash = "sha256:46f5bb8522cd421c0f5ae104d8268f569d856b29eb1a13b92829d1970f32c9f0"}, + {file = "imageio-2.37.3.tar.gz", hash = "sha256:bbb37efbfc4c400fcd534b367b91fcd66d5da639aaa138034431a1c5e0a41451"}, ] [package.dependencies] @@ -1710,14 +1724,14 @@ files = [ [[package]] name = "ipykernel" -version = "7.2.0" +version = "6.31.0" description = "IPython Kernel for Jupyter" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev", "docs"] files = [ - {file = "ipykernel-7.2.0-py3-none-any.whl", hash = "sha256:3bbd4420d2b3cc105cbdf3756bfc04500b1e52f090a90716851f3916c62e1661"}, - {file = "ipykernel-7.2.0.tar.gz", hash = "sha256:18ed160b6dee2cbb16e5f3575858bc19d8f1fe6046a9a680c708494ce31d909e"}, + {file = "ipykernel-6.31.0-py3-none-any.whl", hash = "sha256:abe5386f6ced727a70e0eb0cf1da801fa7c5fa6ff82147747d5a0406cd8c94af"}, + {file = "ipykernel-6.31.0.tar.gz", hash = "sha256:2372ce8bc1ff4f34e58cafed3a0feb2194b91fc7cad0fc72e79e47b45ee9e8f6"}, ] [package.dependencies] @@ -1725,22 +1739,22 @@ appnope = {version = ">=0.1.2", markers = "platform_system == \"Darwin\""} comm = ">=0.1.1" debugpy = ">=1.6.5" ipython = ">=7.23.1" -jupyter-client = ">=8.8.0" -jupyter-core = ">=5.1,<6.0.dev0 || >=6.1.dev0" +jupyter-client = ">=8.0.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" matplotlib-inline = ">=0.1" nest-asyncio = ">=1.4" packaging = ">=22" psutil = ">=5.7" pyzmq = ">=25" -tornado = ">=6.4.1" +tornado = ">=6.2" traitlets = ">=5.4.0" [package.extras] cov = ["coverage[toml]", "matplotlib", "pytest-cov", "trio"] -docs = ["intersphinx-registry", "myst-parser", "pydata-sphinx-theme", "sphinx (<8.2.0)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +docs = ["intersphinx-registry", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] pyqt5 = ["pyqt5"] pyside6 = ["pyside6"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0,<10)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0,<9)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] [[package]] name = "ipython" @@ -1749,6 +1763,7 @@ description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.11" groups = ["dev", "docs"] +markers = "python_version == \"3.11\"" files = [ {file = "ipython-9.10.0-py3-none-any.whl", hash = "sha256:c6ab68cc23bba8c7e18e9b932797014cc61ea7fd6f19de180ab9ba73e65ee58d"}, {file = "ipython-9.10.0.tar.gz", hash = "sha256:cd9e656be97618a0676d058134cd44e6dc7012c0e5cb36a9ce96a8c904adaf77"}, @@ -1781,7 +1796,7 @@ version = "9.11.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.12" -groups = ["dev"] +groups = ["dev", "docs"] markers = "python_version >= \"3.12\"" files = [ {file = "ipython-9.11.0-py3-none-any.whl", hash = "sha256:6922d5bcf944c6e525a76a0a304451b60a2b6f875e86656d8bc2dfda5d710e19"}, @@ -1927,7 +1942,7 @@ name = "jsonschema" version = "4.26.0" description = "An implementation of JSON Schema validation for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["dev", "docs"] files = [ {file = "jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce"}, @@ -1973,7 +1988,7 @@ name = "jupyter-client" version = "8.8.0" description = "Jupyter protocol implementation and client libraries" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["dev", "docs"] files = [ {file = "jupyter_client-8.8.0-py3-none-any.whl", hash = "sha256:f93a5b99c5e23a507b773d3a1136bd6e16c67883ccdbd9a829b0bbdb98cd7d7a"}, @@ -1997,7 +2012,7 @@ name = "jupyter-core" version = "5.9.1" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["dev", "docs"] files = [ {file = "jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407"}, @@ -2113,14 +2128,14 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.5.5" +version = "4.5.6" description = "JupyterLab computational environment" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "jupyterlab-4.5.5-py3-none-any.whl", hash = "sha256:a35694a40a8e7f2e82f387472af24e61b22adcce87b5a8ab97a5d9c486202a6d"}, - {file = "jupyterlab-4.5.5.tar.gz", hash = "sha256:eac620698c59eb810e1729909be418d9373d18137cac66637141abba613b3fda"}, + {file = "jupyterlab-4.5.6-py3-none-any.whl", hash = "sha256:d6b3dac883aa4d9993348e0f8e95b24624f75099aed64eab6a4351a9cdd1e580"}, + {file = "jupyterlab-4.5.6.tar.gz", hash = "sha256:642fe2cfe7f0f5922a8a558ba7a0d246c7bc133b708dfe43f7b3a826d163cf42"}, ] [package.dependencies] @@ -2243,113 +2258,129 @@ typing-extensions = ">=4.3" [[package]] name = "kiwisolver" -version = "1.4.9" +version = "1.5.0" description = "A fast implementation of the Cassowary constraint solver" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b4b4d74bda2b8ebf4da5bd42af11d02d04428b2c32846e4c2c93219df8a7987b"}, - {file = "kiwisolver-1.4.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fb3b8132019ea572f4611d770991000d7f58127560c4889729248eb5852a102f"}, - {file = "kiwisolver-1.4.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84fd60810829c27ae375114cd379da1fa65e6918e1da405f356a775d49a62bcf"}, - {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b78efa4c6e804ecdf727e580dbb9cba85624d2e1c6b5cb059c66290063bd99a9"}, - {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4efec7bcf21671db6a3294ff301d2fc861c31faa3c8740d1a94689234d1b415"}, - {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:90f47e70293fc3688b71271100a1a5453aa9944a81d27ff779c108372cf5567b"}, - {file = "kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fdca1def57a2e88ef339de1737a1449d6dbf5fab184c54a1fca01d541317154"}, - {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9cf554f21be770f5111a1690d42313e140355e687e05cf82cb23d0a721a64a48"}, - {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fc1795ac5cd0510207482c3d1d3ed781143383b8cfd36f5c645f3897ce066220"}, - {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ccd09f20ccdbbd341b21a67ab50a119b64a403b09288c27481575105283c1586"}, - {file = "kiwisolver-1.4.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:540c7c72324d864406a009d72f5d6856f49693db95d1fbb46cf86febef873634"}, - {file = "kiwisolver-1.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:ede8c6d533bc6601a47ad4046080d36b8fc99f81e6f1c17b0ac3c2dc91ac7611"}, - {file = "kiwisolver-1.4.9-cp310-cp310-win_arm64.whl", hash = "sha256:7b4da0d01ac866a57dd61ac258c5607b4cd677f63abaec7b148354d2b2cdd536"}, - {file = "kiwisolver-1.4.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eb14a5da6dc7642b0f3a18f13654847cd8b7a2550e2645a5bda677862b03ba16"}, - {file = "kiwisolver-1.4.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:39a219e1c81ae3b103643d2aedb90f1ef22650deb266ff12a19e7773f3e5f089"}, - {file = "kiwisolver-1.4.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2405a7d98604b87f3fc28b1716783534b1b4b8510d8142adca34ee0bc3c87543"}, - {file = "kiwisolver-1.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dc1ae486f9abcef254b5618dfb4113dd49f94c68e3e027d03cf0143f3f772b61"}, - {file = "kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a1f570ce4d62d718dce3f179ee78dac3b545ac16c0c04bb363b7607a949c0d1"}, - {file = "kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb27e7b78d716c591e88e0a09a2139c6577865d7f2e152488c2cc6257f460872"}, - {file = "kiwisolver-1.4.9-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:15163165efc2f627eb9687ea5f3a28137217d217ac4024893d753f46bce9de26"}, - {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bdee92c56a71d2b24c33a7d4c2856bd6419d017e08caa7802d2963870e315028"}, - {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:412f287c55a6f54b0650bd9b6dce5aceddb95864a1a90c87af16979d37c89771"}, - {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2c93f00dcba2eea70af2be5f11a830a742fe6b579a1d4e00f47760ef13be247a"}, - {file = "kiwisolver-1.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f117e1a089d9411663a3207ba874f31be9ac8eaa5b533787024dc07aeb74f464"}, - {file = "kiwisolver-1.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:be6a04e6c79819c9a8c2373317d19a96048e5a3f90bec587787e86a1153883c2"}, - {file = "kiwisolver-1.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:0ae37737256ba2de764ddc12aed4956460277f00c4996d51a197e72f62f5eec7"}, - {file = "kiwisolver-1.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ac5a486ac389dddcc5bef4f365b6ae3ffff2c433324fb38dd35e3fab7c957999"}, - {file = "kiwisolver-1.4.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f2ba92255faa7309d06fe44c3a4a97efe1c8d640c2a79a5ef728b685762a6fd2"}, - {file = "kiwisolver-1.4.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a2899935e724dd1074cb568ce7ac0dce28b2cd6ab539c8e001a8578eb106d14"}, - {file = "kiwisolver-1.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f6008a4919fdbc0b0097089f67a1eb55d950ed7e90ce2cc3e640abadd2757a04"}, - {file = "kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:67bb8b474b4181770f926f7b7d2f8c0248cbcb78b660fdd41a47054b28d2a752"}, - {file = "kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2327a4a30d3ee07d2fbe2e7933e8a37c591663b96ce42a00bc67461a87d7df77"}, - {file = "kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a08b491ec91b1d5053ac177afe5290adacf1f0f6307d771ccac5de30592d198"}, - {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8fc5c867c22b828001b6a38d2eaeb88160bf5783c6cb4a5e440efc981ce286d"}, - {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3b3115b2581ea35bb6d1f24a4c90af37e5d9b49dcff267eeed14c3893c5b86ab"}, - {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858e4c22fb075920b96a291928cb7dea5644e94c0ee4fcd5af7e865655e4ccf2"}, - {file = "kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ed0fecd28cc62c54b262e3736f8bb2512d8dcfdc2bcf08be5f47f96bf405b145"}, - {file = "kiwisolver-1.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:f68208a520c3d86ea51acf688a3e3002615a7f0238002cccc17affecc86a8a54"}, - {file = "kiwisolver-1.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:2c1a4f57df73965f3f14df20b80ee29e6a7930a57d2d9e8491a25f676e197c60"}, - {file = "kiwisolver-1.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5d0432ccf1c7ab14f9949eec60c5d1f924f17c037e9f8b33352fa05799359b8"}, - {file = "kiwisolver-1.4.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efb3a45b35622bb6c16dbfab491a8f5a391fe0e9d45ef32f4df85658232ca0e2"}, - {file = "kiwisolver-1.4.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1a12cf6398e8a0a001a059747a1cbf24705e18fe413bc22de7b3d15c67cffe3f"}, - {file = "kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b67e6efbf68e077dd71d1a6b37e43e1a99d0bff1a3d51867d45ee8908b931098"}, - {file = "kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5656aa670507437af0207645273ccdfee4f14bacd7f7c67a4306d0dcaeaf6eed"}, - {file = "kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bfc08add558155345129c7803b3671cf195e6a56e7a12f3dde7c57d9b417f525"}, - {file = "kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:40092754720b174e6ccf9e845d0d8c7d8e12c3d71e7fc35f55f3813e96376f78"}, - {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:497d05f29a1300d14e02e6441cf0f5ee81c1ff5a304b0d9fb77423974684e08b"}, - {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdd1a81a1860476eb41ac4bc1e07b3f07259e6d55bbf739b79c8aaedcf512799"}, - {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e6b93f13371d341afee3be9f7c5964e3fe61d5fa30f6a30eb49856935dfe4fc3"}, - {file = "kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d75aa530ccfaa593da12834b86a0724f58bff12706659baa9227c2ccaa06264c"}, - {file = "kiwisolver-1.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:dd0a578400839256df88c16abddf9ba14813ec5f21362e1fe65022e00c883d4d"}, - {file = "kiwisolver-1.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:d4188e73af84ca82468f09cadc5ac4db578109e52acb4518d8154698d3a87ca2"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:5a0f2724dfd4e3b3ac5a82436a8e6fd16baa7d507117e4279b660fe8ca38a3a1"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1b11d6a633e4ed84fc0ddafd4ebfd8ea49b3f25082c04ad12b8315c11d504dc1"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61874cdb0a36016354853593cffc38e56fc9ca5aa97d2c05d3dcf6922cd55a11"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:60c439763a969a6af93b4881db0eed8fadf93ee98e18cbc35bc8da868d0c4f0c"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92a2f997387a1b79a75e7803aa7ded2cfbe2823852ccf1ba3bcf613b62ae3197"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31d512c812daea6d8b3be3b2bfcbeb091dbb09177706569bcfc6240dcf8b41c"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:52a15b0f35dad39862d376df10c5230155243a2c1a436e39eb55623ccbd68185"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a30fd6fdef1430fd9e1ba7b3398b5ee4e2887783917a687d86ba69985fb08748"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cc9617b46837c6468197b5945e196ee9ca43057bb7d9d1ae688101e4e1dddf64"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:0ab74e19f6a2b027ea4f845a78827969af45ce790e6cb3e1ebab71bdf9f215ff"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dba5ee5d3981160c28d5490f0d1b7ed730c22470ff7f6cc26cfcfaacb9896a07"}, - {file = "kiwisolver-1.4.9-cp313-cp313t-win_arm64.whl", hash = "sha256:0749fd8f4218ad2e851e11cc4dc05c7cbc0cbc4267bdfdb31782e65aace4ee9c"}, - {file = "kiwisolver-1.4.9-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:9928fe1eb816d11ae170885a74d074f57af3a0d65777ca47e9aeb854a1fba386"}, - {file = "kiwisolver-1.4.9-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d0005b053977e7b43388ddec89fa567f43d4f6d5c2c0affe57de5ebf290dc552"}, - {file = "kiwisolver-1.4.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2635d352d67458b66fd0667c14cb1d4145e9560d503219034a18a87e971ce4f3"}, - {file = "kiwisolver-1.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:767c23ad1c58c9e827b649a9ab7809fd5fd9db266a9cf02b0e926ddc2c680d58"}, - {file = "kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72d0eb9fba308b8311685c2268cf7d0a0639a6cd027d8128659f72bdd8a024b4"}, - {file = "kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f68e4f3eeca8fb22cc3d731f9715a13b652795ef657a13df1ad0c7dc0e9731df"}, - {file = "kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d84cd4061ae292d8ac367b2c3fa3aad11cb8625a95d135fe93f286f914f3f5a6"}, - {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a60ea74330b91bd22a29638940d115df9dc00af5035a9a2a6ad9399ffb4ceca5"}, - {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ce6a3a4e106cf35c2d9c4fa17c05ce0b180db622736845d4315519397a77beaf"}, - {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:77937e5e2a38a7b48eef0585114fe7930346993a88060d0bf886086d2aa49ef5"}, - {file = "kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:24c175051354f4a28c5d6a31c93906dc653e2bf234e8a4bbfb964892078898ce"}, - {file = "kiwisolver-1.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:0763515d4df10edf6d06a3c19734e2566368980d21ebec439f33f9eb936c07b7"}, - {file = "kiwisolver-1.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:0e4e2bf29574a6a7b7f6cb5fa69293b9f96c928949ac4a53ba3f525dffb87f9c"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d976bbb382b202f71c67f77b0ac11244021cfa3f7dfd9e562eefcea2df711548"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2489e4e5d7ef9a1c300a5e0196e43d9c739f066ef23270607d45aba368b91f2d"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e2ea9f7ab7fbf18fffb1b5434ce7c69a07582f7acc7717720f1d69f3e806f90c"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b34e51affded8faee0dfdb705416153819d8ea9250bbbf7ea1b249bdeb5f1122"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8aacd3d4b33b772542b2e01beb50187536967b514b00003bdda7589722d2a64"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7cf974dd4e35fa315563ac99d6287a1024e4dc2077b8a7d7cd3d2fb65d283134"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85bd218b5ecfbee8c8a82e121802dcb519a86044c9c3b2e4aef02fa05c6da370"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0856e241c2d3df4efef7c04a1e46b1936b6120c9bcf36dd216e3acd84bc4fb21"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9af39d6551f97d31a4deebeac6f45b156f9755ddc59c07b402c148f5dbb6482a"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:bb4ae2b57fc1d8cbd1cf7b1d9913803681ffa903e7488012be5b76dedf49297f"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:aedff62918805fb62d43a4aa2ecd4482c380dc76cd31bd7c8878588a61bd0369"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:1fa333e8b2ce4d9660f2cda9c0e1b6bafcfb2457a9d259faa82289e73ec24891"}, - {file = "kiwisolver-1.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:4a48a2ce79d65d363597ef7b567ce3d14d68783d2b2263d98db3d9477805ba32"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4d1d9e582ad4d63062d34077a9a1e9f3c34088a2ec5135b1f7190c07cf366527"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:deed0c7258ceb4c44ad5ec7d9918f9f14fd05b2be86378d86cf50e63d1e7b771"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a590506f303f512dff6b7f75fd2fd18e16943efee932008fe7140e5fa91d80e"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e09c2279a4d01f099f52d5c4b3d9e208e91edcbd1a175c9662a8b16e000fece9"}, - {file = "kiwisolver-1.4.9-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c9e7cdf45d594ee04d5be1b24dd9d49f3d1590959b2271fb30b5ca2b262c00fb"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:720e05574713db64c356e86732c0f3c5252818d05f9df320f0ad8380641acea5"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:17680d737d5335b552994a2008fab4c851bcd7de33094a82067ef3a576ff02fa"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85b5352f94e490c028926ea567fc569c52ec79ce131dadb968d3853e809518c2"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:464415881e4801295659462c49461a24fb107c140de781d55518c4b80cb6790f"}, - {file = "kiwisolver-1.4.9-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:fb940820c63a9590d31d88b815e7a3aa5915cad3ce735ab45f0c730b39547de1"}, - {file = "kiwisolver-1.4.9.tar.gz", hash = "sha256:c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d"}, + {file = "kiwisolver-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32cc0a5365239a6ea0c6ed461e8838d053b57e397443c0ca894dcc8e388d4374"}, + {file = "kiwisolver-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cc0b66c1eec9021353a4b4483afb12dfd50e3669ffbb9152d6842eb34c7e29fd"}, + {file = "kiwisolver-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:86e0287879f75621ae85197b0877ed2f8b7aa57b511c7331dce2eb6f4de7d476"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:62f59da443c4f4849f73a51a193b1d9d258dcad0c41bc4d1b8fb2bcc04bfeb22"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9190426b7aa26c5229501fa297b8d0653cfd3f5a36f7990c264e157cbf886b3b"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c8277104ded0a51e699c8c3aff63ce2c56d4ed5519a5f73e0fd7057f959a2b9e"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8f9baf6f0a6e7571c45c8863010b45e837c3ee1c2c77fcd6ef423be91b21fedb"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cff8e5383db4989311f99e814feeb90c4723eb4edca425b9d5d9c3fefcdd9537"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ebae99ed6764f2b5771c522477b311be313e8841d2e0376db2b10922daebbba4"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d5cd5189fc2b6a538b75ae45433140c4823463918f7b1617c31e68b085c0022c"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f42c23db5d1521218a3276bb08666dcb662896a0be7347cba864eca45ff64ede"}, + {file = "kiwisolver-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:94eff26096eb5395136634622515b234ecb6c9979824c1f5004c6e3c3c85ccd2"}, + {file = "kiwisolver-1.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:dd952e03bfbb096cfe2dd35cd9e00f269969b67536cb4370994afc20ff2d0875"}, + {file = "kiwisolver-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9eed0f7edbb274413b6ee781cca50541c8c0facd3d6fd289779e494340a2b85c"}, + {file = "kiwisolver-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c4923e404d6bcd91b6779c009542e5647fef32e4a5d75e115e3bbac6f2335eb"}, + {file = "kiwisolver-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0df54df7e686afa55e6f21fb86195224a6d9beb71d637e8d7920c95cf0f89aac"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff710414307fefa903e0d9bdf300972f892c23477829f49504e59834f4195398"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6176c1811d9d5a04fa391c490cc44f451e240697a16977f11c6f722efb9041db"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50847dca5d197fcbd389c805aa1a1cf32f25d2e7273dc47ab181a517666b68cc"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:01808c6d15f4c3e8559595d6d1fe6411c68e4a3822b4b9972b44473b24f4e679"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f1f9f4121ec58628c96baa3de1a55a4e3a333c5102c8e94b64e23bf7b2083309"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b7d335370ae48a780c6e6a6bbfa97342f563744c39c35562f3f367665f5c1de2"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:800ee55980c18545af444d93fdd60c56b580db5cc54867d8cbf8a1dc0829938c"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c438f6ca858697c9ab67eb28246c92508af972e114cac34e57a6d4ba17a3ac08"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8c63c91f95173f9c2a67c7c526b2cea976828a0e7fced9cdcead2802dc10f8a4"}, + {file = "kiwisolver-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:beb7f344487cdcb9e1efe4b7a29681b74d34c08f0043a327a74da852a6749e7b"}, + {file = "kiwisolver-1.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:ad4ae4ffd1ee9cd11357b4c66b612da9888f4f4daf2f36995eda64bd45370cac"}, + {file = "kiwisolver-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4e9750bc21b886308024f8a54ccb9a2cc38ac9fa813bf4348434e3d54f337ff9"}, + {file = "kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:72ec46b7eba5b395e0a7b63025490d3214c11013f4aacb4f5e8d6c3041829588"}, + {file = "kiwisolver-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ed3a984b31da7481b103f68776f7128a89ef26ed40f4dc41a2223cda7fb24819"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2af221f268f5af85e776a73d62b0845fc8baf8ef0abfae79d29c77d0e776aaf"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b0f172dc8ffaccb8522d7c5d899de00133f2f1ca7b0a49b7da98e901de87bf2d"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6ab8ba9152203feec73758dad83af9a0bbe05001eb4639e547207c40cfb52083"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:cdee07c4d7f6d72008d3f73b9bf027f4e11550224c7c50d8df1ae4a37c1402a6"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7c60d3c9b06fb23bd9c6139281ccbdc384297579ae037f08ae90c69f6845c0b1"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e315e5ec90d88e140f57696ff85b484ff68bb311e36f2c414aa4286293e6dee0"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:1465387ac63576c3e125e5337a6892b9e99e0627d52317f3ca79e6930d889d15"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:530a3fd64c87cffa844d4b6b9768774763d9caa299e9b75d8eca6a4423b31314"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1d9daea4ea6b9be74fe2f01f7fbade8d6ffab263e781274cffca0dba9be9eec9"}, + {file = "kiwisolver-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:f18c2d9782259a6dc132fdc7a63c168cbc74b35284b6d75c673958982a378384"}, + {file = "kiwisolver-1.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:f7c7553b13f69c1b29a5bde08ddc6d9d0c8bfb84f9ed01c30db25944aeb852a7"}, + {file = "kiwisolver-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:fd40bb9cd0891c4c3cb1ddf83f8bbfa15731a248fdc8162669405451e2724b09"}, + {file = "kiwisolver-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c0e1403fd7c26d77c1f03e096dc58a5c726503fa0db0456678b8668f76f521e3"}, + {file = "kiwisolver-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dda366d548e89a90d88a86c692377d18d8bd64b39c1fb2b92cb31370e2896bbd"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:332b4f0145c30b5f5ad9374881133e5aa64320428a57c2c2b61e9d891a51c2f3"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c50b89ffd3e1a911c69a1dd3de7173c0cd10b130f56222e57898683841e4f96"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4db576bb8c3ef9365f8b40fe0f671644de6736ae2c27a2c62d7d8a1b4329f099"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0b85aad90cea8ac6797a53b5d5f2e967334fa4d1149f031c4537569972596cb8"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:d36ca54cb4c6c4686f7cbb7b817f66f5911c12ddb519450bbe86707155028f87"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:38f4a703656f493b0ad185211ccfca7f0386120f022066b018eb5296d8613e23"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ac2360e93cb41be81121755c6462cff3beaa9967188c866e5fce5cf13170859"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c95cab08d1965db3d84a121f1c7ce7479bdd4072c9b3dafd8fecce48a2e6b902"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fc20894c3d21194d8041a28b65622d5b86db786da6e3cfe73f0c762951a61167"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7a32f72973f0f950c1920475d5c5ea3d971b81b6f0ec53b8d0a956cc965f22e0"}, + {file = "kiwisolver-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bf3acf1419fa93064a4c2189ac0b58e3be7872bf6ee6177b0d4c63dc4cea276"}, + {file = "kiwisolver-1.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:fa8eb9ecdb7efb0b226acec134e0d709e87a909fa4971a54c0c4f6e88635484c"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:db485b3847d182b908b483b2ed133c66d88d49cacf98fd278fadafe11b4478d1"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:be12f931839a3bdfe28b584db0e640a65a8bcbc24560ae3fdb025a449b3d754e"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:16b85d37c2cbb3253226d26e64663f755d88a03439a9c47df6246b35defbdfb7"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4432b835675f0ea7414aab3d37d119f7226d24869b7a829caeab49ebda407b0c"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b0feb50971481a2cc44d94e88bdb02cdd497618252ae226b8eb1201b957e368"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:56fa888f10d0f367155e76ce849fa1166fc9730d13bd2d65a2aa13b6f5424489"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:940dda65d5e764406b9fb92761cbf462e4e63f712ab60ed98f70552e496f3bf1"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_39_riscv64.whl", hash = "sha256:89fc958c702ee9a745e4700378f5d23fddbc46ff89e8fdbf5395c24d5c1452a3"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9027d773c4ff81487181a925945743413f6069634d0b122d0b37684ccf4f1e18"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:5b233ea3e165e43e35dba1d2b8ecc21cf070b45b65ae17dd2747d2713d942021"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ce9bf03dad3b46408c08649c6fbd6ca28a9fce0eb32fdfffa6775a13103b5310"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:fc4d3f1fb9ca0ae9f97b095963bc6326f1dbfd3779d6679a1e016b9baaa153d3"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f443b4825c50a51ee68585522ab4a1d1257fac65896f282b4c6763337ac9f5d2"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-win_arm64.whl", hash = "sha256:893ff3a711d1b515ba9da14ee090519bad4610ed1962fbe298a434e8c5f8db53"}, + {file = "kiwisolver-1.5.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8df31fe574b8b3993cc61764f40941111b25c2d9fea13d3ce24a49907cd2d615"}, + {file = "kiwisolver-1.5.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1d49a49ac4cbfb7c1375301cd1ec90169dfeae55ff84710d782260ce77a75a02"}, + {file = "kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0cbe94b69b819209a62cb27bdfa5dc2a8977d8de2f89dfd97ba4f53ed3af754e"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:80aa065ffd378ff784822a6d7c3212f2d5f5e9c3589614b5c228b311fd3063ac"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e7f886f47ab881692f278ae901039a234e4025a68e6dfab514263a0b1c4ae05"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5060731cc3ed12ca3a8b57acd4aeca5bbc2f49216dd0bec1650a1acd89486bcd"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a4aa69609f40fce3cbc3f87b2061f042eee32f94b8f11db707b66a26461591a"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:d168fda2dbff7b9b5f38e693182d792a938c31db4dac3a80a4888de603c99554"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:413b820229730d358efd838ecbab79902fe97094565fdc80ddb6b0a18c18a581"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5124d1ea754509b09e53738ec185584cc609aae4a3b510aaf4ed6aa047ef9303"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e4415a8db000bf49a6dd1c478bf70062eaacff0f462b92b0ba68791a905861f9"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d618fd27420381a4f6044faa71f46d8bfd911bd077c555f7138ed88729bfbe79"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5092eb5b1172947f57d6ea7d89b2f29650414e4293c47707eb499ec07a0ac796"}, + {file = "kiwisolver-1.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:d76e2d8c75051d58177e762164d2e9ab92886534e3a12e795f103524f221dd8e"}, + {file = "kiwisolver-1.5.0-cp314-cp314-win_arm64.whl", hash = "sha256:fa6248cd194edff41d7ea9425ced8ca3a6f838bfb295f6f1d6e6bb694a8518df"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d1ffeb80b5676463d7a7d56acbe8e37a20ce725570e09549fe738e02ca6b7e1e"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:bc4d8e252f532ab46a1de9349e2d27b91fce46736a9eedaa37beaca66f574ed4"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6783e069732715ad0c3ce96dbf21dbc2235ab0593f2baf6338101f70371f4028"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e7c4c09a490dc4d4a7f8cbee56c606a320f9dc28cf92a7157a39d1ce7676a657"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a075bd7bd19c70cf67c8badfa36cf7c5d8de3c9ddb8420c51e10d9c50e94920"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bdd3e53429ff02aa319ba59dfe4ceeec345bf46cf180ec2cf6fd5b942e7975e9"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cdcb35dc9d807259c981a85531048ede628eabcffb3239adf3d17463518992d"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:70d593af6a6ca332d1df73d519fddb5148edb15cd90d5f0155e3746a6d4fcc65"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:377815a8616074cabbf3f53354e1d040c35815a134e01d7614b7692e4bf8acfa"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0255a027391d52944eae1dbb5d4cc5903f57092f3674e8e544cdd2622826b3f0"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:012b1eb16e28718fa782b5e61dc6f2da1f0792ca73bd05d54de6cb9561665fc9"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0e3aafb33aed7479377e5e9a82e9d4bf87063741fc99fc7ae48b0f16e32bdd6f"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7a116ae737f0000343218c4edf5bd45893bfeaff0993c0b215d7124c9f77646"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:1dd9b0b119a350976a6d781e7278ec7aca0b201e1a9e2d23d9804afecb6ca681"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:58f812017cd2985c21fbffb4864d59174d4903dd66fa23815e74bbc7a0e2dd57"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-macosx_10_13_x86_64.whl", hash = "sha256:5ae8e62c147495b01a0f4765c878e9bfdf843412446a247e28df59936e99e797"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:f6764a4ccab3078db14a632420930f6186058750df066b8ea2a7106df91d3203"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c31c13da98624f957b0fb1b5bae5383b2333c2c3f6793d9825dd5ce79b525cb7"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-win_amd64.whl", hash = "sha256:1f1489f769582498610e015a8ef2d36f28f505ab3096d0e16b4858a9ec214f57"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:295d9ffe712caa9f8a3081de8d32fc60191b4b51c76f02f951fd8407253528f4"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:51e8c4084897de9f05898c2c2a39af6318044ae969d46ff7a34ed3f96274adca"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b83af57bdddef03c01a9138034c6ff03181a3028d9a1003b301eb1a55e161a3f"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf4679a3d71012a7c2bf360e5cd878fbd5e4fcac0896b56393dec239d81529ed"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:41024ed50e44ab1a60d3fe0a9d15a4ccc9f5f2b1d814ff283c8d01134d5b81bc"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ec4c85dc4b687c7f7f15f553ff26a98bfe8c58f5f7f0ac8905f0ba4c7be60232"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:12e91c215a96e39f57989c8912ae761286ac5a9584d04030ceb3368a357f017a"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be4a51a55833dc29ab5d7503e7bcb3b3af3402d266018137127450005cdfe737"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:daae526907e262de627d8f70058a0f64acc9e2641c164c99c8f594b34a799a16"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:59cd8683f575d96df5bb48f6add94afc055012c29e28124fcae2b63661b9efb1"}, + {file = "kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a"}, ] [[package]] @@ -2504,144 +2535,138 @@ optional = false python-versions = ">=3.6" groups = ["main"] files = [ - {file = "lxml-5.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c4b84d6b580a9625dfa47269bf1fd7fbba7ad69e08b16366a46acb005959c395"}, - {file = "lxml-5.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b4c08ecb26e4270a62f81f81899dfff91623d349e433b126931c9c4577169666"}, - {file = "lxml-5.3.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef926e9f11e307b5a7c97b17c5c609a93fb59ffa8337afac8f89e6fe54eb0b37"}, - {file = "lxml-5.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:017ceeabe739100379fe6ed38b033cd244ce2da4e7f6f07903421f57da3a19a2"}, - {file = "lxml-5.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dae97d9435dc90590f119d056d233c33006b2fd235dd990d5564992261ee7ae8"}, - {file = "lxml-5.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:910f39425c6798ce63c93976ae5af5fff6949e2cb446acbd44d6d892103eaea8"}, - {file = "lxml-5.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9780de781a0d62a7c3680d07963db3048b919fc9e3726d9cfd97296a65ffce1"}, - {file = "lxml-5.3.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:1a06b0c6ba2e3ca45a009a78a4eb4d6b63831830c0a83dcdc495c13b9ca97d3e"}, - {file = "lxml-5.3.2-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:4c62d0a34d1110769a1bbaf77871a4b711a6f59c4846064ccb78bc9735978644"}, - {file = "lxml-5.3.2-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:8f961a4e82f411b14538fe5efc3e6b953e17f5e809c463f0756a0d0e8039b700"}, - {file = "lxml-5.3.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3dfc78f5f9251b6b8ad37c47d4d0bfe63ceb073a916e5b50a3bf5fd67a703335"}, - {file = "lxml-5.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:10e690bc03214d3537270c88e492b8612d5e41b884f232df2b069b25b09e6711"}, - {file = "lxml-5.3.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aa837e6ee9534de8d63bc4c1249e83882a7ac22bd24523f83fad68e6ffdf41ae"}, - {file = "lxml-5.3.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:da4c9223319400b97a2acdfb10926b807e51b69eb7eb80aad4942c0516934858"}, - {file = "lxml-5.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dc0e9bdb3aa4d1de703a437576007d366b54f52c9897cae1a3716bb44fc1fc85"}, - {file = "lxml-5.3.2-cp310-cp310-win32.win32.whl", hash = "sha256:dd755a0a78dd0b2c43f972e7b51a43be518ebc130c9f1a7c4480cf08b4385486"}, - {file = "lxml-5.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:d64ea1686474074b38da13ae218d9fde0d1dc6525266976808f41ac98d9d7980"}, - {file = "lxml-5.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9d61a7d0d208ace43986a92b111e035881c4ed45b1f5b7a270070acae8b0bfb4"}, - {file = "lxml-5.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:856dfd7eda0b75c29ac80a31a6411ca12209183e866c33faf46e77ace3ce8a79"}, - {file = "lxml-5.3.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a01679e4aad0727bedd4c9407d4d65978e920f0200107ceeffd4b019bd48529"}, - {file = "lxml-5.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6b37b4c3acb8472d191816d4582379f64d81cecbdce1a668601745c963ca5cc"}, - {file = "lxml-5.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3df5a54e7b7c31755383f126d3a84e12a4e0333db4679462ef1165d702517477"}, - {file = "lxml-5.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c09a40f28dcded933dc16217d6a092be0cc49ae25811d3b8e937c8060647c353"}, - {file = "lxml-5.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1ef20f1851ccfbe6c5a04c67ec1ce49da16ba993fdbabdce87a92926e505412"}, - {file = "lxml-5.3.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f79a63289dbaba964eb29ed3c103b7911f2dce28c36fe87c36a114e6bd21d7ad"}, - {file = "lxml-5.3.2-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:75a72697d95f27ae00e75086aed629f117e816387b74a2f2da6ef382b460b710"}, - {file = "lxml-5.3.2-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:b9b00c9ee1cc3a76f1f16e94a23c344e0b6e5c10bec7f94cf2d820ce303b8c01"}, - {file = "lxml-5.3.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:77cbcab50cbe8c857c6ba5f37f9a3976499c60eada1bf6d38f88311373d7b4bc"}, - {file = "lxml-5.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:29424058f072a24622a0a15357bca63d796954758248a72da6d512f9bd9a4493"}, - {file = "lxml-5.3.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7d82737a8afe69a7c80ef31d7626075cc7d6e2267f16bf68af2c764b45ed68ab"}, - {file = "lxml-5.3.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:95473d1d50a5d9fcdb9321fdc0ca6e1edc164dce4c7da13616247d27f3d21e31"}, - {file = "lxml-5.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2162068f6da83613f8b2a32ca105e37a564afd0d7009b0b25834d47693ce3538"}, - {file = "lxml-5.3.2-cp311-cp311-win32.whl", hash = "sha256:f8695752cf5d639b4e981afe6c99e060621362c416058effd5c704bede9cb5d1"}, - {file = "lxml-5.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:d1a94cbb4ee64af3ab386c2d63d6d9e9cf2e256ac0fd30f33ef0a3c88f575174"}, - {file = "lxml-5.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:16b3897691ec0316a1aa3c6585f61c8b7978475587c5b16fc1d2c28d283dc1b0"}, - {file = "lxml-5.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a8d4b34a0eeaf6e73169dcfd653c8d47f25f09d806c010daf074fba2db5e2d3f"}, - {file = "lxml-5.3.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9cd7a959396da425022e1e4214895b5cfe7de7035a043bcc2d11303792b67554"}, - {file = "lxml-5.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cac5eaeec3549c5df7f8f97a5a6db6963b91639389cdd735d5a806370847732b"}, - {file = "lxml-5.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29b5f7d77334877c2146e7bb8b94e4df980325fab0a8af4d524e5d43cd6f789d"}, - {file = "lxml-5.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13f3495cfec24e3d63fffd342cc8141355d1d26ee766ad388775f5c8c5ec3932"}, - {file = "lxml-5.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e70ad4c9658beeff99856926fd3ee5fde8b519b92c693f856007177c36eb2e30"}, - {file = "lxml-5.3.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:507085365783abd7879fa0a6fa55eddf4bdd06591b17a2418403bb3aff8a267d"}, - {file = "lxml-5.3.2-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:5bb304f67cbf5dfa07edad904732782cbf693286b9cd85af27059c5779131050"}, - {file = "lxml-5.3.2-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:3d84f5c093645c21c29a4e972b84cb7cf682f707f8706484a5a0c7ff13d7a988"}, - {file = "lxml-5.3.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:bdc13911db524bd63f37b0103af014b7161427ada41f1b0b3c9b5b5a9c1ca927"}, - {file = "lxml-5.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1ec944539543f66ebc060ae180d47e86aca0188bda9cbfadff47d86b0dc057dc"}, - {file = "lxml-5.3.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:59d437cc8a7f838282df5a199cf26f97ef08f1c0fbec6e84bd6f5cc2b7913f6e"}, - {file = "lxml-5.3.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e275961adbd32e15672e14e0cc976a982075208224ce06d149c92cb43db5b93"}, - {file = "lxml-5.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:038aeb6937aa404480c2966b7f26f1440a14005cb0702078c173c028eca72c31"}, - {file = "lxml-5.3.2-cp312-cp312-win32.whl", hash = "sha256:3c2c8d0fa3277147bff180e3590be67597e17d365ce94beb2efa3138a2131f71"}, - {file = "lxml-5.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:77809fcd97dfda3f399102db1794f7280737b69830cd5c961ac87b3c5c05662d"}, - {file = "lxml-5.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:77626571fb5270ceb36134765f25b665b896243529eefe840974269b083e090d"}, - {file = "lxml-5.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:78a533375dc7aa16d0da44af3cf6e96035e484c8c6b2b2445541a5d4d3d289ee"}, - {file = "lxml-5.3.2-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6f62b2404b3f3f0744bbcabb0381c5fe186fa2a9a67ecca3603480f4846c585"}, - {file = "lxml-5.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ea918da00091194526d40c30c4996971f09dacab032607581f8d8872db34fbf"}, - {file = "lxml-5.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c35326f94702a7264aa0eea826a79547d3396a41ae87a70511b9f6e9667ad31c"}, - {file = "lxml-5.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3bef90af21d31c4544bc917f51e04f94ae11b43156356aff243cdd84802cbf2"}, - {file = "lxml-5.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52fa7ba11a495b7cbce51573c73f638f1dcff7b3ee23697467dc063f75352a69"}, - {file = "lxml-5.3.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:ad131e2c4d2c3803e736bb69063382334e03648de2a6b8f56a878d700d4b557d"}, - {file = "lxml-5.3.2-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:00a4463ca409ceacd20490a893a7e08deec7870840eff33dc3093067b559ce3e"}, - {file = "lxml-5.3.2-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:87e8d78205331cace2b73ac8249294c24ae3cba98220687b5b8ec5971a2267f1"}, - {file = "lxml-5.3.2-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bf6389133bb255e530a4f2f553f41c4dd795b1fbb6f797aea1eff308f1e11606"}, - {file = "lxml-5.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b3709fc752b42fb6b6ffa2ba0a5b9871646d97d011d8f08f4d5b3ee61c7f3b2b"}, - {file = "lxml-5.3.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:abc795703d0de5d83943a4badd770fbe3d1ca16ee4ff3783d7caffc252f309ae"}, - {file = "lxml-5.3.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:98050830bb6510159f65d9ad1b8aca27f07c01bb3884ba95f17319ccedc4bcf9"}, - {file = "lxml-5.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6ba465a91acc419c5682f8b06bcc84a424a7aa5c91c220241c6fd31de2a72bc6"}, - {file = "lxml-5.3.2-cp313-cp313-win32.whl", hash = "sha256:56a1d56d60ea1ec940f949d7a309e0bff05243f9bd337f585721605670abb1c1"}, - {file = "lxml-5.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:1a580dc232c33d2ad87d02c8a3069d47abbcdce974b9c9cc82a79ff603065dbe"}, - {file = "lxml-5.3.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:1a59f7fe888d0ec1916d0ad69364c5400cfa2f885ae0576d909f342e94d26bc9"}, - {file = "lxml-5.3.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d67b50abc2df68502a26ed2ccea60c1a7054c289fb7fc31c12e5e55e4eec66bd"}, - {file = "lxml-5.3.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cb08d2cb047c98d6fbbb2e77d6edd132ad6e3fa5aa826ffa9ea0c9b1bc74a84"}, - {file = "lxml-5.3.2-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:495ddb7e10911fb4d673d8aa8edd98d1eadafb3b56e8c1b5f427fd33cadc455b"}, - {file = "lxml-5.3.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:884d9308ac7d581b705a3371185282e1b8eebefd68ccf288e00a2d47f077cc51"}, - {file = "lxml-5.3.2-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:37f3d7cf7f2dd2520df6cc8a13df4c3e3f913c8e0a1f9a875e44f9e5f98d7fee"}, - {file = "lxml-5.3.2-cp36-cp36m-win32.whl", hash = "sha256:e885a1bf98a76dff0a0648850c3083b99d9358ef91ba8fa307c681e8e0732503"}, - {file = "lxml-5.3.2-cp36-cp36m-win_amd64.whl", hash = "sha256:b45f505d0d85f4cdd440cd7500689b8e95110371eaa09da0c0b1103e9a05030f"}, - {file = "lxml-5.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b53cd668facd60b4f0dfcf092e01bbfefd88271b5b4e7b08eca3184dd006cb30"}, - {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5dea998c891f082fe204dec6565dbc2f9304478f2fc97bd4d7a940fec16c873"}, - {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d46bc3e58b01e4f38d75e0d7f745a46875b7a282df145aca9d1479c65ff11561"}, - {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:661feadde89159fd5f7d7639a81ccae36eec46974c4a4d5ccce533e2488949c8"}, - {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:43af2a69af2cacc2039024da08a90174e85f3af53483e6b2e3485ced1bf37151"}, - {file = "lxml-5.3.2-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:1539f962d82436f3d386eb9f29b2a29bb42b80199c74a695dff51b367a61ec0a"}, - {file = "lxml-5.3.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:6673920bf976421b5fac4f29b937702eef4555ee42329546a5fc68bae6178a48"}, - {file = "lxml-5.3.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:9fa722a9cd8845594593cce399a49aa6bfc13b6c83a7ee05e2ab346d9253d52f"}, - {file = "lxml-5.3.2-cp37-cp37m-win32.whl", hash = "sha256:2eadd4efa487f4710755415aed3d6ae9ac8b4327ea45226ffccb239766c8c610"}, - {file = "lxml-5.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:83d8707b1b08cd02c04d3056230ec3b771b18c566ec35e723e60cdf037064e08"}, - {file = "lxml-5.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc6e8678bfa5ccba370103976ccfcf776c85c83da9220ead41ea6fd15d2277b4"}, - {file = "lxml-5.3.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bed509662f67f719119ad56006cd4a38efa68cfa74383060612044915e5f7ad"}, - {file = "lxml-5.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e3925975fadd6fd72a6d80541a6ec75dfbad54044a03aa37282dafcb80fbdfa"}, - {file = "lxml-5.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83c0462dedc5213ac586164c6d7227da9d4d578cf45dd7fbab2ac49b63a008eb"}, - {file = "lxml-5.3.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:53e3f9ca72858834688afa17278649d62aa768a4b2018344be00c399c4d29e95"}, - {file = "lxml-5.3.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:32ba634ef3f1b20f781019a91d78599224dc45745dd572f951adbf1c0c9b0d75"}, - {file = "lxml-5.3.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:1b16504c53f41da5fcf04868a80ac40a39d3eec5329caf761114caec6e844ad1"}, - {file = "lxml-5.3.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:1f9682786138549da44ca4c49b20e7144d063b75f2b2ba611f4cff9b83db1062"}, - {file = "lxml-5.3.2-cp38-cp38-win32.whl", hash = "sha256:d8f74ef8aacdf6ee5c07566a597634bb8535f6b53dc89790db43412498cf6026"}, - {file = "lxml-5.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:49f1cee0fa27e1ee02589c696a9bdf4027e7427f184fa98e6bef0c6613f6f0fa"}, - {file = "lxml-5.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:741c126bcf9aa939e950e64e5e0a89c8e01eda7a5f5ffdfc67073f2ed849caea"}, - {file = "lxml-5.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ab6e9e6aca1fd7d725ffa132286e70dee5b9a4561c5ed291e836440b82888f89"}, - {file = "lxml-5.3.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58e8c9b9ed3c15c2d96943c14efc324b69be6352fe5585733a7db2bf94d97841"}, - {file = "lxml-5.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7811828ddfb8c23f4f1fbf35e7a7b2edec2f2e4c793dee7c52014f28c4b35238"}, - {file = "lxml-5.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:72968623efb1e12e950cbdcd1d0f28eb14c8535bf4be153f1bfffa818b1cf189"}, - {file = "lxml-5.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ebfceaa2ea588b54efb6160e3520983663d45aed8a3895bb2031ada080fb5f04"}, - {file = "lxml-5.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d685d458505b2bfd2e28c812749fe9194a2b0ce285a83537e4309a187ffa270b"}, - {file = "lxml-5.3.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:334e0e414dab1f5366ead8ca34ec3148415f236d5660e175f1d640b11d645847"}, - {file = "lxml-5.3.2-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02e56f7de72fa82561eae69628a7d6febd7891d72248c7ff7d3e7814d4031017"}, - {file = "lxml-5.3.2-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:638d06b4e1d34d1a074fa87deed5fb55c18485fa0dab97abc5604aad84c12031"}, - {file = "lxml-5.3.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:354dab7206d22d7a796fa27c4c5bffddd2393da2ad61835355a4759d435beb47"}, - {file = "lxml-5.3.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d9d9f82ff2c3bf9bb777cb355149f7f3a98ec58f16b7428369dc27ea89556a4c"}, - {file = "lxml-5.3.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:95ad58340e3b7d2b828efc370d1791856613c5cb62ae267158d96e47b3c978c9"}, - {file = "lxml-5.3.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:30fe05f4b7f6e9eb32862745512e7cbd021070ad0f289a7f48d14a0d3fc1d8a9"}, - {file = "lxml-5.3.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:34c688fef86f73dbca0798e0a61bada114677006afa524a8ce97d9e5fabf42e6"}, - {file = "lxml-5.3.2-cp39-cp39-win32.whl", hash = "sha256:4d6d3d1436d57f41984920667ec5ef04bcb158f80df89ac4d0d3f775a2ac0c87"}, - {file = "lxml-5.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:2996e1116bbb3ae2a1fbb2ba4da8f92742290b4011e7e5bce2bd33bbc9d9485a"}, - {file = "lxml-5.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:521ab9c80b98c30b2d987001c3ede2e647e92eeb2ca02e8cb66ef5122d792b24"}, - {file = "lxml-5.3.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1231b0f9810289d41df1eacc4ebb859c63e4ceee29908a0217403cddce38d0"}, - {file = "lxml-5.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271f1a4d5d2b383c36ad8b9b489da5ea9c04eca795a215bae61ed6a57cf083cd"}, - {file = "lxml-5.3.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:6fca8a5a13906ba2677a5252752832beb0f483a22f6c86c71a2bb320fba04f61"}, - {file = "lxml-5.3.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ea0c3b7922209160faef194a5b6995bfe7fa05ff7dda6c423ba17646b7b9de10"}, - {file = "lxml-5.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0a006390834603e5952a2ff74b9a31a6007c7cc74282a087aa6467afb4eea987"}, - {file = "lxml-5.3.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:eae4136a3b8c4cf76f69461fc8f9410d55d34ea48e1185338848a888d71b9675"}, - {file = "lxml-5.3.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d48e06be8d8c58e7feaedd8a37897a6122637efb1637d7ce00ddf5f11f9a92ad"}, - {file = "lxml-5.3.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4b83aed409134093d90e114007034d2c1ebcd92e501b71fd9ec70e612c8b2eb"}, - {file = "lxml-5.3.2-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7a0e77edfe26d3703f954d46bed52c3ec55f58586f18f4b7f581fc56954f1d84"}, - {file = "lxml-5.3.2-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:19f6fcfd15b82036b4d235749d78785eb9c991c7812012dc084e0d8853b4c1c0"}, - {file = "lxml-5.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d49919c95d31ee06eefd43d8c6f69a3cc9bdf0a9b979cc234c4071f0eb5cb173"}, - {file = "lxml-5.3.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2d0a60841410123c533990f392819804a8448853f06daf412c0f383443925e89"}, - {file = "lxml-5.3.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7f729e03090eb4e3981f10efaee35e6004b548636b1a062b8b9a525e752abc"}, - {file = "lxml-5.3.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:579df6e20d8acce3bcbc9fb8389e6ae00c19562e929753f534ba4c29cfe0be4b"}, - {file = "lxml-5.3.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2abcf3f3b8367d6400b908d00d4cd279fc0b8efa287e9043820525762d383699"}, - {file = "lxml-5.3.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:348c06cb2e3176ce98bee8c397ecc89181681afd13d85870df46167f140a305f"}, - {file = "lxml-5.3.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:617ecaccd565cbf1ac82ffcaa410e7da5bd3a4b892bb3543fb2fe19bd1c4467d"}, - {file = "lxml-5.3.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c3eb4278dcdb9d86265ed2c20b9ecac45f2d6072e3904542e591e382c87a9c00"}, - {file = "lxml-5.3.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258b6b53458c5cbd2a88795557ff7e0db99f73a96601b70bc039114cd4ee9e02"}, - {file = "lxml-5.3.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a9d8d25ed2f2183e8471c97d512a31153e123ac5807f61396158ef2793cb6e"}, - {file = "lxml-5.3.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:73bcb635a848c18a3e422ea0ab0092f2e4ef3b02d8ebe87ab49748ebc8ec03d8"}, - {file = "lxml-5.3.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1545de0a69a16ced5767bae8cca1801b842e6e49e96f5e4a8a5acbef023d970b"}, - {file = "lxml-5.3.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:165fcdc2f40fc0fe88a3c3c06c9c2a097388a90bda6a16e6f7c9199c903c9b8e"}, - {file = "lxml-5.3.2.tar.gz", hash = "sha256:773947d0ed809ddad824b7b14467e1a481b8976e87278ac4a730c2f7c7fcddc1"}, + {file = "lxml-5.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e7bc6df34d42322c5289e37e9971d6ed114e3776b45fa879f734bded9d1fea9c"}, + {file = "lxml-5.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6854f8bd8a1536f8a1d9a3655e6354faa6406621cf857dc27b681b69860645c7"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:696ea9e87442467819ac22394ca36cb3d01848dad1be6fac3fb612d3bd5a12cf"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ef80aeac414f33c24b3815ecd560cee272786c3adfa5f31316d8b349bfade28"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b9c2754cef6963f3408ab381ea55f47dabc6f78f4b8ebb0f0b25cf1ac1f7609"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7a62cc23d754bb449d63ff35334acc9f5c02e6dae830d78dab4dd12b78a524f4"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f82125bc7203c5ae8633a7d5d20bcfdff0ba33e436e4ab0abc026a53a8960b7"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:b67319b4aef1a6c56576ff544b67a2a6fbd7eaee485b241cabf53115e8908b8f"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:a8ef956fce64c8551221f395ba21d0724fed6b9b6242ca4f2f7beb4ce2f41997"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:0a01ce7d8479dce84fc03324e3b0c9c90b1ece9a9bb6a1b6c9025e7e4520e78c"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:91505d3ddebf268bb1588eb0f63821f738d20e1e7f05d3c647a5ca900288760b"}, + {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a3bcdde35d82ff385f4ede021df801b5c4a5bcdfb61ea87caabcebfc4945dc1b"}, + {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aea7c06667b987787c7d1f5e1dfcd70419b711cdb47d6b4bb4ad4b76777a0563"}, + {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a7fb111eef4d05909b82152721a59c1b14d0f365e2be4c742a473c5d7372f4f5"}, + {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:43d549b876ce64aa18b2328faff70f5877f8c6dede415f80a2f799d31644d776"}, + {file = "lxml-5.4.0-cp310-cp310-win32.whl", hash = "sha256:75133890e40d229d6c5837b0312abbe5bac1c342452cf0e12523477cd3aa21e7"}, + {file = "lxml-5.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:de5b4e1088523e2b6f730d0509a9a813355b7f5659d70eb4f319c76beea2e250"}, + {file = "lxml-5.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:98a3912194c079ef37e716ed228ae0dcb960992100461b704aea4e93af6b0bb9"}, + {file = "lxml-5.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ea0252b51d296a75f6118ed0d8696888e7403408ad42345d7dfd0d1e93309a7"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b92b69441d1bd39f4940f9eadfa417a25862242ca2c396b406f9272ef09cdcaa"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20e16c08254b9b6466526bc1828d9370ee6c0d60a4b64836bc3ac2917d1e16df"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7605c1c32c3d6e8c990dd28a0970a3cbbf1429d5b92279e37fda05fb0c92190e"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecf4c4b83f1ab3d5a7ace10bafcb6f11df6156857a3c418244cef41ca9fa3e44"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cef4feae82709eed352cd7e97ae062ef6ae9c7b5dbe3663f104cd2c0e8d94ba"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:df53330a3bff250f10472ce96a9af28628ff1f4efc51ccba351a8820bca2a8ba"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:aefe1a7cb852fa61150fcb21a8c8fcea7b58c4cb11fbe59c97a0a4b31cae3c8c"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ef5a7178fcc73b7d8c07229e89f8eb45b2908a9238eb90dcfc46571ccf0383b8"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d2ed1b3cb9ff1c10e6e8b00941bb2e5bb568b307bfc6b17dffbbe8be5eecba86"}, + {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:72ac9762a9f8ce74c9eed4a4e74306f2f18613a6b71fa065495a67ac227b3056"}, + {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f5cb182f6396706dc6cc1896dd02b1c889d644c081b0cdec38747573db88a7d7"}, + {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:3a3178b4873df8ef9457a4875703488eb1622632a9cee6d76464b60e90adbfcd"}, + {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e094ec83694b59d263802ed03a8384594fcce477ce484b0cbcd0008a211ca751"}, + {file = "lxml-5.4.0-cp311-cp311-win32.whl", hash = "sha256:4329422de653cdb2b72afa39b0aa04252fca9071550044904b2e7036d9d97fe4"}, + {file = "lxml-5.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd3be6481ef54b8cfd0e1e953323b7aa9d9789b94842d0e5b142ef4bb7999539"}, + {file = "lxml-5.4.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b5aff6f3e818e6bdbbb38e5967520f174b18f539c2b9de867b1e7fde6f8d95a4"}, + {file = "lxml-5.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942a5d73f739ad7c452bf739a62a0f83e2578afd6b8e5406308731f4ce78b16d"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:460508a4b07364d6abf53acaa0a90b6d370fafde5693ef37602566613a9b0779"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:529024ab3a505fed78fe3cc5ddc079464e709f6c892733e3f5842007cec8ac6e"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ca56ebc2c474e8f3d5761debfd9283b8b18c76c4fc0967b74aeafba1f5647f9"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a81e1196f0a5b4167a8dafe3a66aa67c4addac1b22dc47947abd5d5c7a3f24b5"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00b8686694423ddae324cf614e1b9659c2edb754de617703c3d29ff568448df5"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:c5681160758d3f6ac5b4fea370495c48aac0989d6a0f01bb9a72ad8ef5ab75c4"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:2dc191e60425ad70e75a68c9fd90ab284df64d9cd410ba8d2b641c0c45bc006e"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:67f779374c6b9753ae0a0195a892a1c234ce8416e4448fe1e9f34746482070a7"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:79d5bfa9c1b455336f52343130b2067164040604e41f6dc4d8313867ed540079"}, + {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3d3c30ba1c9b48c68489dc1829a6eede9873f52edca1dda900066542528d6b20"}, + {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1af80c6316ae68aded77e91cd9d80648f7dd40406cef73df841aa3c36f6907c8"}, + {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4d885698f5019abe0de3d352caf9466d5de2baded00a06ef3f1216c1a58ae78f"}, + {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea53d51859b6c64e7c51d522c03cc2c48b9b5d6172126854cc7f01aa11f52bc"}, + {file = "lxml-5.4.0-cp312-cp312-win32.whl", hash = "sha256:d90b729fd2732df28130c064aac9bb8aff14ba20baa4aee7bd0795ff1187545f"}, + {file = "lxml-5.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1dc4ca99e89c335a7ed47d38964abcb36c5910790f9bd106f2a8fa2ee0b909d2"}, + {file = "lxml-5.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:773e27b62920199c6197130632c18fb7ead3257fce1ffb7d286912e56ddb79e0"}, + {file = "lxml-5.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ce9c671845de9699904b1e9df95acfe8dfc183f2310f163cdaa91a3535af95de"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9454b8d8200ec99a224df8854786262b1bd6461f4280064c807303c642c05e76"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cccd007d5c95279e529c146d095f1d39ac05139de26c098166c4beb9374b0f4d"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fce1294a0497edb034cb416ad3e77ecc89b313cff7adbee5334e4dc0d11f422"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:24974f774f3a78ac12b95e3a20ef0931795ff04dbb16db81a90c37f589819551"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:497cab4d8254c2a90bf988f162ace2ddbfdd806fce3bda3f581b9d24c852e03c"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:e794f698ae4c5084414efea0f5cc9f4ac562ec02d66e1484ff822ef97c2cadff"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:2c62891b1ea3094bb12097822b3d44b93fc6c325f2043c4d2736a8ff09e65f60"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:142accb3e4d1edae4b392bd165a9abdee8a3c432a2cca193df995bc3886249c8"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1a42b3a19346e5601d1b8296ff6ef3d76038058f311902edd574461e9c036982"}, + {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4291d3c409a17febf817259cb37bc62cb7eb398bcc95c1356947e2871911ae61"}, + {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4f5322cf38fe0e21c2d73901abf68e6329dc02a4994e483adbcf92b568a09a54"}, + {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0be91891bdb06ebe65122aa6bf3fc94489960cf7e03033c6f83a90863b23c58b"}, + {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:15a665ad90054a3d4f397bc40f73948d48e36e4c09f9bcffc7d90c87410e478a"}, + {file = "lxml-5.4.0-cp313-cp313-win32.whl", hash = "sha256:d5663bc1b471c79f5c833cffbc9b87d7bf13f87e055a5c86c363ccd2348d7e82"}, + {file = "lxml-5.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:bcb7a1096b4b6b24ce1ac24d4942ad98f983cd3810f9711bcd0293f43a9d8b9f"}, + {file = "lxml-5.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7be701c24e7f843e6788353c055d806e8bd8466b52907bafe5d13ec6a6dbaecd"}, + {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb54f7c6bafaa808f27166569b1511fc42701a7713858dddc08afdde9746849e"}, + {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97dac543661e84a284502e0cf8a67b5c711b0ad5fb661d1bd505c02f8cf716d7"}, + {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:c70e93fba207106cb16bf852e421c37bbded92acd5964390aad07cb50d60f5cf"}, + {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9c886b481aefdf818ad44846145f6eaf373a20d200b5ce1a5c8e1bc2d8745410"}, + {file = "lxml-5.4.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:fa0e294046de09acd6146be0ed6727d1f42ded4ce3ea1e9a19c11b6774eea27c"}, + {file = "lxml-5.4.0-cp36-cp36m-win32.whl", hash = "sha256:61c7bbf432f09ee44b1ccaa24896d21075e533cd01477966a5ff5a71d88b2f56"}, + {file = "lxml-5.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7ce1a171ec325192c6a636b64c94418e71a1964f56d002cc28122fceff0b6121"}, + {file = "lxml-5.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:795f61bcaf8770e1b37eec24edf9771b307df3af74d1d6f27d812e15a9ff3872"}, + {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29f451a4b614a7b5b6c2e043d7b64a15bd8304d7e767055e8ab68387a8cacf4e"}, + {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:891f7f991a68d20c75cb13c5c9142b2a3f9eb161f1f12a9489c82172d1f133c0"}, + {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4aa412a82e460571fad592d0f93ce9935a20090029ba08eca05c614f99b0cc92"}, + {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:ac7ba71f9561cd7d7b55e1ea5511543c0282e2b6450f122672a2694621d63b7e"}, + {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:c5d32f5284012deaccd37da1e2cd42f081feaa76981f0eaa474351b68df813c5"}, + {file = "lxml-5.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:ce31158630a6ac85bddd6b830cffd46085ff90498b397bd0a259f59d27a12188"}, + {file = "lxml-5.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:31e63621e073e04697c1b2d23fcb89991790eef370ec37ce4d5d469f40924ed6"}, + {file = "lxml-5.4.0-cp37-cp37m-win32.whl", hash = "sha256:be2ba4c3c5b7900246a8f866580700ef0d538f2ca32535e991027bdaba944063"}, + {file = "lxml-5.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:09846782b1ef650b321484ad429217f5154da4d6e786636c38e434fa32e94e49"}, + {file = "lxml-5.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eaf24066ad0b30917186420d51e2e3edf4b0e2ea68d8cd885b14dc8afdcf6556"}, + {file = "lxml-5.4.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b31a3a77501d86d8ade128abb01082724c0dfd9524f542f2f07d693c9f1175f"}, + {file = "lxml-5.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e108352e203c7afd0eb91d782582f00a0b16a948d204d4dec8565024fafeea5"}, + {file = "lxml-5.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a11a96c3b3f7551c8a8109aa65e8594e551d5a84c76bf950da33d0fb6dfafab7"}, + {file = "lxml-5.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:ca755eebf0d9e62d6cb013f1261e510317a41bf4650f22963474a663fdfe02aa"}, + {file = "lxml-5.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4cd915c0fb1bed47b5e6d6edd424ac25856252f09120e3e8ba5154b6b921860e"}, + {file = "lxml-5.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:226046e386556a45ebc787871d6d2467b32c37ce76c2680f5c608e25823ffc84"}, + {file = "lxml-5.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b108134b9667bcd71236c5a02aad5ddd073e372fb5d48ea74853e009fe38acb6"}, + {file = "lxml-5.4.0-cp38-cp38-win32.whl", hash = "sha256:1320091caa89805df7dcb9e908add28166113dcd062590668514dbd510798c88"}, + {file = "lxml-5.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:073eb6dcdf1f587d9b88c8c93528b57eccda40209cf9be549d469b942b41d70b"}, + {file = "lxml-5.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bda3ea44c39eb74e2488297bb39d47186ed01342f0022c8ff407c250ac3f498e"}, + {file = "lxml-5.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9ceaf423b50ecfc23ca00b7f50b64baba85fb3fb91c53e2c9d00bc86150c7e40"}, + {file = "lxml-5.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:664cdc733bc87449fe781dbb1f309090966c11cc0c0cd7b84af956a02a8a4729"}, + {file = "lxml-5.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67ed8a40665b84d161bae3181aa2763beea3747f748bca5874b4af4d75998f87"}, + {file = "lxml-5.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b4a3bd174cc9cdaa1afbc4620c049038b441d6ba07629d89a83b408e54c35cd"}, + {file = "lxml-5.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:b0989737a3ba6cf2a16efb857fb0dfa20bc5c542737fddb6d893fde48be45433"}, + {file = "lxml-5.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:dc0af80267edc68adf85f2a5d9be1cdf062f973db6790c1d065e45025fa26140"}, + {file = "lxml-5.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:639978bccb04c42677db43c79bdaa23785dc7f9b83bfd87570da8207872f1ce5"}, + {file = "lxml-5.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a99d86351f9c15e4a901fc56404b485b1462039db59288b203f8c629260a142"}, + {file = "lxml-5.4.0-cp39-cp39-win32.whl", hash = "sha256:3e6d5557989cdc3ebb5302bbdc42b439733a841891762ded9514e74f60319ad6"}, + {file = "lxml-5.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:a8c9b7f16b63e65bbba889acb436a1034a82d34fa09752d754f88d708eca80e1"}, + {file = "lxml-5.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1b717b00a71b901b4667226bba282dd462c42ccf618ade12f9ba3674e1fabc55"}, + {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27a9ded0f0b52098ff89dd4c418325b987feed2ea5cc86e8860b0f844285d740"}, + {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7ce10634113651d6f383aa712a194179dcd496bd8c41e191cec2099fa09de5"}, + {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53370c26500d22b45182f98847243efb518d268374a9570409d2e2276232fd37"}, + {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c6364038c519dffdbe07e3cf42e6a7f8b90c275d4d1617a69bb59734c1a2d571"}, + {file = "lxml-5.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b12cb6527599808ada9eb2cd6e0e7d3d8f13fe7bbb01c6311255a15ded4c7ab4"}, + {file = "lxml-5.4.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5f11a1526ebd0dee85e7b1e39e39a0cc0d9d03fb527f56d8457f6df48a10dc0c"}, + {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48b4afaf38bf79109bb060d9016fad014a9a48fb244e11b94f74ae366a64d252"}, + {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de6f6bb8a7840c7bf216fb83eec4e2f79f7325eca8858167b68708b929ab2172"}, + {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5cca36a194a4eb4e2ed6be36923d3cffd03dcdf477515dea687185506583d4c9"}, + {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b7c86884ad23d61b025989d99bfdd92a7351de956e01c61307cb87035960bcb1"}, + {file = "lxml-5.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:53d9469ab5460402c19553b56c3648746774ecd0681b1b27ea74d5d8a3ef5590"}, + {file = "lxml-5.4.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:56dbdbab0551532bb26c19c914848d7251d73edb507c3079d6805fa8bba5b706"}, + {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14479c2ad1cb08b62bb941ba8e0e05938524ee3c3114644df905d2331c76cd57"}, + {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32697d2ea994e0db19c1df9e40275ffe84973e4232b5c274f47e7c1ec9763cdd"}, + {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:24f6df5f24fc3385f622c0c9d63fe34604893bc1a5bdbb2dbf5870f85f9a404a"}, + {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:151d6c40bc9db11e960619d2bf2ec5829f0aaffb10b41dcf6ad2ce0f3c0b2325"}, + {file = "lxml-5.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4025bf2884ac4370a3243c5aa8d66d3cb9e15d3ddd0af2d796eccc5f0244390e"}, + {file = "lxml-5.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9459e6892f59ecea2e2584ee1058f5d8f629446eab52ba2305ae13a32a059530"}, + {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47fb24cc0f052f0576ea382872b3fc7e1f7e3028e53299ea751839418ade92a6"}, + {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50441c9de951a153c698b9b99992e806b71c1f36d14b154592580ff4a9d0d877"}, + {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ab339536aa798b1e17750733663d272038bf28069761d5be57cb4a9b0137b4f8"}, + {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9776af1aad5a4b4a1317242ee2bea51da54b2a7b7b48674be736d463c999f37d"}, + {file = "lxml-5.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:63e7968ff83da2eb6fdda967483a7a023aa497d85ad8f05c3ad9b1f2e8c84987"}, + {file = "lxml-5.4.0.tar.gz", hash = "sha256:d12832e1dbea4be280b22fd0ea7c9b87f0d8fc51ba06e92dc62d52f804f78ebd"}, ] [package.extras] @@ -2687,7 +2712,7 @@ name = "markdown-it-py" version = "4.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main", "docs"] files = [ {file = "markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147"}, @@ -2889,7 +2914,7 @@ name = "matplotlib-inline" version = "0.2.1" description = "Inline Matplotlib backend for Jupyter" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev", "docs"] files = [ {file = "matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76"}, @@ -3008,14 +3033,14 @@ mkdocs = ">=1.1" [[package]] name = "mkdocs-get-deps" -version = "0.2.0" -description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" +version = "0.2.2" +description = "An extra command for MkDocs that infers required PyPI packages from `plugins` in mkdocs.yml" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["docs"] files = [ - {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, - {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, + {file = "mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650"}, + {file = "mkdocs_get_deps-0.2.2.tar.gz", hash = "sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1"}, ] [package.dependencies] @@ -3045,14 +3070,14 @@ pygments = ">2.12.0" [[package]] name = "mkdocs-material" -version = "9.7.4" +version = "9.7.5" description = "Documentation that simply works" optional = false python-versions = ">=3.8" groups = ["docs"] files = [ - {file = "mkdocs_material-9.7.4-py3-none-any.whl", hash = "sha256:6549ad95e4d130ed5099759dfa76ea34c593eefdb9c18c97273605518e99cfbf"}, - {file = "mkdocs_material-9.7.4.tar.gz", hash = "sha256:711b0ee63aca9a8c7124d4c73e83a25aa996e27e814767c3a3967df1b9e56f32"}, + {file = "mkdocs_material-9.7.5-py3-none-any.whl", hash = "sha256:7cf9df2ff121fd098ff6e05c732b0be3699afca9642e2dfe4926c40eb5873eec"}, + {file = "mkdocs_material-9.7.5.tar.gz", hash = "sha256:f76bdab532bad1d9c57ca7187b37eccf64dd12e1586909307f8856db3be384ea"}, ] [package.dependencies] @@ -3061,7 +3086,7 @@ backrefs = ">=5.7.post1" colorama = ">=0.4" jinja2 = ">=3.1" markdown = ">=3.2" -mkdocs = ">=1.6" +mkdocs = ">=1.6,<2" mkdocs-material-extensions = ">=1.3" paginate = ">=0.5" pygments = ">=2.16" @@ -3132,36 +3157,51 @@ mkdocstrings = ">=0.26" [[package]] name = "ml-dtypes" -version = "0.5.1" -description = "" +version = "0.5.4" +description = "ml_dtypes is a stand-alone implementation of several NumPy dtype extensions used in machine learning." optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "ml_dtypes-0.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bd73f51957949069573ff783563486339a9285d72e2f36c18e0c1aa9ca7eb190"}, - {file = "ml_dtypes-0.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:810512e2eccdfc3b41eefa3a27402371a3411453a1efc7e9c000318196140fed"}, - {file = "ml_dtypes-0.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141b2ea2f20bb10802ddca55d91fe21231ef49715cfc971998e8f2a9838f3dbe"}, - {file = "ml_dtypes-0.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:26ebcc69d7b779c8f129393e99732961b5cc33fcff84090451f448c89b0e01b4"}, - {file = "ml_dtypes-0.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:023ce2f502efd4d6c1e0472cc58ce3640d051d40e71e27386bed33901e201327"}, - {file = "ml_dtypes-0.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7000b6e4d8ef07542c05044ec5d8bbae1df083b3f56822c3da63993a113e716f"}, - {file = "ml_dtypes-0.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c09526488c3a9e8b7a23a388d4974b670a9a3dd40c5c8a61db5593ce9b725bab"}, - {file = "ml_dtypes-0.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:15ad0f3b0323ce96c24637a88a6f44f6713c64032f27277b069f285c3cf66478"}, - {file = "ml_dtypes-0.5.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:6f462f5eca22fb66d7ff9c4744a3db4463af06c49816c4b6ac89b16bfcdc592e"}, - {file = "ml_dtypes-0.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f76232163b5b9c34291b54621ee60417601e2e4802a188a0ea7157cd9b323f4"}, - {file = "ml_dtypes-0.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad4953c5eb9c25a56d11a913c2011d7e580a435ef5145f804d98efa14477d390"}, - {file = "ml_dtypes-0.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:9626d0bca1fb387d5791ca36bacbba298c5ef554747b7ebeafefb4564fc83566"}, - {file = "ml_dtypes-0.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:12651420130ee7cc13059fc56dac6ad300c3af3848b802d475148c9defd27c23"}, - {file = "ml_dtypes-0.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9945669d3dadf8acb40ec2e57d38c985d8c285ea73af57fc5b09872c516106d"}, - {file = "ml_dtypes-0.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf9975bda82a99dc935f2ae4c83846d86df8fd6ba179614acac8e686910851da"}, - {file = "ml_dtypes-0.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:fd918d4e6a4e0c110e2e05be7a7814d10dc1b95872accbf6512b80a109b71ae1"}, - {file = "ml_dtypes-0.5.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:05f23447a1c20ddf4dc7c2c661aa9ed93fcb2658f1017c204d1e758714dc28a8"}, - {file = "ml_dtypes-0.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b7fbe5571fdf28fd3aaab3ef4aafc847de9ebf263be959958c1ca58ec8eadf5"}, - {file = "ml_dtypes-0.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d13755f8e8445b3870114e5b6240facaa7cb0c3361e54beba3e07fa912a6e12b"}, - {file = "ml_dtypes-0.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b8a9d46b4df5ae2135a8e8e72b465448ebbc1559997f4f9304a9ecc3413efb5b"}, - {file = "ml_dtypes-0.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afb2009ac98da274e893e03162f6269398b2b00d947e7057ee2469a921d58135"}, - {file = "ml_dtypes-0.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aefedc579ece2f8fb38f876aa7698204ee4c372d0e54f1c1ffa8ca580b54cc60"}, - {file = "ml_dtypes-0.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:8f2c028954f16ede77902b223a8da2d9cbb3892375b85809a5c3cfb1587960c4"}, - {file = "ml_dtypes-0.5.1.tar.gz", hash = "sha256:ac5b58559bb84a95848ed6984eb8013249f90b6bab62aa5acbad876e256002c9"}, + {file = "ml_dtypes-0.5.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b95e97e470fe60ed493fd9ae3911d8da4ebac16bd21f87ffa2b7c588bf22ea2c"}, + {file = "ml_dtypes-0.5.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4b801ebe0b477be666696bda493a9be8356f1f0057a57f1e35cd26928823e5a"}, + {file = "ml_dtypes-0.5.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:388d399a2152dd79a3f0456a952284a99ee5c93d3e2f8dfe25977511e0515270"}, + {file = "ml_dtypes-0.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:4ff7f3e7ca2972e7de850e7b8fcbb355304271e2933dd90814c1cb847414d6e2"}, + {file = "ml_dtypes-0.5.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6c7ecb74c4bd71db68a6bea1edf8da8c34f3d9fe218f038814fd1d310ac76c90"}, + {file = "ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc11d7e8c44a65115d05e2ab9989d1e045125d7be8e05a071a48bc76eb6d6040"}, + {file = "ml_dtypes-0.5.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:19b9a53598f21e453ea2fbda8aa783c20faff8e1eeb0d7ab899309a0053f1483"}, + {file = "ml_dtypes-0.5.4-cp311-cp311-win_amd64.whl", hash = "sha256:7c23c54a00ae43edf48d44066a7ec31e05fdc2eee0be2b8b50dd1903a1db94bb"}, + {file = "ml_dtypes-0.5.4-cp311-cp311-win_arm64.whl", hash = "sha256:557a31a390b7e9439056644cb80ed0735a6e3e3bb09d67fd5687e4b04238d1de"}, + {file = "ml_dtypes-0.5.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a174837a64f5b16cab6f368171a1a03a27936b31699d167684073ff1c4237dac"}, + {file = "ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7f7c643e8b1320fd958bf098aa7ecf70623a42ec5154e3be3be673f4c34d900"}, + {file = "ml_dtypes-0.5.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ad459e99793fa6e13bd5b7e6792c8f9190b4e5a1b45c63aba14a4d0a7f1d5ff"}, + {file = "ml_dtypes-0.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:c1a953995cccb9e25a4ae19e34316671e4e2edaebe4cf538229b1fc7109087b7"}, + {file = "ml_dtypes-0.5.4-cp312-cp312-win_arm64.whl", hash = "sha256:9bad06436568442575beb2d03389aa7456c690a5b05892c471215bfd8cf39460"}, + {file = "ml_dtypes-0.5.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c760d85a2f82e2bed75867079188c9d18dae2ee77c25a54d60e9cc79be1bc48"}, + {file = "ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce756d3a10d0c4067172804c9cc276ba9cc0ff47af9078ad439b075d1abdc29b"}, + {file = "ml_dtypes-0.5.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:533ce891ba774eabf607172254f2e7260ba5f57bdd64030c9a4fcfbd99815d0d"}, + {file = "ml_dtypes-0.5.4-cp313-cp313-win_amd64.whl", hash = "sha256:f21c9219ef48ca5ee78402d5cc831bd58ea27ce89beda894428bc67a52da5328"}, + {file = "ml_dtypes-0.5.4-cp313-cp313-win_arm64.whl", hash = "sha256:35f29491a3e478407f7047b8a4834e4640a77d2737e0b294d049746507af5175"}, + {file = "ml_dtypes-0.5.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:304ad47faa395415b9ccbcc06a0350800bc50eda70f0e45326796e27c62f18b6"}, + {file = "ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6a0df4223b514d799b8a1629c65ddc351b3efa833ccf7f8ea0cf654a61d1e35d"}, + {file = "ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531eff30e4d368cb6255bc2328d070e35836aa4f282a0fb5f3a0cd7260257298"}, + {file = "ml_dtypes-0.5.4-cp313-cp313t-win_amd64.whl", hash = "sha256:cb73dccfc991691c444acc8c0012bee8f2470da826a92e3a20bb333b1a7894e6"}, + {file = "ml_dtypes-0.5.4-cp313-cp313t-win_arm64.whl", hash = "sha256:3bbbe120b915090d9dd1375e4684dd17a20a2491ef25d640a908281da85e73f1"}, + {file = "ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2b857d3af6ac0d39db1de7c706e69c7f9791627209c3d6dedbfca8c7e5faec22"}, + {file = "ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:805cef3a38f4eafae3a5bf9ebdcdb741d0bcfd9e1bd90eb54abd24f928cd2465"}, + {file = "ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14a4fd3228af936461db66faccef6e4f41c1d82fcc30e9f8d58a08916b1d811f"}, + {file = "ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl", hash = "sha256:8c6a2dcebd6f3903e05d51960a8058d6e131fe69f952a5397e5dbabc841b6d56"}, + {file = "ml_dtypes-0.5.4-cp314-cp314-win_arm64.whl", hash = "sha256:5a0f68ca8fd8d16583dfa7793973feb86f2fbb56ce3966daf9c9f748f52a2049"}, + {file = "ml_dtypes-0.5.4-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:bfc534409c5d4b0bf945af29e5d0ab075eae9eecbb549ff8a29280db822f34f9"}, + {file = "ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2314892cdc3fcf05e373d76d72aaa15fda9fb98625effa73c1d646f331fcecb7"}, + {file = "ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d2ffd05a2575b1519dc928c0b93c06339eb67173ff53acb00724502cda231cf"}, + {file = "ml_dtypes-0.5.4-cp314-cp314t-win_amd64.whl", hash = "sha256:4381fe2f2452a2d7589689693d3162e876b3ddb0a832cde7a414f8e1adf7eab1"}, + {file = "ml_dtypes-0.5.4-cp314-cp314t-win_arm64.whl", hash = "sha256:11942cbf2cf92157db91e5022633c0d9474d4dfd813a909383bd23ce828a4b7d"}, + {file = "ml_dtypes-0.5.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d81fdb088defa30eb37bf390bb7dde35d3a83ec112ac8e33d75ab28cc29dd8b0"}, + {file = "ml_dtypes-0.5.4-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:88c982aac7cb1cbe8cbb4e7f253072b1df872701fcaf48d84ffbb433b6568f24"}, + {file = "ml_dtypes-0.5.4-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9b61c19040397970d18d7737375cffd83b1f36a11dd4ad19f83a016f736c3ef"}, + {file = "ml_dtypes-0.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:3d277bf3637f2a62176f4575512e9ff9ef51d00e39626d9fe4a161992f355af2"}, + {file = "ml_dtypes-0.5.4.tar.gz", hash = "sha256:8ab06a50fb9bf9666dd0fe5dfb4676fa2b0ac0f31ecff72a6c3af8e22c063453"}, ] [package.dependencies] @@ -3284,110 +3324,152 @@ optional = false python-versions = ">=3.9" groups = ["main", "dev"] files = [ - {file = "multidict-6.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:078b15e3ee43448aa5365659be7b2966e74962b1c1845c67679c8d62634415f6"}, - {file = "multidict-6.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d266adf4ebb5a89ff5ffaf4d0cbc93fd61aab0fdd71141060b77b2db6e4a0b5b"}, - {file = "multidict-6.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2e04122bbf89afc8dfd271b8089d67e60bc714fdc5cd72e5f9af429bd8b1313"}, - {file = "multidict-6.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d0befac983cb0000b8b7873f55aa72fb053a5d2f154ba02bb03b149a31ddda"}, - {file = "multidict-6.4.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fcdceb8cfa3167a8928fa2d13f5e77f885cbd1d87843acc633df19e276aec0d8"}, - {file = "multidict-6.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d2ac8aa3aa80a49a616cf2b93cdeaf76cf4300657300367a95a383961605e3a"}, - {file = "multidict-6.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:61f64fcad577d1c7e6b21bff12af453be4b6f77fd548cb10cfa88ff0819c0837"}, - {file = "multidict-6.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9206f09ed03381bb69901d409e57a258657933a0ff2c09f246f69e5fb51836a8"}, - {file = "multidict-6.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c513019e1547db1f12d0fba199b790f65790c14d483fcd68d912d301d121db9c"}, - {file = "multidict-6.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:54c78f255ace14daa8e3fa7d38becc7e2adf80f2d1ce9a46802161397173422d"}, - {file = "multidict-6.4.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:864d94857a2ca77c77481c4a3d2fd21c152bf2a15bdaf9f04a3950d5c936c71a"}, - {file = "multidict-6.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:78d5ee7b423ba19b1cdb0a43aaf342cb8bc9961bf7af5853bb695f7e63b3b663"}, - {file = "multidict-6.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:03dcd41721b239ae7d4222f6bfb56d124cfa020abf76ab2fc4f8d7396824e8da"}, - {file = "multidict-6.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6276f4402cd72093c423575fb77009dcf4856f0c1edd5978deb998685e8d65f1"}, - {file = "multidict-6.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5d106d1c8db10aaae30d947821354001a940d20470c10bdfb2de0037d114f29e"}, - {file = "multidict-6.4.0-cp310-cp310-win32.whl", hash = "sha256:6a0bd46edc9f54eb5dfebc8b77c7c7606e8ad0d1c1eda771654a19f74c859d07"}, - {file = "multidict-6.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:bdfc51f6bda2c99401fa92369358b83da03f2db4e92056614471505fe51500f0"}, - {file = "multidict-6.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e180e9e14005813741018980caed99f02504f1baf25f8020a3ffff6da6fbabb9"}, - {file = "multidict-6.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c47fb7567b7151ef9366cb6283cde5731043f9d37fb411785f528f652b08710a"}, - {file = "multidict-6.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5eb804e4ab018a5619b2d33263dce32cde1b6534ecbb8fee14d6955764803e8c"}, - {file = "multidict-6.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79b324b05a03b9de36c5e03d195aee32c4019e9aab44bade4a07152370a5322e"}, - {file = "multidict-6.4.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:54d71522f9a49bebfe9110dccdcdfb7b9ac4aebccd0202aae053963ae982bdcc"}, - {file = "multidict-6.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6b51943e9852968578c6be81bab105727a1de80fa6b0e2d83bb533212c34e77"}, - {file = "multidict-6.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5e0624d091d43e04d38f83559dcfe0e81d1da55cde6dca89bff3552e4f16fb5"}, - {file = "multidict-6.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4dc2de2fe769e499bf6ec52423e057263423cdeb3dc614ab4646736c535ac9"}, - {file = "multidict-6.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa472059b3dcaec7cd9180d19cd941cc411df75277e54861874b9ef5e7c49d0d"}, - {file = "multidict-6.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:080cc978eb9ba3cb9540f73f828e0b014b532c31bb5ee53ddd2d752b4e96f9b2"}, - {file = "multidict-6.4.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:d1de88c47331e43363a96a5723de94ef623ab0293d7a54695c67a30134e868d3"}, - {file = "multidict-6.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ca38ab44b5451a031dda4402fff74d674b55ec6dd1aa4b69bd01a680fc0ac8d3"}, - {file = "multidict-6.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:69a6a0918a42b45f2d67c83155ada3d43d1aed215b1e5af9cab99b600b27865e"}, - {file = "multidict-6.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:54bd6de4c702f22948bcaed9291b89ab903459537fc74fbcb434e905d9d10371"}, - {file = "multidict-6.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c909dd52d1ea246a4c153cea6856e13a99808e7660874831d92b9d09ff9e1432"}, - {file = "multidict-6.4.0-cp311-cp311-win32.whl", hash = "sha256:99932582c8263b2b5f61714df1d5ed87867db0c358514225b692a88e68d62405"}, - {file = "multidict-6.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:b8bfa0da539228e8cb86c75356c99db373914d233e77ce3dc14f34342f57aa9e"}, - {file = "multidict-6.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e5ac33a1074dd48b131066a84cc238cedbe0037fa72ecdb47b544230f518a27c"}, - {file = "multidict-6.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5bebfffa42e49e7a1364674f264aef9dcaba152b691d4eeb5ed468cca11500b7"}, - {file = "multidict-6.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:650c481b90e5b99cd8513df224f8e49c7e4d9cbf85dc0d62a7bca509b772a2b7"}, - {file = "multidict-6.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef76cc3977b13847a1b04fde65d4d41385d5f21ff1f151d795448e8e23b51f7a"}, - {file = "multidict-6.4.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9d60e31dcbada810a5d5476b02a83d5e4b384d67c4da53ebc541fcc303678565"}, - {file = "multidict-6.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93a7b5d9d5daf42e4414b499e7ceeee1e42dc357a077b49f6d3360922f06dc1b"}, - {file = "multidict-6.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2ca4f3ee141c301f1e8b5b0a656a5137a9451a9c2a0df88578a7cd72ea61634"}, - {file = "multidict-6.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e4ce260293924a835d6cef67168fe880e3c28f841b391c6265d157e764ed409"}, - {file = "multidict-6.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749598847b195e6329b59f892150946521bcc249a2a332c21e25ead2f265d7df"}, - {file = "multidict-6.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73ccb5102e45864ef47617526ad452c9655451814fe4224810c325242f3322c1"}, - {file = "multidict-6.4.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ceb46c6fb06c5b4cdcd7ef6f8bc8300919228e47b96d9dbf83ac8c8a59460a88"}, - {file = "multidict-6.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5311bd0c176eadc2f8e7d6f501c7e23d069fbd9766e624727105b8ed568c1fc3"}, - {file = "multidict-6.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:38455489fd3156c04cb4b3e79e905253ed62645eca1e45a10c1f4c14583b6a9e"}, - {file = "multidict-6.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1c3b10946d1cdb374926d89ec0c35e579062097058645126cc097a4408808775"}, - {file = "multidict-6.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f07e465ffb78e4f0d7371a053b31428b87ecb4f67d345ed11ab8268e9dc3ca7e"}, - {file = "multidict-6.4.0-cp312-cp312-win32.whl", hash = "sha256:585a7a560ca776ce76dfc8cce919f0475db308a285b044dd8b9e5825521a7f02"}, - {file = "multidict-6.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:399d33fe1ce06072717f99f23eace13e2257c53c67a153f922f9d6717e1679ad"}, - {file = "multidict-6.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:4a0506deab5313507b8d6e26986ef92082a6ff335d346857f448de64dcfb7614"}, - {file = "multidict-6.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ddc93bdef68a5e0d33d4239bac1463c0f4ab59f710f4223af9a422fffdcf438d"}, - {file = "multidict-6.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3c48d68fd3ee3c54861ca42763e0501925b06802b7e11b624ff3ec7be43eef3f"}, - {file = "multidict-6.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:514ce8beef2cda533d882790f1c192a06feabd177a2cd7571d3536f91e3b6a6b"}, - {file = "multidict-6.4.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:07c3da83720ad218fcfc33d1e7ca5770204cedd57984c3e7dba086a34b254d9e"}, - {file = "multidict-6.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eae70b43b71883809574db26d6191fb40199a623b1b403cb1e499ad2ffba96c2"}, - {file = "multidict-6.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce47b524d127781989928ddaa6a6b81250e7330196a371fba4d85f51c5954117"}, - {file = "multidict-6.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b97b3619963b77f9d6513762f9f1f8f01f272b2242921fdb32058470a7d3c4d"}, - {file = "multidict-6.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea2f9d2b0a47975a22c9c91974ff2350e31e16ff0c33a3643fa622155115d786"}, - {file = "multidict-6.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:00921e97379446c486e4699cc20bd5afb491e0c70296400a26826b96eb2f7e90"}, - {file = "multidict-6.4.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:299e001362ed580c51d1351bf8e1c0a2b2adde0ede8e2dab97aada5ab3894bd8"}, - {file = "multidict-6.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:63f6772ffae9c4fa136b15f2bbbc80f675a163caea3cc0293a9f33d8c8a1c02d"}, - {file = "multidict-6.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:be5aff5f4624e78eb5ac101c0f74d2c7b0065c1fda395894cd7189937c71068c"}, - {file = "multidict-6.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7df0f8da435c98720302f9f725c5f48f09d8049df534d9d867eda9923300bf12"}, - {file = "multidict-6.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:804b15e11fc3c3f81c5f8c1795d13939cdf4c937c2dd3c9202f022584b87e0cd"}, - {file = "multidict-6.4.0-cp313-cp313-win32.whl", hash = "sha256:72d75f9fc07a723eb4be4eda7b60e33969e3e5f92225842c1a593aa01f5b3634"}, - {file = "multidict-6.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:a8ba9d874a806e15c809e67b2831de5b1fd7f5505de581ed60f1c24826fdd1af"}, - {file = "multidict-6.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:54abb61600f2207bac771497e9562573a6dd0dc8b6e4bffb7ec772d59d60de37"}, - {file = "multidict-6.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a43950d4b0b46cf609e0690324b17998f84ba5df96269a3ea90211c9c391aca9"}, - {file = "multidict-6.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:14229efff3c174cdb58c7400285092e91cc6f8c03b88796be8f4425e2f5c677a"}, - {file = "multidict-6.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0c9eef437df76400e34a9d6a423f3a8fb40a9526368b75ae82d298d2c336a45"}, - {file = "multidict-6.4.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6fd307bc929b4047e4fffcf4d30bc7258c814db865a9c720de4c9c795d3536a6"}, - {file = "multidict-6.4.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:437f64d36f732e26e41433ed630ded236cda88f484834025be140c3d96dc7af8"}, - {file = "multidict-6.4.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c355293453a6a81ce4c964cceefecbbe3a5ff5bb492f2ee273116540b247dead"}, - {file = "multidict-6.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7a51fe3ce348fe3d32d2b28c694da6c25187c9f5208cd097477aa813ca8bf1"}, - {file = "multidict-6.4.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83525ad5eeceb9567c6674b893cafd57f8cee1a366a0c3e409df7e87c2342286"}, - {file = "multidict-6.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1d046be7f240ec2a4ad151ac241bb954bc2bfa36f6e4e96ef6961579fff27078"}, - {file = "multidict-6.4.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:c15c0e84e58cb2506b6581bb2e279389f7a0a6db036dd251e77c99e27f842cf8"}, - {file = "multidict-6.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:b90fa4ecf1c704d4f7fbff596bb51719bdeebdb54446f6debc5afa3b80fc445b"}, - {file = "multidict-6.4.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:669c92b2450b4825372e927574961031a9cd8c75eaa2cc4fb5ce60aa1f97c47c"}, - {file = "multidict-6.4.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3658b45ffb6fbb7cfebd168a3447c55c5e8b59ba61e0e4d76932eae69006cefe"}, - {file = "multidict-6.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:57cd75edddcb87845635a2251962f42de9b85aad0a0716c2b2755e37c7b501a9"}, - {file = "multidict-6.4.0-cp313-cp313t-win32.whl", hash = "sha256:5dca9a964c632f2bdf6b15ce6945358744e82d53667b81224bc4233667a3ff37"}, - {file = "multidict-6.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e4e45a03fc209739d4906a4986c0202f1eacbe78fba248826f6d906ac510e7ff"}, - {file = "multidict-6.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0594a4ade168186062677e43b31cabdd8e23f79c5f722dd464d417ca970453cd"}, - {file = "multidict-6.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1ff39aff4f694afbdd727b663a5eb8514ba6b4be279d1dc10dceb6613bcb100d"}, - {file = "multidict-6.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8d95048d1deb2f3e0de799ee72e40ee5a6fc700396525a727dffbb99be4899f0"}, - {file = "multidict-6.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2ebc8c57961bbdd0eecf126f4ede310fb246b9cb9a5bacb94cc9638b25c0159"}, - {file = "multidict-6.4.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7b89c791949026636cca742d2f9f72903a4ffa0e6c2648310f70a9285b372f8d"}, - {file = "multidict-6.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b109c1471c5c69821bc84bae1dedf93c2c3510aac9a7eb21fdc71f2097d7f332"}, - {file = "multidict-6.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0ed65063c2387301d4a67e25ba12ebb22937684438dd4021df2dadd371e751"}, - {file = "multidict-6.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f7ed40abdf884c3209f99eb545c3ffa28272915b34c6e7ca6943e2814484ce4"}, - {file = "multidict-6.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:683a1b3a59e3fb1f6c6d6c87d0628c5954fa9545472868a0895930e6027d227f"}, - {file = "multidict-6.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:83e3d490622139f0d25da20a2528e1e3e2ebaa7a821111c6370e34c158c7aee2"}, - {file = "multidict-6.4.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:26f39d85a7d005a35d932181ccdda640460db7033a82cbd17064c5743ce7cb12"}, - {file = "multidict-6.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1544fdc87107f4e4a188d0ad399872a5c635baa8f48752f0ddfad7517d6b2072"}, - {file = "multidict-6.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:1537c514a1b4f6702a64af61b906b49d57ba3a73cd3268e5a8ad1492a35fe6e9"}, - {file = "multidict-6.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2761093ca696d64fca4ae128ca9d2a735a139d4ec0af0a081eff4d0fb6c69f94"}, - {file = "multidict-6.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:93acb027df1945788f4c924b7e9e0a213f981dc14efd836b63335244f1d3cc8a"}, - {file = "multidict-6.4.0-cp39-cp39-win32.whl", hash = "sha256:76db5d3af30bc344ee313c2da2744e47f6af131d3dbc87618ae5087deb139ec0"}, - {file = "multidict-6.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:08a9f0c935be15b524e93b6700ee63fa10f1e4102c810299dd14a6cb0e9fe956"}, - {file = "multidict-6.4.0-py3-none-any.whl", hash = "sha256:cf6bea2d650530f4df21216a396270d051bf6c4a51f0444c253397e5ad47dcc3"}, - {file = "multidict-6.4.0.tar.gz", hash = "sha256:c2d33f08948b0332badbbc916ba42d947666db433d1faa61f75fc674db3a9861"}, + {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5"}, + {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8"}, + {file = "multidict-6.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdea2e7b2456cfb6694fb113066fd0ec7ea4d67e3a35e1f4cbeea0b448bf5872"}, + {file = "multidict-6.7.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17207077e29342fdc2c9a82e4b306f1127bf1ea91f8b71e02d4798a70bb99991"}, + {file = "multidict-6.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4f49cb5661344764e4c7c7973e92a47a59b8fc19b6523649ec9dc4960e58a03"}, + {file = "multidict-6.7.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a9fc4caa29e2e6ae408d1c450ac8bf19892c5fca83ee634ecd88a53332c59981"}, + {file = "multidict-6.7.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c5f0c21549ab432b57dcc82130f388d84ad8179824cc3f223d5e7cfbfd4143f6"}, + {file = "multidict-6.7.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7dfb78d966b2c906ae1d28ccf6e6712a3cd04407ee5088cd276fe8cb42186190"}, + {file = "multidict-6.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b0d9b91d1aa44db9c1f1ecd0d9d2ae610b2f4f856448664e01a3b35899f3f92"}, + {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dd96c01a9dcd4889dcfcf9eb5544ca0c77603f239e3ffab0524ec17aea9a93ee"}, + {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:067343c68cd6612d375710f895337b3a98a033c94f14b9a99eff902f205424e2"}, + {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5884a04f4ff56c6120f6ccf703bdeb8b5079d808ba604d4d53aec0d55dc33568"}, + {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8affcf1c98b82bc901702eb73b6947a1bfa170823c153fe8a47b5f5f02e48e40"}, + {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0d17522c37d03e85c8098ec8431636309b2682cf12e58f4dbc76121fb50e4962"}, + {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24c0cf81544ca5e17cfcb6e482e7a82cd475925242b308b890c9452a074d4505"}, + {file = "multidict-6.7.1-cp310-cp310-win32.whl", hash = "sha256:d82dd730a95e6643802f4454b8fdecdf08667881a9c5670db85bc5a56693f122"}, + {file = "multidict-6.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cf37cbe5ced48d417ba045aca1b21bafca67489452debcde94778a576666a1df"}, + {file = "multidict-6.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:59bc83d3f66b41dac1e7460aac1d196edc70c9ba3094965c467715a70ecb46db"}, + {file = "multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d"}, + {file = "multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e"}, + {file = "multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855"}, + {file = "multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3"}, + {file = "multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e"}, + {file = "multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a"}, + {file = "multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8"}, + {file = "multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0"}, + {file = "multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144"}, + {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49"}, + {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71"}, + {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3"}, + {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c"}, + {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0"}, + {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa"}, + {file = "multidict-6.7.1-cp311-cp311-win32.whl", hash = "sha256:d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a"}, + {file = "multidict-6.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b"}, + {file = "multidict-6.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6"}, + {file = "multidict-6.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172"}, + {file = "multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd"}, + {file = "multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7"}, + {file = "multidict-6.7.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cb2a55f408c3043e42b40cc8eecd575afa27b7e0b956dfb190de0f8499a57a53"}, + {file = "multidict-6.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75"}, + {file = "multidict-6.7.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c3a32d23520ee37bf327d1e1a656fec76a2edd5c038bf43eddfa0572ec49c60b"}, + {file = "multidict-6.7.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c90fed18bffc0189ba814749fdcc102b536e83a9f738a9003e569acd540a733"}, + {file = "multidict-6.7.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:da62917e6076f512daccfbbde27f46fed1c98fee202f0559adec8ee0de67f71a"}, + {file = "multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961"}, + {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582"}, + {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:398c1478926eca669f2fd6a5856b6de9c0acf23a2cb59a14c0ba5844fa38077e"}, + {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c102791b1c4f3ab36ce4101154549105a53dc828f016356b3e3bcae2e3a039d3"}, + {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a088b62bd733e2ad12c50dad01b7d0166c30287c166e137433d3b410add807a6"}, + {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3d51ff4785d58d3f6c91bdbffcb5e1f7ddfda557727043aa20d20ec4f65e324a"}, + {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba"}, + {file = "multidict-6.7.1-cp312-cp312-win32.whl", hash = "sha256:28ca5ce2fd9716631133d0e9a9b9a745ad7f60bac2bccafb56aa380fc0b6c511"}, + {file = "multidict-6.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcee94dfbd638784645b066074b338bc9cc155d4b4bffa4adce1615c5a426c19"}, + {file = "multidict-6.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:ba0a9fb644d0c1a2194cf7ffb043bd852cea63a57f66fbd33959f7dae18517bf"}, + {file = "multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23"}, + {file = "multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2"}, + {file = "multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445"}, + {file = "multidict-6.7.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177"}, + {file = "multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23"}, + {file = "multidict-6.7.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060"}, + {file = "multidict-6.7.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d"}, + {file = "multidict-6.7.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed"}, + {file = "multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429"}, + {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6"}, + {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9"}, + {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c"}, + {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84"}, + {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d"}, + {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33"}, + {file = "multidict-6.7.1-cp313-cp313-win32.whl", hash = "sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3"}, + {file = "multidict-6.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5"}, + {file = "multidict-6.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df"}, + {file = "multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1"}, + {file = "multidict-6.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963"}, + {file = "multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34"}, + {file = "multidict-6.7.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65"}, + {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292"}, + {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43"}, + {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca"}, + {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd"}, + {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7"}, + {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3"}, + {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4"}, + {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8"}, + {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c"}, + {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52"}, + {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108"}, + {file = "multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32"}, + {file = "multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8"}, + {file = "multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118"}, + {file = "multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee"}, + {file = "multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2"}, + {file = "multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1"}, + {file = "multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d"}, + {file = "multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31"}, + {file = "multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048"}, + {file = "multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362"}, + {file = "multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37"}, + {file = "multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709"}, + {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0"}, + {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb"}, + {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd"}, + {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601"}, + {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1"}, + {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b"}, + {file = "multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d"}, + {file = "multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f"}, + {file = "multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5"}, + {file = "multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581"}, + {file = "multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a"}, + {file = "multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c"}, + {file = "multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262"}, + {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59"}, + {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889"}, + {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4"}, + {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d"}, + {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609"}, + {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489"}, + {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c"}, + {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e"}, + {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c"}, + {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9"}, + {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2"}, + {file = "multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7"}, + {file = "multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5"}, + {file = "multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2"}, + {file = "multidict-6.7.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:65573858d27cdeaca41893185677dc82395159aa28875a8867af66532d413a8f"}, + {file = "multidict-6.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c524c6fb8fc342793708ab111c4dbc90ff9abd568de220432500e47e990c0358"}, + {file = "multidict-6.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:aa23b001d968faef416ff70dc0f1ab045517b9b42a90edd3e9bcdb06479e31d5"}, + {file = "multidict-6.7.1-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6704fa2b7453b2fb121740555fa1ee20cd98c4d011120caf4d2b8d4e7c76eec0"}, + {file = "multidict-6.7.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:121a34e5bfa410cdf2c8c49716de160de3b1dbcd86b49656f5681e4543bcd1a8"}, + {file = "multidict-6.7.1-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:026d264228bcd637d4e060844e39cdc60f86c479e463d49075dedc21b18fbbe0"}, + {file = "multidict-6.7.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0e697826df7eb63418ee190fd06ce9f1803593bb4b9517d08c60d9b9a7f69d8f"}, + {file = "multidict-6.7.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bb08271280173720e9fea9ede98e5231defcbad90f1624bea26f32ec8a956e2f"}, + {file = "multidict-6.7.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c6b3228e1d80af737b72925ce5fb4daf5a335e49cd7ab77ed7b9fdfbf58c526e"}, + {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3943debf0fbb57bdde5901695c11094a9a36723e5c03875f87718ee15ca2f4d2"}, + {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:98c5787b0a0d9a41d9311eae44c3b76e6753def8d8870ab501320efe75a6a5f8"}, + {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:08ccb2a6dc72009093ebe7f3f073e5ec5964cba9a706fa94b1a1484039b87941"}, + {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb351f72c26dc9abe338ca7294661aa22969ad8ffe7ef7d5541d19f368dc854a"}, + {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ac1c665bad8b5d762f5f85ebe4d94130c26965f11de70c708c75671297c776de"}, + {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fa6609d0364f4f6f58351b4659a1f3e0e898ba2a8c5cac04cb2c7bc556b0bc5"}, + {file = "multidict-6.7.1-cp39-cp39-win32.whl", hash = "sha256:6f77ce314a29263e67adadc7e7c1bc699fcb3a305059ab973d038f87caa42ed0"}, + {file = "multidict-6.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:f537b55778cd3cbee430abe3131255d3a78202e0f9ea7ffc6ada893a4bcaeea4"}, + {file = "multidict-6.7.1-cp39-cp39-win_arm64.whl", hash = "sha256:749aa54f578f2e5f439538706a475aa844bfa8ef75854b1401e6e528e4937cf9"}, + {file = "multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56"}, + {file = "multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d"}, ] [[package]] @@ -3468,7 +3550,7 @@ name = "nbclient" version = "0.10.4" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = false -python-versions = ">=3.9.0" +python-versions = ">=3.10.0" groups = ["dev", "docs"] files = [ {file = "nbclient-0.10.4-py3-none-any.whl", hash = "sha256:9162df5a7373d70d606527300a95a975a47c137776cd942e52d9c7e29ff83440"}, @@ -3491,7 +3573,7 @@ name = "nbconvert" version = "7.17.0" description = "Convert Jupyter Notebooks (.ipynb files) to other formats." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev", "docs"] files = [ {file = "nbconvert-7.17.0-py3-none-any.whl", hash = "sha256:4f99a63b337b9a23504347afdab24a11faa7d86b405e5c8f9881cd313336d518"}, @@ -3571,19 +3653,19 @@ files = [ [[package]] name = "notebook" -version = "7.5.4" +version = "7.5.5" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "notebook-7.5.4-py3-none-any.whl", hash = "sha256:860e31782b3d3a25ca0819ff039f5cf77845d1bf30c78ef9528b88b25e0a9850"}, - {file = "notebook-7.5.4.tar.gz", hash = "sha256:b928b2ba22cb63aa83df2e0e76fe3697950a0c1c4a41b84ebccf1972b1bb5771"}, + {file = "notebook-7.5.5-py3-none-any.whl", hash = "sha256:a7c14dbeefa6592e87f72290ca982e0c10f5bbf3786be2a600fda9da2764a2b8"}, + {file = "notebook-7.5.5.tar.gz", hash = "sha256:dc0bfab0f2372c8278c457423d3256c34154ac2cc76bf20e9925260c461013c3"}, ] [package.dependencies] jupyter-server = ">=2.4.0,<3" -jupyterlab = ">=4.5.5,<4.6" +jupyterlab = ">=4.5.6,<4.6" jupyterlab-server = ">=2.28.0,<3" notebook-shim = ">=0.2,<0.3" tornado = ">=6.2.0" @@ -3719,168 +3801,84 @@ numpy = ">=1.23.0" [[package]] name = "numpy" -version = "2.4.2" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.11" -groups = ["main"] -markers = "python_version < \"3.13\"" -files = [ - {file = "numpy-2.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7e88598032542bd49af7c4747541422884219056c268823ef6e5e89851c8825"}, - {file = "numpy-2.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7edc794af8b36ca37ef5fcb5e0d128c7e0595c7b96a2318d1badb6fcd8ee86b1"}, - {file = "numpy-2.4.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6e9f61981ace1360e42737e2bae58b27bf28a1b27e781721047d84bd754d32e7"}, - {file = "numpy-2.4.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cb7bbb88aa74908950d979eeaa24dbdf1a865e3c7e45ff0121d8f70387b55f73"}, - {file = "numpy-2.4.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f069069931240b3fc703f1e23df63443dbd6390614c8c44a87d96cd0ec81eb1"}, - {file = "numpy-2.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c02ef4401a506fb60b411467ad501e1429a3487abca4664871d9ae0b46c8ba32"}, - {file = "numpy-2.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2653de5c24910e49c2b106499803124dde62a5a1fe0eedeaecf4309a5f639390"}, - {file = "numpy-2.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1ae241bbfc6ae276f94a170b14785e561cb5e7f626b6688cf076af4110887413"}, - {file = "numpy-2.4.2-cp311-cp311-win32.whl", hash = "sha256:df1b10187212b198dd45fa943d8985a3c8cf854aed4923796e0e019e113a1bda"}, - {file = "numpy-2.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:b9c618d56a29c9cb1c4da979e9899be7578d2e0b3c24d52079c166324c9e8695"}, - {file = "numpy-2.4.2-cp311-cp311-win_arm64.whl", hash = "sha256:47c5a6ed21d9452b10227e5e8a0e1c22979811cad7dcc19d8e3e2fb8fa03f1a3"}, - {file = "numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a"}, - {file = "numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1"}, - {file = "numpy-2.4.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e"}, - {file = "numpy-2.4.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27"}, - {file = "numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548"}, - {file = "numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f"}, - {file = "numpy-2.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460"}, - {file = "numpy-2.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba"}, - {file = "numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f"}, - {file = "numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85"}, - {file = "numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa"}, - {file = "numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c"}, - {file = "numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979"}, - {file = "numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98"}, - {file = "numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef"}, - {file = "numpy-2.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7"}, - {file = "numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499"}, - {file = "numpy-2.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb"}, - {file = "numpy-2.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7"}, - {file = "numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110"}, - {file = "numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622"}, - {file = "numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71"}, - {file = "numpy-2.4.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262"}, - {file = "numpy-2.4.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913"}, - {file = "numpy-2.4.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab"}, - {file = "numpy-2.4.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82"}, - {file = "numpy-2.4.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f"}, - {file = "numpy-2.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554"}, - {file = "numpy-2.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257"}, - {file = "numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657"}, - {file = "numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b"}, - {file = "numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1"}, - {file = "numpy-2.4.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b"}, - {file = "numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000"}, - {file = "numpy-2.4.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1"}, - {file = "numpy-2.4.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74"}, - {file = "numpy-2.4.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a"}, - {file = "numpy-2.4.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325"}, - {file = "numpy-2.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909"}, - {file = "numpy-2.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a"}, - {file = "numpy-2.4.2-cp314-cp314-win32.whl", hash = "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a"}, - {file = "numpy-2.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75"}, - {file = "numpy-2.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05"}, - {file = "numpy-2.4.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308"}, - {file = "numpy-2.4.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef"}, - {file = "numpy-2.4.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d"}, - {file = "numpy-2.4.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8"}, - {file = "numpy-2.4.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5"}, - {file = "numpy-2.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e"}, - {file = "numpy-2.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a"}, - {file = "numpy-2.4.2-cp314-cp314t-win32.whl", hash = "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443"}, - {file = "numpy-2.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236"}, - {file = "numpy-2.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181"}, - {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:89f7268c009bc492f506abd6f5265defa7cb3f7487dc21d357c3d290add45082"}, - {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6dee3bb76aa4009d5a912180bf5b2de012532998d094acee25d9cb8dee3e44a"}, - {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:cd2bd2bbed13e213d6b55dc1d035a4f91748a7d3edc9480c13898b0353708920"}, - {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:cf28c0c1d4c4bf00f509fa7eb02c58d7caf221b50b467bcb0d9bbf1584d5c821"}, - {file = "numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e04ae107ac591763a47398bb45b568fc38f02dbc4aa44c063f67a131f99346cb"}, - {file = "numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:602f65afdef699cda27ec0b9224ae5dc43e328f4c24c689deaf77133dbee74d0"}, - {file = "numpy-2.4.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be71bf1edb48ebbbf7f6337b5bfd2f895d1902f6335a5830b20141fc126ffba0"}, - {file = "numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae"}, -] - -[[package]] -name = "numpy" -version = "2.4.2" +version = "2.4.3" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.11" groups = ["main"] -markers = "python_version >= \"3.13\"" -files = [ - {file = "numpy-2.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7e88598032542bd49af7c4747541422884219056c268823ef6e5e89851c8825"}, - {file = "numpy-2.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7edc794af8b36ca37ef5fcb5e0d128c7e0595c7b96a2318d1badb6fcd8ee86b1"}, - {file = "numpy-2.4.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6e9f61981ace1360e42737e2bae58b27bf28a1b27e781721047d84bd754d32e7"}, - {file = "numpy-2.4.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cb7bbb88aa74908950d979eeaa24dbdf1a865e3c7e45ff0121d8f70387b55f73"}, - {file = "numpy-2.4.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f069069931240b3fc703f1e23df63443dbd6390614c8c44a87d96cd0ec81eb1"}, - {file = "numpy-2.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c02ef4401a506fb60b411467ad501e1429a3487abca4664871d9ae0b46c8ba32"}, - {file = "numpy-2.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2653de5c24910e49c2b106499803124dde62a5a1fe0eedeaecf4309a5f639390"}, - {file = "numpy-2.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1ae241bbfc6ae276f94a170b14785e561cb5e7f626b6688cf076af4110887413"}, - {file = "numpy-2.4.2-cp311-cp311-win32.whl", hash = "sha256:df1b10187212b198dd45fa943d8985a3c8cf854aed4923796e0e019e113a1bda"}, - {file = "numpy-2.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:b9c618d56a29c9cb1c4da979e9899be7578d2e0b3c24d52079c166324c9e8695"}, - {file = "numpy-2.4.2-cp311-cp311-win_arm64.whl", hash = "sha256:47c5a6ed21d9452b10227e5e8a0e1c22979811cad7dcc19d8e3e2fb8fa03f1a3"}, - {file = "numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a"}, - {file = "numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1"}, - {file = "numpy-2.4.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e"}, - {file = "numpy-2.4.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27"}, - {file = "numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548"}, - {file = "numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f"}, - {file = "numpy-2.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460"}, - {file = "numpy-2.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba"}, - {file = "numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f"}, - {file = "numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85"}, - {file = "numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa"}, - {file = "numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c"}, - {file = "numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979"}, - {file = "numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98"}, - {file = "numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef"}, - {file = "numpy-2.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7"}, - {file = "numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499"}, - {file = "numpy-2.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb"}, - {file = "numpy-2.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7"}, - {file = "numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110"}, - {file = "numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622"}, - {file = "numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71"}, - {file = "numpy-2.4.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262"}, - {file = "numpy-2.4.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913"}, - {file = "numpy-2.4.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab"}, - {file = "numpy-2.4.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82"}, - {file = "numpy-2.4.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f"}, - {file = "numpy-2.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554"}, - {file = "numpy-2.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257"}, - {file = "numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657"}, - {file = "numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b"}, - {file = "numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1"}, - {file = "numpy-2.4.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b"}, - {file = "numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000"}, - {file = "numpy-2.4.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1"}, - {file = "numpy-2.4.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74"}, - {file = "numpy-2.4.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a"}, - {file = "numpy-2.4.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325"}, - {file = "numpy-2.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909"}, - {file = "numpy-2.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a"}, - {file = "numpy-2.4.2-cp314-cp314-win32.whl", hash = "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a"}, - {file = "numpy-2.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75"}, - {file = "numpy-2.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05"}, - {file = "numpy-2.4.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308"}, - {file = "numpy-2.4.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef"}, - {file = "numpy-2.4.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d"}, - {file = "numpy-2.4.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8"}, - {file = "numpy-2.4.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5"}, - {file = "numpy-2.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e"}, - {file = "numpy-2.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a"}, - {file = "numpy-2.4.2-cp314-cp314t-win32.whl", hash = "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443"}, - {file = "numpy-2.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236"}, - {file = "numpy-2.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181"}, - {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:89f7268c009bc492f506abd6f5265defa7cb3f7487dc21d357c3d290add45082"}, - {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6dee3bb76aa4009d5a912180bf5b2de012532998d094acee25d9cb8dee3e44a"}, - {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:cd2bd2bbed13e213d6b55dc1d035a4f91748a7d3edc9480c13898b0353708920"}, - {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:cf28c0c1d4c4bf00f509fa7eb02c58d7caf221b50b467bcb0d9bbf1584d5c821"}, - {file = "numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e04ae107ac591763a47398bb45b568fc38f02dbc4aa44c063f67a131f99346cb"}, - {file = "numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:602f65afdef699cda27ec0b9224ae5dc43e328f4c24c689deaf77133dbee74d0"}, - {file = "numpy-2.4.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be71bf1edb48ebbbf7f6337b5bfd2f895d1902f6335a5830b20141fc126ffba0"}, - {file = "numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae"}, +files = [ + {file = "numpy-2.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:33b3bf58ee84b172c067f56aeadc7ee9ab6de69c5e800ab5b10295d54c581adb"}, + {file = "numpy-2.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8ba7b51e71c05aa1f9bc3641463cd82308eab40ce0d5c7e1fd4038cbf9938147"}, + {file = "numpy-2.4.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a1988292870c7cb9d0ebb4cc96b4d447513a9644801de54606dc7aabf2b7d920"}, + {file = "numpy-2.4.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:23b46bb6d8ecb68b58c09944483c135ae5f0e9b8d8858ece5e4ead783771d2a9"}, + {file = "numpy-2.4.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a016db5c5dba78fa8fe9f5d80d6708f9c42ab087a739803c0ac83a43d686a470"}, + {file = "numpy-2.4.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:715de7f82e192e8cae5a507a347d97ad17598f8e026152ca97233e3666daaa71"}, + {file = "numpy-2.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2ddb7919366ee468342b91dea2352824c25b55814a987847b6c52003a7c97f15"}, + {file = "numpy-2.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a315e5234d88067f2d97e1f2ef670a7569df445d55400f1e33d117418d008d52"}, + {file = "numpy-2.4.3-cp311-cp311-win32.whl", hash = "sha256:2b3f8d2c4589b1a2028d2a770b0fc4d1f332fb5e01521f4de3199a896d158ddd"}, + {file = "numpy-2.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:77e76d932c49a75617c6d13464e41203cd410956614d0a0e999b25e9e8d27eec"}, + {file = "numpy-2.4.3-cp311-cp311-win_arm64.whl", hash = "sha256:eb610595dd91560905c132c709412b512135a60f1851ccbd2c959e136431ff67"}, + {file = "numpy-2.4.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:61b0cbabbb6126c8df63b9a3a0c4b1f44ebca5e12ff6997b80fcf267fb3150ef"}, + {file = "numpy-2.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7395e69ff32526710748f92cd8c9849b361830968ea3e24a676f272653e8983e"}, + {file = "numpy-2.4.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:abdce0f71dcb4a00e4e77f3faf05e4616ceccfe72ccaa07f47ee79cda3b7b0f4"}, + {file = "numpy-2.4.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:48da3a4ee1336454b07497ff7ec83903efa5505792c4e6d9bf83d99dc07a1e18"}, + {file = "numpy-2.4.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:32e3bef222ad6b052280311d1d60db8e259e4947052c3ae7dd6817451fc8a4c5"}, + {file = "numpy-2.4.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e7dd01a46700b1967487141a66ac1a3cf0dd8ebf1f08db37d46389401512ca97"}, + {file = "numpy-2.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:76f0f283506c28b12bba319c0fab98217e9f9b54e6160e9c79e9f7348ba32e9c"}, + {file = "numpy-2.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:737f630a337364665aba3b5a77e56a68cc42d350edd010c345d65a3efa3addcc"}, + {file = "numpy-2.4.3-cp312-cp312-win32.whl", hash = "sha256:26952e18d82a1dbbc2f008d402021baa8d6fc8e84347a2072a25e08b46d698b9"}, + {file = "numpy-2.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:65f3c2455188f09678355f5cae1f959a06b778bc66d535da07bf2ef20cd319d5"}, + {file = "numpy-2.4.3-cp312-cp312-win_arm64.whl", hash = "sha256:2abad5c7fef172b3377502bde47892439bae394a71bc329f31df0fd829b41a9e"}, + {file = "numpy-2.4.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b346845443716c8e542d54112966383b448f4a3ba5c66409771b8c0889485dd3"}, + {file = "numpy-2.4.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2629289168f4897a3c4e23dc98d6f1731f0fc0fe52fb9db19f974041e4cc12b9"}, + {file = "numpy-2.4.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:bb2e3cf95854233799013779216c57e153c1ee67a0bf92138acca0e429aefaee"}, + {file = "numpy-2.4.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:7f3408ff897f8ab07a07fbe2823d7aee6ff644c097cc1f90382511fe982f647f"}, + {file = "numpy-2.4.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:decb0eb8a53c3b009b0962378065589685d66b23467ef5dac16cbe818afde27f"}, + {file = "numpy-2.4.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5f51900414fc9204a0e0da158ba2ac52b75656e7dce7e77fb9f84bfa343b4cc"}, + {file = "numpy-2.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6bd06731541f89cdc01b261ba2c9e037f1543df7472517836b78dfb15bd6e476"}, + {file = "numpy-2.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:22654fe6be0e5206f553a9250762c653d3698e46686eee53b399ab90da59bd92"}, + {file = "numpy-2.4.3-cp313-cp313-win32.whl", hash = "sha256:d71e379452a2f670ccb689ec801b1218cd3983e253105d6e83780967e899d687"}, + {file = "numpy-2.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:0a60e17a14d640f49146cb38e3f105f571318db7826d9b6fef7e4dce758faecd"}, + {file = "numpy-2.4.3-cp313-cp313-win_arm64.whl", hash = "sha256:c9619741e9da2059cd9c3f206110b97583c7152c1dc9f8aafd4beb450ac1c89d"}, + {file = "numpy-2.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7aa4e54f6469300ebca1d9eb80acd5253cdfa36f2c03d79a35883687da430875"}, + {file = "numpy-2.4.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d1b90d840b25874cf5cd20c219af10bac3667db3876d9a495609273ebe679070"}, + {file = "numpy-2.4.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a749547700de0a20a6718293396ec237bb38218049cfce788e08fcb716e8cf73"}, + {file = "numpy-2.4.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94f3c4a151a2e529adf49c1d54f0f57ff8f9b233ee4d44af623a81553ab86368"}, + {file = "numpy-2.4.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c31dc07025123aedf7f2db9e91783df13f1776dc52c6b22c620870dc0fab22"}, + {file = "numpy-2.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:148d59127ac95979d6f07e4d460f934ebdd6eed641db9c0db6c73026f2b2101a"}, + {file = "numpy-2.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a97cbf7e905c435865c2d939af3d93f99d18eaaa3cabe4256f4304fb51604349"}, + {file = "numpy-2.4.3-cp313-cp313t-win32.whl", hash = "sha256:be3b8487d725a77acccc9924f65fd8bce9af7fac8c9820df1049424a2115af6c"}, + {file = "numpy-2.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1ec84fd7c8e652b0f4aaaf2e6e9cc8eaa9b1b80a537e06b2e3a2fb176eedcb26"}, + {file = "numpy-2.4.3-cp313-cp313t-win_arm64.whl", hash = "sha256:120df8c0a81ebbf5b9020c91439fccd85f5e018a927a39f624845be194a2be02"}, + {file = "numpy-2.4.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:5884ce5c7acfae1e4e1b6fde43797d10aa506074d25b531b4f54bde33c0c31d4"}, + {file = "numpy-2.4.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:297837823f5bc572c5f9379b0c9f3a3365f08492cbdc33bcc3af174372ebb168"}, + {file = "numpy-2.4.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:a111698b4a3f8dcbe54c64a7708f049355abd603e619013c346553c1fd4ca90b"}, + {file = "numpy-2.4.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:4bd4741a6a676770e0e97fe9ab2e51de01183df3dcbcec591d26d331a40de950"}, + {file = "numpy-2.4.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:54f29b877279d51e210e0c80709ee14ccbbad647810e8f3d375561c45ef613dd"}, + {file = "numpy-2.4.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:679f2a834bae9020f81534671c56fd0cc76dd7e5182f57131478e23d0dc59e24"}, + {file = "numpy-2.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d84f0f881cb2225c2dfd7f78a10a5645d487a496c6668d6cc39f0f114164f3d0"}, + {file = "numpy-2.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d213c7e6e8d211888cc359bab7199670a00f5b82c0978b9d1c75baf1eddbeac0"}, + {file = "numpy-2.4.3-cp314-cp314-win32.whl", hash = "sha256:52077feedeff7c76ed7c9f1a0428558e50825347b7545bbb8523da2cd55c547a"}, + {file = "numpy-2.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:0448e7f9caefb34b4b7dd2b77f21e8906e5d6f0365ad525f9f4f530b13df2afc"}, + {file = "numpy-2.4.3-cp314-cp314-win_arm64.whl", hash = "sha256:b44fd60341c4d9783039598efadd03617fa28d041fc37d22b62d08f2027fa0e7"}, + {file = "numpy-2.4.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0a195f4216be9305a73c0e91c9b026a35f2161237cf1c6de9b681637772ea657"}, + {file = "numpy-2.4.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:cd32fbacb9fd1bf041bf8e89e4576b6f00b895f06d00914820ae06a616bdfef7"}, + {file = "numpy-2.4.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:2e03c05abaee1f672e9d67bc858f300b5ccba1c21397211e8d77d98350972093"}, + {file = "numpy-2.4.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d1ce23cce91fcea443320a9d0ece9b9305d4368875bab09538f7a5b4131938a"}, + {file = "numpy-2.4.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c59020932feb24ed49ffd03704fbab89f22aa9c0d4b180ff45542fe8918f5611"}, + {file = "numpy-2.4.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9684823a78a6cd6ad7511fc5e25b07947d1d5b5e2812c93fe99d7d4195130720"}, + {file = "numpy-2.4.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0200b25c687033316fb39f0ff4e3e690e8957a2c3c8d22499891ec58c37a3eb5"}, + {file = "numpy-2.4.3-cp314-cp314t-win32.whl", hash = "sha256:5e10da9e93247e554bb1d22f8edc51847ddd7dde52d85ce31024c1b4312bfba0"}, + {file = "numpy-2.4.3-cp314-cp314t-win_amd64.whl", hash = "sha256:45f003dbdffb997a03da2d1d0cb41fbd24a87507fb41605c0420a3db5bd4667b"}, + {file = "numpy-2.4.3-cp314-cp314t-win_arm64.whl", hash = "sha256:4d382735cecd7bcf090172489a525cd7d4087bc331f7df9f60ddc9a296cf208e"}, + {file = "numpy-2.4.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c6b124bfcafb9e8d3ed09130dbee44848c20b3e758b6bbf006e641778927c028"}, + {file = "numpy-2.4.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:76dbb9d4e43c16cf9aa711fcd8de1e2eeb27539dcefb60a1d5e9f12fae1d1ed8"}, + {file = "numpy-2.4.3-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:29363fbfa6f8ee855d7569c96ce524845e3d726d6c19b29eceec7dd555dab152"}, + {file = "numpy-2.4.3-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:bc71942c789ef415a37f0d4eab90341425a00d538cd0642445d30b41023d3395"}, + {file = "numpy-2.4.3-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e58765ad74dcebd3ef0208a5078fba32dc8ec3578fe84a604432950cd043d79"}, + {file = "numpy-2.4.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e236dbda4e1d319d681afcbb136c0c4a8e0f1a5c58ceec2adebb547357fe857"}, + {file = "numpy-2.4.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:4b42639cdde6d24e732ff823a3fa5b701d8acad89c4142bc1d0bd6dc85200ba5"}, + {file = "numpy-2.4.3.tar.gz", hash = "sha256:483a201202b73495f00dbc83796c6ae63137a9bdade074f7648b3e32613412dd"}, ] [[package]] @@ -4286,7 +4284,7 @@ name = "prompt-toolkit" version = "3.0.52" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.8" groups = ["dev", "docs"] files = [ {file = "prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955"}, @@ -4496,13 +4494,13 @@ name = "pycparser" version = "3.0" description = "C parser in Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main", "dev", "docs"] files = [ {file = "pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992"}, {file = "pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29"}, ] -markers = {main = "platform_python_implementation != \"PyPy\"", docs = "implementation_name == \"pypy\""} +markers = {main = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\"", dev = "implementation_name != \"PyPy\"", docs = "implementation_name == \"pypy\""} [[package]] name = "pydantic" @@ -4785,14 +4783,14 @@ six = ">=1.5" [[package]] name = "python-discovery" -version = "1.1.0" +version = "1.2.0" description = "Python interpreter discovery" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "python_discovery-1.1.0-py3-none-any.whl", hash = "sha256:a162893b8809727f54594a99ad2179d2ede4bf953e12d4c7abc3cc9cdbd1437b"}, - {file = "python_discovery-1.1.0.tar.gz", hash = "sha256:447941ba1aed8cc2ab7ee3cb91be5fc137c5bdbb05b7e6ea62fbdcb66e50b268"}, + {file = "python_discovery-1.2.0-py3-none-any.whl", hash = "sha256:1e108f1bbe2ed0ef089823d28805d5ad32be8e734b86a5f212bf89b71c266e4a"}, + {file = "python_discovery-1.2.0.tar.gz", hash = "sha256:7d33e350704818b09e3da2bd419d37e21e7c30db6e0977bb438916e06b41b5b1"}, ] [package.dependencies] @@ -4820,72 +4818,57 @@ dev = ["backports.zoneinfo ; python_version < \"3.9\"", "black", "build", "freez [[package]] name = "python-libsbml" -version = "5.21.0" +version = "5.21.1" description = "LibSBML Python API" optional = false python-versions = "*" groups = ["main"] files = [ - {file = "python_libsbml-5.20.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2c7a271cdaef200fe66f92ceefb85bb0dc647fa4fe966cec84af7efb685e93fd"}, - {file = "python_libsbml-5.20.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a69d9130148fc7aa85b4c42f804c6111c167711d39ed3a64145d15cb0296ec57"}, - {file = "python_libsbml-5.20.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0a9f71d4a6ff17d4ec282f64f15279b30b9e0ec2becba5c3fb8d466df8eeb77"}, - {file = "python_libsbml-5.20.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfa145c81690ba5f218702a9526eefd135cb95016142144b986c6e8fab056fe6"}, - {file = "python_libsbml-5.20.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e3fc4581ced13a6b817869ae01419efae4bbacaa2fd24483017fe6b4116d8a1"}, - {file = "python_libsbml-5.20.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d8e7f62372cda654bc53c15b7187aa06a41b8b5a0287d6fcfb4e5ab826ab1cc9"}, - {file = "python_libsbml-5.20.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9cb6ea007c848671ce419ebef870df374e7e2ef4c63392e1f6d4bfe4e2131a63"}, - {file = "python_libsbml-5.20.4-cp310-cp310-win32.whl", hash = "sha256:a8f76d1992366abd1970a9a12e5df7ae9da1e5f542cca058e370bd170d3fe381"}, - {file = "python_libsbml-5.20.4-cp310-cp310-win_amd64.whl", hash = "sha256:3bc3e2d2a077d4c7d1896e589dfe02fa663954fa1ea5e2f04a412549cc005135"}, - {file = "python_libsbml-5.20.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fcec0a0d2077c80d946f678900b3cbfa3180d1f958d7f91e79cdaa36d23831c6"}, - {file = "python_libsbml-5.20.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:57afb1de6af349da4db279376f167ae5274018481aeda0192481e1333d64fd98"}, - {file = "python_libsbml-5.20.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c9880a45513b0db4b799dbfb34bfa4ff64b9230ce71ceec7dfdfbe54f13c301"}, - {file = "python_libsbml-5.20.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9f36f16fe819193e3b941bb055a09b1e380c147e9a922fd9365f4d2078556ba"}, - {file = "python_libsbml-5.20.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecace54a0a46761b3060869c8d949b7c5c805334eeb1d2a668162860c6c3d7b6"}, - {file = "python_libsbml-5.20.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:570319329110a2ed6695963c9f28436ccb16a5d91df8f411d2f06e5e075590e1"}, - {file = "python_libsbml-5.20.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d51edbc94c306dcd70a23de221fafc76b905155d8e6f931ef1014dc9904e51c6"}, - {file = "python_libsbml-5.20.4-cp311-cp311-win32.whl", hash = "sha256:12902ecbee2fa47b3b7a9525f06a996fa3cfb1859a441fe84008d53fc9d9f4a4"}, - {file = "python_libsbml-5.20.4-cp311-cp311-win_amd64.whl", hash = "sha256:f568008f07d58769f974a11b272651af8e01d0dca7050081b23c8c9b07218c64"}, - {file = "python_libsbml-5.20.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9ad98ad3745c84bee3ee34c24b873be9cf3ba5329da5b481c72db60bf355bec5"}, - {file = "python_libsbml-5.20.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d0c54eec94a84c270330c2fcff0c48af07d30d9b6fd2d750f9c01b61acf6c514"}, - {file = "python_libsbml-5.20.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4963363f5f0873bbbc2303a189b462f897ca62fe4a164a142ec6878e8f3c6b41"}, - {file = "python_libsbml-5.20.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7db73d38dc3e09855780d5756009b511b601fd8aca04807d7d06dbfc400331b6"}, - {file = "python_libsbml-5.20.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:269f616a63a5e46b863bb5d75370ccff90d719e42af96a3e7a87825364ad2556"}, - {file = "python_libsbml-5.20.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fefe7651f8981be20f499020139f07bc14e00c1a04f968eeb26e7d60e359dbbd"}, - {file = "python_libsbml-5.20.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b1ef224f746aac4e1b0f917113b6334abd2fa3eb63bde41149a1b006bacfba81"}, - {file = "python_libsbml-5.20.4-cp312-cp312-win32.whl", hash = "sha256:b5cc68b5fe6d139a4557cba9d9913b3e196582bdb7975bea6a2c25faaecdfadb"}, - {file = "python_libsbml-5.20.4-cp312-cp312-win_amd64.whl", hash = "sha256:40c5e9ec86c467b4f325b5365ca369ecc1c9ced608e390d3cc1726f79da68968"}, - {file = "python_libsbml-5.20.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:233c01e17a0750ea73411ce79b069bf113968cabeb88d61fc9378d068c4c585c"}, - {file = "python_libsbml-5.20.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6e8c99146b15b0c5c9aabb6ec85e30489a1b8105cf7d2483b44e0407d7d04309"}, - {file = "python_libsbml-5.20.4-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cde96e40eb6809de40443e28f8242674842e2cfbb9c84d2c28321f553fbd344e"}, - {file = "python_libsbml-5.20.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ff1eb26b1d39531c80813ed9c18f9dc6aca66e437a81131bd0ed1c97371df11"}, - {file = "python_libsbml-5.20.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:576d6a64d3bd04803db160d992b7e6ac9be4bc2ba735a3a33fa623ca4e86fe09"}, - {file = "python_libsbml-5.20.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2c0d0eddb043a5065abead423dec089d99191727a0f6505ddd2c942512a4307d"}, - {file = "python_libsbml-5.20.4-cp313-cp313-win32.whl", hash = "sha256:1c5539b2189e38e5b39c34eafe1ef86ffb9179ece91c48623a48412cb88a6f5c"}, - {file = "python_libsbml-5.20.4-cp313-cp313-win_amd64.whl", hash = "sha256:aac5a989e24341713e3c2fd126c6deebdb062adb287b41a45c48c72a4bd828ca"}, - {file = "python_libsbml-5.20.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeecfffa72f94ac74475180f1046feb019b30ec86f9ef435c31e4585a0762f4"}, - {file = "python_libsbml-5.20.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd57cc81dc508c42c0bed66e6aed67b8dc2d3b56802d56192be418bf032a175"}, - {file = "python_libsbml-5.20.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:56402db093a38adb35b985a0c31b8875b360aeba04f29e5675be9a691a6911bf"}, - {file = "python_libsbml-5.20.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f63acf824d6ac977916059fd963f7287183c68c958aaacba8c4d0a02ed1f1c1f"}, - {file = "python_libsbml-5.20.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13f0a8b84e69f99ded9ed7caa8bcd3218d14f0e48f3c46544e6aaa9c2d14801c"}, - {file = "python_libsbml-5.20.4-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e64d3a6e898882021f33ace42ed702d43cb513edf425101de4b0e2a8674bebf"}, - {file = "python_libsbml-5.20.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:153e741386da5326b480e8a1c1dd19c780b44491a5fb85e3112ea601c3517c6c"}, - {file = "python_libsbml-5.20.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:58aaf8e368274572f10a213969212430a7b7bd85ae667f1c196ece947c048758"}, - {file = "python_libsbml-5.20.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0554b6651e3876d6d61829df781043c00553d4d166de8b38d0c319b1cd0e3500"}, - {file = "python_libsbml-5.20.4-cp38-cp38-win32.whl", hash = "sha256:1639253977ab8f4c3892322b04a4f2bd52d9a161184beb3cd1080c599df441fc"}, - {file = "python_libsbml-5.20.4-cp38-cp38-win_amd64.whl", hash = "sha256:997c61052c9c5c5f9cd7a698b5c0d8d59c72c6b2857d3351e71578035e587c47"}, - {file = "python_libsbml-5.20.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:58dbe1413e4502b25dc591152646d493bce3f73d382dcc69fd760bd951ecb4ab"}, - {file = "python_libsbml-5.20.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:579a4f877ac0e3d40cf4b3352ab48bd4a4c849ceafdb9d175e62d527a7da1711"}, - {file = "python_libsbml-5.20.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28af60d5d4873f43ac67f9f48822dc8c33d257b8b66552f06a50dcc5cb49e696"}, - {file = "python_libsbml-5.20.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d5c9a214f93cf1f6ff71855cb9f38950d506e1cad6d3d89f6491ebb17813150e"}, - {file = "python_libsbml-5.20.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d572f0f3991f00bf742aef79b5067c2a1f53aaea0db41bf7004adace9cf17f87"}, - {file = "python_libsbml-5.20.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:50d6422c78bbf1bed373a3528370752f2e4a3843758ab03506dbf0b8e305a8f4"}, - {file = "python_libsbml-5.20.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b25c23f71ea1e257c1354a6d62a1f80981664aa60450651774833d864848d956"}, - {file = "python_libsbml-5.20.4-cp39-cp39-win32.whl", hash = "sha256:f5dbfa3cd086c751550b1d0f1e51bbe008d79bd66a42d5b472172544b6145ab1"}, - {file = "python_libsbml-5.20.4-cp39-cp39-win_amd64.whl", hash = "sha256:0599b57885b98b1bd5aac8575ff9be78b6eaded6dd0b652165604468f6e0853b"}, - {file = "python_libsbml-5.20.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f15a361aadb2c49fa7eb952818be1cfe3de30f5767e20ee6f03189743427e64"}, - {file = "python_libsbml-5.20.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2380e3f61ea136e6657ff4a1511a6526b5c604f150fb91cc3d7dd8e60428d98c"}, - {file = "python_libsbml-5.20.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9ba53f103b9d3d8e8a8f005b7750bd821776d2d97a427f080b330822d45c5d6"}, - {file = "python_libsbml-5.20.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:207a6cd61928ebefa7c0fffd6d257c1273704d8cfa9164175557b7d302ac1e5a"}, - {file = "python_libsbml-5.20.4.tar.gz", hash = "sha256:b055f98fe65be258ae266fde343157cbf41e3ed3fc19b3698f2a66afc74cdaf8"}, + {file = "python_libsbml-5.21.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:11ca32307cfc052342d8b119d99a7d9c0a1f873d882a208743f890e611f66c30"}, + {file = "python_libsbml-5.21.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb420a74bd245841c15d7ce2e04ab8cd3c4617ba19a90d06d21c31e0742d0150"}, + {file = "python_libsbml-5.21.1-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9965bbd8afa84e36ff88c87c7a6b98a8c13cd3e16934f07f3f83229afeae06b4"}, + {file = "python_libsbml-5.21.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11e04f4af424830a620437688f284303f026f89beea911c3b0eb39d983bd1fc7"}, + {file = "python_libsbml-5.21.1-cp310-cp310-win_amd64.whl", hash = "sha256:76f3c235b5b8b9c66beb7e756f63ed6e7f78d826371e0591400982854a5bb13d"}, + {file = "python_libsbml-5.21.1-cp310-cp310-win_arm64.whl", hash = "sha256:d5e564703cfb9323bece437be875c9439cc2166ab17845b25fda4bffd663dc0b"}, + {file = "python_libsbml-5.21.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:be88513c1bd50058290418953d1d006a5eb89566ad0628cd58a9eff2e6639aa6"}, + {file = "python_libsbml-5.21.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:28fe8b12be72f8b5f18565ed376d71800f80e973a696984753b45c930d49877b"}, + {file = "python_libsbml-5.21.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7481c8cfd3aae6d0af23530b98aa3826789c1bc9d568a07cadeb9bb9acb87dc"}, + {file = "python_libsbml-5.21.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9eb293e780d3451b0d9f898f4672ff9141eecbf069aa0a98a2c74b8a6159ac37"}, + {file = "python_libsbml-5.21.1-cp311-cp311-win_amd64.whl", hash = "sha256:d4ad5eb9814377dfa9fae2b857f92f1b6283b7b39072877ad0a96c98a9d3fe2c"}, + {file = "python_libsbml-5.21.1-cp311-cp311-win_arm64.whl", hash = "sha256:949eb07da260ef5c9feb056bea7ae7a8887368ea58364b2ece936ae1c5db48a2"}, + {file = "python_libsbml-5.21.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ac6cc430597e4640f805dcb8cef1e3434af3e4461e71071d621870dacffdfd5f"}, + {file = "python_libsbml-5.21.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e8134c3a5934ea1824f1839d4a0ee2cc1614159f931828b83d15867764d9dec"}, + {file = "python_libsbml-5.21.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:441c557ad62f27f3baa16bd555530c84b7c102423fdaed2128ce9de766a69daa"}, + {file = "python_libsbml-5.21.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e0fc4b1e2feb4af0028cffe1e8eff4e448f1124bf1e895e08e987aeeb2d8e55"}, + {file = "python_libsbml-5.21.1-cp312-cp312-win_amd64.whl", hash = "sha256:84101a40c11a45c996c274a042454600b205d663d48c5a58ee327565e20c890e"}, + {file = "python_libsbml-5.21.1-cp312-cp312-win_arm64.whl", hash = "sha256:5698f5d4216eb0c9d89895346d13a935d9ed7f23f4635076889cf7892fadcbf8"}, + {file = "python_libsbml-5.21.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:be391216a5f87a77b5d0e1e5f6ccee0ce707779e80d6e861100ba97fa37ab5f7"}, + {file = "python_libsbml-5.21.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6a90ff4644f042eb2663b2b4f9ebf879d89b36f555eafc7314b7c97dadab2b32"}, + {file = "python_libsbml-5.21.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13b4ec2ad54b94a6444cb3e51ec58d32f7e5148bd131c8e6903ca6fbb5ae7adf"}, + {file = "python_libsbml-5.21.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4b320b1fda9f0c2b2111f3e9e64a428958f130cb9a2c3696b83ef6dc153a5d1"}, + {file = "python_libsbml-5.21.1-cp313-cp313-win_amd64.whl", hash = "sha256:b9d118ab3330a415870006e0da22d634fb68d78bb6e6752a02a5a35ba4b047ab"}, + {file = "python_libsbml-5.21.1-cp313-cp313-win_arm64.whl", hash = "sha256:97d48d63f9c94a8e71e697150633d9828c00d349c22d5e29bf35fd3143ae7c09"}, + {file = "python_libsbml-5.21.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:4a5464d35da12528e82b84f4d9a29e47a175674dc79ac649cebb5e77301ef2d9"}, + {file = "python_libsbml-5.21.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:5cf37eb796c2f9abe5f231db9ddaca2813cf1b831c7a0b1d5c6dc3352545ad77"}, + {file = "python_libsbml-5.21.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c404100cf1fb61eda7cab777fe0eced84bae3db32531541f6d312c137ad64a11"}, + {file = "python_libsbml-5.21.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b56f1d0a20b8768f7318043019a02d6582ef58a355521bef32c9f28f4c1d8619"}, + {file = "python_libsbml-5.21.1-cp314-cp314-win_amd64.whl", hash = "sha256:7b2f0618889d0995630602ca23407ff9fa879fc78c5e119d04164d0d6f65df77"}, + {file = "python_libsbml-5.21.1-cp314-cp314-win_arm64.whl", hash = "sha256:4bd70514282d48502c52b95eb2e31f99ed0f8732f3eb9a733d7f0fcfffe70f47"}, + {file = "python_libsbml-5.21.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6953593efa473e48c7d7400ab12e84c3d142f5465e1592432a2fb187fd99b5de"}, + {file = "python_libsbml-5.21.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a53d50a4c943cdd66c6c48977884e79632c33e01e3e3bef7dbe7641f9766d7f"}, + {file = "python_libsbml-5.21.1-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:331025ca0f4f6369352b985b7e86bd8e9b4ec719498795434c5a5aa52aa2c97a"}, + {file = "python_libsbml-5.21.1-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b58b6c22dae030b6d3d8175710ccd704c003edeb50a5ef7c254a04a901c3634f"}, + {file = "python_libsbml-5.21.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b4c0691e74745745d22d82c3fef875b97ae549b72cabc55a8068c233f4d24abd"}, + {file = "python_libsbml-5.21.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dbc980758834f3674348dfe977f80b7db1047642fd3cd5d33b66111f96b2ffe6"}, + {file = "python_libsbml-5.21.1-cp38-cp38-win32.whl", hash = "sha256:41f03fa0d788afc7feb6a955a0564493e85269f55e51d8008c8dccf89d49c9bc"}, + {file = "python_libsbml-5.21.1-cp38-cp38-win_amd64.whl", hash = "sha256:e1b3f2179af61cc3d9b7ebb8760f69fa34d0169cdf1ee7f060446d402c332d4f"}, + {file = "python_libsbml-5.21.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:408fb84a7467933d944800cd325abb2763aaf8a0881d01ce1a29e530a07786fb"}, + {file = "python_libsbml-5.21.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f75b6e880efa139e617bfb25db635552099f24772ccbb3b7b322549215bb4fa5"}, + {file = "python_libsbml-5.21.1-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90d0fd371ad883daed88deeed92b72fa414412556801fba77e2980546d970dcc"}, + {file = "python_libsbml-5.21.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac687796c0eafef36bbeab1f05737179dedd9318114b3672a640439cc10eb543"}, + {file = "python_libsbml-5.21.1-cp39-cp39-win_amd64.whl", hash = "sha256:321efcc145787f14a3d3088dc98958b88779454a72cab27e20742c4950cf5d2b"}, + {file = "python_libsbml-5.21.1-cp39-cp39-win_arm64.whl", hash = "sha256:3857707e191b13c09e4e06b1b398f2790002a14c9a0908de470ba65192061405"}, + {file = "python_libsbml-5.21.1.tar.gz", hash = "sha256:378077e37a1b5cd32d8c33bf845b23c22b7a6915d217d7ab811e71e022f982ea"}, ] [[package]] @@ -4937,33 +4920,6 @@ colormaps = ["cmocean", "colorcet"] io = ["imageio", "meshio (>=5.2)"] jupyter = ["ipywidgets", "jupyter-server-proxy", "nest_asyncio", "trame (>=2.5.2)", "trame-client (>=2.12.7)", "trame-server (>=2.11.7)", "trame-vtk (>=2.5.8)", "trame-vuetify (>=2.3.1)"] -[[package]] -name = "pywin32" -version = "310" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -groups = ["dev", "docs"] -markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\"" -files = [ - {file = "pywin32-310-cp310-cp310-win32.whl", hash = "sha256:6dd97011efc8bf51d6793a82292419eba2c71cf8e7250cfac03bba284454abc1"}, - {file = "pywin32-310-cp310-cp310-win_amd64.whl", hash = "sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d"}, - {file = "pywin32-310-cp310-cp310-win_arm64.whl", hash = "sha256:33babed0cf0c92a6f94cc6cc13546ab24ee13e3e800e61ed87609ab91e4c8213"}, - {file = "pywin32-310-cp311-cp311-win32.whl", hash = "sha256:1e765f9564e83011a63321bb9d27ec456a0ed90d3732c4b2e312b855365ed8bd"}, - {file = "pywin32-310-cp311-cp311-win_amd64.whl", hash = "sha256:126298077a9d7c95c53823934f000599f66ec9296b09167810eb24875f32689c"}, - {file = "pywin32-310-cp311-cp311-win_arm64.whl", hash = "sha256:19ec5fc9b1d51c4350be7bb00760ffce46e6c95eaf2f0b2f1150657b1a43c582"}, - {file = "pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d"}, - {file = "pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060"}, - {file = "pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966"}, - {file = "pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab"}, - {file = "pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e"}, - {file = "pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33"}, - {file = "pywin32-310-cp38-cp38-win32.whl", hash = "sha256:0867beb8addefa2e3979d4084352e4ac6e991ca45373390775f7084cc0209b9c"}, - {file = "pywin32-310-cp38-cp38-win_amd64.whl", hash = "sha256:30f0a9b3138fb5e07eb4973b7077e1883f558e40c578c6925acc7a94c34eaa36"}, - {file = "pywin32-310-cp39-cp39-win32.whl", hash = "sha256:851c8d927af0d879221e616ae1f66145253537bbdd321a77e8ef701b443a9a1a"}, - {file = "pywin32-310-cp39-cp39-win_amd64.whl", hash = "sha256:96867217335559ac619f00ad70e513c0fcf84b8a3af9fc2bba3b59b97da70475"}, -] - [[package]] name = "pywinpty" version = "3.0.3" @@ -5199,7 +5155,7 @@ name = "referencing" version = "0.37.0" description = "JSON Referencing + Python" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev", "docs"] files = [ {file = "referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231"}, @@ -5321,7 +5277,7 @@ name = "rpds-py" version = "0.30.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev", "docs"] files = [ {file = "rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288"}, @@ -5474,19 +5430,19 @@ test = ["pytest (>=8)"] [[package]] name = "setuptools" -version = "82.0.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" +version = "82.0.1" +description = "Most extensible Python build backend with support for C/C++ extension modules" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "setuptools-82.0.0-py3-none-any.whl", hash = "sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0"}, - {file = "setuptools-82.0.0.tar.gz", hash = "sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb"}, + {file = "setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb"}, + {file = "setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.13.0) ; sys_platform != \"cygwin\""] -core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] @@ -5522,7 +5478,7 @@ name = "soupsieve" version = "2.8.3" description = "A modern CSS selector implementation for Beautiful Soup." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev", "docs"] files = [ {file = "soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95"}, @@ -5569,37 +5525,37 @@ dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] [[package]] name = "tensorstore" -version = "0.1.81" +version = "0.1.82" description = "Read and write large, multi-dimensional arrays" optional = false python-versions = ">=3.11" groups = ["main"] files = [ - {file = "tensorstore-0.1.81-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:f64fb510f293079f9e5c63cb227e8a76904655a32912fc107c1e63bd8dc3e187"}, - {file = "tensorstore-0.1.81-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4282587598885ff447f08369ac9bb681a65e224888cfa8ef8f3dd63544759e6c"}, - {file = "tensorstore-0.1.81-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9b4ea06038f6912bb6ed8a89db0c31e4e3d1b2404f3365dc756e4bc42bd6a89c"}, - {file = "tensorstore-0.1.81-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51d59f7db9cdae02fce9d347300c0ccfb8265052945757e95592a265eb620b15"}, - {file = "tensorstore-0.1.81-cp311-cp311-win_amd64.whl", hash = "sha256:fdb9579a729cccc02127cab5abf26f57a0e27968ba65c9c548ad058f5a45417f"}, - {file = "tensorstore-0.1.81-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:7aefa1e3eadca804bce05215184c9cde29205ac2f3b443ca15a4e1846d31af4e"}, - {file = "tensorstore-0.1.81-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7e001d3edc6758eb5dc80556da9e945c1381f0529102fcc0301358ba6b9b70ed"}, - {file = "tensorstore-0.1.81-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c27e07f4e91e6dc6a0878e13e2c5931d1716196b67b0df927f2f571de2576e9"}, - {file = "tensorstore-0.1.81-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcb4786c4955e2d88d518b5b5a367427e3ad21d059cba366ad7aebf5fcc2302e"}, - {file = "tensorstore-0.1.81-cp312-cp312-win_amd64.whl", hash = "sha256:b96cbf1ee74d9038762b2d81305ee1589ec89913a440df6cbd514bc5879655d2"}, - {file = "tensorstore-0.1.81-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:7bb563ad4d4d6c4748d9fe4f01f639ddf4ffef83ac180fc3b6d73f46ad854e62"}, - {file = "tensorstore-0.1.81-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2ff7e6c457596cf21f31c690e451fe634ac804fc98ff8131188e99d5ef7d29bc"}, - {file = "tensorstore-0.1.81-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b218a6fe09c72c002f2c6480fc58b78cdbba8bb9c6f3a0d7dd1f70625cb37995"}, - {file = "tensorstore-0.1.81-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f33e7c11035c14dad01aeba012051643110cbb95c239e512106fe1be692c98b6"}, - {file = "tensorstore-0.1.81-cp313-cp313-win_amd64.whl", hash = "sha256:b55126bcf084cc5fe0151bf465f3a5dedb5b5da0133d01227f75d0e71f9cfae5"}, - {file = "tensorstore-0.1.81-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a48c23e4df50681d8f4f365b08a0beb114ab210accbde9f34d37fd7b45c31005"}, - {file = "tensorstore-0.1.81-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0be0ce646263820f3d4c9ba738d8e9be7da241cbe093ca2fd02e25023344347c"}, - {file = "tensorstore-0.1.81-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93996e756dce82589f5a19e27b4e7c0b5b40221a7e41ddce46dc13d378dbd157"}, - {file = "tensorstore-0.1.81-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:444c088919a739c20ca1f87935d72de4fd87605eb2c0f093b8d49251b7884aef"}, - {file = "tensorstore-0.1.81-cp314-cp314-win_amd64.whl", hash = "sha256:f7aa0a3a470c4d832faff7d77dd688b1d352b718d110c95ceba54ec637ca3ffa"}, - {file = "tensorstore-0.1.81-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:6c36d8a827120aa15e50ec5c36dd7e73978d86ba4f46d073fb648d8dda3948e9"}, - {file = "tensorstore-0.1.81-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3c31d831707c4ff3c6ecdcba129f7c39e982572837b2f93e02ccb83fc8581bca"}, - {file = "tensorstore-0.1.81-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9fba383f108d7450bf9a03487ac7fa3bb2c3080c91cee9d2da3bb217b560846b"}, - {file = "tensorstore-0.1.81-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f88c52f592e2982682045199cabf360462146749d48b7be2969cd640e877c6c3"}, - {file = "tensorstore-0.1.81.tar.gz", hash = "sha256:687546192ea6f6c8ae28d18f13103336f68017d928b9f5a00325e9b0548d9c25"}, + {file = "tensorstore-0.1.82-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:6ae87ae9baf7593b5c8d09dbdf3ee6969068833a6fd85317b781a4cf7cb7e533"}, + {file = "tensorstore-0.1.82-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2471638a184473e384a6c3ffd98453b670a78372f2d3ed9707f27aebe5482c47"}, + {file = "tensorstore-0.1.82-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:38eed3828101622552e63564d7a3a10b0cecb05f61d40e0f236b95f622a60897"}, + {file = "tensorstore-0.1.82-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aed5a6fc605e711c8a8dbd8ae73b919b8c6ca04ae94b0e0f6489fc54cdcab245"}, + {file = "tensorstore-0.1.82-cp311-cp311-win_amd64.whl", hash = "sha256:afb825258329241341aa3e64293b64562df7812a02d5f6c6e4c9f731d0e34b0e"}, + {file = "tensorstore-0.1.82-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:f0ac091bd47ea6f051fe11230ad2642c254b46a8fabdd5184b0600556b5529ed"}, + {file = "tensorstore-0.1.82-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8cae7d0c9b2fa0653f90b147daaf9ed04664cab7d297b9772efcfa088da26cab"}, + {file = "tensorstore-0.1.82-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:34c491ea3c6c1904d4618bfe40020bd83aaeb19d52a266ea0f6919eb3fdc64c4"}, + {file = "tensorstore-0.1.82-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4182300d8ffa172e961e79c6bd89e38ce6bc5cd3abf1a7dacb22c2396ce40b7"}, + {file = "tensorstore-0.1.82-cp312-cp312-win_amd64.whl", hash = "sha256:6369809d01edf66cd487cde5c94f57138167c09561f3d906020fd53c72687f92"}, + {file = "tensorstore-0.1.82-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:9874349ff23a9e94df361e7a0378efd3f22a1b14c1bb4d00905e6477eb56b732"}, + {file = "tensorstore-0.1.82-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cb2b87e8df78dc629e09a001d19b64813f249f9c78e4ade76de26e18f68bc591"}, + {file = "tensorstore-0.1.82-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e0d4f5240247986c66154c3e6c71deed5ef337ae5a52509b3125c8045717bb3"}, + {file = "tensorstore-0.1.82-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9f2c51d0c40a3a4e49590a1ec07494c518c46905c8f3ec1f5583120cfba3b2cf"}, + {file = "tensorstore-0.1.82-cp313-cp313-win_amd64.whl", hash = "sha256:82bbac5e11eeaa80ad1aedad1c7a8f1f4f39362c5f56906820b21fc34a497100"}, + {file = "tensorstore-0.1.82-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:aa9d7b3f092a65b5573e6c9919bea1e16c909844f346c82407dc454a67a3fa11"}, + {file = "tensorstore-0.1.82-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32f70923d3a5dd687ebfd4eb9d0892766bff9acef92a468852c1872e96bbb440"}, + {file = "tensorstore-0.1.82-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:35607c5c0135d31c1b7bd821ad0446840161708a289df52cffc796d0321f3d60"}, + {file = "tensorstore-0.1.82-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54d40a696115a8d13184920842a20c570bdb1cb3ba2352b05394814608290f6a"}, + {file = "tensorstore-0.1.82-cp314-cp314-win_amd64.whl", hash = "sha256:c7f63af7aabdf3a3e224d5b36c924bcb59ebc4fb8e485edc8fe13b8bf8b1ba32"}, + {file = "tensorstore-0.1.82-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:69950d352327473014299a57f4c9fc7e0caa9c9e9100b3bc0a0c37f79c47fe6d"}, + {file = "tensorstore-0.1.82-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0224e20fad9ca9538c3e8ac4a32ef354acaa7ab2c130e4944c2eda58c3200742"}, + {file = "tensorstore-0.1.82-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c45dae1b34cad5bd56796e961c35ceb5a70617e4eb182faf73dd9cc4b21f3f87"}, + {file = "tensorstore-0.1.82-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d8678ce55c4ca9daac815995d47aae6d3648c75dcdbb9f01326067ccc4de10a"}, + {file = "tensorstore-0.1.82.tar.gz", hash = "sha256:ccfceffb7611fc61330f6da24b8b0abd9251d480ac8a5bac5a1729f9ed0c3a9f"}, ] [package.dependencies] @@ -5661,48 +5617,46 @@ files = [ [[package]] name = "tornado" -version = "6.5.4" +version = "6.5.5" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev", "docs"] files = [ - {file = "tornado-6.5.4-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d6241c1a16b1c9e4cc28148b1cda97dd1c6cb4fb7068ac1bedc610768dff0ba9"}, - {file = "tornado-6.5.4-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2d50f63dda1d2cac3ae1fa23d254e16b5e38153758470e9956cbc3d813d40843"}, - {file = "tornado-6.5.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1cf66105dc6acb5af613c054955b8137e34a03698aa53272dbda4afe252be17"}, - {file = "tornado-6.5.4-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50ff0a58b0dc97939d29da29cd624da010e7f804746621c78d14b80238669335"}, - {file = "tornado-6.5.4-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5fb5e04efa54cf0baabdd10061eb4148e0be137166146fff835745f59ab9f7f"}, - {file = "tornado-6.5.4-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9c86b1643b33a4cd415f8d0fe53045f913bf07b4a3ef646b735a6a86047dda84"}, - {file = "tornado-6.5.4-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:6eb82872335a53dd063a4f10917b3efd28270b56a33db69009606a0312660a6f"}, - {file = "tornado-6.5.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6076d5dda368c9328ff41ab5d9dd3608e695e8225d1cd0fd1e006f05da3635a8"}, - {file = "tornado-6.5.4-cp39-abi3-win32.whl", hash = "sha256:1768110f2411d5cd281bac0a090f707223ce77fd110424361092859e089b38d1"}, - {file = "tornado-6.5.4-cp39-abi3-win_amd64.whl", hash = "sha256:fa07d31e0cd85c60713f2b995da613588aa03e1303d75705dca6af8babc18ddc"}, - {file = "tornado-6.5.4-cp39-abi3-win_arm64.whl", hash = "sha256:053e6e16701eb6cbe641f308f4c1a9541f91b6261991160391bfc342e8a551a1"}, - {file = "tornado-6.5.4.tar.gz", hash = "sha256:a22fa9047405d03260b483980635f0b041989d8bcc9a313f8fe18b411d84b1d7"}, + {file = "tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa"}, + {file = "tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:65a7f1d46d4bb41df1ac99f5fcb685fb25c7e61613742d5108b010975a9a6521"}, + {file = "tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5"}, + {file = "tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:435319e9e340276428bbdb4e7fa732c2d399386d1de5686cb331ec8eee754f07"}, + {file = "tornado-6.5.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3f54aa540bdbfee7b9eb268ead60e7d199de5021facd276819c193c0fb28ea4e"}, + {file = "tornado-6.5.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36abed1754faeb80fbd6e64db2758091e1320f6bba74a4cf8c09cd18ccce8aca"}, + {file = "tornado-6.5.5-cp39-abi3-win32.whl", hash = "sha256:dd3eafaaeec1c7f2f8fdcd5f964e8907ad788fe8a5a32c4426fbbdda621223b7"}, + {file = "tornado-6.5.5-cp39-abi3-win_amd64.whl", hash = "sha256:6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b"}, + {file = "tornado-6.5.5-cp39-abi3-win_arm64.whl", hash = "sha256:2c9a876e094109333f888539ddb2de4361743e5d21eece20688e3e351e4990a6"}, + {file = "tornado-6.5.5.tar.gz", hash = "sha256:192b8f3ea91bd7f1f50c06955416ed76c6b72f96779b962f07f911b91e8d30e9"}, ] [[package]] name = "tox" -version = "4.48.1" +version = "4.50.1" description = "tox is a generic virtualenv management and test command line tool" optional = false python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "tox-4.48.1-py3-none-any.whl", hash = "sha256:4e0369041be0d52b0dc83051f6449e4afae1764b4203a5866982fa300c8c325f"}, - {file = "tox-4.48.1.tar.gz", hash = "sha256:971260ac2ea3409de8f3771612d141713d2d33446cc0d981849ebfd9b6bbd3d9"}, + {file = "tox-4.50.1-py3-none-any.whl", hash = "sha256:4e6f6da3c8d8d8662c28981daf1c1e08d3fd68d2eb14e194e3919c9a3e0e11c0"}, + {file = "tox-4.50.1.tar.gz", hash = "sha256:60c74e52034465b567589c904c963b44353d16097ab96e9d235a07e7666a6f82"}, ] [package.dependencies] -cachetools = ">=7.0.1" +cachetools = ">=7.0.3" colorama = ">=0.4.6" -filelock = ">=3.24.3" +filelock = ">=3.25" packaging = ">=26" -platformdirs = ">=4.9.2" +platformdirs = ">=4.9.4" pluggy = ">=1.6" pyproject-api = ">=1.10" -tomli-w = ">=1.1" -virtualenv = ">=20.39" +tomli-w = ">=1.2" +virtualenv = ">=21.1" [package.extras] completion = ["argcomplete (>=3.6.3)"] @@ -5768,14 +5722,14 @@ test = ["Pillow", "pixelmatch", "pytest", "pytest-playwright", "pytest-xprocess" [[package]] name = "trame-common" -version = "1.1.2" +version = "1.1.3" description = "Dependency less classes and functions for trame" optional = false python-versions = ">=3.9" groups = ["main", "dev"] files = [ - {file = "trame_common-1.1.2-py3-none-any.whl", hash = "sha256:dec0ed549dcc14608eb83a9dd2b350c07f14e7d02511bd6e203bc5fec3e8c926"}, - {file = "trame_common-1.1.2.tar.gz", hash = "sha256:c4e3da15dfc9e0bba5010efcf24dcbd853367370efc3ea1f16f5d92df652a62a"}, + {file = "trame_common-1.1.3-py3-none-any.whl", hash = "sha256:8d93cda32cfea869aaabaec5d91ded369882b1e7f28c0dba2a101a7896cfa5b2"}, + {file = "trame_common-1.1.3.tar.gz", hash = "sha256:25a3894823bebf509d3bad2b0c545fbeee9eed5d6320d94f781ec595c18d8068"}, ] [package.extras] @@ -5820,14 +5774,14 @@ dev = ["nox", "pre-commit", "pytest", "pytest-asyncio", "ruff"] [[package]] name = "trame-vtk" -version = "2.11.1" +version = "2.11.3" description = "VTK widgets for trame" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "trame_vtk-2.11.1-py3-none-any.whl", hash = "sha256:871d7fdd98731083ba958977a1bdf0a09f39f32051e13fa1032c5305e6927e88"}, - {file = "trame_vtk-2.11.1.tar.gz", hash = "sha256:db1f316ba69c29b9292775c3f73567604aa366742c06030d8507d5bd56424492"}, + {file = "trame_vtk-2.11.3-py3-none-any.whl", hash = "sha256:583ed3d5121541d95636efcd05b0c797018c28aa7b77604e5c2bbf58f09aad09"}, + {file = "trame_vtk-2.11.3.tar.gz", hash = "sha256:99c814edaa855d9dda90015e39e449906774f840ff190f22a46f14dd483c1a1b"}, ] [package.dependencies] @@ -5892,7 +5846,7 @@ name = "typing-extensions" version = "4.15.0" description = "Backported and Experimental Type Hints for Python 3.9+" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main", "dev", "docs"] files = [ {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, @@ -5961,14 +5915,14 @@ zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] [[package]] name = "virtualenv" -version = "21.1.0" +version = "21.2.0" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "virtualenv-21.1.0-py3-none-any.whl", hash = "sha256:164f5e14c5587d170cf98e60378eb91ea35bf037be313811905d3a24ea33cc07"}, - {file = "virtualenv-21.1.0.tar.gz", hash = "sha256:1990a0188c8f16b6b9cf65c9183049007375b26aad415514d377ccacf1e4fb44"}, + {file = "virtualenv-21.2.0-py3-none-any.whl", hash = "sha256:1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f"}, + {file = "virtualenv-21.2.0.tar.gz", hash = "sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098"}, ] [package.dependencies] @@ -6067,7 +6021,7 @@ name = "wcwidth" version = "0.6.0" description = "Measures the displayed width of unicode strings in a terminal" optional = false -python-versions = "*" +python-versions = ">=3.8" groups = ["dev", "docs"] files = [ {file = "wcwidth-0.6.0-py3-none-any.whl", hash = "sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad"}, @@ -6232,14 +6186,14 @@ dev = ["pytest", "setuptools"] [[package]] name = "wslink" -version = "2.5.5" +version = "2.5.6" description = "Python/JavaScript library for communicating over WebSocket" optional = false python-versions = ">=3.10" groups = ["main", "dev"] files = [ - {file = "wslink-2.5.5-py3-none-any.whl", hash = "sha256:02a783c1a0c0799b89bd5cbb486722474e1c71c80655a5fe0523c2c76cc84e34"}, - {file = "wslink-2.5.5.tar.gz", hash = "sha256:34a378dd518827cc8faee93d120e5d7ee89261570452dd67250cb454888c2447"}, + {file = "wslink-2.5.6-py3-none-any.whl", hash = "sha256:89f23bad3b3522dcb78be84907487f6cf742c6b4526a666fd3e4013f5f705015"}, + {file = "wslink-2.5.6.tar.gz", hash = "sha256:12f3a6135cb3a74c4f1af758942c6a4b34a51fcb700839abfb91b13064a4244c"}, ] [package.dependencies] @@ -6418,4 +6372,4 @@ jupyter = ["ipytree (>=0.2.2)", "ipywidgets (>=8.0.0)", "notebook"] [metadata] lock-version = "2.1" python-versions = ">=3.11,<4.0" -content-hash = "ba13b51a18032c49715310160c5196348b033ee2fc84a1838accd679868f96ce" +content-hash = "f46b382dbfd14dce0832a5dcdbdb22dfa1dc2860b47f4bf61c8bc1a173af5abb" From 72b3a67ed9ed92c88247133531e14b1bc6823b9b Mon Sep 17 00:00:00 2001 From: jcschaff Date: Thu, 19 Mar 2026 01:10:54 -0400 Subject: [PATCH 16/24] Fix ruff lint errors after rebase on main --- pyproject.toml | 2 +- tests/guides/test_notebooks.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 71c0c12..229dd7c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -165,6 +165,6 @@ branch = true source = ["pyvcell"] -[tool.ruff.per-file-ignores] +[tool.ruff.lint.per-file-ignores] "tests/*" = ["S101"] "stubs/libsbml/__init__.pyi" = ["ALL"] diff --git a/tests/guides/test_notebooks.py b/tests/guides/test_notebooks.py index 8eb62d2..deb7f1a 100644 --- a/tests/guides/test_notebooks.py +++ b/tests/guides/test_notebooks.py @@ -25,7 +25,7 @@ def test_notebook_executes(notebook: Path, tmp_path: Path) -> None: if notebook.stem in SKIP_NOTEBOOKS: pytest.skip(f"{notebook.name} requires interactive auth and a live server") output = tmp_path / notebook.name - result = subprocess.run( + result = subprocess.run( # noqa: S603 [ sys.executable, "-m", From 4569d1b263027d2c9085157e7e00e3fec3abefcb Mon Sep 17 00:00:00 2001 From: jcschaff Date: Thu, 19 Mar 2026 01:25:06 -0400 Subject: [PATCH 17/24] dded xvfb-run wrapper + xvfb install step to CI workflow --- .github/workflows/main.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bc2c964..08ed261 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -43,8 +43,11 @@ jobs: with: python-version: ${{ matrix.python-version }} + - name: Install xvfb + run: sudo apt-get update && sudo apt-get install -y xvfb + - name: Run tests - run: poetry run pytest tests --cov --cov-config=pyproject.toml --cov-report=xml + run: xvfb-run poetry run pytest tests --cov --cov-config=pyproject.toml --cov-report=xml - name: Check typing run: poetry run mypy From 4df488fae4f001609d8503058299e8fc84df474c Mon Sep 17 00:00:00 2001 From: jcschaff Date: Thu, 19 Mar 2026 01:26:34 -0400 Subject: [PATCH 18/24] zarr_writer (domain-masked stats) changed mean_values expected values --- tests/sbml/test_simulations.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/sbml/test_simulations.py b/tests/sbml/test_simulations.py index a8079f1..a4a2907 100644 --- a/tests/sbml/test_simulations.py +++ b/tests/sbml/test_simulations.py @@ -182,12 +182,12 @@ def test_sbml_model_parse_3d(sbml_spatial_model_3d_path: Path) -> None: results_orig.concentrations[0, 0::10], np.array( [ - 0.9437660084383092, - 0.6361978498031116, - 0.5686143581466128, - 0.5534685810896134, - 0.5500565078980726, - 0.5492825303078028, + 1.26114664, + 0.85014588, + 0.75983442, + 0.73959552, + 0.73503595, + 0.73400167, ], dtype=np.float64, ), @@ -196,12 +196,12 @@ def test_sbml_model_parse_3d(sbml_spatial_model_3d_path: Path) -> None: results_changed.concentrations[0, 0::10], np.array( [ - 0.9437660084383092, - 1.5951835187732106, - 1.5950442251682273, - 1.5949523994085677, - 1.5948608188247102, - 1.594764708696783, + 1.26114664, + 2.13163097, + 2.13144484, + 2.13132213, + 2.13119975, + 2.13107132, ], dtype=np.float64, ), From 5006bf75c909d4cc78e562a79f5197003fcab1c8 Mon Sep 17 00:00:00 2001 From: jcschaff Date: Thu, 19 Mar 2026 01:27:11 -0400 Subject: [PATCH 19/24] write version objects to XML for biomodels and simulations, round trip --- pyvcell/vcml/vcml_writer.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/pyvcell/vcml/vcml_writer.py b/pyvcell/vcml/vcml_writer.py index 46facaf..5e87306 100644 --- a/pyvcell/vcml/vcml_writer.py +++ b/pyvcell/vcml/vcml_writer.py @@ -15,6 +15,7 @@ SpeciesMapping, SubVolumeType, VCMLDocument, + Version, ) @@ -44,6 +45,27 @@ def write_vcml(self, document: VCMLDocument) -> str: self.write_biomodel(document.biomodel, biomodel_root) return etree.tostring(doc_root, pretty_print=True, xml_declaration=True, encoding="UTF-8").decode("utf-8") + @staticmethod + def _write_version(version: Version | None, parent: _Element) -> None: + if version is None: + return + attrs: dict[str, str] = {"KeyValue": version.key} + if version.name is not None: + attrs["Name"] = version.name + if version.branch_id is not None: + attrs["BranchId"] = version.branch_id + if version.date is not None: + attrs["Date"] = version.date + version_element = Element("Version", **attrs) + if version.owner_name is not None or version.owner_id is not None: + owner_attrs: dict[str, str] = {} + if version.owner_name is not None: + owner_attrs["Name"] = version.owner_name + if version.owner_id is not None: + owner_attrs["Identifier"] = version.owner_id + version_element.append(Element("Owner", **owner_attrs)) + parent.append(version_element) + def write_biomodel(self, biomodel: Biomodel, parent: _Element) -> None: if biomodel.model is None: raise ValueError("Biomodel must have a Model") @@ -55,6 +77,7 @@ def write_biomodel(self, biomodel: Biomodel, parent: _Element) -> None: application_element = Element("SimulationSpec", Name=application.name) parent.append(application_element) self.write_application(application, application_element) + self._write_version(biomodel.version, parent) def write_model(self, model: Model, parent: _Element) -> None: model_parameters_element = Element("ModelParameters") @@ -228,6 +251,7 @@ def write_application(self, application: Application, parent: _Element) -> None: ) mesh_specification_element.append(size_element) simulation_element.append(mesh_specification_element) + self._write_version(simulation.version, simulation_element) def write_geometry(self, geometry: Geometry, parent: _Element) -> None: extent_element = Element( From 182fc37d13b856cb98fff8d592cabe0f35317c7d Mon Sep 17 00:00:00 2001 From: Jim Schaff Date: Thu, 19 Mar 2026 02:03:59 -0400 Subject: [PATCH 20/24] Reformat regenerated API client after rebase --- .../_internal/api/vcell_client/__init__.py | 98 +- .../api/vcell_client/api/__init__.py | 1 - .../vcell_client/api/admin_resource_api.py | 123 +- .../api/bio_model_resource_api.py | 675 +++---- .../vcell_client/api/export_resource_api.py | 241 +-- .../api/field_data_resource_api.py | 1059 ++++------- .../vcell_client/api/geometry_resource_api.py | 610 +++---- .../api/vcell_client/api/hello_world_api.py | 109 +- .../api/math_model_resource_api.py | 629 +++---- .../api/publication_resource_api.py | 552 ++---- .../api/simulation_resource_api.py | 333 ++-- .../vcell_client/api/solver_resource_api.py | 227 +-- .../vcell_client/api/users_resource_api.py | 1077 ++++------- .../vcell_client/api/vc_image_resource_api.py | 609 +++---- .../_internal/api/vcell_client/api_client.py | 298 +--- .../api/vcell_client/api_response.py | 5 +- .../api/vcell_client/configuration.py | 122 +- .../docs/AccesTokenRepresentationRecord.md | 18 +- .../api/vcell_client/docs/AdminResourceApi.md | 30 +- .../api/vcell_client/docs/AnalyticCurve.md | 26 +- .../vcell_client/docs/AnnotatedFunctionDTO.md | 20 +- .../api/vcell_client/docs/ApplicationInfo.md | 16 +- .../api/vcell_client/docs/BatchSystemType.md | 9 +- .../api/vcell_client/docs/BioModel.md | 32 +- .../vcell_client/docs/BioModelChildSummary.md | 32 +- .../vcell_client/docs/BioModelResourceApi.md | 190 +- .../api/vcell_client/docs/BioModelSummary.md | 16 +- .../api/vcell_client/docs/BiomodelRef.md | 18 +- .../api/vcell_client/docs/CompositeCurve.md | 20 +- .../vcell_client/docs/ControlPointCurve.md | 24 +- .../api/vcell_client/docs/Coordinate.md | 14 +- .../_internal/api/vcell_client/docs/Curve.md | 30 +- .../vcell_client/docs/CurveSelectionInfo.md | 28 +- .../api/vcell_client/docs/DataIdentifier.md | 22 +- .../api/vcell_client/docs/DetailedState.md | 103 +- .../_internal/api/vcell_client/docs/Domain.md | 10 +- .../api/vcell_client/docs/ExportEvent.md | 26 +- .../vcell_client/docs/ExportProgressType.md | 13 +- .../vcell_client/docs/ExportResourceApi.md | 70 +- .../vcell_client/docs/ExportableDataType.md | 9 +- .../_internal/api/vcell_client/docs/Extent.md | 14 +- .../docs/ExternalDataIdentifier.md | 22 +- .../api/vcell_client/docs/FieldData.md | 26 +- .../vcell_client/docs/FieldDataReference.md | 14 +- .../vcell_client/docs/FieldDataResourceApi.md | 300 ++-- .../docs/FieldDataSavedResults.md | 12 +- .../api/vcell_client/docs/FieldDataShape.md | 18 +- .../api/vcell_client/docs/FunctionCategory.md | 11 +- .../api/vcell_client/docs/GIFImage.md | 12 +- .../api/vcell_client/docs/GeometryMode.md | 9 +- .../vcell_client/docs/GeometryResourceApi.md | 163 +- .../api/vcell_client/docs/GeometrySpecDTO.md | 16 +- .../api/vcell_client/docs/GeometrySummary.md | 20 +- .../api/vcell_client/docs/GroupAccess.md | 12 +- .../api/vcell_client/docs/GroupAccessAll.md | 12 +- .../api/vcell_client/docs/GroupAccessNone.md | 12 +- .../api/vcell_client/docs/GroupAccessSome.md | 22 +- .../api/vcell_client/docs/HelloWorldApi.md | 24 +- .../vcell_client/docs/HelloWorldMessage.md | 10 +- .../api/vcell_client/docs/HtcJobID.md | 14 +- .../docs/HumanReadableExportData.md | 30 +- .../_internal/api/vcell_client/docs/ISize.md | 14 +- .../api/vcell_client/docs/Identity.md | 16 +- .../docs/MathModelChildSummary.md | 18 +- .../vcell_client/docs/MathModelResourceApi.md | 165 +- .../api/vcell_client/docs/MathModelSummary.md | 20 +- .../api/vcell_client/docs/MathType.md | 13 +- .../api/vcell_client/docs/MathmodelRef.md | 18 +- .../api/vcell_client/docs/ModelType.md | 7 +- .../api/vcell_client/docs/N5ExportRequest.md | 16 +- .../_internal/api/vcell_client/docs/Origin.md | 14 +- .../api/vcell_client/docs/Publication.md | 34 +- .../api/vcell_client/docs/PublicationInfo.md | 32 +- .../docs/PublicationResourceApi.md | 144 +- .../api/vcell_client/docs/SPECIALCLAIM.md | 11 +- .../api/vcell_client/docs/SampledCurve.md | 20 +- .../api/vcell_client/docs/SchedulerStatus.md | 17 +- .../docs/SimulationExecutionStatusRecord.md | 20 +- .../docs/SimulationJobStatusRecord.md | 28 +- .../vcell_client/docs/SimulationMessage.md | 16 +- .../docs/SimulationQueueEntryStatusRecord.md | 14 +- .../vcell_client/docs/SimulationQueueID.md | 9 +- .../docs/SimulationResourceApi.md | 105 +- .../docs/SimulationStatusPersistentRecord.md | 14 +- .../vcell_client/docs/SolverResourceApi.md | 64 +- .../api/vcell_client/docs/SourceModel.md | 12 +- .../api/vcell_client/docs/SpatialSelection.md | 22 +- .../docs/SpatialSelectionContour.md | 16 +- .../docs/SpatialSelectionMembrane.md | 14 +- .../docs/SpatialSelectionVolume.md | 12 +- .../_internal/api/vcell_client/docs/Spline.md | 18 +- .../vcell_client/docs/StandardExportInfo.md | 24 +- .../_internal/api/vcell_client/docs/Status.md | 27 +- .../api/vcell_client/docs/StatusMessage.md | 16 +- .../api/vcell_client/docs/TimeMode.md | 7 +- .../api/vcell_client/docs/TimeSpecs.md | 16 +- .../_internal/api/vcell_client/docs/User.md | 14 +- .../vcell_client/docs/UserIdentityJSONSafe.md | 18 +- .../docs/UserLoginInfoForMapping.md | 12 +- .../vcell_client/docs/UserRegistrationInfo.md | 18 +- .../api/vcell_client/docs/UsersResourceApi.md | 270 ++- .../api/vcell_client/docs/VCDocumentType.md | 11 +- .../vcell_client/docs/VCImageResourceApi.md | 163 +- .../api/vcell_client/docs/VCImageSummary.md | 18 +- .../docs/VCSimulationIdentifier.md | 14 +- .../api/vcell_client/docs/VCellHTTPError.md | 12 +- .../api/vcell_client/docs/VCellSite.md | 13 +- .../vcell_client/docs/VCellSoftwareVersion.md | 26 +- .../api/vcell_client/docs/VariableDomain.md | 17 +- .../api/vcell_client/docs/VariableMode.md | 9 +- .../api/vcell_client/docs/VariableSpecs.md | 12 +- .../api/vcell_client/docs/VariableType.md | 26 +- .../api/vcell_client/docs/Version.md | 26 +- .../api/vcell_client/docs/VersionFlag.md | 18 +- .../_internal/api/vcell_client/exceptions.py | 44 +- .../api/vcell_client/models/__init__.py | 21 +- .../acces_token_representation_record.py | 30 +- .../api/vcell_client/models/analytic_curve.py | 64 +- .../models/annotated_function_dto.py | 46 +- .../vcell_client/models/application_info.py | 29 +- .../vcell_client/models/batch_system_type.py | 21 +- .../api/vcell_client/models/bio_model.py | 40 +- .../models/bio_model_child_summary.py | 52 +- .../vcell_client/models/bio_model_summary.py | 43 +- .../api/vcell_client/models/biomodel_ref.py | 25 +- .../vcell_client/models/composite_curve.py | 55 +- .../models/control_point_curve.py | 73 +- .../api/vcell_client/models/coordinate.py | 29 +- .../api/vcell_client/models/curve.py | 91 +- .../models/curve_selection_info.py | 44 +- .../vcell_client/models/data_identifier.py | 43 +- .../api/vcell_client/models/detailed_state.py | 115 +- .../api/vcell_client/models/domain.py | 27 +- .../api/vcell_client/models/export_event.py | 43 +- .../models/export_progress_type.py | 25 +- .../models/exportable_data_type.py | 21 +- .../api/vcell_client/models/extent.py | 29 +- .../models/external_data_identifier.py | 41 +- .../api/vcell_client/models/field_data.py | 47 +- .../models/field_data_reference.py | 39 +- .../models/field_data_saved_results.py | 32 +- .../vcell_client/models/field_data_shape.py | 37 +- .../vcell_client/models/function_category.py | 23 +- .../api/vcell_client/models/geometry_mode.py | 21 +- .../vcell_client/models/geometry_spec_dto.py | 35 +- .../vcell_client/models/geometry_summary.py | 39 +- .../api/vcell_client/models/gif_image.py | 31 +- .../api/vcell_client/models/group_access.py | 61 +- .../vcell_client/models/group_access_all.py | 25 +- .../vcell_client/models/group_access_none.py | 29 +- .../vcell_client/models/group_access_some.py | 58 +- .../models/hello_world_message.py | 31 +- .../api/vcell_client/models/htc_job_id.py | 25 +- .../models/human_readable_export_data.py | 43 +- .../api/vcell_client/models/i_size.py | 29 +- .../api/vcell_client/models/identity.py | 25 +- .../models/math_model_child_summary.py | 37 +- .../vcell_client/models/math_model_summary.py | 58 +- .../api/vcell_client/models/math_type.py | 25 +- .../api/vcell_client/models/mathmodel_ref.py | 25 +- .../api/vcell_client/models/model_type.py | 19 +- .../vcell_client/models/n5_export_request.py | 35 +- .../api/vcell_client/models/origin.py | 29 +- .../api/vcell_client/models/publication.py | 53 +- .../vcell_client/models/publication_info.py | 46 +- .../api/vcell_client/models/sampled_curve.py | 71 +- .../vcell_client/models/scheduler_status.py | 29 +- .../simulation_execution_status_record.py | 41 +- .../models/simulation_job_status_record.py | 80 +- .../vcell_client/models/simulation_message.py | 31 +- .../simulation_queue_entry_status_record.py | 30 +- .../models/simulation_queue_id.py | 21 +- .../simulation_status_persistent_record.py | 30 +- .../api/vcell_client/models/source_model.py | 28 +- .../vcell_client/models/spatial_selection.py | 89 +- .../models/spatial_selection_contour.py | 58 +- .../models/spatial_selection_membrane.py | 61 +- .../models/spatial_selection_volume.py | 56 +- .../api/vcell_client/models/specialclaim.py | 23 +- .../api/vcell_client/models/spline.py | 71 +- .../models/standard_export_info.py | 58 +- .../api/vcell_client/models/status.py | 39 +- .../api/vcell_client/models/status_message.py | 31 +- .../api/vcell_client/models/time_mode.py | 19 +- .../api/vcell_client/models/time_specs.py | 25 +- .../_internal/api/vcell_client/models/user.py | 25 +- .../models/user_identity_json_safe.py | 29 +- .../models/user_login_info_for_mapping.py | 32 +- .../models/user_registration_info.py | 29 +- .../vcell_client/models/v_cell_http_error.py | 28 +- .../api/vcell_client/models/v_cell_site.py | 25 +- .../models/v_cell_software_version.py | 41 +- .../vcell_client/models/variable_domain.py | 29 +- .../api/vcell_client/models/variable_mode.py | 21 +- .../api/vcell_client/models/variable_specs.py | 28 +- .../api/vcell_client/models/variable_type.py | 37 +- .../vcell_client/models/vc_document_type.py | 23 +- .../vcell_client/models/vc_image_summary.py | 37 +- .../models/vc_simulation_identifier.py | 31 +- .../api/vcell_client/models/version.py | 43 +- .../api/vcell_client/models/version_flag.py | 25 +- pyvcell/_internal/api/vcell_client/rest.py | 116 +- .../test_acces_token_representation_record.py | 23 +- .../test/test_admin_resource_api.py | 15 +- .../vcell_client/test/test_analytic_curve.py | 31 +- .../test/test_annotated_function_dto.py | 39 +- .../test/test_application_info.py | 23 +- .../test/test_batch_system_type.py | 17 +- .../api/vcell_client/test/test_bio_model.py | 23 +- .../test/test_bio_model_child_summary.py | 29 +- .../test/test_bio_model_resource_api.py | 15 +- .../test/test_bio_model_summary.py | 123 +- .../vcell_client/test/test_biomodel_ref.py | 23 +- .../vcell_client/test/test_composite_curve.py | 23 +- .../test/test_control_point_curve.py | 31 +- .../api/vcell_client/test/test_coordinate.py | 23 +- .../api/vcell_client/test/test_curve.py | 31 +- .../test/test_curve_selection_info.py | 51 +- .../vcell_client/test/test_data_identifier.py | 39 +- .../vcell_client/test/test_detailed_state.py | 17 +- .../api/vcell_client/test/test_domain.py | 23 +- .../vcell_client/test/test_export_event.py | 47 +- .../test/test_export_progress_type.py | 17 +- .../test/test_export_resource_api.py | 23 +- .../test/test_exportable_data_type.py | 17 +- .../api/vcell_client/test/test_extent.py | 23 +- .../test/test_external_data_identifier.py | 27 +- .../api/vcell_client/test/test_field_data.py | 35 +- .../test/test_field_data_reference.py | 39 +- .../test/test_field_data_resource_api.py | 15 +- .../test/test_field_data_saved_results.py | 23 +- .../test/test_field_data_shape.py | 63 +- .../test/test_function_category.py | 17 +- .../vcell_client/test/test_geometry_mode.py | 17 +- .../test/test_geometry_resource_api.py | 35 +- .../test/test_geometry_spec_dto.py | 111 +- .../test/test_geometry_summary.py | 77 +- .../api/vcell_client/test/test_gif_image.py | 27 +- .../vcell_client/test/test_group_access.py | 23 +- .../test/test_group_access_all.py | 23 +- .../test/test_group_access_none.py | 23 +- .../test/test_group_access_some.py | 35 +- .../vcell_client/test/test_hello_world_api.py | 15 +- .../test/test_hello_world_message.py | 23 +- .../api/vcell_client/test/test_htc_job_id.py | 23 +- .../test/test_human_readable_export_data.py | 23 +- .../api/vcell_client/test/test_i_size.py | 23 +- .../api/vcell_client/test/test_identity.py | 23 +- .../test/test_math_model_child_summary.py | 23 +- .../test/test_math_model_resource_api.py | 35 +- .../test/test_math_model_summary.py | 103 +- .../api/vcell_client/test/test_math_type.py | 17 +- .../vcell_client/test/test_mathmodel_ref.py | 23 +- .../api/vcell_client/test/test_model_type.py | 17 +- .../test/test_n5_export_request.py | 147 +- .../api/vcell_client/test/test_origin.py | 23 +- .../api/vcell_client/test/test_publication.py | 39 +- .../test/test_publication_info.py | 27 +- .../test/test_publication_resource_api.py | 15 +- .../vcell_client/test/test_sampled_curve.py | 23 +- .../test/test_scheduler_status.py | 17 +- ...test_simulation_execution_status_record.py | 27 +- .../test/test_simulation_job_status_record.py | 59 +- .../test/test_simulation_message.py | 27 +- ...st_simulation_queue_entry_status_record.py | 27 +- .../test/test_simulation_queue_id.py | 17 +- .../test/test_simulation_resource_api.py | 15 +- ...est_simulation_status_persistent_record.py | 27 +- .../test/test_solver_resource_api.py | 15 +- .../vcell_client/test/test_source_model.py | 23 +- .../test/test_spatial_selection.py | 101 +- .../test/test_spatial_selection_contour.py | 23 +- .../test/test_spatial_selection_membrane.py | 33 +- .../test/test_spatial_selection_volume.py | 23 +- .../vcell_client/test/test_specialclaim.py | 17 +- .../api/vcell_client/test/test_spline.py | 23 +- .../test/test_standard_export_info.py | 151 +- .../api/vcell_client/test/test_status.py | 17 +- .../vcell_client/test/test_status_message.py | 75 +- .../api/vcell_client/test/test_time_mode.py | 17 +- .../api/vcell_client/test/test_time_specs.py | 23 +- .../api/vcell_client/test/test_user.py | 23 +- .../test/test_user_identity_json_safe.py | 23 +- .../test/test_user_login_info_for_mapping.py | 23 +- .../test/test_user_registration_info.py | 23 +- .../test/test_users_resource_api.py | 15 +- .../test/test_v_cell_http_error.py | 23 +- .../api/vcell_client/test/test_v_cell_site.py | 17 +- .../test/test_v_cell_software_version.py | 23 +- .../vcell_client/test/test_variable_domain.py | 17 +- .../vcell_client/test/test_variable_mode.py | 17 +- .../vcell_client/test/test_variable_specs.py | 23 +- .../vcell_client/test/test_variable_type.py | 23 +- .../test/test_vc_document_type.py | 17 +- .../test/test_vc_image_resource_api.py | 35 +- .../test/test_vc_image_summary.py | 83 +- .../test/test_vc_simulation_identifier.py | 27 +- .../api/vcell_client/test/test_version.py | 37 +- .../vcell_client/test/test_version_flag.py | 23 +- pyvcell/_internal/api/vcell_client_README.md | 302 ++-- scripts/openapi.yaml | 1584 +++++++++-------- 301 files changed, 8160 insertions(+), 10418 deletions(-) diff --git a/pyvcell/_internal/api/vcell_client/__init__.py b/pyvcell/_internal/api/vcell_client/__init__.py index 03ddf76..1972e27 100644 --- a/pyvcell/_internal/api/vcell_client/__init__.py +++ b/pyvcell/_internal/api/vcell_client/__init__.py @@ -3,18 +3,17 @@ # flake8: noqa """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - __version__ = "1.0.0" # Define package exports @@ -135,8 +134,12 @@ from pyvcell._internal.api.vcell_client.api.geometry_resource_api import GeometryResourceApi as GeometryResourceApi from pyvcell._internal.api.vcell_client.api.hello_world_api import HelloWorldApi as HelloWorldApi from pyvcell._internal.api.vcell_client.api.math_model_resource_api import MathModelResourceApi as MathModelResourceApi -from pyvcell._internal.api.vcell_client.api.publication_resource_api import PublicationResourceApi as PublicationResourceApi -from pyvcell._internal.api.vcell_client.api.simulation_resource_api import SimulationResourceApi as SimulationResourceApi +from pyvcell._internal.api.vcell_client.api.publication_resource_api import ( + PublicationResourceApi as PublicationResourceApi, +) +from pyvcell._internal.api.vcell_client.api.simulation_resource_api import ( + SimulationResourceApi as SimulationResourceApi, +) from pyvcell._internal.api.vcell_client.api.solver_resource_api import SolverResourceApi as SolverResourceApi from pyvcell._internal.api.vcell_client.api.users_resource_api import UsersResourceApi as UsersResourceApi from pyvcell._internal.api.vcell_client.api.vc_image_resource_api import VCImageResourceApi as VCImageResourceApi @@ -153,13 +156,19 @@ from pyvcell._internal.api.vcell_client.exceptions import ApiException as ApiException # import models into sdk package -from pyvcell._internal.api.vcell_client.models.acces_token_representation_record import AccesTokenRepresentationRecord as AccesTokenRepresentationRecord +from pyvcell._internal.api.vcell_client.models.acces_token_representation_record import ( + AccesTokenRepresentationRecord as AccesTokenRepresentationRecord, +) from pyvcell._internal.api.vcell_client.models.analytic_curve import AnalyticCurve as AnalyticCurve -from pyvcell._internal.api.vcell_client.models.annotated_function_dto import AnnotatedFunctionDTO as AnnotatedFunctionDTO +from pyvcell._internal.api.vcell_client.models.annotated_function_dto import ( + AnnotatedFunctionDTO as AnnotatedFunctionDTO, +) from pyvcell._internal.api.vcell_client.models.application_info import ApplicationInfo as ApplicationInfo from pyvcell._internal.api.vcell_client.models.batch_system_type import BatchSystemType as BatchSystemType from pyvcell._internal.api.vcell_client.models.bio_model import BioModel as BioModel -from pyvcell._internal.api.vcell_client.models.bio_model_child_summary import BioModelChildSummary as BioModelChildSummary +from pyvcell._internal.api.vcell_client.models.bio_model_child_summary import ( + BioModelChildSummary as BioModelChildSummary, +) from pyvcell._internal.api.vcell_client.models.bio_model_summary import BioModelSummary as BioModelSummary from pyvcell._internal.api.vcell_client.models.biomodel_ref import BiomodelRef as BiomodelRef from pyvcell._internal.api.vcell_client.models.composite_curve import CompositeCurve as CompositeCurve @@ -174,10 +183,14 @@ from pyvcell._internal.api.vcell_client.models.export_progress_type import ExportProgressType as ExportProgressType from pyvcell._internal.api.vcell_client.models.exportable_data_type import ExportableDataType as ExportableDataType from pyvcell._internal.api.vcell_client.models.extent import Extent as Extent -from pyvcell._internal.api.vcell_client.models.external_data_identifier import ExternalDataIdentifier as ExternalDataIdentifier +from pyvcell._internal.api.vcell_client.models.external_data_identifier import ( + ExternalDataIdentifier as ExternalDataIdentifier, +) from pyvcell._internal.api.vcell_client.models.field_data import FieldData as FieldData from pyvcell._internal.api.vcell_client.models.field_data_reference import FieldDataReference as FieldDataReference -from pyvcell._internal.api.vcell_client.models.field_data_saved_results import FieldDataSavedResults as FieldDataSavedResults +from pyvcell._internal.api.vcell_client.models.field_data_saved_results import ( + FieldDataSavedResults as FieldDataSavedResults, +) from pyvcell._internal.api.vcell_client.models.field_data_shape import FieldDataShape as FieldDataShape from pyvcell._internal.api.vcell_client.models.function_category import FunctionCategory as FunctionCategory from pyvcell._internal.api.vcell_client.models.gif_image import GIFImage as GIFImage @@ -190,10 +203,14 @@ from pyvcell._internal.api.vcell_client.models.group_access_some import GroupAccessSome as GroupAccessSome from pyvcell._internal.api.vcell_client.models.hello_world_message import HelloWorldMessage as HelloWorldMessage from pyvcell._internal.api.vcell_client.models.htc_job_id import HtcJobID as HtcJobID -from pyvcell._internal.api.vcell_client.models.human_readable_export_data import HumanReadableExportData as HumanReadableExportData +from pyvcell._internal.api.vcell_client.models.human_readable_export_data import ( + HumanReadableExportData as HumanReadableExportData, +) from pyvcell._internal.api.vcell_client.models.i_size import ISize as ISize from pyvcell._internal.api.vcell_client.models.identity import Identity as Identity -from pyvcell._internal.api.vcell_client.models.math_model_child_summary import MathModelChildSummary as MathModelChildSummary +from pyvcell._internal.api.vcell_client.models.math_model_child_summary import ( + MathModelChildSummary as MathModelChildSummary, +) from pyvcell._internal.api.vcell_client.models.math_model_summary import MathModelSummary as MathModelSummary from pyvcell._internal.api.vcell_client.models.math_type import MathType as MathType from pyvcell._internal.api.vcell_client.models.mathmodel_ref import MathmodelRef as MathmodelRef @@ -205,17 +222,31 @@ from pyvcell._internal.api.vcell_client.models.specialclaim import SPECIALCLAIM as SPECIALCLAIM from pyvcell._internal.api.vcell_client.models.sampled_curve import SampledCurve as SampledCurve from pyvcell._internal.api.vcell_client.models.scheduler_status import SchedulerStatus as SchedulerStatus -from pyvcell._internal.api.vcell_client.models.simulation_execution_status_record import SimulationExecutionStatusRecord as SimulationExecutionStatusRecord -from pyvcell._internal.api.vcell_client.models.simulation_job_status_record import SimulationJobStatusRecord as SimulationJobStatusRecord +from pyvcell._internal.api.vcell_client.models.simulation_execution_status_record import ( + SimulationExecutionStatusRecord as SimulationExecutionStatusRecord, +) +from pyvcell._internal.api.vcell_client.models.simulation_job_status_record import ( + SimulationJobStatusRecord as SimulationJobStatusRecord, +) from pyvcell._internal.api.vcell_client.models.simulation_message import SimulationMessage as SimulationMessage -from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import SimulationQueueEntryStatusRecord as SimulationQueueEntryStatusRecord +from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import ( + SimulationQueueEntryStatusRecord as SimulationQueueEntryStatusRecord, +) from pyvcell._internal.api.vcell_client.models.simulation_queue_id import SimulationQueueID as SimulationQueueID -from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import SimulationStatusPersistentRecord as SimulationStatusPersistentRecord +from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import ( + SimulationStatusPersistentRecord as SimulationStatusPersistentRecord, +) from pyvcell._internal.api.vcell_client.models.source_model import SourceModel as SourceModel from pyvcell._internal.api.vcell_client.models.spatial_selection import SpatialSelection as SpatialSelection -from pyvcell._internal.api.vcell_client.models.spatial_selection_contour import SpatialSelectionContour as SpatialSelectionContour -from pyvcell._internal.api.vcell_client.models.spatial_selection_membrane import SpatialSelectionMembrane as SpatialSelectionMembrane -from pyvcell._internal.api.vcell_client.models.spatial_selection_volume import SpatialSelectionVolume as SpatialSelectionVolume +from pyvcell._internal.api.vcell_client.models.spatial_selection_contour import ( + SpatialSelectionContour as SpatialSelectionContour, +) +from pyvcell._internal.api.vcell_client.models.spatial_selection_membrane import ( + SpatialSelectionMembrane as SpatialSelectionMembrane, +) +from pyvcell._internal.api.vcell_client.models.spatial_selection_volume import ( + SpatialSelectionVolume as SpatialSelectionVolume, +) from pyvcell._internal.api.vcell_client.models.spline import Spline as Spline from pyvcell._internal.api.vcell_client.models.standard_export_info import StandardExportInfo as StandardExportInfo from pyvcell._internal.api.vcell_client.models.status import Status as Status @@ -223,19 +254,28 @@ from pyvcell._internal.api.vcell_client.models.time_mode import TimeMode as TimeMode from pyvcell._internal.api.vcell_client.models.time_specs import TimeSpecs as TimeSpecs from pyvcell._internal.api.vcell_client.models.user import User as User -from pyvcell._internal.api.vcell_client.models.user_identity_json_safe import UserIdentityJSONSafe as UserIdentityJSONSafe -from pyvcell._internal.api.vcell_client.models.user_login_info_for_mapping import UserLoginInfoForMapping as UserLoginInfoForMapping -from pyvcell._internal.api.vcell_client.models.user_registration_info import UserRegistrationInfo as UserRegistrationInfo +from pyvcell._internal.api.vcell_client.models.user_identity_json_safe import ( + UserIdentityJSONSafe as UserIdentityJSONSafe, +) +from pyvcell._internal.api.vcell_client.models.user_login_info_for_mapping import ( + UserLoginInfoForMapping as UserLoginInfoForMapping, +) +from pyvcell._internal.api.vcell_client.models.user_registration_info import ( + UserRegistrationInfo as UserRegistrationInfo, +) from pyvcell._internal.api.vcell_client.models.vc_document_type import VCDocumentType as VCDocumentType from pyvcell._internal.api.vcell_client.models.vc_image_summary import VCImageSummary as VCImageSummary -from pyvcell._internal.api.vcell_client.models.vc_simulation_identifier import VCSimulationIdentifier as VCSimulationIdentifier +from pyvcell._internal.api.vcell_client.models.vc_simulation_identifier import ( + VCSimulationIdentifier as VCSimulationIdentifier, +) from pyvcell._internal.api.vcell_client.models.v_cell_http_error import VCellHTTPError as VCellHTTPError from pyvcell._internal.api.vcell_client.models.v_cell_site import VCellSite as VCellSite -from pyvcell._internal.api.vcell_client.models.v_cell_software_version import VCellSoftwareVersion as VCellSoftwareVersion +from pyvcell._internal.api.vcell_client.models.v_cell_software_version import ( + VCellSoftwareVersion as VCellSoftwareVersion, +) from pyvcell._internal.api.vcell_client.models.variable_domain import VariableDomain as VariableDomain from pyvcell._internal.api.vcell_client.models.variable_mode import VariableMode as VariableMode from pyvcell._internal.api.vcell_client.models.variable_specs import VariableSpecs as VariableSpecs from pyvcell._internal.api.vcell_client.models.variable_type import VariableType as VariableType from pyvcell._internal.api.vcell_client.models.version import Version as Version from pyvcell._internal.api.vcell_client.models.version_flag import VersionFlag as VersionFlag - diff --git a/pyvcell/_internal/api/vcell_client/api/__init__.py b/pyvcell/_internal/api/vcell_client/api/__init__.py index d102416..4a07989 100644 --- a/pyvcell/_internal/api/vcell_client/api/__init__.py +++ b/pyvcell/_internal/api/vcell_client/api/__init__.py @@ -13,4 +13,3 @@ from pyvcell._internal.api.vcell_client.api.solver_resource_api import SolverResourceApi from pyvcell._internal.api.vcell_client.api.users_resource_api import UsersResourceApi from pyvcell._internal.api.vcell_client.api.vc_image_resource_api import VCImageResourceApi - diff --git a/pyvcell/_internal/api/vcell_client/api/admin_resource_api.py b/pyvcell/_internal/api/vcell_client/api/admin_resource_api.py index 97d2f0c..2cec049 100644 --- a/pyvcell/_internal/api/vcell_client/api/admin_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/admin_resource_api.py @@ -1,16 +1,15 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import warnings from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt from typing import Any, Dict, List, Optional, Tuple, Union @@ -36,17 +35,13 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client - @validate_call def get_usage( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -76,42 +71,32 @@ def get_usage( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_usage_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bytearray", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "bytearray", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_usage_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -141,42 +126,32 @@ def get_usage_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_usage_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bytearray", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "bytearray", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_usage_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -206,28 +181,21 @@ def get_usage_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_usage_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bytearray", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "bytearray", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_usage_serialize( self, _request_auth, @@ -235,19 +203,15 @@ def _get_usage_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -256,25 +220,16 @@ def _get_usage_serialize( # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/pdf', - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/pdf", "application/json"]) # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/admin/usage', + method="GET", + resource_path="/api/v1/admin/usage", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -284,7 +239,5 @@ def _get_usage_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - diff --git a/pyvcell/_internal/api/vcell_client/api/bio_model_resource_api.py b/pyvcell/_internal/api/vcell_client/api/bio_model_resource_api.py index 60a31c1..446cce2 100644 --- a/pyvcell/_internal/api/vcell_client/api/bio_model_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/bio_model_resource_api.py @@ -1,16 +1,15 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import warnings from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt from typing import Any, Dict, List, Optional, Tuple, Union @@ -39,7 +38,6 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client - @validate_call def delete_bio_model( self, @@ -47,10 +45,7 @@ def delete_bio_model( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -82,33 +77,29 @@ def delete_bio_model( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_bio_model_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def delete_bio_model_with_http_info( self, @@ -116,10 +107,7 @@ def delete_bio_model_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -151,33 +139,29 @@ def delete_bio_model_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_bio_model_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def delete_bio_model_without_preload_content( self, @@ -185,10 +169,7 @@ def delete_bio_model_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -220,29 +201,25 @@ def delete_bio_model_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_bio_model_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _delete_bio_model_serialize( self, bio_model_id, @@ -251,46 +228,35 @@ def _delete_bio_model_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if bio_model_id is not None: - _path_params['bioModelID'] = bio_model_id + _path_params["bioModelID"] = bio_model_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='DELETE', - resource_path='/api/v1/bioModel/{bioModelID}', + method="DELETE", + resource_path="/api/v1/bioModel/{bioModelID}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -300,12 +266,9 @@ def _delete_bio_model_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_bio_model( self, @@ -313,10 +276,7 @@ def get_bio_model( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -348,33 +308,29 @@ def get_bio_model( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_bio_model_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "BioModel", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "BioModel", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_bio_model_with_http_info( self, @@ -382,10 +338,7 @@ def get_bio_model_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -417,33 +370,29 @@ def get_bio_model_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_bio_model_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "BioModel", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "BioModel", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_bio_model_without_preload_content( self, @@ -451,10 +400,7 @@ def get_bio_model_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -486,29 +432,25 @@ def get_bio_model_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_bio_model_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "BioModel", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "BioModel", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_bio_model_serialize( self, bio_model_id, @@ -517,46 +459,35 @@ def _get_bio_model_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if bio_model_id is not None: - _path_params['bioModelID'] = bio_model_id + _path_params["bioModelID"] = bio_model_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/bioModel/{bioModelID}', + method="GET", + resource_path="/api/v1/bioModel/{bioModelID}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -566,23 +497,20 @@ def _get_bio_model_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_bio_model_summaries( self, - include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Includes BioModel summaries that are public or shared with requester. Default is true.")] = None, + include_public_and_shared: Annotated[ + Optional[StrictBool], + Field(description="Includes BioModel summaries that are public or shared with requester. Default is true."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -614,42 +542,38 @@ def get_bio_model_summaries( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_bio_model_summaries_serialize( include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[BioModelSummary]", - '500': "VCellHTTPError", + "200": "List[BioModelSummary]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_bio_model_summaries_with_http_info( self, - include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Includes BioModel summaries that are public or shared with requester. Default is true.")] = None, + include_public_and_shared: Annotated[ + Optional[StrictBool], + Field(description="Includes BioModel summaries that are public or shared with requester. Default is true."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -681,42 +605,38 @@ def get_bio_model_summaries_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_bio_model_summaries_serialize( include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[BioModelSummary]", - '500': "VCellHTTPError", + "200": "List[BioModelSummary]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_bio_model_summaries_without_preload_content( self, - include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Includes BioModel summaries that are public or shared with requester. Default is true.")] = None, + include_public_and_shared: Annotated[ + Optional[StrictBool], + Field(description="Includes BioModel summaries that are public or shared with requester. Default is true."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -748,27 +668,23 @@ def get_bio_model_summaries_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_bio_model_summaries_serialize( include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[BioModelSummary]", - '500': "VCellHTTPError", + "200": "List[BioModelSummary]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_bio_model_summaries_serialize( self, include_public_and_shared, @@ -777,48 +693,36 @@ def _get_bio_model_summaries_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if include_public_and_shared is not None: - - _query_params.append(('includePublicAndShared', include_public_and_shared)) - + _query_params.append(("includePublicAndShared", include_public_and_shared)) + # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/bioModel/summaries', + method="GET", + resource_path="/api/v1/bioModel/summaries", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -828,12 +732,9 @@ def _get_bio_model_summaries_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_bio_model_summary( self, @@ -841,10 +742,7 @@ def get_bio_model_summary( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -876,32 +774,28 @@ def get_bio_model_summary( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_bio_model_summary_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "BioModelSummary", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "BioModelSummary", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_bio_model_summary_with_http_info( self, @@ -909,10 +803,7 @@ def get_bio_model_summary_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -944,32 +835,28 @@ def get_bio_model_summary_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_bio_model_summary_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "BioModelSummary", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "BioModelSummary", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_bio_model_summary_without_preload_content( self, @@ -977,10 +864,7 @@ def get_bio_model_summary_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1012,28 +896,24 @@ def get_bio_model_summary_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_bio_model_summary_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "BioModelSummary", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "BioModelSummary", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_bio_model_summary_serialize( self, bio_model_id, @@ -1042,46 +922,35 @@ def _get_bio_model_summary_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if bio_model_id is not None: - _path_params['bioModelID'] = bio_model_id + _path_params["bioModelID"] = bio_model_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/bioModel/{bioModelID}/summary', + method="GET", + resource_path="/api/v1/bioModel/{bioModelID}/summary", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1091,12 +960,9 @@ def _get_bio_model_summary_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_bio_model_vcml( self, @@ -1104,10 +970,7 @@ def get_bio_model_vcml( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1139,33 +1002,29 @@ def get_bio_model_vcml( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_bio_model_vcml_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_bio_model_vcml_with_http_info( self, @@ -1173,10 +1032,7 @@ def get_bio_model_vcml_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1208,33 +1064,29 @@ def get_bio_model_vcml_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_bio_model_vcml_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_bio_model_vcml_without_preload_content( self, @@ -1242,10 +1094,7 @@ def get_bio_model_vcml_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1277,29 +1126,25 @@ def get_bio_model_vcml_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_bio_model_vcml_serialize( bio_model_id=bio_model_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_bio_model_vcml_serialize( self, bio_model_id, @@ -1308,47 +1153,35 @@ def _get_bio_model_vcml_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if bio_model_id is not None: - _path_params['bioModelID'] = bio_model_id + _path_params["bioModelID"] = bio_model_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'text/xml', - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["text/xml", "application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/bioModel/{bioModelID}/vcml_download', + method="GET", + resource_path="/api/v1/bioModel/{bioModelID}/vcml_download", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1358,25 +1191,25 @@ def _get_bio_model_vcml_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def save_bio_model( self, body: Annotated[StrictStr, Field(description="BioModelVCML which will be saved.")], - new_name: Annotated[Optional[StrictStr], Field(description="Name to save new BioModel under. Leave blank if re-saving existing BioModel.")] = None, - sims_requiring_updates: Annotated[Optional[List[StrictStr]], Field(description="The name of simulations that will be prepared for future execution.")] = None, + new_name: Annotated[ + Optional[StrictStr], + Field(description="Name to save new BioModel under. Leave blank if re-saving existing BioModel."), + ] = None, + sims_requiring_updates: Annotated[ + Optional[List[StrictStr]], + Field(description="The name of simulations that will be prepared for future execution."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1412,7 +1245,7 @@ def save_bio_model( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_bio_model_serialize( body=body, @@ -1421,40 +1254,39 @@ def save_bio_model( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def save_bio_model_with_http_info( self, body: Annotated[StrictStr, Field(description="BioModelVCML which will be saved.")], - new_name: Annotated[Optional[StrictStr], Field(description="Name to save new BioModel under. Leave blank if re-saving existing BioModel.")] = None, - sims_requiring_updates: Annotated[Optional[List[StrictStr]], Field(description="The name of simulations that will be prepared for future execution.")] = None, + new_name: Annotated[ + Optional[StrictStr], + Field(description="Name to save new BioModel under. Leave blank if re-saving existing BioModel."), + ] = None, + sims_requiring_updates: Annotated[ + Optional[List[StrictStr]], + Field(description="The name of simulations that will be prepared for future execution."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1490,7 +1322,7 @@ def save_bio_model_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_bio_model_serialize( body=body, @@ -1499,40 +1331,39 @@ def save_bio_model_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def save_bio_model_without_preload_content( self, body: Annotated[StrictStr, Field(description="BioModelVCML which will be saved.")], - new_name: Annotated[Optional[StrictStr], Field(description="Name to save new BioModel under. Leave blank if re-saving existing BioModel.")] = None, - sims_requiring_updates: Annotated[Optional[List[StrictStr]], Field(description="The name of simulations that will be prepared for future execution.")] = None, + new_name: Annotated[ + Optional[StrictStr], + Field(description="Name to save new BioModel under. Leave blank if re-saving existing BioModel."), + ] = None, + sims_requiring_updates: Annotated[ + Optional[List[StrictStr]], + Field(description="The name of simulations that will be prepared for future execution."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1568,7 +1399,7 @@ def save_bio_model_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_bio_model_serialize( body=body, @@ -1577,23 +1408,19 @@ def save_bio_model_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _save_bio_model_serialize( self, body, @@ -1604,69 +1431,51 @@ def _save_bio_model_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None _collection_formats: Dict[str, str] = { - 'simsRequiringUpdates': 'multi', + "simsRequiringUpdates": "multi", } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if new_name is not None: - - _query_params.append(('newName', new_name)) - + _query_params.append(("newName", new_name)) + if sims_requiring_updates is not None: - - _query_params.append(('simsRequiringUpdates', sims_requiring_updates)) - + _query_params.append(("simsRequiringUpdates", sims_requiring_updates)) + # process the header parameters # process the form parameters # process the body parameter if body is not None: _body_params = body - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/xml' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/xml"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/xml' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["application/xml"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/bioModel', + method="POST", + resource_path="/api/v1/bioModel", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1676,7 +1485,5 @@ def _save_bio_model_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - diff --git a/pyvcell/_internal/api/vcell_client/api/export_resource_api.py b/pyvcell/_internal/api/vcell_client/api/export_resource_api.py index 9e97ae6..f8a134d 100644 --- a/pyvcell/_internal/api/vcell_client/api/export_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/export_resource_api.py @@ -1,16 +1,15 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import warnings from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt from typing import Any, Dict, List, Optional, Tuple, Union @@ -38,7 +37,6 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client - @validate_call def export_n5( self, @@ -46,10 +44,7 @@ def export_n5( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -82,35 +77,31 @@ def export_n5( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._export_n5_serialize( n5_export_request=n5_export_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "int", - '400': "VCellHTTPError", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "int", + "400": "VCellHTTPError", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def export_n5_with_http_info( self, @@ -118,10 +109,7 @@ def export_n5_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -154,35 +142,31 @@ def export_n5_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._export_n5_serialize( n5_export_request=n5_export_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "int", - '400': "VCellHTTPError", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "int", + "400": "VCellHTTPError", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def export_n5_without_preload_content( self, @@ -190,10 +174,7 @@ def export_n5_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -226,31 +207,27 @@ def export_n5_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._export_n5_serialize( n5_export_request=n5_export_request, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "int", - '400': "VCellHTTPError", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "int", + "400": "VCellHTTPError", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _export_n5_serialize( self, n5_export_request, @@ -259,19 +236,15 @@ def _export_n5_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -282,37 +255,24 @@ def _export_n5_serialize( if n5_export_request is not None: _body_params = n5_export_request - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/json' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["application/json"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/export/N5', + method="POST", + resource_path="/api/v1/export/N5", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -322,12 +282,9 @@ def _export_n5_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def export_status( self, @@ -335,10 +292,7 @@ def export_status( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -371,33 +325,29 @@ def export_status( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._export_status_serialize( timestamp=timestamp, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[ExportEvent]", - '401': "VCellHTTPError", - '403': None, - '500': "VCellHTTPError", + "200": "List[ExportEvent]", + "401": "VCellHTTPError", + "403": None, + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def export_status_with_http_info( self, @@ -405,10 +355,7 @@ def export_status_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -441,33 +388,29 @@ def export_status_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._export_status_serialize( timestamp=timestamp, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[ExportEvent]", - '401': "VCellHTTPError", - '403': None, - '500': "VCellHTTPError", + "200": "List[ExportEvent]", + "401": "VCellHTTPError", + "403": None, + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def export_status_without_preload_content( self, @@ -475,10 +418,7 @@ def export_status_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -511,29 +451,25 @@ def export_status_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._export_status_serialize( timestamp=timestamp, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[ExportEvent]", - '401': "VCellHTTPError", - '403': None, - '500': "VCellHTTPError", + "200": "List[ExportEvent]", + "401": "VCellHTTPError", + "403": None, + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _export_status_serialize( self, timestamp, @@ -542,49 +478,36 @@ def _export_status_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if timestamp is not None: - - _query_params.append(('timestamp', timestamp)) - + _query_params.append(("timestamp", timestamp)) + # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/export/status', + method="GET", + resource_path="/api/v1/export/status", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -594,7 +517,5 @@ def _export_status_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - diff --git a/pyvcell/_internal/api/vcell_client/api/field_data_resource_api.py b/pyvcell/_internal/api/vcell_client/api/field_data_resource_api.py index 99d1341..9613f12 100644 --- a/pyvcell/_internal/api/vcell_client/api/field_data_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/field_data_resource_api.py @@ -1,16 +1,15 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import warnings from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt from typing import Any, Dict, List, Optional, Tuple, Union @@ -45,7 +44,6 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client - @validate_call def advanced_create( self, @@ -60,10 +58,7 @@ def advanced_create( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -109,7 +104,7 @@ def advanced_create( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._advanced_create_serialize( file=file, @@ -123,27 +118,23 @@ def advanced_create( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldDataSavedResults", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldDataSavedResults", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def advanced_create_with_http_info( self, @@ -158,10 +149,7 @@ def advanced_create_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -207,7 +195,7 @@ def advanced_create_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._advanced_create_serialize( file=file, @@ -221,27 +209,23 @@ def advanced_create_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldDataSavedResults", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldDataSavedResults", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def advanced_create_without_preload_content( self, @@ -256,10 +240,7 @@ def advanced_create_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -305,7 +286,7 @@ def advanced_create_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._advanced_create_serialize( file=file, @@ -319,23 +300,19 @@ def advanced_create_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldDataSavedResults", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldDataSavedResults", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _advanced_create_serialize( self, file, @@ -351,21 +328,18 @@ def _advanced_create_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None _collection_formats: Dict[str, str] = { - 'channelNames': 'multi', - 'times': 'multi', + "channelNames": "multi", + "times": "multi", } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -373,54 +347,41 @@ def _advanced_create_serialize( # process the header parameters # process the form parameters if file is not None: - _files['file'] = file + _files["file"] = file if file_name is not None: - _form_params.append(('fileName', file_name)) + _form_params.append(("fileName", file_name)) if extent is not None: - _form_params.append(('extent', extent)) + _form_params.append(("extent", extent)) if i_size is not None: - _form_params.append(('iSize', i_size)) + _form_params.append(("iSize", i_size)) if channel_names is not None: - _form_params.append(('channelNames', channel_names)) + _form_params.append(("channelNames", channel_names)) if times is not None: - _form_params.append(('times', times)) + _form_params.append(("times", times)) if annotation is not None: - _form_params.append(('annotation', annotation)) + _form_params.append(("annotation", annotation)) if origin is not None: - _form_params.append(('origin', origin)) + _form_params.append(("origin", origin)) # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'multipart/form-data' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/fieldData/advancedCreate', + method="POST", + resource_path="/api/v1/fieldData/advancedCreate", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -430,12 +391,9 @@ def _advanced_create_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def analyze_file( self, @@ -444,10 +402,7 @@ def analyze_file( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -481,7 +436,7 @@ def analyze_file( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._analyze_file_serialize( file=file, @@ -489,27 +444,23 @@ def analyze_file( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldData", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldData", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def analyze_file_with_http_info( self, @@ -518,10 +469,7 @@ def analyze_file_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -555,7 +503,7 @@ def analyze_file_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._analyze_file_serialize( file=file, @@ -563,27 +511,23 @@ def analyze_file_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldData", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldData", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def analyze_file_without_preload_content( self, @@ -592,10 +536,7 @@ def analyze_file_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -629,7 +570,7 @@ def analyze_file_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._analyze_file_serialize( file=file, @@ -637,23 +578,19 @@ def analyze_file_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldData", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldData", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _analyze_file_serialize( self, file, @@ -663,19 +600,15 @@ def _analyze_file_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -683,42 +616,29 @@ def _analyze_file_serialize( # process the header parameters # process the form parameters if file is not None: - _files['file'] = file + _files["file"] = file if file_name is not None: - _form_params.append(('fileName', file_name)) + _form_params.append(("fileName", file_name)) # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'multipart/form-data' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/fieldData/analyzeFile', + method="POST", + resource_path="/api/v1/fieldData/analyzeFile", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -728,12 +648,9 @@ def _analyze_file_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def copy_models_field_data( self, @@ -741,10 +658,7 @@ def copy_models_field_data( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -776,34 +690,30 @@ def copy_models_field_data( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._copy_models_field_data_serialize( source_model=source_model, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Dict[str, ExternalDataIdentifier]", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "Dict[str, ExternalDataIdentifier]", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def copy_models_field_data_with_http_info( self, @@ -811,10 +721,7 @@ def copy_models_field_data_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -846,34 +753,30 @@ def copy_models_field_data_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._copy_models_field_data_serialize( source_model=source_model, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Dict[str, ExternalDataIdentifier]", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "Dict[str, ExternalDataIdentifier]", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def copy_models_field_data_without_preload_content( self, @@ -881,10 +784,7 @@ def copy_models_field_data_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -916,30 +816,26 @@ def copy_models_field_data_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._copy_models_field_data_serialize( source_model=source_model, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Dict[str, ExternalDataIdentifier]", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "Dict[str, ExternalDataIdentifier]", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _copy_models_field_data_serialize( self, source_model, @@ -948,19 +844,15 @@ def _copy_models_field_data_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -971,37 +863,24 @@ def _copy_models_field_data_serialize( if source_model is not None: _body_params = source_model - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/json' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["application/json"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/fieldData/copyModelsFieldData', + method="POST", + resource_path="/api/v1/fieldData/copyModelsFieldData", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1011,12 +890,9 @@ def _copy_models_field_data_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def create_from_file( self, @@ -1025,10 +901,7 @@ def create_from_file( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1062,7 +935,7 @@ def create_from_file( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_from_file_serialize( file=file, @@ -1070,27 +943,23 @@ def create_from_file( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldDataSavedResults", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldDataSavedResults", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def create_from_file_with_http_info( self, @@ -1099,10 +968,7 @@ def create_from_file_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1136,7 +1002,7 @@ def create_from_file_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_from_file_serialize( file=file, @@ -1144,27 +1010,23 @@ def create_from_file_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldDataSavedResults", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldDataSavedResults", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def create_from_file_without_preload_content( self, @@ -1173,10 +1035,7 @@ def create_from_file_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1210,7 +1069,7 @@ def create_from_file_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_from_file_serialize( file=file, @@ -1218,23 +1077,19 @@ def create_from_file_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldDataSavedResults", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldDataSavedResults", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _create_from_file_serialize( self, file, @@ -1244,19 +1099,15 @@ def _create_from_file_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -1264,42 +1115,29 @@ def _create_from_file_serialize( # process the header parameters # process the form parameters if file is not None: - _files['file'] = file + _files["file"] = file if field_data_name is not None: - _form_params.append(('fieldDataName', field_data_name)) + _form_params.append(("fieldDataName", field_data_name)) # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'multipart/form-data' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/fieldData/createFromFile', + method="POST", + resource_path="/api/v1/fieldData/createFromFile", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1309,12 +1147,9 @@ def _create_from_file_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def create_from_simulation( self, @@ -1324,10 +1159,7 @@ def create_from_simulation( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1363,7 +1195,7 @@ def create_from_simulation( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_from_simulation_serialize( sim_key_reference=sim_key_reference, @@ -1372,26 +1204,22 @@ def create_from_simulation( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '201': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "201": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def create_from_simulation_with_http_info( self, @@ -1401,10 +1229,7 @@ def create_from_simulation_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1440,7 +1265,7 @@ def create_from_simulation_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_from_simulation_serialize( sim_key_reference=sim_key_reference, @@ -1449,26 +1274,22 @@ def create_from_simulation_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '201': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "201": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def create_from_simulation_without_preload_content( self, @@ -1478,10 +1299,7 @@ def create_from_simulation_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1517,7 +1335,7 @@ def create_from_simulation_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_from_simulation_serialize( sim_key_reference=sim_key_reference, @@ -1526,22 +1344,18 @@ def create_from_simulation_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '201': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "201": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _create_from_simulation_serialize( self, sim_key_reference, @@ -1552,19 +1366,15 @@ def _create_from_simulation_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -1572,44 +1382,31 @@ def _create_from_simulation_serialize( # process the header parameters # process the form parameters if sim_key_reference is not None: - _form_params.append(('simKeyReference', sim_key_reference)) + _form_params.append(("simKeyReference", sim_key_reference)) if job_index is not None: - _form_params.append(('jobIndex', job_index)) + _form_params.append(("jobIndex", job_index)) if new_field_data_name is not None: - _form_params.append(('newFieldDataName', new_field_data_name)) + _form_params.append(("newFieldDataName", new_field_data_name)) # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/x-www-form-urlencoded' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["application/x-www-form-urlencoded"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/fieldData/createFromSimulation', + method="POST", + resource_path="/api/v1/fieldData/createFromSimulation", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1619,12 +1416,9 @@ def _create_from_simulation_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def delete( self, @@ -1632,10 +1426,7 @@ def delete( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1667,33 +1458,29 @@ def delete( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_serialize( field_data_id=field_data_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def delete_with_http_info( self, @@ -1701,10 +1488,7 @@ def delete_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1736,33 +1520,29 @@ def delete_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_serialize( field_data_id=field_data_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def delete_without_preload_content( self, @@ -1770,10 +1550,7 @@ def delete_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1805,29 +1582,25 @@ def delete_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_serialize( field_data_id=field_data_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _delete_serialize( self, field_data_id, @@ -1836,47 +1609,35 @@ def _delete_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if field_data_id is not None: - _path_params['fieldDataID'] = field_data_id + _path_params["fieldDataID"] = field_data_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='DELETE', - resource_path='/api/v1/fieldData/delete/{fieldDataID}', + method="DELETE", + resource_path="/api/v1/fieldData/delete/{fieldDataID}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1886,22 +1647,16 @@ def _delete_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_all_ids( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1931,42 +1686,32 @@ def get_all_ids( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_all_ids_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[FieldDataReference]", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "List[FieldDataReference]", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_all_ids_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1996,42 +1741,32 @@ def get_all_ids_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_all_ids_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[FieldDataReference]", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "List[FieldDataReference]", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_all_ids_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2061,28 +1796,21 @@ def get_all_ids_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_all_ids_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[FieldDataReference]", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "List[FieldDataReference]", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_all_ids_serialize( self, _request_auth, @@ -2090,19 +1818,15 @@ def _get_all_ids_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -2111,24 +1835,16 @@ def _get_all_ids_serialize( # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/fieldData/IDs', + method="GET", + resource_path="/api/v1/fieldData/IDs", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2138,12 +1854,9 @@ def _get_all_ids_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_shape_from_id( self, @@ -2151,10 +1864,7 @@ def get_shape_from_id( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2186,34 +1896,30 @@ def get_shape_from_id( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_shape_from_id_serialize( field_data_id=field_data_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldDataShape", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldDataShape", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_shape_from_id_with_http_info( self, @@ -2221,10 +1927,7 @@ def get_shape_from_id_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2256,34 +1959,30 @@ def get_shape_from_id_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_shape_from_id_serialize( field_data_id=field_data_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldDataShape", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldDataShape", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_shape_from_id_without_preload_content( self, @@ -2291,10 +1990,7 @@ def get_shape_from_id_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2326,30 +2022,26 @@ def get_shape_from_id_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_shape_from_id_serialize( field_data_id=field_data_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldDataShape", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldDataShape", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_shape_from_id_serialize( self, field_data_id, @@ -2358,47 +2050,35 @@ def _get_shape_from_id_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if field_data_id is not None: - _path_params['fieldDataID'] = field_data_id + _path_params["fieldDataID"] = field_data_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/fieldData/shape/{fieldDataID}', + method="GET", + resource_path="/api/v1/fieldData/shape/{fieldDataID}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2408,12 +2088,9 @@ def _get_shape_from_id_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def save( self, @@ -2421,10 +2098,7 @@ def save( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2456,34 +2130,30 @@ def save( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_serialize( field_data=field_data, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldDataSavedResults", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldDataSavedResults", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def save_with_http_info( self, @@ -2491,10 +2161,7 @@ def save_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2526,34 +2193,30 @@ def save_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_serialize( field_data=field_data, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldDataSavedResults", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldDataSavedResults", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def save_without_preload_content( self, @@ -2561,10 +2224,7 @@ def save_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2596,30 +2256,26 @@ def save_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_serialize( field_data=field_data, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "FieldDataSavedResults", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "FieldDataSavedResults", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _save_serialize( self, field_data, @@ -2628,19 +2284,15 @@ def _save_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -2651,37 +2303,24 @@ def _save_serialize( if field_data is not None: _body_params = field_data - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/json' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["application/json"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/fieldData/save', + method="POST", + resource_path="/api/v1/fieldData/save", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2691,7 +2330,5 @@ def _save_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - diff --git a/pyvcell/_internal/api/vcell_client/api/geometry_resource_api.py b/pyvcell/_internal/api/vcell_client/api/geometry_resource_api.py index c7942f6..6af652d 100644 --- a/pyvcell/_internal/api/vcell_client/api/geometry_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/geometry_resource_api.py @@ -1,16 +1,15 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import warnings from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt from typing import Any, Dict, List, Optional, Tuple, Union @@ -38,7 +37,6 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client - @validate_call def delete_geometry( self, @@ -46,10 +44,7 @@ def delete_geometry( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -82,34 +77,26 @@ def delete_geometry( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_geometry_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def delete_geometry_with_http_info( self, @@ -117,10 +104,7 @@ def delete_geometry_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -153,34 +137,26 @@ def delete_geometry_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_geometry_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def delete_geometry_without_preload_content( self, @@ -188,10 +164,7 @@ def delete_geometry_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -224,30 +197,22 @@ def delete_geometry_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_geometry_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _delete_geometry_serialize( self, id, @@ -256,46 +221,35 @@ def _delete_geometry_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if id is not None: - _path_params['id'] = id + _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='DELETE', - resource_path='/api/v1/geometry/{id}', + method="DELETE", + resource_path="/api/v1/geometry/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -305,23 +259,22 @@ def _delete_geometry_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_geometry_summaries( self, - include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include Geometry summaries that are public and shared with the requester. Default is true.")] = None, + include_public_and_shared: Annotated[ + Optional[StrictBool], + Field( + description="Include Geometry summaries that are public and shared with the requester. Default is true." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -354,42 +307,40 @@ def get_geometry_summaries( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_geometry_summaries_serialize( include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[GeometrySummary]", - '500': "VCellHTTPError", + "200": "List[GeometrySummary]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_geometry_summaries_with_http_info( self, - include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include Geometry summaries that are public and shared with the requester. Default is true.")] = None, + include_public_and_shared: Annotated[ + Optional[StrictBool], + Field( + description="Include Geometry summaries that are public and shared with the requester. Default is true." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -422,42 +373,40 @@ def get_geometry_summaries_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_geometry_summaries_serialize( include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[GeometrySummary]", - '500': "VCellHTTPError", + "200": "List[GeometrySummary]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_geometry_summaries_without_preload_content( self, - include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include Geometry summaries that are public and shared with the requester. Default is true.")] = None, + include_public_and_shared: Annotated[ + Optional[StrictBool], + Field( + description="Include Geometry summaries that are public and shared with the requester. Default is true." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -490,27 +439,23 @@ def get_geometry_summaries_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_geometry_summaries_serialize( include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[GeometrySummary]", - '500': "VCellHTTPError", + "200": "List[GeometrySummary]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_geometry_summaries_serialize( self, include_public_and_shared, @@ -519,48 +464,36 @@ def _get_geometry_summaries_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if include_public_and_shared is not None: - - _query_params.append(('includePublicAndShared', include_public_and_shared)) - + _query_params.append(("includePublicAndShared", include_public_and_shared)) + # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/geometry/summaries', + method="GET", + resource_path="/api/v1/geometry/summaries", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -570,12 +503,9 @@ def _get_geometry_summaries_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_geometry_summary( self, @@ -583,10 +513,7 @@ def get_geometry_summary( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -619,33 +546,25 @@ def get_geometry_summary( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_geometry_summary_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "GeometrySummary", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "GeometrySummary", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_geometry_summary_with_http_info( self, @@ -653,10 +572,7 @@ def get_geometry_summary_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -689,33 +605,25 @@ def get_geometry_summary_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_geometry_summary_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "GeometrySummary", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "GeometrySummary", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_geometry_summary_without_preload_content( self, @@ -723,10 +631,7 @@ def get_geometry_summary_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -759,29 +664,21 @@ def get_geometry_summary_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_geometry_summary_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "GeometrySummary", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "GeometrySummary", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_geometry_summary_serialize( self, id, @@ -790,46 +687,35 @@ def _get_geometry_summary_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if id is not None: - _path_params['id'] = id + _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/geometry/summary/{id}', + method="GET", + resource_path="/api/v1/geometry/summary/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -839,12 +725,9 @@ def _get_geometry_summary_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_geometry_vcml( self, @@ -852,10 +735,7 @@ def get_geometry_vcml( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -888,33 +768,25 @@ def get_geometry_vcml( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_geometry_vcml_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_geometry_vcml_with_http_info( self, @@ -922,10 +794,7 @@ def get_geometry_vcml_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -958,33 +827,25 @@ def get_geometry_vcml_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_geometry_vcml_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_geometry_vcml_without_preload_content( self, @@ -992,10 +853,7 @@ def get_geometry_vcml_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1028,29 +886,21 @@ def get_geometry_vcml_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_geometry_vcml_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_geometry_vcml_serialize( self, id, @@ -1059,47 +909,35 @@ def _get_geometry_vcml_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if id is not None: - _path_params['id'] = id + _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/xml', - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/xml", "application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/geometry/{id}', + method="GET", + resource_path="/api/v1/geometry/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1109,24 +947,21 @@ def _get_geometry_vcml_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def save_geometry( self, body: StrictStr, - new_name: Annotated[Optional[StrictStr], Field(description="Name to save new Geometry under. Leave blank if re-saving existing Geometry.")] = None, + new_name: Annotated[ + Optional[StrictStr], + Field(description="Name to save new Geometry under. Leave blank if re-saving existing Geometry."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1161,7 +996,7 @@ def save_geometry( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_geometry_serialize( body=body, @@ -1169,39 +1004,35 @@ def save_geometry( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def save_geometry_with_http_info( self, body: StrictStr, - new_name: Annotated[Optional[StrictStr], Field(description="Name to save new Geometry under. Leave blank if re-saving existing Geometry.")] = None, + new_name: Annotated[ + Optional[StrictStr], + Field(description="Name to save new Geometry under. Leave blank if re-saving existing Geometry."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1236,7 +1067,7 @@ def save_geometry_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_geometry_serialize( body=body, @@ -1244,39 +1075,35 @@ def save_geometry_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def save_geometry_without_preload_content( self, body: StrictStr, - new_name: Annotated[Optional[StrictStr], Field(description="Name to save new Geometry under. Leave blank if re-saving existing Geometry.")] = None, + new_name: Annotated[ + Optional[StrictStr], + Field(description="Name to save new Geometry under. Leave blank if re-saving existing Geometry."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1311,7 +1138,7 @@ def save_geometry_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_geometry_serialize( body=body, @@ -1319,23 +1146,19 @@ def save_geometry_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _save_geometry_serialize( self, body, @@ -1345,65 +1168,46 @@ def _save_geometry_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if new_name is not None: - - _query_params.append(('newName', new_name)) - + _query_params.append(("newName", new_name)) + # process the header parameters # process the form parameters # process the body parameter if body is not None: _body_params = body - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/xml', - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/xml", "application/json"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/xml' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["application/xml"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/geometry', + method="POST", + resource_path="/api/v1/geometry", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1413,7 +1217,5 @@ def _save_geometry_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - diff --git a/pyvcell/_internal/api/vcell_client/api/hello_world_api.py b/pyvcell/_internal/api/vcell_client/api/hello_world_api.py index c5ac8d2..fe4d250 100644 --- a/pyvcell/_internal/api/vcell_client/api/hello_world_api.py +++ b/pyvcell/_internal/api/vcell_client/api/hello_world_api.py @@ -1,16 +1,15 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import warnings from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt from typing import Any, Dict, List, Optional, Tuple, Union @@ -35,17 +34,13 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client - @validate_call def get_hello_world( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -75,40 +70,30 @@ def get_hello_world( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_hello_world_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "HelloWorldMessage", - '403': "VCellHTTPError", + "200": "HelloWorldMessage", + "403": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_hello_world_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -138,40 +123,30 @@ def get_hello_world_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_hello_world_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "HelloWorldMessage", - '403': "VCellHTTPError", + "200": "HelloWorldMessage", + "403": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_hello_world_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -201,26 +176,19 @@ def get_hello_world_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_hello_world_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "HelloWorldMessage", - '403': "VCellHTTPError", + "200": "HelloWorldMessage", + "403": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_hello_world_serialize( self, _request_auth, @@ -228,19 +196,15 @@ def _get_hello_world_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -249,23 +213,16 @@ def _get_hello_world_serialize( # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/helloworld', + method="GET", + resource_path="/api/v1/helloworld", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -275,7 +232,5 @@ def _get_hello_world_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - diff --git a/pyvcell/_internal/api/vcell_client/api/math_model_resource_api.py b/pyvcell/_internal/api/vcell_client/api/math_model_resource_api.py index 93881e1..e7fce14 100644 --- a/pyvcell/_internal/api/vcell_client/api/math_model_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/math_model_resource_api.py @@ -1,16 +1,15 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import warnings from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt from typing import Any, Dict, List, Optional, Tuple, Union @@ -38,7 +37,6 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client - @validate_call def delete_math_model( self, @@ -46,10 +44,7 @@ def delete_math_model( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -82,34 +77,26 @@ def delete_math_model( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_math_model_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def delete_math_model_with_http_info( self, @@ -117,10 +104,7 @@ def delete_math_model_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -153,34 +137,26 @@ def delete_math_model_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_math_model_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def delete_math_model_without_preload_content( self, @@ -188,10 +164,7 @@ def delete_math_model_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -224,30 +197,22 @@ def delete_math_model_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_math_model_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _delete_math_model_serialize( self, id, @@ -256,46 +221,35 @@ def _delete_math_model_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if id is not None: - _path_params['id'] = id + _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='DELETE', - resource_path='/api/v1/mathModel/{id}', + method="DELETE", + resource_path="/api/v1/mathModel/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -305,23 +259,22 @@ def _delete_math_model_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_summaries( self, - include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include MathModel summaries that are public and shared with the requester. Default is true.")] = None, + include_public_and_shared: Annotated[ + Optional[StrictBool], + Field( + description="Include MathModel summaries that are public and shared with the requester. Default is true." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -354,42 +307,40 @@ def get_summaries( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_summaries_serialize( include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[MathModelSummary]", - '500': "VCellHTTPError", + "200": "List[MathModelSummary]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_summaries_with_http_info( self, - include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include MathModel summaries that are public and shared with the requester. Default is true.")] = None, + include_public_and_shared: Annotated[ + Optional[StrictBool], + Field( + description="Include MathModel summaries that are public and shared with the requester. Default is true." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -422,42 +373,40 @@ def get_summaries_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_summaries_serialize( include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[MathModelSummary]", - '500': "VCellHTTPError", + "200": "List[MathModelSummary]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_summaries_without_preload_content( self, - include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include MathModel summaries that are public and shared with the requester. Default is true.")] = None, + include_public_and_shared: Annotated[ + Optional[StrictBool], + Field( + description="Include MathModel summaries that are public and shared with the requester. Default is true." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -490,27 +439,23 @@ def get_summaries_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_summaries_serialize( include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[MathModelSummary]", - '500': "VCellHTTPError", + "200": "List[MathModelSummary]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_summaries_serialize( self, include_public_and_shared, @@ -519,48 +464,36 @@ def _get_summaries_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if include_public_and_shared is not None: - - _query_params.append(('includePublicAndShared', include_public_and_shared)) - + _query_params.append(("includePublicAndShared", include_public_and_shared)) + # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/mathModel/summaries', + method="GET", + resource_path="/api/v1/mathModel/summaries", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -570,12 +503,9 @@ def _get_summaries_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_summary( self, @@ -583,10 +513,7 @@ def get_summary( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -619,33 +546,25 @@ def get_summary( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_summary_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "MathModelSummary", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "MathModelSummary", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_summary_with_http_info( self, @@ -653,10 +572,7 @@ def get_summary_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -689,33 +605,25 @@ def get_summary_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_summary_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "MathModelSummary", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "MathModelSummary", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_summary_without_preload_content( self, @@ -723,10 +631,7 @@ def get_summary_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -759,29 +664,21 @@ def get_summary_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_summary_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "MathModelSummary", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "MathModelSummary", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_summary_serialize( self, id, @@ -790,46 +687,35 @@ def _get_summary_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if id is not None: - _path_params['id'] = id + _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/mathModel/summary/{id}', + method="GET", + resource_path="/api/v1/mathModel/summary/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -839,12 +725,9 @@ def _get_summary_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_vcml( self, @@ -852,10 +735,7 @@ def get_vcml( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -888,33 +768,25 @@ def get_vcml( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_vcml_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_vcml_with_http_info( self, @@ -922,10 +794,7 @@ def get_vcml_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -958,33 +827,25 @@ def get_vcml_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_vcml_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_vcml_without_preload_content( self, @@ -992,10 +853,7 @@ def get_vcml_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1028,29 +886,21 @@ def get_vcml_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_vcml_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_vcml_serialize( self, id, @@ -1059,47 +909,35 @@ def _get_vcml_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if id is not None: - _path_params['id'] = id + _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/xml', - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/xml", "application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/mathModel/{id}', + method="GET", + resource_path="/api/v1/mathModel/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1109,25 +947,25 @@ def _get_vcml_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def save_math_model( self, body: StrictStr, - new_name: Annotated[Optional[StrictStr], Field(description="Name to save new MathModel under. Leave blank if re-saving existing MathModel.")] = None, - sim_names: Annotated[Optional[List[StrictStr]], Field(description="The name of simulations that will be prepared for future execution.")] = None, + new_name: Annotated[ + Optional[StrictStr], + Field(description="Name to save new MathModel under. Leave blank if re-saving existing MathModel."), + ] = None, + sim_names: Annotated[ + Optional[List[StrictStr]], + Field(description="The name of simulations that will be prepared for future execution."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1163,7 +1001,7 @@ def save_math_model( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_math_model_serialize( body=body, @@ -1172,40 +1010,39 @@ def save_math_model( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def save_math_model_with_http_info( self, body: StrictStr, - new_name: Annotated[Optional[StrictStr], Field(description="Name to save new MathModel under. Leave blank if re-saving existing MathModel.")] = None, - sim_names: Annotated[Optional[List[StrictStr]], Field(description="The name of simulations that will be prepared for future execution.")] = None, + new_name: Annotated[ + Optional[StrictStr], + Field(description="Name to save new MathModel under. Leave blank if re-saving existing MathModel."), + ] = None, + sim_names: Annotated[ + Optional[List[StrictStr]], + Field(description="The name of simulations that will be prepared for future execution."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1241,7 +1078,7 @@ def save_math_model_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_math_model_serialize( body=body, @@ -1250,40 +1087,39 @@ def save_math_model_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def save_math_model_without_preload_content( self, body: StrictStr, - new_name: Annotated[Optional[StrictStr], Field(description="Name to save new MathModel under. Leave blank if re-saving existing MathModel.")] = None, - sim_names: Annotated[Optional[List[StrictStr]], Field(description="The name of simulations that will be prepared for future execution.")] = None, + new_name: Annotated[ + Optional[StrictStr], + Field(description="Name to save new MathModel under. Leave blank if re-saving existing MathModel."), + ] = None, + sim_names: Annotated[ + Optional[List[StrictStr]], + Field(description="The name of simulations that will be prepared for future execution."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1319,7 +1155,7 @@ def save_math_model_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_math_model_serialize( body=body, @@ -1328,23 +1164,19 @@ def save_math_model_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '401': "VCellHTTPError", - '403': None, - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "401": "VCellHTTPError", + "403": None, + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _save_math_model_serialize( self, body, @@ -1355,70 +1187,51 @@ def _save_math_model_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None _collection_formats: Dict[str, str] = { - 'simNames': 'multi', + "simNames": "multi", } _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if new_name is not None: - - _query_params.append(('newName', new_name)) - + _query_params.append(("newName", new_name)) + if sim_names is not None: - - _query_params.append(('simNames', sim_names)) - + _query_params.append(("simNames", sim_names)) + # process the header parameters # process the form parameters # process the body parameter if body is not None: _body_params = body - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/xml', - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/xml", "application/json"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/xml' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["application/xml"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/mathModel', + method="POST", + resource_path="/api/v1/mathModel", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1428,7 +1241,5 @@ def _save_math_model_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - diff --git a/pyvcell/_internal/api/vcell_client/api/publication_resource_api.py b/pyvcell/_internal/api/vcell_client/api/publication_resource_api.py index bf48998..fa6c01a 100644 --- a/pyvcell/_internal/api/vcell_client/api/publication_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/publication_resource_api.py @@ -1,16 +1,15 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import warnings from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt from typing import Any, Dict, List, Optional, Tuple, Union @@ -37,7 +36,6 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client - @validate_call def create_publication( self, @@ -45,10 +43,7 @@ def create_publication( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -80,33 +75,29 @@ def create_publication( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_publication_serialize( publication=publication, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "int", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "int", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def create_publication_with_http_info( self, @@ -114,10 +105,7 @@ def create_publication_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -149,33 +137,29 @@ def create_publication_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_publication_serialize( publication=publication, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "int", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "int", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def create_publication_without_preload_content( self, @@ -183,10 +167,7 @@ def create_publication_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -218,29 +199,25 @@ def create_publication_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._create_publication_serialize( publication=publication, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "int", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "int", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _create_publication_serialize( self, publication, @@ -249,19 +226,15 @@ def _create_publication_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -272,37 +245,24 @@ def _create_publication_serialize( if publication is not None: _body_params = publication - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/json' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["application/json"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/publications', + method="POST", + resource_path="/api/v1/publications", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -312,12 +272,9 @@ def _create_publication_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def delete_publication( self, @@ -325,10 +282,7 @@ def delete_publication( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -360,34 +314,26 @@ def delete_publication( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_publication_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def delete_publication_with_http_info( self, @@ -395,10 +341,7 @@ def delete_publication_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -430,34 +373,26 @@ def delete_publication_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_publication_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def delete_publication_without_preload_content( self, @@ -465,10 +400,7 @@ def delete_publication_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -500,30 +432,22 @@ def delete_publication_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_publication_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _delete_publication_serialize( self, id, @@ -532,47 +456,35 @@ def _delete_publication_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if id is not None: - _path_params['id'] = id + _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='DELETE', - resource_path='/api/v1/publications/{id}', + method="DELETE", + resource_path="/api/v1/publications/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -582,12 +494,9 @@ def _delete_publication_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_publication_by_id( self, @@ -595,10 +504,7 @@ def get_publication_by_id( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -630,31 +536,23 @@ def get_publication_by_id( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_publication_by_id_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Publication", - '500': "VCellHTTPError", + "200": "Publication", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_publication_by_id_with_http_info( self, @@ -662,10 +560,7 @@ def get_publication_by_id_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -697,31 +592,23 @@ def get_publication_by_id_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_publication_by_id_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Publication", - '500': "VCellHTTPError", + "200": "Publication", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_publication_by_id_without_preload_content( self, @@ -729,10 +616,7 @@ def get_publication_by_id_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -764,27 +648,19 @@ def get_publication_by_id_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_publication_by_id_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Publication", - '500': "VCellHTTPError", + "200": "Publication", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_publication_by_id_serialize( self, id, @@ -793,46 +669,35 @@ def _get_publication_by_id_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if id is not None: - _path_params['id'] = id + _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/publications/{id}', + method="GET", + resource_path="/api/v1/publications/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -842,22 +707,16 @@ def _get_publication_by_id_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_publications( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -887,40 +746,30 @@ def get_publications( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_publications_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[Publication]", - '500': "VCellHTTPError", + "200": "List[Publication]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_publications_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -950,40 +799,30 @@ def get_publications_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_publications_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[Publication]", - '500': "VCellHTTPError", + "200": "List[Publication]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_publications_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1013,26 +852,19 @@ def get_publications_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_publications_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[Publication]", - '500': "VCellHTTPError", + "200": "List[Publication]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_publications_serialize( self, _request_auth, @@ -1040,19 +872,15 @@ def _get_publications_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -1061,23 +889,16 @@ def _get_publications_serialize( # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/publications', + method="GET", + resource_path="/api/v1/publications", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1087,12 +908,9 @@ def _get_publications_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def update_publication( self, @@ -1100,10 +918,7 @@ def update_publication( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1135,33 +950,29 @@ def update_publication( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._update_publication_serialize( publication=publication, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Publication", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "Publication", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def update_publication_with_http_info( self, @@ -1169,10 +980,7 @@ def update_publication_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1204,33 +1012,29 @@ def update_publication_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._update_publication_serialize( publication=publication, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Publication", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "Publication", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def update_publication_without_preload_content( self, @@ -1238,10 +1042,7 @@ def update_publication_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1273,29 +1074,25 @@ def update_publication_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._update_publication_serialize( publication=publication, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Publication", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "Publication", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _update_publication_serialize( self, publication, @@ -1304,19 +1101,15 @@ def _update_publication_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -1327,37 +1120,24 @@ def _update_publication_serialize( if publication is not None: _body_params = publication - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/json' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["application/json"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='PUT', - resource_path='/api/v1/publications', + method="PUT", + resource_path="/api/v1/publications", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1367,7 +1147,5 @@ def _update_publication_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - diff --git a/pyvcell/_internal/api/vcell_client/api/simulation_resource_api.py b/pyvcell/_internal/api/vcell_client/api/simulation_resource_api.py index 02aa389..1a02874 100644 --- a/pyvcell/_internal/api/vcell_client/api/simulation_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/simulation_resource_api.py @@ -1,16 +1,15 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import warnings from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt from typing import Any, Dict, List, Optional, Tuple, Union @@ -18,7 +17,9 @@ from pydantic import StrictStr from typing import List, Optional -from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import SimulationStatusPersistentRecord +from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import ( + SimulationStatusPersistentRecord, +) from pyvcell._internal.api.vcell_client.models.status_message import StatusMessage from pyvcell._internal.api.vcell_client.api_client import ApiClient, RequestSerialized @@ -38,7 +39,6 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client - @validate_call def get_simulation_status( self, @@ -48,10 +48,7 @@ def get_simulation_status( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -87,7 +84,7 @@ def get_simulation_status( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_simulation_status_serialize( sim_id=sim_id, @@ -96,26 +93,22 @@ def get_simulation_status( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "SimulationStatusPersistentRecord", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "SimulationStatusPersistentRecord", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_simulation_status_with_http_info( self, @@ -125,10 +118,7 @@ def get_simulation_status_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -164,7 +154,7 @@ def get_simulation_status_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_simulation_status_serialize( sim_id=sim_id, @@ -173,26 +163,22 @@ def get_simulation_status_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "SimulationStatusPersistentRecord", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "SimulationStatusPersistentRecord", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_simulation_status_without_preload_content( self, @@ -202,10 +188,7 @@ def get_simulation_status_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -241,7 +224,7 @@ def get_simulation_status_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_simulation_status_serialize( sim_id=sim_id, @@ -250,22 +233,18 @@ def get_simulation_status_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "SimulationStatusPersistentRecord", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "SimulationStatusPersistentRecord", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_simulation_status_serialize( self, sim_id, @@ -276,55 +255,41 @@ def _get_simulation_status_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if sim_id is not None: - _path_params['simID'] = sim_id + _path_params["simID"] = sim_id # process the query parameters if bio_model_id is not None: - - _query_params.append(('bioModelID', bio_model_id)) - + _query_params.append(("bioModelID", bio_model_id)) + if math_model_id is not None: - - _query_params.append(('mathModelID', math_model_id)) - + _query_params.append(("mathModelID", math_model_id)) + # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/Simulation/{simID}/simulationStatus', + method="GET", + resource_path="/api/v1/Simulation/{simID}/simulationStatus", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -334,12 +299,9 @@ def _get_simulation_status_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def start_simulation( self, @@ -347,10 +309,7 @@ def start_simulation( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -382,33 +341,29 @@ def start_simulation( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._start_simulation_serialize( sim_id=sim_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[StatusMessage]", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "List[StatusMessage]", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def start_simulation_with_http_info( self, @@ -416,10 +371,7 @@ def start_simulation_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -451,33 +403,29 @@ def start_simulation_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._start_simulation_serialize( sim_id=sim_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[StatusMessage]", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "List[StatusMessage]", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def start_simulation_without_preload_content( self, @@ -485,10 +433,7 @@ def start_simulation_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -520,29 +465,25 @@ def start_simulation_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._start_simulation_serialize( sim_id=sim_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[StatusMessage]", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "List[StatusMessage]", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _start_simulation_serialize( self, sim_id, @@ -551,47 +492,35 @@ def _start_simulation_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if sim_id is not None: - _path_params['simID'] = sim_id + _path_params["simID"] = sim_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/Simulation/{simID}/startSimulation', + method="POST", + resource_path="/api/v1/Simulation/{simID}/startSimulation", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -601,12 +530,9 @@ def _start_simulation_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def stop_simulation( self, @@ -614,10 +540,7 @@ def stop_simulation( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -649,33 +572,29 @@ def stop_simulation( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._stop_simulation_serialize( sim_id=sim_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[StatusMessage]", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "List[StatusMessage]", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def stop_simulation_with_http_info( self, @@ -683,10 +602,7 @@ def stop_simulation_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -718,33 +634,29 @@ def stop_simulation_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._stop_simulation_serialize( sim_id=sim_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[StatusMessage]", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "List[StatusMessage]", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def stop_simulation_without_preload_content( self, @@ -752,10 +664,7 @@ def stop_simulation_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -787,29 +696,25 @@ def stop_simulation_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._stop_simulation_serialize( sim_id=sim_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[StatusMessage]", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "List[StatusMessage]", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _stop_simulation_serialize( self, sim_id, @@ -818,47 +723,35 @@ def _stop_simulation_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if sim_id is not None: - _path_params['simID'] = sim_id + _path_params["simID"] = sim_id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/Simulation/{simID}/stopSimulation', + method="POST", + resource_path="/api/v1/Simulation/{simID}/stopSimulation", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -868,7 +761,5 @@ def _stop_simulation_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - diff --git a/pyvcell/_internal/api/vcell_client/api/solver_resource_api.py b/pyvcell/_internal/api/vcell_client/api/solver_resource_api.py index 6cad496..e8974c9 100644 --- a/pyvcell/_internal/api/vcell_client/api/solver_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/solver_resource_api.py @@ -1,16 +1,15 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import warnings from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt from typing import Any, Dict, List, Optional, Tuple, Union @@ -36,7 +35,6 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client - @validate_call def get_fv_solver_input_from_sbml( self, @@ -46,10 +44,7 @@ def get_fv_solver_input_from_sbml( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -85,7 +80,7 @@ def get_fv_solver_input_from_sbml( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_fv_solver_input_from_sbml_serialize( sbml_file=sbml_file, @@ -94,24 +89,20 @@ def get_fv_solver_input_from_sbml( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bytearray", - '422': "VCellHTTPError", + "200": "bytearray", + "422": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_fv_solver_input_from_sbml_with_http_info( self, @@ -121,10 +112,7 @@ def get_fv_solver_input_from_sbml_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -160,7 +148,7 @@ def get_fv_solver_input_from_sbml_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_fv_solver_input_from_sbml_serialize( sbml_file=sbml_file, @@ -169,24 +157,20 @@ def get_fv_solver_input_from_sbml_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bytearray", - '422': "VCellHTTPError", + "200": "bytearray", + "422": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_fv_solver_input_from_sbml_without_preload_content( self, @@ -196,10 +180,7 @@ def get_fv_solver_input_from_sbml_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -235,7 +216,7 @@ def get_fv_solver_input_from_sbml_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_fv_solver_input_from_sbml_serialize( sbml_file=sbml_file, @@ -244,20 +225,16 @@ def get_fv_solver_input_from_sbml_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bytearray", - '422': "VCellHTTPError", + "200": "bytearray", + "422": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_fv_solver_input_from_sbml_serialize( self, sbml_file, @@ -268,19 +245,15 @@ def _get_fv_solver_input_from_sbml_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -288,44 +261,34 @@ def _get_fv_solver_input_from_sbml_serialize( # process the header parameters # process the form parameters if sbml_file is not None: - _files['sbmlFile'] = sbml_file + _files["sbmlFile"] = sbml_file if duration is not None: - _form_params.append(('duration', duration)) + _form_params.append(("duration", duration)) if output_time_step is not None: - _form_params.append(('output_time_step', output_time_step)) + _form_params.append(("output_time_step", output_time_step)) # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/octet-stream', - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept([ + "application/octet-stream", + "application/json", + ]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'multipart/form-data' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/solver/getFVSolverInput', + method="POST", + resource_path="/api/v1/solver/getFVSolverInput", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -335,12 +298,9 @@ def _get_fv_solver_input_from_sbml_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_fv_solver_input_from_vcml( self, @@ -349,10 +309,7 @@ def get_fv_solver_input_from_vcml( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -386,7 +343,7 @@ def get_fv_solver_input_from_vcml( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_fv_solver_input_from_vcml_serialize( vcml_file=vcml_file, @@ -394,24 +351,20 @@ def get_fv_solver_input_from_vcml( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bytearray", - '422': "VCellHTTPError", + "200": "bytearray", + "422": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_fv_solver_input_from_vcml_with_http_info( self, @@ -420,10 +373,7 @@ def get_fv_solver_input_from_vcml_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -457,7 +407,7 @@ def get_fv_solver_input_from_vcml_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_fv_solver_input_from_vcml_serialize( vcml_file=vcml_file, @@ -465,24 +415,20 @@ def get_fv_solver_input_from_vcml_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bytearray", - '422': "VCellHTTPError", + "200": "bytearray", + "422": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_fv_solver_input_from_vcml_without_preload_content( self, @@ -491,10 +437,7 @@ def get_fv_solver_input_from_vcml_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -528,7 +471,7 @@ def get_fv_solver_input_from_vcml_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_fv_solver_input_from_vcml_serialize( vcml_file=vcml_file, @@ -536,20 +479,16 @@ def get_fv_solver_input_from_vcml_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bytearray", - '422': "VCellHTTPError", + "200": "bytearray", + "422": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_fv_solver_input_from_vcml_serialize( self, vcml_file, @@ -559,19 +498,15 @@ def _get_fv_solver_input_from_vcml_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -579,42 +514,32 @@ def _get_fv_solver_input_from_vcml_serialize( # process the header parameters # process the form parameters if vcml_file is not None: - _files['vcmlFile'] = vcml_file + _files["vcmlFile"] = vcml_file if simulation_name is not None: - _form_params.append(('simulation_name', simulation_name)) + _form_params.append(("simulation_name", simulation_name)) # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/octet-stream', - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept([ + "application/octet-stream", + "application/json", + ]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'multipart/form-data' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["multipart/form-data"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/solver/getFVSolverInputFromVCML', + method="POST", + resource_path="/api/v1/solver/getFVSolverInputFromVCML", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -624,7 +549,5 @@ def _get_fv_solver_input_from_vcml_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - diff --git a/pyvcell/_internal/api/vcell_client/api/users_resource_api.py b/pyvcell/_internal/api/vcell_client/api/users_resource_api.py index d8564f5..6532be3 100644 --- a/pyvcell/_internal/api/vcell_client/api/users_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/users_resource_api.py @@ -1,16 +1,15 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import warnings from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt from typing import Any, Dict, List, Optional, Tuple, Union @@ -41,7 +40,6 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client - @validate_call def forgot_legacy_password( self, @@ -49,10 +47,7 @@ def forgot_legacy_password( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -84,33 +79,29 @@ def forgot_legacy_password( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._forgot_legacy_password_serialize( user_id=user_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': None, - '401': None, - '403': None, - '500': None, + "200": None, + "401": None, + "403": None, + "500": None, } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def forgot_legacy_password_with_http_info( self, @@ -118,10 +109,7 @@ def forgot_legacy_password_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -153,33 +141,29 @@ def forgot_legacy_password_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._forgot_legacy_password_serialize( user_id=user_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': None, - '401': None, - '403': None, - '500': None, + "200": None, + "401": None, + "403": None, + "500": None, } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def forgot_legacy_password_without_preload_content( self, @@ -187,10 +171,7 @@ def forgot_legacy_password_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -222,29 +203,25 @@ def forgot_legacy_password_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._forgot_legacy_password_serialize( user_id=user_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': None, - '401': None, - '403': None, - '500': None, + "200": None, + "401": None, + "403": None, + "500": None, } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _forgot_legacy_password_serialize( self, user_id, @@ -253,42 +230,32 @@ def _forgot_legacy_password_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if user_id is not None: - - _query_params.append(('userID', user_id)) - + _query_params.append(("userID", user_id)) + # process the header parameters # process the form parameters # process the body parameter - - - # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/users/forgotLegacyPassword', + method="POST", + resource_path="/api/v1/users/forgotLegacyPassword", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -298,22 +265,16 @@ def _forgot_legacy_password_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_guest_legacy_api_token( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -343,40 +304,30 @@ def get_guest_legacy_api_token( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_guest_legacy_api_token_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "AccesTokenRepresentationRecord", - '500': "VCellHTTPError", + "200": "AccesTokenRepresentationRecord", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_guest_legacy_api_token_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -406,40 +357,30 @@ def get_guest_legacy_api_token_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_guest_legacy_api_token_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "AccesTokenRepresentationRecord", - '500': "VCellHTTPError", + "200": "AccesTokenRepresentationRecord", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_guest_legacy_api_token_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -469,26 +410,19 @@ def get_guest_legacy_api_token_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_guest_legacy_api_token_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "AccesTokenRepresentationRecord", - '500': "VCellHTTPError", + "200": "AccesTokenRepresentationRecord", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_guest_legacy_api_token_serialize( self, _request_auth, @@ -496,19 +430,15 @@ def _get_guest_legacy_api_token_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -517,23 +447,16 @@ def _get_guest_legacy_api_token_serialize( # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/users/guestBearerToken', + method="POST", + resource_path="/api/v1/users/guestBearerToken", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -543,22 +466,16 @@ def _get_guest_legacy_api_token_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_legacy_api_token( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -588,42 +505,32 @@ def get_legacy_api_token( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_legacy_api_token_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "AccesTokenRepresentationRecord", - '401': "VCellHTTPError", - '403': None, - '500': "VCellHTTPError", + "200": "AccesTokenRepresentationRecord", + "401": "VCellHTTPError", + "403": None, + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_legacy_api_token_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -653,42 +560,32 @@ def get_legacy_api_token_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_legacy_api_token_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "AccesTokenRepresentationRecord", - '401': "VCellHTTPError", - '403': None, - '500': "VCellHTTPError", + "200": "AccesTokenRepresentationRecord", + "401": "VCellHTTPError", + "403": None, + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_legacy_api_token_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -718,28 +615,21 @@ def get_legacy_api_token_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_legacy_api_token_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "AccesTokenRepresentationRecord", - '401': "VCellHTTPError", - '403': None, - '500': "VCellHTTPError", + "200": "AccesTokenRepresentationRecord", + "401": "VCellHTTPError", + "403": None, + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_legacy_api_token_serialize( self, _request_auth, @@ -747,19 +637,15 @@ def _get_legacy_api_token_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -768,24 +654,16 @@ def _get_legacy_api_token_serialize( # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/users/bearerToken', + method="POST", + resource_path="/api/v1/users/bearerToken", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -795,22 +673,16 @@ def _get_legacy_api_token_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_mapped_user( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -840,43 +712,33 @@ def get_mapped_user( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_mapped_user_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "UserIdentityJSONSafe", - '401': "VCellHTTPError", - '403': None, - '409': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "UserIdentityJSONSafe", + "401": "VCellHTTPError", + "403": None, + "409": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_mapped_user_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -906,43 +768,33 @@ def get_mapped_user_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_mapped_user_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "UserIdentityJSONSafe", - '401': "VCellHTTPError", - '403': None, - '409': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "UserIdentityJSONSafe", + "401": "VCellHTTPError", + "403": None, + "409": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_mapped_user_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -972,29 +824,22 @@ def get_mapped_user_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_mapped_user_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "UserIdentityJSONSafe", - '401': "VCellHTTPError", - '403': None, - '409': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "UserIdentityJSONSafe", + "401": "VCellHTTPError", + "403": None, + "409": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_mapped_user_serialize( self, _request_auth, @@ -1002,19 +847,15 @@ def _get_mapped_user_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -1023,24 +864,16 @@ def _get_mapped_user_serialize( # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/users/mappedUser', + method="GET", + resource_path="/api/v1/users/mappedUser", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1050,22 +883,16 @@ def _get_mapped_user_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_me( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1095,39 +922,29 @@ def get_me( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_me_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Identity", + "200": "Identity", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_me_with_http_info( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1157,39 +974,29 @@ def get_me_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_me_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Identity", + "200": "Identity", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_me_without_preload_content( self, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1219,25 +1026,18 @@ def get_me_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_me_serialize( - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Identity", + "200": "Identity", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_me_serialize( self, _request_auth, @@ -1245,19 +1045,15 @@ def _get_me_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -1266,23 +1062,16 @@ def _get_me_serialize( # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/users/me', + method="GET", + resource_path="/api/v1/users/me", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1292,12 +1081,9 @@ def _get_me_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def map_new_user( self, @@ -1305,10 +1091,7 @@ def map_new_user( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1340,34 +1123,30 @@ def map_new_user( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._map_new_user_serialize( user_registration_info=user_registration_info, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': None, - '401': "VCellHTTPError", - '403': None, - '409': None, - '500': "VCellHTTPError", + "200": None, + "401": "VCellHTTPError", + "403": None, + "409": None, + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def map_new_user_with_http_info( self, @@ -1375,10 +1154,7 @@ def map_new_user_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1410,34 +1186,30 @@ def map_new_user_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._map_new_user_serialize( user_registration_info=user_registration_info, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': None, - '401': "VCellHTTPError", - '403': None, - '409': None, - '500': "VCellHTTPError", + "200": None, + "401": "VCellHTTPError", + "403": None, + "409": None, + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def map_new_user_without_preload_content( self, @@ -1445,10 +1217,7 @@ def map_new_user_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1480,30 +1249,26 @@ def map_new_user_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._map_new_user_serialize( user_registration_info=user_registration_info, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': None, - '401': "VCellHTTPError", - '403': None, - '409': None, - '500': "VCellHTTPError", + "200": None, + "401": "VCellHTTPError", + "403": None, + "409": None, + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _map_new_user_serialize( self, user_registration_info, @@ -1512,19 +1277,15 @@ def _map_new_user_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -1535,37 +1296,24 @@ def _map_new_user_serialize( if user_registration_info is not None: _body_params = user_registration_info - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/json' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["application/json"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/users/newUser', + method="POST", + resource_path="/api/v1/users/newUser", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1575,12 +1323,9 @@ def _map_new_user_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def map_user( self, @@ -1588,10 +1333,7 @@ def map_user( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1623,33 +1365,29 @@ def map_user( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._map_user_serialize( user_login_info_for_mapping=user_login_info_for_mapping, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bool", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "bool", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def map_user_with_http_info( self, @@ -1657,10 +1395,7 @@ def map_user_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1692,33 +1427,29 @@ def map_user_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._map_user_serialize( user_login_info_for_mapping=user_login_info_for_mapping, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bool", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "bool", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def map_user_without_preload_content( self, @@ -1726,10 +1457,7 @@ def map_user_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1761,29 +1489,25 @@ def map_user_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._map_user_serialize( user_login_info_for_mapping=user_login_info_for_mapping, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bool", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "bool", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _map_user_serialize( self, user_login_info_for_mapping, @@ -1792,19 +1516,15 @@ def _map_user_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters @@ -1815,37 +1535,24 @@ def _map_user_serialize( if user_login_info_for_mapping is not None: _body_params = user_login_info_for_mapping - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/json' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["application/json"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/users/mapUser', + method="POST", + resource_path="/api/v1/users/mapUser", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1855,12 +1562,9 @@ def _map_user_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def process_magic_link( self, @@ -1868,10 +1572,7 @@ def process_magic_link( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1903,33 +1604,29 @@ def process_magic_link( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._process_magic_link_serialize( magic=magic, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': None, - '400': None, - '401': "VCellHTTPError", - '500': "VCellHTTPError", + "200": None, + "400": None, + "401": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def process_magic_link_with_http_info( self, @@ -1937,10 +1634,7 @@ def process_magic_link_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1972,33 +1666,29 @@ def process_magic_link_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._process_magic_link_serialize( magic=magic, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': None, - '400': None, - '401': "VCellHTTPError", - '500': "VCellHTTPError", + "200": None, + "400": None, + "401": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def process_magic_link_without_preload_content( self, @@ -2006,10 +1696,7 @@ def process_magic_link_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2041,29 +1728,25 @@ def process_magic_link_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._process_magic_link_serialize( magic=magic, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': None, - '400': None, - '401': "VCellHTTPError", - '500': "VCellHTTPError", + "200": None, + "400": None, + "401": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _process_magic_link_serialize( self, magic, @@ -2072,48 +1755,36 @@ def _process_magic_link_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if magic is not None: - - _query_params.append(('magic', magic)) - + _query_params.append(("magic", magic)) + # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/users/processMagicLink', + method="GET", + resource_path="/api/v1/users/processMagicLink", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2123,12 +1794,9 @@ def _process_magic_link_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def request_recovery_email( self, @@ -2137,10 +1805,7 @@ def request_recovery_email( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2174,7 +1839,7 @@ def request_recovery_email( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._request_recovery_email_serialize( email=email, @@ -2182,28 +1847,24 @@ def request_recovery_email( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': None, - '400': None, - '401': "VCellHTTPError", - '403': None, - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": None, + "400": None, + "401": "VCellHTTPError", + "403": None, + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def request_recovery_email_with_http_info( self, @@ -2212,10 +1873,7 @@ def request_recovery_email_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2249,7 +1907,7 @@ def request_recovery_email_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._request_recovery_email_serialize( email=email, @@ -2257,28 +1915,24 @@ def request_recovery_email_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': None, - '400': None, - '401': "VCellHTTPError", - '403': None, - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": None, + "400": None, + "401": "VCellHTTPError", + "403": None, + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def request_recovery_email_without_preload_content( self, @@ -2287,10 +1941,7 @@ def request_recovery_email_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2324,7 +1975,7 @@ def request_recovery_email_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._request_recovery_email_serialize( email=email, @@ -2332,24 +1983,20 @@ def request_recovery_email_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': None, - '400': None, - '401': "VCellHTTPError", - '403': None, - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": None, + "400": None, + "401": "VCellHTTPError", + "403": None, + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _request_recovery_email_serialize( self, email, @@ -2359,53 +2006,39 @@ def _request_recovery_email_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if email is not None: - - _query_params.append(('email', email)) - + _query_params.append(("email", email)) + if user_id is not None: - - _query_params.append(('userID', user_id)) - + _query_params.append(("userID", user_id)) + # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/users/requestRecoveryEmail', + method="POST", + resource_path="/api/v1/users/requestRecoveryEmail", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2415,12 +2048,9 @@ def _request_recovery_email_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def unmap_user( self, @@ -2428,10 +2058,7 @@ def unmap_user( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2463,33 +2090,29 @@ def unmap_user( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._unmap_user_serialize( user_name=user_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bool", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "bool", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def unmap_user_with_http_info( self, @@ -2497,10 +2120,7 @@ def unmap_user_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2532,33 +2152,29 @@ def unmap_user_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._unmap_user_serialize( user_name=user_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bool", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "bool", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def unmap_user_without_preload_content( self, @@ -2566,10 +2182,7 @@ def unmap_user_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -2601,29 +2214,25 @@ def unmap_user_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._unmap_user_serialize( user_name=user_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "bool", - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "bool", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _unmap_user_serialize( self, user_name, @@ -2632,47 +2241,35 @@ def _unmap_user_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if user_name is not None: - _path_params['userName'] = user_name + _path_params["userName"] = user_name # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - 'openId' - ] + _auth_settings: List[str] = ["openId"] return self.api_client.param_serialize( - method='PUT', - resource_path='/api/v1/users/unmapUser/{userName}', + method="PUT", + resource_path="/api/v1/users/unmapUser/{userName}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2682,7 +2279,5 @@ def _unmap_user_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - diff --git a/pyvcell/_internal/api/vcell_client/api/vc_image_resource_api.py b/pyvcell/_internal/api/vcell_client/api/vc_image_resource_api.py index 0fef2ac..7e2f568 100644 --- a/pyvcell/_internal/api/vcell_client/api/vc_image_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/vc_image_resource_api.py @@ -1,16 +1,15 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import warnings from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt from typing import Any, Dict, List, Optional, Tuple, Union @@ -38,7 +37,6 @@ def __init__(self, api_client=None) -> None: api_client = ApiClient.get_default() self.api_client = api_client - @validate_call def delete_image_vcml( self, @@ -46,10 +44,7 @@ def delete_image_vcml( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -82,34 +77,26 @@ def delete_image_vcml( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_image_vcml_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def delete_image_vcml_with_http_info( self, @@ -117,10 +104,7 @@ def delete_image_vcml_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -153,34 +137,26 @@ def delete_image_vcml_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_image_vcml_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def delete_image_vcml_without_preload_content( self, @@ -188,10 +164,7 @@ def delete_image_vcml_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -224,30 +197,22 @@ def delete_image_vcml_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._delete_image_vcml_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '401': "VCellHTTPError", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "204": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _delete_image_vcml_serialize( self, id, @@ -256,46 +221,35 @@ def _delete_image_vcml_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if id is not None: - _path_params['id'] = id + _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='DELETE', - resource_path='/api/v1/image/{id}', + method="DELETE", + resource_path="/api/v1/image/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -305,23 +259,22 @@ def _delete_image_vcml_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_image_summaries( self, - include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include Image summaries that are public and shared with the requester. Default is true.")] = None, + include_public_and_shared: Annotated[ + Optional[StrictBool], + Field( + description="Include Image summaries that are public and shared with the requester. Default is true." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -354,42 +307,40 @@ def get_image_summaries( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_image_summaries_serialize( include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[VCImageSummary]", - '500': "VCellHTTPError", + "200": "List[VCImageSummary]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_image_summaries_with_http_info( self, - include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include Image summaries that are public and shared with the requester. Default is true.")] = None, + include_public_and_shared: Annotated[ + Optional[StrictBool], + Field( + description="Include Image summaries that are public and shared with the requester. Default is true." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -422,42 +373,40 @@ def get_image_summaries_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_image_summaries_serialize( include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[VCImageSummary]", - '500': "VCellHTTPError", + "200": "List[VCImageSummary]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_image_summaries_without_preload_content( self, - include_public_and_shared: Annotated[Optional[StrictBool], Field(description="Include Image summaries that are public and shared with the requester. Default is true.")] = None, + include_public_and_shared: Annotated[ + Optional[StrictBool], + Field( + description="Include Image summaries that are public and shared with the requester. Default is true." + ), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -490,27 +439,23 @@ def get_image_summaries_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_image_summaries_serialize( include_public_and_shared=include_public_and_shared, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[VCImageSummary]", - '500': "VCellHTTPError", + "200": "List[VCImageSummary]", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_image_summaries_serialize( self, include_public_and_shared, @@ -519,48 +464,36 @@ def _get_image_summaries_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if include_public_and_shared is not None: - - _query_params.append(('includePublicAndShared', include_public_and_shared)) - + _query_params.append(("includePublicAndShared", include_public_and_shared)) + # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/image/summaries', + method="GET", + resource_path="/api/v1/image/summaries", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -570,12 +503,9 @@ def _get_image_summaries_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_image_summary( self, @@ -583,10 +513,7 @@ def get_image_summary( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -619,33 +546,25 @@ def get_image_summary( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_image_summary_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "VCImageSummary", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "VCImageSummary", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_image_summary_with_http_info( self, @@ -653,10 +572,7 @@ def get_image_summary_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -689,33 +605,25 @@ def get_image_summary_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_image_summary_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "VCImageSummary", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "VCImageSummary", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_image_summary_without_preload_content( self, @@ -723,10 +631,7 @@ def get_image_summary_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -759,29 +664,21 @@ def get_image_summary_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_image_summary_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "VCImageSummary", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "VCImageSummary", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_image_summary_serialize( self, id, @@ -790,46 +687,35 @@ def _get_image_summary_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if id is not None: - _path_params['id'] = id + _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/image/summary/{id}', + method="GET", + resource_path="/api/v1/image/summary/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -839,12 +725,9 @@ def _get_image_summary_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def get_image_vcml( self, @@ -852,10 +735,7 @@ def get_image_vcml( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -888,34 +768,26 @@ def get_image_vcml( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_image_vcml_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def get_image_vcml_with_http_info( self, @@ -923,10 +795,7 @@ def get_image_vcml_with_http_info( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -959,34 +828,26 @@ def get_image_vcml_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_image_vcml_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def get_image_vcml_without_preload_content( self, @@ -994,10 +855,7 @@ def get_image_vcml_without_preload_content( _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1030,30 +888,22 @@ def get_image_vcml_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._get_image_vcml_serialize( - id=id, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, _host_index=_host_index ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '403': "VCellHTTPError", - '404': "VCellHTTPError", - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _get_image_vcml_serialize( self, id, @@ -1062,47 +912,35 @@ def _get_image_vcml_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters if id is not None: - _path_params['id'] = id + _path_params["id"] = id # process the query parameters # process the header parameters # process the form parameters # process the body parameter - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'text/plain', - 'application/json' - ] - ) - + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["text/plain", "application/json"]) # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='GET', - resource_path='/api/v1/image/{id}', + method="GET", + resource_path="/api/v1/image/{id}", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1112,24 +950,21 @@ def _get_image_vcml_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - - @validate_call def save_image_vcml( self, body: StrictStr, - name: Annotated[Optional[StrictStr], Field(description="Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML.")] = None, + name: Annotated[ + Optional[StrictStr], + Field(description="Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1164,7 +999,7 @@ def save_image_vcml( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_image_vcml_serialize( body=body, @@ -1172,38 +1007,34 @@ def save_image_vcml( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '401': "VCellHTTPError", - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "401": "VCellHTTPError", + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ).data - @validate_call def save_image_vcml_with_http_info( self, body: StrictStr, - name: Annotated[Optional[StrictStr], Field(description="Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML.")] = None, + name: Annotated[ + Optional[StrictStr], + Field(description="Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1238,7 +1069,7 @@ def save_image_vcml_with_http_info( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_image_vcml_serialize( body=body, @@ -1246,38 +1077,34 @@ def save_image_vcml_with_http_info( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '401': "VCellHTTPError", - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "401": "VCellHTTPError", + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() return self.api_client.response_deserialize( response_data=response_data, response_types_map=_response_types_map, ) - @validate_call def save_image_vcml_without_preload_content( self, body: StrictStr, - name: Annotated[Optional[StrictStr], Field(description="Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML.")] = None, + name: Annotated[ + Optional[StrictStr], + Field(description="Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML."), + ] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] + Tuple[Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]], ] = None, _request_auth: Optional[Dict[StrictStr, Any]] = None, _content_type: Optional[StrictStr] = None, @@ -1312,7 +1139,7 @@ def save_image_vcml_without_preload_content( in the spec for a single request. :type _host_index: int, optional :return: Returns the result object. - """ # noqa: E501 + """ # noqa: E501 _param = self._save_image_vcml_serialize( body=body, @@ -1320,22 +1147,18 @@ def save_image_vcml_without_preload_content( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, - _host_index=_host_index + _host_index=_host_index, ) _response_types_map: Dict[str, Optional[str]] = { - '200': "str", - '401': "VCellHTTPError", - '422': "VCellHTTPError", - '500': "VCellHTTPError", + "200": "str", + "401": "VCellHTTPError", + "422": "VCellHTTPError", + "500": "VCellHTTPError", } - response_data = self.api_client.call_api( - *_param, - _request_timeout=_request_timeout - ) + response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response - def _save_image_vcml_serialize( self, body, @@ -1345,64 +1168,46 @@ def _save_image_vcml_serialize( _headers, _host_index, ) -> RequestSerialized: - _host = None - _collection_formats: Dict[str, str] = { - } + _collection_formats: Dict[str, str] = {} _path_params: Dict[str, str] = {} _query_params: List[Tuple[str, str]] = [] _header_params: Dict[str, Optional[str]] = _headers or {} _form_params: List[Tuple[str, str]] = [] - _files: Dict[ - str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]] - ] = {} + _files: Dict[str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]] = {} _body_params: Optional[bytes] = None # process the path parameters # process the query parameters if name is not None: - - _query_params.append(('name', name)) - + _query_params.append(("name", name)) + # process the header parameters # process the form parameters # process the body parameter if body is not None: _body_params = body - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'text/plain', - 'application/json' - ] - ) + if "Accept" not in _header_params: + _header_params["Accept"] = self.api_client.select_header_accept(["text/plain", "application/json"]) # set the HTTP header `Content-Type` if _content_type: - _header_params['Content-Type'] = _content_type + _header_params["Content-Type"] = _content_type else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/json' - ] - ) - ) + _default_content_type = self.api_client.select_header_content_type(["application/json"]) if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type + _header_params["Content-Type"] = _default_content_type # authentication setting - _auth_settings: List[str] = [ - ] + _auth_settings: List[str] = [] return self.api_client.param_serialize( - method='POST', - resource_path='/api/v1/image', + method="POST", + resource_path="/api/v1/image", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1412,7 +1217,5 @@ def _save_image_vcml_serialize( auth_settings=_auth_settings, collection_formats=_collection_formats, _host=_host, - _request_auth=_request_auth + _request_auth=_request_auth, ) - - diff --git a/pyvcell/_internal/api/vcell_client/api_client.py b/pyvcell/_internal/api/vcell_client/api_client.py index a9c1df2..d39e2b3 100644 --- a/pyvcell/_internal/api/vcell_client/api_client.py +++ b/pyvcell/_internal/api/vcell_client/api_client.py @@ -1,17 +1,15 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - - import datetime from dateutil.parser import parse from enum import Enum @@ -38,11 +36,12 @@ UnauthorizedException, ForbiddenException, NotFoundException, - ServiceException + ServiceException, ) RequestSerialized = Tuple[str, str, Dict[str, str], Optional[str], List[str]] + class ApiClient: """Generic API client for OpenAPI client library builds. @@ -61,25 +60,19 @@ class ApiClient: PRIMITIVE_TYPES = (float, bool, bytes, str, int) NATIVE_TYPES_MAPPING = { - 'int': int, - 'long': int, # TODO remove as only py3 is supported? - 'float': float, - 'str': str, - 'bool': bool, - 'date': datetime.date, - 'datetime': datetime.datetime, - 'decimal': decimal.Decimal, - 'object': object, + "int": int, + "long": int, # TODO remove as only py3 is supported? + "float": float, + "str": str, + "bool": bool, + "date": datetime.date, + "datetime": datetime.datetime, + "decimal": decimal.Decimal, + "object": object, } _pool = None - def __init__( - self, - configuration=None, - header_name=None, - header_value=None, - cookie=None - ) -> None: + def __init__(self, configuration=None, header_name=None, header_value=None, cookie=None) -> None: # use default configuration if none is provided if configuration is None: configuration = Configuration.get_default() @@ -91,7 +84,7 @@ def __init__( self.default_headers[header_name] = header_value self.cookie = cookie # Set default User-Agent. - self.user_agent = 'OpenAPI-Generator/1.0.0/python' + self.user_agent = "OpenAPI-Generator/1.0.0/python" self.client_side_validation = configuration.client_side_validation def __enter__(self): @@ -103,16 +96,15 @@ def __exit__(self, exc_type, exc_value, traceback): @property def user_agent(self): """User agent for this API client""" - return self.default_headers['User-Agent'] + return self.default_headers["User-Agent"] @user_agent.setter def user_agent(self, value): - self.default_headers['User-Agent'] = value + self.default_headers["User-Agent"] = value def set_default_header(self, header_name, header_value): self.default_headers[header_name] = header_value - _default = None @classmethod @@ -148,12 +140,12 @@ def param_serialize( header_params=None, body=None, post_params=None, - files=None, auth_settings=None, + files=None, + auth_settings=None, collection_formats=None, _host=None, - _request_auth=None + _request_auth=None, ) -> RequestSerialized: - """Builds the HTTP request params needed by the request. :param method: Method to call. :param resource_path: Path to method endpoint. @@ -182,47 +174,30 @@ def param_serialize( header_params = header_params or {} header_params.update(self.default_headers) if self.cookie: - header_params['Cookie'] = self.cookie + header_params["Cookie"] = self.cookie if header_params: header_params = self.sanitize_for_serialization(header_params) - header_params = dict( - self.parameters_to_tuples(header_params,collection_formats) - ) + header_params = dict(self.parameters_to_tuples(header_params, collection_formats)) # path parameters if path_params: path_params = self.sanitize_for_serialization(path_params) - path_params = self.parameters_to_tuples( - path_params, - collection_formats - ) + path_params = self.parameters_to_tuples(path_params, collection_formats) for k, v in path_params: # specified safe chars, encode everything - resource_path = resource_path.replace( - '{%s}' % k, - quote(str(v), safe=config.safe_chars_for_path_param) - ) + resource_path = resource_path.replace("{%s}" % k, quote(str(v), safe=config.safe_chars_for_path_param)) # post parameters if post_params or files: post_params = post_params if post_params else [] post_params = self.sanitize_for_serialization(post_params) - post_params = self.parameters_to_tuples( - post_params, - collection_formats - ) + post_params = self.parameters_to_tuples(post_params, collection_formats) if files: post_params.extend(self.files_parameters(files)) # auth setting self.update_params_for_auth( - header_params, - query_params, - auth_settings, - resource_path, - method, - body, - request_auth=_request_auth + header_params, query_params, auth_settings, resource_path, method, body, request_auth=_request_auth ) # body @@ -239,23 +214,13 @@ def param_serialize( # query parameters if query_params: query_params = self.sanitize_for_serialization(query_params) - url_query = self.parameters_to_url_query( - query_params, - collection_formats - ) + url_query = self.parameters_to_url_query(query_params, collection_formats) url += "?" + url_query return method, url, header_params, body, post_params - def call_api( - self, - method, - url, - header_params=None, - body=None, - post_params=None, - _request_timeout=None + self, method, url, header_params=None, body=None, post_params=None, _request_timeout=None ) -> rest.RESTResponse: """Makes the HTTP request (synchronous) :param method: Method to call. @@ -272,10 +237,12 @@ def call_api( try: # perform request and return response response_data = self.rest_client.request( - method, url, + method, + url, headers=header_params, - body=body, post_params=post_params, - _request_timeout=_request_timeout + body=body, + post_params=post_params, + _request_timeout=_request_timeout, ) except ApiException as e: @@ -284,9 +251,7 @@ def call_api( return response_data def response_deserialize( - self, - response_data: rest.RESTResponse, - response_types_map: Optional[Dict[str, ApiResponseT]]=None + self, response_data: rest.RESTResponse, response_types_map: Optional[Dict[str, ApiResponseT]] = None ) -> ApiResponse[ApiResponseT]: """Deserializes response into an object. :param response_data: RESTResponse object to be deserialized. @@ -312,7 +277,7 @@ def response_deserialize( return_data = self.__deserialize_file(response_data) elif response_type is not None: match = None - content_type = response_data.headers.get('content-type') + content_type = response_data.headers.get("content-type") if content_type is not None: match = re.search(r"charset=([a-zA-Z\-\d]+)[\s;]?", content_type) encoding = match.group(1) if match else "utf-8" @@ -327,10 +292,10 @@ def response_deserialize( ) return ApiResponse( - status_code = response_data.status, - data = return_data, - headers = response_data.headers, - raw_data = response_data.data + status_code=response_data.status, + data=return_data, + headers=response_data.headers, + raw_data=response_data.data, ) def sanitize_for_serialization(self, obj): @@ -360,13 +325,9 @@ def sanitize_for_serialization(self, obj): elif isinstance(obj, uuid.UUID): return str(obj) elif isinstance(obj, list): - return [ - self.sanitize_for_serialization(sub_obj) for sub_obj in obj - ] + return [self.sanitize_for_serialization(sub_obj) for sub_obj in obj] elif isinstance(obj, tuple): - return tuple( - self.sanitize_for_serialization(sub_obj) for sub_obj in obj - ) + return tuple(self.sanitize_for_serialization(sub_obj) for sub_obj in obj) elif isinstance(obj, (datetime.datetime, datetime.date)): return obj.isoformat() elif isinstance(obj, decimal.Decimal): @@ -380,7 +341,7 @@ def sanitize_for_serialization(self, obj): # and attributes which value is not None. # Convert attribute name to json key in # model definition for request. - if hasattr(obj, 'to_dict') and callable(getattr(obj, 'to_dict')): + if hasattr(obj, "to_dict") and callable(getattr(obj, "to_dict")): obj_dict = obj.to_dict() else: obj_dict = obj.__dict__ @@ -389,10 +350,7 @@ def sanitize_for_serialization(self, obj): # here we handle instances that can either be a list or something else, and only became a real list by calling to_dict() return self.sanitize_for_serialization(obj_dict) - return { - key: self.sanitize_for_serialization(val) - for key, val in obj_dict.items() - } + return {key: self.sanitize_for_serialization(val) for key, val in obj_dict.items()} def deserialize(self, response_text: str, response_type: str, content_type: Optional[str]): """Deserializes response into an object. @@ -411,20 +369,17 @@ def deserialize(self, response_text: str, response_type: str, content_type: Opti data = json.loads(response_text) except ValueError: data = response_text - elif re.match(r'^application/(json|[\w!#$&.+\-^_]+\+json)\s*(;|$)', content_type, re.IGNORECASE): + elif re.match(r"^application/(json|[\w!#$&.+\-^_]+\+json)\s*(;|$)", content_type, re.IGNORECASE): if response_text == "": data = "" else: data = json.loads(response_text) - elif re.match(r'^text\/[a-z.+-]+\s*(;|$)', content_type, re.IGNORECASE): + elif re.match(r"^text\/[a-z.+-]+\s*(;|$)", content_type, re.IGNORECASE): data = response_text - elif re.match(r'^application\/xml\s*(;|$)', content_type, re.IGNORECASE): + elif re.match(r"^application\/xml\s*(;|$)", content_type, re.IGNORECASE): data = response_text else: - raise ApiException( - status=0, - reason="Unsupported content type: {0}".format(content_type) - ) + raise ApiException(status=0, reason="Unsupported content type: {0}".format(content_type)) return self.__deserialize(data, response_type) @@ -440,19 +395,17 @@ def __deserialize(self, data, klass): return None if isinstance(klass, str): - if klass.startswith('List['): - m = re.match(r'List\[(.*)]', klass) + if klass.startswith("List["): + m = re.match(r"List\[(.*)]", klass) assert m is not None, "Malformed List type definition" sub_kls = m.group(1) - return [self.__deserialize(sub_data, sub_kls) - for sub_data in data] + return [self.__deserialize(sub_data, sub_kls) for sub_data in data] - if klass.startswith('Dict['): - m = re.match(r'Dict\[([^,]*), (.*)]', klass) + if klass.startswith("Dict["): + m = re.match(r"Dict\[([^,]*), (.*)]", klass) assert m is not None, "Malformed Dict type definition" sub_kls = m.group(2) - return {k: self.__deserialize(v, sub_kls) - for k, v in data.items()} + return {k: self.__deserialize(v, sub_kls) for k, v in data.items()} # convert str to class if klass in self.NATIVE_TYPES_MAPPING: @@ -488,19 +441,18 @@ def parameters_to_tuples(self, params, collection_formats): for k, v in params.items() if isinstance(params, dict) else params: if k in collection_formats: collection_format = collection_formats[k] - if collection_format == 'multi': + if collection_format == "multi": new_params.extend((k, value) for value in v) else: - if collection_format == 'ssv': - delimiter = ' ' - elif collection_format == 'tsv': - delimiter = '\t' - elif collection_format == 'pipes': - delimiter = '|' + if collection_format == "ssv": + delimiter = " " + elif collection_format == "tsv": + delimiter = "\t" + elif collection_format == "pipes": + delimiter = "|" else: # csv is the default - delimiter = ',' - new_params.append( - (k, delimiter.join(str(value) for value in v))) + delimiter = "," + new_params.append((k, delimiter.join(str(value) for value in v))) else: new_params.append((k, v)) return new_params @@ -525,20 +477,18 @@ def parameters_to_url_query(self, params, collection_formats): if k in collection_formats: collection_format = collection_formats[k] - if collection_format == 'multi': + if collection_format == "multi": new_params.extend((k, quote(str(value))) for value in v) else: - if collection_format == 'ssv': - delimiter = ' ' - elif collection_format == 'tsv': - delimiter = '\t' - elif collection_format == 'pipes': - delimiter = '|' + if collection_format == "ssv": + delimiter = " " + elif collection_format == "tsv": + delimiter = "\t" + elif collection_format == "pipes": + delimiter = "|" else: # csv is the default - delimiter = ',' - new_params.append( - (k, delimiter.join(quote(str(value)) for value in v)) - ) + delimiter = "," + new_params.append((k, delimiter.join(quote(str(value)) for value in v))) else: new_params.append((k, quote(str(v)))) @@ -556,7 +506,7 @@ def files_parameters( params = [] for k, v in files.items(): if isinstance(v, str): - with open(v, 'rb') as f: + with open(v, "rb") as f: filename = os.path.basename(f.name) filedata = f.read() elif isinstance(v, bytes): @@ -570,13 +520,8 @@ def files_parameters( continue else: raise ValueError("Unsupported file value") - mimetype = ( - mimetypes.guess_type(filename)[0] - or 'application/octet-stream' - ) - params.append( - tuple([k, tuple([filename, filedata, mimetype])]) - ) + mimetype = mimetypes.guess_type(filename)[0] or "application/octet-stream" + params.append(tuple([k, tuple([filename, filedata, mimetype])])) return params def select_header_accept(self, accepts: List[str]) -> Optional[str]: @@ -589,7 +534,7 @@ def select_header_accept(self, accepts: List[str]) -> Optional[str]: return None for accept in accepts: - if re.search('json', accept, re.IGNORECASE): + if re.search("json", accept, re.IGNORECASE): return accept return accepts[0] @@ -604,20 +549,13 @@ def select_header_content_type(self, content_types): return None for content_type in content_types: - if re.search('json', content_type, re.IGNORECASE): + if re.search("json", content_type, re.IGNORECASE): return content_type return content_types[0] def update_params_for_auth( - self, - headers, - queries, - auth_settings, - resource_path, - method, - body, - request_auth=None + self, headers, queries, auth_settings, resource_path, method, body, request_auth=None ) -> None: """Updates header and query params based on authentication setting. @@ -635,36 +573,14 @@ def update_params_for_auth( return if request_auth: - self._apply_auth_params( - headers, - queries, - resource_path, - method, - body, - request_auth - ) + self._apply_auth_params(headers, queries, resource_path, method, body, request_auth) else: for auth in auth_settings: auth_setting = self.configuration.auth_settings().get(auth) if auth_setting: - self._apply_auth_params( - headers, - queries, - resource_path, - method, - body, - auth_setting - ) - - def _apply_auth_params( - self, - headers, - queries, - resource_path, - method, - body, - auth_setting - ) -> None: + self._apply_auth_params(headers, queries, resource_path, method, body, auth_setting) + + def _apply_auth_params(self, headers, queries, resource_path, method, body, auth_setting) -> None: """Updates the request parameters based on a single auth_setting :param headers: Header parameters dict to be updated. @@ -675,17 +591,15 @@ def _apply_auth_params( The object type is the return value of sanitize_for_serialization(). :param auth_setting: auth settings for the endpoint """ - if auth_setting['in'] == 'cookie': - headers['Cookie'] = auth_setting['value'] - elif auth_setting['in'] == 'header': - if auth_setting['type'] != 'http-signature': - headers[auth_setting['key']] = auth_setting['value'] - elif auth_setting['in'] == 'query': - queries.append((auth_setting['key'], auth_setting['value'])) + if auth_setting["in"] == "cookie": + headers["Cookie"] = auth_setting["value"] + elif auth_setting["in"] == "header": + if auth_setting["type"] != "http-signature": + headers[auth_setting["key"]] = auth_setting["value"] + elif auth_setting["in"] == "query": + queries.append((auth_setting["key"], auth_setting["value"])) else: - raise ApiValueError( - 'Authentication token must be in `query` or `header`' - ) + raise ApiValueError("Authentication token must be in `query` or `header`") def __deserialize_file(self, response): """Deserializes body to file @@ -705,10 +619,7 @@ def __deserialize_file(self, response): content_disposition = response.headers.get("Content-Disposition") if content_disposition: - m = re.search( - r'filename=[\'"]?([^\'"\s]+)[\'"]?', - content_disposition - ) + m = re.search(r'filename=[\'"]?([^\'"\s]+)[\'"]?', content_disposition) assert m is not None, "Unexpected 'content-disposition' header value" filename = os.path.basename(m.group(1)) # Strip any directory traversal if filename in ("", ".", ".."): # fall back to tmp filename @@ -753,10 +664,7 @@ def __deserialize_date(self, string): except ImportError: return string except ValueError: - raise rest.ApiException( - status=0, - reason="Failed to parse `{0}` as date object".format(string) - ) + raise rest.ApiException(status=0, reason="Failed to parse `{0}` as date object".format(string)) def __deserialize_datetime(self, string): """Deserializes string to datetime. @@ -771,13 +679,7 @@ def __deserialize_datetime(self, string): except ImportError: return string except ValueError: - raise rest.ApiException( - status=0, - reason=( - "Failed to parse `{0}` as datetime object" - .format(string) - ) - ) + raise rest.ApiException(status=0, reason=("Failed to parse `{0}` as datetime object".format(string))) def __deserialize_enum(self, data, klass): """Deserializes primitive type to enum. @@ -789,13 +691,7 @@ def __deserialize_enum(self, data, klass): try: return klass(data) except ValueError: - raise rest.ApiException( - status=0, - reason=( - "Failed to parse `{0}` as `{1}`" - .format(data, klass) - ) - ) + raise rest.ApiException(status=0, reason=("Failed to parse `{0}` as `{1}`".format(data, klass))) def __deserialize_model(self, data, klass): """Deserializes list or dict to model. diff --git a/pyvcell/_internal/api/vcell_client/api_response.py b/pyvcell/_internal/api/vcell_client/api_response.py index 9bc7c11..1ce1372 100644 --- a/pyvcell/_internal/api/vcell_client/api_response.py +++ b/pyvcell/_internal/api/vcell_client/api_response.py @@ -6,6 +6,7 @@ T = TypeVar("T") + class ApiResponse(BaseModel, Generic[T]): """ API response object @@ -16,6 +17,4 @@ class ApiResponse(BaseModel, Generic[T]): data: T = Field(description="Deserialized data given the data type") raw_data: StrictBytes = Field(description="Raw data (HTTP response body)") - model_config = { - "arbitrary_types_allowed": True - } + model_config = {"arbitrary_types_allowed": True} diff --git a/pyvcell/_internal/api/vcell_client/configuration.py b/pyvcell/_internal/api/vcell_client/configuration.py index 0164bed..38f5f9b 100644 --- a/pyvcell/_internal/api/vcell_client/configuration.py +++ b/pyvcell/_internal/api/vcell_client/configuration.py @@ -1,16 +1,15 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import copy import http.client as httplib import logging @@ -24,9 +23,16 @@ JSON_SCHEMA_VALIDATION_KEYWORDS = { - 'multipleOf', 'maximum', 'exclusiveMaximum', - 'minimum', 'exclusiveMinimum', 'maxLength', - 'minLength', 'pattern', 'maxItems', 'minItems' + "multipleOf", + "maximum", + "exclusiveMaximum", + "minimum", + "exclusiveMinimum", + "maxLength", + "minLength", + "pattern", + "maxItems", + "minItems", } ServerVariablesT = Dict[str, str] @@ -111,8 +117,7 @@ AuthSettings = TypedDict( "AuthSettings", - { - }, + {}, total=False, ) @@ -171,27 +176,26 @@ class Configuration: def __init__( self, - host: Optional[str]=None, - api_key: Optional[Dict[str, str]]=None, - api_key_prefix: Optional[Dict[str, str]]=None, - username: Optional[str]=None, - password: Optional[str]=None, - access_token: Optional[str]=None, - server_index: Optional[int]=None, - server_variables: Optional[ServerVariablesT]=None, - server_operation_index: Optional[Dict[int, int]]=None, - server_operation_variables: Optional[Dict[int, ServerVariablesT]]=None, - ignore_operation_servers: bool=False, - ssl_ca_cert: Optional[str]=None, + host: Optional[str] = None, + api_key: Optional[Dict[str, str]] = None, + api_key_prefix: Optional[Dict[str, str]] = None, + username: Optional[str] = None, + password: Optional[str] = None, + access_token: Optional[str] = None, + server_index: Optional[int] = None, + server_variables: Optional[ServerVariablesT] = None, + server_operation_index: Optional[Dict[int, int]] = None, + server_operation_variables: Optional[Dict[int, ServerVariablesT]] = None, + ignore_operation_servers: bool = False, + ssl_ca_cert: Optional[str] = None, retries: Optional[Union[int, Any]] = None, ca_cert_data: Optional[Union[str, bytes]] = None, - cert_file: Optional[str]=None, - key_file: Optional[str]=None, + cert_file: Optional[str] = None, + key_file: Optional[str] = None, *, debug: Optional[bool] = None, ) -> None: - """Constructor - """ + """Constructor""" self._base_path = "https://vcell.cam.uchc.edu" if host is None else host """Default Base url """ @@ -237,7 +241,7 @@ def __init__( """ self.logger["package_logger"] = logging.getLogger("pyvcell._internal.api.vcell_client") self.logger["urllib3_logger"] = logging.getLogger("urllib3") - self.logger_format = '%(asctime)s %(levelname)s %(message)s' + self.logger_format = "%(asctime)s %(levelname)s %(message)s" """Log format """ self.logger_stream_handler = None @@ -296,7 +300,7 @@ def __init__( self.proxy_headers = None """Proxy headers """ - self.safe_chars_for_path_param = '' + self.safe_chars_for_path_param = "" """Safe chars for path_param """ self.retries = retries @@ -317,12 +321,12 @@ def __init__( """date format """ - def __deepcopy__(self, memo: Dict[int, Any]) -> Self: + def __deepcopy__(self, memo: Dict[int, Any]) -> Self: cls = self.__class__ result = cls.__new__(cls) memo[id(self)] = result for k, v in self.__dict__.items(): - if k not in ('logger', 'logger_file_handler'): + if k not in ("logger", "logger_file_handler"): setattr(result, k, copy.deepcopy(v, memo)) # shallow copy of loggers result.logger = copy.copy(self.logger) @@ -454,7 +458,7 @@ def logger_format(self, value: str) -> None: self.__logger_format = value self.logger_formatter = logging.Formatter(self.__logger_format) - def get_api_key_with_prefix(self, identifier: str, alias: Optional[str]=None) -> Optional[str]: + def get_api_key_with_prefix(self, identifier: str, alias: Optional[str] = None) -> Optional[str]: """Gets API key (with prefix if set). :param identifier: The identifier of apiKey. @@ -485,11 +489,9 @@ def get_basic_auth_token(self) -> Optional[str]: if self.password is not None: password = self.password - return urllib3.util.make_headers( - basic_auth=username + ':' + password - ).get('authorization') + return urllib3.util.make_headers(basic_auth=username + ":" + password).get("authorization") - def auth_settings(self)-> AuthSettings: + def auth_settings(self) -> AuthSettings: """Gets Auth Settings dict for api client. :return: The Auth Settings information dict. @@ -502,12 +504,13 @@ def to_debug_report(self) -> str: :return: The report for debugging. """ - return "Python SDK Debug Report:\n"\ - "OS: {env}\n"\ - "Python Version: {pyversion}\n"\ - "Version of the API: 1.0.1\n"\ - "SDK Package Version: 1.0.0".\ - format(env=sys.platform, pyversion=sys.version) + return ( + "Python SDK Debug Report:\n" + "OS: {env}\n" + "Python Version: {pyversion}\n" + "Version of the API: 1.0.1\n" + "SDK Package Version: 1.0.0".format(env=sys.platform, pyversion=sys.version) + ) def get_host_settings(self) -> List[HostSetting]: """Gets an array of host settings @@ -516,16 +519,16 @@ def get_host_settings(self) -> List[HostSetting]: """ return [ { - 'url': "https://vcell.cam.uchc.edu", - 'description': "No description provided", + "url": "https://vcell.cam.uchc.edu", + "description": "No description provided", } ] def get_host_from_settings( self, index: Optional[int], - variables: Optional[ServerVariablesT]=None, - servers: Optional[List[HostSetting]]=None, + variables: Optional[ServerVariablesT] = None, + servers: Optional[List[HostSetting]] = None, ) -> str: """Gets host URL based on the index and variables :param index: array index of the host settings @@ -543,24 +546,23 @@ def get_host_from_settings( server = servers[index] except IndexError: raise ValueError( - "Invalid index {0} when selecting the host settings. " - "Must be less than {1}".format(index, len(servers))) + "Invalid index {0} when selecting the host settings. " "Must be less than {1}".format( + index, len(servers) + ) + ) - url = server['url'] + url = server["url"] # go through variables and replace placeholders - for variable_name, variable in server.get('variables', {}).items(): - used_value = variables.get( - variable_name, variable['default_value']) + for variable_name, variable in server.get("variables", {}).items(): + used_value = variables.get(variable_name, variable["default_value"]) - if 'enum_values' in variable \ - and variable['enum_values'] \ - and used_value not in variable['enum_values']: + if "enum_values" in variable and variable["enum_values"] and used_value not in variable["enum_values"]: raise ValueError( - "The variable `{0}` in the host URL has invalid value " - "{1}. Must be {2}.".format( - variable_name, variables[variable_name], - variable['enum_values'])) + "The variable `{0}` in the host URL has invalid value " "{1}. Must be {2}.".format( + variable_name, variables[variable_name], variable["enum_values"] + ) + ) url = url.replace("{" + variable_name + "}", used_value) diff --git a/pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md b/pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md index 601b1cb..e37fbb7 100644 --- a/pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md +++ b/pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md @@ -1,15 +1,14 @@ # AccesTokenRepresentationRecord - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**token** | **str** | | [optional] -**creation_date_seconds** | **int** | | [optional] -**expire_date_seconds** | **int** | | [optional] -**user_id** | **str** | | [optional] -**user_key** | **str** | | [optional] +| Name | Type | Description | Notes | +| ------------------------- | ------- | ----------- | ---------- | +| **token** | **str** | | [optional] | +| **creation_date_seconds** | **int** | | [optional] | +| **expire_date_seconds** | **int** | | [optional] | +| **user_id** | **str** | | [optional] | +| **user_key** | **str** | | [optional] | ## Example @@ -28,6 +27,5 @@ acces_token_representation_record_dict = acces_token_representation_record_insta # create an instance of AccesTokenRepresentationRecord from a dict acces_token_representation_record_from_dict = AccesTokenRepresentationRecord.from_dict(acces_token_representation_record_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/AdminResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/AdminResourceApi.md index 778520a..80bd80e 100644 --- a/pyvcell/_internal/api/vcell_client/docs/AdminResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/AdminResourceApi.md @@ -1,20 +1,19 @@ -# pyvcell._internal.api.vcell_client.AdminResourceApi +# pyvcell.\_internal.api.vcell_client.AdminResourceApi All URIs are relative to *https://vcell.cam.uchc.edu* -Method | HTTP request | Description -------------- | ------------- | ------------- -[**get_usage**](AdminResourceApi.md#get_usage) | **GET** /api/v1/admin/usage | Get usage summary - +| Method | HTTP request | Description | +| ---------------------------------------------- | --------------------------- | ----------------- | +| [**get_usage**](AdminResourceApi.md#get_usage) | **GET** /api/v1/admin/usage | Get usage summary | # **get_usage** + > bytearray get_usage() Get usage summary ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -45,8 +44,6 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling AdminResourceApi->get_usage: %s\n" % e) ``` - - ### Parameters This endpoint does not need any parameter. @@ -61,17 +58,16 @@ This endpoint does not need any parameter. ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/pdf, application/json +- **Content-Type**: Not defined +- **Accept**: application/pdf, application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | The PDF report | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | The PDF report | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/pyvcell/_internal/api/vcell_client/docs/AnalyticCurve.md b/pyvcell/_internal/api/vcell_client/docs/AnalyticCurve.md index d860771..3f4e3dc 100644 --- a/pyvcell/_internal/api/vcell_client/docs/AnalyticCurve.md +++ b/pyvcell/_internal/api/vcell_client/docs/AnalyticCurve.md @@ -1,19 +1,18 @@ # AnalyticCurve - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**type** | **str** | | [default to 'AnalyticCurve'] -**exp_x** | **str** | | [optional] -**exp_y** | **str** | | [optional] -**exp_z** | **str** | | [optional] -**offset** | [**Coordinate**](Coordinate.md) | | [optional] -**analytic_offset** | [**Coordinate**](Coordinate.md) | | [optional] -**default_num_samples** | **int** | | [optional] -**segment_count** | **int** | | [optional] -**valid** | **bool** | | [optional] +| Name | Type | Description | Notes | +| ----------------------- | ------------------------------- | ----------- | ---------------------------- | +| **type** | **str** | | [default to 'AnalyticCurve'] | +| **exp_x** | **str** | | [optional] | +| **exp_y** | **str** | | [optional] | +| **exp_z** | **str** | | [optional] | +| **offset** | [**Coordinate**](Coordinate.md) | | [optional] | +| **analytic_offset** | [**Coordinate**](Coordinate.md) | | [optional] | +| **default_num_samples** | **int** | | [optional] | +| **segment_count** | **int** | | [optional] | +| **valid** | **bool** | | [optional] | ## Example @@ -32,6 +31,5 @@ analytic_curve_dict = analytic_curve_instance.to_dict() # create an instance of AnalyticCurve from a dict analytic_curve_from_dict = AnalyticCurve.from_dict(analytic_curve_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/AnnotatedFunctionDTO.md b/pyvcell/_internal/api/vcell_client/docs/AnnotatedFunctionDTO.md index 647f645..28dd3ef 100644 --- a/pyvcell/_internal/api/vcell_client/docs/AnnotatedFunctionDTO.md +++ b/pyvcell/_internal/api/vcell_client/docs/AnnotatedFunctionDTO.md @@ -1,16 +1,15 @@ # AnnotatedFunctionDTO - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**function_name** | **str** | | [optional] -**function_expression** | **str** | | [optional] -**error** | **str** | | [optional] -**domain** | [**Domain**](Domain.md) | | [optional] -**function_type** | [**VariableType**](VariableType.md) | | [optional] -**category** | [**FunctionCategory**](FunctionCategory.md) | | [optional] +| Name | Type | Description | Notes | +| ----------------------- | ------------------------------------------- | ----------- | ---------- | +| **function_name** | **str** | | [optional] | +| **function_expression** | **str** | | [optional] | +| **error** | **str** | | [optional] | +| **domain** | [**Domain**](Domain.md) | | [optional] | +| **function_type** | [**VariableType**](VariableType.md) | | [optional] | +| **category** | [**FunctionCategory**](FunctionCategory.md) | | [optional] | ## Example @@ -29,6 +28,5 @@ annotated_function_dto_dict = annotated_function_dto_instance.to_dict() # create an instance of AnnotatedFunctionDTO from a dict annotated_function_dto_from_dict = AnnotatedFunctionDTO.from_dict(annotated_function_dto_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/ApplicationInfo.md b/pyvcell/_internal/api/vcell_client/docs/ApplicationInfo.md index 2a9cb2f..a88444c 100644 --- a/pyvcell/_internal/api/vcell_client/docs/ApplicationInfo.md +++ b/pyvcell/_internal/api/vcell_client/docs/ApplicationInfo.md @@ -1,14 +1,13 @@ # ApplicationInfo - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**name** | **str** | | [optional] -**type** | [**MathType**](MathType.md) | | [optional] -**dimensions** | **int** | | [optional] -**geometry_name** | **str** | | [optional] +| Name | Type | Description | Notes | +| ----------------- | --------------------------- | ----------- | ---------- | +| **name** | **str** | | [optional] | +| **type** | [**MathType**](MathType.md) | | [optional] | +| **dimensions** | **int** | | [optional] | +| **geometry_name** | **str** | | [optional] | ## Example @@ -27,6 +26,5 @@ application_info_dict = application_info_instance.to_dict() # create an instance of ApplicationInfo from a dict application_info_from_dict = ApplicationInfo.from_dict(application_info_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/BatchSystemType.md b/pyvcell/_internal/api/vcell_client/docs/BatchSystemType.md index e2c4aba..813e6db 100644 --- a/pyvcell/_internal/api/vcell_client/docs/BatchSystemType.md +++ b/pyvcell/_internal/api/vcell_client/docs/BatchSystemType.md @@ -1,14 +1,11 @@ # BatchSystemType - ## Enum -* `PBS` (value: `'PBS'`) +- `PBS` (value: `'PBS'`) -* `SGE` (value: `'SGE'`) +- `SGE` (value: `'SGE'`) -* `SLURM` (value: `'SLURM'`) +- `SLURM` (value: `'SLURM'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/BioModel.md b/pyvcell/_internal/api/vcell_client/docs/BioModel.md index 29b11f7..ced53ba 100644 --- a/pyvcell/_internal/api/vcell_client/docs/BioModel.md +++ b/pyvcell/_internal/api/vcell_client/docs/BioModel.md @@ -1,22 +1,21 @@ # BioModel - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**bm_key** | **str** | | [optional] -**name** | **str** | | [optional] -**privacy** | **int** | | [optional] -**group_users** | **List[str]** | | [optional] -**saved_date** | **int** | | [optional] -**annot** | **str** | | [optional] -**branch_id** | **str** | | [optional] -**phys_model_key** | **str** | | [optional] -**owner_name** | **str** | | [optional] -**owner_key** | **str** | | [optional] -**simulation_key_list** | **List[str]** | | [optional] -**applications** | **List[object]** | | [optional] +| Name | Type | Description | Notes | +| ----------------------- | ---------------- | ----------- | ---------- | +| **bm_key** | **str** | | [optional] | +| **name** | **str** | | [optional] | +| **privacy** | **int** | | [optional] | +| **group_users** | **List[str]** | | [optional] | +| **saved_date** | **int** | | [optional] | +| **annot** | **str** | | [optional] | +| **branch_id** | **str** | | [optional] | +| **phys_model_key** | **str** | | [optional] | +| **owner_name** | **str** | | [optional] | +| **owner_key** | **str** | | [optional] | +| **simulation_key_list** | **List[str]** | | [optional] | +| **applications** | **List[object]** | | [optional] | ## Example @@ -35,6 +34,5 @@ bio_model_dict = bio_model_instance.to_dict() # create an instance of BioModel from a dict bio_model_from_dict = BioModel.from_dict(bio_model_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/BioModelChildSummary.md b/pyvcell/_internal/api/vcell_client/docs/BioModelChildSummary.md index f9d2b25..63a7775 100644 --- a/pyvcell/_internal/api/vcell_client/docs/BioModelChildSummary.md +++ b/pyvcell/_internal/api/vcell_client/docs/BioModelChildSummary.md @@ -1,22 +1,21 @@ # BioModelChildSummary - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**sc_names** | **List[str]** | | [optional] -**sc_annots** | **List[str]** | | [optional] -**geo_names** | **List[str]** | | [optional] -**geo_dims** | **List[int]** | | [optional] -**app_types** | [**List[MathType]**](MathType.md) | | [optional] -**sim_names** | **List[List[str]]** | | [optional] -**sim_annots** | **List[List[str]]** | | [optional] -**geometry_dimensions** | **List[int]** | | [optional] -**geometry_names** | **List[str]** | | [optional] -**simulation_context_annotations** | **List[str]** | | [optional] -**simulation_context_names** | **List[str]** | | [optional] -**application_info** | [**List[ApplicationInfo]**](ApplicationInfo.md) | | [optional] +| Name | Type | Description | Notes | +| ---------------------------------- | ----------------------------------------------- | ----------- | ---------- | +| **sc_names** | **List[str]** | | [optional] | +| **sc_annots** | **List[str]** | | [optional] | +| **geo_names** | **List[str]** | | [optional] | +| **geo_dims** | **List[int]** | | [optional] | +| **app_types** | [**List[MathType]**](MathType.md) | | [optional] | +| **sim_names** | **List[List[str]]** | | [optional] | +| **sim_annots** | **List[List[str]]** | | [optional] | +| **geometry_dimensions** | **List[int]** | | [optional] | +| **geometry_names** | **List[str]** | | [optional] | +| **simulation_context_annotations** | **List[str]** | | [optional] | +| **simulation_context_names** | **List[str]** | | [optional] | +| **application_info** | [**List[ApplicationInfo]**](ApplicationInfo.md) | | [optional] | ## Example @@ -35,6 +34,5 @@ bio_model_child_summary_dict = bio_model_child_summary_instance.to_dict() # create an instance of BioModelChildSummary from a dict bio_model_child_summary_from_dict = BioModelChildSummary.from_dict(bio_model_child_summary_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md index a1a71c7..9d4dc09 100644 --- a/pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md @@ -1,25 +1,24 @@ -# pyvcell._internal.api.vcell_client.BioModelResourceApi +# pyvcell.\_internal.api.vcell_client.BioModelResourceApi All URIs are relative to *https://vcell.cam.uchc.edu* -Method | HTTP request | Description -------------- | ------------- | ------------- -[**delete_bio_model**](BioModelResourceApi.md#delete_bio_model) | **DELETE** /api/v1/bioModel/{bioModelID} | Delete the BioModel from VCell's database. -[**get_bio_model**](BioModelResourceApi.md#get_bio_model) | **GET** /api/v1/bioModel/{bioModelID} | Get BioModel. -[**get_bio_model_summaries**](BioModelResourceApi.md#get_bio_model_summaries) | **GET** /api/v1/bioModel/summaries | Return BioModel summaries. -[**get_bio_model_summary**](BioModelResourceApi.md#get_bio_model_summary) | **GET** /api/v1/bioModel/{bioModelID}/summary | All of the text based information about a BioModel (summary, version, publication status, etc...), but not the actual BioModel itself. -[**get_bio_model_vcml**](BioModelResourceApi.md#get_bio_model_vcml) | **GET** /api/v1/bioModel/{bioModelID}/vcml_download | Get the BioModel in VCML format. -[**save_bio_model**](BioModelResourceApi.md#save_bio_model) | **POST** /api/v1/bioModel | Save's the given BioModel. Optional parameters of name and simulations to update due to math changes. Returns saved BioModel as VCML. - +| Method | HTTP request | Description | +| ----------------------------------------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| [**delete_bio_model**](BioModelResourceApi.md#delete_bio_model) | **DELETE** /api/v1/bioModel/{bioModelID} | Delete the BioModel from VCell's database. | +| [**get_bio_model**](BioModelResourceApi.md#get_bio_model) | **GET** /api/v1/bioModel/{bioModelID} | Get BioModel. | +| [**get_bio_model_summaries**](BioModelResourceApi.md#get_bio_model_summaries) | **GET** /api/v1/bioModel/summaries | Return BioModel summaries. | +| [**get_bio_model_summary**](BioModelResourceApi.md#get_bio_model_summary) | **GET** /api/v1/bioModel/{bioModelID}/summary | All of the text based information about a BioModel (summary, version, publication status, etc...), but not the actual BioModel itself. | +| [**get_bio_model_vcml**](BioModelResourceApi.md#get_bio_model_vcml) | **GET** /api/v1/bioModel/{bioModelID}/vcml_download | Get the BioModel in VCML format. | +| [**save_bio_model**](BioModelResourceApi.md#save_bio_model) | **POST** /api/v1/bioModel | Save's the given BioModel. Optional parameters of name and simulations to update due to math changes. Returns saved BioModel as VCML. | # **delete_bio_model** + > delete_bio_model(bio_model_id) Delete the BioModel from VCell's database. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -36,7 +35,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.BioModelResourceApi(api_client) - bio_model_id = 'bio_model_id_example' # str | + bio_model_id = 'bio_model_id_example' # str | try: # Delete the BioModel from VCell's database. @@ -45,14 +44,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling BioModelResourceApi->delete_bio_model: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **bio_model_id** | **str**| | +| Name | Type | Description | Notes | +| ---------------- | ------- | ----------- | ----- | +| **bio_model_id** | **str** | | ### Return type @@ -64,28 +60,28 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**204** | No Content | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **204** | No Content | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_bio_model** + > BioModel get_bio_model(bio_model_id) Get BioModel. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.bio_model import BioModel @@ -103,7 +99,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.BioModelResourceApi(api_client) - bio_model_id = 'bio_model_id_example' # str | + bio_model_id = 'bio_model_id_example' # str | try: # Get BioModel. @@ -114,14 +110,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling BioModelResourceApi->get_bio_model: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **bio_model_id** | **str**| | +| Name | Type | Description | Notes | +| ---------------- | ------- | ----------- | ----- | +| **bio_model_id** | **str** | | ### Return type @@ -133,28 +126,28 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**403** | Not Allowed | - | -**404** | Not found | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **403** | Not Allowed | - | +| **404** | Not found | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_bio_model_summaries** + > List[BioModelSummary] get_bio_model_summaries(include_public_and_shared=include_public_and_shared) Return BioModel summaries. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.bio_model_summary import BioModelSummary @@ -183,14 +176,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling BioModelResourceApi->get_bio_model_summaries: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **include_public_and_shared** | **bool**| Includes BioModel summaries that are public or shared with requester. Default is true. | [optional] +| Name | Type | Description | Notes | +| ----------------------------- | -------- | -------------------------------------------------------------------------------------- | ---------- | +| **include_public_and_shared** | **bool** | Includes BioModel summaries that are public or shared with requester. Default is true. | [optional] | ### Return type @@ -202,26 +192,26 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_bio_model_summary** + > BioModelSummary get_bio_model_summary(bio_model_id) All of the text based information about a BioModel (summary, version, publication status, etc...), but not the actual BioModel itself. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.bio_model_summary import BioModelSummary @@ -239,7 +229,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.BioModelResourceApi(api_client) - bio_model_id = 'bio_model_id_example' # str | + bio_model_id = 'bio_model_id_example' # str | try: # All of the text based information about a BioModel (summary, version, publication status, etc...), but not the actual BioModel itself. @@ -250,14 +240,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling BioModelResourceApi->get_bio_model_summary: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **bio_model_id** | **str**| | +| Name | Type | Description | Notes | +| ---------------- | ------- | ----------- | ----- | +| **bio_model_id** | **str** | | ### Return type @@ -269,27 +256,27 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_bio_model_vcml** + > str get_bio_model_vcml(bio_model_id) Get the BioModel in VCML format. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -306,7 +293,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.BioModelResourceApi(api_client) - bio_model_id = 'bio_model_id_example' # str | + bio_model_id = 'bio_model_id_example' # str | try: # Get the BioModel in VCML format. @@ -317,14 +304,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling BioModelResourceApi->get_bio_model_vcml: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **bio_model_id** | **str**| | +| Name | Type | Description | Notes | +| ---------------- | ------- | ----------- | ----- | +| **bio_model_id** | **str** | | ### Return type @@ -336,28 +320,28 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: text/xml, application/json +- **Content-Type**: Not defined +- **Accept**: text/xml, application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**403** | Not Allowed | - | -**404** | Not found | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **403** | Not Allowed | - | +| **404** | Not found | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **save_bio_model** + > str save_bio_model(body, new_name=new_name, sims_requiring_updates=sims_requiring_updates) Save's the given BioModel. Optional parameters of name and simulations to update due to math changes. Returns saved BioModel as VCML. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -391,16 +375,13 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling BioModelResourceApi->save_bio_model: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | **str**| BioModelVCML which will be saved. | - **new_name** | **str**| Name to save new BioModel under. Leave blank if re-saving existing BioModel. | [optional] - **sims_requiring_updates** | [**List[str]**](str.md)| The name of simulations that will be prepared for future execution. | [optional] +| Name | Type | Description | Notes | +| -------------------------- | ----------------------- | ---------------------------------------------------------------------------- | ---------- | +| **body** | **str** | BioModelVCML which will be saved. | +| **new_name** | **str** | Name to save new BioModel under. Leave blank if re-saving existing BioModel. | [optional] | +| **sims_requiring_updates** | [**List[str]**](str.md) | The name of simulations that will be prepared for future execution. | [optional] | ### Return type @@ -412,18 +393,17 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: application/xml - - **Accept**: application/xml, application/json +- **Content-Type**: application/xml +- **Accept**: application/xml, application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**422** | Unprocessable content submitted | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | ------------------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **422** | Unprocessable content submitted | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/pyvcell/_internal/api/vcell_client/docs/BioModelSummary.md b/pyvcell/_internal/api/vcell_client/docs/BioModelSummary.md index 345efa5..86da87b 100644 --- a/pyvcell/_internal/api/vcell_client/docs/BioModelSummary.md +++ b/pyvcell/_internal/api/vcell_client/docs/BioModelSummary.md @@ -1,14 +1,13 @@ # BioModelSummary - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**version** | [**Version**](Version.md) | | [optional] -**summary** | [**BioModelChildSummary**](BioModelChildSummary.md) | | [optional] -**publication_information** | [**List[PublicationInfo]**](PublicationInfo.md) | | [optional] -**v_cell_software_version** | [**VCellSoftwareVersion**](VCellSoftwareVersion.md) | | [optional] +| Name | Type | Description | Notes | +| --------------------------- | --------------------------------------------------- | ----------- | ---------- | +| **version** | [**Version**](Version.md) | | [optional] | +| **summary** | [**BioModelChildSummary**](BioModelChildSummary.md) | | [optional] | +| **publication_information** | [**List[PublicationInfo]**](PublicationInfo.md) | | [optional] | +| **v_cell_software_version** | [**VCellSoftwareVersion**](VCellSoftwareVersion.md) | | [optional] | ## Example @@ -27,6 +26,5 @@ bio_model_summary_dict = bio_model_summary_instance.to_dict() # create an instance of BioModelSummary from a dict bio_model_summary_from_dict = BioModelSummary.from_dict(bio_model_summary_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/BiomodelRef.md b/pyvcell/_internal/api/vcell_client/docs/BiomodelRef.md index 4527e93..2e77f99 100644 --- a/pyvcell/_internal/api/vcell_client/docs/BiomodelRef.md +++ b/pyvcell/_internal/api/vcell_client/docs/BiomodelRef.md @@ -1,15 +1,14 @@ # BiomodelRef - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**bm_key** | **int** | | [optional] -**name** | **str** | | [optional] -**owner_name** | **str** | | [optional] -**owner_key** | **int** | | [optional] -**version_flag** | **int** | | [optional] +| Name | Type | Description | Notes | +| ---------------- | ------- | ----------- | ---------- | +| **bm_key** | **int** | | [optional] | +| **name** | **str** | | [optional] | +| **owner_name** | **str** | | [optional] | +| **owner_key** | **int** | | [optional] | +| **version_flag** | **int** | | [optional] | ## Example @@ -28,6 +27,5 @@ biomodel_ref_dict = biomodel_ref_instance.to_dict() # create an instance of BiomodelRef from a dict biomodel_ref_from_dict = BiomodelRef.from_dict(biomodel_ref_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/CompositeCurve.md b/pyvcell/_internal/api/vcell_client/docs/CompositeCurve.md index 21ac558..b0d452a 100644 --- a/pyvcell/_internal/api/vcell_client/docs/CompositeCurve.md +++ b/pyvcell/_internal/api/vcell_client/docs/CompositeCurve.md @@ -1,16 +1,15 @@ # CompositeCurve - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**type** | **str** | | [default to 'CompositeCurve'] -**field_curves** | **List[object]** | | [optional] -**curve_count** | **int** | | [optional] -**default_num_samples** | **int** | | [optional] -**segment_count** | **int** | | [optional] -**valid** | **bool** | | [optional] +| Name | Type | Description | Notes | +| ----------------------- | ---------------- | ----------- | ----------------------------- | +| **type** | **str** | | [default to 'CompositeCurve'] | +| **field_curves** | **List[object]** | | [optional] | +| **curve_count** | **int** | | [optional] | +| **default_num_samples** | **int** | | [optional] | +| **segment_count** | **int** | | [optional] | +| **valid** | **bool** | | [optional] | ## Example @@ -29,6 +28,5 @@ composite_curve_dict = composite_curve_instance.to_dict() # create an instance of CompositeCurve from a dict composite_curve_from_dict = CompositeCurve.from_dict(composite_curve_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/ControlPointCurve.md b/pyvcell/_internal/api/vcell_client/docs/ControlPointCurve.md index 15b7e34..d283e08 100644 --- a/pyvcell/_internal/api/vcell_client/docs/ControlPointCurve.md +++ b/pyvcell/_internal/api/vcell_client/docs/ControlPointCurve.md @@ -1,18 +1,17 @@ # ControlPointCurve - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**type** | **str** | | [default to 'ControlPointCurve'] -**control_points** | [**List[Coordinate]**](Coordinate.md) | | [optional] -**control_point_count** | **int** | | [optional] -**control_points_vector** | [**List[Coordinate]**](Coordinate.md) | | [optional] -**max_control_points** | **int** | | [optional] -**min_control_points** | **int** | | [optional] -**control_point_addable** | **bool** | | [optional] -**valid** | **bool** | | [optional] +| Name | Type | Description | Notes | +| ------------------------- | ------------------------------------- | ----------- | -------------------------------- | +| **type** | **str** | | [default to 'ControlPointCurve'] | +| **control_points** | [**List[Coordinate]**](Coordinate.md) | | [optional] | +| **control_point_count** | **int** | | [optional] | +| **control_points_vector** | [**List[Coordinate]**](Coordinate.md) | | [optional] | +| **max_control_points** | **int** | | [optional] | +| **min_control_points** | **int** | | [optional] | +| **control_point_addable** | **bool** | | [optional] | +| **valid** | **bool** | | [optional] | ## Example @@ -31,6 +30,5 @@ control_point_curve_dict = control_point_curve_instance.to_dict() # create an instance of ControlPointCurve from a dict control_point_curve_from_dict = ControlPointCurve.from_dict(control_point_curve_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/Coordinate.md b/pyvcell/_internal/api/vcell_client/docs/Coordinate.md index a997b6f..dff99ff 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Coordinate.md +++ b/pyvcell/_internal/api/vcell_client/docs/Coordinate.md @@ -1,13 +1,12 @@ # Coordinate - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**x** | **float** | | [optional] -**y** | **float** | | [optional] -**z** | **float** | | [optional] +| Name | Type | Description | Notes | +| ----- | --------- | ----------- | ---------- | +| **x** | **float** | | [optional] | +| **y** | **float** | | [optional] | +| **z** | **float** | | [optional] | ## Example @@ -26,6 +25,5 @@ coordinate_dict = coordinate_instance.to_dict() # create an instance of Coordinate from a dict coordinate_from_dict = Coordinate.from_dict(coordinate_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/Curve.md b/pyvcell/_internal/api/vcell_client/docs/Curve.md index 6faee15..f9651c8 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Curve.md +++ b/pyvcell/_internal/api/vcell_client/docs/Curve.md @@ -1,21 +1,20 @@ # Curve - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**b_closed** | **bool** | | [optional] -**description** | **str** | | [optional] -**type** | **str** | | -**beginning_coordinate** | [**Coordinate**](Coordinate.md) | | [optional] -**default_num_samples** | **int** | | [optional] -**ending_coordinate** | [**Coordinate**](Coordinate.md) | | [optional] -**num_sample_points** | **int** | | [optional] -**segment_count** | **int** | | [optional] -**spatial_length** | **float** | | [optional] -**closed** | **bool** | | [optional] -**valid** | **bool** | | [optional] +| Name | Type | Description | Notes | +| ------------------------ | ------------------------------- | ----------- | ---------- | +| **b_closed** | **bool** | | [optional] | +| **description** | **str** | | [optional] | +| **type** | **str** | | +| **beginning_coordinate** | [**Coordinate**](Coordinate.md) | | [optional] | +| **default_num_samples** | **int** | | [optional] | +| **ending_coordinate** | [**Coordinate**](Coordinate.md) | | [optional] | +| **num_sample_points** | **int** | | [optional] | +| **segment_count** | **int** | | [optional] | +| **spatial_length** | **float** | | [optional] | +| **closed** | **bool** | | [optional] | +| **valid** | **bool** | | [optional] | ## Example @@ -34,6 +33,5 @@ curve_dict = curve_instance.to_dict() # create an instance of Curve from a dict curve_from_dict = Curve.from_dict(curve_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/CurveSelectionInfo.md b/pyvcell/_internal/api/vcell_client/docs/CurveSelectionInfo.md index 7efc1f6..8cf889e 100644 --- a/pyvcell/_internal/api/vcell_client/docs/CurveSelectionInfo.md +++ b/pyvcell/_internal/api/vcell_client/docs/CurveSelectionInfo.md @@ -1,20 +1,19 @@ # CurveSelectionInfo - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**field_curve** | [**Curve**](Curve.md) | | [optional] -**field_type** | **int** | | [optional] -**field_control_point** | **int** | | [optional] -**field_segment** | **int** | | [optional] -**field_u** | **float** | | [optional] -**field_u_extended** | **float** | | [optional] -**field_control_point_extended** | **int** | | [optional] -**field_segment_extended** | **int** | | [optional] -**field_direction_negative** | **bool** | | [optional] -**crossing** | **bool** | | [optional] +| Name | Type | Description | Notes | +| -------------------------------- | --------------------- | ----------- | ---------- | +| **field_curve** | [**Curve**](Curve.md) | | [optional] | +| **field_type** | **int** | | [optional] | +| **field_control_point** | **int** | | [optional] | +| **field_segment** | **int** | | [optional] | +| **field_u** | **float** | | [optional] | +| **field_u_extended** | **float** | | [optional] | +| **field_control_point_extended** | **int** | | [optional] | +| **field_segment_extended** | **int** | | [optional] | +| **field_direction_negative** | **bool** | | [optional] | +| **crossing** | **bool** | | [optional] | ## Example @@ -33,6 +32,5 @@ curve_selection_info_dict = curve_selection_info_instance.to_dict() # create an instance of CurveSelectionInfo from a dict curve_selection_info_from_dict = CurveSelectionInfo.from_dict(curve_selection_info_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/DataIdentifier.md b/pyvcell/_internal/api/vcell_client/docs/DataIdentifier.md index 4d73cbf..6f2b1f8 100644 --- a/pyvcell/_internal/api/vcell_client/docs/DataIdentifier.md +++ b/pyvcell/_internal/api/vcell_client/docs/DataIdentifier.md @@ -1,17 +1,16 @@ # DataIdentifier - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**name** | **str** | | [optional] -**display_name** | **str** | | [optional] -**variable_type** | [**VariableType**](VariableType.md) | | [optional] -**domain** | [**Domain**](Domain.md) | | [optional] -**b_function** | **bool** | | [optional] -**function** | **bool** | | [optional] -**visible** | **bool** | | [optional] +| Name | Type | Description | Notes | +| ----------------- | ----------------------------------- | ----------- | ---------- | +| **name** | **str** | | [optional] | +| **display_name** | **str** | | [optional] | +| **variable_type** | [**VariableType**](VariableType.md) | | [optional] | +| **domain** | [**Domain**](Domain.md) | | [optional] | +| **b_function** | **bool** | | [optional] | +| **function** | **bool** | | [optional] | +| **visible** | **bool** | | [optional] | ## Example @@ -30,6 +29,5 @@ data_identifier_dict = data_identifier_instance.to_dict() # create an instance of DataIdentifier from a dict data_identifier_from_dict = DataIdentifier.from_dict(data_identifier_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/DetailedState.md b/pyvcell/_internal/api/vcell_client/docs/DetailedState.md index 402f645..e18878d 100644 --- a/pyvcell/_internal/api/vcell_client/docs/DetailedState.md +++ b/pyvcell/_internal/api/vcell_client/docs/DetailedState.md @@ -1,108 +1,105 @@ # DetailedState - ## Enum -* `UNKNOWN` (value: `'UNKNOWN'`) +- `UNKNOWN` (value: `'UNKNOWN'`) -* `DATAMOVEREVENT_MOVED` (value: `'DATAMOVEREVENT_MOVED'`) +- `DATAMOVEREVENT_MOVED` (value: `'DATAMOVEREVENT_MOVED'`) -* `WORKEREVENT_WORKERALIVE` (value: `'WORKEREVENT_WORKERALIVE'`) +- `WORKEREVENT_WORKERALIVE` (value: `'WORKEREVENT_WORKERALIVE'`) -* `JOB_WAITING` (value: `'JOB_WAITING'`) +- `JOB_WAITING` (value: `'JOB_WAITING'`) -* `JOB_QUEUED` (value: `'JOB_QUEUED'`) +- `JOB_QUEUED` (value: `'JOB_QUEUED'`) -* `JOB_QUEUED_RETRY` (value: `'JOB_QUEUED_RETRY'`) +- `JOB_QUEUED_RETRY` (value: `'JOB_QUEUED_RETRY'`) -* `JOB_DISPATCHED` (value: `'JOB_DISPATCHED'`) +- `JOB_DISPATCHED` (value: `'JOB_DISPATCHED'`) -* `JOB_ACCEPTED` (value: `'JOB_ACCEPTED'`) +- `JOB_ACCEPTED` (value: `'JOB_ACCEPTED'`) -* `SOLVER_READY` (value: `'SOLVER_READY'`) +- `SOLVER_READY` (value: `'SOLVER_READY'`) -* `SOLVER_STARTING_INIT` (value: `'SOLVER_STARTING_INIT'`) +- `SOLVER_STARTING_INIT` (value: `'SOLVER_STARTING_INIT'`) -* `SOLVEREVENT_STARTING_PROC_GEOM` (value: `'SOLVEREVENT_STARTING_PROC_GEOM'`) +- `SOLVEREVENT_STARTING_PROC_GEOM` (value: `'SOLVEREVENT_STARTING_PROC_GEOM'`) -* `SOLVEREVENT_STARTING_RESAMPLE_FD` (value: `'SOLVEREVENT_STARTING_RESAMPLE_FD'`) +- `SOLVEREVENT_STARTING_RESAMPLE_FD` (value: `'SOLVEREVENT_STARTING_RESAMPLE_FD'`) -* `SOLVER_RUNNING_INIT` (value: `'SOLVER_RUNNING_INIT'`) +- `SOLVER_RUNNING_INIT` (value: `'SOLVER_RUNNING_INIT'`) -* `SOLVER_RUNNING_INIT_INPUT_FILE` (value: `'SOLVER_RUNNING_INIT_INPUT_FILE'`) +- `SOLVER_RUNNING_INIT_INPUT_FILE` (value: `'SOLVER_RUNNING_INIT_INPUT_FILE'`) -* `SOLVER_RUNNING_INIT_CODEGEN` (value: `'SOLVER_RUNNING_INIT_CODEGEN'`) +- `SOLVER_RUNNING_INIT_CODEGEN` (value: `'SOLVER_RUNNING_INIT_CODEGEN'`) -* `SOLVER_RUNNING_INIT_COMPILING` (value: `'SOLVER_RUNNING_INIT_COMPILING'`) +- `SOLVER_RUNNING_INIT_COMPILING` (value: `'SOLVER_RUNNING_INIT_COMPILING'`) -* `SOLVER_RUNNING_INIT_COMPILECMD` (value: `'SOLVER_RUNNING_INIT_COMPILECMD'`) +- `SOLVER_RUNNING_INIT_COMPILECMD` (value: `'SOLVER_RUNNING_INIT_COMPILECMD'`) -* `SOLVER_RUNNING_INIT_COMPILE_OK` (value: `'SOLVER_RUNNING_INIT_COMPILE_OK'`) +- `SOLVER_RUNNING_INIT_COMPILE_OK` (value: `'SOLVER_RUNNING_INIT_COMPILE_OK'`) -* `SOLVER_RUNNING_INIT_LINKING` (value: `'SOLVER_RUNNING_INIT_LINKING'`) +- `SOLVER_RUNNING_INIT_LINKING` (value: `'SOLVER_RUNNING_INIT_LINKING'`) -* `SOLVER_RUNNING_INIT_LINKCMD` (value: `'SOLVER_RUNNING_INIT_LINKCMD'`) +- `SOLVER_RUNNING_INIT_LINKCMD` (value: `'SOLVER_RUNNING_INIT_LINKCMD'`) -* `SOLVER_RUNNING_INIT_LINK_OK` (value: `'SOLVER_RUNNING_INIT_LINK_OK'`) +- `SOLVER_RUNNING_INIT_LINK_OK` (value: `'SOLVER_RUNNING_INIT_LINK_OK'`) -* `SOLVER_RUNNING_INIT_COMPILELINK_OK` (value: `'SOLVER_RUNNING_INIT_COMPILELINK_OK'`) +- `SOLVER_RUNNING_INIT_COMPILELINK_OK` (value: `'SOLVER_RUNNING_INIT_COMPILELINK_OK'`) -* `SOLVEREVENT_STARTING_INIT` (value: `'SOLVEREVENT_STARTING_INIT'`) +- `SOLVEREVENT_STARTING_INIT` (value: `'SOLVEREVENT_STARTING_INIT'`) -* `SOLVEREVENT_STARTING_CODEGEN` (value: `'SOLVEREVENT_STARTING_CODEGEN'`) +- `SOLVEREVENT_STARTING_CODEGEN` (value: `'SOLVEREVENT_STARTING_CODEGEN'`) -* `SOLVEREVENT_STARTING_COMPILELINK` (value: `'SOLVEREVENT_STARTING_COMPILELINK'`) +- `SOLVEREVENT_STARTING_COMPILELINK` (value: `'SOLVEREVENT_STARTING_COMPILELINK'`) -* `SOLVEREVENT_STARTING_INPUT_FILE` (value: `'SOLVEREVENT_STARTING_INPUT_FILE'`) +- `SOLVEREVENT_STARTING_INPUT_FILE` (value: `'SOLVEREVENT_STARTING_INPUT_FILE'`) -* `SOLVEREVENT_STARTING` (value: `'SOLVEREVENT_STARTING'`) +- `SOLVEREVENT_STARTING` (value: `'SOLVEREVENT_STARTING'`) -* `SOLVEREVENT_STARTING_SUBMITTING` (value: `'SOLVEREVENT_STARTING_SUBMITTING'`) +- `SOLVEREVENT_STARTING_SUBMITTING` (value: `'SOLVEREVENT_STARTING_SUBMITTING'`) -* `SOLVEREVENT_STARTING_SUBMITTED` (value: `'SOLVEREVENT_STARTING_SUBMITTED'`) +- `SOLVEREVENT_STARTING_SUBMITTED` (value: `'SOLVEREVENT_STARTING_SUBMITTED'`) -* `WORKEREVENT_STARTING` (value: `'WORKEREVENT_STARTING'`) +- `WORKEREVENT_STARTING` (value: `'WORKEREVENT_STARTING'`) -* `SOLVEREVENT_RUNNING_START` (value: `'SOLVEREVENT_RUNNING_START'`) +- `SOLVEREVENT_RUNNING_START` (value: `'SOLVEREVENT_RUNNING_START'`) -* `SOLVER_RUNNING_START` (value: `'SOLVER_RUNNING_START'`) +- `SOLVER_RUNNING_START` (value: `'SOLVER_RUNNING_START'`) -* `JOB_RUNNING_UNKNOWN` (value: `'JOB_RUNNING_UNKNOWN'`) +- `JOB_RUNNING_UNKNOWN` (value: `'JOB_RUNNING_UNKNOWN'`) -* `SOLVEREVENT_PRINTED` (value: `'SOLVEREVENT_PRINTED'`) +- `SOLVEREVENT_PRINTED` (value: `'SOLVEREVENT_PRINTED'`) -* `WORKEREVENT_DATA` (value: `'WORKEREVENT_DATA'`) +- `WORKEREVENT_DATA` (value: `'WORKEREVENT_DATA'`) -* `JOB_RUNNING` (value: `'JOB_RUNNING'`) +- `JOB_RUNNING` (value: `'JOB_RUNNING'`) -* `SOLVEREVENT_PROGRESS` (value: `'SOLVEREVENT_PROGRESS'`) +- `SOLVEREVENT_PROGRESS` (value: `'SOLVEREVENT_PROGRESS'`) -* `WORKEREVENT_PROGRESS` (value: `'WORKEREVENT_PROGRESS'`) +- `WORKEREVENT_PROGRESS` (value: `'WORKEREVENT_PROGRESS'`) -* `WORKEREVENT_WORKEREXIT_NORMAL` (value: `'WORKEREVENT_WORKEREXIT_NORMAL'`) +- `WORKEREVENT_WORKEREXIT_NORMAL` (value: `'WORKEREVENT_WORKEREXIT_NORMAL'`) -* `WORKEREVENT_WORKEREXIT_ERROR` (value: `'WORKEREVENT_WORKEREXIT_ERROR'`) +- `WORKEREVENT_WORKEREXIT_ERROR` (value: `'WORKEREVENT_WORKEREXIT_ERROR'`) -* `SOLVEREVENT_FINISHED` (value: `'SOLVEREVENT_FINISHED'`) +- `SOLVEREVENT_FINISHED` (value: `'SOLVEREVENT_FINISHED'`) -* `SOLVER_FINISHED` (value: `'SOLVER_FINISHED'`) +- `SOLVER_FINISHED` (value: `'SOLVER_FINISHED'`) -* `WORKEREVENT_COMPLETED` (value: `'WORKEREVENT_COMPLETED'`) +- `WORKEREVENT_COMPLETED` (value: `'WORKEREVENT_COMPLETED'`) -* `JOB_COMPLETED` (value: `'JOB_COMPLETED'`) +- `JOB_COMPLETED` (value: `'JOB_COMPLETED'`) -* `SOLVER_STOPPED` (value: `'SOLVER_STOPPED'`) +- `SOLVER_STOPPED` (value: `'SOLVER_STOPPED'`) -* `JOB_STOPPED` (value: `'JOB_STOPPED'`) +- `JOB_STOPPED` (value: `'JOB_STOPPED'`) -* `JOB_FAILED_UNKNOWN` (value: `'JOB_FAILED_UNKNOWN'`) +- `JOB_FAILED_UNKNOWN` (value: `'JOB_FAILED_UNKNOWN'`) -* `SOLVER_ABORTED` (value: `'SOLVER_ABORTED'`) +- `SOLVER_ABORTED` (value: `'SOLVER_ABORTED'`) -* `WORKEREVENT_FAILURE` (value: `'WORKEREVENT_FAILURE'`) +- `WORKEREVENT_FAILURE` (value: `'WORKEREVENT_FAILURE'`) -* `JOB_FAILED` (value: `'JOB_FAILED'`) +- `JOB_FAILED` (value: `'JOB_FAILED'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/Domain.md b/pyvcell/_internal/api/vcell_client/docs/Domain.md index fec73e1..d4350d9 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Domain.md +++ b/pyvcell/_internal/api/vcell_client/docs/Domain.md @@ -1,11 +1,10 @@ # Domain - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**name** | **str** | | [optional] +| Name | Type | Description | Notes | +| -------- | ------- | ----------- | ---------- | +| **name** | **str** | | [optional] | ## Example @@ -24,6 +23,5 @@ domain_dict = domain_instance.to_dict() # create an instance of Domain from a dict domain_from_dict = Domain.from_dict(domain_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/ExportEvent.md b/pyvcell/_internal/api/vcell_client/docs/ExportEvent.md index 88a2f3a..5de282e 100644 --- a/pyvcell/_internal/api/vcell_client/docs/ExportEvent.md +++ b/pyvcell/_internal/api/vcell_client/docs/ExportEvent.md @@ -1,19 +1,18 @@ # ExportEvent - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**event_type** | [**ExportProgressType**](ExportProgressType.md) | | [optional] -**progress** | **float** | | [optional] -**format** | **str** | | [optional] -**location** | **str** | | [optional] -**user** | [**User**](User.md) | | [optional] -**job_id** | **int** | | [optional] -**data_key** | **str** | | [optional] -**data_id_string** | **str** | | [optional] -**human_readable_data** | [**HumanReadableExportData**](HumanReadableExportData.md) | | [optional] +| Name | Type | Description | Notes | +| ----------------------- | --------------------------------------------------------- | ----------- | ---------- | +| **event_type** | [**ExportProgressType**](ExportProgressType.md) | | [optional] | +| **progress** | **float** | | [optional] | +| **format** | **str** | | [optional] | +| **location** | **str** | | [optional] | +| **user** | [**User**](User.md) | | [optional] | +| **job_id** | **int** | | [optional] | +| **data_key** | **str** | | [optional] | +| **data_id_string** | **str** | | [optional] | +| **human_readable_data** | [**HumanReadableExportData**](HumanReadableExportData.md) | | [optional] | ## Example @@ -32,6 +31,5 @@ export_event_dict = export_event_instance.to_dict() # create an instance of ExportEvent from a dict export_event_from_dict = ExportEvent.from_dict(export_event_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/ExportProgressType.md b/pyvcell/_internal/api/vcell_client/docs/ExportProgressType.md index 5c55511..788cf62 100644 --- a/pyvcell/_internal/api/vcell_client/docs/ExportProgressType.md +++ b/pyvcell/_internal/api/vcell_client/docs/ExportProgressType.md @@ -1,18 +1,15 @@ # ExportProgressType - ## Enum -* `EXPORT_START` (value: `'EXPORT_START'`) +- `EXPORT_START` (value: `'EXPORT_START'`) -* `EXPORT_COMPLETE` (value: `'EXPORT_COMPLETE'`) +- `EXPORT_COMPLETE` (value: `'EXPORT_COMPLETE'`) -* `EXPORT_FAILURE` (value: `'EXPORT_FAILURE'`) +- `EXPORT_FAILURE` (value: `'EXPORT_FAILURE'`) -* `EXPORT_ASSEMBLING` (value: `'EXPORT_ASSEMBLING'`) +- `EXPORT_ASSEMBLING` (value: `'EXPORT_ASSEMBLING'`) -* `EXPORT_PROGRESS` (value: `'EXPORT_PROGRESS'`) +- `EXPORT_PROGRESS` (value: `'EXPORT_PROGRESS'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md index da4cecc..8ee32fe 100644 --- a/pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md @@ -1,21 +1,20 @@ -# pyvcell._internal.api.vcell_client.ExportResourceApi +# pyvcell.\_internal.api.vcell_client.ExportResourceApi All URIs are relative to *https://vcell.cam.uchc.edu* -Method | HTTP request | Description -------------- | ------------- | ------------- -[**export_n5**](ExportResourceApi.md#export_n5) | **POST** /api/v1/export/N5 | -[**export_status**](ExportResourceApi.md#export_status) | **GET** /api/v1/export/status | - +| Method | HTTP request | Description | +| ------------------------------------------------------- | ----------------------------- | ----------- | +| [**export_n5**](ExportResourceApi.md#export_n5) | **POST** /api/v1/export/N5 | +| [**export_status**](ExportResourceApi.md#export_status) | **GET** /api/v1/export/status | # **export_n5** + > int export_n5(n5_export_request=n5_export_request) Create an N5 (ImageJ compatible) export. The request must contain the standard export information, exportable data type, dataset name, and sub-volume specifications. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.n5_export_request import N5ExportRequest @@ -47,14 +46,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling ExportResourceApi->export_n5: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **n5_export_request** | [**N5ExportRequest**](N5ExportRequest.md)| | [optional] +| Name | Type | Description | Notes | +| --------------------- | ----------------------------------------- | ----------- | ---------- | +| **n5_export_request** | [**N5ExportRequest**](N5ExportRequest.md) | | [optional] | ### Return type @@ -66,30 +62,30 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: application/json - - **Accept**: application/json +- **Content-Type**: application/json +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**400** | Bad Request. | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**422** | Unprocessable content submitted | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | ------------------------------- | ---------------- | +| **200** | OK | - | +| **400** | Bad Request. | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **422** | Unprocessable content submitted | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **export_status** + > List[ExportEvent] export_status(timestamp=timestamp) Get the status of your export jobs past the timestamp (Unix epoch in seconds). ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.export_event import ExportEvent @@ -121,14 +117,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling ExportResourceApi->export_status: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **timestamp** | **int**| | [optional] +| Name | Type | Description | Notes | +| ------------- | ------- | ----------- | ---------- | +| **timestamp** | **int** | | [optional] | ### Return type @@ -140,17 +133,16 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/pyvcell/_internal/api/vcell_client/docs/ExportableDataType.md b/pyvcell/_internal/api/vcell_client/docs/ExportableDataType.md index cfe7391..c1f00ba 100644 --- a/pyvcell/_internal/api/vcell_client/docs/ExportableDataType.md +++ b/pyvcell/_internal/api/vcell_client/docs/ExportableDataType.md @@ -1,14 +1,11 @@ # ExportableDataType - ## Enum -* `ODE_VARIABLE_DATA` (value: `'ODE_VARIABLE_DATA'`) +- `ODE_VARIABLE_DATA` (value: `'ODE_VARIABLE_DATA'`) -* `PDE_VARIABLE_DATA` (value: `'PDE_VARIABLE_DATA'`) +- `PDE_VARIABLE_DATA` (value: `'PDE_VARIABLE_DATA'`) -* `PDE_PARTICLE_DATA` (value: `'PDE_PARTICLE_DATA'`) +- `PDE_PARTICLE_DATA` (value: `'PDE_PARTICLE_DATA'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/Extent.md b/pyvcell/_internal/api/vcell_client/docs/Extent.md index 2f5241e..ef1937d 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Extent.md +++ b/pyvcell/_internal/api/vcell_client/docs/Extent.md @@ -1,13 +1,12 @@ # Extent - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**x** | **float** | | [optional] -**y** | **float** | | [optional] -**z** | **float** | | [optional] +| Name | Type | Description | Notes | +| ----- | --------- | ----------- | ---------- | +| **x** | **float** | | [optional] | +| **y** | **float** | | [optional] | +| **z** | **float** | | [optional] | ## Example @@ -26,6 +25,5 @@ extent_dict = extent_instance.to_dict() # create an instance of Extent from a dict extent_from_dict = Extent.from_dict(extent_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md b/pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md index bbc92ca..dee013d 100644 --- a/pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md +++ b/pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md @@ -1,17 +1,16 @@ # ExternalDataIdentifier - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**key** | **str** | | [optional] -**owner** | [**User**](User.md) | | [optional] -**name** | **str** | | [optional] -**job_index** | **int** | | [optional] -**simulation_key** | **str** | | [optional] -**parameter_scan_type** | **bool** | | [optional] -**data_key** | **str** | | [optional] +| Name | Type | Description | Notes | +| ----------------------- | ------------------- | ----------- | ---------- | +| **key** | **str** | | [optional] | +| **owner** | [**User**](User.md) | | [optional] | +| **name** | **str** | | [optional] | +| **job_index** | **int** | | [optional] | +| **simulation_key** | **str** | | [optional] | +| **parameter_scan_type** | **bool** | | [optional] | +| **data_key** | **str** | | [optional] | ## Example @@ -30,6 +29,5 @@ external_data_identifier_dict = external_data_identifier_instance.to_dict() # create an instance of ExternalDataIdentifier from a dict external_data_identifier_from_dict = ExternalDataIdentifier.from_dict(external_data_identifier_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/FieldData.md b/pyvcell/_internal/api/vcell_client/docs/FieldData.md index e7f5120..27b3631 100644 --- a/pyvcell/_internal/api/vcell_client/docs/FieldData.md +++ b/pyvcell/_internal/api/vcell_client/docs/FieldData.md @@ -1,19 +1,18 @@ # FieldData - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**short_spec_data** | **List[List[List[int]]]** | | [optional] -**double_spec_data** | **List[List[List[float]]]** | | [optional] -**var_names** | **List[str]** | | [optional] -**times** | **List[float]** | | [optional] -**origin** | [**Origin**](Origin.md) | | [optional] -**extent** | [**Extent**](Extent.md) | | [optional] -**isize** | [**ISize**](ISize.md) | | [optional] -**annotation** | **str** | | [optional] -**name** | **str** | | [optional] +| Name | Type | Description | Notes | +| -------------------- | --------------------------- | ----------- | ---------- | +| **short_spec_data** | **List[List[List[int]]]** | | [optional] | +| **double_spec_data** | **List[List[List[float]]]** | | [optional] | +| **var_names** | **List[str]** | | [optional] | +| **times** | **List[float]** | | [optional] | +| **origin** | [**Origin**](Origin.md) | | [optional] | +| **extent** | [**Extent**](Extent.md) | | [optional] | +| **isize** | [**ISize**](ISize.md) | | [optional] | +| **annotation** | **str** | | [optional] | +| **name** | **str** | | [optional] | ## Example @@ -32,6 +31,5 @@ field_data_dict = field_data_instance.to_dict() # create an instance of FieldData from a dict field_data_from_dict = FieldData.from_dict(field_data_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/FieldDataReference.md b/pyvcell/_internal/api/vcell_client/docs/FieldDataReference.md index b9bbbf2..0392759 100644 --- a/pyvcell/_internal/api/vcell_client/docs/FieldDataReference.md +++ b/pyvcell/_internal/api/vcell_client/docs/FieldDataReference.md @@ -1,13 +1,12 @@ # FieldDataReference - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**field_data_id** | [**ExternalDataIdentifier**](ExternalDataIdentifier.md) | | [optional] -**annotation** | **str** | | [optional] -**simulations_referencing_this_id** | **List[str]** | | [optional] +| Name | Type | Description | Notes | +| ----------------------------------- | ------------------------------------------------------- | ----------- | ---------- | +| **field_data_id** | [**ExternalDataIdentifier**](ExternalDataIdentifier.md) | | [optional] | +| **annotation** | **str** | | [optional] | +| **simulations_referencing_this_id** | **List[str]** | | [optional] | ## Example @@ -26,6 +25,5 @@ field_data_reference_dict = field_data_reference_instance.to_dict() # create an instance of FieldDataReference from a dict field_data_reference_from_dict = FieldDataReference.from_dict(field_data_reference_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md index 144d44f..82639f7 100644 --- a/pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md @@ -1,28 +1,27 @@ -# pyvcell._internal.api.vcell_client.FieldDataResourceApi +# pyvcell.\_internal.api.vcell_client.FieldDataResourceApi All URIs are relative to *https://vcell.cam.uchc.edu* -Method | HTTP request | Description -------------- | ------------- | ------------- -[**advanced_create**](FieldDataResourceApi.md#advanced_create) | **POST** /api/v1/fieldData/advancedCreate | Create Field Data with granular detail in one request.The following files are accepted: .tif and .zip. -[**analyze_file**](FieldDataResourceApi.md#analyze_file) | **POST** /api/v1/fieldData/analyzeFile | Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and return field data. Color mapped images not supported (the colors in those images will be interpreted as separate channels). Filenames must be lowercase alphanumeric, and can contain underscores. -[**copy_models_field_data**](FieldDataResourceApi.md#copy_models_field_data) | **POST** /api/v1/fieldData/copyModelsFieldData | Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. -[**create_from_file**](FieldDataResourceApi.md#create_from_file) | **POST** /api/v1/fieldData/createFromFile | Submit a .zip or .tif file that converts into field data, with all defaults derived from the file submitted. -[**create_from_simulation**](FieldDataResourceApi.md#create_from_simulation) | **POST** /api/v1/fieldData/createFromSimulation | Create new field data from existing simulation results. -[**delete**](FieldDataResourceApi.md#delete) | **DELETE** /api/v1/fieldData/delete/{fieldDataID} | Delete the selected field data. -[**get_all_ids**](FieldDataResourceApi.md#get_all_ids) | **GET** /api/v1/fieldData/IDs | Get all of the ids used to identify, and retrieve field data. -[**get_shape_from_id**](FieldDataResourceApi.md#get_shape_from_id) | **GET** /api/v1/fieldData/shape/{fieldDataID} | Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. -[**save**](FieldDataResourceApi.md#save) | **POST** /api/v1/fieldData/save | Take the generated field data, and save it to the server. User may adjust the analyzed file before uploading to edit defaults. - +| Method | HTTP request | Description | +| ---------------------------------------------------------------------------- | ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [**advanced_create**](FieldDataResourceApi.md#advanced_create) | **POST** /api/v1/fieldData/advancedCreate | Create Field Data with granular detail in one request.The following files are accepted: .tif and .zip. | +| [**analyze_file**](FieldDataResourceApi.md#analyze_file) | **POST** /api/v1/fieldData/analyzeFile | Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and return field data. Color mapped images not supported (the colors in those images will be interpreted as separate channels). Filenames must be lowercase alphanumeric, and can contain underscores. | +| [**copy_models_field_data**](FieldDataResourceApi.md#copy_models_field_data) | **POST** /api/v1/fieldData/copyModelsFieldData | Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. | +| [**create_from_file**](FieldDataResourceApi.md#create_from_file) | **POST** /api/v1/fieldData/createFromFile | Submit a .zip or .tif file that converts into field data, with all defaults derived from the file submitted. | +| [**create_from_simulation**](FieldDataResourceApi.md#create_from_simulation) | **POST** /api/v1/fieldData/createFromSimulation | Create new field data from existing simulation results. | +| [**delete**](FieldDataResourceApi.md#delete) | **DELETE** /api/v1/fieldData/delete/{fieldDataID} | Delete the selected field data. | +| [**get_all_ids**](FieldDataResourceApi.md#get_all_ids) | **GET** /api/v1/fieldData/IDs | Get all of the ids used to identify, and retrieve field data. | +| [**get_shape_from_id**](FieldDataResourceApi.md#get_shape_from_id) | **GET** /api/v1/fieldData/shape/{fieldDataID} | Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. | +| [**save**](FieldDataResourceApi.md#save) | **POST** /api/v1/fieldData/save | Take the generated field data, and save it to the server. User may adjust the analyzed file before uploading to edit defaults. | # **advanced_create** + > FieldDataSavedResults advanced_create(file=file, file_name=file_name, extent=extent, i_size=i_size, channel_names=channel_names, times=times, annotation=annotation, origin=origin) Create Field Data with granular detail in one request.The following files are accepted: .tif and .zip. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.extent import Extent @@ -65,21 +64,18 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling FieldDataResourceApi->advanced_create: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **file** | **bytearray**| | [optional] - **file_name** | **str**| | [optional] - **extent** | [**Extent**](Extent.md)| | [optional] - **i_size** | [**ISize**](ISize.md)| | [optional] - **channel_names** | [**List[str]**](str.md)| | [optional] - **times** | [**List[float]**](float.md)| | [optional] - **annotation** | **str**| | [optional] - **origin** | [**Origin**](Origin.md)| | [optional] +| Name | Type | Description | Notes | +| ----------------- | --------------------------- | ----------- | ---------- | +| **file** | **bytearray** | | [optional] | +| **file_name** | **str** | | [optional] | +| **extent** | [**Extent**](Extent.md) | | [optional] | +| **i_size** | [**ISize**](ISize.md) | | [optional] | +| **channel_names** | [**List[str]**](str.md) | | [optional] | +| **times** | [**List[float]**](float.md) | | [optional] | +| **annotation** | **str** | | [optional] | +| **origin** | [**Origin**](Origin.md) | | [optional] | ### Return type @@ -91,29 +87,29 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: multipart/form-data - - **Accept**: application/json +- **Content-Type**: multipart/form-data +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**422** | Unprocessable content submitted | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | ------------------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **422** | Unprocessable content submitted | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **analyze_file** + > FieldData analyze_file(file=file, file_name=file_name) Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and return field data. Color mapped images not supported (the colors in those images will be interpreted as separate channels). Filenames must be lowercase alphanumeric, and can contain underscores. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.field_data import FieldData @@ -147,15 +143,12 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling FieldDataResourceApi->analyze_file: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **file** | **bytearray**| | [optional] - **file_name** | **str**| | [optional] +| Name | Type | Description | Notes | +| ------------- | ------------- | ----------- | ---------- | +| **file** | **bytearray** | | [optional] | +| **file_name** | **str** | | [optional] | ### Return type @@ -167,29 +160,29 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: multipart/form-data - - **Accept**: application/json +- **Content-Type**: multipart/form-data +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**422** | Unprocessable content submitted | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | ------------------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **422** | Unprocessable content submitted | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **copy_models_field_data** + > Dict[str, ExternalDataIdentifier] copy_models_field_data(source_model=source_model) Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.external_data_identifier import ExternalDataIdentifier @@ -223,14 +216,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling FieldDataResourceApi->copy_models_field_data: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **source_model** | [**SourceModel**](SourceModel.md)| | [optional] +| Name | Type | Description | Notes | +| ---------------- | --------------------------------- | ----------- | ---------- | +| **source_model** | [**SourceModel**](SourceModel.md) | | [optional] | ### Return type @@ -242,29 +232,29 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: application/json - - **Accept**: application/json +- **Content-Type**: application/json +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**422** | Unprocessable content submitted | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | ------------------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **422** | Unprocessable content submitted | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **create_from_file** + > FieldDataSavedResults create_from_file(file=file, field_data_name=field_data_name) Submit a .zip or .tif file that converts into field data, with all defaults derived from the file submitted. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.field_data_saved_results import FieldDataSavedResults @@ -298,15 +288,12 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling FieldDataResourceApi->create_from_file: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **file** | **bytearray**| | [optional] - **field_data_name** | **str**| | [optional] +| Name | Type | Description | Notes | +| ------------------- | ------------- | ----------- | ---------- | +| **file** | **bytearray** | | [optional] | +| **field_data_name** | **str** | | [optional] | ### Return type @@ -318,29 +305,29 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: multipart/form-data - - **Accept**: application/json +- **Content-Type**: multipart/form-data +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**422** | Unprocessable content submitted | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | ------------------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **422** | Unprocessable content submitted | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **create_from_simulation** + > create_from_simulation(sim_key_reference=sim_key_reference, job_index=job_index, new_field_data_name=new_field_data_name) Create new field data from existing simulation results. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -372,16 +359,13 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling FieldDataResourceApi->create_from_simulation: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **sim_key_reference** | **str**| | [optional] - **job_index** | **int**| | [optional] - **new_field_data_name** | **str**| | [optional] +| Name | Type | Description | Notes | +| ----------------------- | ------- | ----------- | ---------- | +| **sim_key_reference** | **str** | | [optional] | +| **job_index** | **int** | | [optional] | +| **new_field_data_name** | **str** | | [optional] | ### Return type @@ -393,28 +377,28 @@ void (empty response body) ### HTTP request headers - - **Content-Type**: application/x-www-form-urlencoded - - **Accept**: application/json +- **Content-Type**: application/x-www-form-urlencoded +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**201** | Created | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **201** | Created | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **delete** + > delete(field_data_id) Delete the selected field data. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -435,7 +419,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.FieldDataResourceApi(api_client) - field_data_id = 'field_data_id_example' # str | + field_data_id = 'field_data_id_example' # str | try: # Delete the selected field data. @@ -444,14 +428,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling FieldDataResourceApi->delete: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **field_data_id** | **str**| | +| Name | Type | Description | Notes | +| ----------------- | ------- | ----------- | ----- | +| **field_data_id** | **str** | | ### Return type @@ -463,28 +444,28 @@ void (empty response body) ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**204** | No Content | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **204** | No Content | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_all_ids** + > List[FieldDataReference] get_all_ids() Get all of the ids used to identify, and retrieve field data. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.field_data_reference import FieldDataReference @@ -516,8 +497,6 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling FieldDataResourceApi->get_all_ids: %s\n" % e) ``` - - ### Parameters This endpoint does not need any parameter. @@ -532,28 +511,28 @@ This endpoint does not need any parameter. ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_shape_from_id** + > FieldDataShape get_shape_from_id(field_data_id) Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.field_data_shape import FieldDataShape @@ -575,7 +554,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.FieldDataResourceApi(api_client) - field_data_id = 'field_data_id_example' # str | + field_data_id = 'field_data_id_example' # str | try: # Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. @@ -586,14 +565,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling FieldDataResourceApi->get_shape_from_id: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **field_data_id** | **str**| | +| Name | Type | Description | Notes | +| ----------------- | ------- | ----------- | ----- | +| **field_data_id** | **str** | | ### Return type @@ -605,29 +581,29 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**404** | Not found | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **404** | Not found | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **save** + > FieldDataSavedResults save(field_data=field_data) Take the generated field data, and save it to the server. User may adjust the analyzed file before uploading to edit defaults. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.field_data import FieldData @@ -661,14 +637,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling FieldDataResourceApi->save: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **field_data** | [**FieldData**](FieldData.md)| | [optional] +| Name | Type | Description | Notes | +| -------------- | ----------------------------- | ----------- | ---------- | +| **field_data** | [**FieldData**](FieldData.md) | | [optional] | ### Return type @@ -680,18 +653,17 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: application/json - - **Accept**: application/json +- **Content-Type**: application/json +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**422** | Unprocessable content submitted | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | ------------------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **422** | Unprocessable content submitted | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/pyvcell/_internal/api/vcell_client/docs/FieldDataSavedResults.md b/pyvcell/_internal/api/vcell_client/docs/FieldDataSavedResults.md index 315dda2..4a5b5fc 100644 --- a/pyvcell/_internal/api/vcell_client/docs/FieldDataSavedResults.md +++ b/pyvcell/_internal/api/vcell_client/docs/FieldDataSavedResults.md @@ -1,12 +1,11 @@ # FieldDataSavedResults - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**field_data_name** | **str** | | [optional] -**field_data_key** | **str** | | [optional] +| Name | Type | Description | Notes | +| ------------------- | ------- | ----------- | ---------- | +| **field_data_name** | **str** | | [optional] | +| **field_data_key** | **str** | | [optional] | ## Example @@ -25,6 +24,5 @@ field_data_saved_results_dict = field_data_saved_results_instance.to_dict() # create an instance of FieldDataSavedResults from a dict field_data_saved_results_from_dict = FieldDataSavedResults.from_dict(field_data_saved_results_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/FieldDataShape.md b/pyvcell/_internal/api/vcell_client/docs/FieldDataShape.md index d227d17..b8a2009 100644 --- a/pyvcell/_internal/api/vcell_client/docs/FieldDataShape.md +++ b/pyvcell/_internal/api/vcell_client/docs/FieldDataShape.md @@ -1,15 +1,14 @@ # FieldDataShape - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**extent** | [**Extent**](Extent.md) | | [optional] -**origin** | [**Origin**](Origin.md) | | [optional] -**isize** | [**ISize**](ISize.md) | | [optional] -**data_identifier** | [**List[DataIdentifier]**](DataIdentifier.md) | | [optional] -**times** | **List[float]** | | [optional] +| Name | Type | Description | Notes | +| ------------------- | --------------------------------------------- | ----------- | ---------- | +| **extent** | [**Extent**](Extent.md) | | [optional] | +| **origin** | [**Origin**](Origin.md) | | [optional] | +| **isize** | [**ISize**](ISize.md) | | [optional] | +| **data_identifier** | [**List[DataIdentifier]**](DataIdentifier.md) | | [optional] | +| **times** | **List[float]** | | [optional] | ## Example @@ -28,6 +27,5 @@ field_data_shape_dict = field_data_shape_instance.to_dict() # create an instance of FieldDataShape from a dict field_data_shape_from_dict = FieldDataShape.from_dict(field_data_shape_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/FunctionCategory.md b/pyvcell/_internal/api/vcell_client/docs/FunctionCategory.md index 726aa62..cd6b0d1 100644 --- a/pyvcell/_internal/api/vcell_client/docs/FunctionCategory.md +++ b/pyvcell/_internal/api/vcell_client/docs/FunctionCategory.md @@ -1,16 +1,13 @@ # FunctionCategory - ## Enum -* `PREDEFINED` (value: `'PREDEFINED'`) +- `PREDEFINED` (value: `'PREDEFINED'`) -* `OLDUSERDEFINED` (value: `'OLDUSERDEFINED'`) +- `OLDUSERDEFINED` (value: `'OLDUSERDEFINED'`) -* `OUTPUTFUNCTION` (value: `'OUTPUTFUNCTION'`) +- `OUTPUTFUNCTION` (value: `'OUTPUTFUNCTION'`) -* `POSTPROCESSFUNCTION` (value: `'POSTPROCESSFUNCTION'`) +- `POSTPROCESSFUNCTION` (value: `'POSTPROCESSFUNCTION'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/GIFImage.md b/pyvcell/_internal/api/vcell_client/docs/GIFImage.md index 72053cc..c5be17c 100644 --- a/pyvcell/_internal/api/vcell_client/docs/GIFImage.md +++ b/pyvcell/_internal/api/vcell_client/docs/GIFImage.md @@ -1,12 +1,11 @@ # GIFImage - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**gif_encoded_data** | **bytearray** | | [optional] -**size** | [**ISize**](ISize.md) | | [optional] +| Name | Type | Description | Notes | +| -------------------- | --------------------- | ----------- | ---------- | +| **gif_encoded_data** | **bytearray** | | [optional] | +| **size** | [**ISize**](ISize.md) | | [optional] | ## Example @@ -25,6 +24,5 @@ gif_image_dict = gif_image_instance.to_dict() # create an instance of GIFImage from a dict gif_image_from_dict = GIFImage.from_dict(gif_image_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/GeometryMode.md b/pyvcell/_internal/api/vcell_client/docs/GeometryMode.md index 69212ce..73579b0 100644 --- a/pyvcell/_internal/api/vcell_client/docs/GeometryMode.md +++ b/pyvcell/_internal/api/vcell_client/docs/GeometryMode.md @@ -1,14 +1,11 @@ # GeometryMode - ## Enum -* `GEOMETRY_SELECTIONS` (value: `'GEOMETRY_SELECTIONS'`) +- `GEOMETRY_SELECTIONS` (value: `'GEOMETRY_SELECTIONS'`) -* `GEOMETRY_SLICE` (value: `'GEOMETRY_SLICE'`) +- `GEOMETRY_SLICE` (value: `'GEOMETRY_SLICE'`) -* `GEOMETRY_FULL` (value: `'GEOMETRY_FULL'`) +- `GEOMETRY_FULL` (value: `'GEOMETRY_FULL'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md index 84022a3..26582d2 100644 --- a/pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md @@ -1,24 +1,23 @@ -# pyvcell._internal.api.vcell_client.GeometryResourceApi +# pyvcell.\_internal.api.vcell_client.GeometryResourceApi All URIs are relative to *https://vcell.cam.uchc.edu* -Method | HTTP request | Description -------------- | ------------- | ------------- -[**delete_geometry**](GeometryResourceApi.md#delete_geometry) | **DELETE** /api/v1/geometry/{id} | -[**get_geometry_summaries**](GeometryResourceApi.md#get_geometry_summaries) | **GET** /api/v1/geometry/summaries | -[**get_geometry_summary**](GeometryResourceApi.md#get_geometry_summary) | **GET** /api/v1/geometry/summary/{id} | -[**get_geometry_vcml**](GeometryResourceApi.md#get_geometry_vcml) | **GET** /api/v1/geometry/{id} | -[**save_geometry**](GeometryResourceApi.md#save_geometry) | **POST** /api/v1/geometry | - +| Method | HTTP request | Description | +| --------------------------------------------------------------------------- | ------------------------------------- | ----------- | +| [**delete_geometry**](GeometryResourceApi.md#delete_geometry) | **DELETE** /api/v1/geometry/{id} | +| [**get_geometry_summaries**](GeometryResourceApi.md#get_geometry_summaries) | **GET** /api/v1/geometry/summaries | +| [**get_geometry_summary**](GeometryResourceApi.md#get_geometry_summary) | **GET** /api/v1/geometry/summary/{id} | +| [**get_geometry_vcml**](GeometryResourceApi.md#get_geometry_vcml) | **GET** /api/v1/geometry/{id} | +| [**save_geometry**](GeometryResourceApi.md#save_geometry) | **POST** /api/v1/geometry | # **delete_geometry** + > delete_geometry(id) Remove specific Geometry. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -35,7 +34,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.GeometryResourceApi(api_client) - id = 'id_example' # str | + id = 'id_example' # str | try: api_instance.delete_geometry(id) @@ -43,14 +42,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling GeometryResourceApi->delete_geometry: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | +| Name | Type | Description | Notes | +| ------ | ------- | ----------- | ----- | +| **id** | **str** | | ### Return type @@ -62,29 +58,29 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**204** | No Content | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**404** | Not found | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **204** | No Content | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **404** | Not found | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_geometry_summaries** + > List[GeometrySummary] get_geometry_summaries(include_public_and_shared=include_public_and_shared) Return Geometry summaries. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.geometry_summary import GeometrySummary @@ -112,14 +108,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling GeometryResourceApi->get_geometry_summaries: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **include_public_and_shared** | **bool**| Include Geometry summaries that are public and shared with the requester. Default is true. | [optional] +| Name | Type | Description | Notes | +| ----------------------------- | -------- | ------------------------------------------------------------------------------------------ | ---------- | +| **include_public_and_shared** | **bool** | Include Geometry summaries that are public and shared with the requester. Default is true. | [optional] | ### Return type @@ -131,26 +124,26 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_geometry_summary** + > GeometrySummary get_geometry_summary(id) All of the text based information about a Geometry (dimensions, extent, origin, etc...), but not the actual Geometry itself. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.geometry_summary import GeometrySummary @@ -168,7 +161,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.GeometryResourceApi(api_client) - id = 'id_example' # str | + id = 'id_example' # str | try: api_response = api_instance.get_geometry_summary(id) @@ -178,14 +171,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling GeometryResourceApi->get_geometry_summary: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | +| Name | Type | Description | Notes | +| ------ | ------- | ----------- | ----- | +| **id** | **str** | | ### Return type @@ -197,28 +187,28 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**403** | Not Allowed | - | -**404** | Not found | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **403** | Not Allowed | - | +| **404** | Not found | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_geometry_vcml** + > str get_geometry_vcml(id) Returns as root element in VCML format. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -235,7 +225,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.GeometryResourceApi(api_client) - id = 'id_example' # str | + id = 'id_example' # str | try: api_response = api_instance.get_geometry_vcml(id) @@ -245,14 +235,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling GeometryResourceApi->get_geometry_vcml: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | +| Name | Type | Description | Notes | +| ------ | ------- | ----------- | ----- | +| **id** | **str** | | ### Return type @@ -264,28 +251,28 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/xml, application/json +- **Content-Type**: Not defined +- **Accept**: application/xml, application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**403** | Not Allowed | - | -**404** | Not found | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **403** | Not Allowed | - | +| **404** | Not found | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **save_geometry** + > str save_geometry(body, new_name=new_name) Save's VCML with as the root element. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -306,7 +293,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.GeometryResourceApi(api_client) - body = 'body_example' # str | + body = 'body_example' # str | new_name = 'new_name_example' # str | Name to save new Geometry under. Leave blank if re-saving existing Geometry. (optional) try: @@ -317,15 +304,12 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling GeometryResourceApi->save_geometry: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | **str**| | - **new_name** | **str**| Name to save new Geometry under. Leave blank if re-saving existing Geometry. | [optional] +| Name | Type | Description | Notes | +| ------------ | ------- | ---------------------------------------------------------------------------- | ---------- | +| **body** | **str** | | +| **new_name** | **str** | Name to save new Geometry under. Leave blank if re-saving existing Geometry. | [optional] | ### Return type @@ -337,18 +321,17 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: application/xml - - **Accept**: application/xml, application/json +- **Content-Type**: application/xml +- **Accept**: application/xml, application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**422** | Unprocessable content submitted | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | ------------------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **422** | Unprocessable content submitted | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/pyvcell/_internal/api/vcell_client/docs/GeometrySpecDTO.md b/pyvcell/_internal/api/vcell_client/docs/GeometrySpecDTO.md index ca62721..e6772c5 100644 --- a/pyvcell/_internal/api/vcell_client/docs/GeometrySpecDTO.md +++ b/pyvcell/_internal/api/vcell_client/docs/GeometrySpecDTO.md @@ -1,14 +1,13 @@ # GeometrySpecDTO - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**selections** | [**List[SpatialSelection]**](SpatialSelection.md) | | [optional] -**axis** | **int** | | [optional] -**slice_number** | **int** | | [optional] -**geometry_mode** | [**GeometryMode**](GeometryMode.md) | | [optional] +| Name | Type | Description | Notes | +| ----------------- | ------------------------------------------------- | ----------- | ---------- | +| **selections** | [**List[SpatialSelection]**](SpatialSelection.md) | | [optional] | +| **axis** | **int** | | [optional] | +| **slice_number** | **int** | | [optional] | +| **geometry_mode** | [**GeometryMode**](GeometryMode.md) | | [optional] | ## Example @@ -27,6 +26,5 @@ geometry_spec_dto_dict = geometry_spec_dto_instance.to_dict() # create an instance of GeometrySpecDTO from a dict geometry_spec_dto_from_dict = GeometrySpecDTO.from_dict(geometry_spec_dto_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/GeometrySummary.md b/pyvcell/_internal/api/vcell_client/docs/GeometrySummary.md index d183755..ae6284a 100644 --- a/pyvcell/_internal/api/vcell_client/docs/GeometrySummary.md +++ b/pyvcell/_internal/api/vcell_client/docs/GeometrySummary.md @@ -1,16 +1,15 @@ # GeometrySummary - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**dimension** | **int** | | [optional] -**origin** | [**Origin**](Origin.md) | | [optional] -**extent** | [**Extent**](Extent.md) | | [optional] -**image_ref** | **str** | | [optional] -**version** | [**Version**](Version.md) | | [optional] -**software_version** | [**VCellSoftwareVersion**](VCellSoftwareVersion.md) | | [optional] +| Name | Type | Description | Notes | +| -------------------- | --------------------------------------------------- | ----------- | ---------- | +| **dimension** | **int** | | [optional] | +| **origin** | [**Origin**](Origin.md) | | [optional] | +| **extent** | [**Extent**](Extent.md) | | [optional] | +| **image_ref** | **str** | | [optional] | +| **version** | [**Version**](Version.md) | | [optional] | +| **software_version** | [**VCellSoftwareVersion**](VCellSoftwareVersion.md) | | [optional] | ## Example @@ -29,6 +28,5 @@ geometry_summary_dict = geometry_summary_instance.to_dict() # create an instance of GeometrySummary from a dict geometry_summary_from_dict = GeometrySummary.from_dict(geometry_summary_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/GroupAccess.md b/pyvcell/_internal/api/vcell_client/docs/GroupAccess.md index a1a7999..dbcc8b4 100644 --- a/pyvcell/_internal/api/vcell_client/docs/GroupAccess.md +++ b/pyvcell/_internal/api/vcell_client/docs/GroupAccess.md @@ -1,12 +1,11 @@ # GroupAccess - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**groupid** | **float** | | -**description** | **str** | | [optional] +| Name | Type | Description | Notes | +| --------------- | --------- | ----------- | ---------- | +| **groupid** | **float** | | +| **description** | **str** | | [optional] | ## Example @@ -25,6 +24,5 @@ group_access_dict = group_access_instance.to_dict() # create an instance of GroupAccess from a dict group_access_from_dict = GroupAccess.from_dict(group_access_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/GroupAccessAll.md b/pyvcell/_internal/api/vcell_client/docs/GroupAccessAll.md index 69db73e..1592244 100644 --- a/pyvcell/_internal/api/vcell_client/docs/GroupAccessAll.md +++ b/pyvcell/_internal/api/vcell_client/docs/GroupAccessAll.md @@ -1,12 +1,11 @@ # GroupAccessAll - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**type** | **str** | | [default to 'GroupAccessAll'] -**description** | **str** | | [optional] +| Name | Type | Description | Notes | +| --------------- | ------- | ----------- | ----------------------------- | +| **type** | **str** | | [default to 'GroupAccessAll'] | +| **description** | **str** | | [optional] | ## Example @@ -25,6 +24,5 @@ group_access_all_dict = group_access_all_instance.to_dict() # create an instance of GroupAccessAll from a dict group_access_all_from_dict = GroupAccessAll.from_dict(group_access_all_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/GroupAccessNone.md b/pyvcell/_internal/api/vcell_client/docs/GroupAccessNone.md index 398fbe2..af624cc 100644 --- a/pyvcell/_internal/api/vcell_client/docs/GroupAccessNone.md +++ b/pyvcell/_internal/api/vcell_client/docs/GroupAccessNone.md @@ -1,12 +1,11 @@ # GroupAccessNone - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**type** | **str** | | [default to 'GroupAccessNone'] -**description** | **str** | | [optional] +| Name | Type | Description | Notes | +| --------------- | ------- | ----------- | ------------------------------ | +| **type** | **str** | | [default to 'GroupAccessNone'] | +| **description** | **str** | | [optional] | ## Example @@ -25,6 +24,5 @@ group_access_none_dict = group_access_none_instance.to_dict() # create an instance of GroupAccessNone from a dict group_access_none_from_dict = GroupAccessNone.from_dict(group_access_none_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/GroupAccessSome.md b/pyvcell/_internal/api/vcell_client/docs/GroupAccessSome.md index c19bfb1..62a488f 100644 --- a/pyvcell/_internal/api/vcell_client/docs/GroupAccessSome.md +++ b/pyvcell/_internal/api/vcell_client/docs/GroupAccessSome.md @@ -1,17 +1,16 @@ # GroupAccessSome - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**type** | **str** | | [default to 'GroupAccessSome'] -**hash** | **float** | | [optional] -**group_members** | [**List[User]**](User.md) | | [optional] -**hidden_members** | **List[bool]** | | [optional] -**description** | **str** | | [optional] -**hidden_group_members** | [**List[User]**](User.md) | | [optional] -**normal_group_members** | [**List[User]**](User.md) | | [optional] +| Name | Type | Description | Notes | +| ------------------------ | ------------------------- | ----------- | ------------------------------ | +| **type** | **str** | | [default to 'GroupAccessSome'] | +| **hash** | **float** | | [optional] | +| **group_members** | [**List[User]**](User.md) | | [optional] | +| **hidden_members** | **List[bool]** | | [optional] | +| **description** | **str** | | [optional] | +| **hidden_group_members** | [**List[User]**](User.md) | | [optional] | +| **normal_group_members** | [**List[User]**](User.md) | | [optional] | ## Example @@ -30,6 +29,5 @@ group_access_some_dict = group_access_some_instance.to_dict() # create an instance of GroupAccessSome from a dict group_access_some_from_dict = GroupAccessSome.from_dict(group_access_some_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/HelloWorldApi.md b/pyvcell/_internal/api/vcell_client/docs/HelloWorldApi.md index fb14fc8..e66a54f 100644 --- a/pyvcell/_internal/api/vcell_client/docs/HelloWorldApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/HelloWorldApi.md @@ -1,20 +1,19 @@ -# pyvcell._internal.api.vcell_client.HelloWorldApi +# pyvcell.\_internal.api.vcell_client.HelloWorldApi All URIs are relative to *https://vcell.cam.uchc.edu* -Method | HTTP request | Description -------------- | ------------- | ------------- -[**get_hello_world**](HelloWorldApi.md#get_hello_world) | **GET** /api/v1/helloworld | Get hello world message. - +| Method | HTTP request | Description | +| ------------------------------------------------------- | -------------------------- | ------------------------ | +| [**get_hello_world**](HelloWorldApi.md#get_hello_world) | **GET** /api/v1/helloworld | Get hello world message. | # **get_hello_world** + > HelloWorldMessage get_hello_world() Get hello world message. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.hello_world_message import HelloWorldMessage @@ -42,8 +41,6 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling HelloWorldApi->get_hello_world: %s\n" % e) ``` - - ### Parameters This endpoint does not need any parameter. @@ -58,15 +55,14 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details | Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**403** | Not Allowed | - | +| ----------- | ----------- | ---------------- | +| **200** | OK | - | +| **403** | Not Allowed | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/pyvcell/_internal/api/vcell_client/docs/HelloWorldMessage.md b/pyvcell/_internal/api/vcell_client/docs/HelloWorldMessage.md index e58b2d9..fe1b404 100644 --- a/pyvcell/_internal/api/vcell_client/docs/HelloWorldMessage.md +++ b/pyvcell/_internal/api/vcell_client/docs/HelloWorldMessage.md @@ -1,11 +1,10 @@ # HelloWorldMessage - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**message** | **str** | | [optional] +| Name | Type | Description | Notes | +| ----------- | ------- | ----------- | ---------- | +| **message** | **str** | | [optional] | ## Example @@ -24,6 +23,5 @@ hello_world_message_dict = hello_world_message_instance.to_dict() # create an instance of HelloWorldMessage from a dict hello_world_message_from_dict = HelloWorldMessage.from_dict(hello_world_message_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/HtcJobID.md b/pyvcell/_internal/api/vcell_client/docs/HtcJobID.md index b83606a..d80dcf2 100644 --- a/pyvcell/_internal/api/vcell_client/docs/HtcJobID.md +++ b/pyvcell/_internal/api/vcell_client/docs/HtcJobID.md @@ -1,13 +1,12 @@ # HtcJobID - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**job_number** | **int** | | [optional] -**server** | **str** | | [optional] -**batch_system_type** | [**BatchSystemType**](BatchSystemType.md) | | [optional] +| Name | Type | Description | Notes | +| --------------------- | ----------------------------------------- | ----------- | ---------- | +| **job_number** | **int** | | [optional] | +| **server** | **str** | | [optional] | +| **batch_system_type** | [**BatchSystemType**](BatchSystemType.md) | | [optional] | ## Example @@ -26,6 +25,5 @@ htc_job_id_dict = htc_job_id_instance.to_dict() # create an instance of HtcJobID from a dict htc_job_id_from_dict = HtcJobID.from_dict(htc_job_id_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/HumanReadableExportData.md b/pyvcell/_internal/api/vcell_client/docs/HumanReadableExportData.md index 90fb7ef..e824ecb 100644 --- a/pyvcell/_internal/api/vcell_client/docs/HumanReadableExportData.md +++ b/pyvcell/_internal/api/vcell_client/docs/HumanReadableExportData.md @@ -1,21 +1,20 @@ # HumanReadableExportData - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**simulation_name** | **str** | | [optional] -**biomodel_name** | **str** | | [optional] -**application_name** | **str** | | [optional] -**different_parameter_values** | **List[str]** | | [optional] -**application_type** | **str** | | [optional] -**server_saved_file_name** | **str** | | [optional] -**non_spatial** | **bool** | | [optional] -**sub_volume** | **Dict[str, str]** | | [optional] -**z_slices** | **int** | | [optional] -**t_slices** | **int** | | [optional] -**num_channels** | **int** | | [optional] +| Name | Type | Description | Notes | +| ------------------------------ | ------------------ | ----------- | ---------- | +| **simulation_name** | **str** | | [optional] | +| **biomodel_name** | **str** | | [optional] | +| **application_name** | **str** | | [optional] | +| **different_parameter_values** | **List[str]** | | [optional] | +| **application_type** | **str** | | [optional] | +| **server_saved_file_name** | **str** | | [optional] | +| **non_spatial** | **bool** | | [optional] | +| **sub_volume** | **Dict[str, str]** | | [optional] | +| **z_slices** | **int** | | [optional] | +| **t_slices** | **int** | | [optional] | +| **num_channels** | **int** | | [optional] | ## Example @@ -34,6 +33,5 @@ human_readable_export_data_dict = human_readable_export_data_instance.to_dict() # create an instance of HumanReadableExportData from a dict human_readable_export_data_from_dict = HumanReadableExportData.from_dict(human_readable_export_data_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/ISize.md b/pyvcell/_internal/api/vcell_client/docs/ISize.md index 45c0107..fd44862 100644 --- a/pyvcell/_internal/api/vcell_client/docs/ISize.md +++ b/pyvcell/_internal/api/vcell_client/docs/ISize.md @@ -1,13 +1,12 @@ # ISize - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**x** | **int** | | [optional] -**y** | **int** | | [optional] -**z** | **int** | | [optional] +| Name | Type | Description | Notes | +| ----- | ------- | ----------- | ---------- | +| **x** | **int** | | [optional] | +| **y** | **int** | | [optional] | +| **z** | **int** | | [optional] | ## Example @@ -26,6 +25,5 @@ i_size_dict = i_size_instance.to_dict() # create an instance of ISize from a dict i_size_from_dict = ISize.from_dict(i_size_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/Identity.md b/pyvcell/_internal/api/vcell_client/docs/Identity.md index ec24c96..3dc10be 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Identity.md +++ b/pyvcell/_internal/api/vcell_client/docs/Identity.md @@ -1,14 +1,13 @@ # Identity - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**principal_name** | **str** | | [optional] -**roles** | **List[str]** | | [optional] -**attributes** | **List[str]** | | [optional] -**credentials** | **List[str]** | | [optional] +| Name | Type | Description | Notes | +| ------------------ | ------------- | ----------- | ---------- | +| **principal_name** | **str** | | [optional] | +| **roles** | **List[str]** | | [optional] | +| **attributes** | **List[str]** | | [optional] | +| **credentials** | **List[str]** | | [optional] | ## Example @@ -27,6 +26,5 @@ identity_dict = identity_instance.to_dict() # create an instance of Identity from a dict identity_from_dict = Identity.from_dict(identity_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/MathModelChildSummary.md b/pyvcell/_internal/api/vcell_client/docs/MathModelChildSummary.md index b6f590f..d03445c 100644 --- a/pyvcell/_internal/api/vcell_client/docs/MathModelChildSummary.md +++ b/pyvcell/_internal/api/vcell_client/docs/MathModelChildSummary.md @@ -1,15 +1,14 @@ # MathModelChildSummary - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**model_type** | [**MathType**](MathType.md) | | [optional] -**geometry_dimension** | **int** | | [optional] -**geometry_name** | **str** | | [optional] -**simulation_annotations** | **List[str]** | | [optional] -**simulation_names** | **List[str]** | | [optional] +| Name | Type | Description | Notes | +| -------------------------- | --------------------------- | ----------- | ---------- | +| **model_type** | [**MathType**](MathType.md) | | [optional] | +| **geometry_dimension** | **int** | | [optional] | +| **geometry_name** | **str** | | [optional] | +| **simulation_annotations** | **List[str]** | | [optional] | +| **simulation_names** | **List[str]** | | [optional] | ## Example @@ -28,6 +27,5 @@ math_model_child_summary_dict = math_model_child_summary_instance.to_dict() # create an instance of MathModelChildSummary from a dict math_model_child_summary_from_dict = MathModelChildSummary.from_dict(math_model_child_summary_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md index 2b2d17f..926696b 100644 --- a/pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md @@ -1,24 +1,23 @@ -# pyvcell._internal.api.vcell_client.MathModelResourceApi +# pyvcell.\_internal.api.vcell_client.MathModelResourceApi All URIs are relative to *https://vcell.cam.uchc.edu* -Method | HTTP request | Description -------------- | ------------- | ------------- -[**delete_math_model**](MathModelResourceApi.md#delete_math_model) | **DELETE** /api/v1/mathModel/{id} | -[**get_summaries**](MathModelResourceApi.md#get_summaries) | **GET** /api/v1/mathModel/summaries | -[**get_summary**](MathModelResourceApi.md#get_summary) | **GET** /api/v1/mathModel/summary/{id} | -[**get_vcml**](MathModelResourceApi.md#get_vcml) | **GET** /api/v1/mathModel/{id} | -[**save_math_model**](MathModelResourceApi.md#save_math_model) | **POST** /api/v1/mathModel | - +| Method | HTTP request | Description | +| ------------------------------------------------------------------ | -------------------------------------- | ----------- | +| [**delete_math_model**](MathModelResourceApi.md#delete_math_model) | **DELETE** /api/v1/mathModel/{id} | +| [**get_summaries**](MathModelResourceApi.md#get_summaries) | **GET** /api/v1/mathModel/summaries | +| [**get_summary**](MathModelResourceApi.md#get_summary) | **GET** /api/v1/mathModel/summary/{id} | +| [**get_vcml**](MathModelResourceApi.md#get_vcml) | **GET** /api/v1/mathModel/{id} | +| [**save_math_model**](MathModelResourceApi.md#save_math_model) | **POST** /api/v1/mathModel | # **delete_math_model** + > delete_math_model(id) Remove specific Math Model. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -35,7 +34,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.MathModelResourceApi(api_client) - id = 'id_example' # str | + id = 'id_example' # str | try: api_instance.delete_math_model(id) @@ -43,14 +42,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling MathModelResourceApi->delete_math_model: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | +| Name | Type | Description | Notes | +| ------ | ------- | ----------- | ----- | +| **id** | **str** | | ### Return type @@ -62,29 +58,29 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**204** | No Content | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**404** | Not found | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **204** | No Content | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **404** | Not found | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_summaries** + > List[MathModelSummary] get_summaries(include_public_and_shared=include_public_and_shared) Return MathModel summaries. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.math_model_summary import MathModelSummary @@ -112,14 +108,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling MathModelResourceApi->get_summaries: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **include_public_and_shared** | **bool**| Include MathModel summaries that are public and shared with the requester. Default is true. | [optional] +| Name | Type | Description | Notes | +| ----------------------------- | -------- | ------------------------------------------------------------------------------------------- | ---------- | +| **include_public_and_shared** | **bool** | Include MathModel summaries that are public and shared with the requester. Default is true. | [optional] | ### Return type @@ -131,26 +124,26 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_summary** + > MathModelSummary get_summary(id) All of the text based information about a MathModel (summary, version, publication status, etc...), but not the actual MathModel itself. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.math_model_summary import MathModelSummary @@ -168,7 +161,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.MathModelResourceApi(api_client) - id = 'id_example' # str | + id = 'id_example' # str | try: api_response = api_instance.get_summary(id) @@ -178,14 +171,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling MathModelResourceApi->get_summary: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | +| Name | Type | Description | Notes | +| ------ | ------- | ----------- | ----- | +| **id** | **str** | | ### Return type @@ -197,28 +187,28 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**403** | Not Allowed | - | -**404** | Not found | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **403** | Not Allowed | - | +| **404** | Not found | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_vcml** + > str get_vcml(id) Returns MathModel in VCML format. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -235,7 +225,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.MathModelResourceApi(api_client) - id = 'id_example' # str | + id = 'id_example' # str | try: api_response = api_instance.get_vcml(id) @@ -245,14 +235,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling MathModelResourceApi->get_vcml: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | +| Name | Type | Description | Notes | +| ------ | ------- | ----------- | ----- | +| **id** | **str** | | ### Return type @@ -264,26 +251,26 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/xml, application/json +- **Content-Type**: Not defined +- **Accept**: application/xml, application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**403** | Not Allowed | - | -**404** | Not found | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **403** | Not Allowed | - | +| **404** | Not found | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **save_math_model** + > str save_math_model(body, new_name=new_name, sim_names=sim_names) ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -304,7 +291,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.MathModelResourceApi(api_client) - body = 'body_example' # str | + body = 'body_example' # str | new_name = 'new_name_example' # str | Name to save new MathModel under. Leave blank if re-saving existing MathModel. (optional) sim_names = ['sim_names_example'] # List[str] | The name of simulations that will be prepared for future execution. (optional) @@ -316,16 +303,13 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling MathModelResourceApi->save_math_model: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | **str**| | - **new_name** | **str**| Name to save new MathModel under. Leave blank if re-saving existing MathModel. | [optional] - **sim_names** | [**List[str]**](str.md)| The name of simulations that will be prepared for future execution. | [optional] +| Name | Type | Description | Notes | +| ------------- | ----------------------- | ------------------------------------------------------------------------------ | ---------- | +| **body** | **str** | | +| **new_name** | **str** | Name to save new MathModel under. Leave blank if re-saving existing MathModel. | [optional] | +| **sim_names** | [**List[str]**](str.md) | The name of simulations that will be prepared for future execution. | [optional] | ### Return type @@ -337,18 +321,17 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: application/xml - - **Accept**: application/xml, application/json +- **Content-Type**: application/xml +- **Accept**: application/xml, application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**422** | Unprocessable content submitted | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | ------------------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **422** | Unprocessable content submitted | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/pyvcell/_internal/api/vcell_client/docs/MathModelSummary.md b/pyvcell/_internal/api/vcell_client/docs/MathModelSummary.md index fcda35d..bc2c0e0 100644 --- a/pyvcell/_internal/api/vcell_client/docs/MathModelSummary.md +++ b/pyvcell/_internal/api/vcell_client/docs/MathModelSummary.md @@ -1,16 +1,15 @@ # MathModelSummary - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**version** | [**Version**](Version.md) | | [optional] -**key_value** | **str** | | [optional] -**model_info** | [**MathModelChildSummary**](MathModelChildSummary.md) | | [optional] -**software_version** | [**VCellSoftwareVersion**](VCellSoftwareVersion.md) | | [optional] -**publication_infos** | [**List[PublicationInfo]**](PublicationInfo.md) | | [optional] -**annotated_functions** | **str** | | [optional] +| Name | Type | Description | Notes | +| ----------------------- | ----------------------------------------------------- | ----------- | ---------- | +| **version** | [**Version**](Version.md) | | [optional] | +| **key_value** | **str** | | [optional] | +| **model_info** | [**MathModelChildSummary**](MathModelChildSummary.md) | | [optional] | +| **software_version** | [**VCellSoftwareVersion**](VCellSoftwareVersion.md) | | [optional] | +| **publication_infos** | [**List[PublicationInfo]**](PublicationInfo.md) | | [optional] | +| **annotated_functions** | **str** | | [optional] | ## Example @@ -29,6 +28,5 @@ math_model_summary_dict = math_model_summary_instance.to_dict() # create an instance of MathModelSummary from a dict math_model_summary_from_dict = MathModelSummary.from_dict(math_model_summary_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/MathType.md b/pyvcell/_internal/api/vcell_client/docs/MathType.md index 12c6ee8..149f297 100644 --- a/pyvcell/_internal/api/vcell_client/docs/MathType.md +++ b/pyvcell/_internal/api/vcell_client/docs/MathType.md @@ -1,18 +1,15 @@ # MathType - ## Enum -* `RULEBASED` (value: `'RuleBased'`) +- `RULEBASED` (value: `'RuleBased'`) -* `STOCHASTIC` (value: `'Stochastic'`) +- `STOCHASTIC` (value: `'Stochastic'`) -* `DETERMINISTIC` (value: `'Deterministic'`) +- `DETERMINISTIC` (value: `'Deterministic'`) -* `SPRINGSALAD` (value: `'SpringSaLaD'`) +- `SPRINGSALAD` (value: `'SpringSaLaD'`) -* `UNKNOWN` (value: `'Unknown'`) +- `UNKNOWN` (value: `'Unknown'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/MathmodelRef.md b/pyvcell/_internal/api/vcell_client/docs/MathmodelRef.md index 287e48f..b4c94fb 100644 --- a/pyvcell/_internal/api/vcell_client/docs/MathmodelRef.md +++ b/pyvcell/_internal/api/vcell_client/docs/MathmodelRef.md @@ -1,15 +1,14 @@ # MathmodelRef - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**mm_key** | **int** | | [optional] -**name** | **str** | | [optional] -**owner_name** | **str** | | [optional] -**owner_key** | **int** | | [optional] -**version_flag** | **int** | | [optional] +| Name | Type | Description | Notes | +| ---------------- | ------- | ----------- | ---------- | +| **mm_key** | **int** | | [optional] | +| **name** | **str** | | [optional] | +| **owner_name** | **str** | | [optional] | +| **owner_key** | **int** | | [optional] | +| **version_flag** | **int** | | [optional] | ## Example @@ -28,6 +27,5 @@ mathmodel_ref_dict = mathmodel_ref_instance.to_dict() # create an instance of MathmodelRef from a dict mathmodel_ref_from_dict = MathmodelRef.from_dict(mathmodel_ref_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/ModelType.md b/pyvcell/_internal/api/vcell_client/docs/ModelType.md index 8800e13..31a1013 100644 --- a/pyvcell/_internal/api/vcell_client/docs/ModelType.md +++ b/pyvcell/_internal/api/vcell_client/docs/ModelType.md @@ -1,12 +1,9 @@ # ModelType - ## Enum -* `BIOMODEL` (value: `'BIOMODEL'`) +- `BIOMODEL` (value: `'BIOMODEL'`) -* `MATHMODEL` (value: `'MATHMODEL'`) +- `MATHMODEL` (value: `'MATHMODEL'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/N5ExportRequest.md b/pyvcell/_internal/api/vcell_client/docs/N5ExportRequest.md index fba7bd0..a141c9c 100644 --- a/pyvcell/_internal/api/vcell_client/docs/N5ExportRequest.md +++ b/pyvcell/_internal/api/vcell_client/docs/N5ExportRequest.md @@ -1,14 +1,13 @@ # N5ExportRequest - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**standard_export_information** | [**StandardExportInfo**](StandardExportInfo.md) | | [optional] -**sub_volume** | **Dict[str, str]** | | [optional] -**exportable_data_type** | [**ExportableDataType**](ExportableDataType.md) | | [optional] -**dataset_name** | **str** | | [optional] +| Name | Type | Description | Notes | +| ------------------------------- | ----------------------------------------------- | ----------- | ---------- | +| **standard_export_information** | [**StandardExportInfo**](StandardExportInfo.md) | | [optional] | +| **sub_volume** | **Dict[str, str]** | | [optional] | +| **exportable_data_type** | [**ExportableDataType**](ExportableDataType.md) | | [optional] | +| **dataset_name** | **str** | | [optional] | ## Example @@ -27,6 +26,5 @@ n5_export_request_dict = n5_export_request_instance.to_dict() # create an instance of N5ExportRequest from a dict n5_export_request_from_dict = N5ExportRequest.from_dict(n5_export_request_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/Origin.md b/pyvcell/_internal/api/vcell_client/docs/Origin.md index b3e4401..80cefe7 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Origin.md +++ b/pyvcell/_internal/api/vcell_client/docs/Origin.md @@ -1,13 +1,12 @@ # Origin - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**x** | **float** | | [optional] -**y** | **float** | | [optional] -**z** | **float** | | [optional] +| Name | Type | Description | Notes | +| ----- | --------- | ----------- | ---------- | +| **x** | **float** | | [optional] | +| **y** | **float** | | [optional] | +| **z** | **float** | | [optional] | ## Example @@ -26,6 +25,5 @@ origin_dict = origin_instance.to_dict() # create an instance of Origin from a dict origin_from_dict = Origin.from_dict(origin_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/Publication.md b/pyvcell/_internal/api/vcell_client/docs/Publication.md index fd5e15d..a0992ac 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Publication.md +++ b/pyvcell/_internal/api/vcell_client/docs/Publication.md @@ -1,23 +1,22 @@ # Publication - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**pub_key** | **int** | | [optional] -**title** | **str** | | [optional] -**authors** | **List[str]** | | [optional] -**year** | **int** | | [optional] -**citation** | **str** | | [optional] -**pubmedid** | **str** | | [optional] -**doi** | **str** | | [optional] -**endnoteid** | **int** | | [optional] -**url** | **str** | | [optional] -**wittid** | **int** | | [optional] -**biomodel_refs** | [**List[BiomodelRef]**](BiomodelRef.md) | | [optional] -**mathmodel_refs** | [**List[MathmodelRef]**](MathmodelRef.md) | | [optional] -**var_date** | **date** | | [optional] +| Name | Type | Description | Notes | +| ------------------ | ----------------------------------------- | ----------- | ---------- | +| **pub_key** | **int** | | [optional] | +| **title** | **str** | | [optional] | +| **authors** | **List[str]** | | [optional] | +| **year** | **int** | | [optional] | +| **citation** | **str** | | [optional] | +| **pubmedid** | **str** | | [optional] | +| **doi** | **str** | | [optional] | +| **endnoteid** | **int** | | [optional] | +| **url** | **str** | | [optional] | +| **wittid** | **int** | | [optional] | +| **biomodel_refs** | [**List[BiomodelRef]**](BiomodelRef.md) | | [optional] | +| **mathmodel_refs** | [**List[MathmodelRef]**](MathmodelRef.md) | | [optional] | +| **var_date** | **date** | | [optional] | ## Example @@ -36,6 +35,5 @@ publication_dict = publication_instance.to_dict() # create an instance of Publication from a dict publication_from_dict = Publication.from_dict(publication_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/PublicationInfo.md b/pyvcell/_internal/api/vcell_client/docs/PublicationInfo.md index 1c3ff69..e0844b4 100644 --- a/pyvcell/_internal/api/vcell_client/docs/PublicationInfo.md +++ b/pyvcell/_internal/api/vcell_client/docs/PublicationInfo.md @@ -1,22 +1,21 @@ # PublicationInfo - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**publication_key** | **str** | | [optional] -**version_key** | **str** | | [optional] -**title** | **str** | | [optional] -**authors** | **List[str]** | | [optional] -**citation** | **str** | | [optional] -**pubmedid** | **str** | | [optional] -**doi** | **str** | | [optional] -**url** | **str** | | [optional] -**pubdate** | **date** | | [optional] -**vc_document_type** | [**VCDocumentType**](VCDocumentType.md) | | [optional] -**user** | [**User**](User.md) | | [optional] -**the_hash_code** | **int** | | [optional] +| Name | Type | Description | Notes | +| -------------------- | --------------------------------------- | ----------- | ---------- | +| **publication_key** | **str** | | [optional] | +| **version_key** | **str** | | [optional] | +| **title** | **str** | | [optional] | +| **authors** | **List[str]** | | [optional] | +| **citation** | **str** | | [optional] | +| **pubmedid** | **str** | | [optional] | +| **doi** | **str** | | [optional] | +| **url** | **str** | | [optional] | +| **pubdate** | **date** | | [optional] | +| **vc_document_type** | [**VCDocumentType**](VCDocumentType.md) | | [optional] | +| **user** | [**User**](User.md) | | [optional] | +| **the_hash_code** | **int** | | [optional] | ## Example @@ -35,6 +34,5 @@ publication_info_dict = publication_info_instance.to_dict() # create an instance of PublicationInfo from a dict publication_info_from_dict = PublicationInfo.from_dict(publication_info_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md index 4af56c0..b031d17 100644 --- a/pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md @@ -1,24 +1,23 @@ -# pyvcell._internal.api.vcell_client.PublicationResourceApi +# pyvcell.\_internal.api.vcell_client.PublicationResourceApi All URIs are relative to *https://vcell.cam.uchc.edu* -Method | HTTP request | Description -------------- | ------------- | ------------- -[**create_publication**](PublicationResourceApi.md#create_publication) | **POST** /api/v1/publications | Create publication -[**delete_publication**](PublicationResourceApi.md#delete_publication) | **DELETE** /api/v1/publications/{id} | Delete publication -[**get_publication_by_id**](PublicationResourceApi.md#get_publication_by_id) | **GET** /api/v1/publications/{id} | Get publication by ID -[**get_publications**](PublicationResourceApi.md#get_publications) | **GET** /api/v1/publications | Get all publications -[**update_publication**](PublicationResourceApi.md#update_publication) | **PUT** /api/v1/publications | Update publication - +| Method | HTTP request | Description | +| ---------------------------------------------------------------------------- | ------------------------------------ | --------------------- | +| [**create_publication**](PublicationResourceApi.md#create_publication) | **POST** /api/v1/publications | Create publication | +| [**delete_publication**](PublicationResourceApi.md#delete_publication) | **DELETE** /api/v1/publications/{id} | Delete publication | +| [**get_publication_by_id**](PublicationResourceApi.md#get_publication_by_id) | **GET** /api/v1/publications/{id} | Get publication by ID | +| [**get_publications**](PublicationResourceApi.md#get_publications) | **GET** /api/v1/publications | Get all publications | +| [**update_publication**](PublicationResourceApi.md#update_publication) | **PUT** /api/v1/publications | Update publication | # **create_publication** + > int create_publication(publication=publication) Create publication ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.publication import Publication @@ -51,14 +50,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling PublicationResourceApi->create_publication: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **publication** | [**Publication**](Publication.md)| | [optional] +| Name | Type | Description | Notes | +| --------------- | --------------------------------- | ----------- | ---------- | +| **publication** | [**Publication**](Publication.md) | | [optional] | ### Return type @@ -70,28 +66,28 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: application/json - - **Accept**: application/json +- **Content-Type**: application/json +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **delete_publication** + > delete_publication(id) Delete publication ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -112,7 +108,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.PublicationResourceApi(api_client) - id = 56 # int | + id = 56 # int | try: # Delete publication @@ -121,14 +117,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling PublicationResourceApi->delete_publication: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **int**| | +| Name | Type | Description | Notes | +| ------ | ------- | ----------- | ----- | +| **id** | **int** | | ### Return type @@ -140,29 +133,29 @@ void (empty response body) ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**204** | No Content | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**404** | Not found | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **204** | No Content | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **404** | Not found | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_publication_by_id** + > Publication get_publication_by_id(id) Get publication by ID ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.publication import Publication @@ -180,7 +173,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.PublicationResourceApi(api_client) - id = 56 # int | + id = 56 # int | try: # Get publication by ID @@ -191,14 +184,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling PublicationResourceApi->get_publication_by_id: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **int**| | +| Name | Type | Description | Notes | +| ------ | ------- | ----------- | ----- | +| **id** | **int** | | ### Return type @@ -210,26 +200,26 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_publications** + > List[Publication] get_publications() Get all publications ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.publication import Publication @@ -257,8 +247,6 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling PublicationResourceApi->get_publications: %s\n" % e) ``` - - ### Parameters This endpoint does not need any parameter. @@ -273,26 +261,26 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **update_publication** + > Publication update_publication(publication=publication) Update publication ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.publication import Publication @@ -325,14 +313,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling PublicationResourceApi->update_publication: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **publication** | [**Publication**](Publication.md)| | [optional] +| Name | Type | Description | Notes | +| --------------- | --------------------------------- | ----------- | ---------- | +| **publication** | [**Publication**](Publication.md) | | [optional] | ### Return type @@ -344,17 +329,16 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: application/json - - **Accept**: application/json +- **Content-Type**: application/json +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/pyvcell/_internal/api/vcell_client/docs/SPECIALCLAIM.md b/pyvcell/_internal/api/vcell_client/docs/SPECIALCLAIM.md index 235a46d..5b62697 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SPECIALCLAIM.md +++ b/pyvcell/_internal/api/vcell_client/docs/SPECIALCLAIM.md @@ -1,16 +1,13 @@ # SPECIALCLAIM - ## Enum -* `ADMINS` (value: `'admins'`) +- `ADMINS` (value: `'admins'`) -* `POWERUSERS` (value: `'powerUsers'`) +- `POWERUSERS` (value: `'powerUsers'`) -* `PUBLICATIONEDITORS` (value: `'publicationEditors'`) +- `PUBLICATIONEDITORS` (value: `'publicationEditors'`) -* `VCELLSUPPORT` (value: `'vcellSupport'`) +- `VCELLSUPPORT` (value: `'vcellSupport'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/SampledCurve.md b/pyvcell/_internal/api/vcell_client/docs/SampledCurve.md index 8267c06..d26aded 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SampledCurve.md +++ b/pyvcell/_internal/api/vcell_client/docs/SampledCurve.md @@ -1,16 +1,15 @@ # SampledCurve - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**type** | **str** | | [default to 'SampledCurve'] -**default_num_samples** | **int** | | [optional] -**max_control_points** | **int** | | [optional] -**min_control_points** | **int** | | [optional] -**segment_count** | **int** | | [optional] -**spatial_length** | **float** | | [optional] +| Name | Type | Description | Notes | +| ----------------------- | --------- | ----------- | --------------------------- | +| **type** | **str** | | [default to 'SampledCurve'] | +| **default_num_samples** | **int** | | [optional] | +| **max_control_points** | **int** | | [optional] | +| **min_control_points** | **int** | | [optional] | +| **segment_count** | **int** | | [optional] | +| **spatial_length** | **float** | | [optional] | ## Example @@ -29,6 +28,5 @@ sampled_curve_dict = sampled_curve_instance.to_dict() # create an instance of SampledCurve from a dict sampled_curve_from_dict = SampledCurve.from_dict(sampled_curve_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/SchedulerStatus.md b/pyvcell/_internal/api/vcell_client/docs/SchedulerStatus.md index 2065b83..abc050c 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SchedulerStatus.md +++ b/pyvcell/_internal/api/vcell_client/docs/SchedulerStatus.md @@ -1,22 +1,19 @@ # SchedulerStatus - ## Enum -* `WAITING` (value: `'WAITING'`) +- `WAITING` (value: `'WAITING'`) -* `QUEUED` (value: `'QUEUED'`) +- `QUEUED` (value: `'QUEUED'`) -* `DISPATCHED` (value: `'DISPATCHED'`) +- `DISPATCHED` (value: `'DISPATCHED'`) -* `RUNNING` (value: `'RUNNING'`) +- `RUNNING` (value: `'RUNNING'`) -* `COMPLETED` (value: `'COMPLETED'`) +- `COMPLETED` (value: `'COMPLETED'`) -* `STOPPED` (value: `'STOPPED'`) +- `STOPPED` (value: `'STOPPED'`) -* `FAILED` (value: `'FAILED'`) +- `FAILED` (value: `'FAILED'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md b/pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md index ea90f95..fed941b 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md @@ -1,16 +1,15 @@ # SimulationExecutionStatusRecord - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**field_start_date** | **datetime** | | [optional] -**field_latest_update_date** | **datetime** | | [optional] -**field_end_date** | **datetime** | | [optional] -**field_compute_host** | **str** | | [optional] -**field_has_data** | **bool** | | [optional] -**field_htc_job_id** | [**HtcJobID**](HtcJobID.md) | | [optional] +| Name | Type | Description | Notes | +| ---------------------------- | --------------------------- | ----------- | ---------- | +| **field_start_date** | **datetime** | | [optional] | +| **field_latest_update_date** | **datetime** | | [optional] | +| **field_end_date** | **datetime** | | [optional] | +| **field_compute_host** | **str** | | [optional] | +| **field_has_data** | **bool** | | [optional] | +| **field_htc_job_id** | [**HtcJobID**](HtcJobID.md) | | [optional] | ## Example @@ -29,6 +28,5 @@ simulation_execution_status_record_dict = simulation_execution_status_record_ins # create an instance of SimulationExecutionStatusRecord from a dict simulation_execution_status_record_from_dict = SimulationExecutionStatusRecord.from_dict(simulation_execution_status_record_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/SimulationJobStatusRecord.md b/pyvcell/_internal/api/vcell_client/docs/SimulationJobStatusRecord.md index e71bf0a..6620065 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationJobStatusRecord.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationJobStatusRecord.md @@ -1,20 +1,19 @@ # SimulationJobStatusRecord - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**field_time_data_stamp** | **datetime** | | [optional] -**field_vc_sim_id** | [**VCSimulationIdentifier**](VCSimulationIdentifier.md) | | [optional] -**field_submit_date** | **datetime** | | [optional] -**field_scheduler_status** | [**SchedulerStatus**](SchedulerStatus.md) | | [optional] -**field_simulation_message** | [**SimulationMessage**](SimulationMessage.md) | | [optional] -**field_task_id** | **int** | | [optional] -**field_server_id** | **str** | | [optional] -**field_job_index** | **int** | | [optional] -**field_simulation_execution_status** | [**SimulationExecutionStatusRecord**](SimulationExecutionStatusRecord.md) | | [optional] -**field_simulation_queue_entry_status** | [**SimulationQueueEntryStatusRecord**](SimulationQueueEntryStatusRecord.md) | | [optional] +| Name | Type | Description | Notes | +| --------------------------------------- | --------------------------------------------------------------------------- | ----------- | ---------- | +| **field_time_data_stamp** | **datetime** | | [optional] | +| **field_vc_sim_id** | [**VCSimulationIdentifier**](VCSimulationIdentifier.md) | | [optional] | +| **field_submit_date** | **datetime** | | [optional] | +| **field_scheduler_status** | [**SchedulerStatus**](SchedulerStatus.md) | | [optional] | +| **field_simulation_message** | [**SimulationMessage**](SimulationMessage.md) | | [optional] | +| **field_task_id** | **int** | | [optional] | +| **field_server_id** | **str** | | [optional] | +| **field_job_index** | **int** | | [optional] | +| **field_simulation_execution_status** | [**SimulationExecutionStatusRecord**](SimulationExecutionStatusRecord.md) | | [optional] | +| **field_simulation_queue_entry_status** | [**SimulationQueueEntryStatusRecord**](SimulationQueueEntryStatusRecord.md) | | [optional] | ## Example @@ -33,6 +32,5 @@ simulation_job_status_record_dict = simulation_job_status_record_instance.to_dic # create an instance of SimulationJobStatusRecord from a dict simulation_job_status_record_from_dict = SimulationJobStatusRecord.from_dict(simulation_job_status_record_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/SimulationMessage.md b/pyvcell/_internal/api/vcell_client/docs/SimulationMessage.md index 4255d67..1c086fb 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationMessage.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationMessage.md @@ -1,14 +1,13 @@ # SimulationMessage - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**detailed_state** | [**DetailedState**](DetailedState.md) | | [optional] -**message** | **str** | | [optional] -**htc_job_id** | [**HtcJobID**](HtcJobID.md) | | [optional] -**display_message** | **str** | | [optional] +| Name | Type | Description | Notes | +| ------------------- | ------------------------------------- | ----------- | ---------- | +| **detailed_state** | [**DetailedState**](DetailedState.md) | | [optional] | +| **message** | **str** | | [optional] | +| **htc_job_id** | [**HtcJobID**](HtcJobID.md) | | [optional] | +| **display_message** | **str** | | [optional] | ## Example @@ -27,6 +26,5 @@ simulation_message_dict = simulation_message_instance.to_dict() # create an instance of SimulationMessage from a dict simulation_message_from_dict = SimulationMessage.from_dict(simulation_message_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md b/pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md index 19bb5f7..bbe6985 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md @@ -1,13 +1,12 @@ # SimulationQueueEntryStatusRecord - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**field_queue_priority** | **int** | | [optional] -**field_queue_date** | **datetime** | | [optional] -**field_queue_id** | [**SimulationQueueID**](SimulationQueueID.md) | | [optional] +| Name | Type | Description | Notes | +| ------------------------ | --------------------------------------------- | ----------- | ---------- | +| **field_queue_priority** | **int** | | [optional] | +| **field_queue_date** | **datetime** | | [optional] | +| **field_queue_id** | [**SimulationQueueID**](SimulationQueueID.md) | | [optional] | ## Example @@ -26,6 +25,5 @@ simulation_queue_entry_status_record_dict = simulation_queue_entry_status_record # create an instance of SimulationQueueEntryStatusRecord from a dict simulation_queue_entry_status_record_from_dict = SimulationQueueEntryStatusRecord.from_dict(simulation_queue_entry_status_record_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/SimulationQueueID.md b/pyvcell/_internal/api/vcell_client/docs/SimulationQueueID.md index 6d8f422..67dda8e 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationQueueID.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationQueueID.md @@ -1,14 +1,11 @@ # SimulationQueueID - ## Enum -* `QUEUE_ID_WAITING` (value: `'QUEUE_ID_WAITING'`) +- `QUEUE_ID_WAITING` (value: `'QUEUE_ID_WAITING'`) -* `QUEUE_ID_SIMULATIONJOB` (value: `'QUEUE_ID_SIMULATIONJOB'`) +- `QUEUE_ID_SIMULATIONJOB` (value: `'QUEUE_ID_SIMULATIONJOB'`) -* `QUEUE_ID_NULL` (value: `'QUEUE_ID_NULL'`) +- `QUEUE_ID_NULL` (value: `'QUEUE_ID_NULL'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md index 3342fb0..ea14ed3 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md @@ -1,22 +1,21 @@ -# pyvcell._internal.api.vcell_client.SimulationResourceApi +# pyvcell.\_internal.api.vcell_client.SimulationResourceApi All URIs are relative to *https://vcell.cam.uchc.edu* -Method | HTTP request | Description -------------- | ------------- | ------------- -[**get_simulation_status**](SimulationResourceApi.md#get_simulation_status) | **GET** /api/v1/Simulation/{simID}/simulationStatus | Get the status of simulation running -[**start_simulation**](SimulationResourceApi.md#start_simulation) | **POST** /api/v1/Simulation/{simID}/startSimulation | Start a simulation. -[**stop_simulation**](SimulationResourceApi.md#stop_simulation) | **POST** /api/v1/Simulation/{simID}/stopSimulation | Stop a simulation. - +| Method | HTTP request | Description | +| --------------------------------------------------------------------------- | --------------------------------------------------- | ------------------------------------ | +| [**get_simulation_status**](SimulationResourceApi.md#get_simulation_status) | **GET** /api/v1/Simulation/{simID}/simulationStatus | Get the status of simulation running | +| [**start_simulation**](SimulationResourceApi.md#start_simulation) | **POST** /api/v1/Simulation/{simID}/startSimulation | Start a simulation. | +| [**stop_simulation**](SimulationResourceApi.md#stop_simulation) | **POST** /api/v1/Simulation/{simID}/stopSimulation | Stop a simulation. | # **get_simulation_status** + > SimulationStatusPersistentRecord get_simulation_status(sim_id, bio_model_id=bio_model_id, math_model_id=math_model_id) Get the status of simulation running ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import SimulationStatusPersistentRecord @@ -38,7 +37,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.SimulationResourceApi(api_client) - sim_id = 'sim_id_example' # str | + sim_id = 'sim_id_example' # str | bio_model_id = 'bio_model_id_example' # str | (optional) math_model_id = 'math_model_id_example' # str | (optional) @@ -51,16 +50,13 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling SimulationResourceApi->get_simulation_status: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **sim_id** | **str**| | - **bio_model_id** | **str**| | [optional] - **math_model_id** | **str**| | [optional] +| Name | Type | Description | Notes | +| ----------------- | ------- | ----------- | ---------- | +| **sim_id** | **str** | | +| **bio_model_id** | **str** | | [optional] | +| **math_model_id** | **str** | | [optional] | ### Return type @@ -72,28 +68,28 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **start_simulation** + > List[StatusMessage] start_simulation(sim_id) Start a simulation. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.status_message import StatusMessage @@ -115,7 +111,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.SimulationResourceApi(api_client) - sim_id = 'sim_id_example' # str | + sim_id = 'sim_id_example' # str | try: # Start a simulation. @@ -126,14 +122,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling SimulationResourceApi->start_simulation: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **sim_id** | **str**| | +| Name | Type | Description | Notes | +| ---------- | ------- | ----------- | ----- | +| **sim_id** | **str** | | ### Return type @@ -145,28 +138,28 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **stop_simulation** + > List[StatusMessage] stop_simulation(sim_id) Stop a simulation. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.status_message import StatusMessage @@ -188,7 +181,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.SimulationResourceApi(api_client) - sim_id = 'sim_id_example' # str | + sim_id = 'sim_id_example' # str | try: # Stop a simulation. @@ -199,14 +192,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling SimulationResourceApi->stop_simulation: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **sim_id** | **str**| | +| Name | Type | Description | Notes | +| ---------- | ------- | ----------- | ----- | +| **sim_id** | **str** | | ### Return type @@ -218,17 +208,16 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/pyvcell/_internal/api/vcell_client/docs/SimulationStatusPersistentRecord.md b/pyvcell/_internal/api/vcell_client/docs/SimulationStatusPersistentRecord.md index 5a5ffc9..9be915e 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationStatusPersistentRecord.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationStatusPersistentRecord.md @@ -1,13 +1,12 @@ # SimulationStatusPersistentRecord - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**status** | [**Status**](Status.md) | | [optional] -**details** | **str** | | [optional] -**has_data** | **bool** | | [optional] +| Name | Type | Description | Notes | +| ------------ | ----------------------- | ----------- | ---------- | +| **status** | [**Status**](Status.md) | | [optional] | +| **details** | **str** | | [optional] | +| **has_data** | **bool** | | [optional] | ## Example @@ -26,6 +25,5 @@ simulation_status_persistent_record_dict = simulation_status_persistent_record_i # create an instance of SimulationStatusPersistentRecord from a dict simulation_status_persistent_record_from_dict = SimulationStatusPersistentRecord.from_dict(simulation_status_persistent_record_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md index 3409213..c54914e 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md @@ -1,21 +1,20 @@ -# pyvcell._internal.api.vcell_client.SolverResourceApi +# pyvcell.\_internal.api.vcell_client.SolverResourceApi All URIs are relative to *https://vcell.cam.uchc.edu* -Method | HTTP request | Description -------------- | ------------- | ------------- -[**get_fv_solver_input_from_sbml**](SolverResourceApi.md#get_fv_solver_input_from_sbml) | **POST** /api/v1/solver/getFVSolverInput | Retrieve finite volume input from SBML spatial model. -[**get_fv_solver_input_from_vcml**](SolverResourceApi.md#get_fv_solver_input_from_vcml) | **POST** /api/v1/solver/getFVSolverInputFromVCML | Retrieve finite volume input from SBML spatial model. - +| Method | HTTP request | Description | +| --------------------------------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------------------------- | +| [**get_fv_solver_input_from_sbml**](SolverResourceApi.md#get_fv_solver_input_from_sbml) | **POST** /api/v1/solver/getFVSolverInput | Retrieve finite volume input from SBML spatial model. | +| [**get_fv_solver_input_from_vcml**](SolverResourceApi.md#get_fv_solver_input_from_vcml) | **POST** /api/v1/solver/getFVSolverInputFromVCML | Retrieve finite volume input from SBML spatial model. | # **get_fv_solver_input_from_sbml** + > bytearray get_fv_solver_input_from_sbml(sbml_file=sbml_file, duration=duration, output_time_step=output_time_step) Retrieve finite volume input from SBML spatial model. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -45,16 +44,13 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling SolverResourceApi->get_fv_solver_input_from_sbml: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **sbml_file** | **bytearray**| | [optional] - **duration** | **float**| | [optional] [default to 5.0] - **output_time_step** | **float**| | [optional] [default to 0.1] +| Name | Type | Description | Notes | +| -------------------- | ------------- | ----------- | --------------------------- | +| **sbml_file** | **bytearray** | | [optional] | +| **duration** | **float** | | [optional] [default to 5.0] | +| **output_time_step** | **float** | | [optional] [default to 0.1] | ### Return type @@ -66,26 +62,26 @@ No authorization required ### HTTP request headers - - **Content-Type**: multipart/form-data - - **Accept**: application/octet-stream, application/json +- **Content-Type**: multipart/form-data +- **Accept**: application/octet-stream, application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**422** | Unprocessable content submitted | - | +| Status code | Description | Response headers | +| ----------- | ------------------------------- | ---------------- | +| **200** | OK | - | +| **422** | Unprocessable content submitted | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_fv_solver_input_from_vcml** + > bytearray get_fv_solver_input_from_vcml(vcml_file=vcml_file, simulation_name=simulation_name) Retrieve finite volume input from SBML spatial model. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -114,15 +110,12 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling SolverResourceApi->get_fv_solver_input_from_vcml: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **vcml_file** | **bytearray**| | [optional] - **simulation_name** | **str**| | [optional] +| Name | Type | Description | Notes | +| ------------------- | ------------- | ----------- | ---------- | +| **vcml_file** | **bytearray** | | [optional] | +| **simulation_name** | **str** | | [optional] | ### Return type @@ -134,15 +127,14 @@ No authorization required ### HTTP request headers - - **Content-Type**: multipart/form-data - - **Accept**: application/octet-stream, application/json +- **Content-Type**: multipart/form-data +- **Accept**: application/octet-stream, application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**422** | Unprocessable content submitted | - | +| Status code | Description | Response headers | +| ----------- | ------------------------------- | ---------------- | +| **200** | OK | - | +| **422** | Unprocessable content submitted | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/pyvcell/_internal/api/vcell_client/docs/SourceModel.md b/pyvcell/_internal/api/vcell_client/docs/SourceModel.md index db840be..c158873 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SourceModel.md +++ b/pyvcell/_internal/api/vcell_client/docs/SourceModel.md @@ -1,12 +1,11 @@ # SourceModel - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**model_id** | **str** | | [optional] -**model_type** | [**ModelType**](ModelType.md) | | [optional] +| Name | Type | Description | Notes | +| -------------- | ----------------------------- | ----------- | ---------- | +| **model_id** | **str** | | [optional] | +| **model_type** | [**ModelType**](ModelType.md) | | [optional] | ## Example @@ -25,6 +24,5 @@ source_model_dict = source_model_instance.to_dict() # create an instance of SourceModel from a dict source_model_from_dict = SourceModel.from_dict(source_model_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/SpatialSelection.md b/pyvcell/_internal/api/vcell_client/docs/SpatialSelection.md index c5fa0d5..1100100 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SpatialSelection.md +++ b/pyvcell/_internal/api/vcell_client/docs/SpatialSelection.md @@ -1,17 +1,16 @@ # SpatialSelection - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**curve_selection_info** | [**CurveSelectionInfo**](CurveSelectionInfo.md) | | [optional] -**var_type** | [**VariableType**](VariableType.md) | | [optional] -**type** | **str** | | -**smallest_mesh_cell_dimension_length** | **float** | | [optional] -**variable_type** | [**VariableType**](VariableType.md) | | [optional] -**closed** | **bool** | | [optional] -**point** | **bool** | | [optional] +| Name | Type | Description | Notes | +| --------------------------------------- | ----------------------------------------------- | ----------- | ---------- | +| **curve_selection_info** | [**CurveSelectionInfo**](CurveSelectionInfo.md) | | [optional] | +| **var_type** | [**VariableType**](VariableType.md) | | [optional] | +| **type** | **str** | | +| **smallest_mesh_cell_dimension_length** | **float** | | [optional] | +| **variable_type** | [**VariableType**](VariableType.md) | | [optional] | +| **closed** | **bool** | | [optional] | +| **point** | **bool** | | [optional] | ## Example @@ -30,6 +29,5 @@ spatial_selection_dict = spatial_selection_instance.to_dict() # create an instance of SpatialSelection from a dict spatial_selection_from_dict = SpatialSelection.from_dict(spatial_selection_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionContour.md b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionContour.md index d84945f..c54369d 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionContour.md +++ b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionContour.md @@ -1,14 +1,13 @@ # SpatialSelectionContour - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**type** | **str** | | [default to 'Contour'] -**field_sampled_data_indexes** | **List[int]** | | [optional] -**index_samples** | **List[int]** | | [optional] -**sampled_data_indexes** | **List[int]** | | [optional] +| Name | Type | Description | Notes | +| ------------------------------ | ------------- | ----------- | ---------------------- | +| **type** | **str** | | [default to 'Contour'] | +| **field_sampled_data_indexes** | **List[int]** | | [optional] | +| **index_samples** | **List[int]** | | [optional] | +| **sampled_data_indexes** | **List[int]** | | [optional] | ## Example @@ -27,6 +26,5 @@ spatial_selection_contour_dict = spatial_selection_contour_instance.to_dict() # create an instance of SpatialSelectionContour from a dict spatial_selection_contour_from_dict = SpatialSelectionContour.from_dict(spatial_selection_contour_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionMembrane.md b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionMembrane.md index ced7a7a..7b25bea 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionMembrane.md +++ b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionMembrane.md @@ -1,13 +1,12 @@ # SpatialSelectionMembrane - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**type** | **str** | | [default to 'Membrane'] -**field_sampled_data_indexes** | **List[int]** | | [optional] -**selection_source** | [**SampledCurve**](SampledCurve.md) | | [optional] +| Name | Type | Description | Notes | +| ------------------------------ | ----------------------------------- | ----------- | ----------------------- | +| **type** | **str** | | [default to 'Membrane'] | +| **field_sampled_data_indexes** | **List[int]** | | [optional] | +| **selection_source** | [**SampledCurve**](SampledCurve.md) | | [optional] | ## Example @@ -26,6 +25,5 @@ spatial_selection_membrane_dict = spatial_selection_membrane_instance.to_dict() # create an instance of SpatialSelectionMembrane from a dict spatial_selection_membrane_from_dict = SpatialSelectionMembrane.from_dict(spatial_selection_membrane_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionVolume.md b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionVolume.md index 82d1145..c3404c4 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionVolume.md +++ b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionVolume.md @@ -1,12 +1,11 @@ # SpatialSelectionVolume - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**type** | **str** | | [default to 'Volume'] -**symmetric** | **bool** | | [optional] +| Name | Type | Description | Notes | +| ------------- | -------- | ----------- | --------------------- | +| **type** | **str** | | [default to 'Volume'] | +| **symmetric** | **bool** | | [optional] | ## Example @@ -25,6 +24,5 @@ spatial_selection_volume_dict = spatial_selection_volume_instance.to_dict() # create an instance of SpatialSelectionVolume from a dict spatial_selection_volume_from_dict = SpatialSelectionVolume.from_dict(spatial_selection_volume_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/Spline.md b/pyvcell/_internal/api/vcell_client/docs/Spline.md index d577c86..0d0afc8 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Spline.md +++ b/pyvcell/_internal/api/vcell_client/docs/Spline.md @@ -1,15 +1,14 @@ # Spline - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**type** | **str** | | [default to 'Spline'] -**default_num_samples** | **int** | | [optional] -**max_control_points** | **int** | | [optional] -**min_control_points** | **int** | | [optional] -**segment_count** | **int** | | [optional] +| Name | Type | Description | Notes | +| ----------------------- | ------- | ----------- | --------------------- | +| **type** | **str** | | [default to 'Spline'] | +| **default_num_samples** | **int** | | [optional] | +| **max_control_points** | **int** | | [optional] | +| **min_control_points** | **int** | | [optional] | +| **segment_count** | **int** | | [optional] | ## Example @@ -28,6 +27,5 @@ spline_dict = spline_instance.to_dict() # create an instance of Spline from a dict spline_from_dict = Spline.from_dict(spline_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/StandardExportInfo.md b/pyvcell/_internal/api/vcell_client/docs/StandardExportInfo.md index 4835a3b..f0a4a78 100644 --- a/pyvcell/_internal/api/vcell_client/docs/StandardExportInfo.md +++ b/pyvcell/_internal/api/vcell_client/docs/StandardExportInfo.md @@ -1,18 +1,17 @@ # StandardExportInfo - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**output_context** | [**List[AnnotatedFunctionDTO]**](AnnotatedFunctionDTO.md) | | [optional] -**context_name** | **str** | | [optional] -**simulation_name** | **str** | | [optional] -**simulation_key** | **str** | | [optional] -**simulation_job** | **int** | | [optional] -**geometry_specs** | [**GeometrySpecDTO**](GeometrySpecDTO.md) | | [optional] -**time_specs** | [**TimeSpecs**](TimeSpecs.md) | | [optional] -**variable_specs** | [**VariableSpecs**](VariableSpecs.md) | | [optional] +| Name | Type | Description | Notes | +| ------------------- | --------------------------------------------------------- | ----------- | ---------- | +| **output_context** | [**List[AnnotatedFunctionDTO]**](AnnotatedFunctionDTO.md) | | [optional] | +| **context_name** | **str** | | [optional] | +| **simulation_name** | **str** | | [optional] | +| **simulation_key** | **str** | | [optional] | +| **simulation_job** | **int** | | [optional] | +| **geometry_specs** | [**GeometrySpecDTO**](GeometrySpecDTO.md) | | [optional] | +| **time_specs** | [**TimeSpecs**](TimeSpecs.md) | | [optional] | +| **variable_specs** | [**VariableSpecs**](VariableSpecs.md) | | [optional] | ## Example @@ -31,6 +30,5 @@ standard_export_info_dict = standard_export_info_instance.to_dict() # create an instance of StandardExportInfo from a dict standard_export_info_from_dict = StandardExportInfo.from_dict(standard_export_info_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/Status.md b/pyvcell/_internal/api/vcell_client/docs/Status.md index 024617b..b50bb83 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Status.md +++ b/pyvcell/_internal/api/vcell_client/docs/Status.md @@ -1,32 +1,29 @@ # Status - ## Enum -* `UNKNOWN` (value: `'UNKNOWN'`) +- `UNKNOWN` (value: `'UNKNOWN'`) -* `NEVER_RAN` (value: `'NEVER_RAN'`) +- `NEVER_RAN` (value: `'NEVER_RAN'`) -* `START_REQUESTED` (value: `'START_REQUESTED'`) +- `START_REQUESTED` (value: `'START_REQUESTED'`) -* `DISPATCHED` (value: `'DISPATCHED'`) +- `DISPATCHED` (value: `'DISPATCHED'`) -* `WAITING` (value: `'WAITING'`) +- `WAITING` (value: `'WAITING'`) -* `QUEUED` (value: `'QUEUED'`) +- `QUEUED` (value: `'QUEUED'`) -* `RUNNING` (value: `'RUNNING'`) +- `RUNNING` (value: `'RUNNING'`) -* `COMPLETED` (value: `'COMPLETED'`) +- `COMPLETED` (value: `'COMPLETED'`) -* `FAILED` (value: `'FAILED'`) +- `FAILED` (value: `'FAILED'`) -* `STOP_REQUESTED` (value: `'STOP_REQUESTED'`) +- `STOP_REQUESTED` (value: `'STOP_REQUESTED'`) -* `STOPPED` (value: `'STOPPED'`) +- `STOPPED` (value: `'STOPPED'`) -* `NOT_SAVED` (value: `'NOT_SAVED'`) +- `NOT_SAVED` (value: `'NOT_SAVED'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/StatusMessage.md b/pyvcell/_internal/api/vcell_client/docs/StatusMessage.md index fd7a50b..0cb0cc6 100644 --- a/pyvcell/_internal/api/vcell_client/docs/StatusMessage.md +++ b/pyvcell/_internal/api/vcell_client/docs/StatusMessage.md @@ -1,14 +1,13 @@ # StatusMessage - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**job_status** | [**SimulationJobStatusRecord**](SimulationJobStatusRecord.md) | | [optional] -**user_name** | **str** | | [optional] -**progress** | **float** | | [optional] -**timepoint** | **float** | | [optional] +| Name | Type | Description | Notes | +| -------------- | ------------------------------------------------------------- | ----------- | ---------- | +| **job_status** | [**SimulationJobStatusRecord**](SimulationJobStatusRecord.md) | | [optional] | +| **user_name** | **str** | | [optional] | +| **progress** | **float** | | [optional] | +| **timepoint** | **float** | | [optional] | ## Example @@ -27,6 +26,5 @@ status_message_dict = status_message_instance.to_dict() # create an instance of StatusMessage from a dict status_message_from_dict = StatusMessage.from_dict(status_message_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/TimeMode.md b/pyvcell/_internal/api/vcell_client/docs/TimeMode.md index fcf7d2d..052c30c 100644 --- a/pyvcell/_internal/api/vcell_client/docs/TimeMode.md +++ b/pyvcell/_internal/api/vcell_client/docs/TimeMode.md @@ -1,12 +1,9 @@ # TimeMode - ## Enum -* `TIME_POINT` (value: `'TIME_POINT'`) +- `TIME_POINT` (value: `'TIME_POINT'`) -* `TIME_RANGE` (value: `'TIME_RANGE'`) +- `TIME_RANGE` (value: `'TIME_RANGE'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/TimeSpecs.md b/pyvcell/_internal/api/vcell_client/docs/TimeSpecs.md index 592fda6..a7c0227 100644 --- a/pyvcell/_internal/api/vcell_client/docs/TimeSpecs.md +++ b/pyvcell/_internal/api/vcell_client/docs/TimeSpecs.md @@ -1,14 +1,13 @@ # TimeSpecs - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**begin_time_index** | **int** | | [optional] -**end_time_index** | **int** | | [optional] -**all_times** | **List[float]** | | [optional] -**mode** | [**TimeMode**](TimeMode.md) | | [optional] +| Name | Type | Description | Notes | +| -------------------- | --------------------------- | ----------- | ---------- | +| **begin_time_index** | **int** | | [optional] | +| **end_time_index** | **int** | | [optional] | +| **all_times** | **List[float]** | | [optional] | +| **mode** | [**TimeMode**](TimeMode.md) | | [optional] | ## Example @@ -27,6 +26,5 @@ time_specs_dict = time_specs_instance.to_dict() # create an instance of TimeSpecs from a dict time_specs_from_dict = TimeSpecs.from_dict(time_specs_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/User.md b/pyvcell/_internal/api/vcell_client/docs/User.md index 0b92a28..54a25ba 100644 --- a/pyvcell/_internal/api/vcell_client/docs/User.md +++ b/pyvcell/_internal/api/vcell_client/docs/User.md @@ -1,13 +1,12 @@ # User - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**user_name** | **str** | | [optional] -**key** | **str** | | [optional] -**my_specials** | [**List[SPECIALCLAIM]**](SPECIALCLAIM.md) | | [optional] +| Name | Type | Description | Notes | +| --------------- | ----------------------------------------- | ----------- | ---------- | +| **user_name** | **str** | | [optional] | +| **key** | **str** | | [optional] | +| **my_specials** | [**List[SPECIALCLAIM]**](SPECIALCLAIM.md) | | [optional] | ## Example @@ -26,6 +25,5 @@ user_dict = user_instance.to_dict() # create an instance of User from a dict user_from_dict = User.from_dict(user_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/UserIdentityJSONSafe.md b/pyvcell/_internal/api/vcell_client/docs/UserIdentityJSONSafe.md index e707cb3..4532488 100644 --- a/pyvcell/_internal/api/vcell_client/docs/UserIdentityJSONSafe.md +++ b/pyvcell/_internal/api/vcell_client/docs/UserIdentityJSONSafe.md @@ -1,15 +1,14 @@ # UserIdentityJSONSafe - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**mapped** | **bool** | | [optional] -**user_name** | **str** | | [optional] -**id** | **float** | | [optional] -**subject** | **str** | | [optional] -**insert_date** | **str** | | [optional] +| Name | Type | Description | Notes | +| --------------- | --------- | ----------- | ---------- | +| **mapped** | **bool** | | [optional] | +| **user_name** | **str** | | [optional] | +| **id** | **float** | | [optional] | +| **subject** | **str** | | [optional] | +| **insert_date** | **str** | | [optional] | ## Example @@ -28,6 +27,5 @@ user_identity_json_safe_dict = user_identity_json_safe_instance.to_dict() # create an instance of UserIdentityJSONSafe from a dict user_identity_json_safe_from_dict = UserIdentityJSONSafe.from_dict(user_identity_json_safe_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/UserLoginInfoForMapping.md b/pyvcell/_internal/api/vcell_client/docs/UserLoginInfoForMapping.md index 84a02ef..b6859a5 100644 --- a/pyvcell/_internal/api/vcell_client/docs/UserLoginInfoForMapping.md +++ b/pyvcell/_internal/api/vcell_client/docs/UserLoginInfoForMapping.md @@ -1,12 +1,11 @@ # UserLoginInfoForMapping - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**user_id** | **str** | | [optional] -**password** | **str** | | [optional] +| Name | Type | Description | Notes | +| ------------ | ------- | ----------- | ---------- | +| **user_id** | **str** | | [optional] | +| **password** | **str** | | [optional] | ## Example @@ -25,6 +24,5 @@ user_login_info_for_mapping_dict = user_login_info_for_mapping_instance.to_dict( # create an instance of UserLoginInfoForMapping from a dict user_login_info_for_mapping_from_dict = UserLoginInfoForMapping.from_dict(user_login_info_for_mapping_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/UserRegistrationInfo.md b/pyvcell/_internal/api/vcell_client/docs/UserRegistrationInfo.md index 4bb8fb4..64f078f 100644 --- a/pyvcell/_internal/api/vcell_client/docs/UserRegistrationInfo.md +++ b/pyvcell/_internal/api/vcell_client/docs/UserRegistrationInfo.md @@ -1,15 +1,14 @@ # UserRegistrationInfo - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**user_id** | **str** | | [optional] -**title** | **str** | | [optional] -**organization** | **str** | | [optional] -**country** | **str** | | [optional] -**email_notification** | **bool** | | [optional] +| Name | Type | Description | Notes | +| ---------------------- | -------- | ----------- | ---------- | +| **user_id** | **str** | | [optional] | +| **title** | **str** | | [optional] | +| **organization** | **str** | | [optional] | +| **country** | **str** | | [optional] | +| **email_notification** | **bool** | | [optional] | ## Example @@ -28,6 +27,5 @@ user_registration_info_dict = user_registration_info_instance.to_dict() # create an instance of UserRegistrationInfo from a dict user_registration_info_from_dict = UserRegistrationInfo.from_dict(user_registration_info_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md index d10ec4c..3ff2244 100644 --- a/pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md @@ -1,29 +1,28 @@ -# pyvcell._internal.api.vcell_client.UsersResourceApi +# pyvcell.\_internal.api.vcell_client.UsersResourceApi All URIs are relative to *https://vcell.cam.uchc.edu* -Method | HTTP request | Description -------------- | ------------- | ------------- -[**forgot_legacy_password**](UsersResourceApi.md#forgot_legacy_password) | **POST** /api/v1/users/forgotLegacyPassword | The end user has forgotten the legacy password they used for VCell, so they will be emailed it. -[**get_guest_legacy_api_token**](UsersResourceApi.md#get_guest_legacy_api_token) | **POST** /api/v1/users/guestBearerToken | Method to get legacy tokens for guest users -[**get_legacy_api_token**](UsersResourceApi.md#get_legacy_api_token) | **POST** /api/v1/users/bearerToken | Get token for legacy API -[**get_mapped_user**](UsersResourceApi.md#get_mapped_user) | **GET** /api/v1/users/mappedUser | Get mapped VCell identity -[**get_me**](UsersResourceApi.md#get_me) | **GET** /api/v1/users/me | Get current user -[**map_new_user**](UsersResourceApi.md#map_new_user) | **POST** /api/v1/users/newUser | create vcell user -[**map_user**](UsersResourceApi.md#map_user) | **POST** /api/v1/users/mapUser | map vcell user -[**process_magic_link**](UsersResourceApi.md#process_magic_link) | **GET** /api/v1/users/processMagicLink | Process the magic link and map the user -[**request_recovery_email**](UsersResourceApi.md#request_recovery_email) | **POST** /api/v1/users/requestRecoveryEmail | request a recovery email to link a VCell account. -[**unmap_user**](UsersResourceApi.md#unmap_user) | **PUT** /api/v1/users/unmapUser/{userName} | remove vcell identity mapping - +| Method | HTTP request | Description | +| -------------------------------------------------------------------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| [**forgot_legacy_password**](UsersResourceApi.md#forgot_legacy_password) | **POST** /api/v1/users/forgotLegacyPassword | The end user has forgotten the legacy password they used for VCell, so they will be emailed it. | +| [**get_guest_legacy_api_token**](UsersResourceApi.md#get_guest_legacy_api_token) | **POST** /api/v1/users/guestBearerToken | Method to get legacy tokens for guest users | +| [**get_legacy_api_token**](UsersResourceApi.md#get_legacy_api_token) | **POST** /api/v1/users/bearerToken | Get token for legacy API | +| [**get_mapped_user**](UsersResourceApi.md#get_mapped_user) | **GET** /api/v1/users/mappedUser | Get mapped VCell identity | +| [**get_me**](UsersResourceApi.md#get_me) | **GET** /api/v1/users/me | Get current user | +| [**map_new_user**](UsersResourceApi.md#map_new_user) | **POST** /api/v1/users/newUser | create vcell user | +| [**map_user**](UsersResourceApi.md#map_user) | **POST** /api/v1/users/mapUser | map vcell user | +| [**process_magic_link**](UsersResourceApi.md#process_magic_link) | **GET** /api/v1/users/processMagicLink | Process the magic link and map the user | +| [**request_recovery_email**](UsersResourceApi.md#request_recovery_email) | **POST** /api/v1/users/requestRecoveryEmail | request a recovery email to link a VCell account. | +| [**unmap_user**](UsersResourceApi.md#unmap_user) | **PUT** /api/v1/users/unmapUser/{userName} | remove vcell identity mapping | # **forgot_legacy_password** + > forgot_legacy_password(user_id=user_id) The end user has forgotten the legacy password they used for VCell, so they will be emailed it. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -53,14 +52,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->forgot_legacy_password: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **user_id** | **str**| | [optional] +| Name | Type | Description | Notes | +| ----------- | ------- | ----------- | ---------- | +| **user_id** | **str** | | [optional] | ### Return type @@ -72,28 +68,28 @@ void (empty response body) ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: Not defined +- **Content-Type**: Not defined +- **Accept**: Not defined ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | Legacy password sent in email | - | -**401** | Need to login to Auth0 | - | -**403** | Not Allowed | - | -**500** | Internal Error | - | +| Status code | Description | Response headers | +| ----------- | ----------------------------- | ---------------- | +| **200** | Legacy password sent in email | - | +| **401** | Need to login to Auth0 | - | +| **403** | Not Allowed | - | +| **500** | Internal Error | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_guest_legacy_api_token** + > AccesTokenRepresentationRecord get_guest_legacy_api_token() Method to get legacy tokens for guest users ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.acces_token_representation_record import AccesTokenRepresentationRecord @@ -121,8 +117,6 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->get_guest_legacy_api_token: %s\n" % e) ``` - - ### Parameters This endpoint does not need any parameter. @@ -137,26 +131,26 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_legacy_api_token** + > AccesTokenRepresentationRecord get_legacy_api_token() Get token for legacy API ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.acces_token_representation_record import AccesTokenRepresentationRecord @@ -188,8 +182,6 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->get_legacy_api_token: %s\n" % e) ``` - - ### Parameters This endpoint does not need any parameter. @@ -204,28 +196,28 @@ This endpoint does not need any parameter. ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_mapped_user** + > UserIdentityJSONSafe get_mapped_user() Get mapped VCell identity ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.user_identity_json_safe import UserIdentityJSONSafe @@ -257,8 +249,6 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->get_mapped_user: %s\n" % e) ``` - - ### Parameters This endpoint does not need any parameter. @@ -273,29 +263,29 @@ This endpoint does not need any parameter. ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | Successful, returning the identity | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**409** | Conflict with server state. | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | ---------------------------------- | ---------------- | +| **200** | Successful, returning the identity | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **409** | Conflict with server state. | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_me** + > Identity get_me() Get current user ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.identity import Identity @@ -323,8 +313,6 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->get_me: %s\n" % e) ``` - - ### Parameters This endpoint does not need any parameter. @@ -339,25 +327,25 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details | Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | +| ----------- | ----------- | ---------------- | +| **200** | OK | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **map_new_user** + > map_new_user(user_registration_info=user_registration_info) create vcell user ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.user_registration_info import UserRegistrationInfo @@ -388,14 +376,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->map_new_user: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **user_registration_info** | [**UserRegistrationInfo**](UserRegistrationInfo.md)| | [optional] +| Name | Type | Description | Notes | +| -------------------------- | --------------------------------------------------- | ----------- | ---------- | +| **user_registration_info** | [**UserRegistrationInfo**](UserRegistrationInfo.md) | | [optional] | ### Return type @@ -407,29 +392,29 @@ void (empty response body) ### HTTP request headers - - **Content-Type**: application/json - - **Accept**: application/json +- **Content-Type**: application/json +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | Successful, returning the identity | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**409** | VCell Identity not mapped, userid already exists | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | ------------------------------------------------ | ---------------- | +| **200** | Successful, returning the identity | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **409** | VCell Identity not mapped, userid already exists | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **map_user** + > bool map_user(user_login_info_for_mapping=user_login_info_for_mapping) map vcell user ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.user_login_info_for_mapping import UserLoginInfoForMapping @@ -462,14 +447,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->map_user: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **user_login_info_for_mapping** | [**UserLoginInfoForMapping**](UserLoginInfoForMapping.md)| | [optional] +| Name | Type | Description | Notes | +| ------------------------------- | --------------------------------------------------------- | ----------- | ---------- | +| **user_login_info_for_mapping** | [**UserLoginInfoForMapping**](UserLoginInfoForMapping.md) | | [optional] | ### Return type @@ -481,28 +463,28 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: application/json - - **Accept**: application/json +- **Content-Type**: application/json +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **process_magic_link** + > process_magic_link(magic=magic) Process the magic link and map the user ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -528,14 +510,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->process_magic_link: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **magic** | **str**| | [optional] +| Name | Type | Description | Notes | +| --------- | ------- | ----------- | ---------- | +| **magic** | **str** | | [optional] | ### Return type @@ -547,28 +526,28 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | User mapped successfully | - | -**400** | Invalid or expired magic link | - | -**401** | Not Authenticated | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | ----------------------------- | ---------------- | +| **200** | User mapped successfully | - | +| **400** | Invalid or expired magic link | - | +| **401** | Not Authenticated | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **request_recovery_email** + > request_recovery_email(email=email, user_id=user_id) request a recovery email to link a VCell account. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -599,15 +578,12 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->request_recovery_email: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **email** | **str**| | [optional] - **user_id** | **str**| | [optional] +| Name | Type | Description | Notes | +| ----------- | ------- | ----------- | ---------- | +| **email** | **str** | | [optional] | +| **user_id** | **str** | | [optional] | ### Return type @@ -619,30 +595,30 @@ void (empty response body) ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | magic link sent in email if appropriate | - | -**400** | unable to process request | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**404** | Not found | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------------------------- | ---------------- | +| **200** | magic link sent in email if appropriate | - | +| **400** | unable to process request | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **404** | Not found | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **unmap_user** + > bool unmap_user(user_name) remove vcell identity mapping ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -663,7 +639,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.UsersResourceApi(api_client) - user_name = 'user_name_example' # str | + user_name = 'user_name_example' # str | try: # remove vcell identity mapping @@ -674,14 +650,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling UsersResourceApi->unmap_user: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **user_name** | **str**| | +| Name | Type | Description | Notes | +| ------------- | ------- | ----------- | ----- | +| **user_name** | **str** | | ### Return type @@ -693,17 +666,16 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/pyvcell/_internal/api/vcell_client/docs/VCDocumentType.md b/pyvcell/_internal/api/vcell_client/docs/VCDocumentType.md index 3730ea8..866b438 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VCDocumentType.md +++ b/pyvcell/_internal/api/vcell_client/docs/VCDocumentType.md @@ -1,16 +1,13 @@ # VCDocumentType - ## Enum -* `BIOMODEL_DOC` (value: `'BIOMODEL_DOC'`) +- `BIOMODEL_DOC` (value: `'BIOMODEL_DOC'`) -* `MATHMODEL_DOC` (value: `'MATHMODEL_DOC'`) +- `MATHMODEL_DOC` (value: `'MATHMODEL_DOC'`) -* `GEOMETRY_DOC` (value: `'GEOMETRY_DOC'`) +- `GEOMETRY_DOC` (value: `'GEOMETRY_DOC'`) -* `EXTERNALFILE_DOC` (value: `'EXTERNALFILE_DOC'`) +- `EXTERNALFILE_DOC` (value: `'EXTERNALFILE_DOC'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md index 4589d71..0969e47 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md @@ -1,24 +1,23 @@ -# pyvcell._internal.api.vcell_client.VCImageResourceApi +# pyvcell.\_internal.api.vcell_client.VCImageResourceApi All URIs are relative to *https://vcell.cam.uchc.edu* -Method | HTTP request | Description -------------- | ------------- | ------------- -[**delete_image_vcml**](VCImageResourceApi.md#delete_image_vcml) | **DELETE** /api/v1/image/{id} | -[**get_image_summaries**](VCImageResourceApi.md#get_image_summaries) | **GET** /api/v1/image/summaries | -[**get_image_summary**](VCImageResourceApi.md#get_image_summary) | **GET** /api/v1/image/summary/{id} | -[**get_image_vcml**](VCImageResourceApi.md#get_image_vcml) | **GET** /api/v1/image/{id} | -[**save_image_vcml**](VCImageResourceApi.md#save_image_vcml) | **POST** /api/v1/image | - +| Method | HTTP request | Description | +| -------------------------------------------------------------------- | ---------------------------------- | ----------- | +| [**delete_image_vcml**](VCImageResourceApi.md#delete_image_vcml) | **DELETE** /api/v1/image/{id} | +| [**get_image_summaries**](VCImageResourceApi.md#get_image_summaries) | **GET** /api/v1/image/summaries | +| [**get_image_summary**](VCImageResourceApi.md#get_image_summary) | **GET** /api/v1/image/summary/{id} | +| [**get_image_vcml**](VCImageResourceApi.md#get_image_vcml) | **GET** /api/v1/image/{id} | +| [**save_image_vcml**](VCImageResourceApi.md#save_image_vcml) | **POST** /api/v1/image | # **delete_image_vcml** + > delete_image_vcml(id) Remove specific image VCML. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -35,7 +34,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.VCImageResourceApi(api_client) - id = 'id_example' # str | + id = 'id_example' # str | try: api_instance.delete_image_vcml(id) @@ -43,14 +42,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling VCImageResourceApi->delete_image_vcml: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | +| Name | Type | Description | Notes | +| ------ | ------- | ----------- | ----- | +| **id** | **str** | | ### Return type @@ -62,29 +58,29 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**204** | No Content | - | -**401** | Not Authenticated | - | -**403** | Not Allowed | - | -**404** | Not found | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **204** | No Content | - | +| **401** | Not Authenticated | - | +| **403** | Not Allowed | - | +| **404** | Not found | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_image_summaries** + > List[VCImageSummary] get_image_summaries(include_public_and_shared=include_public_and_shared) Return Image summaries. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.vc_image_summary import VCImageSummary @@ -112,14 +108,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling VCImageResourceApi->get_image_summaries: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **include_public_and_shared** | **bool**| Include Image summaries that are public and shared with the requester. Default is true. | [optional] +| Name | Type | Description | Notes | +| ----------------------------- | -------- | --------------------------------------------------------------------------------------- | ---------- | +| **include_public_and_shared** | **bool** | Include Image summaries that are public and shared with the requester. Default is true. | [optional] | ### Return type @@ -131,26 +124,26 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_image_summary** + > VCImageSummary get_image_summary(id) All of the miscellaneous information about an Image (Extent, ISize, preview, etc...), but not the actual Image itself. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.models.vc_image_summary import VCImageSummary @@ -168,7 +161,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.VCImageResourceApi(api_client) - id = 'id_example' # str | + id = 'id_example' # str | try: api_response = api_instance.get_image_summary(id) @@ -178,14 +171,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling VCImageResourceApi->get_image_summary: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | +| Name | Type | Description | Notes | +| ------ | ------- | ----------- | ----- | +| **id** | **str** | | ### Return type @@ -197,28 +187,28 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: application/json +- **Content-Type**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**403** | Not Allowed | - | -**404** | Not found | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | --------------------- | ---------------- | +| **200** | OK | - | +| **403** | Not Allowed | - | +| **404** | Not found | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_image_vcml** + > str get_image_vcml(id) Get specific image VCML. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -235,7 +225,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.VCImageResourceApi(api_client) - id = 'id_example' # str | + id = 'id_example' # str | try: api_response = api_instance.get_image_vcml(id) @@ -245,14 +235,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling VCImageResourceApi->get_image_vcml: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | +| Name | Type | Description | Notes | +| ------ | ------- | ----------- | ----- | +| **id** | **str** | | ### Return type @@ -264,29 +251,29 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined - - **Accept**: text/plain, application/json +- **Content-Type**: Not defined +- **Accept**: text/plain, application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**403** | Not Allowed | - | -**404** | Not found | - | -**422** | Unprocessable content submitted | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | ------------------------------- | ---------------- | +| **200** | OK | - | +| **403** | Not Allowed | - | +| **404** | Not found | - | +| **422** | Unprocessable content submitted | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **save_image_vcml** + > str save_image_vcml(body, name=name) Save the VCML representation of an image. ### Example - ```python import pyvcell._internal.api.vcell_client from pyvcell._internal.api.vcell_client.rest import ApiException @@ -303,7 +290,7 @@ configuration = pyvcell._internal.api.vcell_client.Configuration( with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = pyvcell._internal.api.vcell_client.VCImageResourceApi(api_client) - body = 'body_example' # str | + body = 'body_example' # str | name = 'name_example' # str | Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML. (optional) try: @@ -314,15 +301,12 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: print("Exception when calling VCImageResourceApi->save_image_vcml: %s\n" % e) ``` - - ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | **str**| | - **name** | **str**| Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML. | [optional] +| Name | Type | Description | Notes | +| -------- | ------- | ------------------------------------------------------------------------------ | ---------- | +| **body** | **str** | | +| **name** | **str** | Name to save new ImageVCML under. Leave blank if re-saving existing ImageVCML. | [optional] | ### Return type @@ -334,17 +318,16 @@ No authorization required ### HTTP request headers - - **Content-Type**: application/json - - **Accept**: text/plain, application/json +- **Content-Type**: application/json +- **Accept**: text/plain, application/json ### HTTP response details -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**200** | OK | - | -**401** | Not Authenticated | - | -**422** | Unprocessable content submitted | - | -**500** | Data Access Exception | - | +| Status code | Description | Response headers | +| ----------- | ------------------------------- | ---------------- | +| **200** | OK | - | +| **401** | Not Authenticated | - | +| **422** | Unprocessable content submitted | - | +| **500** | Data Access Exception | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/pyvcell/_internal/api/vcell_client/docs/VCImageSummary.md b/pyvcell/_internal/api/vcell_client/docs/VCImageSummary.md index d0c1d9e..c43315f 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VCImageSummary.md +++ b/pyvcell/_internal/api/vcell_client/docs/VCImageSummary.md @@ -1,15 +1,14 @@ # VCImageSummary - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**size** | [**ISize**](ISize.md) | | [optional] -**extent** | [**Extent**](Extent.md) | | [optional] -**version** | [**Version**](Version.md) | | [optional] -**preview** | [**GIFImage**](GIFImage.md) | | [optional] -**software_version** | [**VCellSoftwareVersion**](VCellSoftwareVersion.md) | | [optional] +| Name | Type | Description | Notes | +| -------------------- | --------------------------------------------------- | ----------- | ---------- | +| **size** | [**ISize**](ISize.md) | | [optional] | +| **extent** | [**Extent**](Extent.md) | | [optional] | +| **version** | [**Version**](Version.md) | | [optional] | +| **preview** | [**GIFImage**](GIFImage.md) | | [optional] | +| **software_version** | [**VCellSoftwareVersion**](VCellSoftwareVersion.md) | | [optional] | ## Example @@ -28,6 +27,5 @@ vc_image_summary_dict = vc_image_summary_instance.to_dict() # create an instance of VCImageSummary from a dict vc_image_summary_from_dict = VCImageSummary.from_dict(vc_image_summary_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/VCSimulationIdentifier.md b/pyvcell/_internal/api/vcell_client/docs/VCSimulationIdentifier.md index 20548ca..87fb082 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VCSimulationIdentifier.md +++ b/pyvcell/_internal/api/vcell_client/docs/VCSimulationIdentifier.md @@ -1,13 +1,12 @@ # VCSimulationIdentifier - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**simulation_key** | **str** | | [optional] -**owner** | [**User**](User.md) | | [optional] -**id** | **str** | | [optional] +| Name | Type | Description | Notes | +| ------------------ | ------------------- | ----------- | ---------- | +| **simulation_key** | **str** | | [optional] | +| **owner** | [**User**](User.md) | | [optional] | +| **id** | **str** | | [optional] | ## Example @@ -26,6 +25,5 @@ vc_simulation_identifier_dict = vc_simulation_identifier_instance.to_dict() # create an instance of VCSimulationIdentifier from a dict vc_simulation_identifier_from_dict = VCSimulationIdentifier.from_dict(vc_simulation_identifier_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/VCellHTTPError.md b/pyvcell/_internal/api/vcell_client/docs/VCellHTTPError.md index b4e041a..dce6add 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VCellHTTPError.md +++ b/pyvcell/_internal/api/vcell_client/docs/VCellHTTPError.md @@ -1,12 +1,11 @@ # VCellHTTPError - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**exception_type** | **str** | | [optional] -**message** | **str** | | [optional] +| Name | Type | Description | Notes | +| ------------------ | ------- | ----------- | ---------- | +| **exception_type** | **str** | | [optional] | +| **message** | **str** | | [optional] | ## Example @@ -25,6 +24,5 @@ v_cell_http_error_dict = v_cell_http_error_instance.to_dict() # create an instance of VCellHTTPError from a dict v_cell_http_error_from_dict = VCellHTTPError.from_dict(v_cell_http_error_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/VCellSite.md b/pyvcell/_internal/api/vcell_client/docs/VCellSite.md index 60b6714..1d8e507 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VCellSite.md +++ b/pyvcell/_internal/api/vcell_client/docs/VCellSite.md @@ -1,18 +1,15 @@ # VCellSite - ## Enum -* `ALPHA` (value: `'alpha'`) +- `ALPHA` (value: `'alpha'`) -* `BETA` (value: `'beta'`) +- `BETA` (value: `'beta'`) -* `REL` (value: `'rel'`) +- `REL` (value: `'rel'`) -* `OTHER` (value: `'other'`) +- `OTHER` (value: `'other'`) -* `UNKNOWN` (value: `'unknown'`) +- `UNKNOWN` (value: `'unknown'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/VCellSoftwareVersion.md b/pyvcell/_internal/api/vcell_client/docs/VCellSoftwareVersion.md index d44a4a1..230d741 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VCellSoftwareVersion.md +++ b/pyvcell/_internal/api/vcell_client/docs/VCellSoftwareVersion.md @@ -1,19 +1,18 @@ # VCellSoftwareVersion - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**software_version_string** | **str** | | [optional] -**vcell_site** | [**VCellSite**](VCellSite.md) | | [optional] -**build_number** | **str** | | [optional] -**version_number** | **str** | | [optional] -**major_version** | **int** | | [optional] -**minor_version** | **int** | | [optional] -**patch_version** | **int** | | [optional] -**build_int** | **int** | | [optional] -**description** | **str** | | [optional] +| Name | Type | Description | Notes | +| --------------------------- | ----------------------------- | ----------- | ---------- | +| **software_version_string** | **str** | | [optional] | +| **vcell_site** | [**VCellSite**](VCellSite.md) | | [optional] | +| **build_number** | **str** | | [optional] | +| **version_number** | **str** | | [optional] | +| **major_version** | **int** | | [optional] | +| **minor_version** | **int** | | [optional] | +| **patch_version** | **int** | | [optional] | +| **build_int** | **int** | | [optional] | +| **description** | **str** | | [optional] | ## Example @@ -32,6 +31,5 @@ v_cell_software_version_dict = v_cell_software_version_instance.to_dict() # create an instance of VCellSoftwareVersion from a dict v_cell_software_version_from_dict = VCellSoftwareVersion.from_dict(v_cell_software_version_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/VariableDomain.md b/pyvcell/_internal/api/vcell_client/docs/VariableDomain.md index 645265b..6970765 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VariableDomain.md +++ b/pyvcell/_internal/api/vcell_client/docs/VariableDomain.md @@ -1,22 +1,19 @@ # VariableDomain - ## Enum -* `VARIABLEDOMAIN_POSTPROCESSING` (value: `'VARIABLEDOMAIN_POSTPROCESSING'`) +- `VARIABLEDOMAIN_POSTPROCESSING` (value: `'VARIABLEDOMAIN_POSTPROCESSING'`) -* `VARIABLEDOMAIN_UNKNOWN` (value: `'VARIABLEDOMAIN_UNKNOWN'`) +- `VARIABLEDOMAIN_UNKNOWN` (value: `'VARIABLEDOMAIN_UNKNOWN'`) -* `VARIABLEDOMAIN_VOLUME` (value: `'VARIABLEDOMAIN_VOLUME'`) +- `VARIABLEDOMAIN_VOLUME` (value: `'VARIABLEDOMAIN_VOLUME'`) -* `VARIABLEDOMAIN_MEMBRANE` (value: `'VARIABLEDOMAIN_MEMBRANE'`) +- `VARIABLEDOMAIN_MEMBRANE` (value: `'VARIABLEDOMAIN_MEMBRANE'`) -* `VARIABLEDOMAIN_CONTOUR` (value: `'VARIABLEDOMAIN_CONTOUR'`) +- `VARIABLEDOMAIN_CONTOUR` (value: `'VARIABLEDOMAIN_CONTOUR'`) -* `VARIABLEDOMAIN_NONSPATIAL` (value: `'VARIABLEDOMAIN_NONSPATIAL'`) +- `VARIABLEDOMAIN_NONSPATIAL` (value: `'VARIABLEDOMAIN_NONSPATIAL'`) -* `VARIABLEDOMAIN_POINT` (value: `'VARIABLEDOMAIN_POINT'`) +- `VARIABLEDOMAIN_POINT` (value: `'VARIABLEDOMAIN_POINT'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/VariableMode.md b/pyvcell/_internal/api/vcell_client/docs/VariableMode.md index 8521a74..ad769dd 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VariableMode.md +++ b/pyvcell/_internal/api/vcell_client/docs/VariableMode.md @@ -1,14 +1,11 @@ # VariableMode - ## Enum -* `VARIABLE_ONE` (value: `'VARIABLE_ONE'`) +- `VARIABLE_ONE` (value: `'VARIABLE_ONE'`) -* `VARIABLE_MULTI` (value: `'VARIABLE_MULTI'`) +- `VARIABLE_MULTI` (value: `'VARIABLE_MULTI'`) -* `VARIABLE_ALL` (value: `'VARIABLE_ALL'`) +- `VARIABLE_ALL` (value: `'VARIABLE_ALL'`) [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/pyvcell/_internal/api/vcell_client/docs/VariableSpecs.md b/pyvcell/_internal/api/vcell_client/docs/VariableSpecs.md index 1743c39..c786ef8 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VariableSpecs.md +++ b/pyvcell/_internal/api/vcell_client/docs/VariableSpecs.md @@ -1,12 +1,11 @@ # VariableSpecs - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**variable_names** | **List[str]** | | [optional] -**mode** | [**VariableMode**](VariableMode.md) | | [optional] +| Name | Type | Description | Notes | +| ------------------ | ----------------------------------- | ----------- | ---------- | +| **variable_names** | **List[str]** | | [optional] | +| **mode** | [**VariableMode**](VariableMode.md) | | [optional] | ## Example @@ -25,6 +24,5 @@ variable_specs_dict = variable_specs_instance.to_dict() # create an instance of VariableSpecs from a dict variable_specs_from_dict = VariableSpecs.from_dict(variable_specs_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/VariableType.md b/pyvcell/_internal/api/vcell_client/docs/VariableType.md index 69fefa5..66555bb 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VariableType.md +++ b/pyvcell/_internal/api/vcell_client/docs/VariableType.md @@ -1,19 +1,18 @@ # VariableType - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**type** | **int** | | [optional] -**variable_domain** | [**VariableDomain**](VariableDomain.md) | | [optional] -**name** | **str** | | [optional] -**units** | **str** | | [optional] -**label** | **str** | | [optional] -**legacy_warn** | **bool** | | [optional] -**default_label** | **str** | | [optional] -**default_units** | **str** | | [optional] -**type_name** | **str** | | [optional] +| Name | Type | Description | Notes | +| ------------------- | --------------------------------------- | ----------- | ---------- | +| **type** | **int** | | [optional] | +| **variable_domain** | [**VariableDomain**](VariableDomain.md) | | [optional] | +| **name** | **str** | | [optional] | +| **units** | **str** | | [optional] | +| **label** | **str** | | [optional] | +| **legacy_warn** | **bool** | | [optional] | +| **default_label** | **str** | | [optional] | +| **default_units** | **str** | | [optional] | +| **type_name** | **str** | | [optional] | ## Example @@ -32,6 +31,5 @@ variable_type_dict = variable_type_instance.to_dict() # create an instance of VariableType from a dict variable_type_from_dict = VariableType.from_dict(variable_type_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/Version.md b/pyvcell/_internal/api/vcell_client/docs/Version.md index 257c8cd..5043be2 100644 --- a/pyvcell/_internal/api/vcell_client/docs/Version.md +++ b/pyvcell/_internal/api/vcell_client/docs/Version.md @@ -1,19 +1,18 @@ # Version - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**version_key** | **str** | | [optional] -**annot** | **str** | | [optional] -**branch_id** | **float** | | [optional] -**branch_point_ref_key** | **str** | | [optional] -**var_date** | **datetime** | | [optional] -**flag** | [**VersionFlag**](VersionFlag.md) | | [optional] -**group_access** | [**GroupAccess**](GroupAccess.md) | | [optional] -**name** | **str** | | [optional] -**owner** | [**User**](User.md) | | [optional] +| Name | Type | Description | Notes | +| ------------------------ | --------------------------------- | ----------- | ---------- | +| **version_key** | **str** | | [optional] | +| **annot** | **str** | | [optional] | +| **branch_id** | **float** | | [optional] | +| **branch_point_ref_key** | **str** | | [optional] | +| **var_date** | **datetime** | | [optional] | +| **flag** | [**VersionFlag**](VersionFlag.md) | | [optional] | +| **group_access** | [**GroupAccess**](GroupAccess.md) | | [optional] | +| **name** | **str** | | [optional] | +| **owner** | [**User**](User.md) | | [optional] | ## Example @@ -32,6 +31,5 @@ version_dict = version_instance.to_dict() # create an instance of Version from a dict version_from_dict = Version.from_dict(version_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/docs/VersionFlag.md b/pyvcell/_internal/api/vcell_client/docs/VersionFlag.md index 75eec1e..c8af378 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VersionFlag.md +++ b/pyvcell/_internal/api/vcell_client/docs/VersionFlag.md @@ -1,15 +1,14 @@ # VersionFlag - ## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**version_flag** | **int** | | [optional] -**int_value** | **int** | | [optional] -**archived** | **bool** | | [optional] -**current** | **bool** | | [optional] -**published** | **bool** | | [optional] +| Name | Type | Description | Notes | +| ---------------- | -------- | ----------- | ---------- | +| **version_flag** | **int** | | [optional] | +| **int_value** | **int** | | [optional] | +| **archived** | **bool** | | [optional] | +| **current** | **bool** | | [optional] | +| **published** | **bool** | | [optional] | ## Example @@ -28,6 +27,5 @@ version_flag_dict = version_flag_instance.to_dict() # create an instance of VersionFlag from a dict version_flag_from_dict = VersionFlag.from_dict(version_flag_dict) ``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pyvcell/_internal/api/vcell_client/exceptions.py b/pyvcell/_internal/api/vcell_client/exceptions.py index bd4ce24..b77e264 100644 --- a/pyvcell/_internal/api/vcell_client/exceptions.py +++ b/pyvcell/_internal/api/vcell_client/exceptions.py @@ -1,27 +1,26 @@ """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from typing import Any, Optional from typing_extensions import Self + class OpenApiException(Exception): """The base exception class for all OpenAPIExceptions""" class ApiTypeError(OpenApiException, TypeError): - def __init__(self, msg, path_to_item=None, valid_classes=None, - key_type=None) -> None: - """ Raises an exception for TypeErrors + def __init__(self, msg, path_to_item=None, valid_classes=None, key_type=None) -> None: + """Raises an exception for TypeErrors Args: msg (str): the exception message @@ -102,11 +101,10 @@ def __init__(self, msg, path_to_item=None) -> None: class ApiException(OpenApiException): - def __init__( - self, - status=None, - reason=None, + self, + status=None, + reason=None, http_resp=None, *, body: Optional[str] = None, @@ -125,17 +123,17 @@ def __init__( self.reason = http_resp.reason if self.body is None: try: - self.body = http_resp.data.decode('utf-8') + self.body = http_resp.data.decode("utf-8") except Exception: pass self.headers = http_resp.headers @classmethod def from_response( - cls, - *, - http_resp, - body: Optional[str], + cls, + *, + http_resp, + body: Optional[str], data: Optional[Any], ) -> Self: if http_resp.status == 400: @@ -163,11 +161,9 @@ def from_response( def __str__(self): """Custom error messages for exception""" - error_message = "({0})\n"\ - "Reason: {1}\n".format(self.status, self.reason) + error_message = "({0})\n" "Reason: {1}\n".format(self.status, self.reason) if self.headers: - error_message += "HTTP response headers: {0}\n".format( - self.headers) + error_message += "HTTP response headers: {0}\n".format(self.headers) if self.body: error_message += "HTTP response body: {0}\n".format(self.body) @@ -200,11 +196,13 @@ class ServiceException(ApiException): class ConflictException(ApiException): """Exception for HTTP 409 Conflict.""" + pass class UnprocessableEntityException(ApiException): """Exception for HTTP 422 Unprocessable Entity.""" + pass diff --git a/pyvcell/_internal/api/vcell_client/models/__init__.py b/pyvcell/_internal/api/vcell_client/models/__init__.py index 82b67ea..37fecd5 100644 --- a/pyvcell/_internal/api/vcell_client/models/__init__.py +++ b/pyvcell/_internal/api/vcell_client/models/__init__.py @@ -2,15 +2,15 @@ # flake8: noqa """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 # import models into model package @@ -69,9 +69,13 @@ from pyvcell._internal.api.vcell_client.models.simulation_execution_status_record import SimulationExecutionStatusRecord from pyvcell._internal.api.vcell_client.models.simulation_job_status_record import SimulationJobStatusRecord from pyvcell._internal.api.vcell_client.models.simulation_message import SimulationMessage -from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import SimulationQueueEntryStatusRecord +from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import ( + SimulationQueueEntryStatusRecord, +) from pyvcell._internal.api.vcell_client.models.simulation_queue_id import SimulationQueueID -from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import SimulationStatusPersistentRecord +from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import ( + SimulationStatusPersistentRecord, +) from pyvcell._internal.api.vcell_client.models.source_model import SourceModel from pyvcell._internal.api.vcell_client.models.spatial_selection import SpatialSelection from pyvcell._internal.api.vcell_client.models.spatial_selection_contour import SpatialSelectionContour @@ -99,4 +103,3 @@ from pyvcell._internal.api.vcell_client.models.variable_type import VariableType from pyvcell._internal.api.vcell_client.models.version import Version from pyvcell._internal.api.vcell_client.models.version_flag import VersionFlag - diff --git a/pyvcell/_internal/api/vcell_client/models/acces_token_representation_record.py b/pyvcell/_internal/api/vcell_client/models/acces_token_representation_record.py index fc3f6d7..de9c4f3 100644 --- a/pyvcell/_internal/api/vcell_client/models/acces_token_representation_record.py +++ b/pyvcell/_internal/api/vcell_client/models/acces_token_representation_record.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class AccesTokenRepresentationRecord(BaseModel): """ AccesTokenRepresentationRecord - """ # noqa: E501 + """ # noqa: E501 + token: Optional[StrictStr] = None creation_date_seconds: Optional[StrictInt] = Field(default=None, alias="creationDateSeconds") expire_date_seconds: Optional[StrictInt] = Field(default=None, alias="expireDateSeconds") @@ -40,7 +41,6 @@ class AccesTokenRepresentationRecord(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -65,8 +65,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -87,15 +86,16 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in AccesTokenRepresentationRecord) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in AccesTokenRepresentationRecord) in the input: " + + _key + ) _obj = cls.model_validate({ "token": obj.get("token"), "creationDateSeconds": obj.get("creationDateSeconds"), "expireDateSeconds": obj.get("expireDateSeconds"), "userId": obj.get("userId"), - "userKey": obj.get("userKey") + "userKey": obj.get("userKey"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/analytic_curve.py b/pyvcell/_internal/api/vcell_client/models/analytic_curve.py index b05a54a..2524782 100644 --- a/pyvcell/_internal/api/vcell_client/models/analytic_curve.py +++ b/pyvcell/_internal/api/vcell_client/models/analytic_curve.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -25,10 +24,12 @@ from typing import Optional, Set from typing_extensions import Self + class AnalyticCurve(Curve): """ AnalyticCurve - """ # noqa: E501 + """ # noqa: E501 + type: StrictStr exp_x: Optional[StrictStr] = Field(default=None, alias="expX") exp_y: Optional[StrictStr] = Field(default=None, alias="expY") @@ -38,7 +39,24 @@ class AnalyticCurve(Curve): default_num_samples: Optional[StrictInt] = Field(default=None, alias="defaultNumSamples") segment_count: Optional[StrictInt] = Field(default=None, alias="segmentCount") valid: Optional[StrictBool] = None - __properties: ClassVar[List[str]] = ["bClosed", "description", "type", "beginningCoordinate", "defaultNumSamples", "endingCoordinate", "numSamplePoints", "segmentCount", "spatialLength", "closed", "valid", "expX", "expY", "expZ", "offset", "analyticOffset"] + __properties: ClassVar[List[str]] = [ + "bClosed", + "description", + "type", + "beginningCoordinate", + "defaultNumSamples", + "endingCoordinate", + "numSamplePoints", + "segmentCount", + "spatialLength", + "closed", + "valid", + "expX", + "expY", + "expZ", + "offset", + "analyticOffset", + ] model_config = ConfigDict( populate_by_name=True, @@ -46,7 +64,6 @@ class AnalyticCurve(Curve): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -71,8 +88,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -81,16 +97,16 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of beginning_coordinate if self.beginning_coordinate: - _dict['beginningCoordinate'] = self.beginning_coordinate.to_dict() + _dict["beginningCoordinate"] = self.beginning_coordinate.to_dict() # override the default output from pydantic by calling `to_dict()` of ending_coordinate if self.ending_coordinate: - _dict['endingCoordinate'] = self.ending_coordinate.to_dict() + _dict["endingCoordinate"] = self.ending_coordinate.to_dict() # override the default output from pydantic by calling `to_dict()` of offset if self.offset: - _dict['offset'] = self.offset.to_dict() + _dict["offset"] = self.offset.to_dict() # override the default output from pydantic by calling `to_dict()` of analytic_offset if self.analytic_offset: - _dict['analyticOffset'] = self.analytic_offset.to_dict() + _dict["analyticOffset"] = self.analytic_offset.to_dict() return _dict @classmethod @@ -110,10 +126,14 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "bClosed": obj.get("bClosed"), "description": obj.get("description"), - "type": obj.get("type") if obj.get("type") is not None else 'AnalyticCurve', - "beginningCoordinate": Coordinate.from_dict(obj["beginningCoordinate"]) if obj.get("beginningCoordinate") is not None else None, + "type": obj.get("type") if obj.get("type") is not None else "AnalyticCurve", + "beginningCoordinate": Coordinate.from_dict(obj["beginningCoordinate"]) + if obj.get("beginningCoordinate") is not None + else None, "defaultNumSamples": obj.get("defaultNumSamples"), - "endingCoordinate": Coordinate.from_dict(obj["endingCoordinate"]) if obj.get("endingCoordinate") is not None else None, + "endingCoordinate": Coordinate.from_dict(obj["endingCoordinate"]) + if obj.get("endingCoordinate") is not None + else None, "numSamplePoints": obj.get("numSamplePoints"), "segmentCount": obj.get("segmentCount"), "spatialLength": obj.get("spatialLength"), @@ -123,8 +143,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "expY": obj.get("expY"), "expZ": obj.get("expZ"), "offset": Coordinate.from_dict(obj["offset"]) if obj.get("offset") is not None else None, - "analyticOffset": Coordinate.from_dict(obj["analyticOffset"]) if obj.get("analyticOffset") is not None else None + "analyticOffset": Coordinate.from_dict(obj["analyticOffset"]) + if obj.get("analyticOffset") is not None + else None, }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/annotated_function_dto.py b/pyvcell/_internal/api/vcell_client/models/annotated_function_dto.py index d899080..fe23241 100644 --- a/pyvcell/_internal/api/vcell_client/models/annotated_function_dto.py +++ b/pyvcell/_internal/api/vcell_client/models/annotated_function_dto.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -26,17 +25,26 @@ from typing import Optional, Set from typing_extensions import Self + class AnnotatedFunctionDTO(BaseModel): """ AnnotatedFunctionDTO - """ # noqa: E501 + """ # noqa: E501 + function_name: Optional[StrictStr] = Field(default=None, alias="functionName") function_expression: Optional[StrictStr] = Field(default=None, alias="functionExpression") error: Optional[StrictStr] = None domain: Optional[Domain] = None function_type: Optional[VariableType] = Field(default=None, alias="functionType") category: Optional[FunctionCategory] = None - __properties: ClassVar[List[str]] = ["functionName", "functionExpression", "error", "domain", "functionType", "category"] + __properties: ClassVar[List[str]] = [ + "functionName", + "functionExpression", + "error", + "domain", + "functionType", + "category", + ] model_config = ConfigDict( populate_by_name=True, @@ -44,7 +52,6 @@ class AnnotatedFunctionDTO(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -69,8 +76,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -79,10 +85,10 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of domain if self.domain: - _dict['domain'] = self.domain.to_dict() + _dict["domain"] = self.domain.to_dict() # override the default output from pydantic by calling `to_dict()` of function_type if self.function_type: - _dict['functionType'] = self.function_type.to_dict() + _dict["functionType"] = self.function_type.to_dict() return _dict @classmethod @@ -97,16 +103,18 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in AnnotatedFunctionDTO) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in AnnotatedFunctionDTO) in the input: " + _key + ) _obj = cls.model_validate({ "functionName": obj.get("functionName"), "functionExpression": obj.get("functionExpression"), "error": obj.get("error"), "domain": Domain.from_dict(obj["domain"]) if obj.get("domain") is not None else None, - "functionType": VariableType.from_dict(obj["functionType"]) if obj.get("functionType") is not None else None, - "category": obj.get("category") + "functionType": VariableType.from_dict(obj["functionType"]) + if obj.get("functionType") is not None + else None, + "category": obj.get("category"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/application_info.py b/pyvcell/_internal/api/vcell_client/models/application_info.py index acbc657..a8ec484 100644 --- a/pyvcell/_internal/api/vcell_client/models/application_info.py +++ b/pyvcell/_internal/api/vcell_client/models/application_info.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class ApplicationInfo(BaseModel): """ ApplicationInfo - """ # noqa: E501 + """ # noqa: E501 + name: Optional[StrictStr] = None type: Optional[MathType] = None dimensions: Optional[StrictInt] = None @@ -40,7 +41,6 @@ class ApplicationInfo(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -65,8 +65,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -87,14 +86,14 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in ApplicationInfo) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in ApplicationInfo) in the input: " + _key + ) _obj = cls.model_validate({ "name": obj.get("name"), "type": obj.get("type"), "dimensions": obj.get("dimensions"), - "geometryName": obj.get("geometryName") + "geometryName": obj.get("geometryName"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/batch_system_type.py b/pyvcell/_internal/api/vcell_client/models/batch_system_type.py index 37ca1c2..0b1305e 100644 --- a/pyvcell/_internal/api/vcell_client/models/batch_system_type.py +++ b/pyvcell/_internal/api/vcell_client/models/batch_system_type.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,13 +26,11 @@ class BatchSystemType(str, Enum): """ allowed enum values """ - PBS = 'PBS' - SGE = 'SGE' - SLURM = 'SLURM' + PBS = "PBS" + SGE = "SGE" + SLURM = "SLURM" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of BatchSystemType from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/bio_model.py b/pyvcell/_internal/api/vcell_client/models/bio_model.py index 300d5e7..e6a8f42 100644 --- a/pyvcell/_internal/api/vcell_client/models/bio_model.py +++ b/pyvcell/_internal/api/vcell_client/models/bio_model.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class BioModel(BaseModel): """ BioModel - """ # noqa: E501 + """ # noqa: E501 + bm_key: Optional[StrictStr] = Field(default=None, alias="bmKey") name: Optional[StrictStr] = None privacy: Optional[StrictInt] = None @@ -39,7 +40,20 @@ class BioModel(BaseModel): owner_key: Optional[StrictStr] = Field(default=None, alias="ownerKey") simulation_key_list: Optional[List[StrictStr]] = Field(default=None, alias="simulationKeyList") applications: Optional[List[Dict[str, Any]]] = None - __properties: ClassVar[List[str]] = ["bmKey", "name", "privacy", "groupUsers", "savedDate", "annot", "branchID", "physModelKey", "ownerName", "ownerKey", "simulationKeyList", "applications"] + __properties: ClassVar[List[str]] = [ + "bmKey", + "name", + "privacy", + "groupUsers", + "savedDate", + "annot", + "branchID", + "physModelKey", + "ownerName", + "ownerKey", + "simulationKeyList", + "applications", + ] model_config = ConfigDict( populate_by_name=True, @@ -47,7 +61,6 @@ class BioModel(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -72,8 +85,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -108,8 +120,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "ownerName": obj.get("ownerName"), "ownerKey": obj.get("ownerKey"), "simulationKeyList": obj.get("simulationKeyList"), - "applications": obj.get("applications") + "applications": obj.get("applications"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/bio_model_child_summary.py b/pyvcell/_internal/api/vcell_client/models/bio_model_child_summary.py index 0c431af..33c5a2f 100644 --- a/pyvcell/_internal/api/vcell_client/models/bio_model_child_summary.py +++ b/pyvcell/_internal/api/vcell_client/models/bio_model_child_summary.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -25,10 +24,12 @@ from typing import Optional, Set from typing_extensions import Self + class BioModelChildSummary(BaseModel): """ BioModelChildSummary - """ # noqa: E501 + """ # noqa: E501 + sc_names: Optional[List[StrictStr]] = Field(default=None, alias="scNames") sc_annots: Optional[List[StrictStr]] = Field(default=None, alias="scAnnots") geo_names: Optional[List[StrictStr]] = Field(default=None, alias="geoNames") @@ -38,10 +39,25 @@ class BioModelChildSummary(BaseModel): sim_annots: Optional[List[List[StrictStr]]] = Field(default=None, alias="simAnnots") geometry_dimensions: Optional[List[StrictInt]] = Field(default=None, alias="geometryDimensions") geometry_names: Optional[List[StrictStr]] = Field(default=None, alias="geometryNames") - simulation_context_annotations: Optional[List[StrictStr]] = Field(default=None, alias="simulationContextAnnotations") + simulation_context_annotations: Optional[List[StrictStr]] = Field( + default=None, alias="simulationContextAnnotations" + ) simulation_context_names: Optional[List[StrictStr]] = Field(default=None, alias="simulationContextNames") application_info: Optional[List[ApplicationInfo]] = Field(default=None, alias="applicationInfo") - __properties: ClassVar[List[str]] = ["scNames", "scAnnots", "geoNames", "geoDims", "appTypes", "simNames", "simAnnots", "geometryDimensions", "geometryNames", "simulationContextAnnotations", "simulationContextNames", "applicationInfo"] + __properties: ClassVar[List[str]] = [ + "scNames", + "scAnnots", + "geoNames", + "geoDims", + "appTypes", + "simNames", + "simAnnots", + "geometryDimensions", + "geometryNames", + "simulationContextAnnotations", + "simulationContextNames", + "applicationInfo", + ] model_config = ConfigDict( populate_by_name=True, @@ -49,7 +65,6 @@ class BioModelChildSummary(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -74,8 +89,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -88,7 +102,7 @@ def to_dict(self) -> Dict[str, Any]: for _item_application_info in self.application_info: if _item_application_info: _items.append(_item_application_info.to_dict()) - _dict['applicationInfo'] = _items + _dict["applicationInfo"] = _items return _dict @classmethod @@ -103,7 +117,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in BioModelChildSummary) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in BioModelChildSummary) in the input: " + _key + ) _obj = cls.model_validate({ "scNames": obj.get("scNames"), @@ -117,8 +133,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "geometryNames": obj.get("geometryNames"), "simulationContextAnnotations": obj.get("simulationContextAnnotations"), "simulationContextNames": obj.get("simulationContextNames"), - "applicationInfo": [ApplicationInfo.from_dict(_item) for _item in obj["applicationInfo"]] if obj.get("applicationInfo") is not None else None + "applicationInfo": [ApplicationInfo.from_dict(_item) for _item in obj["applicationInfo"]] + if obj.get("applicationInfo") is not None + else None, }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/bio_model_summary.py b/pyvcell/_internal/api/vcell_client/models/bio_model_summary.py index 7af76d5..edee188 100644 --- a/pyvcell/_internal/api/vcell_client/models/bio_model_summary.py +++ b/pyvcell/_internal/api/vcell_client/models/bio_model_summary.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -27,10 +26,12 @@ from typing import Optional, Set from typing_extensions import Self + class BioModelSummary(BaseModel): """ BioModelSummary - """ # noqa: E501 + """ # noqa: E501 + version: Optional[Version] = None summary: Optional[BioModelChildSummary] = None publication_information: Optional[List[PublicationInfo]] = Field(default=None, alias="publicationInformation") @@ -43,7 +44,6 @@ class BioModelSummary(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -68,8 +68,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -78,20 +77,20 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of version if self.version: - _dict['version'] = self.version.to_dict() + _dict["version"] = self.version.to_dict() # override the default output from pydantic by calling `to_dict()` of summary if self.summary: - _dict['summary'] = self.summary.to_dict() + _dict["summary"] = self.summary.to_dict() # override the default output from pydantic by calling `to_dict()` of each item in publication_information (list) _items = [] if self.publication_information: for _item_publication_information in self.publication_information: if _item_publication_information: _items.append(_item_publication_information.to_dict()) - _dict['publicationInformation'] = _items + _dict["publicationInformation"] = _items # override the default output from pydantic by calling `to_dict()` of v_cell_software_version if self.v_cell_software_version: - _dict['vCellSoftwareVersion'] = self.v_cell_software_version.to_dict() + _dict["vCellSoftwareVersion"] = self.v_cell_software_version.to_dict() return _dict @classmethod @@ -106,14 +105,18 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in BioModelSummary) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in BioModelSummary) in the input: " + _key + ) _obj = cls.model_validate({ "version": Version.from_dict(obj["version"]) if obj.get("version") is not None else None, "summary": BioModelChildSummary.from_dict(obj["summary"]) if obj.get("summary") is not None else None, - "publicationInformation": [PublicationInfo.from_dict(_item) for _item in obj["publicationInformation"]] if obj.get("publicationInformation") is not None else None, - "vCellSoftwareVersion": VCellSoftwareVersion.from_dict(obj["vCellSoftwareVersion"]) if obj.get("vCellSoftwareVersion") is not None else None + "publicationInformation": [PublicationInfo.from_dict(_item) for _item in obj["publicationInformation"]] + if obj.get("publicationInformation") is not None + else None, + "vCellSoftwareVersion": VCellSoftwareVersion.from_dict(obj["vCellSoftwareVersion"]) + if obj.get("vCellSoftwareVersion") is not None + else None, }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/biomodel_ref.py b/pyvcell/_internal/api/vcell_client/models/biomodel_ref.py index e8848f6..1022840 100644 --- a/pyvcell/_internal/api/vcell_client/models/biomodel_ref.py +++ b/pyvcell/_internal/api/vcell_client/models/biomodel_ref.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class BiomodelRef(BaseModel): """ BiomodelRef - """ # noqa: E501 + """ # noqa: E501 + bm_key: Optional[StrictInt] = Field(default=None, alias="bmKey") name: Optional[StrictStr] = None owner_name: Optional[StrictStr] = Field(default=None, alias="ownerName") @@ -40,7 +41,6 @@ class BiomodelRef(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -65,8 +65,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -94,8 +93,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "name": obj.get("name"), "ownerName": obj.get("ownerName"), "ownerKey": obj.get("ownerKey"), - "versionFlag": obj.get("versionFlag") + "versionFlag": obj.get("versionFlag"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/composite_curve.py b/pyvcell/_internal/api/vcell_client/models/composite_curve.py index 64f7345..5660e32 100644 --- a/pyvcell/_internal/api/vcell_client/models/composite_curve.py +++ b/pyvcell/_internal/api/vcell_client/models/composite_curve.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -25,17 +24,33 @@ from typing import Optional, Set from typing_extensions import Self + class CompositeCurve(Curve): """ CompositeCurve - """ # noqa: E501 + """ # noqa: E501 + type: StrictStr field_curves: Optional[List[Any]] = Field(default=None, alias="fieldCurves") curve_count: Optional[StrictInt] = Field(default=None, alias="curveCount") default_num_samples: Optional[StrictInt] = Field(default=None, alias="defaultNumSamples") segment_count: Optional[StrictInt] = Field(default=None, alias="segmentCount") valid: Optional[StrictBool] = None - __properties: ClassVar[List[str]] = ["bClosed", "description", "type", "beginningCoordinate", "defaultNumSamples", "endingCoordinate", "numSamplePoints", "segmentCount", "spatialLength", "closed", "valid", "fieldCurves", "curveCount"] + __properties: ClassVar[List[str]] = [ + "bClosed", + "description", + "type", + "beginningCoordinate", + "defaultNumSamples", + "endingCoordinate", + "numSamplePoints", + "segmentCount", + "spatialLength", + "closed", + "valid", + "fieldCurves", + "curveCount", + ] model_config = ConfigDict( populate_by_name=True, @@ -43,7 +58,6 @@ class CompositeCurve(Curve): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -68,8 +82,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -78,10 +91,10 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of beginning_coordinate if self.beginning_coordinate: - _dict['beginningCoordinate'] = self.beginning_coordinate.to_dict() + _dict["beginningCoordinate"] = self.beginning_coordinate.to_dict() # override the default output from pydantic by calling `to_dict()` of ending_coordinate if self.ending_coordinate: - _dict['endingCoordinate'] = self.ending_coordinate.to_dict() + _dict["endingCoordinate"] = self.ending_coordinate.to_dict() return _dict @classmethod @@ -101,18 +114,20 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "bClosed": obj.get("bClosed"), "description": obj.get("description"), - "type": obj.get("type") if obj.get("type") is not None else 'CompositeCurve', - "beginningCoordinate": Coordinate.from_dict(obj["beginningCoordinate"]) if obj.get("beginningCoordinate") is not None else None, + "type": obj.get("type") if obj.get("type") is not None else "CompositeCurve", + "beginningCoordinate": Coordinate.from_dict(obj["beginningCoordinate"]) + if obj.get("beginningCoordinate") is not None + else None, "defaultNumSamples": obj.get("defaultNumSamples"), - "endingCoordinate": Coordinate.from_dict(obj["endingCoordinate"]) if obj.get("endingCoordinate") is not None else None, + "endingCoordinate": Coordinate.from_dict(obj["endingCoordinate"]) + if obj.get("endingCoordinate") is not None + else None, "numSamplePoints": obj.get("numSamplePoints"), "segmentCount": obj.get("segmentCount"), "spatialLength": obj.get("spatialLength"), "closed": obj.get("closed"), "valid": obj.get("valid"), "fieldCurves": obj.get("fieldCurves"), - "curveCount": obj.get("curveCount") + "curveCount": obj.get("curveCount"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/control_point_curve.py b/pyvcell/_internal/api/vcell_client/models/control_point_curve.py index 2cb6bc8..4f1e34a 100644 --- a/pyvcell/_internal/api/vcell_client/models/control_point_curve.py +++ b/pyvcell/_internal/api/vcell_client/models/control_point_curve.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -27,14 +26,17 @@ from typing_extensions import Self from typing import TYPE_CHECKING + if TYPE_CHECKING: from pyvcell._internal.api.vcell_client.models.sampled_curve import SampledCurve from pyvcell._internal.api.vcell_client.models.spline import Spline + class ControlPointCurve(Curve): """ ControlPointCurve - """ # noqa: E501 + """ # noqa: E501 + type: StrictStr control_points: Optional[List[Coordinate]] = Field(default=None, alias="controlPoints") control_point_count: Optional[StrictInt] = Field(default=None, alias="controlPointCount") @@ -43,7 +45,25 @@ class ControlPointCurve(Curve): min_control_points: Optional[StrictInt] = Field(default=None, alias="minControlPoints") control_point_addable: Optional[StrictBool] = Field(default=None, alias="controlPointAddable") valid: Optional[StrictBool] = None - __properties: ClassVar[List[str]] = ["bClosed", "description", "type", "beginningCoordinate", "defaultNumSamples", "endingCoordinate", "numSamplePoints", "segmentCount", "spatialLength", "closed", "valid", "controlPoints", "controlPointCount", "controlPointsVector", "maxControlPoints", "minControlPoints", "controlPointAddable"] + __properties: ClassVar[List[str]] = [ + "bClosed", + "description", + "type", + "beginningCoordinate", + "defaultNumSamples", + "endingCoordinate", + "numSamplePoints", + "segmentCount", + "spatialLength", + "closed", + "valid", + "controlPoints", + "controlPointCount", + "controlPointsVector", + "maxControlPoints", + "minControlPoints", + "controlPointAddable", + ] model_config = ConfigDict( populate_by_name=True, @@ -51,14 +71,11 @@ class ControlPointCurve(Curve): protected_namespaces=(), ) - # JSON field name that stores the object type - __discriminator_property_name: ClassVar[str] = 'type' + __discriminator_property_name: ClassVar[str] = "type" # discriminator mappings - __discriminator_value_class_map: ClassVar[Dict[str, str]] = { - 'SampledCurve': 'SampledCurve','Spline': 'Spline' - } + __discriminator_value_class_map: ClassVar[Dict[str, str]] = {"SampledCurve": "SampledCurve", "Spline": "Spline"} @classmethod def get_discriminator_value(cls, obj: Dict[str, Any]) -> Optional[str]: @@ -93,8 +110,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -103,24 +119,24 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of beginning_coordinate if self.beginning_coordinate: - _dict['beginningCoordinate'] = self.beginning_coordinate.to_dict() + _dict["beginningCoordinate"] = self.beginning_coordinate.to_dict() # override the default output from pydantic by calling `to_dict()` of ending_coordinate if self.ending_coordinate: - _dict['endingCoordinate'] = self.ending_coordinate.to_dict() + _dict["endingCoordinate"] = self.ending_coordinate.to_dict() # override the default output from pydantic by calling `to_dict()` of each item in control_points (list) _items = [] if self.control_points: for _item_control_points in self.control_points: if _item_control_points: _items.append(_item_control_points.to_dict()) - _dict['controlPoints'] = _items + _dict["controlPoints"] = _items # override the default output from pydantic by calling `to_dict()` of each item in control_points_vector (list) _items = [] if self.control_points_vector: for _item_control_points_vector in self.control_points_vector: if _item_control_points_vector: _items.append(_item_control_points_vector.to_dict()) - _dict['controlPointsVector'] = _items + _dict["controlPointsVector"] = _items return _dict @classmethod @@ -128,13 +144,16 @@ def from_dict(cls, obj: Dict[str, Any]) -> Optional[Union[SampledCurve, Spline]] """Create an instance of ControlPointCurve from a dict""" # look up the object type based on discriminator mapping object_type = cls.get_discriminator_value(obj) - if object_type == 'SampledCurve': + if object_type == "SampledCurve": return import_module("pyvcell._internal.api.vcell_client.models.sampled_curve").SampledCurve.from_dict(obj) - if object_type == 'Spline': + if object_type == "Spline": return import_module("pyvcell._internal.api.vcell_client.models.spline").Spline.from_dict(obj) - raise ValueError("ControlPointCurve failed to lookup discriminator value from " + - json.dumps(obj) + ". Discriminator property name: " + cls.__discriminator_property_name + - ", mapping: " + json.dumps(cls.__discriminator_value_class_map)) - - + raise ValueError( + "ControlPointCurve failed to lookup discriminator value from " + + json.dumps(obj) + + ". Discriminator property name: " + + cls.__discriminator_property_name + + ", mapping: " + + json.dumps(cls.__discriminator_value_class_map) + ) diff --git a/pyvcell/_internal/api/vcell_client/models/coordinate.py b/pyvcell/_internal/api/vcell_client/models/coordinate.py index 263d18b..15f1d22 100644 --- a/pyvcell/_internal/api/vcell_client/models/coordinate.py +++ b/pyvcell/_internal/api/vcell_client/models/coordinate.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class Coordinate(BaseModel): """ Coordinate - """ # noqa: E501 + """ # noqa: E501 + x: Optional[Union[StrictFloat, StrictInt]] = None y: Optional[Union[StrictFloat, StrictInt]] = None z: Optional[Union[StrictFloat, StrictInt]] = None @@ -38,7 +39,6 @@ class Coordinate(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,8 +63,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -87,11 +86,5 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if _key not in cls.__properties: raise ValueError("Error due to additional fields (not defined in Coordinate) in the input: " + _key) - _obj = cls.model_validate({ - "x": obj.get("x"), - "y": obj.get("y"), - "z": obj.get("z") - }) + _obj = cls.model_validate({"x": obj.get("x"), "y": obj.get("y"), "z": obj.get("z")}) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/curve.py b/pyvcell/_internal/api/vcell_client/models/curve.py index 74e811c..e961f47 100644 --- a/pyvcell/_internal/api/vcell_client/models/curve.py +++ b/pyvcell/_internal/api/vcell_client/models/curve.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -26,6 +25,7 @@ from typing_extensions import Self from typing import TYPE_CHECKING + if TYPE_CHECKING: from pyvcell._internal.api.vcell_client.models.analytic_curve import AnalyticCurve from pyvcell._internal.api.vcell_client.models.composite_curve import CompositeCurve @@ -33,10 +33,12 @@ from pyvcell._internal.api.vcell_client.models.sampled_curve import SampledCurve from pyvcell._internal.api.vcell_client.models.spline import Spline + class Curve(BaseModel): """ Curve - """ # noqa: E501 + """ # noqa: E501 + b_closed: Optional[StrictBool] = Field(default=None, alias="bClosed") description: Optional[StrictStr] = None type: StrictStr @@ -48,7 +50,19 @@ class Curve(BaseModel): spatial_length: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="spatialLength") closed: Optional[StrictBool] = None valid: Optional[StrictBool] = None - __properties: ClassVar[List[str]] = ["bClosed", "description", "type", "beginningCoordinate", "defaultNumSamples", "endingCoordinate", "numSamplePoints", "segmentCount", "spatialLength", "closed", "valid"] + __properties: ClassVar[List[str]] = [ + "bClosed", + "description", + "type", + "beginningCoordinate", + "defaultNumSamples", + "endingCoordinate", + "numSamplePoints", + "segmentCount", + "spatialLength", + "closed", + "valid", + ] model_config = ConfigDict( populate_by_name=True, @@ -56,13 +70,16 @@ class Curve(BaseModel): protected_namespaces=(), ) - # JSON field name that stores the object type - __discriminator_property_name: ClassVar[str] = 'type' + __discriminator_property_name: ClassVar[str] = "type" # discriminator mappings __discriminator_value_class_map: ClassVar[Dict[str, str]] = { - 'AnalyticCurve': 'AnalyticCurve','CompositeCurve': 'CompositeCurve','ControlPointCurve': 'ControlPointCurve','SampledCurve': 'SampledCurve','Spline': 'Spline' + "AnalyticCurve": "AnalyticCurve", + "CompositeCurve": "CompositeCurve", + "ControlPointCurve": "ControlPointCurve", + "SampledCurve": "SampledCurve", + "Spline": "Spline", } @classmethod @@ -84,7 +101,9 @@ def to_json(self) -> str: return json.dumps(self.to_dict()) @classmethod - def from_json(cls, json_str: str) -> Optional[Union[AnalyticCurve, CompositeCurve, ControlPointCurve, SampledCurve, Spline]]: + def from_json( + cls, json_str: str + ) -> Optional[Union[AnalyticCurve, CompositeCurve, ControlPointCurve, SampledCurve, Spline]]: """Create an instance of Curve from a JSON string""" return cls.from_dict(json.loads(json_str)) @@ -98,8 +117,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -108,30 +126,41 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of beginning_coordinate if self.beginning_coordinate: - _dict['beginningCoordinate'] = self.beginning_coordinate.to_dict() + _dict["beginningCoordinate"] = self.beginning_coordinate.to_dict() # override the default output from pydantic by calling `to_dict()` of ending_coordinate if self.ending_coordinate: - _dict['endingCoordinate'] = self.ending_coordinate.to_dict() + _dict["endingCoordinate"] = self.ending_coordinate.to_dict() return _dict @classmethod - def from_dict(cls, obj: Dict[str, Any]) -> Optional[Union[AnalyticCurve, CompositeCurve, ControlPointCurve, SampledCurve, Spline]]: + def from_dict( + cls, obj: Dict[str, Any] + ) -> Optional[Union[AnalyticCurve, CompositeCurve, ControlPointCurve, SampledCurve, Spline]]: """Create an instance of Curve from a dict""" # look up the object type based on discriminator mapping object_type = cls.get_discriminator_value(obj) - if object_type == 'AnalyticCurve': - return import_module("pyvcell._internal.api.vcell_client.models.analytic_curve").AnalyticCurve.from_dict(obj) - if object_type == 'CompositeCurve': - return import_module("pyvcell._internal.api.vcell_client.models.composite_curve").CompositeCurve.from_dict(obj) - if object_type == 'ControlPointCurve': - return import_module("pyvcell._internal.api.vcell_client.models.control_point_curve").ControlPointCurve.from_dict(obj) - if object_type == 'SampledCurve': + if object_type == "AnalyticCurve": + return import_module("pyvcell._internal.api.vcell_client.models.analytic_curve").AnalyticCurve.from_dict( + obj + ) + if object_type == "CompositeCurve": + return import_module("pyvcell._internal.api.vcell_client.models.composite_curve").CompositeCurve.from_dict( + obj + ) + if object_type == "ControlPointCurve": + return import_module( + "pyvcell._internal.api.vcell_client.models.control_point_curve" + ).ControlPointCurve.from_dict(obj) + if object_type == "SampledCurve": return import_module("pyvcell._internal.api.vcell_client.models.sampled_curve").SampledCurve.from_dict(obj) - if object_type == 'Spline': + if object_type == "Spline": return import_module("pyvcell._internal.api.vcell_client.models.spline").Spline.from_dict(obj) - raise ValueError("Curve failed to lookup discriminator value from " + - json.dumps(obj) + ". Discriminator property name: " + cls.__discriminator_property_name + - ", mapping: " + json.dumps(cls.__discriminator_value_class_map)) - - + raise ValueError( + "Curve failed to lookup discriminator value from " + + json.dumps(obj) + + ". Discriminator property name: " + + cls.__discriminator_property_name + + ", mapping: " + + json.dumps(cls.__discriminator_value_class_map) + ) diff --git a/pyvcell/_internal/api/vcell_client/models/curve_selection_info.py b/pyvcell/_internal/api/vcell_client/models/curve_selection_info.py index 6493e68..194b146 100644 --- a/pyvcell/_internal/api/vcell_client/models/curve_selection_info.py +++ b/pyvcell/_internal/api/vcell_client/models/curve_selection_info.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class CurveSelectionInfo(BaseModel): """ CurveSelectionInfo - """ # noqa: E501 + """ # noqa: E501 + field_curve: Optional[Curve] = Field(default=None, alias="fieldCurve") field_type: Optional[StrictInt] = Field(default=None, alias="fieldType") field_control_point: Optional[StrictInt] = Field(default=None, alias="fieldControlPoint") @@ -38,7 +39,18 @@ class CurveSelectionInfo(BaseModel): field_segment_extended: Optional[StrictInt] = Field(default=None, alias="fieldSegmentExtended") field_direction_negative: Optional[StrictBool] = Field(default=None, alias="fieldDirectionNegative") crossing: Optional[StrictBool] = None - __properties: ClassVar[List[str]] = ["fieldCurve", "fieldType", "fieldControlPoint", "fieldSegment", "fieldU", "fieldUExtended", "fieldControlPointExtended", "fieldSegmentExtended", "fieldDirectionNegative", "crossing"] + __properties: ClassVar[List[str]] = [ + "fieldCurve", + "fieldType", + "fieldControlPoint", + "fieldSegment", + "fieldU", + "fieldUExtended", + "fieldControlPointExtended", + "fieldSegmentExtended", + "fieldDirectionNegative", + "crossing", + ] model_config = ConfigDict( populate_by_name=True, @@ -46,7 +58,6 @@ class CurveSelectionInfo(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -71,8 +82,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -81,7 +91,7 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of field_curve if self.field_curve: - _dict['fieldCurve'] = self.field_curve.to_dict() + _dict["fieldCurve"] = self.field_curve.to_dict() return _dict @classmethod @@ -96,7 +106,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in CurveSelectionInfo) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in CurveSelectionInfo) in the input: " + _key + ) _obj = cls.model_validate({ "fieldCurve": Curve.from_dict(obj["fieldCurve"]) if obj.get("fieldCurve") is not None else None, @@ -108,8 +120,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "fieldControlPointExtended": obj.get("fieldControlPointExtended"), "fieldSegmentExtended": obj.get("fieldSegmentExtended"), "fieldDirectionNegative": obj.get("fieldDirectionNegative"), - "crossing": obj.get("crossing") + "crossing": obj.get("crossing"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/data_identifier.py b/pyvcell/_internal/api/vcell_client/models/data_identifier.py index d538548..5861147 100644 --- a/pyvcell/_internal/api/vcell_client/models/data_identifier.py +++ b/pyvcell/_internal/api/vcell_client/models/data_identifier.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -25,10 +24,12 @@ from typing import Optional, Set from typing_extensions import Self + class DataIdentifier(BaseModel): """ DataIdentifier - """ # noqa: E501 + """ # noqa: E501 + name: Optional[StrictStr] = None display_name: Optional[StrictStr] = Field(default=None, alias="displayName") variable_type: Optional[VariableType] = Field(default=None, alias="variableType") @@ -36,7 +37,15 @@ class DataIdentifier(BaseModel): b_function: Optional[StrictBool] = Field(default=None, alias="bFunction") function: Optional[StrictBool] = None visible: Optional[StrictBool] = None - __properties: ClassVar[List[str]] = ["name", "displayName", "variableType", "domain", "bFunction", "function", "visible"] + __properties: ClassVar[List[str]] = [ + "name", + "displayName", + "variableType", + "domain", + "bFunction", + "function", + "visible", + ] model_config = ConfigDict( populate_by_name=True, @@ -44,7 +53,6 @@ class DataIdentifier(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -69,8 +77,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -79,10 +86,10 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of variable_type if self.variable_type: - _dict['variableType'] = self.variable_type.to_dict() + _dict["variableType"] = self.variable_type.to_dict() # override the default output from pydantic by calling `to_dict()` of domain if self.domain: - _dict['domain'] = self.domain.to_dict() + _dict["domain"] = self.domain.to_dict() return _dict @classmethod @@ -102,12 +109,12 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "name": obj.get("name"), "displayName": obj.get("displayName"), - "variableType": VariableType.from_dict(obj["variableType"]) if obj.get("variableType") is not None else None, + "variableType": VariableType.from_dict(obj["variableType"]) + if obj.get("variableType") is not None + else None, "domain": Domain.from_dict(obj["domain"]) if obj.get("domain") is not None else None, "bFunction": obj.get("bFunction"), "function": obj.get("function"), - "visible": obj.get("visible") + "visible": obj.get("visible"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/detailed_state.py b/pyvcell/_internal/api/vcell_client/models/detailed_state.py index 9239bb4..51cd272 100644 --- a/pyvcell/_internal/api/vcell_client/models/detailed_state.py +++ b/pyvcell/_internal/api/vcell_client/models/detailed_state.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,60 +26,58 @@ class DetailedState(str, Enum): """ allowed enum values """ - UNKNOWN = 'UNKNOWN' - DATAMOVEREVENT_MOVED = 'DATAMOVEREVENT_MOVED' - WORKEREVENT_WORKERALIVE = 'WORKEREVENT_WORKERALIVE' - JOB_WAITING = 'JOB_WAITING' - JOB_QUEUED = 'JOB_QUEUED' - JOB_QUEUED_RETRY = 'JOB_QUEUED_RETRY' - JOB_DISPATCHED = 'JOB_DISPATCHED' - JOB_ACCEPTED = 'JOB_ACCEPTED' - SOLVER_READY = 'SOLVER_READY' - SOLVER_STARTING_INIT = 'SOLVER_STARTING_INIT' - SOLVEREVENT_STARTING_PROC_GEOM = 'SOLVEREVENT_STARTING_PROC_GEOM' - SOLVEREVENT_STARTING_RESAMPLE_FD = 'SOLVEREVENT_STARTING_RESAMPLE_FD' - SOLVER_RUNNING_INIT = 'SOLVER_RUNNING_INIT' - SOLVER_RUNNING_INIT_INPUT_FILE = 'SOLVER_RUNNING_INIT_INPUT_FILE' - SOLVER_RUNNING_INIT_CODEGEN = 'SOLVER_RUNNING_INIT_CODEGEN' - SOLVER_RUNNING_INIT_COMPILING = 'SOLVER_RUNNING_INIT_COMPILING' - SOLVER_RUNNING_INIT_COMPILECMD = 'SOLVER_RUNNING_INIT_COMPILECMD' - SOLVER_RUNNING_INIT_COMPILE_OK = 'SOLVER_RUNNING_INIT_COMPILE_OK' - SOLVER_RUNNING_INIT_LINKING = 'SOLVER_RUNNING_INIT_LINKING' - SOLVER_RUNNING_INIT_LINKCMD = 'SOLVER_RUNNING_INIT_LINKCMD' - SOLVER_RUNNING_INIT_LINK_OK = 'SOLVER_RUNNING_INIT_LINK_OK' - SOLVER_RUNNING_INIT_COMPILELINK_OK = 'SOLVER_RUNNING_INIT_COMPILELINK_OK' - SOLVEREVENT_STARTING_INIT = 'SOLVEREVENT_STARTING_INIT' - SOLVEREVENT_STARTING_CODEGEN = 'SOLVEREVENT_STARTING_CODEGEN' - SOLVEREVENT_STARTING_COMPILELINK = 'SOLVEREVENT_STARTING_COMPILELINK' - SOLVEREVENT_STARTING_INPUT_FILE = 'SOLVEREVENT_STARTING_INPUT_FILE' - SOLVEREVENT_STARTING = 'SOLVEREVENT_STARTING' - SOLVEREVENT_STARTING_SUBMITTING = 'SOLVEREVENT_STARTING_SUBMITTING' - SOLVEREVENT_STARTING_SUBMITTED = 'SOLVEREVENT_STARTING_SUBMITTED' - WORKEREVENT_STARTING = 'WORKEREVENT_STARTING' - SOLVEREVENT_RUNNING_START = 'SOLVEREVENT_RUNNING_START' - SOLVER_RUNNING_START = 'SOLVER_RUNNING_START' - JOB_RUNNING_UNKNOWN = 'JOB_RUNNING_UNKNOWN' - SOLVEREVENT_PRINTED = 'SOLVEREVENT_PRINTED' - WORKEREVENT_DATA = 'WORKEREVENT_DATA' - JOB_RUNNING = 'JOB_RUNNING' - SOLVEREVENT_PROGRESS = 'SOLVEREVENT_PROGRESS' - WORKEREVENT_PROGRESS = 'WORKEREVENT_PROGRESS' - WORKEREVENT_WORKEREXIT_NORMAL = 'WORKEREVENT_WORKEREXIT_NORMAL' - WORKEREVENT_WORKEREXIT_ERROR = 'WORKEREVENT_WORKEREXIT_ERROR' - SOLVEREVENT_FINISHED = 'SOLVEREVENT_FINISHED' - SOLVER_FINISHED = 'SOLVER_FINISHED' - WORKEREVENT_COMPLETED = 'WORKEREVENT_COMPLETED' - JOB_COMPLETED = 'JOB_COMPLETED' - SOLVER_STOPPED = 'SOLVER_STOPPED' - JOB_STOPPED = 'JOB_STOPPED' - JOB_FAILED_UNKNOWN = 'JOB_FAILED_UNKNOWN' - SOLVER_ABORTED = 'SOLVER_ABORTED' - WORKEREVENT_FAILURE = 'WORKEREVENT_FAILURE' - JOB_FAILED = 'JOB_FAILED' + UNKNOWN = "UNKNOWN" + DATAMOVEREVENT_MOVED = "DATAMOVEREVENT_MOVED" + WORKEREVENT_WORKERALIVE = "WORKEREVENT_WORKERALIVE" + JOB_WAITING = "JOB_WAITING" + JOB_QUEUED = "JOB_QUEUED" + JOB_QUEUED_RETRY = "JOB_QUEUED_RETRY" + JOB_DISPATCHED = "JOB_DISPATCHED" + JOB_ACCEPTED = "JOB_ACCEPTED" + SOLVER_READY = "SOLVER_READY" + SOLVER_STARTING_INIT = "SOLVER_STARTING_INIT" + SOLVEREVENT_STARTING_PROC_GEOM = "SOLVEREVENT_STARTING_PROC_GEOM" + SOLVEREVENT_STARTING_RESAMPLE_FD = "SOLVEREVENT_STARTING_RESAMPLE_FD" + SOLVER_RUNNING_INIT = "SOLVER_RUNNING_INIT" + SOLVER_RUNNING_INIT_INPUT_FILE = "SOLVER_RUNNING_INIT_INPUT_FILE" + SOLVER_RUNNING_INIT_CODEGEN = "SOLVER_RUNNING_INIT_CODEGEN" + SOLVER_RUNNING_INIT_COMPILING = "SOLVER_RUNNING_INIT_COMPILING" + SOLVER_RUNNING_INIT_COMPILECMD = "SOLVER_RUNNING_INIT_COMPILECMD" + SOLVER_RUNNING_INIT_COMPILE_OK = "SOLVER_RUNNING_INIT_COMPILE_OK" + SOLVER_RUNNING_INIT_LINKING = "SOLVER_RUNNING_INIT_LINKING" + SOLVER_RUNNING_INIT_LINKCMD = "SOLVER_RUNNING_INIT_LINKCMD" + SOLVER_RUNNING_INIT_LINK_OK = "SOLVER_RUNNING_INIT_LINK_OK" + SOLVER_RUNNING_INIT_COMPILELINK_OK = "SOLVER_RUNNING_INIT_COMPILELINK_OK" + SOLVEREVENT_STARTING_INIT = "SOLVEREVENT_STARTING_INIT" + SOLVEREVENT_STARTING_CODEGEN = "SOLVEREVENT_STARTING_CODEGEN" + SOLVEREVENT_STARTING_COMPILELINK = "SOLVEREVENT_STARTING_COMPILELINK" + SOLVEREVENT_STARTING_INPUT_FILE = "SOLVEREVENT_STARTING_INPUT_FILE" + SOLVEREVENT_STARTING = "SOLVEREVENT_STARTING" + SOLVEREVENT_STARTING_SUBMITTING = "SOLVEREVENT_STARTING_SUBMITTING" + SOLVEREVENT_STARTING_SUBMITTED = "SOLVEREVENT_STARTING_SUBMITTED" + WORKEREVENT_STARTING = "WORKEREVENT_STARTING" + SOLVEREVENT_RUNNING_START = "SOLVEREVENT_RUNNING_START" + SOLVER_RUNNING_START = "SOLVER_RUNNING_START" + JOB_RUNNING_UNKNOWN = "JOB_RUNNING_UNKNOWN" + SOLVEREVENT_PRINTED = "SOLVEREVENT_PRINTED" + WORKEREVENT_DATA = "WORKEREVENT_DATA" + JOB_RUNNING = "JOB_RUNNING" + SOLVEREVENT_PROGRESS = "SOLVEREVENT_PROGRESS" + WORKEREVENT_PROGRESS = "WORKEREVENT_PROGRESS" + WORKEREVENT_WORKEREXIT_NORMAL = "WORKEREVENT_WORKEREXIT_NORMAL" + WORKEREVENT_WORKEREXIT_ERROR = "WORKEREVENT_WORKEREXIT_ERROR" + SOLVEREVENT_FINISHED = "SOLVEREVENT_FINISHED" + SOLVER_FINISHED = "SOLVER_FINISHED" + WORKEREVENT_COMPLETED = "WORKEREVENT_COMPLETED" + JOB_COMPLETED = "JOB_COMPLETED" + SOLVER_STOPPED = "SOLVER_STOPPED" + JOB_STOPPED = "JOB_STOPPED" + JOB_FAILED_UNKNOWN = "JOB_FAILED_UNKNOWN" + SOLVER_ABORTED = "SOLVER_ABORTED" + WORKEREVENT_FAILURE = "WORKEREVENT_FAILURE" + JOB_FAILED = "JOB_FAILED" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of DetailedState from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/domain.py b/pyvcell/_internal/api/vcell_client/models/domain.py index 16c6694..28cfe69 100644 --- a/pyvcell/_internal/api/vcell_client/models/domain.py +++ b/pyvcell/_internal/api/vcell_client/models/domain.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class Domain(BaseModel): """ Domain - """ # noqa: E501 + """ # noqa: E501 + name: Optional[StrictStr] = None __properties: ClassVar[List[str]] = ["name"] @@ -36,7 +37,6 @@ class Domain(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -61,8 +61,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -85,9 +84,5 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if _key not in cls.__properties: raise ValueError("Error due to additional fields (not defined in Domain) in the input: " + _key) - _obj = cls.model_validate({ - "name": obj.get("name") - }) + _obj = cls.model_validate({"name": obj.get("name")}) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/export_event.py b/pyvcell/_internal/api/vcell_client/models/export_event.py index 5fcee64..d3259a0 100644 --- a/pyvcell/_internal/api/vcell_client/models/export_event.py +++ b/pyvcell/_internal/api/vcell_client/models/export_event.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -26,10 +25,12 @@ from typing import Optional, Set from typing_extensions import Self + class ExportEvent(BaseModel): """ ExportEvent - """ # noqa: E501 + """ # noqa: E501 + event_type: Optional[ExportProgressType] = Field(default=None, alias="eventType") progress: Optional[Union[StrictFloat, StrictInt]] = None format: Optional[StrictStr] = None @@ -39,7 +40,17 @@ class ExportEvent(BaseModel): data_key: Optional[StrictStr] = Field(default=None, alias="dataKey") data_id_string: Optional[StrictStr] = Field(default=None, alias="dataIdString") human_readable_data: Optional[HumanReadableExportData] = Field(default=None, alias="humanReadableData") - __properties: ClassVar[List[str]] = ["eventType", "progress", "format", "location", "user", "jobID", "dataKey", "dataIdString", "humanReadableData"] + __properties: ClassVar[List[str]] = [ + "eventType", + "progress", + "format", + "location", + "user", + "jobID", + "dataKey", + "dataIdString", + "humanReadableData", + ] model_config = ConfigDict( populate_by_name=True, @@ -47,7 +58,6 @@ class ExportEvent(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -72,8 +82,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -82,10 +91,10 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of user if self.user: - _dict['user'] = self.user.to_dict() + _dict["user"] = self.user.to_dict() # override the default output from pydantic by calling `to_dict()` of human_readable_data if self.human_readable_data: - _dict['humanReadableData'] = self.human_readable_data.to_dict() + _dict["humanReadableData"] = self.human_readable_data.to_dict() return _dict @classmethod @@ -111,8 +120,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "jobID": obj.get("jobID"), "dataKey": obj.get("dataKey"), "dataIdString": obj.get("dataIdString"), - "humanReadableData": HumanReadableExportData.from_dict(obj["humanReadableData"]) if obj.get("humanReadableData") is not None else None + "humanReadableData": HumanReadableExportData.from_dict(obj["humanReadableData"]) + if obj.get("humanReadableData") is not None + else None, }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/export_progress_type.py b/pyvcell/_internal/api/vcell_client/models/export_progress_type.py index 3657e38..87a6410 100644 --- a/pyvcell/_internal/api/vcell_client/models/export_progress_type.py +++ b/pyvcell/_internal/api/vcell_client/models/export_progress_type.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,15 +26,13 @@ class ExportProgressType(str, Enum): """ allowed enum values """ - EXPORT_START = 'EXPORT_START' - EXPORT_COMPLETE = 'EXPORT_COMPLETE' - EXPORT_FAILURE = 'EXPORT_FAILURE' - EXPORT_ASSEMBLING = 'EXPORT_ASSEMBLING' - EXPORT_PROGRESS = 'EXPORT_PROGRESS' + EXPORT_START = "EXPORT_START" + EXPORT_COMPLETE = "EXPORT_COMPLETE" + EXPORT_FAILURE = "EXPORT_FAILURE" + EXPORT_ASSEMBLING = "EXPORT_ASSEMBLING" + EXPORT_PROGRESS = "EXPORT_PROGRESS" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of ExportProgressType from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/exportable_data_type.py b/pyvcell/_internal/api/vcell_client/models/exportable_data_type.py index 87facf9..dd6b500 100644 --- a/pyvcell/_internal/api/vcell_client/models/exportable_data_type.py +++ b/pyvcell/_internal/api/vcell_client/models/exportable_data_type.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,13 +26,11 @@ class ExportableDataType(str, Enum): """ allowed enum values """ - ODE_VARIABLE_DATA = 'ODE_VARIABLE_DATA' - PDE_VARIABLE_DATA = 'PDE_VARIABLE_DATA' - PDE_PARTICLE_DATA = 'PDE_PARTICLE_DATA' + ODE_VARIABLE_DATA = "ODE_VARIABLE_DATA" + PDE_VARIABLE_DATA = "PDE_VARIABLE_DATA" + PDE_PARTICLE_DATA = "PDE_PARTICLE_DATA" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of ExportableDataType from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/extent.py b/pyvcell/_internal/api/vcell_client/models/extent.py index 8f1763a..6e0136d 100644 --- a/pyvcell/_internal/api/vcell_client/models/extent.py +++ b/pyvcell/_internal/api/vcell_client/models/extent.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class Extent(BaseModel): """ Extent - """ # noqa: E501 + """ # noqa: E501 + x: Optional[Union[StrictFloat, StrictInt]] = None y: Optional[Union[StrictFloat, StrictInt]] = None z: Optional[Union[StrictFloat, StrictInt]] = None @@ -38,7 +39,6 @@ class Extent(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,8 +63,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -87,11 +86,5 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if _key not in cls.__properties: raise ValueError("Error due to additional fields (not defined in Extent) in the input: " + _key) - _obj = cls.model_validate({ - "x": obj.get("x"), - "y": obj.get("y"), - "z": obj.get("z") - }) + _obj = cls.model_validate({"x": obj.get("x"), "y": obj.get("y"), "z": obj.get("z")}) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/external_data_identifier.py b/pyvcell/_internal/api/vcell_client/models/external_data_identifier.py index cbf3d71..0c3c751 100644 --- a/pyvcell/_internal/api/vcell_client/models/external_data_identifier.py +++ b/pyvcell/_internal/api/vcell_client/models/external_data_identifier.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class ExternalDataIdentifier(BaseModel): """ ExternalDataIdentifier - """ # noqa: E501 + """ # noqa: E501 + key: Optional[StrictStr] = None owner: Optional[User] = None name: Optional[StrictStr] = None @@ -35,7 +36,15 @@ class ExternalDataIdentifier(BaseModel): simulation_key: Optional[StrictStr] = Field(default=None, alias="simulationKey") parameter_scan_type: Optional[StrictBool] = Field(default=None, alias="parameterScanType") data_key: Optional[StrictStr] = Field(default=None, alias="dataKey") - __properties: ClassVar[List[str]] = ["key", "owner", "name", "jobIndex", "simulationKey", "parameterScanType", "dataKey"] + __properties: ClassVar[List[str]] = [ + "key", + "owner", + "name", + "jobIndex", + "simulationKey", + "parameterScanType", + "dataKey", + ] model_config = ConfigDict( populate_by_name=True, @@ -43,7 +52,6 @@ class ExternalDataIdentifier(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -68,8 +76,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -78,7 +85,7 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of owner if self.owner: - _dict['owner'] = self.owner.to_dict() + _dict["owner"] = self.owner.to_dict() return _dict @classmethod @@ -93,7 +100,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in ExternalDataIdentifier) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in ExternalDataIdentifier) in the input: " + _key + ) _obj = cls.model_validate({ "key": obj.get("key"), @@ -102,8 +111,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "jobIndex": obj.get("jobIndex"), "simulationKey": obj.get("simulationKey"), "parameterScanType": obj.get("parameterScanType"), - "dataKey": obj.get("dataKey") + "dataKey": obj.get("dataKey"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/field_data.py b/pyvcell/_internal/api/vcell_client/models/field_data.py index 220877e..911c3d0 100644 --- a/pyvcell/_internal/api/vcell_client/models/field_data.py +++ b/pyvcell/_internal/api/vcell_client/models/field_data.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -26,12 +25,16 @@ from typing import Optional, Set from typing_extensions import Self + class FieldData(BaseModel): """ FieldData - """ # noqa: E501 + """ # noqa: E501 + short_spec_data: Optional[List[List[List[StrictInt]]]] = Field(default=None, alias="shortSpecData") - double_spec_data: Optional[List[List[List[Union[StrictFloat, StrictInt]]]]] = Field(default=None, alias="doubleSpecData") + double_spec_data: Optional[List[List[List[Union[StrictFloat, StrictInt]]]]] = Field( + default=None, alias="doubleSpecData" + ) var_names: Optional[List[StrictStr]] = Field(default=None, alias="varNames") times: Optional[List[Union[StrictFloat, StrictInt]]] = None origin: Optional[Origin] = None @@ -39,7 +42,17 @@ class FieldData(BaseModel): isize: Optional[ISize] = None annotation: Optional[StrictStr] = None name: Optional[StrictStr] = None - __properties: ClassVar[List[str]] = ["shortSpecData", "doubleSpecData", "varNames", "times", "origin", "extent", "isize", "annotation", "name"] + __properties: ClassVar[List[str]] = [ + "shortSpecData", + "doubleSpecData", + "varNames", + "times", + "origin", + "extent", + "isize", + "annotation", + "name", + ] model_config = ConfigDict( populate_by_name=True, @@ -47,7 +60,6 @@ class FieldData(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -72,8 +84,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -82,13 +93,13 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of origin if self.origin: - _dict['origin'] = self.origin.to_dict() + _dict["origin"] = self.origin.to_dict() # override the default output from pydantic by calling `to_dict()` of extent if self.extent: - _dict['extent'] = self.extent.to_dict() + _dict["extent"] = self.extent.to_dict() # override the default output from pydantic by calling `to_dict()` of isize if self.isize: - _dict['isize'] = self.isize.to_dict() + _dict["isize"] = self.isize.to_dict() return _dict @classmethod @@ -114,8 +125,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "extent": Extent.from_dict(obj["extent"]) if obj.get("extent") is not None else None, "isize": ISize.from_dict(obj["isize"]) if obj.get("isize") is not None else None, "annotation": obj.get("annotation"), - "name": obj.get("name") + "name": obj.get("name"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/field_data_reference.py b/pyvcell/_internal/api/vcell_client/models/field_data_reference.py index 61ddf82..facf729 100644 --- a/pyvcell/_internal/api/vcell_client/models/field_data_reference.py +++ b/pyvcell/_internal/api/vcell_client/models/field_data_reference.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,13 +23,17 @@ from typing import Optional, Set from typing_extensions import Self + class FieldDataReference(BaseModel): """ FieldDataReference - """ # noqa: E501 + """ # noqa: E501 + field_data_id: Optional[ExternalDataIdentifier] = Field(default=None, alias="fieldDataID") annotation: Optional[StrictStr] = None - simulations_referencing_this_id: Optional[List[StrictStr]] = Field(default=None, alias="simulationsReferencingThisID") + simulations_referencing_this_id: Optional[List[StrictStr]] = Field( + default=None, alias="simulationsReferencingThisID" + ) __properties: ClassVar[List[str]] = ["fieldDataID", "annotation", "simulationsReferencingThisID"] model_config = ConfigDict( @@ -39,7 +42,6 @@ class FieldDataReference(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -64,8 +66,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -74,7 +75,7 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of field_data_id if self.field_data_id: - _dict['fieldDataID'] = self.field_data_id.to_dict() + _dict["fieldDataID"] = self.field_data_id.to_dict() return _dict @classmethod @@ -89,13 +90,15 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in FieldDataReference) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in FieldDataReference) in the input: " + _key + ) _obj = cls.model_validate({ - "fieldDataID": ExternalDataIdentifier.from_dict(obj["fieldDataID"]) if obj.get("fieldDataID") is not None else None, + "fieldDataID": ExternalDataIdentifier.from_dict(obj["fieldDataID"]) + if obj.get("fieldDataID") is not None + else None, "annotation": obj.get("annotation"), - "simulationsReferencingThisID": obj.get("simulationsReferencingThisID") + "simulationsReferencingThisID": obj.get("simulationsReferencingThisID"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/field_data_saved_results.py b/pyvcell/_internal/api/vcell_client/models/field_data_saved_results.py index cc6ce31..30517e8 100644 --- a/pyvcell/_internal/api/vcell_client/models/field_data_saved_results.py +++ b/pyvcell/_internal/api/vcell_client/models/field_data_saved_results.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class FieldDataSavedResults(BaseModel): """ FieldDataSavedResults - """ # noqa: E501 + """ # noqa: E501 + field_data_name: Optional[StrictStr] = Field(default=None, alias="fieldDataName") field_data_key: Optional[StrictStr] = Field(default=None, alias="fieldDataKey") __properties: ClassVar[List[str]] = ["fieldDataName", "fieldDataKey"] @@ -37,7 +38,6 @@ class FieldDataSavedResults(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -62,8 +62,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -84,12 +83,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in FieldDataSavedResults) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in FieldDataSavedResults) in the input: " + _key + ) - _obj = cls.model_validate({ - "fieldDataName": obj.get("fieldDataName"), - "fieldDataKey": obj.get("fieldDataKey") - }) + _obj = cls.model_validate({"fieldDataName": obj.get("fieldDataName"), "fieldDataKey": obj.get("fieldDataKey")}) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/field_data_shape.py b/pyvcell/_internal/api/vcell_client/models/field_data_shape.py index 402c9d8..48b9f52 100644 --- a/pyvcell/_internal/api/vcell_client/models/field_data_shape.py +++ b/pyvcell/_internal/api/vcell_client/models/field_data_shape.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -27,10 +26,12 @@ from typing import Optional, Set from typing_extensions import Self + class FieldDataShape(BaseModel): """ FieldDataShape - """ # noqa: E501 + """ # noqa: E501 + extent: Optional[Extent] = None origin: Optional[Origin] = None isize: Optional[ISize] = None @@ -44,7 +45,6 @@ class FieldDataShape(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -69,8 +69,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -79,20 +78,20 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of extent if self.extent: - _dict['extent'] = self.extent.to_dict() + _dict["extent"] = self.extent.to_dict() # override the default output from pydantic by calling `to_dict()` of origin if self.origin: - _dict['origin'] = self.origin.to_dict() + _dict["origin"] = self.origin.to_dict() # override the default output from pydantic by calling `to_dict()` of isize if self.isize: - _dict['isize'] = self.isize.to_dict() + _dict["isize"] = self.isize.to_dict() # override the default output from pydantic by calling `to_dict()` of each item in data_identifier (list) _items = [] if self.data_identifier: for _item_data_identifier in self.data_identifier: if _item_data_identifier: _items.append(_item_data_identifier.to_dict()) - _dict['dataIdentifier'] = _items + _dict["dataIdentifier"] = _items return _dict @classmethod @@ -113,9 +112,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "extent": Extent.from_dict(obj["extent"]) if obj.get("extent") is not None else None, "origin": Origin.from_dict(obj["origin"]) if obj.get("origin") is not None else None, "isize": ISize.from_dict(obj["isize"]) if obj.get("isize") is not None else None, - "dataIdentifier": [DataIdentifier.from_dict(_item) for _item in obj["dataIdentifier"]] if obj.get("dataIdentifier") is not None else None, - "times": obj.get("times") + "dataIdentifier": [DataIdentifier.from_dict(_item) for _item in obj["dataIdentifier"]] + if obj.get("dataIdentifier") is not None + else None, + "times": obj.get("times"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/function_category.py b/pyvcell/_internal/api/vcell_client/models/function_category.py index 68d643c..0e2826f 100644 --- a/pyvcell/_internal/api/vcell_client/models/function_category.py +++ b/pyvcell/_internal/api/vcell_client/models/function_category.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,14 +26,12 @@ class FunctionCategory(str, Enum): """ allowed enum values """ - PREDEFINED = 'PREDEFINED' - OLDUSERDEFINED = 'OLDUSERDEFINED' - OUTPUTFUNCTION = 'OUTPUTFUNCTION' - POSTPROCESSFUNCTION = 'POSTPROCESSFUNCTION' + PREDEFINED = "PREDEFINED" + OLDUSERDEFINED = "OLDUSERDEFINED" + OUTPUTFUNCTION = "OUTPUTFUNCTION" + POSTPROCESSFUNCTION = "POSTPROCESSFUNCTION" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of FunctionCategory from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/geometry_mode.py b/pyvcell/_internal/api/vcell_client/models/geometry_mode.py index 3475914..3f58590 100644 --- a/pyvcell/_internal/api/vcell_client/models/geometry_mode.py +++ b/pyvcell/_internal/api/vcell_client/models/geometry_mode.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,13 +26,11 @@ class GeometryMode(str, Enum): """ allowed enum values """ - GEOMETRY_SELECTIONS = 'GEOMETRY_SELECTIONS' - GEOMETRY_SLICE = 'GEOMETRY_SLICE' - GEOMETRY_FULL = 'GEOMETRY_FULL' + GEOMETRY_SELECTIONS = "GEOMETRY_SELECTIONS" + GEOMETRY_SLICE = "GEOMETRY_SLICE" + GEOMETRY_FULL = "GEOMETRY_FULL" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of GeometryMode from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/geometry_spec_dto.py b/pyvcell/_internal/api/vcell_client/models/geometry_spec_dto.py index 02aa771..d8e7aa1 100644 --- a/pyvcell/_internal/api/vcell_client/models/geometry_spec_dto.py +++ b/pyvcell/_internal/api/vcell_client/models/geometry_spec_dto.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -25,10 +24,12 @@ from typing import Optional, Set from typing_extensions import Self + class GeometrySpecDTO(BaseModel): """ GeometrySpecDTO - """ # noqa: E501 + """ # noqa: E501 + selections: Optional[List[SpatialSelection]] = None axis: Optional[StrictInt] = None slice_number: Optional[StrictInt] = Field(default=None, alias="sliceNumber") @@ -41,7 +42,6 @@ class GeometrySpecDTO(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -66,8 +66,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -80,7 +79,7 @@ def to_dict(self) -> Dict[str, Any]: for _item_selections in self.selections: if _item_selections: _items.append(_item_selections.to_dict()) - _dict['selections'] = _items + _dict["selections"] = _items return _dict @classmethod @@ -95,14 +94,16 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in GeometrySpecDTO) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in GeometrySpecDTO) in the input: " + _key + ) _obj = cls.model_validate({ - "selections": [SpatialSelection.from_dict(_item) for _item in obj["selections"]] if obj.get("selections") is not None else None, + "selections": [SpatialSelection.from_dict(_item) for _item in obj["selections"]] + if obj.get("selections") is not None + else None, "axis": obj.get("axis"), "sliceNumber": obj.get("sliceNumber"), - "geometryMode": obj.get("geometryMode") + "geometryMode": obj.get("geometryMode"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/geometry_summary.py b/pyvcell/_internal/api/vcell_client/models/geometry_summary.py index 9937706..c0434cd 100644 --- a/pyvcell/_internal/api/vcell_client/models/geometry_summary.py +++ b/pyvcell/_internal/api/vcell_client/models/geometry_summary.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -27,10 +26,12 @@ from typing import Optional, Set from typing_extensions import Self + class GeometrySummary(BaseModel): """ GeometrySummary - """ # noqa: E501 + """ # noqa: E501 + dimension: Optional[StrictInt] = None origin: Optional[Origin] = None extent: Optional[Extent] = None @@ -45,7 +46,6 @@ class GeometrySummary(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -70,8 +70,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -80,16 +79,16 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of origin if self.origin: - _dict['origin'] = self.origin.to_dict() + _dict["origin"] = self.origin.to_dict() # override the default output from pydantic by calling `to_dict()` of extent if self.extent: - _dict['extent'] = self.extent.to_dict() + _dict["extent"] = self.extent.to_dict() # override the default output from pydantic by calling `to_dict()` of version if self.version: - _dict['version'] = self.version.to_dict() + _dict["version"] = self.version.to_dict() # override the default output from pydantic by calling `to_dict()` of software_version if self.software_version: - _dict['softwareVersion'] = self.software_version.to_dict() + _dict["softwareVersion"] = self.software_version.to_dict() return _dict @classmethod @@ -104,7 +103,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in GeometrySummary) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in GeometrySummary) in the input: " + _key + ) _obj = cls.model_validate({ "dimension": obj.get("dimension"), @@ -112,8 +113,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "extent": Extent.from_dict(obj["extent"]) if obj.get("extent") is not None else None, "imageRef": obj.get("imageRef"), "version": Version.from_dict(obj["version"]) if obj.get("version") is not None else None, - "softwareVersion": VCellSoftwareVersion.from_dict(obj["softwareVersion"]) if obj.get("softwareVersion") is not None else None + "softwareVersion": VCellSoftwareVersion.from_dict(obj["softwareVersion"]) + if obj.get("softwareVersion") is not None + else None, }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/gif_image.py b/pyvcell/_internal/api/vcell_client/models/gif_image.py index a2197a1..fa969d8 100644 --- a/pyvcell/_internal/api/vcell_client/models/gif_image.py +++ b/pyvcell/_internal/api/vcell_client/models/gif_image.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,11 +23,15 @@ from typing import Optional, Set from typing_extensions import Self + class GIFImage(BaseModel): """ GIFImage - """ # noqa: E501 - gif_encoded_data: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = Field(default=None, alias="gifEncodedData") + """ # noqa: E501 + + gif_encoded_data: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = Field( + default=None, alias="gifEncodedData" + ) size: Optional[ISize] = None __properties: ClassVar[List[str]] = ["gifEncodedData", "size"] @@ -38,7 +41,6 @@ class GIFImage(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,8 +65,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -73,7 +74,7 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of size if self.size: - _dict['size'] = self.size.to_dict() + _dict["size"] = self.size.to_dict() return _dict @classmethod @@ -92,8 +93,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "gifEncodedData": obj.get("gifEncodedData"), - "size": ISize.from_dict(obj["size"]) if obj.get("size") is not None else None + "size": ISize.from_dict(obj["size"]) if obj.get("size") is not None else None, }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/group_access.py b/pyvcell/_internal/api/vcell_client/models/group_access.py index 1a6159a..8d4cda4 100644 --- a/pyvcell/_internal/api/vcell_client/models/group_access.py +++ b/pyvcell/_internal/api/vcell_client/models/group_access.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -25,15 +24,18 @@ from typing_extensions import Self from typing import TYPE_CHECKING + if TYPE_CHECKING: from pyvcell._internal.api.vcell_client.models.group_access_all import GroupAccessAll from pyvcell._internal.api.vcell_client.models.group_access_none import GroupAccessNone from pyvcell._internal.api.vcell_client.models.group_access_some import GroupAccessSome + class GroupAccess(BaseModel): """ GroupAccess - """ # noqa: E501 + """ # noqa: E501 + groupid: Union[StrictFloat, StrictInt] description: Optional[StrictStr] = None __properties: ClassVar[List[str]] = ["groupid", "description"] @@ -44,13 +46,14 @@ class GroupAccess(BaseModel): protected_namespaces=(), ) - # JSON field name that stores the object type - __discriminator_property_name: ClassVar[str] = 'type' + __discriminator_property_name: ClassVar[str] = "type" # discriminator mappings __discriminator_value_class_map: ClassVar[Dict[str, str]] = { - 'GroupAccessAll': 'GroupAccessAll','GroupAccessNone': 'GroupAccessNone','GroupAccessSome': 'GroupAccessSome' + "GroupAccessAll": "GroupAccessAll", + "GroupAccessNone": "GroupAccessNone", + "GroupAccessSome": "GroupAccessSome", } @classmethod @@ -86,8 +89,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -101,15 +103,24 @@ def from_dict(cls, obj: Dict[str, Any]) -> Optional[Union[GroupAccessAll, GroupA """Create an instance of GroupAccess from a dict""" # look up the object type based on discriminator mapping object_type = cls.get_discriminator_value(obj) - if object_type == 'GroupAccessAll': - return import_module("pyvcell._internal.api.vcell_client.models.group_access_all").GroupAccessAll.from_dict(obj) - if object_type == 'GroupAccessNone': - return import_module("pyvcell._internal.api.vcell_client.models.group_access_none").GroupAccessNone.from_dict(obj) - if object_type == 'GroupAccessSome': - return import_module("pyvcell._internal.api.vcell_client.models.group_access_some").GroupAccessSome.from_dict(obj) - - raise ValueError("GroupAccess failed to lookup discriminator value from " + - json.dumps(obj) + ". Discriminator property name: " + cls.__discriminator_property_name + - ", mapping: " + json.dumps(cls.__discriminator_value_class_map)) - - + if object_type == "GroupAccessAll": + return import_module("pyvcell._internal.api.vcell_client.models.group_access_all").GroupAccessAll.from_dict( + obj + ) + if object_type == "GroupAccessNone": + return import_module( + "pyvcell._internal.api.vcell_client.models.group_access_none" + ).GroupAccessNone.from_dict(obj) + if object_type == "GroupAccessSome": + return import_module( + "pyvcell._internal.api.vcell_client.models.group_access_some" + ).GroupAccessSome.from_dict(obj) + + raise ValueError( + "GroupAccess failed to lookup discriminator value from " + + json.dumps(obj) + + ". Discriminator property name: " + + cls.__discriminator_property_name + + ", mapping: " + + json.dumps(cls.__discriminator_value_class_map) + ) diff --git a/pyvcell/_internal/api/vcell_client/models/group_access_all.py b/pyvcell/_internal/api/vcell_client/models/group_access_all.py index 1960d39..73f7d86 100644 --- a/pyvcell/_internal/api/vcell_client/models/group_access_all.py +++ b/pyvcell/_internal/api/vcell_client/models/group_access_all.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class GroupAccessAll(GroupAccess): """ GroupAccessAll - """ # noqa: E501 + """ # noqa: E501 + type: StrictStr description: Optional[StrictStr] = None __properties: ClassVar[List[str]] = ["groupid", "description", "type"] @@ -38,7 +39,6 @@ class GroupAccessAll(GroupAccess): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,8 +63,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -90,8 +89,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "groupid": obj.get("groupid"), "description": obj.get("description"), - "type": obj.get("type") if obj.get("type") is not None else 'GroupAccessAll' + "type": obj.get("type") if obj.get("type") is not None else "GroupAccessAll", }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/group_access_none.py b/pyvcell/_internal/api/vcell_client/models/group_access_none.py index 84dbbed..92fbdce 100644 --- a/pyvcell/_internal/api/vcell_client/models/group_access_none.py +++ b/pyvcell/_internal/api/vcell_client/models/group_access_none.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class GroupAccessNone(GroupAccess): """ GroupAccessNone - """ # noqa: E501 + """ # noqa: E501 + type: StrictStr description: Optional[StrictStr] = None __properties: ClassVar[List[str]] = ["groupid", "description", "type"] @@ -38,7 +39,6 @@ class GroupAccessNone(GroupAccess): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,8 +63,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -85,13 +84,13 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in GroupAccessNone) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in GroupAccessNone) in the input: " + _key + ) _obj = cls.model_validate({ "groupid": obj.get("groupid"), "description": obj.get("description"), - "type": obj.get("type") if obj.get("type") is not None else 'GroupAccessNone' + "type": obj.get("type") if obj.get("type") is not None else "GroupAccessNone", }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/group_access_some.py b/pyvcell/_internal/api/vcell_client/models/group_access_some.py index d3fe28a..92f7fac 100644 --- a/pyvcell/_internal/api/vcell_client/models/group_access_some.py +++ b/pyvcell/_internal/api/vcell_client/models/group_access_some.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -25,10 +24,12 @@ from typing import Optional, Set from typing_extensions import Self + class GroupAccessSome(GroupAccess): """ GroupAccessSome - """ # noqa: E501 + """ # noqa: E501 + type: StrictStr hash: Optional[Union[StrictFloat, StrictInt]] = None group_members: Optional[List[User]] = Field(default=None, alias="groupMembers") @@ -36,7 +37,16 @@ class GroupAccessSome(GroupAccess): description: Optional[StrictStr] = None hidden_group_members: Optional[List[User]] = Field(default=None, alias="hiddenGroupMembers") normal_group_members: Optional[List[User]] = Field(default=None, alias="normalGroupMembers") - __properties: ClassVar[List[str]] = ["groupid", "description", "type", "hash", "groupMembers", "hiddenMembers", "hiddenGroupMembers", "normalGroupMembers"] + __properties: ClassVar[List[str]] = [ + "groupid", + "description", + "type", + "hash", + "groupMembers", + "hiddenMembers", + "hiddenGroupMembers", + "normalGroupMembers", + ] model_config = ConfigDict( populate_by_name=True, @@ -44,7 +54,6 @@ class GroupAccessSome(GroupAccess): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -69,8 +78,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -83,21 +91,21 @@ def to_dict(self) -> Dict[str, Any]: for _item_group_members in self.group_members: if _item_group_members: _items.append(_item_group_members.to_dict()) - _dict['groupMembers'] = _items + _dict["groupMembers"] = _items # override the default output from pydantic by calling `to_dict()` of each item in hidden_group_members (list) _items = [] if self.hidden_group_members: for _item_hidden_group_members in self.hidden_group_members: if _item_hidden_group_members: _items.append(_item_hidden_group_members.to_dict()) - _dict['hiddenGroupMembers'] = _items + _dict["hiddenGroupMembers"] = _items # override the default output from pydantic by calling `to_dict()` of each item in normal_group_members (list) _items = [] if self.normal_group_members: for _item_normal_group_members in self.normal_group_members: if _item_normal_group_members: _items.append(_item_normal_group_members.to_dict()) - _dict['normalGroupMembers'] = _items + _dict["normalGroupMembers"] = _items return _dict @classmethod @@ -112,18 +120,24 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in GroupAccessSome) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in GroupAccessSome) in the input: " + _key + ) _obj = cls.model_validate({ "groupid": obj.get("groupid"), "description": obj.get("description"), - "type": obj.get("type") if obj.get("type") is not None else 'GroupAccessSome', + "type": obj.get("type") if obj.get("type") is not None else "GroupAccessSome", "hash": obj.get("hash"), - "groupMembers": [User.from_dict(_item) for _item in obj["groupMembers"]] if obj.get("groupMembers") is not None else None, + "groupMembers": [User.from_dict(_item) for _item in obj["groupMembers"]] + if obj.get("groupMembers") is not None + else None, "hiddenMembers": obj.get("hiddenMembers"), - "hiddenGroupMembers": [User.from_dict(_item) for _item in obj["hiddenGroupMembers"]] if obj.get("hiddenGroupMembers") is not None else None, - "normalGroupMembers": [User.from_dict(_item) for _item in obj["normalGroupMembers"]] if obj.get("normalGroupMembers") is not None else None + "hiddenGroupMembers": [User.from_dict(_item) for _item in obj["hiddenGroupMembers"]] + if obj.get("hiddenGroupMembers") is not None + else None, + "normalGroupMembers": [User.from_dict(_item) for _item in obj["normalGroupMembers"]] + if obj.get("normalGroupMembers") is not None + else None, }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/hello_world_message.py b/pyvcell/_internal/api/vcell_client/models/hello_world_message.py index 20b47c8..e36a21d 100644 --- a/pyvcell/_internal/api/vcell_client/models/hello_world_message.py +++ b/pyvcell/_internal/api/vcell_client/models/hello_world_message.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class HelloWorldMessage(BaseModel): """ HelloWorldMessage - """ # noqa: E501 + """ # noqa: E501 + message: Optional[StrictStr] = None __properties: ClassVar[List[str]] = ["message"] @@ -36,7 +37,6 @@ class HelloWorldMessage(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -61,8 +61,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -83,11 +82,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in HelloWorldMessage) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in HelloWorldMessage) in the input: " + _key + ) - _obj = cls.model_validate({ - "message": obj.get("message") - }) + _obj = cls.model_validate({"message": obj.get("message")}) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/htc_job_id.py b/pyvcell/_internal/api/vcell_client/models/htc_job_id.py index bccf16a..82eefdb 100644 --- a/pyvcell/_internal/api/vcell_client/models/htc_job_id.py +++ b/pyvcell/_internal/api/vcell_client/models/htc_job_id.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class HtcJobID(BaseModel): """ HtcJobID - """ # noqa: E501 + """ # noqa: E501 + job_number: Optional[StrictInt] = Field(default=None, alias="jobNumber") server: Optional[StrictStr] = None batch_system_type: Optional[BatchSystemType] = Field(default=None, alias="batchSystemType") @@ -39,7 +40,6 @@ class HtcJobID(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -64,8 +64,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -91,8 +90,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "jobNumber": obj.get("jobNumber"), "server": obj.get("server"), - "batchSystemType": obj.get("batchSystemType") + "batchSystemType": obj.get("batchSystemType"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/human_readable_export_data.py b/pyvcell/_internal/api/vcell_client/models/human_readable_export_data.py index cd5101d..bfc79d6 100644 --- a/pyvcell/_internal/api/vcell_client/models/human_readable_export_data.py +++ b/pyvcell/_internal/api/vcell_client/models/human_readable_export_data.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class HumanReadableExportData(BaseModel): """ HumanReadableExportData - """ # noqa: E501 + """ # noqa: E501 + simulation_name: Optional[StrictStr] = Field(default=None, alias="simulationName") biomodel_name: Optional[StrictStr] = Field(default=None, alias="biomodelName") application_name: Optional[StrictStr] = Field(default=None, alias="applicationName") @@ -38,7 +39,19 @@ class HumanReadableExportData(BaseModel): z_slices: Optional[StrictInt] = Field(default=None, alias="zSlices") t_slices: Optional[StrictInt] = Field(default=None, alias="tSlices") num_channels: Optional[StrictInt] = Field(default=None, alias="numChannels") - __properties: ClassVar[List[str]] = ["simulationName", "biomodelName", "applicationName", "differentParameterValues", "applicationType", "serverSavedFileName", "nonSpatial", "subVolume", "zSlices", "tSlices", "numChannels"] + __properties: ClassVar[List[str]] = [ + "simulationName", + "biomodelName", + "applicationName", + "differentParameterValues", + "applicationType", + "serverSavedFileName", + "nonSpatial", + "subVolume", + "zSlices", + "tSlices", + "numChannels", + ] model_config = ConfigDict( populate_by_name=True, @@ -46,7 +59,6 @@ class HumanReadableExportData(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -71,8 +83,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -93,7 +104,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in HumanReadableExportData) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in HumanReadableExportData) in the input: " + _key + ) _obj = cls.model_validate({ "simulationName": obj.get("simulationName"), @@ -106,8 +119,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "subVolume": obj.get("subVolume"), "zSlices": obj.get("zSlices"), "tSlices": obj.get("tSlices"), - "numChannels": obj.get("numChannels") + "numChannels": obj.get("numChannels"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/i_size.py b/pyvcell/_internal/api/vcell_client/models/i_size.py index 8f2a1cd..5beb1c3 100644 --- a/pyvcell/_internal/api/vcell_client/models/i_size.py +++ b/pyvcell/_internal/api/vcell_client/models/i_size.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class ISize(BaseModel): """ ISize - """ # noqa: E501 + """ # noqa: E501 + x: Optional[StrictInt] = None y: Optional[StrictInt] = None z: Optional[StrictInt] = None @@ -38,7 +39,6 @@ class ISize(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,8 +63,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -87,11 +86,5 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if _key not in cls.__properties: raise ValueError("Error due to additional fields (not defined in ISize) in the input: " + _key) - _obj = cls.model_validate({ - "x": obj.get("x"), - "y": obj.get("y"), - "z": obj.get("z") - }) + _obj = cls.model_validate({"x": obj.get("x"), "y": obj.get("y"), "z": obj.get("z")}) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/identity.py b/pyvcell/_internal/api/vcell_client/models/identity.py index aa0ccea..57b1d88 100644 --- a/pyvcell/_internal/api/vcell_client/models/identity.py +++ b/pyvcell/_internal/api/vcell_client/models/identity.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class Identity(BaseModel): """ Identity - """ # noqa: E501 + """ # noqa: E501 + principal_name: Optional[StrictStr] = None roles: Optional[List[StrictStr]] = None attributes: Optional[List[StrictStr]] = None @@ -39,7 +40,6 @@ class Identity(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -64,8 +64,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -92,8 +91,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "principal_name": obj.get("principal_name"), "roles": obj.get("roles"), "attributes": obj.get("attributes"), - "credentials": obj.get("credentials") + "credentials": obj.get("credentials"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/math_model_child_summary.py b/pyvcell/_internal/api/vcell_client/models/math_model_child_summary.py index 765bd52..95d810b 100644 --- a/pyvcell/_internal/api/vcell_client/models/math_model_child_summary.py +++ b/pyvcell/_internal/api/vcell_client/models/math_model_child_summary.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,16 +23,24 @@ from typing import Optional, Set from typing_extensions import Self + class MathModelChildSummary(BaseModel): """ MathModelChildSummary - """ # noqa: E501 + """ # noqa: E501 + model_type: Optional[MathType] = Field(default=None, alias="modelType") geometry_dimension: Optional[StrictInt] = Field(default=None, alias="geometryDimension") geometry_name: Optional[StrictStr] = Field(default=None, alias="geometryName") simulation_annotations: Optional[List[StrictStr]] = Field(default=None, alias="simulationAnnotations") simulation_names: Optional[List[StrictStr]] = Field(default=None, alias="simulationNames") - __properties: ClassVar[List[str]] = ["modelType", "geometryDimension", "geometryName", "simulationAnnotations", "simulationNames"] + __properties: ClassVar[List[str]] = [ + "modelType", + "geometryDimension", + "geometryName", + "simulationAnnotations", + "simulationNames", + ] model_config = ConfigDict( populate_by_name=True, @@ -41,7 +48,6 @@ class MathModelChildSummary(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -66,8 +72,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -88,15 +93,15 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in MathModelChildSummary) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in MathModelChildSummary) in the input: " + _key + ) _obj = cls.model_validate({ "modelType": obj.get("modelType"), "geometryDimension": obj.get("geometryDimension"), "geometryName": obj.get("geometryName"), "simulationAnnotations": obj.get("simulationAnnotations"), - "simulationNames": obj.get("simulationNames") + "simulationNames": obj.get("simulationNames"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/math_model_summary.py b/pyvcell/_internal/api/vcell_client/models/math_model_summary.py index 79824ad..826f10f 100644 --- a/pyvcell/_internal/api/vcell_client/models/math_model_summary.py +++ b/pyvcell/_internal/api/vcell_client/models/math_model_summary.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -27,17 +26,26 @@ from typing import Optional, Set from typing_extensions import Self + class MathModelSummary(BaseModel): """ MathModelSummary - """ # noqa: E501 + """ # noqa: E501 + version: Optional[Version] = None key_value: Optional[StrictStr] = Field(default=None, alias="keyValue") model_info: Optional[MathModelChildSummary] = Field(default=None, alias="modelInfo") software_version: Optional[VCellSoftwareVersion] = Field(default=None, alias="softwareVersion") publication_infos: Optional[List[PublicationInfo]] = Field(default=None, alias="publicationInfos") annotated_functions: Optional[StrictStr] = Field(default=None, alias="annotatedFunctions") - __properties: ClassVar[List[str]] = ["version", "keyValue", "modelInfo", "softwareVersion", "publicationInfos", "annotatedFunctions"] + __properties: ClassVar[List[str]] = [ + "version", + "keyValue", + "modelInfo", + "softwareVersion", + "publicationInfos", + "annotatedFunctions", + ] model_config = ConfigDict( populate_by_name=True, @@ -45,7 +53,6 @@ class MathModelSummary(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -70,8 +77,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -80,20 +86,20 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of version if self.version: - _dict['version'] = self.version.to_dict() + _dict["version"] = self.version.to_dict() # override the default output from pydantic by calling `to_dict()` of model_info if self.model_info: - _dict['modelInfo'] = self.model_info.to_dict() + _dict["modelInfo"] = self.model_info.to_dict() # override the default output from pydantic by calling `to_dict()` of software_version if self.software_version: - _dict['softwareVersion'] = self.software_version.to_dict() + _dict["softwareVersion"] = self.software_version.to_dict() # override the default output from pydantic by calling `to_dict()` of each item in publication_infos (list) _items = [] if self.publication_infos: for _item_publication_infos in self.publication_infos: if _item_publication_infos: _items.append(_item_publication_infos.to_dict()) - _dict['publicationInfos'] = _items + _dict["publicationInfos"] = _items return _dict @classmethod @@ -108,16 +114,22 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in MathModelSummary) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in MathModelSummary) in the input: " + _key + ) _obj = cls.model_validate({ "version": Version.from_dict(obj["version"]) if obj.get("version") is not None else None, "keyValue": obj.get("keyValue"), - "modelInfo": MathModelChildSummary.from_dict(obj["modelInfo"]) if obj.get("modelInfo") is not None else None, - "softwareVersion": VCellSoftwareVersion.from_dict(obj["softwareVersion"]) if obj.get("softwareVersion") is not None else None, - "publicationInfos": [PublicationInfo.from_dict(_item) for _item in obj["publicationInfos"]] if obj.get("publicationInfos") is not None else None, - "annotatedFunctions": obj.get("annotatedFunctions") + "modelInfo": MathModelChildSummary.from_dict(obj["modelInfo"]) + if obj.get("modelInfo") is not None + else None, + "softwareVersion": VCellSoftwareVersion.from_dict(obj["softwareVersion"]) + if obj.get("softwareVersion") is not None + else None, + "publicationInfos": [PublicationInfo.from_dict(_item) for _item in obj["publicationInfos"]] + if obj.get("publicationInfos") is not None + else None, + "annotatedFunctions": obj.get("annotatedFunctions"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/math_type.py b/pyvcell/_internal/api/vcell_client/models/math_type.py index 3b2473c..671e859 100644 --- a/pyvcell/_internal/api/vcell_client/models/math_type.py +++ b/pyvcell/_internal/api/vcell_client/models/math_type.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,15 +26,13 @@ class MathType(str, Enum): """ allowed enum values """ - RULEBASED = 'RuleBased' - STOCHASTIC = 'Stochastic' - DETERMINISTIC = 'Deterministic' - SPRINGSALAD = 'SpringSaLaD' - UNKNOWN = 'Unknown' + RULEBASED = "RuleBased" + STOCHASTIC = "Stochastic" + DETERMINISTIC = "Deterministic" + SPRINGSALAD = "SpringSaLaD" + UNKNOWN = "Unknown" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of MathType from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/mathmodel_ref.py b/pyvcell/_internal/api/vcell_client/models/mathmodel_ref.py index f0ba88e..7d0e986 100644 --- a/pyvcell/_internal/api/vcell_client/models/mathmodel_ref.py +++ b/pyvcell/_internal/api/vcell_client/models/mathmodel_ref.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class MathmodelRef(BaseModel): """ MathmodelRef - """ # noqa: E501 + """ # noqa: E501 + mm_key: Optional[StrictInt] = Field(default=None, alias="mmKey") name: Optional[StrictStr] = None owner_name: Optional[StrictStr] = Field(default=None, alias="ownerName") @@ -40,7 +41,6 @@ class MathmodelRef(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -65,8 +65,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -94,8 +93,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "name": obj.get("name"), "ownerName": obj.get("ownerName"), "ownerKey": obj.get("ownerKey"), - "versionFlag": obj.get("versionFlag") + "versionFlag": obj.get("versionFlag"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/model_type.py b/pyvcell/_internal/api/vcell_client/models/model_type.py index 1b6bdd2..9a8fe3b 100644 --- a/pyvcell/_internal/api/vcell_client/models/model_type.py +++ b/pyvcell/_internal/api/vcell_client/models/model_type.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,12 +26,10 @@ class ModelType(str, Enum): """ allowed enum values """ - BIOMODEL = 'BIOMODEL' - MATHMODEL = 'MATHMODEL' + BIOMODEL = "BIOMODEL" + MATHMODEL = "MATHMODEL" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of ModelType from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/n5_export_request.py b/pyvcell/_internal/api/vcell_client/models/n5_export_request.py index 8efead2..678411f 100644 --- a/pyvcell/_internal/api/vcell_client/models/n5_export_request.py +++ b/pyvcell/_internal/api/vcell_client/models/n5_export_request.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -25,10 +24,12 @@ from typing import Optional, Set from typing_extensions import Self + class N5ExportRequest(BaseModel): """ N5ExportRequest - """ # noqa: E501 + """ # noqa: E501 + standard_export_information: Optional[StandardExportInfo] = Field(default=None, alias="standardExportInformation") sub_volume: Optional[Dict[str, StrictStr]] = Field(default=None, alias="subVolume") exportable_data_type: Optional[ExportableDataType] = Field(default=None, alias="exportableDataType") @@ -41,7 +42,6 @@ class N5ExportRequest(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -66,8 +66,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -76,7 +75,7 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of standard_export_information if self.standard_export_information: - _dict['standardExportInformation'] = self.standard_export_information.to_dict() + _dict["standardExportInformation"] = self.standard_export_information.to_dict() return _dict @classmethod @@ -91,14 +90,16 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in N5ExportRequest) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in N5ExportRequest) in the input: " + _key + ) _obj = cls.model_validate({ - "standardExportInformation": StandardExportInfo.from_dict(obj["standardExportInformation"]) if obj.get("standardExportInformation") is not None else None, + "standardExportInformation": StandardExportInfo.from_dict(obj["standardExportInformation"]) + if obj.get("standardExportInformation") is not None + else None, "subVolume": obj.get("subVolume"), "exportableDataType": obj.get("exportableDataType"), - "datasetName": obj.get("datasetName") + "datasetName": obj.get("datasetName"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/origin.py b/pyvcell/_internal/api/vcell_client/models/origin.py index ed2e661..093b2af 100644 --- a/pyvcell/_internal/api/vcell_client/models/origin.py +++ b/pyvcell/_internal/api/vcell_client/models/origin.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class Origin(BaseModel): """ Origin - """ # noqa: E501 + """ # noqa: E501 + x: Optional[Union[StrictFloat, StrictInt]] = None y: Optional[Union[StrictFloat, StrictInt]] = None z: Optional[Union[StrictFloat, StrictInt]] = None @@ -38,7 +39,6 @@ class Origin(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,8 +63,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -87,11 +86,5 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if _key not in cls.__properties: raise ValueError("Error due to additional fields (not defined in Origin) in the input: " + _key) - _obj = cls.model_validate({ - "x": obj.get("x"), - "y": obj.get("y"), - "z": obj.get("z") - }) + _obj = cls.model_validate({"x": obj.get("x"), "y": obj.get("y"), "z": obj.get("z")}) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/publication.py b/pyvcell/_internal/api/vcell_client/models/publication.py index 98a7b80..8116cd7 100644 --- a/pyvcell/_internal/api/vcell_client/models/publication.py +++ b/pyvcell/_internal/api/vcell_client/models/publication.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -26,10 +25,12 @@ from typing import Optional, Set from typing_extensions import Self + class Publication(BaseModel): """ Publication - """ # noqa: E501 + """ # noqa: E501 + pub_key: Optional[StrictInt] = Field(default=None, alias="pubKey") title: Optional[StrictStr] = None authors: Optional[List[StrictStr]] = None @@ -43,7 +44,21 @@ class Publication(BaseModel): biomodel_refs: Optional[List[BiomodelRef]] = Field(default=None, alias="biomodelRefs") mathmodel_refs: Optional[List[MathmodelRef]] = Field(default=None, alias="mathmodelRefs") var_date: Optional[date] = Field(default=None, alias="date") - __properties: ClassVar[List[str]] = ["pubKey", "title", "authors", "year", "citation", "pubmedid", "doi", "endnoteid", "url", "wittid", "biomodelRefs", "mathmodelRefs", "date"] + __properties: ClassVar[List[str]] = [ + "pubKey", + "title", + "authors", + "year", + "citation", + "pubmedid", + "doi", + "endnoteid", + "url", + "wittid", + "biomodelRefs", + "mathmodelRefs", + "date", + ] model_config = ConfigDict( populate_by_name=True, @@ -51,7 +66,6 @@ class Publication(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -76,8 +90,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -90,14 +103,14 @@ def to_dict(self) -> Dict[str, Any]: for _item_biomodel_refs in self.biomodel_refs: if _item_biomodel_refs: _items.append(_item_biomodel_refs.to_dict()) - _dict['biomodelRefs'] = _items + _dict["biomodelRefs"] = _items # override the default output from pydantic by calling `to_dict()` of each item in mathmodel_refs (list) _items = [] if self.mathmodel_refs: for _item_mathmodel_refs in self.mathmodel_refs: if _item_mathmodel_refs: _items.append(_item_mathmodel_refs.to_dict()) - _dict['mathmodelRefs'] = _items + _dict["mathmodelRefs"] = _items return _dict @classmethod @@ -125,10 +138,12 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "endnoteid": obj.get("endnoteid"), "url": obj.get("url"), "wittid": obj.get("wittid"), - "biomodelRefs": [BiomodelRef.from_dict(_item) for _item in obj["biomodelRefs"]] if obj.get("biomodelRefs") is not None else None, - "mathmodelRefs": [MathmodelRef.from_dict(_item) for _item in obj["mathmodelRefs"]] if obj.get("mathmodelRefs") is not None else None, - "date": obj.get("date") + "biomodelRefs": [BiomodelRef.from_dict(_item) for _item in obj["biomodelRefs"]] + if obj.get("biomodelRefs") is not None + else None, + "mathmodelRefs": [MathmodelRef.from_dict(_item) for _item in obj["mathmodelRefs"]] + if obj.get("mathmodelRefs") is not None + else None, + "date": obj.get("date"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/publication_info.py b/pyvcell/_internal/api/vcell_client/models/publication_info.py index 6b7871d..6ad654e 100644 --- a/pyvcell/_internal/api/vcell_client/models/publication_info.py +++ b/pyvcell/_internal/api/vcell_client/models/publication_info.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -26,10 +25,12 @@ from typing import Optional, Set from typing_extensions import Self + class PublicationInfo(BaseModel): """ PublicationInfo - """ # noqa: E501 + """ # noqa: E501 + publication_key: Optional[StrictStr] = Field(default=None, alias="publicationKey") version_key: Optional[StrictStr] = Field(default=None, alias="versionKey") title: Optional[StrictStr] = None @@ -42,7 +43,20 @@ class PublicationInfo(BaseModel): vc_document_type: Optional[VCDocumentType] = Field(default=None, alias="vcDocumentType") user: Optional[User] = None the_hash_code: Optional[StrictInt] = Field(default=None, alias="theHashCode") - __properties: ClassVar[List[str]] = ["publicationKey", "versionKey", "title", "authors", "citation", "pubmedid", "doi", "url", "pubdate", "vcDocumentType", "user", "theHashCode"] + __properties: ClassVar[List[str]] = [ + "publicationKey", + "versionKey", + "title", + "authors", + "citation", + "pubmedid", + "doi", + "url", + "pubdate", + "vcDocumentType", + "user", + "theHashCode", + ] model_config = ConfigDict( populate_by_name=True, @@ -50,7 +64,6 @@ class PublicationInfo(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -75,8 +88,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -85,7 +97,7 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of user if self.user: - _dict['user'] = self.user.to_dict() + _dict["user"] = self.user.to_dict() return _dict @classmethod @@ -100,7 +112,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in PublicationInfo) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in PublicationInfo) in the input: " + _key + ) _obj = cls.model_validate({ "publicationKey": obj.get("publicationKey"), @@ -114,8 +128,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "pubdate": obj.get("pubdate"), "vcDocumentType": obj.get("vcDocumentType"), "user": User.from_dict(obj["user"]) if obj.get("user") is not None else None, - "theHashCode": obj.get("theHashCode") + "theHashCode": obj.get("theHashCode"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/sampled_curve.py b/pyvcell/_internal/api/vcell_client/models/sampled_curve.py index 05dde15..df00c50 100644 --- a/pyvcell/_internal/api/vcell_client/models/sampled_curve.py +++ b/pyvcell/_internal/api/vcell_client/models/sampled_curve.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -25,17 +24,37 @@ from typing import Optional, Set from typing_extensions import Self + class SampledCurve(ControlPointCurve): """ SampledCurve - """ # noqa: E501 + """ # noqa: E501 + type: StrictStr default_num_samples: Optional[StrictInt] = Field(default=None, alias="defaultNumSamples") max_control_points: Optional[StrictInt] = Field(default=None, alias="maxControlPoints") min_control_points: Optional[StrictInt] = Field(default=None, alias="minControlPoints") segment_count: Optional[StrictInt] = Field(default=None, alias="segmentCount") spatial_length: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="spatialLength") - __properties: ClassVar[List[str]] = ["bClosed", "description", "type", "beginningCoordinate", "defaultNumSamples", "endingCoordinate", "numSamplePoints", "segmentCount", "spatialLength", "closed", "valid", "controlPoints", "controlPointCount", "controlPointsVector", "maxControlPoints", "minControlPoints", "controlPointAddable"] + __properties: ClassVar[List[str]] = [ + "bClosed", + "description", + "type", + "beginningCoordinate", + "defaultNumSamples", + "endingCoordinate", + "numSamplePoints", + "segmentCount", + "spatialLength", + "closed", + "valid", + "controlPoints", + "controlPointCount", + "controlPointsVector", + "maxControlPoints", + "minControlPoints", + "controlPointAddable", + ] model_config = ConfigDict( populate_by_name=True, @@ -43,7 +62,6 @@ class SampledCurve(ControlPointCurve): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -68,8 +86,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -78,24 +95,24 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of beginning_coordinate if self.beginning_coordinate: - _dict['beginningCoordinate'] = self.beginning_coordinate.to_dict() + _dict["beginningCoordinate"] = self.beginning_coordinate.to_dict() # override the default output from pydantic by calling `to_dict()` of ending_coordinate if self.ending_coordinate: - _dict['endingCoordinate'] = self.ending_coordinate.to_dict() + _dict["endingCoordinate"] = self.ending_coordinate.to_dict() # override the default output from pydantic by calling `to_dict()` of each item in control_points (list) _items = [] if self.control_points: for _item_control_points in self.control_points: if _item_control_points: _items.append(_item_control_points.to_dict()) - _dict['controlPoints'] = _items + _dict["controlPoints"] = _items # override the default output from pydantic by calling `to_dict()` of each item in control_points_vector (list) _items = [] if self.control_points_vector: for _item_control_points_vector in self.control_points_vector: if _item_control_points_vector: _items.append(_item_control_points_vector.to_dict()) - _dict['controlPointsVector'] = _items + _dict["controlPointsVector"] = _items return _dict @classmethod @@ -115,22 +132,28 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "bClosed": obj.get("bClosed"), "description": obj.get("description"), - "type": obj.get("type") if obj.get("type") is not None else 'SampledCurve', - "beginningCoordinate": Coordinate.from_dict(obj["beginningCoordinate"]) if obj.get("beginningCoordinate") is not None else None, + "type": obj.get("type") if obj.get("type") is not None else "SampledCurve", + "beginningCoordinate": Coordinate.from_dict(obj["beginningCoordinate"]) + if obj.get("beginningCoordinate") is not None + else None, "defaultNumSamples": obj.get("defaultNumSamples"), - "endingCoordinate": Coordinate.from_dict(obj["endingCoordinate"]) if obj.get("endingCoordinate") is not None else None, + "endingCoordinate": Coordinate.from_dict(obj["endingCoordinate"]) + if obj.get("endingCoordinate") is not None + else None, "numSamplePoints": obj.get("numSamplePoints"), "segmentCount": obj.get("segmentCount"), "spatialLength": obj.get("spatialLength"), "closed": obj.get("closed"), "valid": obj.get("valid"), - "controlPoints": [Coordinate.from_dict(_item) for _item in obj["controlPoints"]] if obj.get("controlPoints") is not None else None, + "controlPoints": [Coordinate.from_dict(_item) for _item in obj["controlPoints"]] + if obj.get("controlPoints") is not None + else None, "controlPointCount": obj.get("controlPointCount"), - "controlPointsVector": [Coordinate.from_dict(_item) for _item in obj["controlPointsVector"]] if obj.get("controlPointsVector") is not None else None, + "controlPointsVector": [Coordinate.from_dict(_item) for _item in obj["controlPointsVector"]] + if obj.get("controlPointsVector") is not None + else None, "maxControlPoints": obj.get("maxControlPoints"), "minControlPoints": obj.get("minControlPoints"), - "controlPointAddable": obj.get("controlPointAddable") + "controlPointAddable": obj.get("controlPointAddable"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/scheduler_status.py b/pyvcell/_internal/api/vcell_client/models/scheduler_status.py index c43e051..4ed4250 100644 --- a/pyvcell/_internal/api/vcell_client/models/scheduler_status.py +++ b/pyvcell/_internal/api/vcell_client/models/scheduler_status.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,17 +26,15 @@ class SchedulerStatus(str, Enum): """ allowed enum values """ - WAITING = 'WAITING' - QUEUED = 'QUEUED' - DISPATCHED = 'DISPATCHED' - RUNNING = 'RUNNING' - COMPLETED = 'COMPLETED' - STOPPED = 'STOPPED' - FAILED = 'FAILED' + WAITING = "WAITING" + QUEUED = "QUEUED" + DISPATCHED = "DISPATCHED" + RUNNING = "RUNNING" + COMPLETED = "COMPLETED" + STOPPED = "STOPPED" + FAILED = "FAILED" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of SchedulerStatus from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/simulation_execution_status_record.py b/pyvcell/_internal/api/vcell_client/models/simulation_execution_status_record.py index 5938915..0047590 100644 --- a/pyvcell/_internal/api/vcell_client/models/simulation_execution_status_record.py +++ b/pyvcell/_internal/api/vcell_client/models/simulation_execution_status_record.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -25,17 +24,26 @@ from typing import Optional, Set from typing_extensions import Self + class SimulationExecutionStatusRecord(BaseModel): """ SimulationExecutionStatusRecord - """ # noqa: E501 + """ # noqa: E501 + field_start_date: Optional[datetime] = Field(default=None, alias="fieldStartDate") field_latest_update_date: Optional[datetime] = Field(default=None, alias="fieldLatestUpdateDate") field_end_date: Optional[datetime] = Field(default=None, alias="fieldEndDate") field_compute_host: Optional[StrictStr] = Field(default=None, alias="fieldComputeHost") field_has_data: Optional[StrictBool] = Field(default=None, alias="fieldHasData") field_htc_job_id: Optional[HtcJobID] = Field(default=None, alias="fieldHtcJobID") - __properties: ClassVar[List[str]] = ["fieldStartDate", "fieldLatestUpdateDate", "fieldEndDate", "fieldComputeHost", "fieldHasData", "fieldHtcJobID"] + __properties: ClassVar[List[str]] = [ + "fieldStartDate", + "fieldLatestUpdateDate", + "fieldEndDate", + "fieldComputeHost", + "fieldHasData", + "fieldHtcJobID", + ] model_config = ConfigDict( populate_by_name=True, @@ -43,7 +51,6 @@ class SimulationExecutionStatusRecord(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -68,8 +75,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -78,7 +84,7 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of field_htc_job_id if self.field_htc_job_id: - _dict['fieldHtcJobID'] = self.field_htc_job_id.to_dict() + _dict["fieldHtcJobID"] = self.field_htc_job_id.to_dict() return _dict @classmethod @@ -93,7 +99,10 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in SimulationExecutionStatusRecord) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in SimulationExecutionStatusRecord) in the input: " + + _key + ) _obj = cls.model_validate({ "fieldStartDate": obj.get("fieldStartDate"), @@ -101,8 +110,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "fieldEndDate": obj.get("fieldEndDate"), "fieldComputeHost": obj.get("fieldComputeHost"), "fieldHasData": obj.get("fieldHasData"), - "fieldHtcJobID": HtcJobID.from_dict(obj["fieldHtcJobID"]) if obj.get("fieldHtcJobID") is not None else None + "fieldHtcJobID": HtcJobID.from_dict(obj["fieldHtcJobID"]) if obj.get("fieldHtcJobID") is not None else None, }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/simulation_job_status_record.py b/pyvcell/_internal/api/vcell_client/models/simulation_job_status_record.py index a84b1cd..2a360d0 100644 --- a/pyvcell/_internal/api/vcell_client/models/simulation_job_status_record.py +++ b/pyvcell/_internal/api/vcell_client/models/simulation_job_status_record.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,15 +23,19 @@ from pyvcell._internal.api.vcell_client.models.scheduler_status import SchedulerStatus from pyvcell._internal.api.vcell_client.models.simulation_execution_status_record import SimulationExecutionStatusRecord from pyvcell._internal.api.vcell_client.models.simulation_message import SimulationMessage -from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import SimulationQueueEntryStatusRecord +from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import ( + SimulationQueueEntryStatusRecord, +) from pyvcell._internal.api.vcell_client.models.vc_simulation_identifier import VCSimulationIdentifier from typing import Optional, Set from typing_extensions import Self + class SimulationJobStatusRecord(BaseModel): """ SimulationJobStatusRecord - """ # noqa: E501 + """ # noqa: E501 + field_time_data_stamp: Optional[datetime] = Field(default=None, alias="fieldTimeDataStamp") field_vc_sim_id: Optional[VCSimulationIdentifier] = Field(default=None, alias="fieldVCSimID") field_submit_date: Optional[datetime] = Field(default=None, alias="fieldSubmitDate") @@ -41,9 +44,24 @@ class SimulationJobStatusRecord(BaseModel): field_task_id: Optional[StrictInt] = Field(default=None, alias="fieldTaskID") field_server_id: Optional[StrictStr] = Field(default=None, alias="fieldServerID") field_job_index: Optional[StrictInt] = Field(default=None, alias="fieldJobIndex") - field_simulation_execution_status: Optional[SimulationExecutionStatusRecord] = Field(default=None, alias="fieldSimulationExecutionStatus") - field_simulation_queue_entry_status: Optional[SimulationQueueEntryStatusRecord] = Field(default=None, alias="fieldSimulationQueueEntryStatus") - __properties: ClassVar[List[str]] = ["fieldTimeDataStamp", "fieldVCSimID", "fieldSubmitDate", "fieldSchedulerStatus", "fieldSimulationMessage", "fieldTaskID", "fieldServerID", "fieldJobIndex", "fieldSimulationExecutionStatus", "fieldSimulationQueueEntryStatus"] + field_simulation_execution_status: Optional[SimulationExecutionStatusRecord] = Field( + default=None, alias="fieldSimulationExecutionStatus" + ) + field_simulation_queue_entry_status: Optional[SimulationQueueEntryStatusRecord] = Field( + default=None, alias="fieldSimulationQueueEntryStatus" + ) + __properties: ClassVar[List[str]] = [ + "fieldTimeDataStamp", + "fieldVCSimID", + "fieldSubmitDate", + "fieldSchedulerStatus", + "fieldSimulationMessage", + "fieldTaskID", + "fieldServerID", + "fieldJobIndex", + "fieldSimulationExecutionStatus", + "fieldSimulationQueueEntryStatus", + ] model_config = ConfigDict( populate_by_name=True, @@ -51,7 +69,6 @@ class SimulationJobStatusRecord(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -76,8 +93,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -86,16 +102,16 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of field_vc_sim_id if self.field_vc_sim_id: - _dict['fieldVCSimID'] = self.field_vc_sim_id.to_dict() + _dict["fieldVCSimID"] = self.field_vc_sim_id.to_dict() # override the default output from pydantic by calling `to_dict()` of field_simulation_message if self.field_simulation_message: - _dict['fieldSimulationMessage'] = self.field_simulation_message.to_dict() + _dict["fieldSimulationMessage"] = self.field_simulation_message.to_dict() # override the default output from pydantic by calling `to_dict()` of field_simulation_execution_status if self.field_simulation_execution_status: - _dict['fieldSimulationExecutionStatus'] = self.field_simulation_execution_status.to_dict() + _dict["fieldSimulationExecutionStatus"] = self.field_simulation_execution_status.to_dict() # override the default output from pydantic by calling `to_dict()` of field_simulation_queue_entry_status if self.field_simulation_queue_entry_status: - _dict['fieldSimulationQueueEntryStatus'] = self.field_simulation_queue_entry_status.to_dict() + _dict["fieldSimulationQueueEntryStatus"] = self.field_simulation_queue_entry_status.to_dict() return _dict @classmethod @@ -110,20 +126,32 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in SimulationJobStatusRecord) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in SimulationJobStatusRecord) in the input: " + _key + ) _obj = cls.model_validate({ "fieldTimeDataStamp": obj.get("fieldTimeDataStamp"), - "fieldVCSimID": VCSimulationIdentifier.from_dict(obj["fieldVCSimID"]) if obj.get("fieldVCSimID") is not None else None, + "fieldVCSimID": VCSimulationIdentifier.from_dict(obj["fieldVCSimID"]) + if obj.get("fieldVCSimID") is not None + else None, "fieldSubmitDate": obj.get("fieldSubmitDate"), "fieldSchedulerStatus": obj.get("fieldSchedulerStatus"), - "fieldSimulationMessage": SimulationMessage.from_dict(obj["fieldSimulationMessage"]) if obj.get("fieldSimulationMessage") is not None else None, + "fieldSimulationMessage": SimulationMessage.from_dict(obj["fieldSimulationMessage"]) + if obj.get("fieldSimulationMessage") is not None + else None, "fieldTaskID": obj.get("fieldTaskID"), "fieldServerID": obj.get("fieldServerID"), "fieldJobIndex": obj.get("fieldJobIndex"), - "fieldSimulationExecutionStatus": SimulationExecutionStatusRecord.from_dict(obj["fieldSimulationExecutionStatus"]) if obj.get("fieldSimulationExecutionStatus") is not None else None, - "fieldSimulationQueueEntryStatus": SimulationQueueEntryStatusRecord.from_dict(obj["fieldSimulationQueueEntryStatus"]) if obj.get("fieldSimulationQueueEntryStatus") is not None else None + "fieldSimulationExecutionStatus": SimulationExecutionStatusRecord.from_dict( + obj["fieldSimulationExecutionStatus"] + ) + if obj.get("fieldSimulationExecutionStatus") is not None + else None, + "fieldSimulationQueueEntryStatus": SimulationQueueEntryStatusRecord.from_dict( + obj["fieldSimulationQueueEntryStatus"] + ) + if obj.get("fieldSimulationQueueEntryStatus") is not None + else None, }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/simulation_message.py b/pyvcell/_internal/api/vcell_client/models/simulation_message.py index aa993bb..63a19a0 100644 --- a/pyvcell/_internal/api/vcell_client/models/simulation_message.py +++ b/pyvcell/_internal/api/vcell_client/models/simulation_message.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -25,10 +24,12 @@ from typing import Optional, Set from typing_extensions import Self + class SimulationMessage(BaseModel): """ SimulationMessage - """ # noqa: E501 + """ # noqa: E501 + detailed_state: Optional[DetailedState] = Field(default=None, alias="detailedState") message: Optional[StrictStr] = None htc_job_id: Optional[HtcJobID] = Field(default=None, alias="htcJobId") @@ -41,7 +42,6 @@ class SimulationMessage(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -66,8 +66,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -76,7 +75,7 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of htc_job_id if self.htc_job_id: - _dict['htcJobId'] = self.htc_job_id.to_dict() + _dict["htcJobId"] = self.htc_job_id.to_dict() return _dict @classmethod @@ -91,14 +90,14 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in SimulationMessage) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in SimulationMessage) in the input: " + _key + ) _obj = cls.model_validate({ "detailedState": obj.get("detailedState"), "message": obj.get("message"), "htcJobId": HtcJobID.from_dict(obj["htcJobId"]) if obj.get("htcJobId") is not None else None, - "displayMessage": obj.get("displayMessage") + "displayMessage": obj.get("displayMessage"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/simulation_queue_entry_status_record.py b/pyvcell/_internal/api/vcell_client/models/simulation_queue_entry_status_record.py index fa6fcdb..075f43e 100644 --- a/pyvcell/_internal/api/vcell_client/models/simulation_queue_entry_status_record.py +++ b/pyvcell/_internal/api/vcell_client/models/simulation_queue_entry_status_record.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -25,10 +24,12 @@ from typing import Optional, Set from typing_extensions import Self + class SimulationQueueEntryStatusRecord(BaseModel): """ SimulationQueueEntryStatusRecord - """ # noqa: E501 + """ # noqa: E501 + field_queue_priority: Optional[StrictInt] = Field(default=None, alias="fieldQueuePriority") field_queue_date: Optional[datetime] = Field(default=None, alias="fieldQueueDate") field_queue_id: Optional[SimulationQueueID] = Field(default=None, alias="fieldQueueID") @@ -40,7 +41,6 @@ class SimulationQueueEntryStatusRecord(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -65,8 +65,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -87,13 +86,14 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in SimulationQueueEntryStatusRecord) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in SimulationQueueEntryStatusRecord) in the input: " + + _key + ) _obj = cls.model_validate({ "fieldQueuePriority": obj.get("fieldQueuePriority"), "fieldQueueDate": obj.get("fieldQueueDate"), - "fieldQueueID": obj.get("fieldQueueID") + "fieldQueueID": obj.get("fieldQueueID"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/simulation_queue_id.py b/pyvcell/_internal/api/vcell_client/models/simulation_queue_id.py index 1cf6448..1206e3c 100644 --- a/pyvcell/_internal/api/vcell_client/models/simulation_queue_id.py +++ b/pyvcell/_internal/api/vcell_client/models/simulation_queue_id.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,13 +26,11 @@ class SimulationQueueID(str, Enum): """ allowed enum values """ - QUEUE_ID_WAITING = 'QUEUE_ID_WAITING' - QUEUE_ID_SIMULATIONJOB = 'QUEUE_ID_SIMULATIONJOB' - QUEUE_ID_NULL = 'QUEUE_ID_NULL' + QUEUE_ID_WAITING = "QUEUE_ID_WAITING" + QUEUE_ID_SIMULATIONJOB = "QUEUE_ID_SIMULATIONJOB" + QUEUE_ID_NULL = "QUEUE_ID_NULL" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of SimulationQueueID from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/simulation_status_persistent_record.py b/pyvcell/_internal/api/vcell_client/models/simulation_status_persistent_record.py index e736cff..3163124 100644 --- a/pyvcell/_internal/api/vcell_client/models/simulation_status_persistent_record.py +++ b/pyvcell/_internal/api/vcell_client/models/simulation_status_persistent_record.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class SimulationStatusPersistentRecord(BaseModel): """ SimulationStatusPersistentRecord - """ # noqa: E501 + """ # noqa: E501 + status: Optional[Status] = None details: Optional[StrictStr] = None has_data: Optional[StrictBool] = Field(default=None, alias="hasData") @@ -39,7 +40,6 @@ class SimulationStatusPersistentRecord(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -64,8 +64,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -86,13 +85,14 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in SimulationStatusPersistentRecord) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in SimulationStatusPersistentRecord) in the input: " + + _key + ) _obj = cls.model_validate({ "status": obj.get("status"), "details": obj.get("details"), - "hasData": obj.get("hasData") + "hasData": obj.get("hasData"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/source_model.py b/pyvcell/_internal/api/vcell_client/models/source_model.py index 9ec835a..e3b236a 100644 --- a/pyvcell/_internal/api/vcell_client/models/source_model.py +++ b/pyvcell/_internal/api/vcell_client/models/source_model.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class SourceModel(BaseModel): """ SourceModel - """ # noqa: E501 + """ # noqa: E501 + model_id: Optional[StrictStr] = Field(default=None, alias="modelID") model_type: Optional[ModelType] = Field(default=None, alias="modelType") __properties: ClassVar[List[str]] = ["modelID", "modelType"] @@ -38,7 +39,6 @@ class SourceModel(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,8 +63,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -87,10 +86,5 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if _key not in cls.__properties: raise ValueError("Error due to additional fields (not defined in SourceModel) in the input: " + _key) - _obj = cls.model_validate({ - "modelID": obj.get("modelID"), - "modelType": obj.get("modelType") - }) + _obj = cls.model_validate({"modelID": obj.get("modelID"), "modelType": obj.get("modelType")}) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/spatial_selection.py b/pyvcell/_internal/api/vcell_client/models/spatial_selection.py index 1c2ab0f..71706c2 100644 --- a/pyvcell/_internal/api/vcell_client/models/spatial_selection.py +++ b/pyvcell/_internal/api/vcell_client/models/spatial_selection.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -27,23 +26,36 @@ from typing_extensions import Self from typing import TYPE_CHECKING + if TYPE_CHECKING: from pyvcell._internal.api.vcell_client.models.spatial_selection_contour import SpatialSelectionContour from pyvcell._internal.api.vcell_client.models.spatial_selection_membrane import SpatialSelectionMembrane from pyvcell._internal.api.vcell_client.models.spatial_selection_volume import SpatialSelectionVolume + class SpatialSelection(BaseModel): """ SpatialSelection - """ # noqa: E501 + """ # noqa: E501 + curve_selection_info: Optional[CurveSelectionInfo] = Field(default=None, alias="curveSelectionInfo") var_type: Optional[VariableType] = Field(default=None, alias="varType") type: StrictStr - smallest_mesh_cell_dimension_length: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="smallestMeshCellDimensionLength") + smallest_mesh_cell_dimension_length: Optional[Union[StrictFloat, StrictInt]] = Field( + default=None, alias="smallestMeshCellDimensionLength" + ) variable_type: Optional[VariableType] = Field(default=None, alias="variableType") closed: Optional[StrictBool] = None point: Optional[StrictBool] = None - __properties: ClassVar[List[str]] = ["curveSelectionInfo", "varType", "type", "smallestMeshCellDimensionLength", "variableType", "closed", "point"] + __properties: ClassVar[List[str]] = [ + "curveSelectionInfo", + "varType", + "type", + "smallestMeshCellDimensionLength", + "variableType", + "closed", + "point", + ] model_config = ConfigDict( populate_by_name=True, @@ -51,13 +63,14 @@ class SpatialSelection(BaseModel): protected_namespaces=(), ) - # JSON field name that stores the object type - __discriminator_property_name: ClassVar[str] = 'type' + __discriminator_property_name: ClassVar[str] = "type" # discriminator mappings __discriminator_value_class_map: ClassVar[Dict[str, str]] = { - 'Contour': 'SpatialSelectionContour','Membrane': 'SpatialSelectionMembrane','Volume': 'SpatialSelectionVolume' + "Contour": "SpatialSelectionContour", + "Membrane": "SpatialSelectionMembrane", + "Volume": "SpatialSelectionVolume", } @classmethod @@ -79,7 +92,9 @@ def to_json(self) -> str: return json.dumps(self.to_dict()) @classmethod - def from_json(cls, json_str: str) -> Optional[Union[SpatialSelectionContour, SpatialSelectionMembrane, SpatialSelectionVolume]]: + def from_json( + cls, json_str: str + ) -> Optional[Union[SpatialSelectionContour, SpatialSelectionMembrane, SpatialSelectionVolume]]: """Create an instance of SpatialSelection from a JSON string""" return cls.from_dict(json.loads(json_str)) @@ -93,8 +108,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -103,29 +117,40 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of curve_selection_info if self.curve_selection_info: - _dict['curveSelectionInfo'] = self.curve_selection_info.to_dict() + _dict["curveSelectionInfo"] = self.curve_selection_info.to_dict() # override the default output from pydantic by calling `to_dict()` of var_type if self.var_type: - _dict['varType'] = self.var_type.to_dict() + _dict["varType"] = self.var_type.to_dict() # override the default output from pydantic by calling `to_dict()` of variable_type if self.variable_type: - _dict['variableType'] = self.variable_type.to_dict() + _dict["variableType"] = self.variable_type.to_dict() return _dict @classmethod - def from_dict(cls, obj: Dict[str, Any]) -> Optional[Union[SpatialSelectionContour, SpatialSelectionMembrane, SpatialSelectionVolume]]: + def from_dict( + cls, obj: Dict[str, Any] + ) -> Optional[Union[SpatialSelectionContour, SpatialSelectionMembrane, SpatialSelectionVolume]]: """Create an instance of SpatialSelection from a dict""" # look up the object type based on discriminator mapping object_type = cls.get_discriminator_value(obj) - if object_type == 'SpatialSelectionContour': - return import_module("pyvcell._internal.api.vcell_client.models.spatial_selection_contour").SpatialSelectionContour.from_dict(obj) - if object_type == 'SpatialSelectionMembrane': - return import_module("pyvcell._internal.api.vcell_client.models.spatial_selection_membrane").SpatialSelectionMembrane.from_dict(obj) - if object_type == 'SpatialSelectionVolume': - return import_module("pyvcell._internal.api.vcell_client.models.spatial_selection_volume").SpatialSelectionVolume.from_dict(obj) - - raise ValueError("SpatialSelection failed to lookup discriminator value from " + - json.dumps(obj) + ". Discriminator property name: " + cls.__discriminator_property_name + - ", mapping: " + json.dumps(cls.__discriminator_value_class_map)) - - + if object_type == "SpatialSelectionContour": + return import_module( + "pyvcell._internal.api.vcell_client.models.spatial_selection_contour" + ).SpatialSelectionContour.from_dict(obj) + if object_type == "SpatialSelectionMembrane": + return import_module( + "pyvcell._internal.api.vcell_client.models.spatial_selection_membrane" + ).SpatialSelectionMembrane.from_dict(obj) + if object_type == "SpatialSelectionVolume": + return import_module( + "pyvcell._internal.api.vcell_client.models.spatial_selection_volume" + ).SpatialSelectionVolume.from_dict(obj) + + raise ValueError( + "SpatialSelection failed to lookup discriminator value from " + + json.dumps(obj) + + ". Discriminator property name: " + + cls.__discriminator_property_name + + ", mapping: " + + json.dumps(cls.__discriminator_value_class_map) + ) diff --git a/pyvcell/_internal/api/vcell_client/models/spatial_selection_contour.py b/pyvcell/_internal/api/vcell_client/models/spatial_selection_contour.py index dde81f8..9d80fbb 100644 --- a/pyvcell/_internal/api/vcell_client/models/spatial_selection_contour.py +++ b/pyvcell/_internal/api/vcell_client/models/spatial_selection_contour.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -26,15 +25,28 @@ from typing import Optional, Set from typing_extensions import Self + class SpatialSelectionContour(SpatialSelection): """ SpatialSelectionContour - """ # noqa: E501 + """ # noqa: E501 + type: StrictStr field_sampled_data_indexes: Optional[List[StrictInt]] = Field(default=None, alias="fieldSampledDataIndexes") index_samples: Optional[List[StrictInt]] = Field(default=None, alias="indexSamples") sampled_data_indexes: Optional[List[StrictInt]] = Field(default=None, alias="sampledDataIndexes") - __properties: ClassVar[List[str]] = ["curveSelectionInfo", "varType", "type", "smallestMeshCellDimensionLength", "variableType", "closed", "point", "fieldSampledDataIndexes", "indexSamples", "sampledDataIndexes"] + __properties: ClassVar[List[str]] = [ + "curveSelectionInfo", + "varType", + "type", + "smallestMeshCellDimensionLength", + "variableType", + "closed", + "point", + "fieldSampledDataIndexes", + "indexSamples", + "sampledDataIndexes", + ] model_config = ConfigDict( populate_by_name=True, @@ -42,7 +54,6 @@ class SpatialSelectionContour(SpatialSelection): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -67,8 +78,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -77,13 +87,13 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of curve_selection_info if self.curve_selection_info: - _dict['curveSelectionInfo'] = self.curve_selection_info.to_dict() + _dict["curveSelectionInfo"] = self.curve_selection_info.to_dict() # override the default output from pydantic by calling `to_dict()` of var_type if self.var_type: - _dict['varType'] = self.var_type.to_dict() + _dict["varType"] = self.var_type.to_dict() # override the default output from pydantic by calling `to_dict()` of variable_type if self.variable_type: - _dict['variableType'] = self.variable_type.to_dict() + _dict["variableType"] = self.variable_type.to_dict() return _dict @classmethod @@ -98,20 +108,24 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in SpatialSelectionContour) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in SpatialSelectionContour) in the input: " + _key + ) _obj = cls.model_validate({ - "curveSelectionInfo": CurveSelectionInfo.from_dict(obj["curveSelectionInfo"]) if obj.get("curveSelectionInfo") is not None else None, + "curveSelectionInfo": CurveSelectionInfo.from_dict(obj["curveSelectionInfo"]) + if obj.get("curveSelectionInfo") is not None + else None, "varType": VariableType.from_dict(obj["varType"]) if obj.get("varType") is not None else None, - "type": obj.get("type") if obj.get("type") is not None else 'Contour', + "type": obj.get("type") if obj.get("type") is not None else "Contour", "smallestMeshCellDimensionLength": obj.get("smallestMeshCellDimensionLength"), - "variableType": VariableType.from_dict(obj["variableType"]) if obj.get("variableType") is not None else None, + "variableType": VariableType.from_dict(obj["variableType"]) + if obj.get("variableType") is not None + else None, "closed": obj.get("closed"), "point": obj.get("point"), "fieldSampledDataIndexes": obj.get("fieldSampledDataIndexes"), "indexSamples": obj.get("indexSamples"), - "sampledDataIndexes": obj.get("sampledDataIndexes") + "sampledDataIndexes": obj.get("sampledDataIndexes"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/spatial_selection_membrane.py b/pyvcell/_internal/api/vcell_client/models/spatial_selection_membrane.py index eae57bd..f58c9f9 100644 --- a/pyvcell/_internal/api/vcell_client/models/spatial_selection_membrane.py +++ b/pyvcell/_internal/api/vcell_client/models/spatial_selection_membrane.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -27,14 +26,26 @@ from typing import Optional, Set from typing_extensions import Self + class SpatialSelectionMembrane(SpatialSelection): """ SpatialSelectionMembrane - """ # noqa: E501 + """ # noqa: E501 + type: StrictStr field_sampled_data_indexes: Optional[List[StrictInt]] = Field(default=None, alias="fieldSampledDataIndexes") selection_source: Optional[SampledCurve] = Field(default=None, alias="selectionSource") - __properties: ClassVar[List[str]] = ["curveSelectionInfo", "varType", "type", "smallestMeshCellDimensionLength", "variableType", "closed", "point", "fieldSampledDataIndexes", "selectionSource"] + __properties: ClassVar[List[str]] = [ + "curveSelectionInfo", + "varType", + "type", + "smallestMeshCellDimensionLength", + "variableType", + "closed", + "point", + "fieldSampledDataIndexes", + "selectionSource", + ] model_config = ConfigDict( populate_by_name=True, @@ -42,7 +53,6 @@ class SpatialSelectionMembrane(SpatialSelection): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -67,8 +77,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -77,16 +86,16 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of curve_selection_info if self.curve_selection_info: - _dict['curveSelectionInfo'] = self.curve_selection_info.to_dict() + _dict["curveSelectionInfo"] = self.curve_selection_info.to_dict() # override the default output from pydantic by calling `to_dict()` of var_type if self.var_type: - _dict['varType'] = self.var_type.to_dict() + _dict["varType"] = self.var_type.to_dict() # override the default output from pydantic by calling `to_dict()` of variable_type if self.variable_type: - _dict['variableType'] = self.variable_type.to_dict() + _dict["variableType"] = self.variable_type.to_dict() # override the default output from pydantic by calling `to_dict()` of selection_source if self.selection_source: - _dict['selectionSource'] = self.selection_source.to_dict() + _dict["selectionSource"] = self.selection_source.to_dict() return _dict @classmethod @@ -101,19 +110,25 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in SpatialSelectionMembrane) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in SpatialSelectionMembrane) in the input: " + _key + ) _obj = cls.model_validate({ - "curveSelectionInfo": CurveSelectionInfo.from_dict(obj["curveSelectionInfo"]) if obj.get("curveSelectionInfo") is not None else None, + "curveSelectionInfo": CurveSelectionInfo.from_dict(obj["curveSelectionInfo"]) + if obj.get("curveSelectionInfo") is not None + else None, "varType": VariableType.from_dict(obj["varType"]) if obj.get("varType") is not None else None, - "type": obj.get("type") if obj.get("type") is not None else 'Membrane', + "type": obj.get("type") if obj.get("type") is not None else "Membrane", "smallestMeshCellDimensionLength": obj.get("smallestMeshCellDimensionLength"), - "variableType": VariableType.from_dict(obj["variableType"]) if obj.get("variableType") is not None else None, + "variableType": VariableType.from_dict(obj["variableType"]) + if obj.get("variableType") is not None + else None, "closed": obj.get("closed"), "point": obj.get("point"), "fieldSampledDataIndexes": obj.get("fieldSampledDataIndexes"), - "selectionSource": SampledCurve.from_dict(obj["selectionSource"]) if obj.get("selectionSource") is not None else None + "selectionSource": SampledCurve.from_dict(obj["selectionSource"]) + if obj.get("selectionSource") is not None + else None, }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/spatial_selection_volume.py b/pyvcell/_internal/api/vcell_client/models/spatial_selection_volume.py index e3729f5..ee66da7 100644 --- a/pyvcell/_internal/api/vcell_client/models/spatial_selection_volume.py +++ b/pyvcell/_internal/api/vcell_client/models/spatial_selection_volume.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -26,13 +25,24 @@ from typing import Optional, Set from typing_extensions import Self + class SpatialSelectionVolume(SpatialSelection): """ SpatialSelectionVolume - """ # noqa: E501 + """ # noqa: E501 + type: StrictStr symmetric: Optional[StrictBool] = None - __properties: ClassVar[List[str]] = ["curveSelectionInfo", "varType", "type", "smallestMeshCellDimensionLength", "variableType", "closed", "point", "symmetric"] + __properties: ClassVar[List[str]] = [ + "curveSelectionInfo", + "varType", + "type", + "smallestMeshCellDimensionLength", + "variableType", + "closed", + "point", + "symmetric", + ] model_config = ConfigDict( populate_by_name=True, @@ -40,7 +50,6 @@ class SpatialSelectionVolume(SpatialSelection): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -65,8 +74,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -75,13 +83,13 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of curve_selection_info if self.curve_selection_info: - _dict['curveSelectionInfo'] = self.curve_selection_info.to_dict() + _dict["curveSelectionInfo"] = self.curve_selection_info.to_dict() # override the default output from pydantic by calling `to_dict()` of var_type if self.var_type: - _dict['varType'] = self.var_type.to_dict() + _dict["varType"] = self.var_type.to_dict() # override the default output from pydantic by calling `to_dict()` of variable_type if self.variable_type: - _dict['variableType'] = self.variable_type.to_dict() + _dict["variableType"] = self.variable_type.to_dict() return _dict @classmethod @@ -96,18 +104,22 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in SpatialSelectionVolume) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in SpatialSelectionVolume) in the input: " + _key + ) _obj = cls.model_validate({ - "curveSelectionInfo": CurveSelectionInfo.from_dict(obj["curveSelectionInfo"]) if obj.get("curveSelectionInfo") is not None else None, + "curveSelectionInfo": CurveSelectionInfo.from_dict(obj["curveSelectionInfo"]) + if obj.get("curveSelectionInfo") is not None + else None, "varType": VariableType.from_dict(obj["varType"]) if obj.get("varType") is not None else None, - "type": obj.get("type") if obj.get("type") is not None else 'Volume', + "type": obj.get("type") if obj.get("type") is not None else "Volume", "smallestMeshCellDimensionLength": obj.get("smallestMeshCellDimensionLength"), - "variableType": VariableType.from_dict(obj["variableType"]) if obj.get("variableType") is not None else None, + "variableType": VariableType.from_dict(obj["variableType"]) + if obj.get("variableType") is not None + else None, "closed": obj.get("closed"), "point": obj.get("point"), - "symmetric": obj.get("symmetric") + "symmetric": obj.get("symmetric"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/specialclaim.py b/pyvcell/_internal/api/vcell_client/models/specialclaim.py index 6f8a24d..de1016f 100644 --- a/pyvcell/_internal/api/vcell_client/models/specialclaim.py +++ b/pyvcell/_internal/api/vcell_client/models/specialclaim.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,14 +26,12 @@ class SPECIALCLAIM(str, Enum): """ allowed enum values """ - ADMINS = 'admins' - POWERUSERS = 'powerUsers' - PUBLICATIONEDITORS = 'publicationEditors' - VCELLSUPPORT = 'vcellSupport' + ADMINS = "admins" + POWERUSERS = "powerUsers" + PUBLICATIONEDITORS = "publicationEditors" + VCELLSUPPORT = "vcellSupport" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of SPECIALCLAIM from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/spline.py b/pyvcell/_internal/api/vcell_client/models/spline.py index e76ea08..9d61dee 100644 --- a/pyvcell/_internal/api/vcell_client/models/spline.py +++ b/pyvcell/_internal/api/vcell_client/models/spline.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -25,16 +24,36 @@ from typing import Optional, Set from typing_extensions import Self + class Spline(ControlPointCurve): """ Spline - """ # noqa: E501 + """ # noqa: E501 + type: StrictStr default_num_samples: Optional[StrictInt] = Field(default=None, alias="defaultNumSamples") max_control_points: Optional[StrictInt] = Field(default=None, alias="maxControlPoints") min_control_points: Optional[StrictInt] = Field(default=None, alias="minControlPoints") segment_count: Optional[StrictInt] = Field(default=None, alias="segmentCount") - __properties: ClassVar[List[str]] = ["bClosed", "description", "type", "beginningCoordinate", "defaultNumSamples", "endingCoordinate", "numSamplePoints", "segmentCount", "spatialLength", "closed", "valid", "controlPoints", "controlPointCount", "controlPointsVector", "maxControlPoints", "minControlPoints", "controlPointAddable"] + __properties: ClassVar[List[str]] = [ + "bClosed", + "description", + "type", + "beginningCoordinate", + "defaultNumSamples", + "endingCoordinate", + "numSamplePoints", + "segmentCount", + "spatialLength", + "closed", + "valid", + "controlPoints", + "controlPointCount", + "controlPointsVector", + "maxControlPoints", + "minControlPoints", + "controlPointAddable", + ] model_config = ConfigDict( populate_by_name=True, @@ -42,7 +61,6 @@ class Spline(ControlPointCurve): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -67,8 +85,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -77,24 +94,24 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of beginning_coordinate if self.beginning_coordinate: - _dict['beginningCoordinate'] = self.beginning_coordinate.to_dict() + _dict["beginningCoordinate"] = self.beginning_coordinate.to_dict() # override the default output from pydantic by calling `to_dict()` of ending_coordinate if self.ending_coordinate: - _dict['endingCoordinate'] = self.ending_coordinate.to_dict() + _dict["endingCoordinate"] = self.ending_coordinate.to_dict() # override the default output from pydantic by calling `to_dict()` of each item in control_points (list) _items = [] if self.control_points: for _item_control_points in self.control_points: if _item_control_points: _items.append(_item_control_points.to_dict()) - _dict['controlPoints'] = _items + _dict["controlPoints"] = _items # override the default output from pydantic by calling `to_dict()` of each item in control_points_vector (list) _items = [] if self.control_points_vector: for _item_control_points_vector in self.control_points_vector: if _item_control_points_vector: _items.append(_item_control_points_vector.to_dict()) - _dict['controlPointsVector'] = _items + _dict["controlPointsVector"] = _items return _dict @classmethod @@ -114,22 +131,28 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "bClosed": obj.get("bClosed"), "description": obj.get("description"), - "type": obj.get("type") if obj.get("type") is not None else 'Spline', - "beginningCoordinate": Coordinate.from_dict(obj["beginningCoordinate"]) if obj.get("beginningCoordinate") is not None else None, + "type": obj.get("type") if obj.get("type") is not None else "Spline", + "beginningCoordinate": Coordinate.from_dict(obj["beginningCoordinate"]) + if obj.get("beginningCoordinate") is not None + else None, "defaultNumSamples": obj.get("defaultNumSamples"), - "endingCoordinate": Coordinate.from_dict(obj["endingCoordinate"]) if obj.get("endingCoordinate") is not None else None, + "endingCoordinate": Coordinate.from_dict(obj["endingCoordinate"]) + if obj.get("endingCoordinate") is not None + else None, "numSamplePoints": obj.get("numSamplePoints"), "segmentCount": obj.get("segmentCount"), "spatialLength": obj.get("spatialLength"), "closed": obj.get("closed"), "valid": obj.get("valid"), - "controlPoints": [Coordinate.from_dict(_item) for _item in obj["controlPoints"]] if obj.get("controlPoints") is not None else None, + "controlPoints": [Coordinate.from_dict(_item) for _item in obj["controlPoints"]] + if obj.get("controlPoints") is not None + else None, "controlPointCount": obj.get("controlPointCount"), - "controlPointsVector": [Coordinate.from_dict(_item) for _item in obj["controlPointsVector"]] if obj.get("controlPointsVector") is not None else None, + "controlPointsVector": [Coordinate.from_dict(_item) for _item in obj["controlPointsVector"]] + if obj.get("controlPointsVector") is not None + else None, "maxControlPoints": obj.get("maxControlPoints"), "minControlPoints": obj.get("minControlPoints"), - "controlPointAddable": obj.get("controlPointAddable") + "controlPointAddable": obj.get("controlPointAddable"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/standard_export_info.py b/pyvcell/_internal/api/vcell_client/models/standard_export_info.py index 1812f38..a28d019 100644 --- a/pyvcell/_internal/api/vcell_client/models/standard_export_info.py +++ b/pyvcell/_internal/api/vcell_client/models/standard_export_info.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -27,10 +26,12 @@ from typing import Optional, Set from typing_extensions import Self + class StandardExportInfo(BaseModel): """ StandardExportInfo - """ # noqa: E501 + """ # noqa: E501 + output_context: Optional[List[AnnotatedFunctionDTO]] = Field(default=None, alias="outputContext") context_name: Optional[StrictStr] = Field(default=None, alias="contextName") simulation_name: Optional[StrictStr] = Field(default=None, alias="simulationName") @@ -39,7 +40,16 @@ class StandardExportInfo(BaseModel): geometry_specs: Optional[GeometrySpecDTO] = Field(default=None, alias="geometrySpecs") time_specs: Optional[TimeSpecs] = Field(default=None, alias="timeSpecs") variable_specs: Optional[VariableSpecs] = Field(default=None, alias="variableSpecs") - __properties: ClassVar[List[str]] = ["outputContext", "contextName", "simulationName", "simulationKey", "simulationJob", "geometrySpecs", "timeSpecs", "variableSpecs"] + __properties: ClassVar[List[str]] = [ + "outputContext", + "contextName", + "simulationName", + "simulationKey", + "simulationJob", + "geometrySpecs", + "timeSpecs", + "variableSpecs", + ] model_config = ConfigDict( populate_by_name=True, @@ -47,7 +57,6 @@ class StandardExportInfo(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -72,8 +81,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -86,16 +94,16 @@ def to_dict(self) -> Dict[str, Any]: for _item_output_context in self.output_context: if _item_output_context: _items.append(_item_output_context.to_dict()) - _dict['outputContext'] = _items + _dict["outputContext"] = _items # override the default output from pydantic by calling `to_dict()` of geometry_specs if self.geometry_specs: - _dict['geometrySpecs'] = self.geometry_specs.to_dict() + _dict["geometrySpecs"] = self.geometry_specs.to_dict() # override the default output from pydantic by calling `to_dict()` of time_specs if self.time_specs: - _dict['timeSpecs'] = self.time_specs.to_dict() + _dict["timeSpecs"] = self.time_specs.to_dict() # override the default output from pydantic by calling `to_dict()` of variable_specs if self.variable_specs: - _dict['variableSpecs'] = self.variable_specs.to_dict() + _dict["variableSpecs"] = self.variable_specs.to_dict() return _dict @classmethod @@ -110,18 +118,24 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in StandardExportInfo) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in StandardExportInfo) in the input: " + _key + ) _obj = cls.model_validate({ - "outputContext": [AnnotatedFunctionDTO.from_dict(_item) for _item in obj["outputContext"]] if obj.get("outputContext") is not None else None, + "outputContext": [AnnotatedFunctionDTO.from_dict(_item) for _item in obj["outputContext"]] + if obj.get("outputContext") is not None + else None, "contextName": obj.get("contextName"), "simulationName": obj.get("simulationName"), "simulationKey": obj.get("simulationKey"), "simulationJob": obj.get("simulationJob"), - "geometrySpecs": GeometrySpecDTO.from_dict(obj["geometrySpecs"]) if obj.get("geometrySpecs") is not None else None, + "geometrySpecs": GeometrySpecDTO.from_dict(obj["geometrySpecs"]) + if obj.get("geometrySpecs") is not None + else None, "timeSpecs": TimeSpecs.from_dict(obj["timeSpecs"]) if obj.get("timeSpecs") is not None else None, - "variableSpecs": VariableSpecs.from_dict(obj["variableSpecs"]) if obj.get("variableSpecs") is not None else None + "variableSpecs": VariableSpecs.from_dict(obj["variableSpecs"]) + if obj.get("variableSpecs") is not None + else None, }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/status.py b/pyvcell/_internal/api/vcell_client/models/status.py index 3f27b9a..0e40399 100644 --- a/pyvcell/_internal/api/vcell_client/models/status.py +++ b/pyvcell/_internal/api/vcell_client/models/status.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,22 +26,20 @@ class Status(str, Enum): """ allowed enum values """ - UNKNOWN = 'UNKNOWN' - NEVER_RAN = 'NEVER_RAN' - START_REQUESTED = 'START_REQUESTED' - DISPATCHED = 'DISPATCHED' - WAITING = 'WAITING' - QUEUED = 'QUEUED' - RUNNING = 'RUNNING' - COMPLETED = 'COMPLETED' - FAILED = 'FAILED' - STOP_REQUESTED = 'STOP_REQUESTED' - STOPPED = 'STOPPED' - NOT_SAVED = 'NOT_SAVED' + UNKNOWN = "UNKNOWN" + NEVER_RAN = "NEVER_RAN" + START_REQUESTED = "START_REQUESTED" + DISPATCHED = "DISPATCHED" + WAITING = "WAITING" + QUEUED = "QUEUED" + RUNNING = "RUNNING" + COMPLETED = "COMPLETED" + FAILED = "FAILED" + STOP_REQUESTED = "STOP_REQUESTED" + STOPPED = "STOPPED" + NOT_SAVED = "NOT_SAVED" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of Status from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/status_message.py b/pyvcell/_internal/api/vcell_client/models/status_message.py index d4db24a..97aa5aa 100644 --- a/pyvcell/_internal/api/vcell_client/models/status_message.py +++ b/pyvcell/_internal/api/vcell_client/models/status_message.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class StatusMessage(BaseModel): """ StatusMessage - """ # noqa: E501 + """ # noqa: E501 + job_status: Optional[SimulationJobStatusRecord] = Field(default=None, alias="jobStatus") user_name: Optional[StrictStr] = Field(default=None, alias="userName") progress: Optional[Union[StrictFloat, StrictInt]] = None @@ -40,7 +41,6 @@ class StatusMessage(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -65,8 +65,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -75,7 +74,7 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of job_status if self.job_status: - _dict['jobStatus'] = self.job_status.to_dict() + _dict["jobStatus"] = self.job_status.to_dict() return _dict @classmethod @@ -93,11 +92,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: raise ValueError("Error due to additional fields (not defined in StatusMessage) in the input: " + _key) _obj = cls.model_validate({ - "jobStatus": SimulationJobStatusRecord.from_dict(obj["jobStatus"]) if obj.get("jobStatus") is not None else None, + "jobStatus": SimulationJobStatusRecord.from_dict(obj["jobStatus"]) + if obj.get("jobStatus") is not None + else None, "userName": obj.get("userName"), "progress": obj.get("progress"), - "timepoint": obj.get("timepoint") + "timepoint": obj.get("timepoint"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/time_mode.py b/pyvcell/_internal/api/vcell_client/models/time_mode.py index 7916b52..18d1f6a 100644 --- a/pyvcell/_internal/api/vcell_client/models/time_mode.py +++ b/pyvcell/_internal/api/vcell_client/models/time_mode.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,12 +26,10 @@ class TimeMode(str, Enum): """ allowed enum values """ - TIME_POINT = 'TIME_POINT' - TIME_RANGE = 'TIME_RANGE' + TIME_POINT = "TIME_POINT" + TIME_RANGE = "TIME_RANGE" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of TimeMode from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/time_specs.py b/pyvcell/_internal/api/vcell_client/models/time_specs.py index bc0a2e8..c53777c 100644 --- a/pyvcell/_internal/api/vcell_client/models/time_specs.py +++ b/pyvcell/_internal/api/vcell_client/models/time_specs.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class TimeSpecs(BaseModel): """ TimeSpecs - """ # noqa: E501 + """ # noqa: E501 + begin_time_index: Optional[StrictInt] = Field(default=None, alias="beginTimeIndex") end_time_index: Optional[StrictInt] = Field(default=None, alias="endTimeIndex") all_times: Optional[List[Union[StrictFloat, StrictInt]]] = Field(default=None, alias="allTimes") @@ -40,7 +41,6 @@ class TimeSpecs(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -65,8 +65,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -93,8 +92,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "beginTimeIndex": obj.get("beginTimeIndex"), "endTimeIndex": obj.get("endTimeIndex"), "allTimes": obj.get("allTimes"), - "mode": obj.get("mode") + "mode": obj.get("mode"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/user.py b/pyvcell/_internal/api/vcell_client/models/user.py index 0d1b6e8..06ab5d3 100644 --- a/pyvcell/_internal/api/vcell_client/models/user.py +++ b/pyvcell/_internal/api/vcell_client/models/user.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class User(BaseModel): """ User - """ # noqa: E501 + """ # noqa: E501 + user_name: Optional[StrictStr] = Field(default=None, alias="userName") key: Optional[StrictStr] = None my_specials: Optional[List[SPECIALCLAIM]] = Field(default=None, alias="mySpecials") @@ -39,7 +40,6 @@ class User(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -64,8 +64,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -91,8 +90,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "userName": obj.get("userName"), "key": obj.get("key"), - "mySpecials": obj.get("mySpecials") + "mySpecials": obj.get("mySpecials"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/user_identity_json_safe.py b/pyvcell/_internal/api/vcell_client/models/user_identity_json_safe.py index a353684..d2cffa3 100644 --- a/pyvcell/_internal/api/vcell_client/models/user_identity_json_safe.py +++ b/pyvcell/_internal/api/vcell_client/models/user_identity_json_safe.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class UserIdentityJSONSafe(BaseModel): """ UserIdentityJSONSafe - """ # noqa: E501 + """ # noqa: E501 + mapped: Optional[StrictBool] = None user_name: Optional[StrictStr] = Field(default=None, alias="userName") id: Optional[Union[StrictFloat, StrictInt]] = None @@ -40,7 +41,6 @@ class UserIdentityJSONSafe(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -65,8 +65,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -87,15 +86,15 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in UserIdentityJSONSafe) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in UserIdentityJSONSafe) in the input: " + _key + ) _obj = cls.model_validate({ "mapped": obj.get("mapped"), "userName": obj.get("userName"), "id": obj.get("id"), "subject": obj.get("subject"), - "insertDate": obj.get("insertDate") + "insertDate": obj.get("insertDate"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/user_login_info_for_mapping.py b/pyvcell/_internal/api/vcell_client/models/user_login_info_for_mapping.py index 1dbc186..4e1b2fa 100644 --- a/pyvcell/_internal/api/vcell_client/models/user_login_info_for_mapping.py +++ b/pyvcell/_internal/api/vcell_client/models/user_login_info_for_mapping.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class UserLoginInfoForMapping(BaseModel): """ UserLoginInfoForMapping - """ # noqa: E501 + """ # noqa: E501 + user_id: Optional[StrictStr] = Field(default=None, alias="userID") password: Optional[StrictStr] = None __properties: ClassVar[List[str]] = ["userID", "password"] @@ -37,7 +38,6 @@ class UserLoginInfoForMapping(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -62,8 +62,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -84,12 +83,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in UserLoginInfoForMapping) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in UserLoginInfoForMapping) in the input: " + _key + ) - _obj = cls.model_validate({ - "userID": obj.get("userID"), - "password": obj.get("password") - }) + _obj = cls.model_validate({"userID": obj.get("userID"), "password": obj.get("password")}) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/user_registration_info.py b/pyvcell/_internal/api/vcell_client/models/user_registration_info.py index cefb91d..c889c8e 100644 --- a/pyvcell/_internal/api/vcell_client/models/user_registration_info.py +++ b/pyvcell/_internal/api/vcell_client/models/user_registration_info.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class UserRegistrationInfo(BaseModel): """ UserRegistrationInfo - """ # noqa: E501 + """ # noqa: E501 + user_id: Optional[StrictStr] = Field(default=None, alias="userID") title: Optional[StrictStr] = None organization: Optional[StrictStr] = None @@ -40,7 +41,6 @@ class UserRegistrationInfo(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -65,8 +65,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -87,15 +86,15 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in UserRegistrationInfo) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in UserRegistrationInfo) in the input: " + _key + ) _obj = cls.model_validate({ "userID": obj.get("userID"), "title": obj.get("title"), "organization": obj.get("organization"), "country": obj.get("country"), - "emailNotification": obj.get("emailNotification") + "emailNotification": obj.get("emailNotification"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/v_cell_http_error.py b/pyvcell/_internal/api/vcell_client/models/v_cell_http_error.py index 08949f2..8387f64 100644 --- a/pyvcell/_internal/api/vcell_client/models/v_cell_http_error.py +++ b/pyvcell/_internal/api/vcell_client/models/v_cell_http_error.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class VCellHTTPError(BaseModel): """ VCellHTTPError - """ # noqa: E501 + """ # noqa: E501 + exception_type: Optional[StrictStr] = Field(default=None, alias="exceptionType") message: Optional[StrictStr] = None __properties: ClassVar[List[str]] = ["exceptionType", "message"] @@ -37,7 +38,6 @@ class VCellHTTPError(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -62,8 +62,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -86,10 +85,5 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if _key not in cls.__properties: raise ValueError("Error due to additional fields (not defined in VCellHTTPError) in the input: " + _key) - _obj = cls.model_validate({ - "exceptionType": obj.get("exceptionType"), - "message": obj.get("message") - }) + _obj = cls.model_validate({"exceptionType": obj.get("exceptionType"), "message": obj.get("message")}) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/v_cell_site.py b/pyvcell/_internal/api/vcell_client/models/v_cell_site.py index 0ad4f1d..ccb7fea 100644 --- a/pyvcell/_internal/api/vcell_client/models/v_cell_site.py +++ b/pyvcell/_internal/api/vcell_client/models/v_cell_site.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,15 +26,13 @@ class VCellSite(str, Enum): """ allowed enum values """ - ALPHA = 'alpha' - BETA = 'beta' - REL = 'rel' - OTHER = 'other' - UNKNOWN = 'unknown' + ALPHA = "alpha" + BETA = "beta" + REL = "rel" + OTHER = "other" + UNKNOWN = "unknown" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of VCellSite from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/v_cell_software_version.py b/pyvcell/_internal/api/vcell_client/models/v_cell_software_version.py index 97d0d2f..2f540a3 100644 --- a/pyvcell/_internal/api/vcell_client/models/v_cell_software_version.py +++ b/pyvcell/_internal/api/vcell_client/models/v_cell_software_version.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class VCellSoftwareVersion(BaseModel): """ VCellSoftwareVersion - """ # noqa: E501 + """ # noqa: E501 + software_version_string: Optional[StrictStr] = Field(default=None, alias="softwareVersionString") vcell_site: Optional[VCellSite] = Field(default=None, alias="vcellSite") build_number: Optional[StrictStr] = Field(default=None, alias="buildNumber") @@ -37,7 +38,17 @@ class VCellSoftwareVersion(BaseModel): patch_version: Optional[StrictInt] = Field(default=None, alias="patchVersion") build_int: Optional[StrictInt] = Field(default=None, alias="buildInt") description: Optional[StrictStr] = None - __properties: ClassVar[List[str]] = ["softwareVersionString", "vcellSite", "buildNumber", "versionNumber", "majorVersion", "minorVersion", "patchVersion", "buildInt", "description"] + __properties: ClassVar[List[str]] = [ + "softwareVersionString", + "vcellSite", + "buildNumber", + "versionNumber", + "majorVersion", + "minorVersion", + "patchVersion", + "buildInt", + "description", + ] model_config = ConfigDict( populate_by_name=True, @@ -45,7 +56,6 @@ class VCellSoftwareVersion(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -70,8 +80,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -92,7 +101,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in VCellSoftwareVersion) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in VCellSoftwareVersion) in the input: " + _key + ) _obj = cls.model_validate({ "softwareVersionString": obj.get("softwareVersionString"), @@ -103,8 +114,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "minorVersion": obj.get("minorVersion"), "patchVersion": obj.get("patchVersion"), "buildInt": obj.get("buildInt"), - "description": obj.get("description") + "description": obj.get("description"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/variable_domain.py b/pyvcell/_internal/api/vcell_client/models/variable_domain.py index 514417c..a4e4b27 100644 --- a/pyvcell/_internal/api/vcell_client/models/variable_domain.py +++ b/pyvcell/_internal/api/vcell_client/models/variable_domain.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,17 +26,15 @@ class VariableDomain(str, Enum): """ allowed enum values """ - VARIABLEDOMAIN_POSTPROCESSING = 'VARIABLEDOMAIN_POSTPROCESSING' - VARIABLEDOMAIN_UNKNOWN = 'VARIABLEDOMAIN_UNKNOWN' - VARIABLEDOMAIN_VOLUME = 'VARIABLEDOMAIN_VOLUME' - VARIABLEDOMAIN_MEMBRANE = 'VARIABLEDOMAIN_MEMBRANE' - VARIABLEDOMAIN_CONTOUR = 'VARIABLEDOMAIN_CONTOUR' - VARIABLEDOMAIN_NONSPATIAL = 'VARIABLEDOMAIN_NONSPATIAL' - VARIABLEDOMAIN_POINT = 'VARIABLEDOMAIN_POINT' + VARIABLEDOMAIN_POSTPROCESSING = "VARIABLEDOMAIN_POSTPROCESSING" + VARIABLEDOMAIN_UNKNOWN = "VARIABLEDOMAIN_UNKNOWN" + VARIABLEDOMAIN_VOLUME = "VARIABLEDOMAIN_VOLUME" + VARIABLEDOMAIN_MEMBRANE = "VARIABLEDOMAIN_MEMBRANE" + VARIABLEDOMAIN_CONTOUR = "VARIABLEDOMAIN_CONTOUR" + VARIABLEDOMAIN_NONSPATIAL = "VARIABLEDOMAIN_NONSPATIAL" + VARIABLEDOMAIN_POINT = "VARIABLEDOMAIN_POINT" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of VariableDomain from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/variable_mode.py b/pyvcell/_internal/api/vcell_client/models/variable_mode.py index f49726d..876d8a8 100644 --- a/pyvcell/_internal/api/vcell_client/models/variable_mode.py +++ b/pyvcell/_internal/api/vcell_client/models/variable_mode.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,13 +26,11 @@ class VariableMode(str, Enum): """ allowed enum values """ - VARIABLE_ONE = 'VARIABLE_ONE' - VARIABLE_MULTI = 'VARIABLE_MULTI' - VARIABLE_ALL = 'VARIABLE_ALL' + VARIABLE_ONE = "VARIABLE_ONE" + VARIABLE_MULTI = "VARIABLE_MULTI" + VARIABLE_ALL = "VARIABLE_ALL" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of VariableMode from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/variable_specs.py b/pyvcell/_internal/api/vcell_client/models/variable_specs.py index 07f7093..43ee12c 100644 --- a/pyvcell/_internal/api/vcell_client/models/variable_specs.py +++ b/pyvcell/_internal/api/vcell_client/models/variable_specs.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class VariableSpecs(BaseModel): """ VariableSpecs - """ # noqa: E501 + """ # noqa: E501 + variable_names: Optional[List[StrictStr]] = Field(default=None, alias="variableNames") mode: Optional[VariableMode] = None __properties: ClassVar[List[str]] = ["variableNames", "mode"] @@ -38,7 +39,6 @@ class VariableSpecs(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -63,8 +63,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -87,10 +86,5 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: if _key not in cls.__properties: raise ValueError("Error due to additional fields (not defined in VariableSpecs) in the input: " + _key) - _obj = cls.model_validate({ - "variableNames": obj.get("variableNames"), - "mode": obj.get("mode") - }) + _obj = cls.model_validate({"variableNames": obj.get("variableNames"), "mode": obj.get("mode")}) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/variable_type.py b/pyvcell/_internal/api/vcell_client/models/variable_type.py index 730d6cf..4a341f2 100644 --- a/pyvcell/_internal/api/vcell_client/models/variable_type.py +++ b/pyvcell/_internal/api/vcell_client/models/variable_type.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class VariableType(BaseModel): """ VariableType - """ # noqa: E501 + """ # noqa: E501 + type: Optional[StrictInt] = None variable_domain: Optional[VariableDomain] = Field(default=None, alias="variableDomain") name: Optional[StrictStr] = None @@ -37,7 +38,17 @@ class VariableType(BaseModel): default_label: Optional[StrictStr] = Field(default=None, alias="defaultLabel") default_units: Optional[StrictStr] = Field(default=None, alias="defaultUnits") type_name: Optional[StrictStr] = Field(default=None, alias="typeName") - __properties: ClassVar[List[str]] = ["type", "variableDomain", "name", "units", "label", "legacyWarn", "defaultLabel", "defaultUnits", "typeName"] + __properties: ClassVar[List[str]] = [ + "type", + "variableDomain", + "name", + "units", + "label", + "legacyWarn", + "defaultLabel", + "defaultUnits", + "typeName", + ] model_config = ConfigDict( populate_by_name=True, @@ -45,7 +56,6 @@ class VariableType(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -70,8 +80,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -103,8 +112,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "legacyWarn": obj.get("legacyWarn"), "defaultLabel": obj.get("defaultLabel"), "defaultUnits": obj.get("defaultUnits"), - "typeName": obj.get("typeName") + "typeName": obj.get("typeName"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/vc_document_type.py b/pyvcell/_internal/api/vcell_client/models/vc_document_type.py index bb6ce8a..bfc4c59 100644 --- a/pyvcell/_internal/api/vcell_client/models/vc_document_type.py +++ b/pyvcell/_internal/api/vcell_client/models/vc_document_type.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import json from enum import Enum @@ -27,14 +26,12 @@ class VCDocumentType(str, Enum): """ allowed enum values """ - BIOMODEL_DOC = 'BIOMODEL_DOC' - MATHMODEL_DOC = 'MATHMODEL_DOC' - GEOMETRY_DOC = 'GEOMETRY_DOC' - EXTERNALFILE_DOC = 'EXTERNALFILE_DOC' + BIOMODEL_DOC = "BIOMODEL_DOC" + MATHMODEL_DOC = "MATHMODEL_DOC" + GEOMETRY_DOC = "GEOMETRY_DOC" + EXTERNALFILE_DOC = "EXTERNALFILE_DOC" @classmethod def from_json(cls, json_str: str) -> Self: """Create an instance of VCDocumentType from a JSON string""" return cls(json.loads(json_str)) - - diff --git a/pyvcell/_internal/api/vcell_client/models/vc_image_summary.py b/pyvcell/_internal/api/vcell_client/models/vc_image_summary.py index ede7ea8..88fc6de 100644 --- a/pyvcell/_internal/api/vcell_client/models/vc_image_summary.py +++ b/pyvcell/_internal/api/vcell_client/models/vc_image_summary.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -28,10 +27,12 @@ from typing import Optional, Set from typing_extensions import Self + class VCImageSummary(BaseModel): """ VCImageSummary - """ # noqa: E501 + """ # noqa: E501 + size: Optional[ISize] = None extent: Optional[Extent] = None version: Optional[Version] = None @@ -45,7 +46,6 @@ class VCImageSummary(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -70,8 +70,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -80,19 +79,19 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of size if self.size: - _dict['size'] = self.size.to_dict() + _dict["size"] = self.size.to_dict() # override the default output from pydantic by calling `to_dict()` of extent if self.extent: - _dict['extent'] = self.extent.to_dict() + _dict["extent"] = self.extent.to_dict() # override the default output from pydantic by calling `to_dict()` of version if self.version: - _dict['version'] = self.version.to_dict() + _dict["version"] = self.version.to_dict() # override the default output from pydantic by calling `to_dict()` of preview if self.preview: - _dict['preview'] = self.preview.to_dict() + _dict["preview"] = self.preview.to_dict() # override the default output from pydantic by calling `to_dict()` of software_version if self.software_version: - _dict['softwareVersion'] = self.software_version.to_dict() + _dict["softwareVersion"] = self.software_version.to_dict() return _dict @classmethod @@ -114,8 +113,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "extent": Extent.from_dict(obj["extent"]) if obj.get("extent") is not None else None, "version": Version.from_dict(obj["version"]) if obj.get("version") is not None else None, "preview": GIFImage.from_dict(obj["preview"]) if obj.get("preview") is not None else None, - "softwareVersion": VCellSoftwareVersion.from_dict(obj["softwareVersion"]) if obj.get("softwareVersion") is not None else None + "softwareVersion": VCellSoftwareVersion.from_dict(obj["softwareVersion"]) + if obj.get("softwareVersion") is not None + else None, }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/vc_simulation_identifier.py b/pyvcell/_internal/api/vcell_client/models/vc_simulation_identifier.py index 1ba5d8c..b596c19 100644 --- a/pyvcell/_internal/api/vcell_client/models/vc_simulation_identifier.py +++ b/pyvcell/_internal/api/vcell_client/models/vc_simulation_identifier.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -24,10 +23,12 @@ from typing import Optional, Set from typing_extensions import Self + class VCSimulationIdentifier(BaseModel): """ VCSimulationIdentifier - """ # noqa: E501 + """ # noqa: E501 + simulation_key: Optional[StrictStr] = Field(default=None, alias="simulationKey") owner: Optional[User] = None id: Optional[StrictStr] = None @@ -39,7 +40,6 @@ class VCSimulationIdentifier(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -64,8 +64,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -74,7 +73,7 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of owner if self.owner: - _dict['owner'] = self.owner.to_dict() + _dict["owner"] = self.owner.to_dict() return _dict @classmethod @@ -89,13 +88,13 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: # raise errors for additional fields in the input for _key in obj.keys(): if _key not in cls.__properties: - raise ValueError("Error due to additional fields (not defined in VCSimulationIdentifier) in the input: " + _key) + raise ValueError( + "Error due to additional fields (not defined in VCSimulationIdentifier) in the input: " + _key + ) _obj = cls.model_validate({ "simulationKey": obj.get("simulationKey"), "owner": User.from_dict(obj["owner"]) if obj.get("owner") is not None else None, - "id": obj.get("id") + "id": obj.get("id"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/version.py b/pyvcell/_internal/api/vcell_client/models/version.py index 1599c99..5ac71ac 100644 --- a/pyvcell/_internal/api/vcell_client/models/version.py +++ b/pyvcell/_internal/api/vcell_client/models/version.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -27,10 +26,12 @@ from typing import Optional, Set from typing_extensions import Self + class Version(BaseModel): """ Version - """ # noqa: E501 + """ # noqa: E501 + version_key: Optional[StrictStr] = Field(default=None, alias="versionKey") annot: Optional[StrictStr] = None branch_id: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="branchID") @@ -40,7 +41,17 @@ class Version(BaseModel): group_access: Optional[GroupAccess] = Field(default=None, alias="groupAccess") name: Optional[StrictStr] = None owner: Optional[User] = None - __properties: ClassVar[List[str]] = ["versionKey", "annot", "branchID", "branchPointRefKey", "date", "flag", "groupAccess", "name", "owner"] + __properties: ClassVar[List[str]] = [ + "versionKey", + "annot", + "branchID", + "branchPointRefKey", + "date", + "flag", + "groupAccess", + "name", + "owner", + ] model_config = ConfigDict( populate_by_name=True, @@ -48,7 +59,6 @@ class Version(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -73,8 +83,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -83,13 +92,13 @@ def to_dict(self) -> Dict[str, Any]: ) # override the default output from pydantic by calling `to_dict()` of flag if self.flag: - _dict['flag'] = self.flag.to_dict() + _dict["flag"] = self.flag.to_dict() # override the default output from pydantic by calling `to_dict()` of group_access if self.group_access: - _dict['groupAccess'] = self.group_access.to_dict() + _dict["groupAccess"] = self.group_access.to_dict() # override the default output from pydantic by calling `to_dict()` of owner if self.owner: - _dict['owner'] = self.owner.to_dict() + _dict["owner"] = self.owner.to_dict() return _dict @classmethod @@ -115,8 +124,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "flag": VersionFlag.from_dict(obj["flag"]) if obj.get("flag") is not None else None, "groupAccess": GroupAccess.from_dict(obj["groupAccess"]) if obj.get("groupAccess") is not None else None, "name": obj.get("name"), - "owner": User.from_dict(obj["owner"]) if obj.get("owner") is not None else None + "owner": User.from_dict(obj["owner"]) if obj.get("owner") is not None else None, }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/models/version_flag.py b/pyvcell/_internal/api/vcell_client/models/version_flag.py index 37d2f78..12b0d5c 100644 --- a/pyvcell/_internal/api/vcell_client/models/version_flag.py +++ b/pyvcell/_internal/api/vcell_client/models/version_flag.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - from __future__ import annotations import pprint import re # noqa: F401 @@ -23,10 +22,12 @@ from typing import Optional, Set from typing_extensions import Self + class VersionFlag(BaseModel): """ VersionFlag - """ # noqa: E501 + """ # noqa: E501 + version_flag: Optional[StrictInt] = Field(default=None, alias="versionFlag") int_value: Optional[StrictInt] = Field(default=None, alias="intValue") archived: Optional[StrictBool] = None @@ -40,7 +41,6 @@ class VersionFlag(BaseModel): protected_namespaces=(), ) - def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.model_dump(by_alias=True)) @@ -65,8 +65,7 @@ def to_dict(self) -> Dict[str, Any]: were set at model initialization. Other fields with value `None` are ignored. """ - excluded_fields: Set[str] = set([ - ]) + excluded_fields: Set[str] = set([]) _dict = self.model_dump( by_alias=True, @@ -94,8 +93,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "intValue": obj.get("intValue"), "archived": obj.get("archived"), "current": obj.get("current"), - "published": obj.get("published") + "published": obj.get("published"), }) return _obj - - diff --git a/pyvcell/_internal/api/vcell_client/rest.py b/pyvcell/_internal/api/vcell_client/rest.py index 3d75098..e2dac52 100644 --- a/pyvcell/_internal/api/vcell_client/rest.py +++ b/pyvcell/_internal/api/vcell_client/rest.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import io import json import re @@ -37,7 +36,6 @@ def is_socks_proxy_url(url): class RESTResponse(io.IOBase): - def __init__(self, resp) -> None: self.response = resp self.status = resp.status @@ -64,7 +62,6 @@ def getheader(self, name, default=None): class RESTClientObject: - def __init__(self, configuration) -> None: # urllib3.PoolManager will pass all kw parameters to connectionpool # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501 @@ -85,22 +82,19 @@ def __init__(self, configuration) -> None: "ca_cert_data": configuration.ca_cert_data, } if configuration.assert_hostname is not None: - pool_args['assert_hostname'] = ( - configuration.assert_hostname - ) + pool_args["assert_hostname"] = configuration.assert_hostname if configuration.retries is not None: - pool_args['retries'] = configuration.retries + pool_args["retries"] = configuration.retries if configuration.tls_server_name: - pool_args['server_hostname'] = configuration.tls_server_name - + pool_args["server_hostname"] = configuration.tls_server_name if configuration.socket_options is not None: - pool_args['socket_options'] = configuration.socket_options + pool_args["socket_options"] = configuration.socket_options if configuration.connection_pool_maxsize is not None: - pool_args['maxsize'] = configuration.connection_pool_maxsize + pool_args["maxsize"] = configuration.connection_pool_maxsize # https pool manager self.pool_manager: urllib3.PoolManager @@ -108,6 +102,7 @@ def __init__(self, configuration) -> None: if configuration.proxy: if is_socks_proxy_url(configuration.proxy): from urllib3.contrib.socks import SOCKSProxyManager + pool_args["proxy_url"] = configuration.proxy pool_args["headers"] = configuration.proxy_headers self.pool_manager = SOCKSProxyManager(**pool_args) @@ -118,15 +113,7 @@ def __init__(self, configuration) -> None: else: self.pool_manager = urllib3.PoolManager(**pool_args) - def request( - self, - method, - url, - headers=None, - body=None, - post_params=None, - _request_timeout=None - ): + def request(self, method, url, headers=None, body=None, post_params=None, _request_timeout=None): """Perform requests. :param method: http request method @@ -142,20 +129,10 @@ def request( (connection, read) timeouts. """ method = method.upper() - assert method in [ - 'GET', - 'HEAD', - 'DELETE', - 'POST', - 'PUT', - 'PATCH', - 'OPTIONS' - ] + assert method in ["GET", "HEAD", "DELETE", "POST", "PUT", "PATCH", "OPTIONS"] if post_params and body: - raise ApiValueError( - "body parameter cannot be used with post_params parameter." - ) + raise ApiValueError("body parameter cannot be used with post_params parameter.") post_params = post_params or {} headers = headers or {} @@ -164,37 +141,22 @@ def request( if _request_timeout: if isinstance(_request_timeout, (int, float)): timeout = urllib3.Timeout(total=_request_timeout) - elif ( - isinstance(_request_timeout, tuple) - and len(_request_timeout) == 2 - ): - timeout = urllib3.Timeout( - connect=_request_timeout[0], - read=_request_timeout[1] - ) + elif isinstance(_request_timeout, tuple) and len(_request_timeout) == 2: + timeout = urllib3.Timeout(connect=_request_timeout[0], read=_request_timeout[1]) try: # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE` - if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']: - + if method in ["POST", "PUT", "PATCH", "OPTIONS", "DELETE"]: # no content type provided or payload is json - content_type = headers.get('Content-Type') - if ( - not content_type - or re.search('json', content_type, re.IGNORECASE) - ): + content_type = headers.get("Content-Type") + if not content_type or re.search("json", content_type, re.IGNORECASE): request_body = None if body is not None: request_body = json.dumps(body) r = self.pool_manager.request( - method, - url, - body=request_body, - timeout=timeout, - headers=headers, - preload_content=False + method, url, body=request_body, timeout=timeout, headers=headers, preload_content=False ) - elif content_type == 'application/x-www-form-urlencoded': + elif content_type == "application/x-www-form-urlencoded": r = self.pool_manager.request( method, url, @@ -202,15 +164,15 @@ def request( encode_multipart=False, timeout=timeout, headers=headers, - preload_content=False + preload_content=False, ) - elif content_type == 'multipart/form-data': + elif content_type == "multipart/form-data": # must del headers['Content-Type'], or the correct # Content-Type which generated by urllib3 will be # overwritten. - del headers['Content-Type'] + del headers["Content-Type"] # Ensures that dict objects are serialized - post_params = [(a, json.dumps(b)) if isinstance(b, dict) else (a,b) for a, b in post_params] + post_params = [(a, json.dumps(b)) if isinstance(b, dict) else (a, b) for a, b in post_params] r = self.pool_manager.request( method, url, @@ -218,29 +180,20 @@ def request( encode_multipart=True, timeout=timeout, headers=headers, - preload_content=False + preload_content=False, ) # Pass a `string` parameter directly in the body to support # other content types than JSON when `body` argument is # provided in serialized form. elif isinstance(body, str) or isinstance(body, bytes): r = self.pool_manager.request( - method, - url, - body=body, - timeout=timeout, - headers=headers, - preload_content=False + method, url, body=body, timeout=timeout, headers=headers, preload_content=False ) - elif headers['Content-Type'].startswith('text/') and isinstance(body, bool): + elif headers["Content-Type"].startswith("text/") and isinstance(body, bool): request_body = "true" if body else "false" r = self.pool_manager.request( - method, - url, - body=request_body, - preload_content=False, - timeout=timeout, - headers=headers) + method, url, body=request_body, preload_content=False, timeout=timeout, headers=headers + ) else: # Cannot generate the request from given parameters msg = """Cannot prepare a request message for provided @@ -250,12 +203,7 @@ def request( # For `GET`, `HEAD` else: r = self.pool_manager.request( - method, - url, - fields={}, - timeout=timeout, - headers=headers, - preload_content=False + method, url, fields={}, timeout=timeout, headers=headers, preload_content=False ) except urllib3.exceptions.SSLError as e: msg = "\n".join([type(e).__name__, str(e)]) diff --git a/pyvcell/_internal/api/vcell_client/test/test_acces_token_representation_record.py b/pyvcell/_internal/api/vcell_client/test/test_acces_token_representation_record.py index 58c6f48..5c4dab5 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_acces_token_representation_record.py +++ b/pyvcell/_internal/api/vcell_client/test/test_acces_token_representation_record.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.acces_token_representation_record import AccesTokenRepresentationRecord + class TestAccesTokenRepresentationRecord(unittest.TestCase): """AccesTokenRepresentationRecord unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> AccesTokenRepresentationRecord: """Test AccesTokenRepresentationRecord - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `AccesTokenRepresentationRecord` """ model = AccesTokenRepresentationRecord() @@ -52,5 +52,6 @@ def testAccesTokenRepresentationRecord(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_admin_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_admin_resource_api.py index 4f65f16..187f2e0 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_admin_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_admin_resource_api.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.api.admin_resource_api import AdminResourceApi @@ -35,5 +34,5 @@ def test_get_usage(self) -> None: pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_analytic_curve.py b/pyvcell/_internal/api/vcell_client/test/test_analytic_curve.py index 6ca0bea..5dd40cb 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_analytic_curve.py +++ b/pyvcell/_internal/api/vcell_client/test/test_analytic_curve.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.analytic_curve import AnalyticCurve + class TestAnalyticCurve(unittest.TestCase): """AnalyticCurve unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> AnalyticCurve: """Test AnalyticCurve - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `AnalyticCurve` """ model = AnalyticCurve() @@ -41,12 +41,12 @@ def make_instance(self, include_optional) -> AnalyticCurve: exp_y = '', exp_z = '', offset = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ), analytic_offset = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ), default_num_samples = 56, segment_count = 56, @@ -63,5 +63,6 @@ def testAnalyticCurve(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_annotated_function_dto.py b/pyvcell/_internal/api/vcell_client/test/test_annotated_function_dto.py index 9e083ee..a8153cf 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_annotated_function_dto.py +++ b/pyvcell/_internal/api/vcell_client/test/test_annotated_function_dto.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.annotated_function_dto import AnnotatedFunctionDTO + class TestAnnotatedFunctionDTO(unittest.TestCase): """AnnotatedFunctionDTO unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> AnnotatedFunctionDTO: """Test AnnotatedFunctionDTO - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `AnnotatedFunctionDTO` """ model = AnnotatedFunctionDTO() @@ -42,14 +42,14 @@ def make_instance(self, include_optional) -> AnnotatedFunctionDTO: domain = pyvcell._internal.api.vcell_client.models.domain.Domain( name = '', ), function_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( - type = 56, - variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', - name = '', - units = '', - label = '', - legacy_warn = True, - default_label = '', - default_units = '', + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', type_name = '', ), category = 'PREDEFINED' ) @@ -63,5 +63,6 @@ def testAnnotatedFunctionDTO(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_application_info.py b/pyvcell/_internal/api/vcell_client/test/test_application_info.py index 219426e..36ec971 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_application_info.py +++ b/pyvcell/_internal/api/vcell_client/test/test_application_info.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.application_info import ApplicationInfo + class TestApplicationInfo(unittest.TestCase): """ApplicationInfo unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> ApplicationInfo: """Test ApplicationInfo - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `ApplicationInfo` """ model = ApplicationInfo() @@ -51,5 +51,6 @@ def testApplicationInfo(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_batch_system_type.py b/pyvcell/_internal/api/vcell_client/test/test_batch_system_type.py index a89b596..f93dbd1 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_batch_system_type.py +++ b/pyvcell/_internal/api/vcell_client/test/test_batch_system_type.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.batch_system_type import BatchSystemType + class TestBatchSystemType(unittest.TestCase): """BatchSystemType unit test stubs""" @@ -30,5 +30,6 @@ def testBatchSystemType(self): """Test BatchSystemType""" # inst = BatchSystemType() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_bio_model.py b/pyvcell/_internal/api/vcell_client/test/test_bio_model.py index c9ba7a8..096cbc7 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_bio_model.py +++ b/pyvcell/_internal/api/vcell_client/test/test_bio_model.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.bio_model import BioModel + class TestBioModel(unittest.TestCase): """BioModel unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> BioModel: """Test BioModel - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `BioModel` """ model = BioModel() @@ -65,5 +65,6 @@ def testBioModel(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_bio_model_child_summary.py b/pyvcell/_internal/api/vcell_client/test/test_bio_model_child_summary.py index 51e929b..3c00084 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_bio_model_child_summary.py +++ b/pyvcell/_internal/api/vcell_client/test/test_bio_model_child_summary.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.bio_model_child_summary import BioModelChildSummary + class TestBioModelChildSummary(unittest.TestCase): """BioModelChildSummary unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> BioModelChildSummary: """Test BioModelChildSummary - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `BioModelChildSummary` """ model = BioModelChildSummary() @@ -75,9 +75,9 @@ def make_instance(self, include_optional) -> BioModelChildSummary: ], application_info = [ pyvcell._internal.api.vcell_client.models.application_info.ApplicationInfo( - name = '', - type = 'RuleBased', - dimensions = 56, + name = '', + type = 'RuleBased', + dimensions = 56, geometry_name = '', ) ] ) @@ -91,5 +91,6 @@ def testBioModelChildSummary(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_bio_model_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_bio_model_resource_api.py index bb3087a..c7a70c8 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_bio_model_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_bio_model_resource_api.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.api.bio_model_resource_api import BioModelResourceApi @@ -70,5 +69,5 @@ def test_save_bio_model(self) -> None: pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_bio_model_summary.py b/pyvcell/_internal/api/vcell_client/test/test_bio_model_summary.py index fab62bd..423858b 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_bio_model_summary.py +++ b/pyvcell/_internal/api/vcell_client/test/test_bio_model_summary.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.bio_model_summary import BioModelSummary + class TestBioModelSummary(unittest.TestCase): """BioModelSummary unit test stubs""" @@ -28,112 +28,112 @@ def tearDown(self): def make_instance(self, include_optional) -> BioModelSummary: """Test BioModelSummary - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `BioModelSummary` """ model = BioModelSummary() if include_optional: return BioModelSummary( version = pyvcell._internal.api.vcell_client.models.version.Version( - version_key = '', - annot = '', - branch_id = 1.337, - branch_point_ref_key = '', - date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + version_key = '', + annot = '', + branch_id = 1.337, + branch_point_ref_key = '', + date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), flag = pyvcell._internal.api.vcell_client.models.version_flag.VersionFlag( - version_flag = 56, - int_value = 56, - archived = True, - current = True, - published = True, ), + version_flag = 56, + int_value = 56, + archived = True, + current = True, + published = True, ), group_access = pyvcell._internal.api.vcell_client.models.group_access.GroupAccess( - groupid = 1.337, - description = '', ), - name = '', + groupid = 1.337, + description = '', ), + name = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' ], ), ), summary = pyvcell._internal.api.vcell_client.models.bio_model_child_summary.BioModelChildSummary( sc_names = [ '' - ], + ], sc_annots = [ '' - ], + ], geo_names = [ '' - ], + ], geo_dims = [ 56 - ], + ], app_types = [ 'RuleBased' - ], + ], sim_names = [ [ '' ] - ], + ], sim_annots = [ [ '' ] - ], + ], geometry_dimensions = [ 56 - ], + ], geometry_names = [ '' - ], + ], simulation_context_annotations = [ '' - ], + ], simulation_context_names = [ '' - ], + ], application_info = [ pyvcell._internal.api.vcell_client.models.application_info.ApplicationInfo( - name = '', - type = 'RuleBased', - dimensions = 56, + name = '', + type = 'RuleBased', + dimensions = 56, geometry_name = '', ) ], ), publication_information = [ pyvcell._internal.api.vcell_client.models.publication_info.PublicationInfo( - publication_key = '', - version_key = '', - title = '', + publication_key = '', + version_key = '', + title = '', authors = [ '' - ], - citation = '', - pubmedid = '', - doi = '', - url = '', - pubdate = 'Wed Mar 09 19:00:00 EST 2022', - vc_document_type = 'BIOMODEL_DOC', + ], + citation = '', + pubmedid = '', + doi = '', + url = '', + pubdate = 'Wed Mar 09 19:00:00 EST 2022', + vc_document_type = 'BIOMODEL_DOC', user = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' - ], ), + ], ), the_hash_code = 56, ) ], v_cell_software_version = pyvcell._internal.api.vcell_client.models.v_cell_software_version.VCellSoftwareVersion( - software_version_string = '', - vcell_site = 'alpha', - build_number = '', - version_number = '', - major_version = 56, - minor_version = 56, - patch_version = 56, - build_int = 56, + software_version_string = '', + vcell_site = 'alpha', + build_number = '', + version_number = '', + major_version = 56, + minor_version = 56, + patch_version = 56, + build_int = 56, description = '', ) ) else: @@ -146,5 +146,6 @@ def testBioModelSummary(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_biomodel_ref.py b/pyvcell/_internal/api/vcell_client/test/test_biomodel_ref.py index 025e954..69ea832 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_biomodel_ref.py +++ b/pyvcell/_internal/api/vcell_client/test/test_biomodel_ref.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.biomodel_ref import BiomodelRef + class TestBiomodelRef(unittest.TestCase): """BiomodelRef unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> BiomodelRef: """Test BiomodelRef - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `BiomodelRef` """ model = BiomodelRef() @@ -52,5 +52,6 @@ def testBiomodelRef(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_composite_curve.py b/pyvcell/_internal/api/vcell_client/test/test_composite_curve.py index 711c498..658ce6e 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_composite_curve.py +++ b/pyvcell/_internal/api/vcell_client/test/test_composite_curve.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.composite_curve import CompositeCurve + class TestCompositeCurve(unittest.TestCase): """CompositeCurve unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> CompositeCurve: """Test CompositeCurve - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `CompositeCurve` """ model = CompositeCurve() @@ -56,5 +56,6 @@ def testCompositeCurve(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_control_point_curve.py b/pyvcell/_internal/api/vcell_client/test/test_control_point_curve.py index d7c09c3..17766f2 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_control_point_curve.py +++ b/pyvcell/_internal/api/vcell_client/test/test_control_point_curve.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.control_point_curve import ControlPointCurve + class TestControlPointCurve(unittest.TestCase): """ControlPointCurve unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> ControlPointCurve: """Test ControlPointCurve - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `ControlPointCurve` """ model = ControlPointCurve() @@ -39,15 +39,15 @@ def make_instance(self, include_optional) -> ControlPointCurve: type = 'ControlPointCurve', control_points = [ pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ) ], control_point_count = 56, control_points_vector = [ pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ) ], max_control_points = 56, @@ -66,5 +66,6 @@ def testControlPointCurve(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_coordinate.py b/pyvcell/_internal/api/vcell_client/test/test_coordinate.py index 68e4df7..dce5280 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_coordinate.py +++ b/pyvcell/_internal/api/vcell_client/test/test_coordinate.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.coordinate import Coordinate + class TestCoordinate(unittest.TestCase): """Coordinate unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> Coordinate: """Test Coordinate - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `Coordinate` """ model = Coordinate() @@ -50,5 +50,6 @@ def testCoordinate(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_curve.py b/pyvcell/_internal/api/vcell_client/test/test_curve.py index 52a953c..2f1c581 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_curve.py +++ b/pyvcell/_internal/api/vcell_client/test/test_curve.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.curve import Curve + class TestCurve(unittest.TestCase): """Curve unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> Curve: """Test Curve - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `Curve` """ model = Curve() @@ -40,13 +40,13 @@ def make_instance(self, include_optional) -> Curve: description = '', type = '', beginning_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ), default_num_samples = 56, ending_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ), num_sample_points = 56, segment_count = 56, @@ -65,5 +65,6 @@ def testCurve(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_curve_selection_info.py b/pyvcell/_internal/api/vcell_client/test/test_curve_selection_info.py index aa0e807..3afb325 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_curve_selection_info.py +++ b/pyvcell/_internal/api/vcell_client/test/test_curve_selection_info.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.curve_selection_info import CurveSelectionInfo + class TestCurveSelectionInfo(unittest.TestCase): """CurveSelectionInfo unit test stubs""" @@ -28,31 +28,31 @@ def tearDown(self): def make_instance(self, include_optional) -> CurveSelectionInfo: """Test CurveSelectionInfo - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `CurveSelectionInfo` """ model = CurveSelectionInfo() if include_optional: return CurveSelectionInfo( field_curve = pyvcell._internal.api.vcell_client.models.curve.Curve( - b_closed = True, - description = '', - type = '', + b_closed = True, + description = '', + type = '', beginning_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, - z = 1.337, ), - default_num_samples = 56, + x = 1.337, + y = 1.337, + z = 1.337, ), + default_num_samples = 56, ending_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, - z = 1.337, ), - num_sample_points = 56, - segment_count = 56, - spatial_length = 1.337, - closed = True, + x = 1.337, + y = 1.337, + z = 1.337, ), + num_sample_points = 56, + segment_count = 56, + spatial_length = 1.337, + closed = True, valid = True, ), field_type = 56, field_control_point = 56, @@ -74,5 +74,6 @@ def testCurveSelectionInfo(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_data_identifier.py b/pyvcell/_internal/api/vcell_client/test/test_data_identifier.py index 79e6356..7365032 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_data_identifier.py +++ b/pyvcell/_internal/api/vcell_client/test/test_data_identifier.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.data_identifier import DataIdentifier + class TestDataIdentifier(unittest.TestCase): """DataIdentifier unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> DataIdentifier: """Test DataIdentifier - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `DataIdentifier` """ model = DataIdentifier() @@ -39,14 +39,14 @@ def make_instance(self, include_optional) -> DataIdentifier: name = '', display_name = '', variable_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( - type = 56, - variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', - name = '', - units = '', - label = '', - legacy_warn = True, - default_label = '', - default_units = '', + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', type_name = '', ), domain = pyvcell._internal.api.vcell_client.models.domain.Domain( name = '', ), @@ -64,5 +64,6 @@ def testDataIdentifier(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_detailed_state.py b/pyvcell/_internal/api/vcell_client/test/test_detailed_state.py index 8a4e085..6af1e1b 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_detailed_state.py +++ b/pyvcell/_internal/api/vcell_client/test/test_detailed_state.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.detailed_state import DetailedState + class TestDetailedState(unittest.TestCase): """DetailedState unit test stubs""" @@ -30,5 +30,6 @@ def testDetailedState(self): """Test DetailedState""" # inst = DetailedState() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_domain.py b/pyvcell/_internal/api/vcell_client/test/test_domain.py index 791a934..f978e73 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_domain.py +++ b/pyvcell/_internal/api/vcell_client/test/test_domain.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.domain import Domain + class TestDomain(unittest.TestCase): """Domain unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> Domain: """Test Domain - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `Domain` """ model = Domain() @@ -48,5 +48,6 @@ def testDomain(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_export_event.py b/pyvcell/_internal/api/vcell_client/test/test_export_event.py index f27f6a4..a284ab4 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_export_event.py +++ b/pyvcell/_internal/api/vcell_client/test/test_export_event.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.export_event import ExportEvent + class TestExportEvent(unittest.TestCase): """ExportEvent unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> ExportEvent: """Test ExportEvent - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `ExportEvent` """ model = ExportEvent() @@ -41,8 +41,8 @@ def make_instance(self, include_optional) -> ExportEvent: format = '', location = '', user = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' ], ), @@ -50,20 +50,20 @@ def make_instance(self, include_optional) -> ExportEvent: data_key = '', data_id_string = '', human_readable_data = pyvcell._internal.api.vcell_client.models.human_readable_export_data.HumanReadableExportData( - simulation_name = '', - biomodel_name = '', - application_name = '', + simulation_name = '', + biomodel_name = '', + application_name = '', different_parameter_values = [ '' - ], - application_type = '', - server_saved_file_name = '', - non_spatial = True, + ], + application_type = '', + server_saved_file_name = '', + non_spatial = True, sub_volume = { 'key' : '' - }, - z_slices = 56, - t_slices = 56, + }, + z_slices = 56, + t_slices = 56, num_channels = 56, ) ) else: @@ -76,5 +76,6 @@ def testExportEvent(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_export_progress_type.py b/pyvcell/_internal/api/vcell_client/test/test_export_progress_type.py index f028885..a798519 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_export_progress_type.py +++ b/pyvcell/_internal/api/vcell_client/test/test_export_progress_type.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.export_progress_type import ExportProgressType + class TestExportProgressType(unittest.TestCase): """ExportProgressType unit test stubs""" @@ -30,5 +30,6 @@ def testExportProgressType(self): """Test ExportProgressType""" # inst = ExportProgressType() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_export_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_export_resource_api.py index 79fe4ca..39e4c34 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_export_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_export_resource_api.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.api.export_resource_api import ExportResourceApi @@ -28,17 +27,13 @@ def tearDown(self) -> None: pass def test_export_n5(self) -> None: - """Test case for export_n5 - - """ + """Test case for export_n5""" pass def test_export_status(self) -> None: - """Test case for export_status - - """ + """Test case for export_status""" pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_exportable_data_type.py b/pyvcell/_internal/api/vcell_client/test/test_exportable_data_type.py index 8e673cb..71a3d0f 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_exportable_data_type.py +++ b/pyvcell/_internal/api/vcell_client/test/test_exportable_data_type.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.exportable_data_type import ExportableDataType + class TestExportableDataType(unittest.TestCase): """ExportableDataType unit test stubs""" @@ -30,5 +30,6 @@ def testExportableDataType(self): """Test ExportableDataType""" # inst = ExportableDataType() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_extent.py b/pyvcell/_internal/api/vcell_client/test/test_extent.py index 89e5698..c3c8949 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_extent.py +++ b/pyvcell/_internal/api/vcell_client/test/test_extent.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.extent import Extent + class TestExtent(unittest.TestCase): """Extent unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> Extent: """Test Extent - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `Extent` """ model = Extent() @@ -50,5 +50,6 @@ def testExtent(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_external_data_identifier.py b/pyvcell/_internal/api/vcell_client/test/test_external_data_identifier.py index 04fe62f..5c826c8 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_external_data_identifier.py +++ b/pyvcell/_internal/api/vcell_client/test/test_external_data_identifier.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.external_data_identifier import ExternalDataIdentifier + class TestExternalDataIdentifier(unittest.TestCase): """ExternalDataIdentifier unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> ExternalDataIdentifier: """Test ExternalDataIdentifier - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `ExternalDataIdentifier` """ model = ExternalDataIdentifier() @@ -38,8 +38,8 @@ def make_instance(self, include_optional) -> ExternalDataIdentifier: return ExternalDataIdentifier( key = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' ], ), @@ -59,5 +59,6 @@ def testExternalDataIdentifier(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_field_data.py b/pyvcell/_internal/api/vcell_client/test/test_field_data.py index 8f9253e..8953fee 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_field_data.py +++ b/pyvcell/_internal/api/vcell_client/test/test_field_data.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.field_data import FieldData + class TestFieldData(unittest.TestCase): """FieldData unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> FieldData: """Test FieldData - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `FieldData` """ model = FieldData() @@ -57,16 +57,16 @@ def make_instance(self, include_optional) -> FieldData: 1.337 ], origin = pyvcell._internal.api.vcell_client.models.origin.Origin( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ), extent = pyvcell._internal.api.vcell_client.models.extent.Extent( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ), isize = pyvcell._internal.api.vcell_client.models.i_size.ISize( - x = 56, - y = 56, + x = 56, + y = 56, z = 56, ), annotation = '', name = '' @@ -81,5 +81,6 @@ def testFieldData(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_field_data_reference.py b/pyvcell/_internal/api/vcell_client/test/test_field_data_reference.py index c89b3c9..9a0f15f 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_field_data_reference.py +++ b/pyvcell/_internal/api/vcell_client/test/test_field_data_reference.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.field_data_reference import FieldDataReference + class TestFieldDataReference(unittest.TestCase): """FieldDataReference unit test stubs""" @@ -28,26 +28,26 @@ def tearDown(self): def make_instance(self, include_optional) -> FieldDataReference: """Test FieldDataReference - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `FieldDataReference` """ model = FieldDataReference() if include_optional: return FieldDataReference( field_data_id = pyvcell._internal.api.vcell_client.models.external_data_identifier.ExternalDataIdentifier( - key = '', + key = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' - ], ), - name = '', - job_index = 56, - simulation_key = '', - parameter_scan_type = True, + ], ), + name = '', + job_index = 56, + simulation_key = '', + parameter_scan_type = True, data_key = '', ), annotation = '', simulations_referencing_this_id = [ @@ -64,5 +64,6 @@ def testFieldDataReference(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_field_data_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_field_data_resource_api.py index 80a2bf5..64c2dcf 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_field_data_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_field_data_resource_api.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.api.field_data_resource_api import FieldDataResourceApi @@ -91,5 +90,5 @@ def test_save(self) -> None: pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_field_data_saved_results.py b/pyvcell/_internal/api/vcell_client/test/test_field_data_saved_results.py index ea5bfeb..06451e7 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_field_data_saved_results.py +++ b/pyvcell/_internal/api/vcell_client/test/test_field_data_saved_results.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.field_data_saved_results import FieldDataSavedResults + class TestFieldDataSavedResults(unittest.TestCase): """FieldDataSavedResults unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> FieldDataSavedResults: """Test FieldDataSavedResults - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `FieldDataSavedResults` """ model = FieldDataSavedResults() @@ -49,5 +49,6 @@ def testFieldDataSavedResults(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_field_data_shape.py b/pyvcell/_internal/api/vcell_client/test/test_field_data_shape.py index 64c17a7..0116df2 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_field_data_shape.py +++ b/pyvcell/_internal/api/vcell_client/test/test_field_data_shape.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.field_data_shape import FieldDataShape + class TestFieldDataShape(unittest.TestCase): """FieldDataShape unit test stubs""" @@ -28,44 +28,44 @@ def tearDown(self): def make_instance(self, include_optional) -> FieldDataShape: """Test FieldDataShape - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `FieldDataShape` """ model = FieldDataShape() if include_optional: return FieldDataShape( extent = pyvcell._internal.api.vcell_client.models.extent.Extent( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ), origin = pyvcell._internal.api.vcell_client.models.origin.Origin( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ), isize = pyvcell._internal.api.vcell_client.models.i_size.ISize( - x = 56, - y = 56, + x = 56, + y = 56, z = 56, ), data_identifier = [ pyvcell._internal.api.vcell_client.models.data_identifier.DataIdentifier( - name = '', - display_name = '', + name = '', + display_name = '', variable_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( - type = 56, - variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', - name = '', - units = '', - label = '', - legacy_warn = True, - default_label = '', - default_units = '', - type_name = '', ), + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), domain = pyvcell._internal.api.vcell_client.models.domain.Domain( - name = '', ), - b_function = True, - function = True, + name = '', ), + b_function = True, + function = True, visible = True, ) ], times = [ @@ -82,5 +82,6 @@ def testFieldDataShape(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_function_category.py b/pyvcell/_internal/api/vcell_client/test/test_function_category.py index e47d4d2..5e6d24b 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_function_category.py +++ b/pyvcell/_internal/api/vcell_client/test/test_function_category.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.function_category import FunctionCategory + class TestFunctionCategory(unittest.TestCase): """FunctionCategory unit test stubs""" @@ -30,5 +30,6 @@ def testFunctionCategory(self): """Test FunctionCategory""" # inst = FunctionCategory() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_geometry_mode.py b/pyvcell/_internal/api/vcell_client/test/test_geometry_mode.py index fed3cc8..6d27f55 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_geometry_mode.py +++ b/pyvcell/_internal/api/vcell_client/test/test_geometry_mode.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.geometry_mode import GeometryMode + class TestGeometryMode(unittest.TestCase): """GeometryMode unit test stubs""" @@ -30,5 +30,6 @@ def testGeometryMode(self): """Test GeometryMode""" # inst = GeometryMode() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_geometry_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_geometry_resource_api.py index f64a358..08b8ffe 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_geometry_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_geometry_resource_api.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.api.geometry_resource_api import GeometryResourceApi @@ -28,35 +27,25 @@ def tearDown(self) -> None: pass def test_delete_geometry(self) -> None: - """Test case for delete_geometry - - """ + """Test case for delete_geometry""" pass def test_get_geometry_summaries(self) -> None: - """Test case for get_geometry_summaries - - """ + """Test case for get_geometry_summaries""" pass def test_get_geometry_summary(self) -> None: - """Test case for get_geometry_summary - - """ + """Test case for get_geometry_summary""" pass def test_get_geometry_vcml(self) -> None: - """Test case for get_geometry_vcml - - """ + """Test case for get_geometry_vcml""" pass def test_save_geometry(self) -> None: - """Test case for save_geometry - - """ + """Test case for save_geometry""" pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_geometry_spec_dto.py b/pyvcell/_internal/api/vcell_client/test/test_geometry_spec_dto.py index 8c0a848..c5f2c94 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_geometry_spec_dto.py +++ b/pyvcell/_internal/api/vcell_client/test/test_geometry_spec_dto.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.geometry_spec_dto import GeometrySpecDTO + class TestGeometrySpecDTO(unittest.TestCase): """GeometrySpecDTO unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> GeometrySpecDTO: """Test GeometrySpecDTO - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `GeometrySpecDTO` """ model = GeometrySpecDTO() @@ -40,54 +40,54 @@ def make_instance(self, include_optional) -> GeometrySpecDTO: pyvcell._internal.api.vcell_client.models.spatial_selection.SpatialSelection( curve_selection_info = pyvcell._internal.api.vcell_client.models.curve_selection_info.CurveSelectionInfo( field_curve = pyvcell._internal.api.vcell_client.models.curve.Curve( - b_closed = True, - description = '', - type = '', + b_closed = True, + description = '', + type = '', beginning_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, - z = 1.337, ), - default_num_samples = 56, + x = 1.337, + y = 1.337, + z = 1.337, ), + default_num_samples = 56, ending_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, - z = 1.337, ), - num_sample_points = 56, - segment_count = 56, - spatial_length = 1.337, - closed = True, - valid = True, ), - field_type = 56, - field_control_point = 56, - field_segment = 56, - field_u = 1.337, - field_u_extended = 1.337, - field_control_point_extended = 56, - field_segment_extended = 56, - field_direction_negative = True, - crossing = True, ), + x = 1.337, + y = 1.337, + z = 1.337, ), + num_sample_points = 56, + segment_count = 56, + spatial_length = 1.337, + closed = True, + valid = True, ), + field_type = 56, + field_control_point = 56, + field_segment = 56, + field_u = 1.337, + field_u_extended = 1.337, + field_control_point_extended = 56, + field_segment_extended = 56, + field_direction_negative = True, + crossing = True, ), var_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( - type = 56, - variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', - name = '', - units = '', - label = '', - legacy_warn = True, - default_label = '', - default_units = '', - type_name = '', ), - type = '', - smallest_mesh_cell_dimension_length = 1.337, + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + type = '', + smallest_mesh_cell_dimension_length = 1.337, variable_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( - type = 56, - name = '', - units = '', - label = '', - legacy_warn = True, - default_label = '', - default_units = '', - type_name = '', ), - closed = True, + type = 56, + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + closed = True, point = True, ) ], axis = 56, @@ -104,5 +104,6 @@ def testGeometrySpecDTO(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_geometry_summary.py b/pyvcell/_internal/api/vcell_client/test/test_geometry_summary.py index 72dadee..58200ab 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_geometry_summary.py +++ b/pyvcell/_internal/api/vcell_client/test/test_geometry_summary.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.geometry_summary import GeometrySummary + class TestGeometrySummary(unittest.TestCase): """GeometrySummary unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> GeometrySummary: """Test GeometrySummary - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `GeometrySummary` """ model = GeometrySummary() @@ -38,45 +38,45 @@ def make_instance(self, include_optional) -> GeometrySummary: return GeometrySummary( dimension = 56, origin = pyvcell._internal.api.vcell_client.models.origin.Origin( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ), extent = pyvcell._internal.api.vcell_client.models.extent.Extent( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ), image_ref = '', version = pyvcell._internal.api.vcell_client.models.version.Version( - version_key = '', - annot = '', - branch_id = 1.337, - branch_point_ref_key = '', - date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + version_key = '', + annot = '', + branch_id = 1.337, + branch_point_ref_key = '', + date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), flag = pyvcell._internal.api.vcell_client.models.version_flag.VersionFlag( - version_flag = 56, - int_value = 56, - archived = True, - current = True, - published = True, ), + version_flag = 56, + int_value = 56, + archived = True, + current = True, + published = True, ), group_access = pyvcell._internal.api.vcell_client.models.group_access.GroupAccess( - groupid = 1.337, - description = '', ), - name = '', + groupid = 1.337, + description = '', ), + name = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' ], ), ), software_version = pyvcell._internal.api.vcell_client.models.v_cell_software_version.VCellSoftwareVersion( - software_version_string = '', - vcell_site = 'alpha', - build_number = '', - version_number = '', - major_version = 56, - minor_version = 56, - patch_version = 56, - build_int = 56, + software_version_string = '', + vcell_site = 'alpha', + build_number = '', + version_number = '', + major_version = 56, + minor_version = 56, + patch_version = 56, + build_int = 56, description = '', ) ) else: @@ -89,5 +89,6 @@ def testGeometrySummary(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_gif_image.py b/pyvcell/_internal/api/vcell_client/test/test_gif_image.py index 7b507c2..a86a232 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_gif_image.py +++ b/pyvcell/_internal/api/vcell_client/test/test_gif_image.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.gif_image import GIFImage + class TestGIFImage(unittest.TestCase): """GIFImage unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> GIFImage: """Test GIFImage - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `GIFImage` """ model = GIFImage() @@ -38,8 +38,8 @@ def make_instance(self, include_optional) -> GIFImage: return GIFImage( gif_encoded_data = bytes(b'blah'), size = pyvcell._internal.api.vcell_client.models.i_size.ISize( - x = 56, - y = 56, + x = 56, + y = 56, z = 56, ) ) else: @@ -52,5 +52,6 @@ def testGIFImage(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_group_access.py b/pyvcell/_internal/api/vcell_client/test/test_group_access.py index 4772964..93c9817 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_group_access.py +++ b/pyvcell/_internal/api/vcell_client/test/test_group_access.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.group_access import GroupAccess + class TestGroupAccess(unittest.TestCase): """GroupAccess unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> GroupAccess: """Test GroupAccess - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `GroupAccess` """ model = GroupAccess() @@ -50,5 +50,6 @@ def testGroupAccess(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_group_access_all.py b/pyvcell/_internal/api/vcell_client/test/test_group_access_all.py index e62ed4f..81042b2 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_group_access_all.py +++ b/pyvcell/_internal/api/vcell_client/test/test_group_access_all.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.group_access_all import GroupAccessAll + class TestGroupAccessAll(unittest.TestCase): """GroupAccessAll unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> GroupAccessAll: """Test GroupAccessAll - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `GroupAccessAll` """ model = GroupAccessAll() @@ -50,5 +50,6 @@ def testGroupAccessAll(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_group_access_none.py b/pyvcell/_internal/api/vcell_client/test/test_group_access_none.py index 31dcfe7..08c0eae 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_group_access_none.py +++ b/pyvcell/_internal/api/vcell_client/test/test_group_access_none.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.group_access_none import GroupAccessNone + class TestGroupAccessNone(unittest.TestCase): """GroupAccessNone unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> GroupAccessNone: """Test GroupAccessNone - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `GroupAccessNone` """ model = GroupAccessNone() @@ -50,5 +50,6 @@ def testGroupAccessNone(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_group_access_some.py b/pyvcell/_internal/api/vcell_client/test/test_group_access_some.py index 2a7da7c..ee12646 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_group_access_some.py +++ b/pyvcell/_internal/api/vcell_client/test/test_group_access_some.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.group_access_some import GroupAccessSome + class TestGroupAccessSome(unittest.TestCase): """GroupAccessSome unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> GroupAccessSome: """Test GroupAccessSome - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `GroupAccessSome` """ model = GroupAccessSome() @@ -40,8 +40,8 @@ def make_instance(self, include_optional) -> GroupAccessSome: hash = 1.337, group_members = [ pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' ], ) @@ -52,16 +52,16 @@ def make_instance(self, include_optional) -> GroupAccessSome: description = '', hidden_group_members = [ pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' ], ) ], normal_group_members = [ pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' ], ) @@ -78,5 +78,6 @@ def testGroupAccessSome(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_hello_world_api.py b/pyvcell/_internal/api/vcell_client/test/test_hello_world_api.py index fc70518..b75413d 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_hello_world_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_hello_world_api.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.api.hello_world_api import HelloWorldApi @@ -35,5 +34,5 @@ def test_get_hello_world(self) -> None: pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_hello_world_message.py b/pyvcell/_internal/api/vcell_client/test/test_hello_world_message.py index e2c6161..e439952 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_hello_world_message.py +++ b/pyvcell/_internal/api/vcell_client/test/test_hello_world_message.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.hello_world_message import HelloWorldMessage + class TestHelloWorldMessage(unittest.TestCase): """HelloWorldMessage unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> HelloWorldMessage: """Test HelloWorldMessage - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `HelloWorldMessage` """ model = HelloWorldMessage() @@ -48,5 +48,6 @@ def testHelloWorldMessage(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_htc_job_id.py b/pyvcell/_internal/api/vcell_client/test/test_htc_job_id.py index 08ba025..2f61eea 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_htc_job_id.py +++ b/pyvcell/_internal/api/vcell_client/test/test_htc_job_id.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.htc_job_id import HtcJobID + class TestHtcJobID(unittest.TestCase): """HtcJobID unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> HtcJobID: """Test HtcJobID - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `HtcJobID` """ model = HtcJobID() @@ -50,5 +50,6 @@ def testHtcJobID(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_human_readable_export_data.py b/pyvcell/_internal/api/vcell_client/test/test_human_readable_export_data.py index 19c1bdd..dcf172e 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_human_readable_export_data.py +++ b/pyvcell/_internal/api/vcell_client/test/test_human_readable_export_data.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.human_readable_export_data import HumanReadableExportData + class TestHumanReadableExportData(unittest.TestCase): """HumanReadableExportData unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> HumanReadableExportData: """Test HumanReadableExportData - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `HumanReadableExportData` """ model = HumanReadableExportData() @@ -62,5 +62,6 @@ def testHumanReadableExportData(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_i_size.py b/pyvcell/_internal/api/vcell_client/test/test_i_size.py index f2e167f..27078b7 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_i_size.py +++ b/pyvcell/_internal/api/vcell_client/test/test_i_size.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.i_size import ISize + class TestISize(unittest.TestCase): """ISize unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> ISize: """Test ISize - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `ISize` """ model = ISize() @@ -50,5 +50,6 @@ def testISize(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_identity.py b/pyvcell/_internal/api/vcell_client/test/test_identity.py index 914a0bc..722b5a2 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_identity.py +++ b/pyvcell/_internal/api/vcell_client/test/test_identity.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.identity import Identity + class TestIdentity(unittest.TestCase): """Identity unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> Identity: """Test Identity - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `Identity` """ model = Identity() @@ -57,5 +57,6 @@ def testIdentity(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_math_model_child_summary.py b/pyvcell/_internal/api/vcell_client/test/test_math_model_child_summary.py index 17758fd..b28aec7 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_math_model_child_summary.py +++ b/pyvcell/_internal/api/vcell_client/test/test_math_model_child_summary.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.math_model_child_summary import MathModelChildSummary + class TestMathModelChildSummary(unittest.TestCase): """MathModelChildSummary unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> MathModelChildSummary: """Test MathModelChildSummary - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `MathModelChildSummary` """ model = MathModelChildSummary() @@ -56,5 +56,6 @@ def testMathModelChildSummary(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_math_model_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_math_model_resource_api.py index 8ede569..68e9428 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_math_model_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_math_model_resource_api.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.api.math_model_resource_api import MathModelResourceApi @@ -28,35 +27,25 @@ def tearDown(self) -> None: pass def test_delete_math_model(self) -> None: - """Test case for delete_math_model - - """ + """Test case for delete_math_model""" pass def test_get_summaries(self) -> None: - """Test case for get_summaries - - """ + """Test case for get_summaries""" pass def test_get_summary(self) -> None: - """Test case for get_summary - - """ + """Test case for get_summary""" pass def test_get_vcml(self) -> None: - """Test case for get_vcml - - """ + """Test case for get_vcml""" pass def test_save_math_model(self) -> None: - """Test case for save_math_model - - """ + """Test case for save_math_model""" pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_math_model_summary.py b/pyvcell/_internal/api/vcell_client/test/test_math_model_summary.py index f1ed645..60d352e 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_math_model_summary.py +++ b/pyvcell/_internal/api/vcell_client/test/test_math_model_summary.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.math_model_summary import MathModelSummary + class TestMathModelSummary(unittest.TestCase): """MathModelSummary unit test stubs""" @@ -28,77 +28,77 @@ def tearDown(self): def make_instance(self, include_optional) -> MathModelSummary: """Test MathModelSummary - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `MathModelSummary` """ model = MathModelSummary() if include_optional: return MathModelSummary( version = pyvcell._internal.api.vcell_client.models.version.Version( - version_key = '', - annot = '', - branch_id = 1.337, - branch_point_ref_key = '', - date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + version_key = '', + annot = '', + branch_id = 1.337, + branch_point_ref_key = '', + date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), flag = pyvcell._internal.api.vcell_client.models.version_flag.VersionFlag( - version_flag = 56, - int_value = 56, - archived = True, - current = True, - published = True, ), + version_flag = 56, + int_value = 56, + archived = True, + current = True, + published = True, ), group_access = pyvcell._internal.api.vcell_client.models.group_access.GroupAccess( - groupid = 1.337, - description = '', ), - name = '', + groupid = 1.337, + description = '', ), + name = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' ], ), ), key_value = '', model_info = pyvcell._internal.api.vcell_client.models.math_model_child_summary.MathModelChildSummary( - model_type = 'RuleBased', - geometry_dimension = 56, - geometry_name = '', + model_type = 'RuleBased', + geometry_dimension = 56, + geometry_name = '', simulation_annotations = [ '' - ], + ], simulation_names = [ '' ], ), software_version = pyvcell._internal.api.vcell_client.models.v_cell_software_version.VCellSoftwareVersion( - software_version_string = '', - vcell_site = 'alpha', - build_number = '', - version_number = '', - major_version = 56, - minor_version = 56, - patch_version = 56, - build_int = 56, + software_version_string = '', + vcell_site = 'alpha', + build_number = '', + version_number = '', + major_version = 56, + minor_version = 56, + patch_version = 56, + build_int = 56, description = '', ), publication_infos = [ pyvcell._internal.api.vcell_client.models.publication_info.PublicationInfo( - publication_key = '', - version_key = '', - title = '', + publication_key = '', + version_key = '', + title = '', authors = [ '' - ], - citation = '', - pubmedid = '', - doi = '', - url = '', - pubdate = 'Wed Mar 09 19:00:00 EST 2022', - vc_document_type = 'BIOMODEL_DOC', + ], + citation = '', + pubmedid = '', + doi = '', + url = '', + pubdate = 'Wed Mar 09 19:00:00 EST 2022', + vc_document_type = 'BIOMODEL_DOC', user = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' - ], ), + ], ), the_hash_code = 56, ) ], annotated_functions = '' @@ -113,5 +113,6 @@ def testMathModelSummary(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_math_type.py b/pyvcell/_internal/api/vcell_client/test/test_math_type.py index 83c9c23..96b6bb5 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_math_type.py +++ b/pyvcell/_internal/api/vcell_client/test/test_math_type.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.math_type import MathType + class TestMathType(unittest.TestCase): """MathType unit test stubs""" @@ -30,5 +30,6 @@ def testMathType(self): """Test MathType""" # inst = MathType() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_mathmodel_ref.py b/pyvcell/_internal/api/vcell_client/test/test_mathmodel_ref.py index f5db863..f525211 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_mathmodel_ref.py +++ b/pyvcell/_internal/api/vcell_client/test/test_mathmodel_ref.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.mathmodel_ref import MathmodelRef + class TestMathmodelRef(unittest.TestCase): """MathmodelRef unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> MathmodelRef: """Test MathmodelRef - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `MathmodelRef` """ model = MathmodelRef() @@ -52,5 +52,6 @@ def testMathmodelRef(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_model_type.py b/pyvcell/_internal/api/vcell_client/test/test_model_type.py index a11a86e..b5671d6 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_model_type.py +++ b/pyvcell/_internal/api/vcell_client/test/test_model_type.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.model_type import ModelType + class TestModelType(unittest.TestCase): """ModelType unit test stubs""" @@ -30,5 +30,6 @@ def testModelType(self): """Test ModelType""" # inst = ModelType() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_n5_export_request.py b/pyvcell/_internal/api/vcell_client/test/test_n5_export_request.py index 3cee49e..bc6f33a 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_n5_export_request.py +++ b/pyvcell/_internal/api/vcell_client/test/test_n5_export_request.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.n5_export_request import N5ExportRequest + class TestN5ExportRequest(unittest.TestCase): """N5ExportRequest unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> N5ExportRequest: """Test N5ExportRequest - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `N5ExportRequest` """ model = N5ExportRequest() @@ -39,83 +39,83 @@ def make_instance(self, include_optional) -> N5ExportRequest: standard_export_information = pyvcell._internal.api.vcell_client.models.standard_export_info.StandardExportInfo( output_context = [ pyvcell._internal.api.vcell_client.models.annotated_function_dto.AnnotatedFunctionDTO( - function_name = '', - function_expression = '', - error = '', + function_name = '', + function_expression = '', + error = '', domain = pyvcell._internal.api.vcell_client.models.domain.Domain( - name = '', ), + name = '', ), function_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( - type = 56, - variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', - name = '', - units = '', - label = '', - legacy_warn = True, - default_label = '', - default_units = '', - type_name = '', ), + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), category = 'PREDEFINED', ) - ], - context_name = '', - simulation_name = '', - simulation_key = '', - simulation_job = 56, + ], + context_name = '', + simulation_name = '', + simulation_key = '', + simulation_job = 56, geometry_specs = pyvcell._internal.api.vcell_client.models.geometry_spec_dto.GeometrySpecDTO( selections = [ pyvcell._internal.api.vcell_client.models.spatial_selection.SpatialSelection( curve_selection_info = pyvcell._internal.api.vcell_client.models.curve_selection_info.CurveSelectionInfo( field_curve = pyvcell._internal.api.vcell_client.models.curve.Curve( - b_closed = True, - description = '', - type = '', + b_closed = True, + description = '', + type = '', beginning_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, - z = 1.337, ), - default_num_samples = 56, + x = 1.337, + y = 1.337, + z = 1.337, ), + default_num_samples = 56, ending_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, - z = 1.337, ), - num_sample_points = 56, - segment_count = 56, - spatial_length = 1.337, - closed = True, - valid = True, ), - field_type = 56, - field_control_point = 56, - field_segment = 56, - field_u = 1.337, - field_u_extended = 1.337, - field_control_point_extended = 56, - field_segment_extended = 56, - field_direction_negative = True, - crossing = True, ), + x = 1.337, + y = 1.337, + z = 1.337, ), + num_sample_points = 56, + segment_count = 56, + spatial_length = 1.337, + closed = True, + valid = True, ), + field_type = 56, + field_control_point = 56, + field_segment = 56, + field_u = 1.337, + field_u_extended = 1.337, + field_control_point_extended = 56, + field_segment_extended = 56, + field_direction_negative = True, + crossing = True, ), var_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( - type = 56, - name = '', - units = '', - label = '', - legacy_warn = True, - default_label = '', - default_units = '', - type_name = '', ), - type = '', - smallest_mesh_cell_dimension_length = 1.337, - variable_type = , - closed = True, + type = 56, + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + type = '', + smallest_mesh_cell_dimension_length = 1.337, + variable_type = , + closed = True, point = True, ) - ], - axis = 56, - slice_number = 56, - geometry_mode = 'GEOMETRY_SELECTIONS', ), + ], + axis = 56, + slice_number = 56, + geometry_mode = 'GEOMETRY_SELECTIONS', ), time_specs = pyvcell._internal.api.vcell_client.models.time_specs.TimeSpecs( - begin_time_index = 56, - end_time_index = 56, + begin_time_index = 56, + end_time_index = 56, all_times = [ 1.337 - ], - mode = 'TIME_POINT', ), + ], + mode = 'TIME_POINT', ), variable_specs = pyvcell._internal.api.vcell_client.models.variable_specs.VariableSpecs( variable_names = [ '' @@ -136,5 +136,6 @@ def testN5ExportRequest(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_origin.py b/pyvcell/_internal/api/vcell_client/test/test_origin.py index c08d24f..eecc5cf 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_origin.py +++ b/pyvcell/_internal/api/vcell_client/test/test_origin.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.origin import Origin + class TestOrigin(unittest.TestCase): """Origin unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> Origin: """Test Origin - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `Origin` """ model = Origin() @@ -50,5 +50,6 @@ def testOrigin(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_publication.py b/pyvcell/_internal/api/vcell_client/test/test_publication.py index 49078d0..139baa8 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_publication.py +++ b/pyvcell/_internal/api/vcell_client/test/test_publication.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.publication import Publication + class TestPublication(unittest.TestCase): """Publication unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> Publication: """Test Publication - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `Publication` """ model = Publication() @@ -50,18 +50,18 @@ def make_instance(self, include_optional) -> Publication: wittid = 56, biomodel_refs = [ pyvcell._internal.api.vcell_client.models.biomodel_ref.BiomodelRef( - bm_key = 56, - name = '', - owner_name = '', - owner_key = 56, + bm_key = 56, + name = '', + owner_name = '', + owner_key = 56, version_flag = 56, ) ], mathmodel_refs = [ pyvcell._internal.api.vcell_client.models.mathmodel_ref.MathmodelRef( - mm_key = 56, - name = '', - owner_name = '', - owner_key = 56, + mm_key = 56, + name = '', + owner_name = '', + owner_key = 56, version_flag = 56, ) ], var_date = 'Wed Mar 09 19:00:00 EST 2022' @@ -76,5 +76,6 @@ def testPublication(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_publication_info.py b/pyvcell/_internal/api/vcell_client/test/test_publication_info.py index b1ffa9b..3ba6fdc 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_publication_info.py +++ b/pyvcell/_internal/api/vcell_client/test/test_publication_info.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.publication_info import PublicationInfo + class TestPublicationInfo(unittest.TestCase): """PublicationInfo unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> PublicationInfo: """Test PublicationInfo - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `PublicationInfo` """ model = PublicationInfo() @@ -49,8 +49,8 @@ def make_instance(self, include_optional) -> PublicationInfo: pubdate = 'Wed Mar 09 19:00:00 EST 2022', vc_document_type = 'BIOMODEL_DOC', user = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' ], ), @@ -66,5 +66,6 @@ def testPublicationInfo(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_publication_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_publication_resource_api.py index 4390744..31b9af1 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_publication_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_publication_resource_api.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.api.publication_resource_api import PublicationResourceApi @@ -63,5 +62,5 @@ def test_update_publication(self) -> None: pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_sampled_curve.py b/pyvcell/_internal/api/vcell_client/test/test_sampled_curve.py index 734a929..6a83233 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_sampled_curve.py +++ b/pyvcell/_internal/api/vcell_client/test/test_sampled_curve.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.sampled_curve import SampledCurve + class TestSampledCurve(unittest.TestCase): """SampledCurve unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SampledCurve: """Test SampledCurve - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `SampledCurve` """ model = SampledCurve() @@ -54,5 +54,6 @@ def testSampledCurve(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_scheduler_status.py b/pyvcell/_internal/api/vcell_client/test/test_scheduler_status.py index b5b7a3a..6bdd55d 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_scheduler_status.py +++ b/pyvcell/_internal/api/vcell_client/test/test_scheduler_status.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.scheduler_status import SchedulerStatus + class TestSchedulerStatus(unittest.TestCase): """SchedulerStatus unit test stubs""" @@ -30,5 +30,6 @@ def testSchedulerStatus(self): """Test SchedulerStatus""" # inst = SchedulerStatus() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_simulation_execution_status_record.py b/pyvcell/_internal/api/vcell_client/test/test_simulation_execution_status_record.py index 21a4017..869362a 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_simulation_execution_status_record.py +++ b/pyvcell/_internal/api/vcell_client/test/test_simulation_execution_status_record.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.simulation_execution_status_record import SimulationExecutionStatusRecord + class TestSimulationExecutionStatusRecord(unittest.TestCase): """SimulationExecutionStatusRecord unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SimulationExecutionStatusRecord: """Test SimulationExecutionStatusRecord - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `SimulationExecutionStatusRecord` """ model = SimulationExecutionStatusRecord() @@ -42,8 +42,8 @@ def make_instance(self, include_optional) -> SimulationExecutionStatusRecord: field_compute_host = '', field_has_data = True, field_htc_job_id = pyvcell._internal.api.vcell_client.models.htc_job_id.HtcJobID( - job_number = 56, - server = '', + job_number = 56, + server = '', batch_system_type = 'PBS', ) ) else: @@ -56,5 +56,6 @@ def testSimulationExecutionStatusRecord(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_simulation_job_status_record.py b/pyvcell/_internal/api/vcell_client/test/test_simulation_job_status_record.py index 06338ea..4b54a4e 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_simulation_job_status_record.py +++ b/pyvcell/_internal/api/vcell_client/test/test_simulation_job_status_record.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.simulation_job_status_record import SimulationJobStatusRecord + class TestSimulationJobStatusRecord(unittest.TestCase): """SimulationJobStatusRecord unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SimulationJobStatusRecord: """Test SimulationJobStatusRecord - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `SimulationJobStatusRecord` """ model = SimulationJobStatusRecord() @@ -38,40 +38,40 @@ def make_instance(self, include_optional) -> SimulationJobStatusRecord: return SimulationJobStatusRecord( field_time_data_stamp = '2022-03-10T16:15:50Z', field_vc_sim_id = pyvcell._internal.api.vcell_client.models.vc_simulation_identifier.VCSimulationIdentifier( - simulation_key = '', + simulation_key = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' - ], ), + ], ), id = '', ), field_submit_date = '2022-03-10T16:15:50Z', field_scheduler_status = 'WAITING', field_simulation_message = pyvcell._internal.api.vcell_client.models.simulation_message.SimulationMessage( - detailed_state = 'UNKNOWN', - message = '', + detailed_state = 'UNKNOWN', + message = '', htc_job_id = pyvcell._internal.api.vcell_client.models.htc_job_id.HtcJobID( - job_number = 56, - server = '', - batch_system_type = 'PBS', ), + job_number = 56, + server = '', + batch_system_type = 'PBS', ), display_message = '', ), field_task_id = 56, field_server_id = '', field_job_index = 56, field_simulation_execution_status = pyvcell._internal.api.vcell_client.models.simulation_execution_status_record.SimulationExecutionStatusRecord( - field_start_date = '2022-03-10T16:15:50Z', - field_latest_update_date = '2022-03-10T16:15:50Z', - field_end_date = '2022-03-10T16:15:50Z', - field_compute_host = '', - field_has_data = True, + field_start_date = '2022-03-10T16:15:50Z', + field_latest_update_date = '2022-03-10T16:15:50Z', + field_end_date = '2022-03-10T16:15:50Z', + field_compute_host = '', + field_has_data = True, field_htc_job_id = pyvcell._internal.api.vcell_client.models.htc_job_id.HtcJobID( - job_number = 56, - server = '', + job_number = 56, + server = '', batch_system_type = 'PBS', ), ), field_simulation_queue_entry_status = pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record.SimulationQueueEntryStatusRecord( - field_queue_priority = 56, - field_queue_date = '2022-03-10T16:15:50Z', + field_queue_priority = 56, + field_queue_date = '2022-03-10T16:15:50Z', field_queue_id = 'QUEUE_ID_WAITING', ) ) else: @@ -84,5 +84,6 @@ def testSimulationJobStatusRecord(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_simulation_message.py b/pyvcell/_internal/api/vcell_client/test/test_simulation_message.py index 154bbed..84eb669 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_simulation_message.py +++ b/pyvcell/_internal/api/vcell_client/test/test_simulation_message.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.simulation_message import SimulationMessage + class TestSimulationMessage(unittest.TestCase): """SimulationMessage unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SimulationMessage: """Test SimulationMessage - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `SimulationMessage` """ model = SimulationMessage() @@ -39,8 +39,8 @@ def make_instance(self, include_optional) -> SimulationMessage: detailed_state = 'UNKNOWN', message = '', htc_job_id = pyvcell._internal.api.vcell_client.models.htc_job_id.HtcJobID( - job_number = 56, - server = '', + job_number = 56, + server = '', batch_system_type = 'PBS', ), display_message = '' ) @@ -54,5 +54,6 @@ def testSimulationMessage(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_entry_status_record.py b/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_entry_status_record.py index d087231..039194d 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_entry_status_record.py +++ b/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_entry_status_record.py @@ -1,21 +1,23 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest -from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import SimulationQueueEntryStatusRecord +from pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record import ( + SimulationQueueEntryStatusRecord, +) + class TestSimulationQueueEntryStatusRecord(unittest.TestCase): """SimulationQueueEntryStatusRecord unit test stubs""" @@ -28,9 +30,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SimulationQueueEntryStatusRecord: """Test SimulationQueueEntryStatusRecord - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `SimulationQueueEntryStatusRecord` """ model = SimulationQueueEntryStatusRecord() @@ -50,5 +52,6 @@ def testSimulationQueueEntryStatusRecord(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_id.py b/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_id.py index 8853494..4e55d05 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_id.py +++ b/pyvcell/_internal/api/vcell_client/test/test_simulation_queue_id.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.simulation_queue_id import SimulationQueueID + class TestSimulationQueueID(unittest.TestCase): """SimulationQueueID unit test stubs""" @@ -30,5 +30,6 @@ def testSimulationQueueID(self): """Test SimulationQueueID""" # inst = SimulationQueueID() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_simulation_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_simulation_resource_api.py index 3aa7c85..8a29bca 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_simulation_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_simulation_resource_api.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.api.simulation_resource_api import SimulationResourceApi @@ -49,5 +48,5 @@ def test_stop_simulation(self) -> None: pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_simulation_status_persistent_record.py b/pyvcell/_internal/api/vcell_client/test/test_simulation_status_persistent_record.py index 39012c4..e8d3270 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_simulation_status_persistent_record.py +++ b/pyvcell/_internal/api/vcell_client/test/test_simulation_status_persistent_record.py @@ -1,21 +1,23 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest -from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import SimulationStatusPersistentRecord +from pyvcell._internal.api.vcell_client.models.simulation_status_persistent_record import ( + SimulationStatusPersistentRecord, +) + class TestSimulationStatusPersistentRecord(unittest.TestCase): """SimulationStatusPersistentRecord unit test stubs""" @@ -28,9 +30,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SimulationStatusPersistentRecord: """Test SimulationStatusPersistentRecord - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `SimulationStatusPersistentRecord` """ model = SimulationStatusPersistentRecord() @@ -50,5 +52,6 @@ def testSimulationStatusPersistentRecord(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_solver_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_solver_resource_api.py index c8d8591..b042b7a 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_solver_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_solver_resource_api.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.api.solver_resource_api import SolverResourceApi @@ -42,5 +41,5 @@ def test_get_fv_solver_input_from_vcml(self) -> None: pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_source_model.py b/pyvcell/_internal/api/vcell_client/test/test_source_model.py index 5c9651d..0724c86 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_source_model.py +++ b/pyvcell/_internal/api/vcell_client/test/test_source_model.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.source_model import SourceModel + class TestSourceModel(unittest.TestCase): """SourceModel unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SourceModel: """Test SourceModel - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `SourceModel` """ model = SourceModel() @@ -49,5 +49,6 @@ def testSourceModel(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_spatial_selection.py b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection.py index 7b02585..2076443 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_spatial_selection.py +++ b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.spatial_selection import SpatialSelection + class TestSpatialSelection(unittest.TestCase): """SpatialSelection unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SpatialSelection: """Test SpatialSelection - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `SpatialSelection` """ model = SpatialSelection() @@ -38,53 +38,53 @@ def make_instance(self, include_optional) -> SpatialSelection: return SpatialSelection( curve_selection_info = pyvcell._internal.api.vcell_client.models.curve_selection_info.CurveSelectionInfo( field_curve = pyvcell._internal.api.vcell_client.models.curve.Curve( - b_closed = True, - description = '', - type = '', + b_closed = True, + description = '', + type = '', beginning_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, - z = 1.337, ), - default_num_samples = 56, + x = 1.337, + y = 1.337, + z = 1.337, ), + default_num_samples = 56, ending_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, - z = 1.337, ), - num_sample_points = 56, - segment_count = 56, - spatial_length = 1.337, - closed = True, - valid = True, ), - field_type = 56, - field_control_point = 56, - field_segment = 56, - field_u = 1.337, - field_u_extended = 1.337, - field_control_point_extended = 56, - field_segment_extended = 56, - field_direction_negative = True, + x = 1.337, + y = 1.337, + z = 1.337, ), + num_sample_points = 56, + segment_count = 56, + spatial_length = 1.337, + closed = True, + valid = True, ), + field_type = 56, + field_control_point = 56, + field_segment = 56, + field_u = 1.337, + field_u_extended = 1.337, + field_control_point_extended = 56, + field_segment_extended = 56, + field_direction_negative = True, crossing = True, ), var_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( - type = 56, - variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', - name = '', - units = '', - label = '', - legacy_warn = True, - default_label = '', - default_units = '', + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', type_name = '', ), type = '', smallest_mesh_cell_dimension_length = 1.337, variable_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( - type = 56, - variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', - name = '', - units = '', - label = '', - legacy_warn = True, - default_label = '', - default_units = '', + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', type_name = '', ), closed = True, point = True @@ -100,5 +100,6 @@ def testSpatialSelection(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_contour.py b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_contour.py index 5463da4..7b01639 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_contour.py +++ b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_contour.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.spatial_selection_contour import SpatialSelectionContour + class TestSpatialSelectionContour(unittest.TestCase): """SpatialSelectionContour unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SpatialSelectionContour: """Test SpatialSelectionContour - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `SpatialSelectionContour` """ model = SpatialSelectionContour() @@ -58,5 +58,6 @@ def testSpatialSelectionContour(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_membrane.py b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_membrane.py index dd75e5e..e282c06 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_membrane.py +++ b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_membrane.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.spatial_selection_membrane import SpatialSelectionMembrane + class TestSpatialSelectionMembrane(unittest.TestCase): """SpatialSelectionMembrane unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SpatialSelectionMembrane: """Test SpatialSelectionMembrane - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `SpatialSelectionMembrane` """ model = SpatialSelectionMembrane() @@ -41,11 +41,11 @@ def make_instance(self, include_optional) -> SpatialSelectionMembrane: 56 ], selection_source = pyvcell._internal.api.vcell_client.models.sampled_curve.SampledCurve( - type = 'SampledCurve', - default_num_samples = 56, - max_control_points = 56, - min_control_points = 56, - segment_count = 56, + type = 'SampledCurve', + default_num_samples = 56, + max_control_points = 56, + min_control_points = 56, + segment_count = 56, spatial_length = 1.337, ) ) else: @@ -59,5 +59,6 @@ def testSpatialSelectionMembrane(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_volume.py b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_volume.py index af4001a..ccc495b 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_volume.py +++ b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_volume.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.spatial_selection_volume import SpatialSelectionVolume + class TestSpatialSelectionVolume(unittest.TestCase): """SpatialSelectionVolume unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> SpatialSelectionVolume: """Test SpatialSelectionVolume - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `SpatialSelectionVolume` """ model = SpatialSelectionVolume() @@ -50,5 +50,6 @@ def testSpatialSelectionVolume(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_specialclaim.py b/pyvcell/_internal/api/vcell_client/test/test_specialclaim.py index 1d8f302..270433b 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_specialclaim.py +++ b/pyvcell/_internal/api/vcell_client/test/test_specialclaim.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.specialclaim import SPECIALCLAIM + class TestSPECIALCLAIM(unittest.TestCase): """SPECIALCLAIM unit test stubs""" @@ -30,5 +30,6 @@ def testSPECIALCLAIM(self): """Test SPECIALCLAIM""" # inst = SPECIALCLAIM() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_spline.py b/pyvcell/_internal/api/vcell_client/test/test_spline.py index 33c9f06..d2b34cc 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_spline.py +++ b/pyvcell/_internal/api/vcell_client/test/test_spline.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.spline import Spline + class TestSpline(unittest.TestCase): """Spline unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> Spline: """Test Spline - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `Spline` """ model = Spline() @@ -53,5 +53,6 @@ def testSpline(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_standard_export_info.py b/pyvcell/_internal/api/vcell_client/test/test_standard_export_info.py index cc3ed10..71b9d01 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_standard_export_info.py +++ b/pyvcell/_internal/api/vcell_client/test/test_standard_export_info.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.standard_export_info import StandardExportInfo + class TestStandardExportInfo(unittest.TestCase): """StandardExportInfo unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> StandardExportInfo: """Test StandardExportInfo - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `StandardExportInfo` """ model = StandardExportInfo() @@ -38,21 +38,21 @@ def make_instance(self, include_optional) -> StandardExportInfo: return StandardExportInfo( output_context = [ pyvcell._internal.api.vcell_client.models.annotated_function_dto.AnnotatedFunctionDTO( - function_name = '', - function_expression = '', - error = '', + function_name = '', + function_expression = '', + error = '', domain = pyvcell._internal.api.vcell_client.models.domain.Domain( - name = '', ), + name = '', ), function_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( - type = 56, - variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', - name = '', - units = '', - label = '', - legacy_warn = True, - default_label = '', - default_units = '', - type_name = '', ), + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), category = 'PREDEFINED', ) ], context_name = '', @@ -64,70 +64,70 @@ def make_instance(self, include_optional) -> StandardExportInfo: pyvcell._internal.api.vcell_client.models.spatial_selection.SpatialSelection( curve_selection_info = pyvcell._internal.api.vcell_client.models.curve_selection_info.CurveSelectionInfo( field_curve = pyvcell._internal.api.vcell_client.models.curve.Curve( - b_closed = True, - description = '', - type = '', + b_closed = True, + description = '', + type = '', beginning_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, - z = 1.337, ), - default_num_samples = 56, + x = 1.337, + y = 1.337, + z = 1.337, ), + default_num_samples = 56, ending_coordinate = pyvcell._internal.api.vcell_client.models.coordinate.Coordinate( - x = 1.337, - y = 1.337, - z = 1.337, ), - num_sample_points = 56, - segment_count = 56, - spatial_length = 1.337, - closed = True, - valid = True, ), - field_type = 56, - field_control_point = 56, - field_segment = 56, - field_u = 1.337, - field_u_extended = 1.337, - field_control_point_extended = 56, - field_segment_extended = 56, - field_direction_negative = True, - crossing = True, ), + x = 1.337, + y = 1.337, + z = 1.337, ), + num_sample_points = 56, + segment_count = 56, + spatial_length = 1.337, + closed = True, + valid = True, ), + field_type = 56, + field_control_point = 56, + field_segment = 56, + field_u = 1.337, + field_u_extended = 1.337, + field_control_point_extended = 56, + field_segment_extended = 56, + field_direction_negative = True, + crossing = True, ), var_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( - type = 56, - variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', - name = '', - units = '', - label = '', - legacy_warn = True, - default_label = '', - default_units = '', - type_name = '', ), - type = '', - smallest_mesh_cell_dimension_length = 1.337, + type = 56, + variable_domain = 'VARIABLEDOMAIN_POSTPROCESSING', + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + type = '', + smallest_mesh_cell_dimension_length = 1.337, variable_type = pyvcell._internal.api.vcell_client.models.variable_type.VariableType( - type = 56, - name = '', - units = '', - label = '', - legacy_warn = True, - default_label = '', - default_units = '', - type_name = '', ), - closed = True, + type = 56, + name = '', + units = '', + label = '', + legacy_warn = True, + default_label = '', + default_units = '', + type_name = '', ), + closed = True, point = True, ) - ], - axis = 56, - slice_number = 56, + ], + axis = 56, + slice_number = 56, geometry_mode = 'GEOMETRY_SELECTIONS', ), time_specs = pyvcell._internal.api.vcell_client.models.time_specs.TimeSpecs( - begin_time_index = 56, - end_time_index = 56, + begin_time_index = 56, + end_time_index = 56, all_times = [ 1.337 - ], + ], mode = 'TIME_POINT', ), variable_specs = pyvcell._internal.api.vcell_client.models.variable_specs.VariableSpecs( variable_names = [ '' - ], + ], mode = 'VARIABLE_ONE', ) ) else: @@ -140,5 +140,6 @@ def testStandardExportInfo(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_status.py b/pyvcell/_internal/api/vcell_client/test/test_status.py index 72edf1f..f35e257 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_status.py +++ b/pyvcell/_internal/api/vcell_client/test/test_status.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.status import Status + class TestStatus(unittest.TestCase): """Status unit test stubs""" @@ -30,5 +30,6 @@ def testStatus(self): """Test Status""" # inst = Status() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_status_message.py b/pyvcell/_internal/api/vcell_client/test/test_status_message.py index 9369250..9773dd9 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_status_message.py +++ b/pyvcell/_internal/api/vcell_client/test/test_status_message.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.status_message import StatusMessage + class TestStatusMessage(unittest.TestCase): """StatusMessage unit test stubs""" @@ -28,50 +28,50 @@ def tearDown(self): def make_instance(self, include_optional) -> StatusMessage: """Test StatusMessage - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `StatusMessage` """ model = StatusMessage() if include_optional: return StatusMessage( job_status = pyvcell._internal.api.vcell_client.models.simulation_job_status_record.SimulationJobStatusRecord( - field_time_data_stamp = '2022-03-10T16:15:50Z', + field_time_data_stamp = '2022-03-10T16:15:50Z', field_vc_sim_id = pyvcell._internal.api.vcell_client.models.vc_simulation_identifier.VCSimulationIdentifier( - simulation_key = '', + simulation_key = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' - ], ), - id = '', ), - field_submit_date = '2022-03-10T16:15:50Z', - field_scheduler_status = 'WAITING', + ], ), + id = '', ), + field_submit_date = '2022-03-10T16:15:50Z', + field_scheduler_status = 'WAITING', field_simulation_message = pyvcell._internal.api.vcell_client.models.simulation_message.SimulationMessage( - detailed_state = 'UNKNOWN', - message = '', + detailed_state = 'UNKNOWN', + message = '', htc_job_id = pyvcell._internal.api.vcell_client.models.htc_job_id.HtcJobID( - job_number = 56, - server = '', - batch_system_type = 'PBS', ), - display_message = '', ), - field_task_id = 56, - field_server_id = '', - field_job_index = 56, + job_number = 56, + server = '', + batch_system_type = 'PBS', ), + display_message = '', ), + field_task_id = 56, + field_server_id = '', + field_job_index = 56, field_simulation_execution_status = pyvcell._internal.api.vcell_client.models.simulation_execution_status_record.SimulationExecutionStatusRecord( - field_start_date = '2022-03-10T16:15:50Z', - field_latest_update_date = '2022-03-10T16:15:50Z', - field_end_date = '2022-03-10T16:15:50Z', - field_compute_host = '', - field_has_data = True, + field_start_date = '2022-03-10T16:15:50Z', + field_latest_update_date = '2022-03-10T16:15:50Z', + field_end_date = '2022-03-10T16:15:50Z', + field_compute_host = '', + field_has_data = True, field_htc_job_id = pyvcell._internal.api.vcell_client.models.htc_job_id.HtcJobID( - job_number = 56, - server = '', ), ), + job_number = 56, + server = '', ), ), field_simulation_queue_entry_status = pyvcell._internal.api.vcell_client.models.simulation_queue_entry_status_record.SimulationQueueEntryStatusRecord( - field_queue_priority = 56, - field_queue_date = '2022-03-10T16:15:50Z', + field_queue_priority = 56, + field_queue_date = '2022-03-10T16:15:50Z', field_queue_id = 'QUEUE_ID_WAITING', ), ), user_name = '', progress = 1.337, @@ -87,5 +87,6 @@ def testStatusMessage(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_time_mode.py b/pyvcell/_internal/api/vcell_client/test/test_time_mode.py index 5fe758d..8208a9d 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_time_mode.py +++ b/pyvcell/_internal/api/vcell_client/test/test_time_mode.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.time_mode import TimeMode + class TestTimeMode(unittest.TestCase): """TimeMode unit test stubs""" @@ -30,5 +30,6 @@ def testTimeMode(self): """Test TimeMode""" # inst = TimeMode() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_time_specs.py b/pyvcell/_internal/api/vcell_client/test/test_time_specs.py index 3d8d2b3..2c0788f 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_time_specs.py +++ b/pyvcell/_internal/api/vcell_client/test/test_time_specs.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.time_specs import TimeSpecs + class TestTimeSpecs(unittest.TestCase): """TimeSpecs unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> TimeSpecs: """Test TimeSpecs - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `TimeSpecs` """ model = TimeSpecs() @@ -53,5 +53,6 @@ def testTimeSpecs(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_user.py b/pyvcell/_internal/api/vcell_client/test/test_user.py index e462996..4c460ee 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_user.py +++ b/pyvcell/_internal/api/vcell_client/test/test_user.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.user import User + class TestUser(unittest.TestCase): """User unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> User: """Test User - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `User` """ model = User() @@ -52,5 +52,6 @@ def testUser(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_user_identity_json_safe.py b/pyvcell/_internal/api/vcell_client/test/test_user_identity_json_safe.py index 85c5ab9..b7241d6 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_user_identity_json_safe.py +++ b/pyvcell/_internal/api/vcell_client/test/test_user_identity_json_safe.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.user_identity_json_safe import UserIdentityJSONSafe + class TestUserIdentityJSONSafe(unittest.TestCase): """UserIdentityJSONSafe unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> UserIdentityJSONSafe: """Test UserIdentityJSONSafe - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `UserIdentityJSONSafe` """ model = UserIdentityJSONSafe() @@ -52,5 +52,6 @@ def testUserIdentityJSONSafe(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_user_login_info_for_mapping.py b/pyvcell/_internal/api/vcell_client/test/test_user_login_info_for_mapping.py index eb676da..d58678f 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_user_login_info_for_mapping.py +++ b/pyvcell/_internal/api/vcell_client/test/test_user_login_info_for_mapping.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.user_login_info_for_mapping import UserLoginInfoForMapping + class TestUserLoginInfoForMapping(unittest.TestCase): """UserLoginInfoForMapping unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> UserLoginInfoForMapping: """Test UserLoginInfoForMapping - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `UserLoginInfoForMapping` """ model = UserLoginInfoForMapping() @@ -49,5 +49,6 @@ def testUserLoginInfoForMapping(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_user_registration_info.py b/pyvcell/_internal/api/vcell_client/test/test_user_registration_info.py index f560cb6..8384200 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_user_registration_info.py +++ b/pyvcell/_internal/api/vcell_client/test/test_user_registration_info.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.user_registration_info import UserRegistrationInfo + class TestUserRegistrationInfo(unittest.TestCase): """UserRegistrationInfo unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> UserRegistrationInfo: """Test UserRegistrationInfo - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `UserRegistrationInfo` """ model = UserRegistrationInfo() @@ -52,5 +52,6 @@ def testUserRegistrationInfo(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_users_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_users_resource_api.py index 29341d6..96488c4 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_users_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_users_resource_api.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.api.users_resource_api import UsersResourceApi @@ -98,5 +97,5 @@ def test_unmap_user(self) -> None: pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_v_cell_http_error.py b/pyvcell/_internal/api/vcell_client/test/test_v_cell_http_error.py index 4ba7d66..cd2f749 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_v_cell_http_error.py +++ b/pyvcell/_internal/api/vcell_client/test/test_v_cell_http_error.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.v_cell_http_error import VCellHTTPError + class TestVCellHTTPError(unittest.TestCase): """VCellHTTPError unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> VCellHTTPError: """Test VCellHTTPError - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `VCellHTTPError` """ model = VCellHTTPError() @@ -49,5 +49,6 @@ def testVCellHTTPError(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_v_cell_site.py b/pyvcell/_internal/api/vcell_client/test/test_v_cell_site.py index 7010fc1..0c8b23b 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_v_cell_site.py +++ b/pyvcell/_internal/api/vcell_client/test/test_v_cell_site.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.v_cell_site import VCellSite + class TestVCellSite(unittest.TestCase): """VCellSite unit test stubs""" @@ -30,5 +30,6 @@ def testVCellSite(self): """Test VCellSite""" # inst = VCellSite() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_v_cell_software_version.py b/pyvcell/_internal/api/vcell_client/test/test_v_cell_software_version.py index 5cf80fa..1300c4e 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_v_cell_software_version.py +++ b/pyvcell/_internal/api/vcell_client/test/test_v_cell_software_version.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.v_cell_software_version import VCellSoftwareVersion + class TestVCellSoftwareVersion(unittest.TestCase): """VCellSoftwareVersion unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> VCellSoftwareVersion: """Test VCellSoftwareVersion - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `VCellSoftwareVersion` """ model = VCellSoftwareVersion() @@ -56,5 +56,6 @@ def testVCellSoftwareVersion(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_variable_domain.py b/pyvcell/_internal/api/vcell_client/test/test_variable_domain.py index 4f5c4bf..65dfc84 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_variable_domain.py +++ b/pyvcell/_internal/api/vcell_client/test/test_variable_domain.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.variable_domain import VariableDomain + class TestVariableDomain(unittest.TestCase): """VariableDomain unit test stubs""" @@ -30,5 +30,6 @@ def testVariableDomain(self): """Test VariableDomain""" # inst = VariableDomain() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_variable_mode.py b/pyvcell/_internal/api/vcell_client/test/test_variable_mode.py index 50a8bea..590b214 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_variable_mode.py +++ b/pyvcell/_internal/api/vcell_client/test/test_variable_mode.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.variable_mode import VariableMode + class TestVariableMode(unittest.TestCase): """VariableMode unit test stubs""" @@ -30,5 +30,6 @@ def testVariableMode(self): """Test VariableMode""" # inst = VariableMode() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_variable_specs.py b/pyvcell/_internal/api/vcell_client/test/test_variable_specs.py index 2e7d4a8..f1af341 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_variable_specs.py +++ b/pyvcell/_internal/api/vcell_client/test/test_variable_specs.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.variable_specs import VariableSpecs + class TestVariableSpecs(unittest.TestCase): """VariableSpecs unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> VariableSpecs: """Test VariableSpecs - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `VariableSpecs` """ model = VariableSpecs() @@ -51,5 +51,6 @@ def testVariableSpecs(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_variable_type.py b/pyvcell/_internal/api/vcell_client/test/test_variable_type.py index 92c7e4b..bc1d7c0 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_variable_type.py +++ b/pyvcell/_internal/api/vcell_client/test/test_variable_type.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.variable_type import VariableType + class TestVariableType(unittest.TestCase): """VariableType unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> VariableType: """Test VariableType - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `VariableType` """ model = VariableType() @@ -56,5 +56,6 @@ def testVariableType(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_vc_document_type.py b/pyvcell/_internal/api/vcell_client/test/test_vc_document_type.py index 5636c31..0c35e2c 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_vc_document_type.py +++ b/pyvcell/_internal/api/vcell_client/test/test_vc_document_type.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.vc_document_type import VCDocumentType + class TestVCDocumentType(unittest.TestCase): """VCDocumentType unit test stubs""" @@ -30,5 +30,6 @@ def testVCDocumentType(self): """Test VCDocumentType""" # inst = VCDocumentType() -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_vc_image_resource_api.py b/pyvcell/_internal/api/vcell_client/test/test_vc_image_resource_api.py index 5d9cf3d..b4752f7 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_vc_image_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/test/test_vc_image_resource_api.py @@ -1,18 +1,17 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.api.vc_image_resource_api import VCImageResourceApi @@ -28,35 +27,25 @@ def tearDown(self) -> None: pass def test_delete_image_vcml(self) -> None: - """Test case for delete_image_vcml - - """ + """Test case for delete_image_vcml""" pass def test_get_image_summaries(self) -> None: - """Test case for get_image_summaries - - """ + """Test case for get_image_summaries""" pass def test_get_image_summary(self) -> None: - """Test case for get_image_summary - - """ + """Test case for get_image_summary""" pass def test_get_image_vcml(self) -> None: - """Test case for get_image_vcml - - """ + """Test case for get_image_vcml""" pass def test_save_image_vcml(self) -> None: - """Test case for save_image_vcml - - """ + """Test case for save_image_vcml""" pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_vc_image_summary.py b/pyvcell/_internal/api/vcell_client/test/test_vc_image_summary.py index 44a03a0..0fc87fe 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_vc_image_summary.py +++ b/pyvcell/_internal/api/vcell_client/test/test_vc_image_summary.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.vc_image_summary import VCImageSummary + class TestVCImageSummary(unittest.TestCase): """VCImageSummary unit test stubs""" @@ -28,59 +28,59 @@ def tearDown(self): def make_instance(self, include_optional) -> VCImageSummary: """Test VCImageSummary - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `VCImageSummary` """ model = VCImageSummary() if include_optional: return VCImageSummary( size = pyvcell._internal.api.vcell_client.models.i_size.ISize( - x = 56, - y = 56, + x = 56, + y = 56, z = 56, ), extent = pyvcell._internal.api.vcell_client.models.extent.Extent( - x = 1.337, - y = 1.337, + x = 1.337, + y = 1.337, z = 1.337, ), version = pyvcell._internal.api.vcell_client.models.version.Version( - version_key = '', - annot = '', - branch_id = 1.337, - branch_point_ref_key = '', - date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + version_key = '', + annot = '', + branch_id = 1.337, + branch_point_ref_key = '', + date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), flag = pyvcell._internal.api.vcell_client.models.version_flag.VersionFlag( - version_flag = 56, - int_value = 56, - archived = True, - current = True, - published = True, ), + version_flag = 56, + int_value = 56, + archived = True, + current = True, + published = True, ), group_access = pyvcell._internal.api.vcell_client.models.group_access.GroupAccess( - groupid = 1.337, - description = '', ), - name = '', + groupid = 1.337, + description = '', ), + name = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' ], ), ), preview = pyvcell._internal.api.vcell_client.models.gif_image.GIFImage( - gif_encoded_data = bytes(b'blah'), + gif_encoded_data = bytes(b'blah'), size = pyvcell._internal.api.vcell_client.models.i_size.ISize( - x = 56, - y = 56, + x = 56, + y = 56, z = 56, ), ), software_version = pyvcell._internal.api.vcell_client.models.v_cell_software_version.VCellSoftwareVersion( - software_version_string = '', - vcell_site = 'alpha', - build_number = '', - version_number = '', - major_version = 56, - minor_version = 56, - patch_version = 56, - build_int = 56, + software_version_string = '', + vcell_site = 'alpha', + build_number = '', + version_number = '', + major_version = 56, + minor_version = 56, + patch_version = 56, + build_int = 56, description = '', ) ) else: @@ -93,5 +93,6 @@ def testVCImageSummary(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_vc_simulation_identifier.py b/pyvcell/_internal/api/vcell_client/test/test_vc_simulation_identifier.py index f2ad9d1..457a50b 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_vc_simulation_identifier.py +++ b/pyvcell/_internal/api/vcell_client/test/test_vc_simulation_identifier.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.vc_simulation_identifier import VCSimulationIdentifier + class TestVCSimulationIdentifier(unittest.TestCase): """VCSimulationIdentifier unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> VCSimulationIdentifier: """Test VCSimulationIdentifier - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `VCSimulationIdentifier` """ model = VCSimulationIdentifier() @@ -38,8 +38,8 @@ def make_instance(self, include_optional) -> VCSimulationIdentifier: return VCSimulationIdentifier( simulation_key = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' ], ), @@ -55,5 +55,6 @@ def testVCSimulationIdentifier(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_version.py b/pyvcell/_internal/api/vcell_client/test/test_version.py index 8dcdae3..22782fe 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_version.py +++ b/pyvcell/_internal/api/vcell_client/test/test_version.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.version import Version + class TestVersion(unittest.TestCase): """Version unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> Version: """Test Version - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `Version` """ model = Version() @@ -42,18 +42,18 @@ def make_instance(self, include_optional) -> Version: branch_point_ref_key = '', var_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), flag = pyvcell._internal.api.vcell_client.models.version_flag.VersionFlag( - version_flag = 56, - int_value = 56, - archived = True, - current = True, + version_flag = 56, + int_value = 56, + archived = True, + current = True, published = True, ), group_access = pyvcell._internal.api.vcell_client.models.group_access.GroupAccess( - groupid = 1.337, + groupid = 1.337, description = '', ), name = '', owner = pyvcell._internal.api.vcell_client.models.user.User( - user_name = '', - key = '', + user_name = '', + key = '', my_specials = [ 'admins' ], ) @@ -68,5 +68,6 @@ def testVersion(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client/test/test_version_flag.py b/pyvcell/_internal/api/vcell_client/test/test_version_flag.py index 4a80098..67cf61a 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_version_flag.py +++ b/pyvcell/_internal/api/vcell_client/test/test_version_flag.py @@ -1,22 +1,22 @@ # coding: utf-8 """ - VCell API +VCell API - VCell API +VCell API - The version of the OpenAPI document: 1.0.1 - Contact: vcell_support@uchc.com - Generated by OpenAPI Generator (https://openapi-generator.tech) +The version of the OpenAPI document: 1.0.1 +Contact: vcell_support@uchc.com +Generated by OpenAPI Generator (https://openapi-generator.tech) - Do not edit the class manually. +Do not edit the class manually. """ # noqa: E501 - import unittest from pyvcell._internal.api.vcell_client.models.version_flag import VersionFlag + class TestVersionFlag(unittest.TestCase): """VersionFlag unit test stubs""" @@ -28,9 +28,9 @@ def tearDown(self): def make_instance(self, include_optional) -> VersionFlag: """Test VersionFlag - include_optional is a boolean, when False only required - params are included, when True both required and - optional params are included """ + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included""" # uncomment below to create an instance of `VersionFlag` """ model = VersionFlag() @@ -52,5 +52,6 @@ def testVersionFlag(self): # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/pyvcell/_internal/api/vcell_client_README.md b/pyvcell/_internal/api/vcell_client_README.md index 07a20e2..539101a 100644 --- a/pyvcell/_internal/api/vcell_client_README.md +++ b/pyvcell/_internal/api/vcell_client_README.md @@ -1,4 +1,5 @@ # vcell-api + VCell API The `pyvcell._internal.api.vcell_client` package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: @@ -7,7 +8,7 @@ The `pyvcell._internal.api.vcell_client` package is automatically generated by t - Package version: 1.0.0 - Generator version: 7.20.0 - Build package: org.openapitools.codegen.languages.PythonClientCodegen -For more information, please visit [https://vcell.org](https://vcell.org) + For more information, please visit [https://vcell.org](https://vcell.org) ## Requirements. @@ -19,10 +20,10 @@ This python library package is generated without supporting files like setup.py To be able to use it, you will need these dependencies in your own package that uses this library: -* urllib3 >= 2.1.0, < 3.0.0 -* python-dateutil >= 2.8.2 -* pydantic >= 2 -* typing-extensions >= 4.7.1 +- urllib3 >= 2.1.0, < 3.0.0 +- python-dateutil >= 2.8.2 +- pydantic >= 2 +- typing-extensions >= 4.7.1 ## Getting Started @@ -66,165 +67,160 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: All URIs are relative to *https://vcell.cam.uchc.edu* -Class | Method | HTTP request | Description ------------- | ------------- | ------------- | ------------- -*AdminResourceApi* | [**get_usage**](pyvcell/_internal/api/vcell_client/docs/AdminResourceApi.md#get_usage) | **GET** /api/v1/admin/usage | Get usage summary -*BioModelResourceApi* | [**delete_bio_model**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#delete_bio_model) | **DELETE** /api/v1/bioModel/{bioModelID} | Delete the BioModel from VCell's database. -*BioModelResourceApi* | [**get_bio_model**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#get_bio_model) | **GET** /api/v1/bioModel/{bioModelID} | Get BioModel. -*BioModelResourceApi* | [**get_bio_model_summaries**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#get_bio_model_summaries) | **GET** /api/v1/bioModel/summaries | Return BioModel summaries. -*BioModelResourceApi* | [**get_bio_model_summary**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#get_bio_model_summary) | **GET** /api/v1/bioModel/{bioModelID}/summary | All of the text based information about a BioModel (summary, version, publication status, etc...), but not the actual BioModel itself. -*BioModelResourceApi* | [**get_bio_model_vcml**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#get_bio_model_vcml) | **GET** /api/v1/bioModel/{bioModelID}/vcml_download | Get the BioModel in VCML format. -*BioModelResourceApi* | [**save_bio_model**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#save_bio_model) | **POST** /api/v1/bioModel | Save's the given BioModel. Optional parameters of name and simulations to update due to math changes. Returns saved BioModel as VCML. -*ExportResourceApi* | [**export_n5**](pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md#export_n5) | **POST** /api/v1/export/N5 | -*ExportResourceApi* | [**export_status**](pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md#export_status) | **GET** /api/v1/export/status | -*FieldDataResourceApi* | [**advanced_create**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#advanced_create) | **POST** /api/v1/fieldData/advancedCreate | Create Field Data with granular detail in one request.The following files are accepted: .tif and .zip. -*FieldDataResourceApi* | [**analyze_file**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#analyze_file) | **POST** /api/v1/fieldData/analyzeFile | Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and return field data. Color mapped images not supported (the colors in those images will be interpreted as separate channels). Filenames must be lowercase alphanumeric, and can contain underscores. -*FieldDataResourceApi* | [**copy_models_field_data**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#copy_models_field_data) | **POST** /api/v1/fieldData/copyModelsFieldData | Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. -*FieldDataResourceApi* | [**create_from_file**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#create_from_file) | **POST** /api/v1/fieldData/createFromFile | Submit a .zip or .tif file that converts into field data, with all defaults derived from the file submitted. -*FieldDataResourceApi* | [**create_from_simulation**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#create_from_simulation) | **POST** /api/v1/fieldData/createFromSimulation | Create new field data from existing simulation results. -*FieldDataResourceApi* | [**delete**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#delete) | **DELETE** /api/v1/fieldData/delete/{fieldDataID} | Delete the selected field data. -*FieldDataResourceApi* | [**get_all_ids**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#get_all_ids) | **GET** /api/v1/fieldData/IDs | Get all of the ids used to identify, and retrieve field data. -*FieldDataResourceApi* | [**get_shape_from_id**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#get_shape_from_id) | **GET** /api/v1/fieldData/shape/{fieldDataID} | Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. -*FieldDataResourceApi* | [**save**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#save) | **POST** /api/v1/fieldData/save | Take the generated field data, and save it to the server. User may adjust the analyzed file before uploading to edit defaults. -*GeometryResourceApi* | [**delete_geometry**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#delete_geometry) | **DELETE** /api/v1/geometry/{id} | -*GeometryResourceApi* | [**get_geometry_summaries**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#get_geometry_summaries) | **GET** /api/v1/geometry/summaries | -*GeometryResourceApi* | [**get_geometry_summary**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#get_geometry_summary) | **GET** /api/v1/geometry/summary/{id} | -*GeometryResourceApi* | [**get_geometry_vcml**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#get_geometry_vcml) | **GET** /api/v1/geometry/{id} | -*GeometryResourceApi* | [**save_geometry**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#save_geometry) | **POST** /api/v1/geometry | -*HelloWorldApi* | [**get_hello_world**](pyvcell/_internal/api/vcell_client/docs/HelloWorldApi.md#get_hello_world) | **GET** /api/v1/helloworld | Get hello world message. -*MathModelResourceApi* | [**delete_math_model**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#delete_math_model) | **DELETE** /api/v1/mathModel/{id} | -*MathModelResourceApi* | [**get_summaries**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#get_summaries) | **GET** /api/v1/mathModel/summaries | -*MathModelResourceApi* | [**get_summary**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#get_summary) | **GET** /api/v1/mathModel/summary/{id} | -*MathModelResourceApi* | [**get_vcml**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#get_vcml) | **GET** /api/v1/mathModel/{id} | -*MathModelResourceApi* | [**save_math_model**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#save_math_model) | **POST** /api/v1/mathModel | -*PublicationResourceApi* | [**create_publication**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#create_publication) | **POST** /api/v1/publications | Create publication -*PublicationResourceApi* | [**delete_publication**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#delete_publication) | **DELETE** /api/v1/publications/{id} | Delete publication -*PublicationResourceApi* | [**get_publication_by_id**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#get_publication_by_id) | **GET** /api/v1/publications/{id} | Get publication by ID -*PublicationResourceApi* | [**get_publications**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#get_publications) | **GET** /api/v1/publications | Get all publications -*PublicationResourceApi* | [**update_publication**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#update_publication) | **PUT** /api/v1/publications | Update publication -*SimulationResourceApi* | [**get_simulation_status**](pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md#get_simulation_status) | **GET** /api/v1/Simulation/{simID}/simulationStatus | Get the status of simulation running -*SimulationResourceApi* | [**start_simulation**](pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md#start_simulation) | **POST** /api/v1/Simulation/{simID}/startSimulation | Start a simulation. -*SimulationResourceApi* | [**stop_simulation**](pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md#stop_simulation) | **POST** /api/v1/Simulation/{simID}/stopSimulation | Stop a simulation. -*SolverResourceApi* | [**get_fv_solver_input_from_sbml**](pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md#get_fv_solver_input_from_sbml) | **POST** /api/v1/solver/getFVSolverInput | Retrieve finite volume input from SBML spatial model. -*SolverResourceApi* | [**get_fv_solver_input_from_vcml**](pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md#get_fv_solver_input_from_vcml) | **POST** /api/v1/solver/getFVSolverInputFromVCML | Retrieve finite volume input from SBML spatial model. -*UsersResourceApi* | [**forgot_legacy_password**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#forgot_legacy_password) | **POST** /api/v1/users/forgotLegacyPassword | The end user has forgotten the legacy password they used for VCell, so they will be emailed it. -*UsersResourceApi* | [**get_guest_legacy_api_token**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#get_guest_legacy_api_token) | **POST** /api/v1/users/guestBearerToken | Method to get legacy tokens for guest users -*UsersResourceApi* | [**get_legacy_api_token**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#get_legacy_api_token) | **POST** /api/v1/users/bearerToken | Get token for legacy API -*UsersResourceApi* | [**get_mapped_user**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#get_mapped_user) | **GET** /api/v1/users/mappedUser | Get mapped VCell identity -*UsersResourceApi* | [**get_me**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#get_me) | **GET** /api/v1/users/me | Get current user -*UsersResourceApi* | [**map_new_user**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#map_new_user) | **POST** /api/v1/users/newUser | create vcell user -*UsersResourceApi* | [**map_user**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#map_user) | **POST** /api/v1/users/mapUser | map vcell user -*UsersResourceApi* | [**process_magic_link**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#process_magic_link) | **GET** /api/v1/users/processMagicLink | Process the magic link and map the user -*UsersResourceApi* | [**request_recovery_email**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#request_recovery_email) | **POST** /api/v1/users/requestRecoveryEmail | request a recovery email to link a VCell account. -*UsersResourceApi* | [**unmap_user**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#unmap_user) | **PUT** /api/v1/users/unmapUser/{userName} | remove vcell identity mapping -*VCImageResourceApi* | [**delete_image_vcml**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#delete_image_vcml) | **DELETE** /api/v1/image/{id} | -*VCImageResourceApi* | [**get_image_summaries**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#get_image_summaries) | **GET** /api/v1/image/summaries | -*VCImageResourceApi* | [**get_image_summary**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#get_image_summary) | **GET** /api/v1/image/summary/{id} | -*VCImageResourceApi* | [**get_image_vcml**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#get_image_vcml) | **GET** /api/v1/image/{id} | -*VCImageResourceApi* | [**save_image_vcml**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#save_image_vcml) | **POST** /api/v1/image | - +| Class | Method | HTTP request | Description | +| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| _AdminResourceApi_ | [**get_usage**](pyvcell/_internal/api/vcell_client/docs/AdminResourceApi.md#get_usage) | **GET** /api/v1/admin/usage | Get usage summary | +| _BioModelResourceApi_ | [**delete_bio_model**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#delete_bio_model) | **DELETE** /api/v1/bioModel/{bioModelID} | Delete the BioModel from VCell's database. | +| _BioModelResourceApi_ | [**get_bio_model**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#get_bio_model) | **GET** /api/v1/bioModel/{bioModelID} | Get BioModel. | +| _BioModelResourceApi_ | [**get_bio_model_summaries**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#get_bio_model_summaries) | **GET** /api/v1/bioModel/summaries | Return BioModel summaries. | +| _BioModelResourceApi_ | [**get_bio_model_summary**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#get_bio_model_summary) | **GET** /api/v1/bioModel/{bioModelID}/summary | All of the text based information about a BioModel (summary, version, publication status, etc...), but not the actual BioModel itself. | +| _BioModelResourceApi_ | [**get_bio_model_vcml**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#get_bio_model_vcml) | **GET** /api/v1/bioModel/{bioModelID}/vcml_download | Get the BioModel in VCML format. | +| _BioModelResourceApi_ | [**save_bio_model**](pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md#save_bio_model) | **POST** /api/v1/bioModel | Save's the given BioModel. Optional parameters of name and simulations to update due to math changes. Returns saved BioModel as VCML. | +| _ExportResourceApi_ | [**export_n5**](pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md#export_n5) | **POST** /api/v1/export/N5 | +| _ExportResourceApi_ | [**export_status**](pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md#export_status) | **GET** /api/v1/export/status | +| _FieldDataResourceApi_ | [**advanced_create**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#advanced_create) | **POST** /api/v1/fieldData/advancedCreate | Create Field Data with granular detail in one request.The following files are accepted: .tif and .zip. | +| _FieldDataResourceApi_ | [**analyze_file**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#analyze_file) | **POST** /api/v1/fieldData/analyzeFile | Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and return field data. Color mapped images not supported (the colors in those images will be interpreted as separate channels). Filenames must be lowercase alphanumeric, and can contain underscores. | +| _FieldDataResourceApi_ | [**copy_models_field_data**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#copy_models_field_data) | **POST** /api/v1/fieldData/copyModelsFieldData | Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. | +| _FieldDataResourceApi_ | [**create_from_file**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#create_from_file) | **POST** /api/v1/fieldData/createFromFile | Submit a .zip or .tif file that converts into field data, with all defaults derived from the file submitted. | +| _FieldDataResourceApi_ | [**create_from_simulation**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#create_from_simulation) | **POST** /api/v1/fieldData/createFromSimulation | Create new field data from existing simulation results. | +| _FieldDataResourceApi_ | [**delete**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#delete) | **DELETE** /api/v1/fieldData/delete/{fieldDataID} | Delete the selected field data. | +| _FieldDataResourceApi_ | [**get_all_ids**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#get_all_ids) | **GET** /api/v1/fieldData/IDs | Get all of the ids used to identify, and retrieve field data. | +| _FieldDataResourceApi_ | [**get_shape_from_id**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#get_shape_from_id) | **GET** /api/v1/fieldData/shape/{fieldDataID} | Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. | +| _FieldDataResourceApi_ | [**save**](pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md#save) | **POST** /api/v1/fieldData/save | Take the generated field data, and save it to the server. User may adjust the analyzed file before uploading to edit defaults. | +| _GeometryResourceApi_ | [**delete_geometry**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#delete_geometry) | **DELETE** /api/v1/geometry/{id} | +| _GeometryResourceApi_ | [**get_geometry_summaries**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#get_geometry_summaries) | **GET** /api/v1/geometry/summaries | +| _GeometryResourceApi_ | [**get_geometry_summary**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#get_geometry_summary) | **GET** /api/v1/geometry/summary/{id} | +| _GeometryResourceApi_ | [**get_geometry_vcml**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#get_geometry_vcml) | **GET** /api/v1/geometry/{id} | +| _GeometryResourceApi_ | [**save_geometry**](pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md#save_geometry) | **POST** /api/v1/geometry | +| _HelloWorldApi_ | [**get_hello_world**](pyvcell/_internal/api/vcell_client/docs/HelloWorldApi.md#get_hello_world) | **GET** /api/v1/helloworld | Get hello world message. | +| _MathModelResourceApi_ | [**delete_math_model**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#delete_math_model) | **DELETE** /api/v1/mathModel/{id} | +| _MathModelResourceApi_ | [**get_summaries**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#get_summaries) | **GET** /api/v1/mathModel/summaries | +| _MathModelResourceApi_ | [**get_summary**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#get_summary) | **GET** /api/v1/mathModel/summary/{id} | +| _MathModelResourceApi_ | [**get_vcml**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#get_vcml) | **GET** /api/v1/mathModel/{id} | +| _MathModelResourceApi_ | [**save_math_model**](pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md#save_math_model) | **POST** /api/v1/mathModel | +| _PublicationResourceApi_ | [**create_publication**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#create_publication) | **POST** /api/v1/publications | Create publication | +| _PublicationResourceApi_ | [**delete_publication**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#delete_publication) | **DELETE** /api/v1/publications/{id} | Delete publication | +| _PublicationResourceApi_ | [**get_publication_by_id**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#get_publication_by_id) | **GET** /api/v1/publications/{id} | Get publication by ID | +| _PublicationResourceApi_ | [**get_publications**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#get_publications) | **GET** /api/v1/publications | Get all publications | +| _PublicationResourceApi_ | [**update_publication**](pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md#update_publication) | **PUT** /api/v1/publications | Update publication | +| _SimulationResourceApi_ | [**get_simulation_status**](pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md#get_simulation_status) | **GET** /api/v1/Simulation/{simID}/simulationStatus | Get the status of simulation running | +| _SimulationResourceApi_ | [**start_simulation**](pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md#start_simulation) | **POST** /api/v1/Simulation/{simID}/startSimulation | Start a simulation. | +| _SimulationResourceApi_ | [**stop_simulation**](pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md#stop_simulation) | **POST** /api/v1/Simulation/{simID}/stopSimulation | Stop a simulation. | +| _SolverResourceApi_ | [**get_fv_solver_input_from_sbml**](pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md#get_fv_solver_input_from_sbml) | **POST** /api/v1/solver/getFVSolverInput | Retrieve finite volume input from SBML spatial model. | +| _SolverResourceApi_ | [**get_fv_solver_input_from_vcml**](pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md#get_fv_solver_input_from_vcml) | **POST** /api/v1/solver/getFVSolverInputFromVCML | Retrieve finite volume input from SBML spatial model. | +| _UsersResourceApi_ | [**forgot_legacy_password**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#forgot_legacy_password) | **POST** /api/v1/users/forgotLegacyPassword | The end user has forgotten the legacy password they used for VCell, so they will be emailed it. | +| _UsersResourceApi_ | [**get_guest_legacy_api_token**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#get_guest_legacy_api_token) | **POST** /api/v1/users/guestBearerToken | Method to get legacy tokens for guest users | +| _UsersResourceApi_ | [**get_legacy_api_token**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#get_legacy_api_token) | **POST** /api/v1/users/bearerToken | Get token for legacy API | +| _UsersResourceApi_ | [**get_mapped_user**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#get_mapped_user) | **GET** /api/v1/users/mappedUser | Get mapped VCell identity | +| _UsersResourceApi_ | [**get_me**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#get_me) | **GET** /api/v1/users/me | Get current user | +| _UsersResourceApi_ | [**map_new_user**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#map_new_user) | **POST** /api/v1/users/newUser | create vcell user | +| _UsersResourceApi_ | [**map_user**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#map_user) | **POST** /api/v1/users/mapUser | map vcell user | +| _UsersResourceApi_ | [**process_magic_link**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#process_magic_link) | **GET** /api/v1/users/processMagicLink | Process the magic link and map the user | +| _UsersResourceApi_ | [**request_recovery_email**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#request_recovery_email) | **POST** /api/v1/users/requestRecoveryEmail | request a recovery email to link a VCell account. | +| _UsersResourceApi_ | [**unmap_user**](pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md#unmap_user) | **PUT** /api/v1/users/unmapUser/{userName} | remove vcell identity mapping | +| _VCImageResourceApi_ | [**delete_image_vcml**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#delete_image_vcml) | **DELETE** /api/v1/image/{id} | +| _VCImageResourceApi_ | [**get_image_summaries**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#get_image_summaries) | **GET** /api/v1/image/summaries | +| _VCImageResourceApi_ | [**get_image_summary**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#get_image_summary) | **GET** /api/v1/image/summary/{id} | +| _VCImageResourceApi_ | [**get_image_vcml**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#get_image_vcml) | **GET** /api/v1/image/{id} | +| _VCImageResourceApi_ | [**save_image_vcml**](pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md#save_image_vcml) | **POST** /api/v1/image | ## Documentation For Models - - [AccesTokenRepresentationRecord](pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md) - - [AnalyticCurve](pyvcell/_internal/api/vcell_client/docs/AnalyticCurve.md) - - [AnnotatedFunctionDTO](pyvcell/_internal/api/vcell_client/docs/AnnotatedFunctionDTO.md) - - [ApplicationInfo](pyvcell/_internal/api/vcell_client/docs/ApplicationInfo.md) - - [BatchSystemType](pyvcell/_internal/api/vcell_client/docs/BatchSystemType.md) - - [BioModel](pyvcell/_internal/api/vcell_client/docs/BioModel.md) - - [BioModelChildSummary](pyvcell/_internal/api/vcell_client/docs/BioModelChildSummary.md) - - [BioModelSummary](pyvcell/_internal/api/vcell_client/docs/BioModelSummary.md) - - [BiomodelRef](pyvcell/_internal/api/vcell_client/docs/BiomodelRef.md) - - [CompositeCurve](pyvcell/_internal/api/vcell_client/docs/CompositeCurve.md) - - [ControlPointCurve](pyvcell/_internal/api/vcell_client/docs/ControlPointCurve.md) - - [Coordinate](pyvcell/_internal/api/vcell_client/docs/Coordinate.md) - - [Curve](pyvcell/_internal/api/vcell_client/docs/Curve.md) - - [CurveSelectionInfo](pyvcell/_internal/api/vcell_client/docs/CurveSelectionInfo.md) - - [DataIdentifier](pyvcell/_internal/api/vcell_client/docs/DataIdentifier.md) - - [DetailedState](pyvcell/_internal/api/vcell_client/docs/DetailedState.md) - - [Domain](pyvcell/_internal/api/vcell_client/docs/Domain.md) - - [ExportEvent](pyvcell/_internal/api/vcell_client/docs/ExportEvent.md) - - [ExportProgressType](pyvcell/_internal/api/vcell_client/docs/ExportProgressType.md) - - [ExportableDataType](pyvcell/_internal/api/vcell_client/docs/ExportableDataType.md) - - [Extent](pyvcell/_internal/api/vcell_client/docs/Extent.md) - - [ExternalDataIdentifier](pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md) - - [FieldData](pyvcell/_internal/api/vcell_client/docs/FieldData.md) - - [FieldDataReference](pyvcell/_internal/api/vcell_client/docs/FieldDataReference.md) - - [FieldDataSavedResults](pyvcell/_internal/api/vcell_client/docs/FieldDataSavedResults.md) - - [FieldDataShape](pyvcell/_internal/api/vcell_client/docs/FieldDataShape.md) - - [FunctionCategory](pyvcell/_internal/api/vcell_client/docs/FunctionCategory.md) - - [GIFImage](pyvcell/_internal/api/vcell_client/docs/GIFImage.md) - - [GeometryMode](pyvcell/_internal/api/vcell_client/docs/GeometryMode.md) - - [GeometrySpecDTO](pyvcell/_internal/api/vcell_client/docs/GeometrySpecDTO.md) - - [GeometrySummary](pyvcell/_internal/api/vcell_client/docs/GeometrySummary.md) - - [GroupAccess](pyvcell/_internal/api/vcell_client/docs/GroupAccess.md) - - [GroupAccessAll](pyvcell/_internal/api/vcell_client/docs/GroupAccessAll.md) - - [GroupAccessNone](pyvcell/_internal/api/vcell_client/docs/GroupAccessNone.md) - - [GroupAccessSome](pyvcell/_internal/api/vcell_client/docs/GroupAccessSome.md) - - [HelloWorldMessage](pyvcell/_internal/api/vcell_client/docs/HelloWorldMessage.md) - - [HtcJobID](pyvcell/_internal/api/vcell_client/docs/HtcJobID.md) - - [HumanReadableExportData](pyvcell/_internal/api/vcell_client/docs/HumanReadableExportData.md) - - [ISize](pyvcell/_internal/api/vcell_client/docs/ISize.md) - - [Identity](pyvcell/_internal/api/vcell_client/docs/Identity.md) - - [MathModelChildSummary](pyvcell/_internal/api/vcell_client/docs/MathModelChildSummary.md) - - [MathModelSummary](pyvcell/_internal/api/vcell_client/docs/MathModelSummary.md) - - [MathType](pyvcell/_internal/api/vcell_client/docs/MathType.md) - - [MathmodelRef](pyvcell/_internal/api/vcell_client/docs/MathmodelRef.md) - - [ModelType](pyvcell/_internal/api/vcell_client/docs/ModelType.md) - - [N5ExportRequest](pyvcell/_internal/api/vcell_client/docs/N5ExportRequest.md) - - [Origin](pyvcell/_internal/api/vcell_client/docs/Origin.md) - - [Publication](pyvcell/_internal/api/vcell_client/docs/Publication.md) - - [PublicationInfo](pyvcell/_internal/api/vcell_client/docs/PublicationInfo.md) - - [SPECIALCLAIM](pyvcell/_internal/api/vcell_client/docs/SPECIALCLAIM.md) - - [SampledCurve](pyvcell/_internal/api/vcell_client/docs/SampledCurve.md) - - [SchedulerStatus](pyvcell/_internal/api/vcell_client/docs/SchedulerStatus.md) - - [SimulationExecutionStatusRecord](pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md) - - [SimulationJobStatusRecord](pyvcell/_internal/api/vcell_client/docs/SimulationJobStatusRecord.md) - - [SimulationMessage](pyvcell/_internal/api/vcell_client/docs/SimulationMessage.md) - - [SimulationQueueEntryStatusRecord](pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md) - - [SimulationQueueID](pyvcell/_internal/api/vcell_client/docs/SimulationQueueID.md) - - [SimulationStatusPersistentRecord](pyvcell/_internal/api/vcell_client/docs/SimulationStatusPersistentRecord.md) - - [SourceModel](pyvcell/_internal/api/vcell_client/docs/SourceModel.md) - - [SpatialSelection](pyvcell/_internal/api/vcell_client/docs/SpatialSelection.md) - - [SpatialSelectionContour](pyvcell/_internal/api/vcell_client/docs/SpatialSelectionContour.md) - - [SpatialSelectionMembrane](pyvcell/_internal/api/vcell_client/docs/SpatialSelectionMembrane.md) - - [SpatialSelectionVolume](pyvcell/_internal/api/vcell_client/docs/SpatialSelectionVolume.md) - - [Spline](pyvcell/_internal/api/vcell_client/docs/Spline.md) - - [StandardExportInfo](pyvcell/_internal/api/vcell_client/docs/StandardExportInfo.md) - - [Status](pyvcell/_internal/api/vcell_client/docs/Status.md) - - [StatusMessage](pyvcell/_internal/api/vcell_client/docs/StatusMessage.md) - - [TimeMode](pyvcell/_internal/api/vcell_client/docs/TimeMode.md) - - [TimeSpecs](pyvcell/_internal/api/vcell_client/docs/TimeSpecs.md) - - [User](pyvcell/_internal/api/vcell_client/docs/User.md) - - [UserIdentityJSONSafe](pyvcell/_internal/api/vcell_client/docs/UserIdentityJSONSafe.md) - - [UserLoginInfoForMapping](pyvcell/_internal/api/vcell_client/docs/UserLoginInfoForMapping.md) - - [UserRegistrationInfo](pyvcell/_internal/api/vcell_client/docs/UserRegistrationInfo.md) - - [VCDocumentType](pyvcell/_internal/api/vcell_client/docs/VCDocumentType.md) - - [VCImageSummary](pyvcell/_internal/api/vcell_client/docs/VCImageSummary.md) - - [VCSimulationIdentifier](pyvcell/_internal/api/vcell_client/docs/VCSimulationIdentifier.md) - - [VCellHTTPError](pyvcell/_internal/api/vcell_client/docs/VCellHTTPError.md) - - [VCellSite](pyvcell/_internal/api/vcell_client/docs/VCellSite.md) - - [VCellSoftwareVersion](pyvcell/_internal/api/vcell_client/docs/VCellSoftwareVersion.md) - - [VariableDomain](pyvcell/_internal/api/vcell_client/docs/VariableDomain.md) - - [VariableMode](pyvcell/_internal/api/vcell_client/docs/VariableMode.md) - - [VariableSpecs](pyvcell/_internal/api/vcell_client/docs/VariableSpecs.md) - - [VariableType](pyvcell/_internal/api/vcell_client/docs/VariableType.md) - - [Version](pyvcell/_internal/api/vcell_client/docs/Version.md) - - [VersionFlag](pyvcell/_internal/api/vcell_client/docs/VersionFlag.md) - +- [AccesTokenRepresentationRecord](pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md) +- [AnalyticCurve](pyvcell/_internal/api/vcell_client/docs/AnalyticCurve.md) +- [AnnotatedFunctionDTO](pyvcell/_internal/api/vcell_client/docs/AnnotatedFunctionDTO.md) +- [ApplicationInfo](pyvcell/_internal/api/vcell_client/docs/ApplicationInfo.md) +- [BatchSystemType](pyvcell/_internal/api/vcell_client/docs/BatchSystemType.md) +- [BioModel](pyvcell/_internal/api/vcell_client/docs/BioModel.md) +- [BioModelChildSummary](pyvcell/_internal/api/vcell_client/docs/BioModelChildSummary.md) +- [BioModelSummary](pyvcell/_internal/api/vcell_client/docs/BioModelSummary.md) +- [BiomodelRef](pyvcell/_internal/api/vcell_client/docs/BiomodelRef.md) +- [CompositeCurve](pyvcell/_internal/api/vcell_client/docs/CompositeCurve.md) +- [ControlPointCurve](pyvcell/_internal/api/vcell_client/docs/ControlPointCurve.md) +- [Coordinate](pyvcell/_internal/api/vcell_client/docs/Coordinate.md) +- [Curve](pyvcell/_internal/api/vcell_client/docs/Curve.md) +- [CurveSelectionInfo](pyvcell/_internal/api/vcell_client/docs/CurveSelectionInfo.md) +- [DataIdentifier](pyvcell/_internal/api/vcell_client/docs/DataIdentifier.md) +- [DetailedState](pyvcell/_internal/api/vcell_client/docs/DetailedState.md) +- [Domain](pyvcell/_internal/api/vcell_client/docs/Domain.md) +- [ExportEvent](pyvcell/_internal/api/vcell_client/docs/ExportEvent.md) +- [ExportProgressType](pyvcell/_internal/api/vcell_client/docs/ExportProgressType.md) +- [ExportableDataType](pyvcell/_internal/api/vcell_client/docs/ExportableDataType.md) +- [Extent](pyvcell/_internal/api/vcell_client/docs/Extent.md) +- [ExternalDataIdentifier](pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md) +- [FieldData](pyvcell/_internal/api/vcell_client/docs/FieldData.md) +- [FieldDataReference](pyvcell/_internal/api/vcell_client/docs/FieldDataReference.md) +- [FieldDataSavedResults](pyvcell/_internal/api/vcell_client/docs/FieldDataSavedResults.md) +- [FieldDataShape](pyvcell/_internal/api/vcell_client/docs/FieldDataShape.md) +- [FunctionCategory](pyvcell/_internal/api/vcell_client/docs/FunctionCategory.md) +- [GIFImage](pyvcell/_internal/api/vcell_client/docs/GIFImage.md) +- [GeometryMode](pyvcell/_internal/api/vcell_client/docs/GeometryMode.md) +- [GeometrySpecDTO](pyvcell/_internal/api/vcell_client/docs/GeometrySpecDTO.md) +- [GeometrySummary](pyvcell/_internal/api/vcell_client/docs/GeometrySummary.md) +- [GroupAccess](pyvcell/_internal/api/vcell_client/docs/GroupAccess.md) +- [GroupAccessAll](pyvcell/_internal/api/vcell_client/docs/GroupAccessAll.md) +- [GroupAccessNone](pyvcell/_internal/api/vcell_client/docs/GroupAccessNone.md) +- [GroupAccessSome](pyvcell/_internal/api/vcell_client/docs/GroupAccessSome.md) +- [HelloWorldMessage](pyvcell/_internal/api/vcell_client/docs/HelloWorldMessage.md) +- [HtcJobID](pyvcell/_internal/api/vcell_client/docs/HtcJobID.md) +- [HumanReadableExportData](pyvcell/_internal/api/vcell_client/docs/HumanReadableExportData.md) +- [ISize](pyvcell/_internal/api/vcell_client/docs/ISize.md) +- [Identity](pyvcell/_internal/api/vcell_client/docs/Identity.md) +- [MathModelChildSummary](pyvcell/_internal/api/vcell_client/docs/MathModelChildSummary.md) +- [MathModelSummary](pyvcell/_internal/api/vcell_client/docs/MathModelSummary.md) +- [MathType](pyvcell/_internal/api/vcell_client/docs/MathType.md) +- [MathmodelRef](pyvcell/_internal/api/vcell_client/docs/MathmodelRef.md) +- [ModelType](pyvcell/_internal/api/vcell_client/docs/ModelType.md) +- [N5ExportRequest](pyvcell/_internal/api/vcell_client/docs/N5ExportRequest.md) +- [Origin](pyvcell/_internal/api/vcell_client/docs/Origin.md) +- [Publication](pyvcell/_internal/api/vcell_client/docs/Publication.md) +- [PublicationInfo](pyvcell/_internal/api/vcell_client/docs/PublicationInfo.md) +- [SPECIALCLAIM](pyvcell/_internal/api/vcell_client/docs/SPECIALCLAIM.md) +- [SampledCurve](pyvcell/_internal/api/vcell_client/docs/SampledCurve.md) +- [SchedulerStatus](pyvcell/_internal/api/vcell_client/docs/SchedulerStatus.md) +- [SimulationExecutionStatusRecord](pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md) +- [SimulationJobStatusRecord](pyvcell/_internal/api/vcell_client/docs/SimulationJobStatusRecord.md) +- [SimulationMessage](pyvcell/_internal/api/vcell_client/docs/SimulationMessage.md) +- [SimulationQueueEntryStatusRecord](pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md) +- [SimulationQueueID](pyvcell/_internal/api/vcell_client/docs/SimulationQueueID.md) +- [SimulationStatusPersistentRecord](pyvcell/_internal/api/vcell_client/docs/SimulationStatusPersistentRecord.md) +- [SourceModel](pyvcell/_internal/api/vcell_client/docs/SourceModel.md) +- [SpatialSelection](pyvcell/_internal/api/vcell_client/docs/SpatialSelection.md) +- [SpatialSelectionContour](pyvcell/_internal/api/vcell_client/docs/SpatialSelectionContour.md) +- [SpatialSelectionMembrane](pyvcell/_internal/api/vcell_client/docs/SpatialSelectionMembrane.md) +- [SpatialSelectionVolume](pyvcell/_internal/api/vcell_client/docs/SpatialSelectionVolume.md) +- [Spline](pyvcell/_internal/api/vcell_client/docs/Spline.md) +- [StandardExportInfo](pyvcell/_internal/api/vcell_client/docs/StandardExportInfo.md) +- [Status](pyvcell/_internal/api/vcell_client/docs/Status.md) +- [StatusMessage](pyvcell/_internal/api/vcell_client/docs/StatusMessage.md) +- [TimeMode](pyvcell/_internal/api/vcell_client/docs/TimeMode.md) +- [TimeSpecs](pyvcell/_internal/api/vcell_client/docs/TimeSpecs.md) +- [User](pyvcell/_internal/api/vcell_client/docs/User.md) +- [UserIdentityJSONSafe](pyvcell/_internal/api/vcell_client/docs/UserIdentityJSONSafe.md) +- [UserLoginInfoForMapping](pyvcell/_internal/api/vcell_client/docs/UserLoginInfoForMapping.md) +- [UserRegistrationInfo](pyvcell/_internal/api/vcell_client/docs/UserRegistrationInfo.md) +- [VCDocumentType](pyvcell/_internal/api/vcell_client/docs/VCDocumentType.md) +- [VCImageSummary](pyvcell/_internal/api/vcell_client/docs/VCImageSummary.md) +- [VCSimulationIdentifier](pyvcell/_internal/api/vcell_client/docs/VCSimulationIdentifier.md) +- [VCellHTTPError](pyvcell/_internal/api/vcell_client/docs/VCellHTTPError.md) +- [VCellSite](pyvcell/_internal/api/vcell_client/docs/VCellSite.md) +- [VCellSoftwareVersion](pyvcell/_internal/api/vcell_client/docs/VCellSoftwareVersion.md) +- [VariableDomain](pyvcell/_internal/api/vcell_client/docs/VariableDomain.md) +- [VariableMode](pyvcell/_internal/api/vcell_client/docs/VariableMode.md) +- [VariableSpecs](pyvcell/_internal/api/vcell_client/docs/VariableSpecs.md) +- [VariableType](pyvcell/_internal/api/vcell_client/docs/VariableType.md) +- [Version](pyvcell/_internal/api/vcell_client/docs/Version.md) +- [VersionFlag](pyvcell/_internal/api/vcell_client/docs/VersionFlag.md) -## Documentation For Authorization +## Documentation For Authorization Authentication schemes defined for the API: -### openId - +### openId ## Author vcell_support@uchc.com - - diff --git a/scripts/openapi.yaml b/scripts/openapi.yaml index 0c7df40..5ace8ec 100644 --- a/scripts/openapi.yaml +++ b/scripts/openapi.yaml @@ -13,68 +13,68 @@ info: url: http://opensource.org/licenses/MIT version: 1.0.1 servers: -- url: https://vcell.cam.uchc.edu + - url: https://vcell.cam.uchc.edu paths: /api/v1/Simulation/{simID}/simulationStatus: get: tags: - - Simulation Resource + - Simulation Resource summary: Get the status of simulation running operationId: getSimulationStatus parameters: - - name: simID - in: path - required: true - schema: - type: string - - name: bioModelID - in: query - schema: - type: string - - name: mathModelID - in: query - schema: - type: string + - name: simID + in: path + required: true + schema: + type: string + - name: bioModelID + in: query + schema: + type: string + - name: mathModelID + in: query + schema: + type: string responses: "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/SimulationStatusPersistentRecord' + $ref: "#/components/schemas/SimulationStatusPersistentRecord" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/Simulation/{simID}/startSimulation: post: tags: - - Simulation Resource + - Simulation Resource summary: Start a simulation. operationId: startSimulation parameters: - - name: simID - in: path - required: true - schema: - type: string + - name: simID + in: path + required: true + schema: + type: string responses: "200": description: OK @@ -83,40 +83,40 @@ paths: schema: type: array items: - $ref: '#/components/schemas/StatusMessage' + $ref: "#/components/schemas/StatusMessage" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/Simulation/{simID}/stopSimulation: post: tags: - - Simulation Resource + - Simulation Resource summary: Stop a simulation. operationId: stopSimulation parameters: - - name: simID - in: path - required: true - schema: - type: string + - name: simID + in: path + required: true + schema: + type: string responses: "200": description: OK @@ -125,32 +125,32 @@ paths: schema: type: array items: - $ref: '#/components/schemas/StatusMessage' + $ref: "#/components/schemas/StatusMessage" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/admin/usage: get: tags: - - Admin Resource + - Admin Resource summary: Get usage summary operationId: getUsage responses: @@ -166,47 +166,49 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/bioModel: post: tags: - - Bio Model Resource - summary: Save's the given BioModel. Optional parameters of name and simulations + - Bio Model Resource + summary: + Save's the given BioModel. Optional parameters of name and simulations to update due to math changes. Returns saved BioModel as VCML. operationId: saveBioModel parameters: - - name: newName - in: query - description: Name to save new BioModel under. Leave blank if re-saving existing - BioModel. - required: false - schema: - type: string - allowEmptyValue: true - - name: simsRequiringUpdates - in: query - description: The name of simulations that will be prepared for future execution. - required: false - schema: - type: array - items: + - name: newName + in: query + description: + Name to save new BioModel under. Leave blank if re-saving existing + BioModel. + required: false + schema: type: string - allowEmptyValue: true + allowEmptyValue: true + - name: simsRequiringUpdates + in: query + description: The name of simulations that will be prepared for future execution. + required: false + schema: + type: array + items: + type: string + allowEmptyValue: true requestBody: description: BioModelVCML which will be saved. content: @@ -226,7 +228,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed "422": @@ -234,30 +236,31 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/bioModel/summaries: get: tags: - - Bio Model Resource + - Bio Model Resource summary: Return BioModel summaries. operationId: getBioModelSummaries parameters: - - name: includePublicAndShared - in: query - description: Includes BioModel summaries that are public or shared with requester. - Default is true. - required: false - schema: - type: boolean + - name: includePublicAndShared + in: query + description: + Includes BioModel summaries that are public or shared with requester. + Default is true. + required: false + schema: + type: boolean responses: "200": description: OK @@ -266,61 +269,61 @@ paths: schema: type: array items: - $ref: '#/components/schemas/BioModelSummary' + $ref: "#/components/schemas/BioModelSummary" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/bioModel/{bioModelID}: get: tags: - - Bio Model Resource + - Bio Model Resource summary: Get BioModel. operationId: getBioModel parameters: - - name: bioModelID - in: path - required: true - schema: - type: string + - name: bioModelID + in: path + required: true + schema: + type: string responses: "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/BioModel' + $ref: "#/components/schemas/BioModel" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "404": description: Not found content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" delete: tags: - - Bio Model Resource + - Bio Model Resource summary: Delete the BioModel from VCell's database. operationId: deleteBioModel parameters: - - name: bioModelID - in: path - required: true - schema: - type: string + - name: bioModelID + in: path + required: true + schema: + type: string responses: "204": description: No Content @@ -329,63 +332,64 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/bioModel/{bioModelID}/summary: get: tags: - - Bio Model Resource - summary: "All of the text based information about a BioModel (summary, version,\ + - Bio Model Resource + summary: + "All of the text based information about a BioModel (summary, version,\ \ publication status, etc...), but not the actual BioModel itself." operationId: getBioModelSummary parameters: - - name: bioModelID - in: path - required: true - schema: - type: string + - name: bioModelID + in: path + required: true + schema: + type: string responses: "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/BioModelSummary' + $ref: "#/components/schemas/BioModelSummary" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/bioModel/{bioModelID}/vcml_download: get: tags: - - Bio Model Resource + - Bio Model Resource summary: Get the BioModel in VCML format. operationId: getBioModelVCML parameters: - - name: bioModelID - in: path - required: true - schema: - type: string + - name: bioModelID + in: path + required: true + schema: + type: string responses: "200": description: OK @@ -398,24 +402,25 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "404": description: Not found content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/export/N5: post: tags: - - Export Resource - description: "Create an N5 (ImageJ compatible) export. The request must contain\ + - Export Resource + description: + "Create an N5 (ImageJ compatible) export. The request must contain\ \ the standard export information, exportable data type, dataset name, and\ \ sub-volume specifications." operationId: exportN5 @@ -423,7 +428,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/N5ExportRequest' + $ref: "#/components/schemas/N5ExportRequest" responses: "200": description: OK @@ -437,13 +442,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed "422": @@ -451,29 +456,30 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/export/status: get: tags: - - Export Resource - description: Get the status of your export jobs past the timestamp (Unix epoch + - Export Resource + description: + Get the status of your export jobs past the timestamp (Unix epoch in seconds). operationId: exportStatus parameters: - - name: timestamp - in: query - schema: - format: int64 - type: integer + - name: timestamp + in: query + schema: + format: int64 + type: integer responses: "200": description: OK @@ -482,13 +488,13 @@ paths: schema: type: array items: - $ref: '#/components/schemas/ExportEvent' + $ref: "#/components/schemas/ExportEvent" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed "500": @@ -496,14 +502,14 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/fieldData/IDs: get: tags: - - Field Data Resource + - Field Data Resource summary: "Get all of the ids used to identify, and retrieve field data." operationId: getAllIDs responses: @@ -514,33 +520,34 @@ paths: schema: type: array items: - $ref: '#/components/schemas/FieldDataReference' + $ref: "#/components/schemas/FieldDataReference" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/fieldData/advancedCreate: post: tags: - - Field Data Resource - summary: "Create Field Data with granular detail in one request.The following\ + - Field Data Resource + summary: + "Create Field Data with granular detail in one request.The following\ \ files are accepted: .tif and .zip." operationId: advancedCreate requestBody: @@ -555,9 +562,9 @@ paths: fileName: type: string extent: - $ref: '#/components/schemas/Extent' + $ref: "#/components/schemas/Extent" iSize: - $ref: '#/components/schemas/ISize' + $ref: "#/components/schemas/ISize" channelNames: type: array items: @@ -570,7 +577,7 @@ paths: annotation: type: string origin: - $ref: '#/components/schemas/Origin' + $ref: "#/components/schemas/Origin" encoding: extent: contentType: application/json @@ -594,13 +601,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/FieldDataSavedResults' + $ref: "#/components/schemas/FieldDataSavedResults" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed "422": @@ -608,21 +615,22 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/fieldData/analyzeFile: post: tags: - - Field Data Resource - summary: "Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and\ + - Field Data Resource + summary: + "Analyze uploaded image file (Tiff, Zip, and Non-GPL BioFormats) and\ \ return field data. Color mapped images not supported (the colors in those\ \ images will be interpreted as separate channels). Filenames must be lowercase\ \ alphanumeric, and can contain underscores." @@ -644,13 +652,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/FieldData' + $ref: "#/components/schemas/FieldData" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed "422": @@ -658,28 +666,29 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/fieldData/copyModelsFieldData: post: tags: - - Field Data Resource - summary: "Copy all existing field data from a BioModel/MathModel that you have\ + - Field Data Resource + summary: + "Copy all existing field data from a BioModel/MathModel that you have\ \ access to, but don't own." operationId: copyModelsFieldData requestBody: content: application/json: schema: - $ref: '#/components/schemas/SourceModel' + $ref: "#/components/schemas/SourceModel" responses: "200": description: OK @@ -688,39 +697,40 @@ paths: schema: type: object additionalProperties: - $ref: '#/components/schemas/ExternalDataIdentifier' + $ref: "#/components/schemas/ExternalDataIdentifier" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "422": description: Unprocessable content submitted content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/fieldData/createFromFile: post: tags: - - Field Data Resource - summary: "Submit a .zip or .tif file that converts into field data, with all\ + - Field Data Resource + summary: + "Submit a .zip or .tif file that converts into field data, with all\ \ defaults derived from the file submitted." operationId: createFromFile requestBody: @@ -743,13 +753,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/FieldDataSavedResults' + $ref: "#/components/schemas/FieldDataSavedResults" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed "422": @@ -757,20 +767,20 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/fieldData/createFromSimulation: post: tags: - - Field Data Resource + - Field Data Resource summary: Create new field data from existing simulation results. operationId: createFromSimulation requestBody: @@ -794,34 +804,34 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/fieldData/delete/{fieldDataID}: delete: tags: - - Field Data Resource + - Field Data Resource summary: Delete the selected field data. operationId: delete parameters: - - name: fieldDataID - in: path - required: true - schema: - type: string + - name: fieldDataID + in: path + required: true + schema: + type: string responses: "204": description: No Content @@ -830,47 +840,48 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/fieldData/save: post: tags: - - Field Data Resource - summary: "Take the generated field data, and save it to the server. User may\ + - Field Data Resource + summary: + "Take the generated field data, and save it to the server. User may\ \ adjust the analyzed file before uploading to edit defaults." operationId: save requestBody: content: application/json: schema: - $ref: '#/components/schemas/FieldData' + $ref: "#/components/schemas/FieldData" responses: "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/FieldDataSavedResults' + $ref: "#/components/schemas/FieldDataSavedResults" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed "422": @@ -878,77 +889,79 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/fieldData/shape/{fieldDataID}: get: tags: - - Field Data Resource - summary: "Get the shape of the field data. That is it's size, origin, extent,\ + - Field Data Resource + summary: + "Get the shape of the field data. That is it's size, origin, extent,\ \ times, and data identifiers." operationId: getShapeFromID parameters: - - name: fieldDataID - in: path - required: true - schema: - type: string + - name: fieldDataID + in: path + required: true + schema: + type: string responses: "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/FieldDataShape' + $ref: "#/components/schemas/FieldDataShape" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "404": description: Not found content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/geometry: post: tags: - - Geometry Resource + - Geometry Resource description: Save's VCML with as the root element. operationId: saveGeometry parameters: - - name: newName - in: query - description: Name to save new Geometry under. Leave blank if re-saving existing - Geometry. - required: false - schema: - type: string + - name: newName + in: query + description: + Name to save new Geometry under. Leave blank if re-saving existing + Geometry. + required: false + schema: + type: string requestBody: content: application/xml: @@ -967,7 +980,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed "422": @@ -975,30 +988,31 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/geometry/summaries: get: tags: - - Geometry Resource + - Geometry Resource description: Return Geometry summaries. operationId: getGeometrySummaries parameters: - - name: includePublicAndShared - in: query - description: Include Geometry summaries that are public and shared with the - requester. Default is true. - required: false - schema: - type: boolean + - name: includePublicAndShared + in: query + description: + Include Geometry summaries that are public and shared with the + requester. Default is true. + required: false + schema: + type: boolean responses: "200": description: OK @@ -1007,63 +1021,64 @@ paths: schema: type: array items: - $ref: '#/components/schemas/GeometrySummary' + $ref: "#/components/schemas/GeometrySummary" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/geometry/summary/{id}: get: tags: - - Geometry Resource - description: "All of the text based information about a Geometry (dimensions,\ + - Geometry Resource + description: + "All of the text based information about a Geometry (dimensions,\ \ extent, origin, etc...), but not the actual Geometry itself." operationId: getGeometrySummary parameters: - - name: id - in: path - required: true - schema: - type: string + - name: id + in: path + required: true + schema: + type: string responses: "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/GeometrySummary' + $ref: "#/components/schemas/GeometrySummary" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "404": description: Not found content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/geometry/{id}: get: tags: - - Geometry Resource + - Geometry Resource description: Returns as root element in VCML format. operationId: getGeometryVCML parameters: - - name: id - in: path - required: true - schema: - type: string + - name: id + in: path + required: true + schema: + type: string responses: "200": description: OK @@ -1076,30 +1091,30 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "404": description: Not found content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" delete: tags: - - Geometry Resource + - Geometry Resource description: Remove specific Geometry. operationId: deleteGeometry parameters: - - name: id - in: path - required: true - schema: - type: string + - name: id + in: path + required: true + schema: + type: string responses: "204": description: No Content @@ -1108,29 +1123,29 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "404": description: Not found content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/helloworld: get: tags: - - Hello World + - Hello World summary: Get hello world message. operationId: getHelloWorld responses: @@ -1139,27 +1154,28 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/HelloWorldMessage' + $ref: "#/components/schemas/HelloWorldMessage" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/image: post: tags: - - VC Image Resource + - VC Image Resource description: Save the VCML representation of an image. operationId: saveImageVCML parameters: - - name: name - in: query - description: Name to save new ImageVCML under. Leave blank if re-saving existing - ImageVCML. - required: false - schema: - type: string + - name: name + in: query + description: + Name to save new ImageVCML under. Leave blank if re-saving existing + ImageVCML. + required: false + schema: + type: string requestBody: content: application/json: @@ -1178,33 +1194,34 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "422": description: Unprocessable content submitted content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/image/summaries: get: tags: - - VC Image Resource + - VC Image Resource description: Return Image summaries. operationId: getImageSummaries parameters: - - name: includePublicAndShared - in: query - description: Include Image summaries that are public and shared with the requester. - Default is true. - required: false - schema: - type: boolean + - name: includePublicAndShared + in: query + description: + Include Image summaries that are public and shared with the requester. + Default is true. + required: false + schema: + type: boolean responses: "200": description: OK @@ -1213,63 +1230,64 @@ paths: schema: type: array items: - $ref: '#/components/schemas/VCImageSummary' + $ref: "#/components/schemas/VCImageSummary" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/image/summary/{id}: get: tags: - - VC Image Resource - description: "All of the miscellaneous information about an Image (Extent, ISize,\ + - VC Image Resource + description: + "All of the miscellaneous information about an Image (Extent, ISize,\ \ preview, etc...), but not the actual Image itself." operationId: getImageSummary parameters: - - name: id - in: path - required: true - schema: - type: string + - name: id + in: path + required: true + schema: + type: string responses: "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/VCImageSummary' + $ref: "#/components/schemas/VCImageSummary" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "404": description: Not found content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/image/{id}: get: tags: - - VC Image Resource + - VC Image Resource description: Get specific image VCML. operationId: getImageVCML parameters: - - name: id - in: path - required: true - schema: - type: string + - name: id + in: path + required: true + schema: + type: string responses: "200": description: OK @@ -1282,36 +1300,36 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "404": description: Not found content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "422": description: Unprocessable content submitted content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" delete: tags: - - VC Image Resource + - VC Image Resource description: Remove specific image VCML. operationId: deleteImageVCML parameters: - - name: id - in: path - required: true - schema: - type: string + - name: id + in: path + required: true + schema: + type: string responses: "204": description: No Content @@ -1320,46 +1338,47 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "404": description: Not found content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/mathModel: post: tags: - - Math Model Resource + - Math Model Resource operationId: saveMathModel parameters: - - name: newName - in: query - description: Name to save new MathModel under. Leave blank if re-saving existing - MathModel. - required: false - schema: - type: string - - name: simNames - in: query - description: The name of simulations that will be prepared for future execution. - required: false - schema: - type: array - items: + - name: newName + in: query + description: + Name to save new MathModel under. Leave blank if re-saving existing + MathModel. + required: false + schema: type: string + - name: simNames + in: query + description: The name of simulations that will be prepared for future execution. + required: false + schema: + type: array + items: + type: string requestBody: content: application/xml: @@ -1378,7 +1397,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed "422": @@ -1386,30 +1405,31 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/mathModel/summaries: get: tags: - - Math Model Resource + - Math Model Resource description: Return MathModel summaries. operationId: getSummaries parameters: - - name: includePublicAndShared - in: query - description: Include MathModel summaries that are public and shared with the - requester. Default is true. - required: false - schema: - type: boolean + - name: includePublicAndShared + in: query + description: + Include MathModel summaries that are public and shared with the + requester. Default is true. + required: false + schema: + type: boolean responses: "200": description: OK @@ -1418,63 +1438,64 @@ paths: schema: type: array items: - $ref: '#/components/schemas/MathModelSummary' + $ref: "#/components/schemas/MathModelSummary" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/mathModel/summary/{id}: get: tags: - - Math Model Resource - description: "All of the text based information about a MathModel (summary,\ + - Math Model Resource + description: + "All of the text based information about a MathModel (summary,\ \ version, publication status, etc...), but not the actual MathModel itself." operationId: getSummary parameters: - - name: id - in: path - required: true - schema: - type: string + - name: id + in: path + required: true + schema: + type: string responses: "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/MathModelSummary' + $ref: "#/components/schemas/MathModelSummary" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "404": description: Not found content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/mathModel/{id}: get: tags: - - Math Model Resource + - Math Model Resource description: Returns MathModel in VCML format. operationId: getVCML parameters: - - name: id - in: path - required: true - schema: - type: string + - name: id + in: path + required: true + schema: + type: string responses: "200": description: OK @@ -1487,30 +1508,30 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "404": description: Not found content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" delete: tags: - - Math Model Resource + - Math Model Resource description: Remove specific Math Model. operationId: deleteMathModel parameters: - - name: id - in: path - required: true - schema: - type: string + - name: id + in: path + required: true + schema: + type: string responses: "204": description: No Content @@ -1519,29 +1540,29 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "404": description: Not found content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/publications: get: tags: - - Publication Resource + - Publication Resource summary: Get all publications operationId: getPublications responses: @@ -1552,61 +1573,61 @@ paths: schema: type: array items: - $ref: '#/components/schemas/Publication' + $ref: "#/components/schemas/Publication" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" put: tags: - - Publication Resource + - Publication Resource summary: Update publication operationId: updatePublication requestBody: content: application/json: schema: - $ref: '#/components/schemas/Publication' + $ref: "#/components/schemas/Publication" responses: "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/Publication' + $ref: "#/components/schemas/Publication" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user post: tags: - - Publication Resource + - Publication Resource summary: Create publication operationId: createPublication requestBody: content: application/json: schema: - $ref: '#/components/schemas/Publication' + $ref: "#/components/schemas/Publication" responses: "200": description: OK @@ -1620,60 +1641,60 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/publications/{id}: get: tags: - - Publication Resource + - Publication Resource summary: Get publication by ID operationId: getPublicationById parameters: - - name: id - in: path - required: true - schema: - format: int64 - type: integer + - name: id + in: path + required: true + schema: + format: int64 + type: integer responses: "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/Publication' + $ref: "#/components/schemas/Publication" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" delete: tags: - - Publication Resource + - Publication Resource summary: Delete publication operationId: deletePublication parameters: - - name: id - in: path - required: true - schema: - format: int64 - type: integer + - name: id + in: path + required: true + schema: + format: int64 + type: integer responses: "204": description: No Content @@ -1682,32 +1703,32 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "404": description: Not found content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/solver/getFVSolverInput: post: tags: - - Solver Resource + - Solver Resource summary: Retrieve finite volume input from SBML spatial model. operationId: getFVSolverInputFromSBML requestBody: @@ -1740,11 +1761,11 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/solver/getFVSolverInputFromVCML: post: tags: - - Solver Resource + - Solver Resource summary: Retrieve finite volume input from SBML spatial model. operationId: getFVSolverInputFromVCML requestBody: @@ -1771,11 +1792,11 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/users/bearerToken: post: tags: - - Users Resource + - Users Resource summary: Get token for legacy API operationId: getLegacyApiToken responses: @@ -1784,13 +1805,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AccesTokenRepresentationRecord' + $ref: "#/components/schemas/AccesTokenRepresentationRecord" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed "500": @@ -1798,22 +1819,23 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/users/forgotLegacyPassword: post: tags: - - Users Resource - summary: "The end user has forgotten the legacy password they used for VCell,\ + - Users Resource + summary: + "The end user has forgotten the legacy password they used for VCell,\ \ so they will be emailed it." operationId: forgotLegacyPassword parameters: - - name: userID - in: query - schema: - type: string + - name: userID + in: query + schema: + type: string responses: "200": description: Legacy password sent in email @@ -1824,12 +1846,12 @@ paths: "500": description: Internal Error security: - - openId: - - user + - openId: + - user /api/v1/users/guestBearerToken: post: tags: - - Users Resource + - Users Resource summary: Method to get legacy tokens for guest users operationId: getGuestLegacyApiToken responses: @@ -1838,24 +1860,24 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AccesTokenRepresentationRecord' + $ref: "#/components/schemas/AccesTokenRepresentationRecord" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/users/mapUser: post: tags: - - Users Resource + - Users Resource summary: map vcell user operationId: mapUser requestBody: content: application/json: schema: - $ref: '#/components/schemas/UserLoginInfoForMapping' + $ref: "#/components/schemas/UserLoginInfoForMapping" responses: "200": description: OK @@ -1868,26 +1890,26 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/users/mappedUser: get: tags: - - Users Resource + - Users Resource summary: Get mapped VCell identity operationId: getMappedUser responses: @@ -1896,13 +1918,13 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/UserIdentityJSONSafe' + $ref: "#/components/schemas/UserIdentityJSONSafe" "401": description: Not Authenticated content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed "409": @@ -1910,20 +1932,20 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/users/me: get: tags: - - Users Resource + - Users Resource summary: Get current user operationId: getMe responses: @@ -1932,18 +1954,18 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Identity' + $ref: "#/components/schemas/Identity" /api/v1/users/newUser: post: tags: - - Users Resource + - Users Resource summary: create vcell user operationId: mapNewUser requestBody: content: application/json: schema: - $ref: '#/components/schemas/UserRegistrationInfo' + $ref: "#/components/schemas/UserRegistrationInfo" responses: "200": description: "Successful, returning the identity" @@ -1952,7 +1974,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed "409": @@ -1962,21 +1984,21 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/users/processMagicLink: get: tags: - - Users Resource + - Users Resource summary: Process the magic link and map the user operationId: processMagicLink parameters: - - name: magic - in: query - schema: - type: string + - name: magic + in: query + schema: + type: string responses: "200": description: User mapped successfully @@ -1987,28 +2009,28 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" /api/v1/users/requestRecoveryEmail: post: tags: - - Users Resource + - Users Resource summary: request a recovery email to link a VCell account. operationId: requestRecoveryEmail parameters: - - name: email - in: query - schema: - type: string - - name: userID - in: query - schema: - type: string + - name: email + in: query + schema: + type: string + - name: userID + in: query + schema: + type: string responses: "200": description: magic link sent in email if appropriate @@ -2019,7 +2041,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed "404": @@ -2027,28 +2049,28 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user /api/v1/users/unmapUser/{userName}: put: tags: - - Users Resource + - Users Resource summary: remove vcell identity mapping operationId: unmapUser parameters: - - name: userName - in: path - required: true - schema: - type: string + - name: userName + in: path + required: true + schema: + type: string responses: "200": description: OK @@ -2061,22 +2083,22 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" "500": description: Data Access Exception content: application/json: schema: - $ref: '#/components/schemas/VCellHTTPError' + $ref: "#/components/schemas/VCellHTTPError" security: - - openId: - - user + - openId: + - user components: schemas: AccesTokenRepresentationRecord: @@ -2096,24 +2118,24 @@ components: type: string AnalyticCurve: required: - - type + - type type: object allOf: - - $ref: '#/components/schemas/Curve' + - $ref: "#/components/schemas/Curve" properties: type: default: AnalyticCurve type: string expX: - $ref: '#/components/schemas/Expression' + $ref: "#/components/schemas/Expression" expY: - $ref: '#/components/schemas/Expression' + $ref: "#/components/schemas/Expression" expZ: - $ref: '#/components/schemas/Expression' + $ref: "#/components/schemas/Expression" offset: - $ref: '#/components/schemas/Coordinate' + $ref: "#/components/schemas/Coordinate" analyticOffset: - $ref: '#/components/schemas/Coordinate' + $ref: "#/components/schemas/Coordinate" defaultNumSamples: format: int32 type: integer @@ -2132,11 +2154,11 @@ components: error: type: string domain: - $ref: '#/components/schemas/Domain' + $ref: "#/components/schemas/Domain" functionType: - $ref: '#/components/schemas/VariableType' + $ref: "#/components/schemas/VariableType" category: - $ref: '#/components/schemas/FunctionCategory' + $ref: "#/components/schemas/FunctionCategory" Application: type: object ApplicationInfo: @@ -2145,7 +2167,7 @@ components: name: type: string type: - $ref: '#/components/schemas/MathType' + $ref: "#/components/schemas/MathType" dimensions: format: int32 type: integer @@ -2153,9 +2175,9 @@ components: type: string BatchSystemType: enum: - - PBS - - SGE - - SLURM + - PBS + - SGE + - SLURM type: string BioModel: type: object @@ -2187,11 +2209,11 @@ components: simulationKeyList: type: array items: - $ref: '#/components/schemas/KeyValue' + $ref: "#/components/schemas/KeyValue" applications: type: array items: - $ref: '#/components/schemas/Application' + $ref: "#/components/schemas/Application" BioModelChildSummary: type: object properties: @@ -2215,7 +2237,7 @@ components: appTypes: type: array items: - $ref: '#/components/schemas/MathType' + $ref: "#/components/schemas/MathType" simNames: type: array items: @@ -2248,20 +2270,20 @@ components: applicationInfo: type: array items: - $ref: '#/components/schemas/ApplicationInfo' + $ref: "#/components/schemas/ApplicationInfo" BioModelSummary: type: object properties: version: - $ref: '#/components/schemas/Version' + $ref: "#/components/schemas/Version" summary: - $ref: '#/components/schemas/BioModelChildSummary' + $ref: "#/components/schemas/BioModelChildSummary" publicationInformation: type: array items: - $ref: '#/components/schemas/PublicationInfo' + $ref: "#/components/schemas/PublicationInfo" vCellSoftwareVersion: - $ref: '#/components/schemas/VCellSoftwareVersion' + $ref: "#/components/schemas/VCellSoftwareVersion" BiomodelRef: type: object properties: @@ -2280,10 +2302,10 @@ components: type: integer CompositeCurve: required: - - type + - type type: object allOf: - - $ref: '#/components/schemas/Curve' + - $ref: "#/components/schemas/Curve" properties: type: default: CompositeCurve @@ -2304,10 +2326,10 @@ components: type: boolean ControlPointCurve: required: - - type + - type type: object allOf: - - $ref: '#/components/schemas/Curve' + - $ref: "#/components/schemas/Curve" properties: type: default: ControlPointCurve @@ -2315,14 +2337,14 @@ components: controlPoints: type: array items: - $ref: '#/components/schemas/Coordinate' + $ref: "#/components/schemas/Coordinate" controlPointCount: format: int32 type: integer controlPointsVector: type: array items: - $ref: '#/components/schemas/Coordinate' + $ref: "#/components/schemas/Coordinate" maxControlPoints: format: int32 type: integer @@ -2336,8 +2358,8 @@ components: discriminator: propertyName: type mapping: - Spline: '#/components/schemas/Spline' - SampledCurve: '#/components/schemas/SampledCurve' + Spline: "#/components/schemas/Spline" + SampledCurve: "#/components/schemas/SampledCurve" Coordinate: type: object properties: @@ -2352,7 +2374,7 @@ components: type: number Curve: required: - - type + - type type: object properties: bClosed: @@ -2362,12 +2384,12 @@ components: type: type: string beginningCoordinate: - $ref: '#/components/schemas/Coordinate' + $ref: "#/components/schemas/Coordinate" defaultNumSamples: format: int32 type: integer endingCoordinate: - $ref: '#/components/schemas/Coordinate' + $ref: "#/components/schemas/Coordinate" numSamplePoints: format: int32 type: integer @@ -2384,14 +2406,14 @@ components: discriminator: propertyName: type mapping: - AnalyticCurve: '#/components/schemas/AnalyticCurve' - CompositeCurve: '#/components/schemas/CompositeCurve' - ControlPointCurve: '#/components/schemas/ControlPointCurve' + AnalyticCurve: "#/components/schemas/AnalyticCurve" + CompositeCurve: "#/components/schemas/CompositeCurve" + ControlPointCurve: "#/components/schemas/ControlPointCurve" CurveSelectionInfo: type: object properties: fieldCurve: - $ref: '#/components/schemas/Curve' + $ref: "#/components/schemas/Curve" fieldType: format: int32 type: integer @@ -2425,9 +2447,9 @@ components: displayName: type: string variableType: - $ref: '#/components/schemas/VariableType' + $ref: "#/components/schemas/VariableType" domain: - $ref: '#/components/schemas/Domain' + $ref: "#/components/schemas/Domain" bFunction: type: boolean function: @@ -2440,56 +2462,56 @@ components: example: 2022-03-10 DetailedState: enum: - - UNKNOWN - - DATAMOVEREVENT_MOVED - - WORKEREVENT_WORKERALIVE - - JOB_WAITING - - JOB_QUEUED - - JOB_QUEUED_RETRY - - JOB_DISPATCHED - - JOB_ACCEPTED - - SOLVER_READY - - SOLVER_STARTING_INIT - - SOLVEREVENT_STARTING_PROC_GEOM - - SOLVEREVENT_STARTING_RESAMPLE_FD - - SOLVER_RUNNING_INIT - - SOLVER_RUNNING_INIT_INPUT_FILE - - SOLVER_RUNNING_INIT_CODEGEN - - SOLVER_RUNNING_INIT_COMPILING - - SOLVER_RUNNING_INIT_COMPILECMD - - SOLVER_RUNNING_INIT_COMPILE_OK - - SOLVER_RUNNING_INIT_LINKING - - SOLVER_RUNNING_INIT_LINKCMD - - SOLVER_RUNNING_INIT_LINK_OK - - SOLVER_RUNNING_INIT_COMPILELINK_OK - - SOLVEREVENT_STARTING_INIT - - SOLVEREVENT_STARTING_CODEGEN - - SOLVEREVENT_STARTING_COMPILELINK - - SOLVEREVENT_STARTING_INPUT_FILE - - SOLVEREVENT_STARTING - - SOLVEREVENT_STARTING_SUBMITTING - - SOLVEREVENT_STARTING_SUBMITTED - - WORKEREVENT_STARTING - - SOLVEREVENT_RUNNING_START - - SOLVER_RUNNING_START - - JOB_RUNNING_UNKNOWN - - SOLVEREVENT_PRINTED - - WORKEREVENT_DATA - - JOB_RUNNING - - SOLVEREVENT_PROGRESS - - WORKEREVENT_PROGRESS - - WORKEREVENT_WORKEREXIT_NORMAL - - WORKEREVENT_WORKEREXIT_ERROR - - SOLVEREVENT_FINISHED - - SOLVER_FINISHED - - WORKEREVENT_COMPLETED - - JOB_COMPLETED - - SOLVER_STOPPED - - JOB_STOPPED - - JOB_FAILED_UNKNOWN - - SOLVER_ABORTED - - WORKEREVENT_FAILURE - - JOB_FAILED + - UNKNOWN + - DATAMOVEREVENT_MOVED + - WORKEREVENT_WORKERALIVE + - JOB_WAITING + - JOB_QUEUED + - JOB_QUEUED_RETRY + - JOB_DISPATCHED + - JOB_ACCEPTED + - SOLVER_READY + - SOLVER_STARTING_INIT + - SOLVEREVENT_STARTING_PROC_GEOM + - SOLVEREVENT_STARTING_RESAMPLE_FD + - SOLVER_RUNNING_INIT + - SOLVER_RUNNING_INIT_INPUT_FILE + - SOLVER_RUNNING_INIT_CODEGEN + - SOLVER_RUNNING_INIT_COMPILING + - SOLVER_RUNNING_INIT_COMPILECMD + - SOLVER_RUNNING_INIT_COMPILE_OK + - SOLVER_RUNNING_INIT_LINKING + - SOLVER_RUNNING_INIT_LINKCMD + - SOLVER_RUNNING_INIT_LINK_OK + - SOLVER_RUNNING_INIT_COMPILELINK_OK + - SOLVEREVENT_STARTING_INIT + - SOLVEREVENT_STARTING_CODEGEN + - SOLVEREVENT_STARTING_COMPILELINK + - SOLVEREVENT_STARTING_INPUT_FILE + - SOLVEREVENT_STARTING + - SOLVEREVENT_STARTING_SUBMITTING + - SOLVEREVENT_STARTING_SUBMITTED + - WORKEREVENT_STARTING + - SOLVEREVENT_RUNNING_START + - SOLVER_RUNNING_START + - JOB_RUNNING_UNKNOWN + - SOLVEREVENT_PRINTED + - WORKEREVENT_DATA + - JOB_RUNNING + - SOLVEREVENT_PROGRESS + - WORKEREVENT_PROGRESS + - WORKEREVENT_WORKEREXIT_NORMAL + - WORKEREVENT_WORKEREXIT_ERROR + - SOLVEREVENT_FINISHED + - SOLVER_FINISHED + - WORKEREVENT_COMPLETED + - JOB_COMPLETED + - SOLVER_STOPPED + - JOB_STOPPED + - JOB_FAILED_UNKNOWN + - SOLVER_ABORTED + - WORKEREVENT_FAILURE + - JOB_FAILED type: string Domain: type: object @@ -2500,7 +2522,7 @@ components: type: object properties: eventType: - $ref: '#/components/schemas/ExportProgressType' + $ref: "#/components/schemas/ExportProgressType" progress: format: double type: number @@ -2509,29 +2531,29 @@ components: location: type: string user: - $ref: '#/components/schemas/User' + $ref: "#/components/schemas/User" jobID: format: int64 type: integer dataKey: - $ref: '#/components/schemas/KeyValue' + $ref: "#/components/schemas/KeyValue" dataIdString: type: string humanReadableData: - $ref: '#/components/schemas/HumanReadableExportData' + $ref: "#/components/schemas/HumanReadableExportData" ExportProgressType: enum: - - EXPORT_START - - EXPORT_COMPLETE - - EXPORT_FAILURE - - EXPORT_ASSEMBLING - - EXPORT_PROGRESS + - EXPORT_START + - EXPORT_COMPLETE + - EXPORT_FAILURE + - EXPORT_ASSEMBLING + - EXPORT_PROGRESS type: string ExportableDataType: enum: - - ODE_VARIABLE_DATA - - PDE_VARIABLE_DATA - - PDE_PARTICLE_DATA + - ODE_VARIABLE_DATA + - PDE_VARIABLE_DATA + - PDE_PARTICLE_DATA type: string Expression: type: string @@ -2557,20 +2579,20 @@ components: type: object properties: key: - $ref: '#/components/schemas/KeyValue' + $ref: "#/components/schemas/KeyValue" owner: - $ref: '#/components/schemas/User' + $ref: "#/components/schemas/User" name: type: string jobIndex: format: int32 type: integer simulationKey: - $ref: '#/components/schemas/KeyValue' + $ref: "#/components/schemas/KeyValue" parameterScanType: type: boolean dataKey: - $ref: '#/components/schemas/KeyValue' + $ref: "#/components/schemas/KeyValue" FieldData: type: object properties: @@ -2601,11 +2623,11 @@ components: format: double type: number origin: - $ref: '#/components/schemas/Origin' + $ref: "#/components/schemas/Origin" extent: - $ref: '#/components/schemas/Extent' + $ref: "#/components/schemas/Extent" isize: - $ref: '#/components/schemas/ISize' + $ref: "#/components/schemas/ISize" annotation: type: string name: @@ -2614,13 +2636,13 @@ components: type: object properties: fieldDataID: - $ref: '#/components/schemas/ExternalDataIdentifier' + $ref: "#/components/schemas/ExternalDataIdentifier" annotation: type: string simulationsReferencingThisID: type: array items: - $ref: '#/components/schemas/KeyValue' + $ref: "#/components/schemas/KeyValue" FieldDataSavedResults: type: object properties: @@ -2632,15 +2654,15 @@ components: type: object properties: extent: - $ref: '#/components/schemas/Extent' + $ref: "#/components/schemas/Extent" origin: - $ref: '#/components/schemas/Origin' + $ref: "#/components/schemas/Origin" isize: - $ref: '#/components/schemas/ISize' + $ref: "#/components/schemas/ISize" dataIdentifier: type: array items: - $ref: '#/components/schemas/DataIdentifier' + $ref: "#/components/schemas/DataIdentifier" times: type: array items: @@ -2648,10 +2670,10 @@ components: type: number FunctionCategory: enum: - - PREDEFINED - - OLDUSERDEFINED - - OUTPUTFUNCTION - - POSTPROCESSFUNCTION + - PREDEFINED + - OLDUSERDEFINED + - OUTPUTFUNCTION + - POSTPROCESSFUNCTION type: string GIFImage: type: object @@ -2660,12 +2682,12 @@ components: format: binary type: string size: - $ref: '#/components/schemas/ISize' + $ref: "#/components/schemas/ISize" GeometryMode: enum: - - GEOMETRY_SELECTIONS - - GEOMETRY_SLICE - - GEOMETRY_FULL + - GEOMETRY_SELECTIONS + - GEOMETRY_SLICE + - GEOMETRY_FULL type: string GeometrySpecDTO: type: object @@ -2673,7 +2695,7 @@ components: selections: type: array items: - $ref: '#/components/schemas/SpatialSelection' + $ref: "#/components/schemas/SpatialSelection" axis: format: int32 type: integer @@ -2681,7 +2703,7 @@ components: format: int32 type: integer geometryMode: - $ref: '#/components/schemas/GeometryMode' + $ref: "#/components/schemas/GeometryMode" GeometrySummary: type: object properties: @@ -2689,18 +2711,18 @@ components: format: int32 type: integer origin: - $ref: '#/components/schemas/Origin' + $ref: "#/components/schemas/Origin" extent: - $ref: '#/components/schemas/Extent' + $ref: "#/components/schemas/Extent" imageRef: - $ref: '#/components/schemas/KeyValue' + $ref: "#/components/schemas/KeyValue" version: - $ref: '#/components/schemas/Version' + $ref: "#/components/schemas/Version" softwareVersion: - $ref: '#/components/schemas/VCellSoftwareVersion' + $ref: "#/components/schemas/VCellSoftwareVersion" GroupAccess: required: - - groupid + - groupid type: object properties: groupid: @@ -2710,15 +2732,15 @@ components: discriminator: propertyName: type mapping: - GroupAccessNone: '#/components/schemas/GroupAccessNone' - GroupAccessSome: '#/components/schemas/GroupAccessSome' - GroupAccessAll: '#/components/schemas/GroupAccessAll' + GroupAccessNone: "#/components/schemas/GroupAccessNone" + GroupAccessSome: "#/components/schemas/GroupAccessSome" + GroupAccessAll: "#/components/schemas/GroupAccessAll" GroupAccessAll: required: - - type + - type type: object allOf: - - $ref: '#/components/schemas/GroupAccess' + - $ref: "#/components/schemas/GroupAccess" properties: type: default: GroupAccessAll @@ -2727,10 +2749,10 @@ components: type: string GroupAccessNone: required: - - type + - type type: object allOf: - - $ref: '#/components/schemas/GroupAccess' + - $ref: "#/components/schemas/GroupAccess" properties: type: default: GroupAccessNone @@ -2739,10 +2761,10 @@ components: type: string GroupAccessSome: required: - - type + - type type: object allOf: - - $ref: '#/components/schemas/GroupAccess' + - $ref: "#/components/schemas/GroupAccess" properties: type: default: GroupAccessSome @@ -2752,7 +2774,7 @@ components: groupMembers: type: array items: - $ref: '#/components/schemas/User' + $ref: "#/components/schemas/User" hiddenMembers: type: array items: @@ -2762,11 +2784,11 @@ components: hiddenGroupMembers: type: array items: - $ref: '#/components/schemas/User' + $ref: "#/components/schemas/User" normalGroupMembers: type: array items: - $ref: '#/components/schemas/User' + $ref: "#/components/schemas/User" HelloWorldMessage: type: object properties: @@ -2781,7 +2803,7 @@ components: server: type: string batchSystemType: - $ref: '#/components/schemas/BatchSystemType' + $ref: "#/components/schemas/BatchSystemType" HumanReadableExportData: type: object properties: @@ -2853,7 +2875,7 @@ components: type: object properties: modelType: - $ref: '#/components/schemas/MathType' + $ref: "#/components/schemas/MathType" geometryDimension: format: int32 type: integer @@ -2871,26 +2893,26 @@ components: type: object properties: version: - $ref: '#/components/schemas/Version' + $ref: "#/components/schemas/Version" keyValue: - $ref: '#/components/schemas/KeyValue' + $ref: "#/components/schemas/KeyValue" modelInfo: - $ref: '#/components/schemas/MathModelChildSummary' + $ref: "#/components/schemas/MathModelChildSummary" softwareVersion: - $ref: '#/components/schemas/VCellSoftwareVersion' + $ref: "#/components/schemas/VCellSoftwareVersion" publicationInfos: type: array items: - $ref: '#/components/schemas/PublicationInfo' + $ref: "#/components/schemas/PublicationInfo" annotatedFunctions: type: string MathType: enum: - - RuleBased - - Stochastic - - Deterministic - - SpringSaLaD - - Unknown + - RuleBased + - Stochastic + - Deterministic + - SpringSaLaD + - Unknown type: string MathmodelRef: type: object @@ -2910,20 +2932,20 @@ components: type: integer ModelType: enum: - - BIOMODEL - - MATHMODEL + - BIOMODEL + - MATHMODEL type: string N5ExportRequest: type: object properties: standardExportInformation: - $ref: '#/components/schemas/StandardExportInfo' + $ref: "#/components/schemas/StandardExportInfo" subVolume: type: object additionalProperties: type: string exportableDataType: - $ref: '#/components/schemas/ExportableDataType' + $ref: "#/components/schemas/ExportableDataType" datasetName: type: string Origin: @@ -2976,20 +2998,20 @@ components: biomodelRefs: type: array items: - $ref: '#/components/schemas/BiomodelRef' + $ref: "#/components/schemas/BiomodelRef" mathmodelRefs: type: array items: - $ref: '#/components/schemas/MathmodelRef' + $ref: "#/components/schemas/MathmodelRef" date: - $ref: '#/components/schemas/Date' + $ref: "#/components/schemas/Date" PublicationInfo: type: object properties: publicationKey: - $ref: '#/components/schemas/KeyValue' + $ref: "#/components/schemas/KeyValue" versionKey: - $ref: '#/components/schemas/KeyValue' + $ref: "#/components/schemas/KeyValue" title: type: string authors: @@ -3005,27 +3027,27 @@ components: url: type: string pubdate: - $ref: '#/components/schemas/Date' + $ref: "#/components/schemas/Date" vcDocumentType: - $ref: '#/components/schemas/VCDocumentType' + $ref: "#/components/schemas/VCDocumentType" user: - $ref: '#/components/schemas/User' + $ref: "#/components/schemas/User" theHashCode: format: int32 type: integer SPECIAL_CLAIM: enum: - - admins - - powerUsers - - publicationEditors - - vcellSupport + - admins + - powerUsers + - publicationEditors + - vcellSupport type: string SampledCurve: required: - - type + - type type: object allOf: - - $ref: '#/components/schemas/ControlPointCurve' + - $ref: "#/components/schemas/ControlPointCurve" properties: type: default: SampledCurve @@ -3047,42 +3069,42 @@ components: type: number SchedulerStatus: enum: - - WAITING - - QUEUED - - DISPATCHED - - RUNNING - - COMPLETED - - STOPPED - - FAILED + - WAITING + - QUEUED + - DISPATCHED + - RUNNING + - COMPLETED + - STOPPED + - FAILED type: string SimulationExecutionStatusRecord: type: object properties: fieldStartDate: - $ref: '#/components/schemas/Instant' + $ref: "#/components/schemas/Instant" fieldLatestUpdateDate: - $ref: '#/components/schemas/Instant' + $ref: "#/components/schemas/Instant" fieldEndDate: - $ref: '#/components/schemas/Instant' + $ref: "#/components/schemas/Instant" fieldComputeHost: type: string fieldHasData: type: boolean fieldHtcJobID: - $ref: '#/components/schemas/HtcJobID' + $ref: "#/components/schemas/HtcJobID" SimulationJobStatusRecord: type: object properties: fieldTimeDataStamp: - $ref: '#/components/schemas/Instant' + $ref: "#/components/schemas/Instant" fieldVCSimID: - $ref: '#/components/schemas/VCSimulationIdentifier' + $ref: "#/components/schemas/VCSimulationIdentifier" fieldSubmitDate: - $ref: '#/components/schemas/Instant' + $ref: "#/components/schemas/Instant" fieldSchedulerStatus: - $ref: '#/components/schemas/SchedulerStatus' + $ref: "#/components/schemas/SchedulerStatus" fieldSimulationMessage: - $ref: '#/components/schemas/SimulationMessage' + $ref: "#/components/schemas/SimulationMessage" fieldTaskID: format: int32 type: integer @@ -3092,18 +3114,18 @@ components: format: int32 type: integer fieldSimulationExecutionStatus: - $ref: '#/components/schemas/SimulationExecutionStatusRecord' + $ref: "#/components/schemas/SimulationExecutionStatusRecord" fieldSimulationQueueEntryStatus: - $ref: '#/components/schemas/SimulationQueueEntryStatusRecord' + $ref: "#/components/schemas/SimulationQueueEntryStatusRecord" SimulationMessage: type: object properties: detailedState: - $ref: '#/components/schemas/DetailedState' + $ref: "#/components/schemas/DetailedState" message: type: string htcJobId: - $ref: '#/components/schemas/HtcJobID' + $ref: "#/components/schemas/HtcJobID" displayMessage: type: string SimulationQueueEntryStatusRecord: @@ -3113,20 +3135,20 @@ components: format: int32 type: integer fieldQueueDate: - $ref: '#/components/schemas/Instant' + $ref: "#/components/schemas/Instant" fieldQueueID: - $ref: '#/components/schemas/SimulationQueueID' + $ref: "#/components/schemas/SimulationQueueID" SimulationQueueID: enum: - - QUEUE_ID_WAITING - - QUEUE_ID_SIMULATIONJOB - - QUEUE_ID_NULL + - QUEUE_ID_WAITING + - QUEUE_ID_SIMULATIONJOB + - QUEUE_ID_NULL type: string SimulationStatusPersistentRecord: type: object properties: status: - $ref: '#/components/schemas/Status' + $ref: "#/components/schemas/Status" details: type: string hasData: @@ -3137,23 +3159,23 @@ components: modelID: type: string modelType: - $ref: '#/components/schemas/ModelType' + $ref: "#/components/schemas/ModelType" SpatialSelection: required: - - type + - type type: object properties: curveSelectionInfo: - $ref: '#/components/schemas/CurveSelectionInfo' + $ref: "#/components/schemas/CurveSelectionInfo" varType: - $ref: '#/components/schemas/VariableType' + $ref: "#/components/schemas/VariableType" type: type: string smallestMeshCellDimensionLength: format: double type: number variableType: - $ref: '#/components/schemas/VariableType' + $ref: "#/components/schemas/VariableType" closed: type: boolean point: @@ -3161,15 +3183,15 @@ components: discriminator: propertyName: type mapping: - Membrane: '#/components/schemas/SpatialSelectionMembrane' - Contour: '#/components/schemas/SpatialSelectionContour' - Volume: '#/components/schemas/SpatialSelectionVolume' + Membrane: "#/components/schemas/SpatialSelectionMembrane" + Contour: "#/components/schemas/SpatialSelectionContour" + Volume: "#/components/schemas/SpatialSelectionVolume" SpatialSelectionContour: required: - - type + - type type: object allOf: - - $ref: '#/components/schemas/SpatialSelection' + - $ref: "#/components/schemas/SpatialSelection" properties: type: default: Contour @@ -3191,10 +3213,10 @@ components: type: integer SpatialSelectionMembrane: required: - - type + - type type: object allOf: - - $ref: '#/components/schemas/SpatialSelection' + - $ref: "#/components/schemas/SpatialSelection" properties: type: default: Membrane @@ -3205,13 +3227,13 @@ components: format: int32 type: integer selectionSource: - $ref: '#/components/schemas/SampledCurve' + $ref: "#/components/schemas/SampledCurve" SpatialSelectionVolume: required: - - type + - type type: object allOf: - - $ref: '#/components/schemas/SpatialSelection' + - $ref: "#/components/schemas/SpatialSelection" properties: type: default: Volume @@ -3220,10 +3242,10 @@ components: type: boolean Spline: required: - - type + - type type: object allOf: - - $ref: '#/components/schemas/ControlPointCurve' + - $ref: "#/components/schemas/ControlPointCurve" properties: type: default: Spline @@ -3246,7 +3268,7 @@ components: outputContext: type: array items: - $ref: '#/components/schemas/AnnotatedFunctionDTO' + $ref: "#/components/schemas/AnnotatedFunctionDTO" contextName: type: string simulationName: @@ -3257,31 +3279,31 @@ components: format: int32 type: integer geometrySpecs: - $ref: '#/components/schemas/GeometrySpecDTO' + $ref: "#/components/schemas/GeometrySpecDTO" timeSpecs: - $ref: '#/components/schemas/TimeSpecs' + $ref: "#/components/schemas/TimeSpecs" variableSpecs: - $ref: '#/components/schemas/VariableSpecs' + $ref: "#/components/schemas/VariableSpecs" Status: enum: - - UNKNOWN - - NEVER_RAN - - START_REQUESTED - - DISPATCHED - - WAITING - - QUEUED - - RUNNING - - COMPLETED - - FAILED - - STOP_REQUESTED - - STOPPED - - NOT_SAVED + - UNKNOWN + - NEVER_RAN + - START_REQUESTED + - DISPATCHED + - WAITING + - QUEUED + - RUNNING + - COMPLETED + - FAILED + - STOP_REQUESTED + - STOPPED + - NOT_SAVED type: string StatusMessage: type: object properties: jobStatus: - $ref: '#/components/schemas/SimulationJobStatusRecord' + $ref: "#/components/schemas/SimulationJobStatusRecord" userName: type: string progress: @@ -3292,8 +3314,8 @@ components: type: number TimeMode: enum: - - TIME_POINT - - TIME_RANGE + - TIME_POINT + - TIME_RANGE type: string TimeSpecs: type: object @@ -3310,18 +3332,18 @@ components: format: double type: number mode: - $ref: '#/components/schemas/TimeMode' + $ref: "#/components/schemas/TimeMode" User: type: object properties: userName: type: string key: - $ref: '#/components/schemas/KeyValue' + $ref: "#/components/schemas/KeyValue" mySpecials: type: array items: - $ref: '#/components/schemas/SPECIAL_CLAIM' + $ref: "#/components/schemas/SPECIAL_CLAIM" UserIdentityJSONSafe: type: object properties: @@ -3357,31 +3379,31 @@ components: type: boolean VCDocumentType: enum: - - BIOMODEL_DOC - - MATHMODEL_DOC - - GEOMETRY_DOC - - EXTERNALFILE_DOC + - BIOMODEL_DOC + - MATHMODEL_DOC + - GEOMETRY_DOC + - EXTERNALFILE_DOC type: string VCImageSummary: type: object properties: size: - $ref: '#/components/schemas/ISize' + $ref: "#/components/schemas/ISize" extent: - $ref: '#/components/schemas/Extent' + $ref: "#/components/schemas/Extent" version: - $ref: '#/components/schemas/Version' + $ref: "#/components/schemas/Version" preview: - $ref: '#/components/schemas/GIFImage' + $ref: "#/components/schemas/GIFImage" softwareVersion: - $ref: '#/components/schemas/VCellSoftwareVersion' + $ref: "#/components/schemas/VCellSoftwareVersion" VCSimulationIdentifier: type: object properties: simulationKey: - $ref: '#/components/schemas/KeyValue' + $ref: "#/components/schemas/KeyValue" owner: - $ref: '#/components/schemas/User' + $ref: "#/components/schemas/User" id: type: string VCellHTTPError: @@ -3393,11 +3415,11 @@ components: type: string VCellSite: enum: - - alpha - - beta - - rel - - other - - unknown + - alpha + - beta + - rel + - other + - unknown type: string VCellSoftwareVersion: type: object @@ -3405,7 +3427,7 @@ components: softwareVersionString: type: string vcellSite: - $ref: '#/components/schemas/VCellSite' + $ref: "#/components/schemas/VCellSite" buildNumber: type: string versionNumber: @@ -3426,19 +3448,19 @@ components: type: string VariableDomain: enum: - - VARIABLEDOMAIN_POSTPROCESSING - - VARIABLEDOMAIN_UNKNOWN - - VARIABLEDOMAIN_VOLUME - - VARIABLEDOMAIN_MEMBRANE - - VARIABLEDOMAIN_CONTOUR - - VARIABLEDOMAIN_NONSPATIAL - - VARIABLEDOMAIN_POINT + - VARIABLEDOMAIN_POSTPROCESSING + - VARIABLEDOMAIN_UNKNOWN + - VARIABLEDOMAIN_VOLUME + - VARIABLEDOMAIN_MEMBRANE + - VARIABLEDOMAIN_CONTOUR + - VARIABLEDOMAIN_NONSPATIAL + - VARIABLEDOMAIN_POINT type: string VariableMode: enum: - - VARIABLE_ONE - - VARIABLE_MULTI - - VARIABLE_ALL + - VARIABLE_ONE + - VARIABLE_MULTI + - VARIABLE_ALL type: string VariableSpecs: type: object @@ -3448,7 +3470,7 @@ components: items: type: string mode: - $ref: '#/components/schemas/VariableMode' + $ref: "#/components/schemas/VariableMode" VariableType: type: object properties: @@ -3456,7 +3478,7 @@ components: format: int32 type: integer variableDomain: - $ref: '#/components/schemas/VariableDomain' + $ref: "#/components/schemas/VariableDomain" name: type: string units: @@ -3475,25 +3497,25 @@ components: type: object properties: versionKey: - $ref: '#/components/schemas/KeyValue' + $ref: "#/components/schemas/KeyValue" annot: type: string branchID: type: number branchPointRefKey: - $ref: '#/components/schemas/KeyValue' + $ref: "#/components/schemas/KeyValue" date: format: date-time type: string example: 2022-03-10 flag: - $ref: '#/components/schemas/VersionFlag' + $ref: "#/components/schemas/VersionFlag" groupAccess: - $ref: '#/components/schemas/GroupAccess' + $ref: "#/components/schemas/GroupAccess" name: type: string owner: - $ref: '#/components/schemas/User' + $ref: "#/components/schemas/User" VersionFlag: type: object properties: From 0a03b2ab43d8c6078b802b721acb4eb2f3a0a98c Mon Sep 17 00:00:00 2001 From: Jim Schaff Date: Thu, 19 Mar 2026 02:04:09 -0400 Subject: [PATCH 21/24] Reformat docs and regenerate guide images after rebase --- .gitignore | 1 - docs/guides/building-a-model.md | 2 +- docs/guides/complex-geometries.md | 4 +- docs/guides/field-data.md | 2 +- .../guides/images/building-concentrations.png | Bin 39238 -> 39209 bytes docs/guides/images/building-geometry.png | Bin 170726 -> 170643 bytes docs/guides/images/building-slice3d-A.png | Bin 155818 -> 155890 bytes .../images/complex-analytic-geometry.png | Bin 170726 -> 170643 bytes docs/guides/images/complex-concentrations.png | Bin 39131 -> 39097 bytes docs/guides/images/complex-geometry.png | Bin 182631 -> 182550 bytes docs/guides/images/complex-slice3d-A.png | Bin 128150 -> 128368 bytes docs/guides/images/viz-concentrations.png | Bin 56465 -> 56355 bytes docs/guides/images/viz-slice2d.png | Bin 16554 -> 16559 bytes docs/guides/images/viz-slice3d.png | Bin 114568 -> 114758 bytes docs/guides/parameter-exploration.md | 2 +- docs/guides/remote-simulations.md | 14 +- docs/guides/sbml-models.md | 2 +- docs/guides/visualization.md | 6 +- docs/index.md | 26 +-- docs/reference/io.md | 144 ++++++------- docs/reference/models.md | 190 +++++++++--------- docs/reference/simulation.md | 68 +++---- mkdocs.yml | 32 +-- 23 files changed, 246 insertions(+), 247 deletions(-) diff --git a/.gitignore b/.gitignore index d857be9..ca82aa5 100644 --- a/.gitignore +++ b/.gitignore @@ -185,4 +185,3 @@ examples/scripts/workspace/ workspace docs/guides/notebooks/workspace/ - diff --git a/docs/guides/building-a-model.md b/docs/guides/building-a-model.md index 774ac3a..5a8c285 100644 --- a/docs/guides/building-a-model.md +++ b/docs/guides/building-a-model.md @@ -147,7 +147,7 @@ results.plotter.plot_slice_3d(time_index=0, channel_id="A") ``` !!! tip "Interactive tutorial" - See the [Building a Model tutorial](notebooks/building-a-model.ipynb) for a runnable notebook with visual output, or the [sysbio-1-antimony notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-1-antimony.ipynb) for the course version. +See the [Building a Model tutorial](notebooks/building-a-model.ipynb) for a runnable notebook with visual output, or the [sysbio-1-antimony notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-1-antimony.ipynb) for the course version. ## Next steps diff --git a/docs/guides/complex-geometries.md b/docs/guides/complex-geometries.md index 4035f0a..20f8c8a 100644 --- a/docs/guides/complex-geometries.md +++ b/docs/guides/complex-geometries.md @@ -115,7 +115,7 @@ geo.add_surface(name="pm_domain", sub_volume_1="cell_domain", sub_volume_2="ec_d ![Analytic sphere geometry](images/complex-analytic-geometry.png) !!! note "Subvolume ordering" - Subvolumes are evaluated in the order they are added. Earlier subvolumes have higher priority — the sphere is carved out of the background. +Subvolumes are evaluated in the order they are added. Earlier subvolumes have higher priority — the sphere is carved out of the background. ## Image-based geometry @@ -186,7 +186,7 @@ results.plotter.plot_slice_3d(time_index=0, channel_id="A") ![3D slice of species A](images/complex-slice3d-A.png) !!! tip "Interactive tutorial" - See the [Complex Geometries tutorial](notebooks/complex-geometries.ipynb) for a runnable notebook with visual output, or the [sysbio-3-geometry notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-3-geometry.ipynb) for the course version. +See the [Complex Geometries tutorial](notebooks/complex-geometries.ipynb) for a runnable notebook with visual output, or the [sysbio-3-geometry notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-3-geometry.ipynb) for the course version. ## Next steps diff --git a/docs/guides/field-data.md b/docs/guides/field-data.md index 46cd1e6..73f4165 100644 --- a/docs/guides/field-data.md +++ b/docs/guides/field-data.md @@ -160,7 +160,7 @@ result2.plotter.plot_concentrations() ``` !!! tip "Example scripts" - See [`fielddata_from_sim_workflow.py`](https://github.com/virtualcell/pyvcell/blob/main/examples/scripts/fielddata_from_sim_workflow.py) and [`fielddata_from_image_workflow.py`](https://github.com/virtualcell/pyvcell/blob/main/examples/scripts/fielddata_from_image_workflow.py) for complete runnable examples. +See [`fielddata_from_sim_workflow.py`](https://github.com/virtualcell/pyvcell/blob/main/examples/scripts/fielddata_from_sim_workflow.py) and [`fielddata_from_image_workflow.py`](https://github.com/virtualcell/pyvcell/blob/main/examples/scripts/fielddata_from_image_workflow.py) for complete runnable examples. ## Next steps diff --git a/docs/guides/images/building-concentrations.png b/docs/guides/images/building-concentrations.png index 7bc3ea55157655dd14c939d89c553ef869aa0db4..67db4588c380f18a295a3d7ed45d17aff03a9006 100644 GIT binary patch literal 39209 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 z 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 ZJn7uxTp^}p_zC&Ftdx>u?gNt-{{s(m6ZZfB literal 39238 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 z z)F}sp=)ak>F@BoE9R!ueaSOlN^2Ub#T3rJoJBTg9I3rlG+gfif+8z7m!v z+rNUX)6{Tvx%V>P6png>sfoW7$nz008Vh~#D?A&NM!OntS~dUKnn-Y5_=?w?!)6Mo2z^HHXZl$ z--9&Cqm^u$%@;p#(jPZEF%?u5Y3btp3hU`?*Y#3BCan2>JNK7BRRb#3=@6R!(@G51 z47DWIZ~|cYw3z!Z(eHRmhJT~8Ou%fE8H;}0NpnOR@tK^v+a=mI6WF8?IliDrsGHO zGUMft*}pn~C|7D1?l5Gep=_bA#vmj_$2dNI>Zchnu4jrBfWBX=(A#@ra4%aRLKcB_ z$pVoU?t3{}>w&|l3E<#g67*3PAr+AJCk|mAi0ZI9LBzP4&oZOd91Hj%C=-Y3EzO^i z$!2&NSmaPr{D_eKj!?Vl2HIwW#n@@LNGbj_5{8(o(laH9dV5X&djC2CN|Kyr;G6P1 zdTh*0c(%fXDs+INs|5(?%roR@aa=FY3};rC+XN4qHRA~Is-H*33hAcT*Y^Xl>!0yT ziiEglAih2_D9T*xbIQWi4nUpZ>V(kxNfJnTK=Z*m_lvT51Yek+St6{s5hOivHr=lxK zvjC%2y)1MpPUEir4KEuBqgYocf5@a9%iWC^l{1eI+gUh#Sr>_BfqKQDuZ;*n8rb~Y zST#M;sT!(>ifO^JS|eY2z^9M$my$sA?!XCJ*FQ{7JYaJKv=K!*@(+?}3%{;ci75V65B4jZT!vlrFWtvd{9FTdXgNHQ?e*{o6Wj~Y z;!5kd^nnhFrIWCTjUlRd@~TW3e8-W6v=BzEe}%G;`klyVH|T2~E6>YUBpr*=oPx1J zicL7|yK!`*P{1)7uQ8dewD9(aNqhSBbxvi#jT=I))2tw>m7+GF^Vem9?P)CtM_StG zRzYI>L+>MDDWJcTFN%T)a8ipUBk}Tw;6Mq+v$3eT$*P>t&m-gBHn4@Ib0l%M>~O8& zwn9eINz;5X1#KXdxO+uQLjzK;(hzsZE7)*PTBv&(M+l~OtoL+2UxvpAapv32g9NM; zZ0iETSn7qN;!qvx37nW(vH-!tCHH4{YA#=Z2Vr4mg z?yB2qpq;D&-vc-o0h!|ro6^IRNG|&ksN=}sqOk~^Lf|T6idltfJwMSi{~0k?Q>rj% zY|w~86gBO53~W34IWzf3|5()p^E68??VFluvw1t^%JifJ+>N5K!pOJu&0V=!r>5gn z^R5*4kYWqY>SvVvKG!!qCTQ!?2D+bSQx83iwXV6UYLC}gTGwlcrVHuyOC=BMm=U8r z&uv>Zo)8FiDnYT}mQr{|j)RJ9H2+x5CAswLW(%2}=Wi9MIc=QLc$U$Y)*~U~19oLCW!6cVNMgQDi@gM$q1Vz<@Z~ zyEZAvK6b7Qily?aGMjAjbMxI#xd%pRe`d-b}Y|E>L!dG6*7mtJI(0RoZ zgI>36fncY9w{>-bN=4<{}uJ>*)`HrQ3Eu!DmBLq8uwX;z0w?Xv4Kt z1BOFu_p*L6W7$j)SI3za`PMcU!97nx=x9~heW0fza#P{~&8E-n>FnoCH7^lu$rBkq)Yfo z>C057S^u4BP@;Fe?6i>OzI%C8N7m67nU<&dMAo *iAK~#@2cV2yzd(ZE7I^$Bw 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ϜSGEr1%5Qj=K04-UMM*n$J_1)I)GB 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

    36qv)~qqCktOgr(x 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

    %D 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 Yv9#}8ee$M68Rq>eiW&;#kIjSr2UkW9#sB~S literal 170726 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 diff --git a/docs/guides/images/building-slice3d-A.png b/docs/guides/images/building-slice3d-A.png index 4061277a245177e3ef97b7763df902805ba990c1..ba7590f0109db9696130ddec57679b0b96720093 100644 GIT binary patch delta 153278 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

    bduwTFEi?ki!~}KOD8>h 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%0Dm!|lfF6X04CKL(z|Q*EXu%R!lH%qQ83s)( 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 z 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

    Upj=j5+Fa1A@LnqV2r$wZyuL69Dy!- zQbO*E0pou3?V+jCMNhuE5VMGo=ddxRN+xz1q51PXuMx63=N-oS47_MM74|sG0w25> z#Kp7ul{etI*=ZrEcaY`76v^4-I=HP{*#B_KOH5EU;@ejk`4X>goy3T{I^*0OX_f|j z(|#ozqtl7qrI24WSF`ma3@$#rcKf;fSAB95qC%48j`7^#lhc@t(y#Bo7+Ol42EUnq zINz!almk{;FO{{QZZxN1I-JNC0p7Z8aSsnsd}*s_SEf>(Q0}>R>DWqG)xoNi!}MzX(lP!fW;9_#sKS5`zLY_=gc1>?wcsw*m98&Y=_DH3Pas*R5ehh{$E=ZSulOl=+2|jpty57)ztL@2QUR7G@U0+RE%(zVT>k zL|X+bYW2xkH{UIVK!|`l%Osw5WxnQS}s z?nHFt7ZR_%a{H+RlaktWrqp}X*l7S{X!%iGi(KOZ(QOBP9OUtvAsUqouCi}2Zt{G_ zV9fKAFzr%!9wB@+a1w-fK?*btx><~|CtV*b<-@aU&c~BB34udmm%B*jGb9A7=zQW+7av;`!yl+O-RAy zb#>;L1FevR2b+pN3oc{-n(78`kRt~otTLhBD=98f6V43$1G{^m$c^2dNZ~7HHo#ck z?{^^68x?lS?wah(Z`3pPC>y+VCg0%pLO4c!d_Wi1q!TAH?925_X|i4#>yDK z(@@DvPH9YmRW~%Kjd)a*@n%3eQ++ljn!2s?0}T=&Yf<13moIoN&8^PtcdFCTfF}m9 z`GPAOF8nw~agqgdNc`?rhXOotbx1ZlV>$PrbcW^l1|A>OH{YQn_sM<5@#ikzT|`gH zOzt%buxy%IO()#O88S0;LyC^dk1KdG!ki&)I_26dXv{4J5@bl%eDC9kB%@2K&ZZr* zTlMStRQGj5!qTA-k}uzI!czeeEj+C{Zlgq~14BVBz6MVXXdv^!Nszp(0oUO~x+WZ?PBDU0HUHA(Rt&q!mSc#D*0mCwA>2t+QZx8~uCD+hI+ou?UWN};eJp7Nr9@072O|^ck z|03D?Ti~bNup4f%JMO&?FaIigfgKQcSGR>+vlk>y4oyBMT^8wlIEKr@#-@npTPh%u z$hF6x0lkONA_o+Zv(38Q2c|f($xn`wT~ zL02qD=?%_xPDn4m3A{y7v#1y#*s%4+(wAZX**`xhCI-(00=FNhYcX*Jr$4)*?{kbm zv|N0WqwZ(zP6xI|qskI=~t4ALsJk+?Z8R4?|(lH<3*;v); zW4$(1RaADJ6*Q9MH<<9;?c4do8-4{ept4a>_+}{ilW>{efbB-0rlRkh@!CZ12E3ql z&5@5eoHz|7i zrbFW<(3EFotwi{43AcSj(p&7)4lIw;9b~_vdMbmdP{xwj#!)@a258%)tolK+@fMO1 zn$Z4%PTR)G;8I^!yFCps(i!8`U(B^H_?AQ;>j}~cg}DoR(vj7Ml`JlYd(;vB-@B;C zvT`l!xIh5_XF61=FKE&IE&3@YQov8E2vAN>ZF?kRj; zNCv44#<+8cm%xlhqK`n?Sxd9xX$wk`-yz~jk;kzcRTe{NmV-maO_Fx=429t;Z#)AV z;*?-WB=%+1M!z3p*FnE*_ba7;5)}U;n}x`OZi^*Pe+#l)Tsj{y+ZoDV&e#0TH%0DQ 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

    Sgy(rlBnba~Fkv|*GZ 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

    vLFTm*dCe`) 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 diff --git a/docs/guides/images/complex-analytic-geometry.png b/docs/guides/images/complex-analytic-geometry.png index dc76854103de6aebc2ddda98e0c30f4ddf63e201..d6feca1daefd742bf447838c059dbcc5f7450434 100644 GIT binary patch literal 170643 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 z z)F}sp=)ak>F@BoE9R!ueaSOlN^2Ub#T3rJoJBTg9I3rlG+gfif+8z7m!v z+rNUX)6{Tvx%V>P6png>sfoW7$nz008Vh~#D?A&NM!OntS~dUKnn-Y5_=?w?!)6Mo2z^HHXZl$ z--9&Cqm^u$%@;p#(jPZEF%?u5Y3btp3hU`?*Y#3BCan2>JNK7BRRb#3=@6R!(@G51 z47DWIZ~|cYw3z!Z(eHRmhJT~8Ou%fE8H;}0NpnOR@tK^v+a=mI6WF8?IliDrsGHO zGUMft*}pn~C|7D1?l5Gep=_bA#vmj_$2dNI>Zchnu4jrBfWBX=(A#@ra4%aRLKcB_ z$pVoU?t3{}>w&|l3E<#g67*3PAr+AJCk|mAi0ZI9LBzP4&oZOd91Hj%C=-Y3EzO^i z$!2&NSmaPr{D_eKj!?Vl2HIwW#n@@LNGbj_5{8(o(laH9dV5X&djC2CN|Kyr;G6P1 zdTh*0c(%fXDs+INs|5(?%roR@aa=FY3};rC+XN4qHRA~Is-H*33hAcT*Y^Xl>!0yT ziiEglAih2_D9T*xbIQWi4nUpZ>V(kxNfJnTK=Z*m_lvT51Yek+St6{s5hOivHr=lxK zvjC%2y)1MpPUEir4KEuBqgYocf5@a9%iWC^l{1eI+gUh#Sr>_BfqKQDuZ;*n8rb~Y zST#M;sT!(>ifO^JS|eY2z^9M$my$sA?!XCJ*FQ{7JYaJKv=K!*@(+?}3%{;ci75V65B4jZT!vlrFWtvd{9FTdXgNHQ?e*{o6Wj~Y z;!5kd^nnhFrIWCTjUlRd@~TW3e8-W6v=BzEe}%G;`klyVH|T2~E6>YUBpr*=oPx1J zicL7|yK!`*P{1)7uQ8dewD9(aNqhSBbxvi#jT=I))2tw>m7+GF^Vem9?P)CtM_StG zRzYI>L+>MDDWJcTFN%T)a8ipUBk}Tw;6Mq+v$3eT$*P>t&m-gBHn4@Ib0l%M>~O8& zwn9eINz;5X1#KXdxO+uQLjzK;(hzsZE7)*PTBv&(M+l~OtoL+2UxvpAapv32g9NM; zZ0iETSn7qN;!qvx37nW(vH-!tCHH4{YA#=Z2Vr4mg z?yB2qpq;D&-vc-o0h!|ro6^IRNG|&ksN=}sqOk~^Lf|T6idltfJwMSi{~0k?Q>rj% zY|w~86gBO53~W34IWzf3|5()p^E68??VFluvw1t^%JifJ+>N5K!pOJu&0V=!r>5gn z^R5*4kYWqY>SvVvKG!!qCTQ!?2D+bSQx83iwXV6UYLC}gTGwlcrVHuyOC=BMm=U8r z&uv>Zo)8FiDnYT}mQr{|j)RJ9H2+x5CAswLW(%2}=Wi9MIc=QLc$U$Y)*~U~19oLCW!6cVNMgQDi@gM$q1Vz<@Z~ zyEZAvK6b7Qily?aGMjAjbMxI#xd%pRe`d-b}Y|E>L!dG6*7mtJI(0RoZ zgI>36fncY9w{>-bN=4<{}uJ>*)`HrQ3Eu!DmBLq8uwX;z0w?Xv4Kt z1BOFu_p*L6W7$j)SI3za`PMcU!97nx=x9~heW0fza#P{~&8E-n>FnoCH7^lu$rBkq)Yfo z>C057S^u4BP@;Fe?6i>OzI%C8N7m67nU<&dMAo *iAK~#@2cV2yzd(ZE7I^$Bw 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ϜSGEr1%5Qj=K04-UMM*n$J_1)I)GB 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

    36qv)~qqCktOgr(x zgdxxfkGD*Ri7C0H&uF3j>lEtA^Hs&E*lYamHT%Z#U-pd+gu$OIKYznWqmf+{oL?Fl zNKeg5YKjLCawi-(zxje69*|GmhfHr8g(R27%cc1myDTIP2Fk7}lS!IwMb{2F*u`;X z84p$2Ey)B$SrICmKZgWm%J^M z9g(CcZFgjl7dwuEigVogCPNd;b1Q$My1x|J_0OGmZbYcnxIYKo&=`229t@^w%21vk z?#|Qdp+(|`abzn3fZO^p)xW=o+}f6!luH%1q~GL}M#C3MP!1Oo>85i+kd2W?4U=8F(6{~s&@nSxvYS@*_ zpYcnb9rtJW>S%m=(CZc#ZL9oODD zW1ecn2*WN|CftI1tZ$fhyifL@57osc^>*PTpc;cw%k)W6ElMoS$0~uziom{MbCIUU zBNN8T`eOdETiHW-jZ7X=@MN!i)>a93!Jq_#V5y)0i&ZW9g?^> z#;ytW{HQokKuMJ~d8$xSG3&7;-pk^+;xXiSnz)dW%B8)ZXF`}+AjHkaLU zXp$x^DX}cdb19?9tE3?tfqsx}_@+ivo%D;F;Z5?+PuYJ$zckB8oDpfUEnzC}7OY?&v&Nc;m^4h;U-DuG@cKrt z(s7?37s#MQbOc0-y~o>ksIj6Acu4dNKEHUtG7mlhj1)McMhdIiyKaTM;e47@J~MP-hit|T8eF%y#Zi=k4}P0q)g&sEw!HQ7{E z_3XX24|;{d{k0lMz)jBmVGHhyJ}GGz!6q5&7jgdb6XGb3vxA09?@xac*k}gENs!)J zh9$#a)(w!C;WS{f5seeZ(holU@GM4{NMTj{b|F$>+TjF?dT)w1jJH|MFBxwr2F!YFS$r=}LlT8mv@eJ zL+l{j4ih}jKWx6T>Oosj|cq3DMZl~S-@TO zA)fc+q|rOCRCATt3wIIb%7+N90jrLTl(>DpULZ!X?oRCVP5Ww*n@!sC)IXuEcklk4 zwANhDvyReubI=Fo5pI3r}rtOFs^(?pgdHFaUbckV4IoZhj8f zwU222t`{v2&P~2M;%L=F!x{PeiCRPm_%_zjNl6XYqi%0}4mX6dBk7|AAVJ9HIbw_| zn+#P6nnHz(R|w^tmXhfvqn9gt_v2$mYnDLQjx$ZtX5FfL@(wK8j{XLr<&EYDNH7io z7K%&J;TSV#{;P#i5^8^75V(7?BLp1Q2=|M-j(=h@Z}~|Ud5B?bB70R+z@RbLw-BWU zDNzJ|>IeoIu{H{;J$XSBIC15_S8IN^L?PdyJ9l0{7YW)c=EY^o!SP!Zwc;A{TM*Rs zdCXq|J676w>+uuBn|;!!zH~msg{qL#@B|7!8vBX2#tfe)oXK}R(mdX+JzJ`-3X;F$ z{NGmC_N9Ez2zq1(zpR?R=;q|REmI1cv_oZTnvPgv$ixx35v%k$dOl0H*^SQQQV=pO zUW(wOXhkpelerH`tsjP1Aobt%%QBuc#`2Gd@DP$j^B>JnY19@AC<~daGxV?_+z*#k z%dOF~MD~ZFY?;9)6l=akBWs|2v(wBt!FZk|35JBp9JHgI;&-MfQ#;&0sxU%kEfsWU z3oI#6ULnY8UG_Ad8`iIg0^napjUH!QEzR`J!Z4VTXzCa>s6pALw<8ZgZDgRrz+fm!Elv-1dQ7TSm!b8QtbtB)m&VdzWuL_Zfcp>}P z2dU9L+rd3A$QXu)bg;klZXzJc(=msyZ(2(DJ4~y*$wGCEWUi}^bmCf^k-xk#8DwpN z^s6*$+`EYeZSbnJ7r@4zyiLpW_^X}JZH_8%p5Q~(LTbcV$$@5+R!4Bw9IE3Xc2K#y z;M?hGt^Jt;LvTv-%FsQxj>TSPWR}kB-_vz18+Ko7ThGZo) z!TvFULyj%r!LB9|Te|S6V$sr6z}8314fe;A)9|2s_7}Q5s#g`{zX{(KxPEwaHhh5n zobo-6hff*5V!TU;_CaX1et1O&y>zk$eyq>8Y{H8V1g|gZELT$zJX+ODlYRJY%q8N6 z&jU~u^{af#;C{`vtVkq6*t@f`iHlMns&Irh^+FWIP?-~%E}}loUfOLY5ve+L5g#66 zg|U+`pfO6sC+@)PEsTULF;Rgzu{^-&&*bX=$(h>gjFen~eurw{cazAY zqbg#^jxVve4{@809QHf#{lWVgB~U`c8z40;=fb%`^=m?p)&H{tREwrf@eR}9A@vI> z^ZLVFf=AQUq>Tt4LxN?F zu!WVV-y^Nxp!xyAu--cfJ8HVo`xYt;ZW1jiC)u;bzo%bG6ls`xT}GvmEblM)`D{-P zq=v-(5$AxsP2XQT(#0@}nEX{^01z)EXyl3xDW~d7A;BL*diGd%OH)=N^Jo5N6~&Ai zK6GM%Z{&)~Ie6Q$jFhjNgW6sR*sLS9J+i1+A~#MpjzVlWomYb0d^&20w)=R7^ESMn zk=Saf+54@7T28vZH43TOsMD5 zG!cu38Q<6AX1vC4^18xOBu8WPuef4v<=Wt&uq?t5&FR||6Z|Lzz9J*2eijqgO4S=V zM`3G*VHagMNGmo(b0CeB!#xNM6Gp;rY9 zEZS5-+E{Zz7NX+T%D2jKUJtF!6Ow=Li*IWr=%dCee!8b3EBJdkp1K9XnBz)X2$3pp z>Wiz+R|js=>jZZ!ViowK1k$eyfA0Q{RbLL6@CfwS9mqe7*LT!P71E^PkpP;-hnUTb z@y5mvx);l;LxO)TGPzR?e~E=~i(>3*4`+wGIfmpd1(I^DGYIv|B9?1-7;~Bk~~b}P+Y|5b|KC+%Tgm| zGh$Gw6<=91BH>LYagiNKGz!WS1CUe%DHeF?txglFF)DzSfN_f5UO@R~uyk_mk+Pgi zdX=5e6f(!*;M;RvH(xKfb;}>?L4W%r)+%s?nDOQ|1mu?tz{LNsPZl&rprVKaXDs&) zFKOAXRNB#mN7cAmT7<9)4fXqiauk_A@-F7(s*D_gO4=l62&(;cJ7?IOmv=JZxSl(3 zmtGWh9hP)ubQDgYy;cSx)dt#L$#Dobe?e#ll}=Z(9;`Nl@eA_}9SrYSitqD6kT zKEB`}_2lF)f2F##;b>5xSwgcH?^9gACv&oKu>uM;LJRz--7}Do-ssOr$L`i@2V8t0 zcI8s|zU(m;QFe8lAsX5Wp<|pe^_j4S`}$szrF-~wR23E7=Jx&i%hC-~B0}L?M}RTC zKVMXn(wYH(9$~s;Y*Wl*_S}?6QLEz$Dz;&e$jPU(49UWYF@hztRRu9LoMBt|f$XtZ z&l%2srN>MV{C@kTYckF70W@HP43wbVIb`XO9l%`dLbjKs9a)i>AB~tP<_;R$%j7uC zCbYNeOBO5I5>naykibou*aH`>@bB8c|NpfY3G`?GH|r-dIb_Sa*}C5KQh6yOif55D z5{l)TO7uwbEAV_a%a{dprh#X6f@(szrOpmUOMF|ihXZea{VmUZ&4<}Vf)f|R8OFtV zje^E34{de#C6O}?{4JRAcgfKMNhTDDE0(`n-%fvHQB>9Y;r`LHtn*nqBcbiaz@CdN z=iL_0lL_O>0f2?dgclMO$>9c( z6q|W2q;*=5ABLwNGE}%SBoMpJmzQkw<}ue^4a~hCOspd1^@&{0`!v$8amVd7o{)5j zs9`HXga%afKH(@pE$JgiDeRR*r&N?sXhgHf_5!qcF>%Ntb;H@%V`O7nshX zhH;gS9DY)n#hlb*9=O58ol#RCyTZr#H?={swkz<$nK4g1wW_XR+Dbdz-;a1e{7&Bj zT-X<#Buqq9U_h^6@Sb7wS<;{%FSMO*?u3kKQ$BIKb@9H3cbr;53MHxEv=m81czq!I zb09{jC9BM$+<|(X%H2iF@+pW_>Z>;Qlh7P(22pID+E}U>D-|qd8x%y;)!B;vn;&w6 zbPk(h;}w(}?|8Lp>X2{FK6Mj2ul~#~37ukkZ~|g)n1^lre#Ox~x7B$iBxE%RuFBJV z+sgiW_mPmkos!e{=*tiPU3qYUoNdN=3r_{5J^UP~^}J^FSRe5nBR526lX*2yVK>!Z zXK?hh?%1D`j_HqH-FE0r#PfH8cFS1GWZhC+s&NDkff zvQm82Zg+vjN*yy^!ygRr6D9bL@DSMtmKGLDwP==kY#i_{GV3Pu0VV78#Yv&z8AJKN zq+1k=P%@`53slQS7#Ttgh_V8pAT!vYgPaOrsx}>Tp}C)iQILazq;S@D%PpZ;?HT-` z$g&k93CMIZ$D*jOK#CI9$!W$;qM*wc<}D!s)RuvCyu%Mb+rRR1)x?5b2-I5=xj!Cy z?NB{pvU4KOkEl|rO*JWX`W=0hEee7c+%fliT1Cumkc0}}kwBo<5JhONRhP(o_u23ZVXpdh{KZ7qJq{q+EhYRxgio!>jNF_(lKF;z+7dTr7#8F zF64r#-SNJ@@6!5*du)ouu2g}ew)7p<5~{}NBvL)2r~-%0`yO+_qkSUt0x?_3JA!X$ zCPX~ew|ZTG)G71k$fhN~rL1F#yF7N*NrG)nk-Cb7RJ(z5YT+Ywae|Lp=TMgC7WKzvb9%Sh}r{_cTu>HK57 zQj7lBuO=a8;x*2{lpb8vpG!La{d@1TGNJiYZU=G}@Gu`EEbu)|P@PwhqL$O+QAN@i z<$ZGg=U~nbO~i~KL`*TJ2)hgzy)1FOHc`Rmp$jk72`z^=tDxFF#%Pq^Q6aoL>>T;qg!J%r7IqAd1M-nTHR;!ve z3u@US1udbWMAeiE35GZ*HnG;!N+C5r&?P3BnNvMgv0VklW;+7K{uC86$&! zth2GN!N4uK=~SF5JR?cIOvkTHWSP9|Z&q4iP$239FS(m#$iWPWFmjppBBumgM=8d_ z+~>QV!DdXl*}AcCwrLi$YFtb?Bpyv;#nPGlb<;*5#eipLpNVwk*oXGFlL!CUGl~E8 zgqET{(&nzRq4`1qXil~7de@3D;beu-L3HL8-Dc-CW$Y||#9n9!X!0z}Df#8Snj$2l zmgcm7z0Kws)74YV#HkF<_<`_Ose5q1_lL2O&66G(9lNNq4v9<$>-67>@y8h@+=LLe zm9O~BWtwk;AOfUZ_b_avm`~?#&G|#U+-rW+Z^qGg9{%N=>FV?6b}~7*wqBBtL<|A3 z+Tk1F7lgj-*B!c22M@Cj!b68}%l#xaK2+s!>aoqGnO~i0Btw(?Fq^O;=j4<7h*Ru& zV>}^t`RU+cZsj0`RRK`*77n!r(nuZuCR3P-L5Chc~}2t&Hl29{2F@#pe<@cgdk1WOSE> zy5Ji?6ah7vn`n!Pgh}ciP?AAzh4{%!)o@$mP(9d==MEPXp4&pygG=9ha1;9AhV8!e zbh04xKGg#@e;IZ7?yyam{+{7a3U5+)?{_K#?8MaV#a_!uVa*Gq8!8YLASWO^9fyY^ zBaIjwo2P-7w;Iic;ufhi)TlkkOHefaYYU|bln4BuoFn?b<9Qr&6Csp;*K!~B@gR9tfXUMR?_giUo`M1;Rh8MCr~xfj!u2*3jE4B!HZNI1=4+P2 z$h66d`}MYRKv-CoimxB=@M;LQ;0@?u2nW9=cu11lJ(Ch8N2m)FlwImID0<4!%^68W zR`~r5Je1Rkl2*(=^V)wuG^t>e?#bSHy(u^~&I4~-AJ~4@1pW;VVq|Z1=f_VBnt3q? zA^j$b2C@z@$(eTL;nTFu`sl<5UTp<(O^k)j=?%9zraGUX`JA3n=BW1GFKFqn3G;JF z8MXRJAnLfT^0N{T@CSM< z3;|ft?251Dr`NbSj4B$=$Q}KhP$$SDYy~K%vrIV4Sx~z`K8-XgkSrCrgkjyD(aE|l z=q``parj0vFYb0H>(U*+C@kdS;I$eskTyr~@Au`^z*4sbKNBh|4lv`YMJc*ik?S*^ z6MgLKJm01DdxBQ0^%Z!vtb&)6-gZJwI{Z-mDPMCamr7gATqi+kg(ilVT)dRqZl@f@ z;Zl$Xgk{(K>3D9+M^bvZ5kH#>@u08b?^S{q!oH`B?T`b3B82UmCyV07Qx6-R(N^-b zIt`ZaK3}l5g1>(ibjVgIQxRQ1xo7^7+Z+QJQSq|5Doq{D5}^3Yp9!J2*4zwZYn~mv_- z^c;>#ZL(_Z{2dNnh1FA-daC0p?ENwPbX7WyZBBrwCNl_|HzL+p!^dS~dGy8FbivxY zD@B7~iYdYqJCsAgv~U@1?wzsRB1!)P+^XEXjxb*RmgRYGcZcJ+aW-D&M4Sk(rrc8m zOODd)SGwb2zo5td0Dd$tnMd!J;V#nWnejke%5Q?ruUki8gW{jbt%O1E({QpUaCUDk z92ZA?o^srnoTR-BIyxGJonE$kZ9mKK1m%M4npe^s@rCgFdSc%oe1xs0lfI1GvJov* zMUn2qB5Mp?atDXxdyKQx)Mm>kL9LI-nh^SF^)y`Xc7AOOsqs|jJS`|J)D|no;JUx| z1ahLs2Qz7B!$nZBctb%cYK5^CRQcmiX9Gyi8y+{Jb!q;V+BrnIeCdy6MDacB?3d_3 z<*E#Xk}eEi{2eh{);k>Fr@i(GtNgdG!f%yU^dX0Ck2HoO;U1G)(}ihV5gQSoT+B9IJuLys&)zM zGNR2ac$!G}7Nc@@l@b%s;ood&3*_k6I$OVXV!^bMn<1ZHeZWvVee|-{2y(Hn{mTwmwBe3lAD;9CQ_Uenn{oRw>@W)7R5ZV9)ssQs-QMop` zy}C#i&|xNKe_8sfIEZYB;{puuMLTMtCnUOjg2-ovrhyyValPkg{}neF0W2FPRkVO| zE#LkwJ+R7F!K5YYs9c9Nu70P@-R}@lpeG+MeeDZJaxB)&S;|F#iM4HOdSTr~;jI3F z4-d)Ro#32?cT&?=V_BqT55bI!aP16ZRr)@72eA`Ma)eU=O_7*UpdJw`bbQjg`YTgL zb{<-0=fUR@RTuB*7(tZ~GVhw6Qb_hg+2^-Af*DE_reZ7btOf2}+_ei#O<;&Um~2q zf;y5JfcC9pQXOt`c8{cZfa^Y-MZxNTeH4KN7jfcKg{OF$oT*0M%MBB;IaQ z4VPdM6s0J@Skla&WHw`|uO+`~q^n9rq>%HzPv{gD-L-&X3a*Lnd@@beQ6l*&Jgoch zW@|x9vA%Z6|EG9rq`xFcEFGxZ|IDZ%)q@Xw6=AJW>w7u4qA7z_OBmL|;d3RT3(hany4ZnRRQj!JIIBeW%pU5huO!+t&T2cx0&9rv!opjKDz{+tv(sRJATqTT4+~o#hFKkeE zBy5V=ceY0;(+_{GW9##`?C>0Lo~JUlGpn$wEV1Fl^%qL^;J!Tj_c3A%_aCtZrIp-H zAQnFh))B~(OAiDwz63j=aWU*u?ZZcC`~O^$U(L_z6S2{*lU8pmIDYYobrqlKqBRZX zpJi5wZsC;~u_~9g-<3Zkhqr*LNhA4U#ZdCfS!)cqyj@xPvI&JvU9|ZcT*2os@z0r` zqjWLIOgqubWRK)13^MTNnLc1SBJ>pqr(gjg5-&PJg zGHNY@UVri0mg!2h>XbC7_+3FXmv|w#yy0pR=}exm8aUN^WKe%>GQ_IG_ z)x+~OH~N#@M7nJ(Zpcb1{e}n4D<4c}h}!e>PgOi%UD4f`P% zf$C>Ulr)P!|9N!0w0}bSi4tDZ#MdA2K35`M=DL(igVUoP z@>u*O*zMiBbG_0dc$728oYc2BdO76p0}MIO0SjDcYZ= z85B6DZ9Qb8${W*F_kecH01alW&A$9gAS!rhJUSq6**VJ;Qxj> zMjc{pD(JnvN2paoumUke1|Y=ketGB-(eR?75a;83N2s_N1DBz$y03#&WJk=^TahvO zr)bqy)jz@7cWClB)Ru&1ylJ?YZ#x8}3?2LWHj(}*o0$03n7J2Q+ z25$N`;Y%{QNRBGo(omBe1cSyui=g$NmzR9l|G3fhDH%kHJ0qugv^Q_Zx2GF{4=Jjc zoeHT}KaF>8lf=mxGu^z=l(>fr{Q-4GhUBfrZ)1rHMhY2RWp3Nr9uV;03@hFb1O{gh zL-0NQ2H>+IP8fFucP8B#G5%Z^1K__AB-ir!`Ij)zjKk|*+v;St0^B0kbw2DSd zWD>o37k=?*q!0x~6V#ioRT}*pf7$vu&-8~=##Cx6)YIK(sBt14InCVTMUsbxzBIfx z%~7GKZvMEoSn5w4P8#DK(pEp6W~;Q79WGGNoZ=Ux|9Is)IfCC6;3 zS9*5~_OBSG6ji*`Ywf+EC9fCS;)BUFYE#yp`@1G;Do(6{>7^(jB#OgIOaM@an-iuO zd?l7KQNWWG;g=v&=3B-qal{AE^v3BS7;4B!HzXT2JiOalB%REFvMbKcH-2MwYNLw& z^||L?gbV(E>K^9n+>AM&Flv|IMTvst;_v6Rtzzoq2VA&^9Joz{K=KsFD~isNNjCI* zZ8<8WXPFpce8(Kli~9G)G;rq8oM96(!u%g>2Oozr5#=osis32_;@A| z_kEe{-yEL6e>pshU?VG@v7Rtt`He>#k}oX8zZ_vqaO&z(ntf{-h}N%AYC^e+w%{je zi{2i}2w8b39^PkYkFljo#$WEtp(PIw@q9eEEzSMdqb_vM=y?ZTn(u5Vyvp%7>vAr7 z{Mf?rCDh_hGzpW|8V=~nL04yQDws=Iet+)u=ZeueH;NmV62J}9#!vpeX^_y{yc%Mu zzleofp+3ZQ;kRD2m#Z$0-Pr<`k`@kT9M@2I8{o)cLKk!Kv9RQOi(H2HXo?$U`sF^) zc0KJ~R=Jel$!$&!cS4aEAB(>d#oTXeMpacQul(96KNaN*t%5AX9F08zcr~f=SQ)3w z_7C@wcf~WdtmUelfn>%6S0uQaZF%u1k`ItZ_sA|tw&h8nz|(W*xjU|+1|ZAJ$2+kwlNRa4Da~N_hkS{xGy<^OA)V{O%-{^3Iw-f0)&<5k6KN)kTY{_Qdop=Hw4jyO&^?EzCp$=&> z$xG*~8481e%)}cj^0#{d%b^O4=fbPipokiKn@ct7In)I=>0yX9oRoDxBOikw|B2ZiU{n_sJb4wUw{R;3JWX6xH#CMi)_ zAJ`9#@TvsVdQA*dbIuAd)M&MS(WEJ8i^TCwoQ6Ax3$^YQX^ENB@K>oIlR2Tl&G@_a z<{rlKTe|e6GiHte@lUt;D}_AnSuI5_1atdwWS;3d2@U@!aZ-N6 zILn0j)AeCZE4GoL+sjbD4Dx5Qt7yCS$-FSF;__So+dF~(sf0X_oxVupcCw?*{QsDG z$FR!#?+tXaZSQJlPM+-A*>+8~ZDZ%jHl`-KCQP<5*|ssK=l4J7y3VWp;`?%4pS9Pz z*9~7Hgij6dlTqTrwc+5Wp@(VM`e49*&-+x^=4+F9H81h+r5=A=W|nOamAThI3F2sD z_Ukh-9h$mK_2l`BA<2Xi;?a-l1Rvck{8i=NV2rxSrL0-xZYC*<@!wgdxK39itb5;L zyv1+rDJ@&iy-8%`yS5*3C}MiL7OeIjFIq5vaYZYj6D4@L4b>YcyF;}}BFvIsW*317 z#yP&J`);MPf+VcR$IRb!m9YyvpVDuM`PAB{u)Qk*UPqGSS~K^M#|Y8-t`O^OG&w-1 zFj^`FNou3@phg~{G#fTPvq$JRgZ4bTxS-I_BYvkRZfVbJSrLXSgTEd^=D@1vPH~1# z6Z}}-KN1;NGnDdeo3c=5g~`w_efysGDsPhLF@A2nE{B|R3fNBw`%*MnyZgQOdg{(_ zg|N;{8)RB*SMwtD8hI^(RD~vAPKKF zs`<{Cvu__bgNKFT`pl|C%nsPX^dK{0P4e&&g6l=MyXh2Aqhb91;`ZNhkh6FX6~6i6 zC2lQHS`>3-0%hOsrxcONzQ~qQx6|aN`d}z3ka*XKUQot!&_12%xPe1poU4h@H*9(W z_6B|lFh*7NZ&MD2Me5<>hJ6YwB3RohiH`d{k2TGfAm!M~8RWjKKH-udHi zILrzq7R-t-9f(THiZlh?88L6eh>YpM-EqJ#BuGz$xq!K5SJTaVh2Vo1l@2WNRS3h> z`tZFYoRo8zNnFhLGCS}}TIEdnAi27)vYd*3q#b!RUq778dG%k6+Hypj+k zN;(iqy_X+J+?$UlE~)uLv_;nyC)SFVP(Zm+7XF|UfNweemquH4diqhVQ*(#tWdjZO zuVI{PjwZ{V=b0$RPO z9S_xDfN-5|Y~RgeK>Shy^bl&`Z*s4EGqdM|5_AliK39<>_&tNfI?7Pz>Qf|gT>}vc zPK+Xp`xA)cU;@(huG)1`wsq$a7aqy0hkq>T2Q7EJ3tn-;2PY3)JLCnI&e!vW29 z!Eo>~vtpyd^jGN8aI?3jBAKo#D^13tnC~G2vLORO&l~wRl-jaCzZ#KP%3wW4oI9?& z$|YUQAAcxYDFNwddmxS>4N1`jBGqB7e(>f3F_TZJVdw@!PO}TM2HtG&5#qm6Y^?By zf999%?zgQGvysTpezpc4cTA)WJ*mWFVQ}QvMS!$X3KC}gDX(3Q$_T;EfI8vuDf&|N zhEFH=%SCT{22C~E;O{gFJGKBkJ&V#VD{asj52jP;YrX)m~j`0Z!5Z) z5K(Be0ZNfYteb9xDb0G)JE&a|b|DX*-y}(B5O<%rdXTU;vMr*H&lNitwQR7@nhmL7 zrnH6o$ zEm>0X1|7#HK;L;hsiK-c9nw<-1Bv>YdMuQRUk2jxYDJy?71W@8ziI9Mxod4CAGjrg zH||P*SaY}OHD80^DT*h1ItQpZX{iw zPC6wTkBRQZi|n_Lm21gqwV3#pUXjxs$NZ{xsFo8YG2$CP2|;_!^aLd4cj1@iVD~ZU zV!xqKZa;Glp_FfvmmoxfqD3N?&4XMGvY)^~U6nFNy8-?sLD|Cb8n@3pBKrm!%pP)g z>^cTX_^!pLISU+tAmRC=cN>3hVz`=!C(4oM?L!ph{r@1pDZKxK{45Z0bxAH`8OfAu z29Atz*N;rnBajDcjsk@%QTWx8M1grE<-R2*y^+BP>x7J*l*OLRdHz0pbP$_YRn_nZ zRSd_GzrVI=0?z@G?MTvJJr%s*k9kNM1pv~U@yo4 zcAgFk-X2aBWYpP+hb`nV8~->Ix4PuP{%jSLUs9aP3IOVnlN_DJ8VFPwzGV-{HAev9 z%O@pfDL0W_ap%=(^Zc=##f?HDXVXn{Up?h+pgtLwg0a1e3XpFom{IHKH=o`ds+^M~ zVKe

    uHB9pvT|1tCrszqK5*caDI2kEG!V{b>jLi#Gktl;Vm-t+|GEw375#K)t>N z;9xZ@_L6O1;$&o#S7+>?@!gj3r-7X{&SJt*AcFK^$v43Vh>!z}A?*#lh9i~>dr8Hz zwOIcbcJk`UDY57KrF#2ae7K~=`PlU96Tk#u#rwYg5gn)9d>#tkw9be7W##DpD|UQO z%K3bi1^kunXne$?!3qBS;7M8lU`c?Tr2x2otP|Cr`<|+p7y34-A2ohp@h5;GeQ4aS z*S@N5cn3f=SNt`Jc|We&m>4Ovpft-aR;J5Nx>3YD>O#Q%dxh<+^mO_s@h2@Q;eX3h z=l?5ZanE6snA`rfjSvf|veBKDP1nD+^L5+^B7JC5>?bCXkB^=RYA~(oTQ(_CLP~X( z8MS>z*xRH)X=`KBj|Z4Ygb@r>983+lnqMe@Pc4{I&~)T|b+`8C67d<6@Bq~&2Mr{U zj$`|WimR&f^av(lL&YDdj2{&A|3Y;jG9~8D|E7&UF`KvB?K!mdTJSA)X!3^jWk&O- z%`~_DsMH<*N?pNClB9DpE@TlOHTI}}A3}xN(P(7i55OepaeMt&v$+l z_%=Rn3(C!Rf!h%BW8=W?D56jsBf7R%hBC&z_A84)jVz)hj}zu7WH^{$NSq4n1Oa(s zb0qtcGl!i~0-xA-Dncvn#!wmzU;f;+@K{NWr6-XkE|XhXkt~r94nCjQTKL&;+`P}k zOHT(@M*`jC&OknaB76;yuW&c}36 zFyHDTUe(Zn&s}LF1g35NBfC)0cCoE2)CdhDgK7C@@?To~(p;`1s%grt^kS*V~IU2BmXaX{4-9EL=(!+sMs9iA1=JO#6lK_$0?u4GsQF zFJSLjwI}cYA7U(p@_&diyZG1=72Q$Mb~Pb{?)Uz_g=nl>FA=9IgL1}k0F(3{0i#(m zyxt;rgj9hF0uJJdet0vJmdMo3AudhT21V9u)y`VLC%Yf&6CeK}3L%gy9);-VWMUC@ z5hI8tA!gl6WDfVWzil8TUw%W~QMY3_b)g!^XI19t3YNrohPKmrd9;5kV%=QM#Mu z&BFAaM%8-7aeffphTTpddDrBHmZx}WbLFs&G?^KLKQ*Q~hj7O$z|fMPbk~c$zP80o zbjx8usC3zIf~I-wZ8~h+Oe^^B6*Dkgaf40DkV_C<9>4!+$zXP>g%3iBDt27eKa14& z=m_{Ol2`9p;2>wZ@Lh%^*yv#I1?aJBS)6>EBb-7ty+C0#cw_2NWDU>?(7Qy^h60Rx z?-|dm4St%#%pctj0CRUJnD!Lz!lK>P;<&-$E@>oQDe}M9a-#nSDl7a4D*KAk-c7uR zKZfr%NWKjTj-;~9Yg7HatAK-!(eH3?LwchGo*rfW%M}OW zI_d!C`nT_5RigK6{mGNC{l-4TARG>qeGe@XsE?7$jp+k6sZ@?mgVV2z1_ADtn^6w1 zRN7GMBtO@S=7K*cTdC!TL`!C7pI6osdN*O;u*^*FngSV*jQZz_UOA+x>>`!TzeXwG z0g>-B7AtKlydUfsn?1z*9K11;r(s03BR?f;g4Yd4CdaW5QS#{){tqX5yh=wMNx3Q6 z3?1#!+9^%ivCiqXgf~eofxi16V*XG)$=*(LnGtu|GIU8LJUKlpkuYT02(s&Vk**wtl)+r{^uQjGr%_ZyFuSR=Ug^zUaynfM?^6dRr^*4aGgw+ zP$d~z+2tI?@{I40tU}wJ}fCnrVA<;S!FOLY!?TpL_n$tl0RY+;p?HMfciueFAJ%a2|& zg)Jvc7Sf3Rgx!rb{PuxO90PDAxl%x0FFken)jI4c=ToFc zN^h}{|M~F;aCu%*lsJF(ci9C?hN{t~0_~1l`I2zB>t+R` zBl!WMhKyfo`ONjve>h(K)Ba-A7oaPqiCF9eaH*`nram^|K>Xu(ZM1^NVcTr}(=IDW zoOk(>m~#1R(bsuCVN8>0mhZO>JF;wupYD$DIZF7K#~IX2bRv+mW)LBJs9y^)&HygL zzI~seBj0#YSDg3=yV0nC27om{MiF-HvHuzmYFyY%MkC@rx=8XDeX~yik{5tC_qGjX zl_0n&tkp?6ZD-1^Q%k6VCRv8^^a@H4N*JFUXWXRI3cgz-ugZlScg|&qJr-jh2c>ZZ z0%|4u#jx)5Vh3d;EACZmZZekGt|V^;{w0E@ikJ-U!zJKZ2>s)x=XC1dbpPjYbBX@n zY?FsR2}bST?kxos^nZmfP2>m*0#aMi1mk)>EDBJgZZq-nLRL4xn!&=8#3`D$Ah)-n zW9eyJPw@0yb_bQsTVXn%L4_q+YPZV!HAPs!g8N&hz~8{{@ZsHmElOQRi_0eziub-SwPEk$pG-jn z#M8Re#Z#^fw+FFuXD)^^fBIQ43c3lNqs4f-Li}PVf&X(%2jX(Y>HV!a+h*n)d)2H^ zZT~6FBRZ7%7AdLVGQG22*M$G)?=rtO1scCg($P8juVpZTVm+!c8;Ua~iK@OJ?dXTC zd@lo4+ax}B6pm{zFpo;PXenBp@}kTHxURkoHy8vajkBDrW7>0RB~2I|IIXS+(4&1fC9D zcvW+PsM(K6cx}S@c=rf?dlmXheb=R4DiVix{wiP9_fM{je5zP1>a_ig+`D55pF|8G z?8``p3^_jj{Qylusf==fbcb%fLD<3hg0Qt}Kxh(e*> zbtTDltzB71*vI`SO-(T3ch->O=iVnAAkCw~Dign+*ikrbP-KV~jMteMK8x=0a=Y9= z1T~)gI=4v~C;2W8phIs1UuUc^3P|C0NlqOkCy|jP2xA%&r+VSgdWNMCG7iv*U^Q&x zcYtmBb{7iT4Th&c09UR*#Q6!OhR9$BHPm(z`q(xXd1-~?bdlzH4kFU1V~)wxTi)o> z6;}9~Dyv~(144|T*Rc;0bRXAliH) zU0Vi=J8N2MkzV`NIG)Dx*^zDNlDyXC#cQPM!}M8f+J;;wcRDknM0vqJ_qoJj*ohbV(DDdy@V$IRRF?AhrCs@T z@_h##6w3AC)y<$Y9-Fg?9GT^%7$yQqOj=13#-1E^&+{UPt=n&Y3HIQp0|k<72rPS$4iEY(?kDyG+L)P3G-_#y^IV1x z*Lv6}Wvx>cj}!S@DqJMQ`Jk1MBKCUncAaaD!5lO>jYTk?vYJd|FgA^RvW@}PF$><_ zXmv`tQsw@8!X4r6BYs|z73UO10?ez=Y@4&2^@fP=9>6YKD(T{)vQ~uwLz8^fM2gp~ zoz43`IqCNh9G!e>PKR5Wi_yB7457E^7ntS@s#k*A@v+QX7(_mbn|FQCqsRJwtM7sv zwz2NhiqSe58OZyw*?*#4A(Lw##s740Ky~eh)9Oq<^O|Txc1%3;o3#_k58*qMg*ixI zGUdJFCTA>yzc9ChG_kmIi%9J^>6rP!4HF(culN@hHz1T(a81ce=N2idTwCfuKc|?j zKqSvOwT<+NceP>idrjDZP&tr=P#&|qMxqe~%4>1=(zWLC0ZdwqNES~H{NVI_y zvo;p2ZiT^gnmdPJdo&EAHV(w3G*ClUZR0w`&9SV;BJ?FY3}Nfb#Yccl9`+K zU~SjQp0FLQ8&>b--{+GjrYP$ZI~h#vMy^QwxV8&f3zxA8s5fiE&LG5NDKU{4&JcV{ zrk7i}$BdUcQ}22;%Ix*bFF}XMmR})WW3*IHcHWT4y0#PCSiBA6?^d0a_& zCCAHa<^6m-Nw(WBE@j~cfBV03s23Tv2#($tW6Vg9Uzn)?k{#{SbyMTWRXVoWuxImE zsd}IDcVWYa@zElQ&ij-ua~V#^cgI_Z;6ZvcKvHez`9eXe=PRXp#wBp#MZ;9g6Br!s zj(aaV18%FEY&%tPRw<&MRh~$4L#4PUo&7doG5kf4+b^+80OVw6YtW=>fd)I)kyP!F ziCtwiy?AU2yKtdNtvrWXircT}I$s@W)A2e>rdMLLx8WBiMC=0yT+&t2jxK}Dh( zKBQhg1RrgPy&3cvM$K;p88ebNeuqPfOE>QAcjl>U)*Nx^`^&|Wq${oV_oay^P&qUd zFDsA0pBQJ0hdOVT8G@w@-gy0sLe0T$rm`A1C4HJ1FI77SIQLgUq_%|NPRs#i69eW3 z>Fd~uA5_iuk@QGDg)`9*7eUIcv6JcVhjvna<)DB#CE=k&cV%E5d+}iRMBqZ%)sg2f z@D{lViRN;TEOxL+^{tsmQj(;%CdKIb@>d!KLCzt@76bsTFeX9W(V^6m^-}GU^o^+$ z_EZ0f1BUXt(+%Bzj2y1ILfm1TzC7rB+{3_XN^8rW8`62S zjW5`hmsvyqGVZ361Qas0YI}0)yHd7~@%h>hF@cuw!GOuHTwIzZYx2Y*MFCH`Zl+23 zh4k=pib$T$Q2#>u#xysk z2zWk;TRJVd)Plh|c~KuV6Z}g8Rt|oB2AljxuEM=x7tto9v1Zf3DkBuGd+8PBnZ@?Q zdk6O_!N%(xale+7A{huEDT>Ke+KE+5*$`84jdNiqvA$O-J%r^koH8k_7v_kB-@nxS zf?i2ZKd#C#jP(n)yc!%Jt#FflDqP?#>r4Y-tO%M4DoYpPFMUP~cp9bN{~m)1mH8pt z?xAQJN1i6ql1vF@w^meCSOmQ!IF!e{cwRKDGNOb{M%Id5$D`7w)M`hIbL$U!5g3d_ zC8Mfu&ZcuD?r`Epw0*I z9`c_7<$A1A2)Dd>Xqv2ni_Ktd-QX*fOS6Zfq=T;{?^;@=id4 zm{S3%Xp@dW6~Clr&!{+0J&YTZzkskfJdEJ$@M$n-aH6Bpo6Uw+128bXh?tD-N%(#* zmP{x7nf~35t7Xy5t4+Wy4geqQc_R`W4uIc*6h?yf9MU@NV(({+GmE*)%}cE9W^_ zbC9X`(>|<6*lpQ#RJ=N`5PI_}om|_~pbcCI#WO=5P7Qg#A2E#FadZsjF&{&9nm&ztpZt>rIIyZ*637nh5IaAw=B z3m#9KYm<^&$j;rBBX?>GQnFtQ9CNuClmH4OPRd^ZCtrGfrJ(_wcw z{oD*{g3f5FyX3m3?v99JeZM|I&$pBhpN+%uOtGlAM`e{Z?L9L^+

    %D z#$FrJgF%s5YjxrGF0Na{#0iA}(<`qnDg_>cI9AooqUnD!QM|WieLVb8W(NZsjeJux z`dqKKssF#)cS42rzl5J!U(xZBe}mG3ZhTB|Wa(v`7a(GebzU%<+aM$s%}cL3w%O@4 zImozF7}Nm{v0DEW__I_4Ta1rG0&Vb&q0M1GtYcm9QUf{Ovs;`b5QlR+&Tzcs?Bx!Ai=%tVI)IelQP)qlR?( z;Pe%J>GT>m(&}IscM;!b)}oO#P^-}{pdF>^@X?K8<5YR*(P#s0ozFm?7i#O*K4s^d z_9yD!yRx3DWXKVF6#>`tr7cyS)yb!>PyY<(tn*Qq#Q-<{GM8|HC{}VhBo5_f^g~fI z85ug&PiP}K?>*}+orB2cdO5zDf4y&YXexsB=LJ!GMts-TWEz?DpN81*dGBMj;{rTn zxSA&{s3S#}6dIk;Mh3%^1B@BH`4j2^7TMXh8cUgqJTlGhf3L~)tNsMqaL?!H)`*SF zCS)EA#?6%IiI_*;7YMTb5ypzr9A6ubWO(1`^x^2T-BHOnVWUXxDlj$2up*lzAQ4S4 zSWwhIq;zNd{HP{NO~uGN1ArQnTwK6GcPua)JK)rSy8jb9iVzHlq`~{_`#ag&tBXH; zpY}b*ran%F@DR$$nZG0fH707pJt+6@l%h=o88c5!x$?jj@V9E!pi0R*c zi5j&jUY9%>!Ng>iMC?r-giX=T?tEG17*JqvWc~pD3fPP~@H0P2ygaJ@G7{8u`JI!T z0AqN%F=l+s?9J1yhs#)E+-+!B)wM}|DKL56vnTUPaB6-_vrEN@0{PqYOpw=K4lE{K z)UJb?Wchsy+}(?JA9IS>Uk=~G{h9BKvTdM?+|L$(&L_`iOQ=gLybE{T{rH?D6K|o8 z@&iA=Kep|4*7dczUYhRBwde@pF}_y-Qe*OnxR}h>KJZQ_3-{IO5$dUd)0r1}f%)1O zkHFly0%<*BBYEE^fy*Cd%~k6e&?5ZLkxdYG8f+s@n z2l^T5ZMFUjh>%Q}aepJ1G#2JHlS3NwNz^**8a+9pl7F%r78jaA2%_qIAtmAa7fqc+ zEe^0tzsD8~&p55m$a=AdzGayyTi*V*?K?iq86-C%Yii$y8YNMn+;_6T)^8!sCt?3% zg#F>ppZY~04ZK?-Nqc9W!CiD@o9I$LPj>`JKaEOKFbnp&0>*TeZV+|zaK>Z%34F!? zha`8k#pQ%T4W!Fh>*ODFJPGL`J&g%-?N3Aqh=kl1u0tfuSAV-zOQ7oTKy(%vDhL%< z0{8?|MCBO5!Siv7H}9;~s>ZG$|J zNUfMxAXaK5AB?V9NryK6dvUP~-vK7ORb=T==caQ^3~-Eg++UnB$7^P37oIF{{p zk0rNHP4xNQblg^d3qyLqK$K#c|3U$&T;?>66|g-mxhYN^)Zm42#|carCRizU=KGSP zB!ZXvqVT;n)`N&o>#H_Y~FEASIq&I<_w85jN*n#(y^$v?uK|o}u2g_GK@V>;vM{R=dGeu)V z!|rfJsp&=rvuG;+a!czGft`m=BV1@uJOQ{v0Iz6$7DA~Q^el>FmX^r352(DnE*-so z`4Q=^gF;2Z>tg*r_GeL}v))!b@{f^4Tau7qO$YCfd|eoqUyT%?vO_gl8Mb+N+3dV{ ziEurpV;NkOCexzpcH@5li+M|)gzjS>zM3q!L%l4TxLf~Mc@M!;B4&G18zg_0FZ@

    8Cv(`7-_aLXMPErLWQC zRrXYGV$avGphVh&9HYn5)L&HypBs<-cuIgQoD(S}f?42Cuy-&%!^H;NX?%W*KcKU~ z@ln5Z)j96gO4E(p2PCRpViFgpLZr&gX>Fk*^y6cZxjasJ&nXyZBLrgiyS*gUm2wKc z2_pTY8$UCcs)FT7mPcm(ZGvzi`2}y%FrHwaz8V(v=&Z)KNaFGxe@almQNKPpwe3IS ztb0us(3V|PCINIGq|Z)LlBzd7FwVZ9R3+?=O?a0aLP404;|eRtn0Ndg{a!fGMm%;d zTC&jFYNt9DZe?x6^bx+=&fa55{$yj=r-^CQ406Ni0#Q_CKB^D+mWpM?$gNlLWh3YF zy0>oD*3$uUyDo8Y#oOP3>xrKki`heE8aP$!4T%=-Xo*u((QUNKcKbJK;M@h1$zz*d zk=?Y=&Yo`scy$u@kwf^^bq}oaCRYq7^8>|!ISPP(I}*e{F{O5`2sS!eti8hHad{GD znq|ADMP!kTj0=)Y=C!^{1BiR9xA(q1TyQPyu)8jb=$=?9o)Mb;%#(vEquEu*V5H%9qOOFgLlzqlm0v*5 zuB*f8ixTk>;l_SuKEsVLm2%14FqO+5FNbbd!@7g_+5s+{?&ghlg#_F6FAHMA)YNy6 zCFtmDA`5(BTsEGopY}X1EK6Fz26-NY8I}~wr&)%-WlIt)HQf-r(D%CkP)Inv+rE!@ zGkoS=y>@iLIDK-}c_VPpj4D-p+t^u zw|Ua6G*!1(-*8U3R)g~p6VY^?JR)4-z)fE#Z@!IFwEEfjsy6`itFiIyG|pBw7Dh8v z;JjpK5*PNPB~i{ZUaB&=AkXq^Fdf^e1Sls+hQx7dCw|LvA>?eBjA%~8%0lu`LWDV) z_RUvSi_~wpNt{M}_oA0OHpwlWAyM8fm7X%Q$vJ!y(9~k3#1GPw85w)$StG0$z*Bge zD11aJZ<{>TMY=GCcY$Wv$JulDAxOmW@em_`;xu?T5&Yt!c;eviDR^ZOzQ@_~z6Z)e z(x#xzjhs*7tnzsib%Oi#FKJ4+R{8c%{@rbtsNU2~=p-UvYOeQX6t@0QMU7yt@1q~b zU|P`EogLOotvB?-7q%Kjwwk5;2FIM-7W`n;+xSB%*9aRt={J)cLoHiMR|XdJaWNBP zoP&cJZfk?nchiAemV*9gz%p5bHpUhzuI4G@sr;y@C>)ZCC+M*Z;GBzZK*tT!Do>uj zWMA@xXLOPhA^Z!CZwSUtF%f>TwvaK6QB6&#+Jprj4ZE3%Z;c99ufak96y0Q1RKsT< zEy;Zw$LoG<<{5SOB9Ap!!oro3jn|p5%l-mf!E8p-mf4pNHr&y@IeduXI;$m~gwoIz0C=_A`r_iv9pa|DJJvT~OFz zpiT<`ohPB&C3Js-O}cMoLc76eieqmXC#R%AaVLCc2=;NB{6C&v$HYDGhXX#c%_K@; z726|7!w}=f;P-6qG-}%U?Y|t9ahXOxm<`Rs$~Sr?Vx*`)2|2$tn$WAGC}FR}*$#GJ ziaJ2N<)Dg5$c7iolC-M?SmSc3rMAk-Fy?Uwnj?x%I^-{J^;{V@OY2YzvJiB+7h0@C zpu;on7A4T1$l}HXn=0dzhCr_?x8ZCDwZ(V#!yH6E1u;6!LIQ&06QKw8l9X74HY^WG zym$hlVOu$@O367TIM^mRZ{svb-wv^ht$l01CIBP+iA*(2%jdHy^jpK^P77UuVV~!RK!>CM3Dq1a^LB8;5LskFZ$+ z_eIwFY=$%M6!#mOj=i@H2S+N7!1*~PnB7hST>q{h0HK5l>_DxgS`trmLe403axH1g z#5X@xSuHIFY-aShQoVU+=RzPq>yV==(Lw4d!0UD$BaMapHpf;H+I=La`0<1&cl9GT zv0UT2DofEA`5j+Nd0>}ZXf>=~I4zCNQo|HPD%hz5qSI(0JpU72V3JeqYU#u$ zXX#7cpK8mjtbX?kok+>13Xuwz^3tTJXe9ohwvdp+CR|8;VW$%!1hSZ`okEIHk<3r58&P*+@TOO(4#uv-X~XOz7fq3Zaz zLD-x;wb$ThEfV3uHRFp}^li1gs?~<+hbvKsN=uc=@l2%`Cr;MrBVYbygX5xpfoUW+r-zbl(cT4M^rqYC~6>Qb-Z)8#&x4%m+)2a>+2nAC|?ncUlMa>@wc|3KZBZnmefMGdP-x30$UAkkk-+_Z(r5GL&&iI^#Lv_Uk^u!-}MfJ9k=4# zDr**p=O2ZXBG@RHaeON{OZ8%c{}(2E2OxZJA1qF~>j`(wt)_At!bk5Z>{%$BNEu3M zMf~5bnQA)Bli$E1{Ay0b2-Cd3cKjV0ncT(%OS{IeL0 z5|g%OFkI=Ve@OUZv-JdcF1h-+EUbXT2+^!Q$r7j$%p0A!VrJ@tuLvqmQO9j$L8Vcua6S$B*#8 z;&WtS=fb_DsdJAux?igkA}~60mjqgiZZ6k-j0g_&m@$>%%mkm$j}cn;`&x*J<;xX{ zG8KF^GW>{##r`HRxq2;I$UciQwL8y)Ao{XvB(92u`pvHhMMZIE%S>zzR54jZg!lP) z5>z@p{OEj6Z@=$F8=o5}iT-TxF9?`W@%+BxAI$8C?0Le4ZtgrCKLBKMrg!Cu5ugdT zLgeLMJy&E6pqHRZqkG^UPOU9xdHY+H6UPhP+xe{;x`s!c`%BibwkC_0{qz(YpmpTv zzbi^t?uLS|6Eg%uIr-5e8mrR!){okOhXB16r){0P+wMib@yly%F$#kIl+OrF)h#I8 z<7yp3B0UuQibEJc-qH0!2+=_)pZ;Zwd6ac;TJX}kJYur80YAg zT?6wLFZGjz(87%|Z5MbSXqYBZsgD(hUX$z)|5`c(MPSI;|B`c6t*aWU~pvCVklR-O* ze|NSr;pJ)A|3(Mm;f5a_6}mMbwfvgXm(MxpJ^t_vCtIM27SGGpm1PH-d|O3liY!M~ zGBrQp7$>5V7hZN`1%@3mJB1Faa;Q}lpMEmwM<;>4pk@T~l-U-x$N4%oGfePc zsmOA4!LM;nslb)Cog`5Aigv+zYjg~Ptv!~Kt>}+`?B4vYzA4DVaQHCL8nXOdHI;TS zd5=(fwH3Gz)$<$V#5IJDzi8IMN2BCfoJ9z=P_jn7aRr6DneKtS~g;pR8ke61Tb zk({#>-x97lAwTR_DTCpBr6M4tH0y;+Xlb!^0>I04@kp{jc8O**o3Ob}}J*_-Mnw(L$9 zz@-jJ$ZB^YzW*?F(O;cgjr7t?=>;axua=2nvl!CS6sb*6c$Dazm+AOrSqnm65>8uD zDHO0!!0_VaEn8Gkl|55Yl%;pC6QyneGAqU2F$|MJoe!|Di| z6V-O;=GUH?t!@$F1>ZAYP&zXeqaCH75VAMbkrt`KHb7bVIZgbZ+a!EH;>R=Y9}bs! zN=y3^glPHQH9nk2E`fqG1b}LkJi}!fQZGs)uwp$%bm&$NmE!imrmMHI%)8JeL!&lu zA?8#Okz+uT;nvPJ+A+sPZdKiy0|ryk*B!`@7)KMk-e56l?ZAtCXAf94AF-kid$FK2 zoy^TCm!CtO1ikKTrDsVwIMc{){MPgRQlg@Wnt;skQC5OD8f8j!0dT~VKveVvS*pMN z4YFsUk(Q-XURB4}DWNe%ak^-#Z#NHFc7jo*X}N~cME!dflFa>iIg!U45Nfu%R`b`S zwwB|se}S#y4IiE9b~}NIk+P!JI7kVjnez`}qQ3QGF@2)OSWO?(6;wgmN=upfiHYd^ zn>DY4^&2b~Db7Kt3P7O0I2R?9qE=Q^X^lcYSTUqr=rNj5(w=N{9XqvI(DJ3!Ceg6h z-lBBlF8S2|A3RoMi|b0+M~a%YIlH?+yor|L({n_Rw!Av}bwk`x*tm5PQgN z;(i!Mx+jQX_!?B>nt$bi)gr(j(*`dWN`_;k6JOC$@Lh_VwMo8GRA(wf_)^@m2$o$N zX~|OJmp_-%lFWU+s7#Tu1^P{e+q79M*H1H`! ziR6jbo~#+?&sYOl=zgZD;eLz)y#s{yhsJBP_@^nxy{s}5gOtsp1XMT~(JI)35k$zt z7A}8fzU&_sq>Z+__Hw3#W9BX1xI@GEmBhIE{5LBL62AK(8P{ZHa>vq}h<IHg^-+)|Ny4!Qm$%BI2qir+g>lAGTjcR?<6g*0A)6NtnAcZ(t=GnB z$O-@{Qi>-Y`b1L`YCE1@>RAgrv02|;SrPyav%rZ>BU?DfD70j4-fb@kbeBNVm3Q zA^PW9=hnLujFro~HH_&Fmnh#eec)LqaFhjM3(oL)=#;SSC!^q-%CX%J_)fkjWnRMu z7ppuGnHkxegWkR^Xz1aI3Z}|Pn<(xyQMibcqBFMpSu}oo)A5~aeqtuNy(#xp<-yXP z-^=N3LN~<~P?b+q`~4Q&!b7r8JnA~AugM|GjWmcHBJNYgT%ufgqq(`%WIqN11ST?u z6SC~pyTt`cSDj^e*=(lNQLv$jw+%?}@-rq_1>mYeuH{m*uIW4elz2IBXInh-WH*{? zU(}ig-s5S?a+JBTB}-h;^d7ORk|B6fxqE24+Yl(!XYyyrS` zN*=<3GvxT|NrKuJaHTDgEX*Y;qIfo8hV`VOZ{MZlQc6B}KGBDJlbhUCx(30(>z)6X z{jKiB@fb*_RNZfXv$MbLaw%e8ACnloj5_7-`iDpu=8k3EnD+$yG494L&rk9f@9CO= zi`nq#8_?}t7)`==mls0tAE}-7ay$%jW@UUUe#Q|9W~Vmnr8VQUe&U=h9gi#15fD9K zBO<{R9koZs^-KBcs@TjnKbf=Rg0GBgmVrID0ILb_WT?#J&w_qqRndCr_UGw;0fo{K*Bho*g$n@;s_|8=HLFr7ga za^S~Ox$}CrV(FtPm!3P}P7g<4mTp$dCbylM{9i7go|St>hO@*Mx1iKm(&baS9@*`8 z+Zkr?_#`1_OfWeeTTaFM7DBH+SRklFjWh(sN~;oJu$ze*9o4}XW?nh0-qbq>(Ve*{ z&snX!$Sun0`1#_+Sy|H!Q`hmyI7Q@hEUrFO_Y7EQncKfw~8Gg2iZv&Gkr3I zYf}4bM+&3r6$?~eKC`cLhnrK+c?=x9e*V|p zEuA=d)RABKDC4>qh~s;HrJiyZzk^k|=p`xfGy1y-I1Q5Y9m!pr_`d)3gwUN=Rs%=H zF7?l;2&@GRq`6$B?HXUY*fgwA?3ZpdzdUX1lICCY;%-${AzW;6V5?PC#IB`M`{~iD zo4sQygj+HfjW@G|-Uw=}0gQ9rw(FkAa1=~d3`0ouXv$}@QlZ5BCQa#XLKv=68=Xv~ z<>EL5EUVmz+g{tOV?Fm9r7eC(Yg?B_6OkTh_z>nIU+lfNQ8Y{_WVZb|FBrd`I8&B| zBb5STK!5#C$BZG4(be5zpiYY(o0YwuxeKZ;j8{8e|LJjVprTzD;d?u^CG6Y#^Lqq0PsjeYvwC^X+fGaIb`T6n*zV z!cG)kH+_&bQ-#Ph2c?K;#dCjaM!;k`)$%{wm5IOxM$-3Fo@X8_H$NV^_^2+{kE(sC zCQeTIXu@smDMq$xzr2c&kQjGgQeSuS!2aaU5ZpOr*yQic7{plg!hEE|jRf}})*cL; z=b>6T1xw%m%wEfxJ`vbmna;sg9ZS$NlEN;9FlH z`dV{WdlRZJzzQqi4LUNS!M(y-V?6}7duq%4aO@S)zl;`ZbfP|(@e(HJA#zZ%sBwH1 zk&L8tf0@N5vZE`&h7QECH8y4(h0}t(M4kh6?yZwUk0DiDU>R3VhESxG?KU7cEr_fc zO-PXZ)tZ}!VnqNOSX}{v|6vr)c`fE?K?2W-o&NxK{=j?i{us^A$5CUU z*z&az#o!mV_ov44r0H3qo%hGNc5i-Vm118Hd$iRpg~`hn*NEoy>>YLEe{;E6s8Ypw zTAB${DW0(-{-rmQJZy({J{;@MQ60TAv^iX6zTkiHNREB2rXT@CBWt2z-X{uEd+wL6 z30jScZxWD2fzW;;d3+MQ$K+~WIAZ0A!jKP#$x?Lg?8qpL_OS1jpA7ZwL1Ea$<>p+K zu?0O&J61&wgZ%zWGf|`{n%7;?@(!JeBzfk8Pdbjug{MoB1YJ!XEk-$+SdV@+)`~JDrC|Sv^!|~nT51Og@2@-v zl&`UiW&6I2=QfU~44Qijz4zvFF`n(!q_7y2uL5l3!dKZ&&j@B>=|XWvWP&@0K>D)> z$geSQuWfdHv8j&1n9;rhJRer>3-M3jPSK{z|pMck^01eac1|?qQ{;4BP zH|n_fu?;)!2e0J>*3pp09NBf`*I=~!(8Vgude?`_3Xye94{ygrk)Rh0o?ZQ5&4#CV zVsJA}vbGsdeyQbz$|-=NOo_h1rg!a$3_n^x#~}Ghj!xcA=5I-4WlAuwFYhM(8S^8x zLIwc#0yK6KrD0_fBSd+-&%ZNZ|kOuOmVuG2e%>zg zR!^Hu(nl#-zhyMq`2}spL_k#*GB%r-XxdMic9{hc&GoB&x+NrAr=ohT1jXy~eDatU zTN?w<4U#PL!E`9z*1uis@C-;5Bt;GR=l^CTW~NB+Y6_nnsctkz~uB4P0KiX4x0 zR;}~m`V9A~*bw$&8OO##h9F$jhZc8RbNYY;VWD9VqX?D0bOus72aJVRWK1shuzDM| zYIi64W1;vuaSRLf$C>3Eq>&FU9kL{%Vt+mX|w zCijZ(yoT@IpX#j$dJq))(r^*M9J*%s%G4w`%p3Lc3p7RR&ovJt!84#V6(A2mrET@w zvx~C+JRO59Jh|)+zQRL7v<#bM${&dRju`XZ=4z)>x5ihe zZl4d7?*pEwB@e%)f4pII>bocZb*~<^LsdhCI_7?{*0}(_J24WA*&uHaz-E2Jmkhx* z$(RmNv15PT*b-EYJHhn78Yh+(^8)^-a|VA#ehc&boag1=W4dOCfII!pUOISSpxk@z zt5gR(rQIOQx_P_604^I%=MMSLQMV(xFg|IR1hxp*<2b3pGS37aPCoCBH8b`E(|?jI zC0O9wb+!!-OaO#BUb(`WoEI}e6**?g!=HGMH*3;>C#C`#s-x(yJ_lbFl5ck&D zhOqG+b4g8_RF16B?+YL@2yU+LK4-X`w513Ea6?4ke|lk~?^#m&t7JYFjfH8DFFh@h zU;{+_DAKPq;}XnyUc1aH@A0uyI~r?>$k$Bsq7@VXum4yR1W4xWfZfXZAr7YA#}a?K z&jsXbf~*d1Cafhwyrw8ra_=HV+ny2skpD_S*(k%X(|qtvtEI6kdd2EraJHYC| zwxlXx#i;;9(d{AOE_!d|1QdeYl>gI;6Nx~bweRgd@)wE?M#}aZ*y7CLF3^01l7@83 zyI-k{B|^8^9KqH4aObz zr}joX9`d_B2%UkDJ>?u-U=R>tLI5a?eXd~g7&w}ie;UmBZha~!#p?cqkCx-g3?Kr; zkUu}zX7X-x-R|^c!NHrxLX>bZt&bE1%)bt`_cGx5ro`QOe`e`!<}2;*pB^*9$&4+{W9|(&CD=yg0rpK)n?RoUPnv8$n&VWJ=Q*t zDvNfJoJcCF(dtb$>Ph3uqeC-p#3+K!xGIOq1GMpPVrcz^3lq_5q$40kmBIf!xD$o= z>Xs)dV_-_J;h9QR;r#&~Q;JS9;0~!ybT|(lR@(J6=~IK2J}|cY6VF&k0eZOyPhj=a zR_)|=UG{DSc59p91-}_UK2O8S#T7JaQ*3)Y(Pl?lTmnF3x@NxtS^=?ejrx*U_k-1@a- zn1t`{n2{ZTUA!e_-?`HLPkrrCp=W9=vZ4G zUJ@xcisp2@GVk*n;=(~-p{yIK?9WeNJ8%Wj7G_;<-u*CpTM1HR4?7ZN$!_^v> z?`ARX&SuqP(`YI^MJxh#wtbqjxkHiha$f&${QW;ZqbLp!pLcoZ_&)_G8g( z5eMh%mHGbTzvthJk@urLbqiAbKXa@>>4d+B4G$=jgEe2ZN> zI}g|=p7bqtY3utH0(%s1x2?~hf+mZJipgy#f+Zg~S5QlLwJ(Y^nQJU#vWqkXs6A8u zH|t)d&f_4|7bcILcVAZaeu?e7y?eR?imusq)y-QB&l~XMu*L^?8Q{7o{_9k>`Te%u z3%A2SFPU21GJeySTqKNaeB1^o3YLUJo}rFQkdbS*Z;lOcgZA^1+{rR*1eX(+!;aYf z{PXH@)g6|4`P9AzAz;VAD7lQo(|=tSja3_q)3TF{Y(%g!6u3q{JG`B&_)3-RhcE4I zF2lz68*AI1RuMMRo-Plg-#S;l`990KIwU)W0ySb0!{;2W!1a@Y9qRJaH0`PVq*p%% z1*lk5{2YP9KD~!DFdQ5{O7ZM{y(i96VmhyLP3Y1G>7k9zdEZj4p`)TG{95noi}~rO zE*MGB*8tr!oa+Y`6FlJh4|;J*fXb%*^i2B>O*p)c+J1gzG`|yY8i&U_Y}mvdKAR|M z5L~q%+D)J5+y0x+7{34hIw>)ogR0*U%K3P_whcb%8P&-VW+(_!GPb_%K)uj8tGIydY#`cZjxF)Ke(Ey@B#H+ zu})dp!sl)<{z0Y7KusIn#K`o{n;EAe;Az$&#Qglm5Bs_8*t%TV<*C@Yah&e~70~B? zwgM%`SIONzo%cw3;Mic_WofZ&PQbTjBskv=*UP4kG79hhE>uImeJMdfI{N)5ZEMY zkx?Cy2OJ9BZmZMiYaYow?-{my57X;owC>_u;E(*6Qxu;~DNw!(&eQ=;&xYW+TW*5M zbP>n+$>S-i!?SEDOxkS}7#fzkmNGK`t1)nu6hJ*tvwxmVmKwkde`u?z*XBNU*q^|l zD2RX{V5?aWjErQ@pylE=*`HF~&u2Pv0sn_T@yhJ^*~n*eEz~WbR-40EB=DSHQ)@*( zFk{>~$os80?kVC=hlF-2sdgaqrrpF|v34LnKz{B=>1zfo#AtbPnD*{=jBH@M5RO5S zQ9%OZU*FI5Of|-Nd5`uI>Di?)h+sZ{Szoi$$^+A5bxrbM-F%NM6c-7&+;{EMSb-=3*CnZURqt!oIbZ zaerxC_o-HA7T8p5DoQ!7@`0K5evW4-kUCD_603pWH-^K0WU}kea<-$R?A2{Az~H-m zPl|}}p=hAE^C7)rsSS1I{sHRUTn|_HmvSlbnGb5vRxO%&T(WY`0(Fq zAaW2LkBz&(d)l?^|FYH;nmsS;HVOTEMF5cq5fBYj67gr?ZBf;UQ8fktqlVBj*2%`=jjBe8%_UsRW2?k}7LoKBY} zf3COixUjX`Z1C~aDOsSRtYXRylZ@j{+|+&`{^EwVY7fs9fDsanb(3-OMX6fR|`a0pw1y1z3u4{n=*Lg(`~yYx?Mzg zpXdxd0e*I1*sLRXDxFtDWqe`2n9nMlrR-i3cj*GJfH;|A^xCMDLNo`R^c~krQDULv zennYxnNw2Ych=mG>)W_{n^9Yht6ReB(d2$pQ9lY=aH+ddGufaZBAm;>p86@a$y zO>Pg`<9vMhlEa#jgrEipn4Hb?_e@~Of z4Oq?Wi?jL(?zVX~lCQZ6b z1AZ7x@%(8BWU7ThysOw zZ-xqm&U`m=D%N#hUvPFIxA0l8G<*w;fYMgPrRaqWM~3jr`tQH@$0GLhLJrlzK#1_X z&$4g=85LyApD;Kg$EQmXIVjo$WzWtpE1E!Ey*C=D=DXb$T(*Q49V7mf|nSmk~3yylz znKAUr|87$vcx5C03qwYh9vIlKp`#whUKBw7x}VvSZ$TjtOkQB#G*GBnE zXI+rP#=qFgz!-lGJRY?TD%7g6z_AM?9U2`Gbiq_4EW+*#`Lv~o zNBV+s&aynqQ zwvoPl^c!0hRIi#Ej&Or5g~{+A{Z!>PWJ{D}!9zrch8~ zYcCI0$3196Qu^#$6>PL%7llCr`jWKXHOiDQW@z9=h?S-xiL^eDM#)f+_}1a0=b_0{ zv9bR-SS@uexVk;TIxL)p>Uk#24vu$vxoJ(xQw5Jjqw|vl1Cqi=v%a!n2WcP8>5gd#bB{ zaNBedrhB=C`j3zpxk?s!4D*(xOrbWcq z!PZSpeBxm0_RF)etvSZe0Z0aqQ93aaDL_tNH9^1EbdqF>U!&u_j=n4iutiv`(OP~>Vn@cVDtunA>r>V zuJXAa@OX<^GRN$k#jFh&NB(xX09j_Z9W27eh`a;)`&`Gxg8CEg8OgQ|UUqAzHBO?T zE@Nsmyw(Ak;ls7%b@e03qLe_gEFDqc+SUHbpyz0yt)*#`fJ@-3va_5i%@>U%xiRT7F zN~g>gNeE8qH#C$E13{x%whqT32`X@BjtxHqpl1{wf@C6&G<$+{_7*5`kz@6|zIS$@ zjBVg27La(^gP&~+Rl?f6bzHRWLD$VQo9N|HJ?D>2MZli0V3kn$E;zmSV(ss?$=$W+ zgpscHkqje)hyxH46}(no_I)@?$5ym< z6M;8_|5%iiAN(bx!TB}!L#X1S)xmaWb-at)UEG;j7RfM3sW)-uK*C-8s$397WyKfj z%76q4>Tl!9mc@S+Dz{k}M96P!zm)9nn9SY(8~gzz`gqu=Ul!fj_0(i!&7XHOiu%8$ zST0^F)H^4pZJ2%ZEf{ zepqF_%|@AjC&DZ%pA}Q$DI!HWC2>4`4=-zvdz%C`C2UE4W}AWq3q6Pf-RIhXa3bpJ z+nw%SF7`BW)4!mX%K_&Bw8;}Z>g@P2O8gdm_w zrSq8^q9MzOfLU^XbtTZrKT2tk9k7|j+q)%p!+)?lj_+sRdd>qG5-aPp_g~9YPWbi; zm{Oe-_?TzMGI9;Lwu+r5OK;9s;?DM|a zrmMkQ#!8h^Rg&(=&)CLigY@Z473Ws>Yp zzc6YC*TfqEf;qC}%W(cN*}SrUN&UkBH{MNTuk2HrXl3oiO%@%*Uj!gnf^S}#sgcB>wRXiOSE za*yRq2Fz9a?_1nO>!?xNB2ywo=9;k% zHuC((Xd`W|84y&U$6w{a6(ax;jGv9!*tsXtb~R(yp8LgL(|QJoH`Rf$+G$&?13Wc- zc^v{ZVitSI8(DrB(?18f7IO(KzJM(9-<)dSlR01V``cQ8*Q8PsML>?8@7oYwlnDFWagi}PgT~b1y9)GP57?RxnWn-FL z&J<&yF!a^IvHC2@jrvEd!W0d*&S0aso!CHo^TS=KhuqfI<;*J$VSZ-gCG$J3%JN2L zt%N1!)ZwnzU_i?NJB@{^{~rn>?%l5jdzZu&t-GZ>pab1O!#Mm~>SpYjJ`ld(m6R#u z6|_VH3im9ao6rxZsqzwSSGK=(dfl3C`j_u{k?##C6=nI$0Q7RAWWW%HbHh2b#d*Ir zA9Kr!AEWk80NaEGfo~0aU*JIOzOINZQ?7=mX%-b+|9h0_+`7X4o%M*KPa=e0hsH{% zfS5maY}|R~*LQd07_EMxn=HudTY7*dBqW}@jEWcHuvirEePG+QXoGa-eP<(N@dA#f zpkVI-#IU3}3r#9dSf~$8H+4ltLlifqd`{kkNR$i|#Lw%{RoM{RVrN;B%IWsbX^*=j z0&L@}c({ltx~z+);>J=l3Q=Ox1lpM>daer*`!3+L82cDUz9KJYc`(cCu`T$>LwfL$ z8D2XCQ|t)sU{j>b6ul?93FN}|L(E4j(4JPrz4W1vG21iBuoo#x<_mm}w%hIh2ZcE> zT5I(>*eu(OnOKZig^T+o|MSP3%lRLH@Ba-0vbh;UliPr#B*t@Yn3W)?MEg{o`>kFA z$55b-CySn9WrPk7i;f^#*__aH+x-{J&M;u#b2gz%cE$o#+PUqtYrvAPhKf|ag9pk& z9Jb4cS6(460v+G6zV^xZI~FNP_o5$!h0oO>B@7dbt(+F{B7b!tMDY&~KN-BgB0~Ex zOAF`6R;?_b)PI9z3)tOrb;GMHi%uF}B#;Yok7Ra2mn@f4w46|FL7}9g0 zZfDdr%)~-BDU4CJnp6b$#@GT!b$tHr*-3z2-ES*<3WBBr&tQ*abD{t2pNTTii zb)fYn>k3fHYVy7j>%ft9(|NYCDBy&R4O*7Jk3iKBKwrIBBKm}FKc2npk!+HdxYC`b zf3K~3+p)=K){lzs%z(#oP&)aA>4=R<3Kpa4K^bj2M=2!MvrdQ~BXHv}E_m#% z%Dv*!%R7=gQJ7l($t(o1;)1b&uOGnHFABsu{81l|d^#mQA7SCgI59qaq%m$eCRs>F zfmJ~4Hr>Qyz*@c6NC;^Y%4Cmp_6}xe(quv~$SW7hcJ9(hwg$28A-fkAMTE;&)RYLF zjnqSiE7U*VdxYt}UFUOSPg;@(+4yp`N&U$QJ;94JX z)U^TL1o?AVTf7O3k@M`-zDh1G)8yRjGQ3`ae^3aV5_)|UQ%9)9KK z&CDl`1PkHUF}9u^m|-1sh}Qezn3Q-tJ!-I{Jq1|W{E}@gA4$}&_XBEX&0e@Ohav;@a{TjyDE6IC11QW7L2H#gkZ)$uS~EK*rh_^bR?*1( zEh39{ev_CGbr~ud!=!tPD#dH_MG~y$c4QIW;J#YRz{aaNiY_9q;RDLWNqxa)qj%*# zO)8<`eL?LG%SIgq-xtaz$3})zN2DzI!A9R184GFwgdd+;Zh2#agM4-OucS4%_?=&M zOhmZifFYKC@L>${zaSDbMajQ&H7>%(vbJ>V0KA$2y?G4@lpLqru|q*LZcTz|4f+uo zrnyiwk@??jN0je3Rc2MzI|7a0`-=NXoZYcYAH>VGMZ|{}L7OcEM6bWo7u0ToAEz@f zWPGojmcyE-GB2!cd7POJSQrSN{lm8nPD-b{uw%M}6n7XGudvfsWc&o@3NaDEDwH!@ zY^D2dy88)G8ZTMj5aV0^7mQ?Qh!i&+4U9_D(c}T#25A!C%xW0zvfjUS5HJ#rGvbX^ z{q(-v!Q#7`kOBRZ;;GJ8Lz1NrJ)aLh6-AH1Om82GVm?^8Gcu_0;gytZVamyx>oAc8 zm|edoj#{;TI{AQnPv!DXRskrR*d(f0)m`6K({fhUx>Jz?h0YC3PJm7a-_^0df%^N) zAh1Gv{MEsY1mDeiF3EY+kRbXc_JQi1EQjg@6^bQ)`P76o-ZDy<7#TLcQMyZnaS%gL zw(H6Lf*HDF#%M#vtl{n)8!r0ov|dvThaU)T2S{G!R$c#t;QE*)q)glRBr(&gy$X`N z9&mogP*7`7>$?J~K2!p*b?$aIbPywbND#tE<`H(~0ZYMPC{VY9x`iG=bHHSjYGm_; zvk)d?uCs)(J&+?c%|XkF?lgRq>2e=B0VV|~pa91mplvkH<1khVOUw_Qn|I2~5?W*a zj+3~{pWMFpdB^Vs00kMc{?04PONQ4DYO|75DTkFE%nTwQfhNi`6a>RkWZsWq5WlHF zvu#uB$?;q+2zq)Ion0e!KcYRVJkwUFXv^PS#U{FBq2w6NA9XBHGHGx>y+d{)J)GCB zk2Dh8g{IpzSfqjwV*;|nk}0=$*)1d`zX|4H-^b4sN0m2o{N0Re!|D1}*r29b7Rxcu>c~9S zKSVF_8`m&L*DNX}`Q6@CR=)8Drdey7fQYX?Vznt*VA>T5v@Q^Y=+^;V4kQB)w~?c3 zCVpvhZgWu4So?dp_0MtR9I&cZXKF(v@L$l8W%y%Dv(^5urvlt_CEuvER#$$|@&tS05;89v?hi;3ST!F_>(ov4Qby!hokpI3FSlGi?#x2%Lm0t!be#6nd|Nq<=W?>e{fh=38|S%V4H&pp z%N6;*0JaA9FZXG&WZ89~#8mJ_`O)lgqwk}^!ZKf47vwD*#T~%g6SM+^L@4{%dsCbF ztLXEibuZ~@&$!@UsP*O>bhQbvZ0(>Zq_CoMoBO(XTRq{<2B3rHztE1X>d*$v9NA(1 zTI~dY^SkTvhX$F<6t4@;O_@v+Qn-X!X4z?6n8hZb z`TbR{?i+2`m#n&pX!XAn3o>%A!;#AkFN&y&GtZ~{+mHM7krB*KS6LhHY zfD`Nx=OyV+IA^caA;`E<6$0-PMN5*rE1<1f?@2DBf`>>Ll;%TWj)M|(=GsdfGFnz) zEw`64Vz)g4zjd`4h%VM4Q6y)_tP?_jo}o=vf}}i(v$9=R=ly}yMZe~My-we3MAhF} zncd`_M$iWaRBBWBJDi>(BBL9|tJ$q`xY`8evmTD<)IY`B4zR>VAM6*vnQ4p zXQos_7}-M`LBFz66qperkeq<=;Cc;R1DO__-Bg>rEdbAG_d3u2ofm-)@%y5oTz`$T z5nICojArXOaW57;oEhG&7%`y(60NpKyy^#*=@yl8BXGl|Qcv*jJRL_xw1i()FBtPU zm92O}_P*~9u%G~nlksDl4azbCyh_s$Zi7%&r!WX^UE*T2PEQi2Tx_K_Z;`X4L2;q} ztK3j?l(xNWUli?g?%$wz*X})s;J3dqhtcSEHX7azUfj54CThK~b=I(1OXT?|?G9eu zaaNQm^#vQlX=HRFNW;i+oru{Ttj>;12K;t&LtQ}*YK~@#bw;{KzU1|FE*lZ6yJ7; zNIWUQbM}-{%>Sq)z`6S!#Qoy+!{fJ%WI(a1%&skk$rcqll>13iv!Z}4o~O{+4qb7h zj=9npXlW};xPUDmGI1o#Fx@Qi|B@bG|8<{GZCCWJ_N14!U(c7S8nJK4r@K>vOjc(h z+rlwM2TbGDZ)}uM#bjW)Km6 zEDN^5+S{R&y^@sXmN@JA+VGWRrW_z_FiyVX^Yw{`5I?@4THOAzsmP;QL6V@Hri$^X zSVXD_WXa?DXm{*v z!$D?|x*W@mq7{)v*Q%H?D!uhvFS$ci2*y1#jj)=;xvxPvxt~^&$6moGlPR(wv_{~3 zjQ&h@*A28d-_GlhNQE_O%i6MHq4BvBgA%6ry7QX#2jllzXk{acs=;pfKd2RbbtHrAF-aUqw1z!dIFWmH(q?SD~;2b5=?YT z7hcKKXKLxGbo=#14*j&UJOnZ<*3p4DxaOi@(8XDJUiTOtd{k1hTP!REt?R$E+MH7^57JK<<=_qAKWTC%`-!YwNfq zWrndK%-)U|Qllr;UVzTiQWH-F6%}|K(;8!1guo|Rq$74|Jky;JZSOomO%tejll~=@ zxf^x6^4is@t1^rg1u%8#lC^|5n2<2e*-hKBQ*F;H^Z613=LE+Y5t8lScrn=Eiy^y{ zwMAo%+bpnPL>~$Om7D(r&pbF>A6$W}Q`bv564UJgZWoZlPj*QKkq;tFq8EOx4%1A7 zGe`mOiGi-AN+#3*ZaIslWR1f7I^ zbLKa#Z6oLDMQG)f6(WKsl{-zF1F4!K^&El;OI0xB$AY{xDp-HE67E-I&^Im-hfM8K zVf--yXE7O+&;xTiUR>reMd!93=F+P7L<;!vP>T0yz|w&_u^QmRCk$nN8%@2!epoV` z;H-CeF?<65YLwkch@pTnEo4l`WY-c`b}(TE4=tm9%cT;=JG_+p_m9e4p?Y^peDV9# z^&vkmnd~=TL12jO*;`@tPz;K6Lq@YW$DqmhflvvmshKyGcxPe!@x1WYvKimcorovM z@S;NAlVk61a{KMX=!y6kJP#E>%fo5vSe`kjY-Yr|Fv>dapPLgly*>NOn73v=$-zWci)7GEN8+bbu3nV2;PFi7@UicW zHkxAQEBxe_*5i2D3U!}gJ|_bKCi6WPaMT>I98g+!rz;qg(L^SUt#Ib*s7$S)!~6YX zo*-qw+dkc_fKx@IDDi|omm_%4W_j~W8 zr!8N)jA>gBQ7~QGTv(tkHmar#mS01GA~?C%`wyewta%#%8?9fh&i+!*H_f~7Xoup) z@ggikrQ`S!#-JW?x`<+bq2qBL;O6`Ln@fpDwlH+UYy|*ll~2F_cEz{Sj@d4w2eS6SuM&l=^%)TA`5~oE-GZ1&;0aN9EzcetkAl1^2f-}8g|R`ltX8xA z=BWOH>g+a}GZAGyCd#@qC80sQ3ZN25aKrf8DS#J0`A_T&4)~$|J3}O@j?+x%!4&1^ zFWqhAo8tTh=)mc)6T%GaMw^X=a-IHvUy8MTr5xkNSNpV_>B6T`3il7=lfnOK#VNnn z^>u!`Vlik5kPcx)OLHCxs0vN_-R&$BE^A%`|FA(t`IQT^bHp@(gsn-WQCTC14Xc07}m!0Kl(}zHf&?I%3dxANyfYl4`VV@Xc@868@ICRHykDL^IRHA z>pyO6CL*xdM~72Dv_URD`fnY)`K%%VbIlCQ7|lWr2fh~)+v%}aXiXAj zlwG)%{$}d~wXiACN(PnoG`k;~8GhfWEdp>pHYCTqrXdSMWq%8J^6`K}VTMArn}xxz zlfa&$nD^fEi?KzEIgwLeFpwba^zcygNy1mT%0-Fa=raU=>Twy~dYW~b2-;eTPSyDO z%NCD69EbkG?j9wPQ^f`-_&n`%)gLt8kS+YE*ca%75hIhgT3O2Vm%QcI9w9;94tV-g~Mex3Fmi3MODb*&=MuL1uuMAWbu<+grQiDG+LrMOZyP*lq|sc809xb zws2^oz0q2r#Hyg}h3aCZU=0jVa8|MTj&Z3zCHtg~E3@k`(Io8A*ybk=G3Kg2c_??X z21ZjsZM$kMSmHb+q^PlcH^BV|_9Ws{0pwVFPEgiley|-eAL*W*ysUYceJ|#~*mTe{ z2T0=a{y)}3L=eDLwq6^=Zao>mT)aFRmHB8O2aqal$+teZT5VweE7hamxpot;8s%Zr zN*>6(%VP_SR7WDI-c&SjyXQfo*Mnh-u7}bia1NXZuy?1d{#CsGtL;9pl*~vk#TLyL zzX~oOlS%3cU2AP<_hGM`;7Tg8X^t9Wl?i9|d=YJmOkYXyCBBi9Y_g|tEh&FYeXHAM zI$~`q`L766uC=1=E3211y3K}&#s>?xIRpRjGwXS(VN#lFWhjncxk_`txKKj8wZ zQYCe_a*qm1vfCN=h?6w`oR$F@tCQyA2OaLtgF4Hm$AVC?U0H5`=~}>-G_+B({~kJ% zLIlpnO=n?r`stoskBr{S8$UTmlH0hZw2*oc^&O_r+)S0_O9CV7KAx*j7rcF7S@!_rUOGUO(ws*+?X5JEuyA^O_ebm{Q%~M*) zE_CU$D+R&!i5_!N)U3?P6B-1SxHiK8jsRE(JipL1R6Y#UmU10w|xSI z@GXN5rJ2=E^`bZp3~CwQYHuYZ|LNWBTOQAtyo^#;w;m>nbh}t0*%~Dp8%UU8t&UVE zvuUFrQkV%O?Yp&k#Zql{I@<2ajS%PY)+sp2gB|;On+00zn4DvcE_(@L_ls!0dna&I z_-NdtCkAfid|9gb8XoAIaqntR3R^fN*q1zf^aVggd?!;o^3h&mJQnw1KU>U6R`z9J zOR0i%IN$yJLdVtzp$Px$%8FTWEiAFfr}qgU0`QB+g)K8dw}6cR7@^XS$fSik%YYgO zTg;dSftNA~ldpI2K4J5>jmwm&t9F7b=Kk4YYSm`Q#IoX{eSTkn`)!)b*eB^bcJKC1 zYW9qHrNu;&RGD$%+gCKR{fUy&pJh1G!w65{+}+_zaaxl$KjH;Z6?8w|`FgkM7{e&N zD2tf#PQ#=XMoaBqBzCB;R%H zkO;C5A5wAF(37YdGhq+Lu!9vz%gY*tlT_frcFp zL21&N5L%!z=?vgue3m@Ii4Q>TBWx8x}RL3=o8hUk1HRqj_u{aUCDogMKzDIsmF6DhPW0#n)SspHd4?)&#P?! zO&w>$6L7yY1@AmTnI3Gpk%L3fsJ@|Hd9-fi8#>WmdSt!7a)erbi_-R?4cSK5@2^eL z&1z;-(5z4C>=wf_phfAgCA3I}ISTL|%vD_P&TQ6#+QaI{yX})Z?4Lbm_p5xz3eIy& z0F8tEDFrV^GAJ!q?96DF_5gOc>O2;J@&*`UaI#k2K#M*78gSftcBP_gREO}`*Wvg} z>AM)5wPXj0v%VD{8SX<>4L?NDYGQhry#gqN*M$IIcZ(-t_|o}a3Xm;A(rdHHA3rLT1Hrc@iGoq7m-a(JA_23e)? z>X$>J+QtBpx_MlA>ql+6b350o>H;NjaE^4j_SzeEY)h_&EaKd1`eY54SYe-Bo28v7 z*2}RxiO}Oe4@9cyX_pEaxIiW`Z4YLkKmhz8;!T+2f3=GpP&e)JQ^g}o5blTC&M>EtSh>f)l}H2tB42MzWH0(3lYLCzcCo06cJicS zlJU5-BQPZ{_blumF|p|cpMf+k9xO%C*~*RY1PmI`s4lOlhqorlw@{n!GDoo+CDSzbqSM#WzDrm>j1b!Cq+Cp zU~6yl{DUTb=nDUYk;l=aN2pEPIshUf-Y6`$c3ixr+BsMkre^^0KA`>Pr@je;zZ$_K zv;Py?-EN4V4!LD^wA6>S)*Wh^z+eHqW;56aI(n^PP%s0R9&sl5UdTZT#-#Pp2 zz0bMl@;wC;{gB!j!8$Vo3$R!I8^CV{q-r|ZWj$;l7%45CT~`Vn&5`H&P6N*w%I+_Zcw-3pT`5{rwy|U-R}0a4skJYPBEc zc&2G(KYk@H^(Wwl5I-R3Y){A4(9o|lGwbig3fJ1u$W7qus75!p*VLm+P%i06nI$M( z`M0ul~ml2j8auS<>DyYFJM% z>@&p~e6YY+_0P~%m}!_8a26)CJtzY6rT2L1xiDAMf^l~i+AW{`1qsOt<^h#i&$mIf7Yyn<4K5)ni-FjRr%7fIfd1Zv?al$Nb6seKO1%D z2~mD$U=kX)|8-oA^$fQmhkolIG!FC;Ni|Q;SdS0$7ZfD$go79j0Ffi;ZDEL*bWOX9 zoT-^wk=VapEBnUl+MrZ&shsHWa^rvZPfWHp=S3qN!KW^F?I#Z$N;%f3%q04@W=dy+ z!8Bzh7vaKIX_2}t`>X9H<%+MYYI1Ywb}VS8(Wknn06|Y_2BXL+Voiqe-><7Gcn_=v zUg&LK`f~|vrnmYGfPJ@o4mm!9nZi~Mx>fPiljuqHsk5ZJ?cdVg4=+>KA>lsa~ zB3&J#Ms~^CTy57gCAE@$B}k2O=bT*1OLjg}R>quywE7c(5M66qYbAp=@f;7mIEli@ zMZQs-qN-{GCCk9j?Jppwu^vxM23r=p?O?lo{f`}=>iVcM3bwlnU4Vng^qv*dJJC^Z z>jJ-@`FJH0$Yt7y_H?WG$dz-)EzP$H>bKc=OQVcrmX1I9okRG{@`ct`x52%g# zjI-qwq7^HFo%~$5p9x@d&0AvK!}=_J%#*=2MU(nNO|r&z%xmQN;+RH3>Ncq*WuxhG zGKVETKQ1mV6Tw_+$q+c`dLOweN`-xhp)#YbNFu)lsaG;T_!7}S z;rPVJmgt|jWH?3*r5O3ns5~;8>c2`cg)}s?UT>uF~AoUCy#E5;)t?bNm}A9I`crZ)9V%fCIwnGoc^3l=fPC}h%VKDc%6l+ z*)59<)@6SeRaF*DohM#Rx(1c;MGhA86>bpIz59_)Kn`k&meoqih+Y+ZMhyqbOd+dT zONnCjhFfP-qqBQG`}pMKv%kCTmGE6_)z%H8t?JmN;K(hJTU)U#dW^lEAoh_C@1Pp^ zdd@+v6=GSdn{A@MAn4z{P{s;iQpkRVKt0+e9#gI>gAXrg#g~$knKE@MMd{3|TW7=Q zg67UjLH0k@`cTq~5F@mFa)?W@S9kDn7%<4|ersn%ny?IKl&N??J(xX5?o) zH6-yD`%hhAjRHGvqlZ5?p0YM!-e#ZSJ=as{umRXJP5OyXpVZCm6Blq30K*2<#cA*x z#OY-SFUGdlV;66FpBP}CVX(Se8sqVt_5V&h&8*dri7?fe$;W`X2VUdbyRf6S6oH<) zjh6`QP6~?EZhg;iNp{zK#Z(i2|2I7o1)Y~p0E}w2`>Hczs>EKw+L+fAL)+WUHo|vQ zHtB{{3~QNR^i~xDxND_&y(D~VB`JnqlFA}WRNXn;_fQLIbaf{q$A7)EG}aH6Q~Qp4 z-3^v>_7Iuh?h{4Qmi_HvLiBK%l===Vu58CCBC?dHwIa=lKQsOe5iI&ciDDdlcZ=1} zjP!8%HD7fgKQLsbT`KCEOWTcIG$Cox=M`qE1NRf{_uM#A015}$Ba1zD>CnsX)_VRH z4HvShd+YV|_r5a`Oq?`M(m$o2I0ZINxvn<73&flF>sp57UTY7$YjkJtnb6S;@o&+9 z{JMWYhN2`#yYF^fhq)@J8f!PW<GZ*0~ZCP|s6)5zf)j^3M`sgO)~ z^p*5@YiA)f4XF{Ndil!Klr(YrH9<6Yv(XxGAFy`3XU4-1;%*r{!t$~2QWtG%Hj@aj zap-H`G=ZImV1!IKbBktJZkpJv%@D;!o_k_`p#{pdx$P~%WrD~d3ztvA*m(Pm zcCUemKUUp}3vsr(_wBJ5vAL8iAN$WT&B&|#o;L5+>xN=>Fb0)1hBRnKs2?&S)K83f zPmQo#sXGX(+wPT#e{V^K_Tn|tsg6vY%&_{)5?IUVUfntEyf7cDIy=|?PL2!wd(qaA3Jk>nKF;L2p4acp?dh04oyutV>x-EP^qw2MGm9FQ&kjP9srAQXUOObtXMm zX|^}hPp9SG6Rr5yDn9rQb{mX;S&y=^JLMPD1h4a2`*w)+!&Fze1}Xh3AzxjdbtVEl z*V}p>!c2^U&iD-0pY2??;h00x{OJnz&|3%Fkg!~ZU0dD_bBduiABa!`1qb*%e5v;z zz9q#4j(RnD9@9LK!UVdF&Ch>lYyR4?r^3IewsE_;IbVGFI$x7iH#zC%8(w66;?R~U zVDFsmjYuknoJB%yf`I_JpPA}0Q0H0RpL9QOi14z^MM(GkcUo|d%heHNwKr|lXtBE1 zDWE)t?|tJGvhl2vPxRmbD*(JE-`yK1(S>wvL;(rJ(-wqxx& zJDpwDo%YV6z}%>3c?2cO1W6Sfm$cAiHxq2{ylHB&n4v!p9_CeFFxTBY89;y?eKTOB zzn=S1-P+@vMmTU&iIoXuSxP89|72!dYm(p+n^e+@-oZ`poW?>3pk+y4R;sh9*O@ic zN;Qu``waBzT^kzn9VB`TO%J}gHzek+mRFgYf@_@qaT$~awaza`Pw0Es;Fu7}u>hW# zzJtAOo!y2Y%@TWM@0tD&6z6rFgsz1B(F*+0!;ytD7YkJWI)Z7&u=X^-0b;=-|gt`iox+JA#d}36)xa>$? z)uWa@riEgw^fwc{ZYmf}*al3_5)pMQ{Hj6UPuw%I*t^AXb2J=9Ea-Ur`DhELnK!$$D#zof*H5h{H7Va@6T&;WR(KDs{+D{Jo- zq~pWkx0J4t9DAbSwwNvpazXPc|D5<{PTYD^7N}3m43HryQ+&X(+`UkH>DZQtBFRH`omy|>~u=6NbU`|b}4^QDdLV;8c)JET3`(QV)7nuIetZBgH$=P#G z_}`9GOZmZ+i2v{se_+@8>cocB4|pnnX;>E847>Y3e&3!|Y-+N5e9M3Hwggx36!14# z9l_)}J%-0W$@!Cz~kU z{%9KOUj$<3udU8r+aTba)(GX$O7+U>w^kk()B6#Bbib7f4A#jv)##p&Ta?8^Z#k-5 zm<`Ku2hqk7UF?m`O|u1=wNd}F>H^!0m>oR9WQN6YPH6Ys(k@>%OrvPcMuO-l6s^DG zy)}v)8ilUSoA6;JofQ#sxV!o;E~}wn4XWpNmL=SjDtx}QK4cb9i#GA9t^xl_o#fK0 zR6zM6U`?S~$s;1*#j*B2i1(A1i1q=iztI@6%b*{p`x)zWF7E-Q2*}t+4tUi4nSoS*z@&Vv3z{&Dt`<$ zU(IX6HPM5APV({zx`V2(0T(DN2{_Y~Jo^u31tvRf-pBZzJ)gd-`KKqgnCKAcFlXGF z>CyuI=96_b?KYoWqOwvHaXNdu^sxPOr`SuwLUChCu`H*Q zY~{x;M8RRuw#+AMbcSTFNvn#I#$?a5N_4{%Br(Dw?zR}}MlQ)13v8TP8((&l_TIt zU80*VqRR|i$WZUqq}Rlj8yn;O_>sjv>Q_7Pr*wQfU+2zq>A<_W*eWN1>0RyK_lJsn z^;x$T6lWE&#g&+P2}vQkh2Xh&Ad4l4pkuJR5pO&*)I$rHXA=(6TNhPT37KEtd{otV z1&@JUmv@oCD$gp-LnrL})kacW91Vsx930E;)NBS0zwE(gVY-{Wu)F=BGx)@zLCgrI z?`hU+K2wNQsdHn6XrSxJA}?~c5GSs-(MwJv121Q_$TofP53$*e=(BW7fh_QM9Y(4t!({i=z$y| z4<8b3_np$CRcD#9PTbc*4fzgE2A{8l@f`kNe)53 z3mX!dwdI^per2O@qG;VqQZ`b2X@Z6m_gMj{=?O?ad%Xg&`fRe2Myr9?_gCfXAea2H zqrp;Qgg~>MavDQT`lg3-(snqWrSzWpo0uZQxF$FETE5*wvN@T`!qmB7B`R|f?okm52PL|Bh^fuv<_qRn z>FCs1Xmf(le@J?u_lo9O z+nL(D+j#vrp;bi+kD&Qc|TtDtH7H?g**j5CvEApC<79@%$Vjc)@(6aDxZ}-n-q)S|C@=j|Zs7LiiXBn<2 zXQ*s4{V0Lqrg&HY+ zzR^#uO-YZg@X}2ou$u^@10Hf{-rzO_JRrh0fPxpyo6Mf;?wzxjv4Z>5u)lnsgY!v& z)_CaIail1Za<;%_O|Lub3U<{Xer67z*%7GSH;p19_v$p3UEyg{fDtEhK1Y=TrzAU^ zEVbz>!HOZPwDcE<97UJ&4LFDy{q?tqck)qppu}tk^eXeX!tG0J;|j@^7)D;hLq367 zpi6D~t>n$kpCe#$%-{9LT0*FIXLgOvkTay%giYAsFxf+|u6Z?tmjd$R5BW%br72Eh zU&f-V>QT})(%3$$C!~{({jdCQEAX$M8cespmj!1(PE@oN*RJ(9Z6=J^exGvnH120- zRHZ6KT4oYmbm)kqAfgOU48o7_CU!gi1bl<86uuRSVy+agjLca3T2`fuw&@G3lNGZ+ z-N>bxD$CvxL?v$;$aDvl2`Hmm;2;d*sTrFa_j=mZs3ffU@aEEr^j|k%6&B_j^8&P9 zwCXP27=XX!g8^@Qba8+&Fa{eneezEv^)m16v}2 zb`g-e&sN*n-?vFPZSj1@zg269w>8rBj*NDfxvee^0-C{>vac?T@I2yGNkoK906)tE z6@w=5Q}%z=3Mp&|cBCnOaV2$O`LudGk&smPUp97lTeOLOa7Ika?GrEJl$B()Eb5=NIZfvJkOznKiy9*^A(MpdJ>euXSN-4wLk zT!a~Nzgr?Lvo|t|kse=JW z>P;-{J#6r51007&#}5DU$(|Np#(~)95a4q01a`>*^h3vmEWd5R%aLtxtRx$cifP#C zIJM5VO%vey_gx6Mxm6m@K82E7u7^C@N}Rfdc{8$FDEc@Um;CkG(I2svelIK&#LL0X zgyE@1cKRBBK*aPgqcLAQldJ5#fl?9OHIg7X8d0l=jb)L3{@`AaBK zkANBVF|#M%FPV>&B0f^8WPQ3GRz$juREfLVv7WT>%sUK9wOLLzVPy@~@Nr*L6f{Zk z;mWN*as`JJMQ8!2WqOr=_wP{ADhdbDS6QL*QD&m)^&}?MUAj%xSo(VjKHTUg5gSqK4#US0*X4SaE<*u}lgQuq7LsCmR^oJU7FN0WD519Pg6IG#j!c)%^~gqawwrCo zVU3&xc1GU(*h6cJLnmQ}{zCetS(hQys)_K5LY}SO4`*$Vp1SPY2B| zHp0xu70-0yGAM!sW~E}9A49^gIw(shLm8TDU+;WQQa!;4Ru4%kikG=`E9Z?k)T{IX zfAnLtGY(SZsvia$SSQDRG{?-3K1ZwEZ-9NzACU6wAG=xsG<59eh39v&(?8rm9Bz_U zS>H1+RkpXHUz?-V{Aet7+(_kNfS*IIHj|(~jU20`Jt8Y#*Yf#CvIP-YBIh7B-iT~06Iv=f+KMCCkxZ}N)3;rke5g7?r6GqrN zQK*ic#iMBx;tuTNf&?@5?R5((?_<9h-IGM2qYx)?3VtdqVv3=|r_ai^jxH8|o@rha zjCvzS{x9W>qk!3MI_4yOG2%8aX#&{rBu!(`T{Wt9Immpk5I0c++({huJg&wJ**Kg# zXc?FbGGhC`L3EI-PmXbJ@ZzQ=8bM{lIP%YLfr9v?UE)E+yIHJ~g>r*&gQcKMEdR;aat&`-7>!^XBNSGk~l9O~%P0 zn1z6h2K{HouLXDArjQI`inon^bKSrSaP05g0j^T~?U@n5BT>QNI zz(PwJg#JbhqzaPT3QpH&Tsx01I%vwFJ zPfiLsQiD|6JzfpscD&s!N_@jk6!B4vqe*Q-(biW>OjqhULoM;{b9N8ZYjbtVqG~;V z?y@ClCkanloTh=e9+TH&=-I-*kUdIK=<%8G(>J>=N;+gf3(h}9`&Z%iDk_{uX-1|? z5x&auU81i2)=m^84|?a4!$c7SV<$bZTV0=67^Oht^9hrWC^Jaw5a^Uxzx1dJzQhW2 zzxhn>g#KsVI0g$F#^4=tjE;fRj9yGxtFZeTU$0h?3HQ<*qsn2W?k;4rRj`?=whA$K zF$a?ZQd|V&Zn@HP#18v(u7QHNL?1tveSZ6AXXRfW@!!-;@S#Yq!3O30fQols;U9wA z$Q2G#+_`N3oy8gqx(qthN)V;8-Tli6xcUkkq~+r zc-Ew?4xd7Mp(b9}EEf&A|6I_x|9rL-cy9dw7_(l=(p42&hy@{{VK8%Eb4FpF`J3Xt zQztMj$a8*mmOYv30hti-S0iGOT&h7}=W*v=)8VCT-9U;ei}YuRqvGYEWhKj{>2V#n zmIHD(pVc|ey6lfgLxp$2V>d^@(BXh>biKx0YAmhQveRWh4wVbYY*0pWjeuyQ9~=yz zc|s6L;Uu=z( zrfa7VsmDR|aYsjRXtOfaV)kl&b1J+UYK+@M3d>-vC@JpfZDUt$Eero$RH3)c;A#~~ z8Fp)x^(HIf=$|H0=ky0jF`&~^HHAQ8spw{<&V~)sQ}_KvH%GP}VSOl-(wjD4E`QmZ z*Km@$zMKUyQ-lTy26cZ4EBwNyeGaK!)1G5xT;dpN6jGKcd8wFAj)_k?pza06F*vl| z7Jb)2(I|en*b5y&OgD7-ET`X+r)UbCjt?6^;Q5mjHMqO?8;!+Icw8;~H!0plgX$n= zbVKMx(@g>Fb*~%jhUPKl-{^j91PRK^c+TQ;lAC5D4j=p^pvtts{jc#&Vjk~wUdBss zD~ZW|lgMdL;#C$A+RN1Q0N8<{^ix(emuzH*Yl(d0)w9;>^g;=m+v8*9{s5&)dZ&*K z&EJQG_zxvAd@|ZiUB4)URT+P6xJu>R=5?`6o*9)(&yk`|4BXZN|LU29aJh152u<0NYbRCORZY-BLus2U7?!cpf+}}KKS$RvBonborpw3U}D|t8V~PD(}3CY z<;_YYm_yYURZgfB^FUc}S?lbl*5tRVA05nM<(&2%vZFHL6Kh2uv)#DGJOfR5J!RdS zsC8kbA@?tTSJ1HKRLlHn*(I?o7Ir&CDe)I^EQyPTWq!~-QodmbyM13*zu#NrJ z^6Kv$qD;BTiPg0U2xv^fi=`p6FYM_LSNYVm%Po=KNW`hC_j&f^-!TIQ#UgLs@c@0# z7d)pb!+_N}pXBTFBE&V%pI2=+B<#r|KgdZFwTb+ZiPIG8{c}R@HrkMzZn47eT>&$EiysTS zt{eiIpE z6eH=Q>G%V!v-FKJPx4v^Rw@0#Lt#U|Rt7fW+L!oT#FeWVoTH` zH_v*n{Z`?FX&vYGAMT(3w06CUHHICXJSU3!}Up`b@rnAwPR{;r`DP7MLe<=D=K_fq{ z1*qqxb=WJQRbvZ`k6WVMG@7L6%gv++wszxg$~+AO6?t^i6)-PZq)9bLT^G~#z335% z?x%D)%<0cs$m3{`5zr#Z>*$rmfxX*q@qR}m86CE$-iXb6QxAX+)D}5HGa@93xdeRHhl_I}Tg%;Od7lKHK;?uZfWRi|VPmGRP|$=w4}bJJFPDLJ42M%|SfSI@4<{YgU47)XNJ2WsFfF3oFowud=$(}BD2-3}{J z9do+%L`2{3jS+i<9jF_FtX5*p`ey%*_RLO}@&%%Jx-=j%?6@quOkv7CmOUDhF?o6zeHH%&N)fxn6SG8&-8LsV8Ld21ggbzD!p zPvOC&fY`zI@cGrR!t*QZCCiYT$2>#nSu*_v|D`hlB!d>*7LnF0XPu8H`^RP^W$#XY zl6jOBJJ(_^OwI@IAiamUOb5Oj{1Bh5h>-(+UZ{AgX3Rf6&kUbn_L0-tu*<3gwjJSG zskw2CLBZpw=B~|0t-$jmu+4Zq5E=DS>GDC1RY8j;8qd}}%MW+LbSb$b=6Z?B4(DiJ zh5U;OjqsXQ$@5QFW<2UG$GCSrnsjq|s2bFSNZ2A`WoW_z!bOy_c5;e1@|f&o(ZrpT z6SrBL=el&)#P@>A*{g}y2$#%r!8EtJ0w)^b#r4~3pijC47`4Oyt~!jC0kgebx}lwL z*Oc%Bq2p~#%M0duc&^gK)(tt2DgP=!co9zruLc_^@ANz|L{P?aJVyKAi%j2x3qj2j zWKs{~c+@3FX()RU4HS5iBzKT=_kxgqsfoCh6Cp7UuKhbXX2OUlNY>!x{}|^cA;-K* z)IlzNPX^WaN^HcDahw5^AvjTnLgrj^OmhMg;VQBQIh!j(+tzmeVYh;l+oYf2aUn<> zq;>!BG(2{eZCr9$;6c`joV+R z=%)m;;^i_iH!BCU3u-q+u=klwHL#0_Wh}jKQfH|P?-iT=OgeDAR1ialG+jPSneJR| zA88Y!YSfTtPzMGR@~Y7C&f&G_3A#S^3H~@!q}fkdRDi=_xdVDC`xxjF!k z!*A-ixI`#sHg$J<6tir(%tu9|?s*h@;6eJC$|$GM>M+XLcGc;*;?dcXES`R1kWn#f zkRKYx+&LL4ycFIx4@u!d5m1-HT}Wm{q?{9a9Wym9MvcWe{vK^U?{+Z*D~|{}gG6V6 zlcBNJ2spiOeqIdMuhXssJi?C_{SxL6dWx~~*F9m#Vvkw9vco~uL-#Vmg0I+KAAf1F ze4K4{AS?gO0>a=fMbDxaRN?|_HDSqoB#$I_chjh(PKOO_tveh_w|)3@Dl_l>_#15h z*G^f|7|v7pIWjzsE>X$iBoVSzny1zh$;eguDzmgCAH+*@^Y1vl?%?8gs$(Cg3pN^N zY|5~H+8>IHch7(-%PVUe>ECS({iTapAcct!VvpY8wbX@q7aR znrhQ|;ab{wde7oiUHl>41Xe!p8TJzR@}I-YB9L&?YUet#y&1oO|Novm+rT>sIQGvd z*bLj~B!DkD!6(hVsh+2huD#)(lRcLq*PAzew{zgNX?+@@x}dYwhnM}MUTPDNPv_IU zyw^zic=)Xw_}%cdr+UqJ}K)1c+er=$Ojm&3!&y*L@=aK?|~KMZo+C;dIA;(TAg zv|t^D>i;Dp8b4k>h#F}!)ia%_CH+>iM&|VV^bDm%X{0fWg`?7h+nIvB_AHpqp4N@5 zpELx?t}hDXW8dvBIW{RRW!857=1a~DqSJ8@u9m6v<;dVW7C~vmnRBqpEH&blDcEJU z5Kic0&RGDk1!|h1l=Sbe3vue!%M9`&tmVR}zH-G<1a%ypblZ!IpaV8P!Um5% z{%57|`kl0t*?VsMc++|7uIaQr{K|y%Zsx{!;}5E4FuW2Q#6=viATyhN_*vajW1V*I zb2Xxf{Rf1HTBT36M3y?QCx7SqzDb(_8Oa65Vb!~EB~VLJiO)Rf2%LuAv4>1Tgc1r% z1E?|4ELHRP4>7SPrnxaZue%75cTi06ONVR}FT}h4AkC1FMp7TjFm6PRlt)9w7ZE)-$Fmo|}Q)gPO#rJ`Mk%a2ZdLmiexW z3MTX!dOg#}!83V6JM?Xel_aeU&a_xwUs{oj=Yv+dM-*O0TYQHU;|t!MCUp_>a^2EZL-kcu784l)-SoY;C1Gmsu~=&+aJ`j1-qg`llU zvc^)BybDfjt?(p82xJ4vyu;EWbXxp3=IWiNwU3EjV+xbR@TkNT}ljc z_u6bdogqnaTIhB1)wkh?cTP3it>pCy>FOtwLnjQ;qa-fv=!1%6`R~}@xVH3skWGl+ zy|H45($ZG`G-%ZswaJcVY4@l^3?HA?w7=+s0KDw=j=e+!Pc)x{wDEZui=$|_qX${2 zAn(^50GQZ=dX!EBhOWV%P=WM8bsgc$BBEN_+ zRZOQF8Bw)LbU;G!)-D6Vr6^>(>$dyM>9@lx*w2F=tIqYL>JH7CL_#7qIY(WWR*_Yp zQn`E}9{*#iO^9#Z87^HLiu50l6z`bLt}$D&Bib3&Q_|ZgOoKOQ(X%@mF^Val%?FQS zJy&B&m(Z5^s>cmZJ}|2)16NB;5|X>yvZ@UBKlmy5m!{qI+te&DNb>ow{0MMo9`GhX zy(WeWSkdZ%RZn)pThd>-WKvxWFj{$lG&V5Uw31DieOi@MAPPg%-~Tq59U8)3F+aDK z@M_$^6`!BR=Q90Tc5=M9eUy%g6Rs5a-PYH-^k_CshIFp0tjkj;taNGZSkbtMtxEJ< zel*Kb2()5=3vU4}_{QAye};a2+c+`CL@RLU7Rkr$_fx1yUmI^R)xSo)bfpDAkn6%= z9Xy`WDC*vSu86XBxhKcm9UdELgDn{N?Yk$^W6i2Z%WQMp2FBTi`*gpU8|Rm^YMs&S z?JnqNstVGwbPEcWw+@HqMUQ#pm1*JAbU&D|GvagG9oanynRLdK&t7vOOo~_2B_8;J zel2-jY2AnpnyF+LU1*2y{mBCOL^XOBvWwc9H|`oyz0_s!xLPjoqzJ9&6}WU#Gn!A@ zdOUKb01ZdXT5>X!~S2|3XUj>`1q=4kI*_MN@)g8SZ(}< z`^zKEM@#P@)9a3#0*#@54)fhpORP4I245kj??<3)Tty@%p9b~K zRS#W}<6FVBNMaDun-dxSImV24T0*G$YFFff{2?4iNkBg?I^GBpJ`4X266RdQ5B4(A zedq^dnaXl&DasLhlm;Gq?6hv)Ag6jxksg>TN^ENZzLhF%!>SXzNg3mc7X_9-Zj57{ zJ|sQRzroO^DHdxQ&_z`qw6%j~GGcB0t+Q87QWmGqctc)t$@Jl7A$w<7%6Q1jVi(#k zeeM*4V^ClbU#?@!-{Df#9bx)Ly3!1iXy0USR1@ESA`Q2Z=tN#Ke>G+#ZR?v%J)l=X z>rC%vno|rJ;l3B%Kx~dWJ$!;R)i$_U*wQ+6Jv@-K`R6Jy`t2@iS8~NBrf#G9#BHuS z;8D%L!~9i_w7y!$oh3%UY@}J+3%*{HLbwGBtm`4X1;?+mBMdjStYaers+$!#<3^)! z=PY?q`_&u6ccHnd2aJv5aC;LCnx^~4V+IwRZ_nWFc?fEDBRlcYH`(kAV>%#wirV67 zw9a-5d0x7Fp-nApnd6@1sZ(QijW^TZSk1|?_2Nih|CmUqC!BNTyL#5Dxn%uH?r37( zw$p6hz;m*8$!uxj+IACQ+F+H#P0aJdc2jq>-xgSEW_|Z6K@TmmGrOL9Lr)i+#x}6f z>h5TqX+*u^PWFT@oncX7wjM*+)X*#*?dO?Ox94oHpkta5yGC=GNsztf(i`t$AEa%p z`H~n#mSsyiaJ5$&iH`m@6@0b|SAQ!eP%T{U6MfAg+-Gx^m*A(qh`C)Ub(k3ch} z{a5GA2PcoF%`^T;=J^$a0Cb*fJnWdi&kLJ>WKG;ACpjrXfKK0__a+(pkj3*q@v)<+ zJuS~m@krIPYAVPdi;=5~g3gnnRuGJ&-Bu)I1VK_y@k_;`#055dmKLSr@@4h|)uN6i z^UIk!)wO`V6mOUJ)!e5p)6tb=EQVfd1mvI7L6~?P&kUO}XjwDau1@GUYaBK9`Z~z1 zt7f!c?8>to01iP80cYoKK0{GycDo;(^Y1lBxaeAZZDPwCNn|lSDta7~H2YGx6r9tfE#$|cuC!;xUM zR-}8|ZWct#nsf*F0|&{wKCAu zoRClkaBz${Y_e3yeqxm=wq77@VGk0};S7SjWv7{ks&dI45iu4>sm^D&E`1+y%?@7e zg_*BfO0|yjyy%5m!t<~N16poD)nqchaFvthsAb^Ue0 z4dx3c#~_1an#-M~kwKQbJ>|%$ijTD>qX3THT9B&L)Oufe&ifuIJX|n`^_q$NpDNt1 zs%Sj46oW$hF7e3ZY1(fSBlU!RCtrm?au-BnF7eYfNRI_e9-p-dqrMwQxY8kwOpzIu z2+)PdJ)tfz&y#OTX2fV8zh8=rSAYgG`~nyw z?5NkjMVR#0@mLtw3GiCPzSbosulNUy`Dq6x8|sXQ6H5Pfv*0eG+u&j9#A!QAj_hh} zaFSyHDL`DW+%n#R_}AMXXYoKBXa(60r3 zes4lvE!-CFekViqc^0%@5}M@|Vw{4=wvF{BYHLQV{9~T&*SD(-PhTy)y03sT*Lc_T zlYii{VVtvb5MBkeZ(Wk5`?~7i0zbZHxT$%~@B;hPvT;2^K1JyHfG;gQeZOxmt%Llo zR4nh7QvYs%XU>H0{bbdP>GSV&9dFWeK}K0xzZnwD@s$vC z$(Gwo@6#!}d;Q0|^aTxJuo9!z=sujGI*Xa(2qP=vTG@tcLKH-g1yn43=4>1n3lN~> zb31D!XUlxQ#U`jm*Ptl>8FyjHL0oW<&l=LECBr34yL->78NHBSXl1ntAywx3B`A0t z0A)~jwt1e8PrUS6o%{AIBbdw7glvjuknNrAPDxGyS;$4=aunc_s8hf{0r>G0qH4*w$Tl`^5)jX~FaG#=7_F#{@7nix|-dL&|I z)?*zI4&ym`d~SP5^-I~nd_$E~i(8!keK)Cki{@LWQOgv$ zH!8E$6{KydKj*)6FW5B5sma{g(QzqQSh)Z7L0V9H>|dlG*F9H9nn2;|Nm_cuD@F2z zx4&ge)l8VwWSWw&zE_v#*GViN^?nr=o^r22w+EF^8Bpz>Px6cP! zgTOUT5Sy9Ui8UaOGD2LZ?Q{qg*B?qqllT2|i=QTB@CMOUG`HNt=*s((ti#Ww@b_kam@(mm;6CpvQ%oe%oFaP6pEV z(2)EUxvm$&y)HkQZT+v{eR85*0(X&yrC=W*H*<^$63t=H=M*$O{X}(QuOB|K6_AnP zCkiEi$q@`D5G(JIx%|6OeDj&{n*k8%Ytmw%zw5b+!7DIt`e<8HFC+0PD^fyE9xL*X zjRgK0Mz9-(januthFAu@c_bAI)40i2|E~Y^zuB`^g9VRHl_qU}Di-rlc;EanUo(9= z#*2OiT5902CQFbEh;}bqEoZR2zNu(c>=RygNSX*CGze|>I&z?u-#Cam`xB5B#%J8X zT>DdHq+A@Vj;@-PM!z9Yw~902R@3CmW_;-lK~X@>AQdo5f}X~a5m-Z({GN)8N!ds8 zJiU?eU1(`8*9l*H|Bs_{@T>cM!}w~MC)>7do6EM&$;+#gZ7$o!spVxY+sj*AUbX6X zzP~@=^ZGovpZmV9_mzSBrH}>WOI0cw?V|)z z;@-Xvixhp7uO8_uZH>h~G++XgvC2f2Oigg>@B2d9bE+}}v$OQr81(KmEY-gKqjV57 zGn^PNARG)F+P9b%G3y`uhyUIgQiPf*Tc>2gQIn?8YYEI5-;pZbf8ti!Q1okE+ru4H zrEHpkX|Ir-Y;H3n16~zoP#k$PGx!w9R*6Zx9j@l4$bHhuoGG>6sKN*5H#u)~+_AQG zt{Xo7F%_GQ`(u(6?Yj(vtYLjRzxdzw5B%?5iKf6V`@!?0D%O+eZ%GMsCBTQ_Ab;TI ztL;rVv6XZW(lE}>(_xHJu0Ir;IY0$&4L zRJ*ika^aTbB!qiITT#LL0Gb1vFvSmz4;A^*FrAnmpScPVu!Hkbny%!g`CumYfSOAX zwR-!4B7Dp5Gp))*+~+*Bc&l1Y=V3TxTk3lCt)3}DvHF(Kgd-K4!#Gwc)2pFZ(QXvF zfBBk!xh9Eh=jLP&m5EopsztMM;HgtQ$NU7Fhe-8Jy>|DykWPLKnIiRiMa1BWk~fq> zyvyU#T&MbqTnwcPA!I8#KYvaj(`*L~x66{(e6b4p?r|OFW>vWdLEgmvp1O42u6M}f0e{w>Bv+<*AA(M| zR*BJejh3HZ*_z;_<LSDR%QgDhW7>VOxTtY}$O^Q5qG!Lu z52o8pF$RzO2-P~e3qR)ABITpm%AYx9PH)sqZ+K%eocVS*#>guazVI>ViioD#T9aVUFerm7FLOg1AAW4h+J zkc$a3`_%~RL;~M@j2Ei$G7o6uBKRW5!9v)~s9H2HsO=Q9-?ac7hsr5&YuGT@=R5{s zlmz1ePm)c?()-DKC0A6=2D6a2{GQB+=z)e?)^D$I++Mrh>SnWt(;CzjI=h!;Sx9u} zKJdEh4RxoQIBc{;Wrin^lMN0Xm9q@uoTV8&;xRALwN|4J&*rF$K4`}@I;*Y;{9LD9 zF@sH9f1xzMv*z1-&uJcE=%bF9@|$KM4y|%{RP!=TQ{jb5jXoG4eL7IXcu-ex6YQrojU^P-1 zRY~Z7SNP8!Lmec0m$b7CD9HiuKxcU;(Ze?)u3i4ecyy`)5>L14;;N;l@8uFCxVRc2 z0{{r}yNY(MBNvK=#c)pAxx%`V<{U3hHVx2_bM(Pt^NeN6c_HhZ2qn1JIZ0Y_KcoeU zFVclknnvo|Hsdj@&G;Cgz#b5FGRgTzxjE&iAOlwGd(cBKnLLz2RRQf+B+i(k`d=DZI>XM?O)S!kC1(7sgUg1L5Y z$5PU+*P}*yzN9?EEFQMThYi5d*PH{v32Ei0UZWCm2Lw$@OG~26#oqHaIZg=E@@Z9% zMfL#vK1Kd3fD0{!EQ6o2kqDCNo9BoDB8je z6pP|}xSlT0b059*S0&}y8jyR_Uda)$N)-w;w85(7H6L6ldbkpJ zKLz-Xq9ePbXU5L!Vz!>kwDFbOEpIHix0eBJcz!pRYj&bPaq~{zjT4EAL}M~Xiao-U zV2Ax_#x}|rqGAch&mEe9#>c5BNi6w84Lm7~9t-2d;Qb4Ev}>2Fft=FbmG-rGM)aA>4w+zK{% z(`=>5J~L4(m8p$ecZyNJOKS~#Yrd*R?QrXwAa<)2u;j{J$W}3WaC?YyRMY`yL$I>B z4T(KGz&1R_U9AKn3%&~oc;~`q?m@u91ygO}G^CUJ+fnfVIiZuOD~+La3H>h;Z4Uzv zLtrgqHgE1`oVbJu3dTH7>8RGq8Q1YogU%8DBR(s&^%H}|gQkbtR@*_1w5=g{GMBmM3#P`&c{ z?SvY$8u>~FULZlWb>607lv%M)GFq6AD4KLhW9{I0-9wR5kp^BO;_TCtc7&_zgd25| ze0$AK#Zc9WdvoV!ctfbr7Y(Z}KaKE?3ak(!px4C)eZy@Nt? zp~N%-BMVBou8~~{K`a_n4Wo@bb#hf<_JP_e4e3NxNb_exRtjMfnWGjnV`;k@-4+0ICS0UJTEO5Y{(!QWtI zDpzTuWEzlPim!J^3r=nOu=!rsqOZqw`Kvtj>`AJ*x+Fn1Euwym^~ADeHbiw%g2kOq z1+w39QF2CJU}261Mw3|#Q;hVE_@$73B^xRjmHtG;=6n1jL5{H>F-GDe0zs;Fj+P>8 ziTYs8D$P3mlNP=vy@t9FA!3wq0UZ9Snaoq%&(O)Vlj)@r$*QKrsN)em;dW`8oh`rK zVgiq=h_h?S$IYbU>z13EhOlH&N_<24vmD>}q+pA1*-PTU#LBZqbm+*Cv2~I@r+Tnm z@T~`Joj+#%ZJx&1)Wj&zn?4t}EY%|@Jy(Y;u0!-4-dL{|h&Sk>tG{oK1eTFkqw|oT z*6yuYKKa+Kj*N#!o2H}BttobEfvYU`=dmZMY|n&_-)fKgFo&N@QB^v)9O;&nW+r6G z*x;5j2S3zqf)x9Ah7ukvoxwQ1QG>#{*7VDjfgZr_&A&HMuE%K36K27~$CiWJx3^1l z_nVvmv_6yP?vMTiHB>I(s zK@!8*)(7oi;6}|+PV0AE&e0H`*Fts1naXzmrmJm$)dziyTIq1lR+lE#PI|N72@x^= zH+ybP56{g4#PB4VK|!m?5dbu9zJzE%q#d_gs!dBVi5%=x-@>Kr<{W6+()BDZVKd$# z(@CUuX13k{nsD;>8SIafW*FdQ`{eKJca%v>+?sO+B*_`Y9&b!GJuqZY@8cZiU{jiE zCp^r3odFS+6Ee@t+B$k*Pq9pCT~9XGvV{shm$e)&q+hyaBG5kRH9@KgQ2d~YwyUw7YD-|O(I z9?TXWF|argsUrxlrDa^r?qiOouBDavoS`V0XK|T!QV=q81O%sn@{5+Mrg`JiOF1_pa-=C{=CC!z>a+ zn40n&Y7nn=2eq|D$|4J~?AcPZqCWA!fcq8LRv^!t?8{gvbc(8mMLnvyqB%kah38d& zZZp|xXF;HLaz@pI)wxZ#cafS-j-7vB{_$X4F9bh!tIYh+8hOGFJ~91*iFIA_pQ0Lz zf+2a)M|@bdhYOXj1NylXWXQ27>zp@#MW37aLXm{}Z|lq%{}Q0RkT4-^@t0YE6C_~) znZnU!RLCR7SzFxudUS(8nGBvzE-D2%Lw?le@2kJ~@sE}zi>}Snx!Y)uI*Gx5Ic&zO zu24y+A}UO>1#Z72d%;tWq?5EBRy3hzAKC5^2_mbByZB)@4+7A#%Q*F}$c>gLnGO*) zRhwm>G}&#@Hp}0>g?=Cu&9x~2v(BoJ+?olos-JJ^(O4G}zpNnCDMGEtDE$mm47Dg1 zL+LcvV>O4v%V_S!rx!cR)K%^q>YY3VBhp8AY`>3sa%zPP>{F;1fJv!#&D?&MYU4FT zRB_l-ZQbf~RXc`-0BcB&GvVOVk`U^N#M;KvdH4oxl~7OiCNf&k$pZtpZ6@bD_P4CDJ@qb7Gn--%M=Au*qlsdILnYHpCC-vP>^?IPgjkX4ae~RjwT>sIP+^Dc7wNALtIr1+P|xc1E;Wz>>skgjVqm2AU=II!{(I3F!CKHk?TXl`GfG$? zIMkp@sk)TkFO-#NNwXDhjyqY#k9COIYYJ^1fQq6V@x^XDZvy=Gt1LAokl7PeQ5mR( z^wqR+Ht_}WMS^+Jx~(;CvR%M^6g*)u#$o*G6UA#dFzC@zs?%LZt z1V=KX1F`d0#QE0^J0xcKx5zIf(O40TNtvq|h`nh7ElVD0hM%&WPJUz7uYRV;O{c7t zPhms(RsTfvJ>)iJ3lXgq^q zD%H#n0s_=tlm zL2kmbV=+gMZu2IO;xd=RP)g@}8j*E_ixxf_k*v@vW4O81Q&+Nf^+4v5bA9)Yp`kzf zTxxaLR|MGbGcx#$8(>b@k<#Y8>w~r>Df;q(LUWWX&H{L2V&`;F0nqOlVM6VU(Ty zp|MP#ni9C;A8~ZQ)eXSY{)m05{uT z^ZSbm7z8JiJ~?2UXmt%sO+g!H^Jn%9H9-jEJVqw|ZM!%{~!qpDcUVLi(4l8fvfUUezC zme*U!yp8j%klKxynZ}D?IkKJlr{v)2GUhE#3jI`03@j)ACC2BvFLgFh7Jfr$1{F(M z<$JiQwKTVui0bPth}y1Pl5_~&=aZ3dcRcUk3TK&2ttK(3Xr;o}&PxwT^6G)dOYQ`^ zJ@;*ed`gg8H@8^et*+{wbF2f_7Uzd>T{y-@Jwwi%k(`R^Hhz7r7--BA&9ffoKi8fX zcrVFt4V=H35)hBH4}u;Lh>A)rU&9H_iLtI@sQ~YvFdsfB$x7*nY>D1vF(@MQky+~R_lq|# z9EPXDEyyb;q~s-Az)awvXQQ1ZQ>b|Y+<)%1SJx5SIC0W`>d$YS83dBch-K!k0E=*D zWtnQE;n0bAWIod2f<#*p57}2Tcv;xY{cHuh*MYnCSd`X_>lGH?d|>%uvp8U2*uh|y zo?^#eW%Sn~^Ir}h74`-*tG6P5?7Q1R0G+Qf5Zmd`LDHO!gK0#EABCtl3E?CSV{tt; zQ&}`VzZ4lzos1b5^kjZPMn29{zF7E7Wsn_vl_sGEP^H=&{RqyIXNbLVrY~P9_W{`PgYx{G?E(QJOHG^Aux9*a zj#otDmLz_^Gg%GekXY#%qCU{_`Nu?fbZQD1wDz}z+qD)wqXhW>BZ+^GwMJQ=r=qFE zf%)V{uw<8An~(IEVTD$%Rh2e2bH{5VFLTZNh=Mgk0Q`EoX!=B}i&v(}$PNBPLUdYY zXWtF2jy*h`muuShXN=YJA> zlE^7H$S$OG$YYfj8hn~{jwCdsPFp|GEf zn_h@@4-%{Mp$ZYB_}wlPi@;sKAz1|t@V?B7rTpX)uh<00oE8%7yz;=1U*Dq~k}d$W z*8_fj8CLq3iS06Y<-2nykObOsWxL>DWzx@FW+4MYoi@nhFW^l~!pE_z|1|!7!@oJH z_ZQ)&NicVW^gQgL0t!C0VIcAnq7IkBm*=Y8x03WPSO2Qbn{REJ;)~4_xXl93f76ya z^V<{K*&Zbu1z+*qZ$1wKBZ!u?eCuX8%F6cI?Fq70ro--?tuHKH^HZt^o36~OwEv;D zz;n~+2VmKJ2fO5eF2&09$cvFjh9^n#)Eg;UoY`lb(Y#CHI%R?*4~GVhM=C!58$o_b z{p!V=%qdw}P3Gdl%GT7EUSokb!Gk6&&dLoBnF1&=I&SFI%Q~hQdnMjX<&J#q*xXLQ zyPq7jO!s1*-HIH(-=WCd12WSA5m*eJm^e+W?k z-144%)l$9w%E!-V3pZaP_w|p>OB5!n9J+3%Q-^;`AIZzS6mv=sd%aA|=g?SHG9)tY zFAqz$mEd-x)s4*iHtCDr>uAUsRSI*h!+s44Nu<1*`p4K@a)`z+9_wunR{v^@(onb3 zOp=iur`sPV@~Ouy1}j1*H_GTn?Q7kXcA5i`n;z#!zrDwKi4oU}HMb;@V*jCr451dc z8z8`JYP;Mji5Q_@XIRG(Uktdu%Nh4S8Fv30)CULsW$=YIwvbbPR@q6<{YR;*{IBHe z`SUZaN8;b?>%l|gTgrRX>%95X!9&dlikE*s$)Gxy+9{VM}Zu z*CMI)S+st&>uq8O%l_dRu6*eTYu6WIAeL?oYN{5B{%SbgieTrV`Q^6Mu&=dl+t__C z1l)m=rxtoIXE|h(*e3q1l#vOA1$f##QS&?fDmD2%C4++2p@~VWTujRMGe3nC0 zS*oVoXKSUaSYnVS+U%MkE}(}L^H8?4g_HziG9h`o^zsr0k6RU=@#9H?fNanmiX=JosXNzd04ApQz%tkN`19p!ofs+a+N~?v`_8xFgVG2B4CB~%7{0AJtkz-TGT(o%u2Nw*jQqN54;%- z%Qf-bF*1aPvSOCB@r1({t(rp_afp^{dzFdg_uQ+0=_O(cu?3t?8$+!2)LRC5jKP1& zE_7s0@R@Xsc@E{GMp#;{OjW3OG-6mvLtj<=6p8xH;|`R^hL6#tBhbEKf-m+AzMUH1 zltpC*`Sg=lRk(_MjOJq-@;uam@j^NO0VhjinIlt>xuj6ZceYf$Xt#1HrkL}E7O8TG z9c0s9wr!m8Lyz^X7V1WU>0w7t+661j+$+~V?mh{;dp(#xb-z6@6huMMdH)wC4u%PM zN?dn#T1o-z8OY_oHDCMV9K(U z43w5sIJxm=d?T3#9BM{o8yPNK%rr&fal(}k8R0E*ItOa?{J`(V<#P8wH?!0jiP-9$ zI)46;A`7{%eB7;ukNuZY1a82ZNG6~LYwl^52dd!HDr_bp{^|0Fxw17y8R(fZ8@C#M zZ^E?149i1$Z+M_#tHGfhKEgx#d&}2SMx`Pi+KC z$mcK*l(Dfl0wsFmEQy~W8oo0ceyViMabbC?a^M(b% zLwg^@f5&#ZUUnfv9sMqNnPfQ;grA%3!eO+8s1_NI5GTV~uR~13_PHe|YoyOGAF>`V z+=?O?391K+I0mK^n^-q{rj=3#L)O#Wj67tSH{zv(Yc~?Xgl5LGeN5ZOA$$(1j`1}h zub|^t0EnwLqpwMuOqL`Zs2~;*qibORMk}AUwf)t+|ht?8xl~l?G#B$Bt4UgL#SOKsU1J?79Pj|P)uf+ zgtk_Dk_o}dY@k9_VoYTEEL)F3Cr2#pukKF&G#(vA_z-c-s#1thrX_&W@0CkkVkN8$SzAw3RpY19$&yR9``T3E9uUqyr*)b?)4Sg%*EeQ z`ju=JE^aLhyN^z;n{Xxsi$TRoDj~zI`d*dU%Osdx^jX$UBq=f)GMyfbb{oAqj>wh^ zwzi+nypB+-bQnN{D!3n;qdPTS`vF!9y4Bkg_47K!KqZZqDCjkh!P=NolbE!;4&CK& z)ZqW*E7ZCk{qN2!JI^JCXqbt<6EI9^^&AC{F0!H#xs9(xBn>+qHXzsCJceu}tJADr z2y&8!YiH!O7VQL1@qm)m(B)*ya_6Rd?7~C0vnIPQ&itH-ajLr0ms8|XvI)cM;*$H;j*B{0$(; zP0?mMI^JrVG+s@*dYUx4nnA%rTf1X_ht^(iPu&TB8qJWk9t5)4yBZ7yjyVItCt1lF z;$;k8&XFF!i1v|ZG};03dkBuYr(Y71nYV)TNM}}S9*EDwqJBR+-n~XFeGB?C$Df;^ z$P#fo6Qc{PDbiZ}yrDtdOxaWb-;S!uBgFt}bOrhJ;$>5NsZv7Ncl;MIR?T`%8}$@Y z;XJH@gAEi*d9~OvYH*moOlI7JmtH(HSaq{w%FZ@sFl@*j`^PszM00Ec2C*5swRf`< z`nKaA8a~vtA&d3?-Pad2u2^3`P`KJ@a80dhAiZ&$QBL7kDARFq#f^XE)f()_>SNPR z0ywYdw`VR`$vgk$H4uIg_EsxB{XE`)l1oLkknCYd1;1L7vG2!iCeilF9|W|{*?jgi zZztu`fWGFk6MQ{h6`;oeST^+knuVVJXIh~+szEFc0>YBn%U{OgzY~?4vOZ(LD1hI0 z1Q3}lkpe~#WQ}n`+NYQA>%ANaFHT>5*edx+%V+!#XoCskWS^K(HN_6mF5c2m3FWn2 zo4W3(eYd2g-PoP7H(x?~YIu2h*3x*=JdDQ+C6y)FGjtuvoC*dmv=})lGdOsh*PjqI{A60_EK56GzX?ve;ngBXd7x?WG_Y?mNndO=-25WwtF9^ipn;XH z#49G`NLh;?@G(2XQlS=PMqC-XF_vlFv7QszQ!qoHd)~CEH2v{9(m&?HM zu0zq?eQCJ4zst)A#VH}hb1KB9gex>=f^&?EW@2+ii0e(XlfHs~>K81V>!OPWBHcqHH0N?(8ZxA% z{D}Q*`Az+B(D6ye6Gb6#x+;WLj?N|8o1+V(DMde%SBssWWi`ZOz=}8sCeak_YE`a# zmTez1^Sxbh>ZKSZkyu9Mu?O8o+`^sN*yK@#J{n4Ix88V1&ZDe*ec83y-M`nnisnRt z&qzF%slG3c{a5xu`9(hNlaHV%*Y`C0(44W{!QM^}#*ChZ4P>4R z^fTOXfM?72f8Vkgx<;t7Xq6yP+Zgr7kX&Ttae7MuICj(cLhTJcCSRkDWq z4y#@%Jb-bnwF)UpaIZ@;aNnC3R{9JT)P`z&s9W&x*FvGEG2n}2Qt(8?Rh^y^&(Fx|D(e2uA3xL9I>uN5u ztrf0una_vn*BDm5%ajcTcD}B~2`cMszv;+82a=e`9eC~hQ}RT$t^X(ChSKksOU*F& z>qJurfK9a+S+wZ90$r(O>1U|HfoTJ4+ z^mm(jPMgH%AeZ*B(fW}F>N9v5KIZTWE*i|t7pcK2cw`{5>p!A!WOVu0mcxA7%sQtt ziYwMe50xq%7ZRR2az+NRoy49$OTW9uj_&vgRqp?V(Svk~4aKXGk#$5frY`&xH0UIXhYNz5c0w=aBiA%n}{W&yY?J zAOk030<@{S$4jXg4WOfKBqUaya~W_L3R8ziZ*!}_ZrfNAxi1;Na?!8cZf50n-z$%kvV&HlpCIU4#*0Fa!MC?*bI4_{>*f{(uR$%u?&+}Yk0{`VM|hc( zVRDv{eW&es+tt?sr1?h;E+cXj+*u8D{(+L>aVFx*{gg&rYFE~9l^zpXqnyp>X}^4` z9d;D-vKGlUtX>V!J@X%;r2#4!8U@@cHhLX7S=;+uGF65Z6ODv`L|;fKys21XGeFd9 z#oQh$ls9oVU(;k3F`QMj(+M-yO3|ajpeRUPpPBkPz07$*S%a$*myjReuDVH??8Q#-hmo&c2)ZEZ&F#k7v)`9*G-m1w3{ym(9 zRg|%n^!d><#LR|SYZ~?8+mFgI_qKnBb5M@{RxhDq4r(LTfKAy-n#^^OrSOJ|5?YF- zrLYy@(R*qF*uO5=zJwGdmq(ywYp$|_I~7w6yn@D_U#-umB*#+*R>C0BmaQTNsVipl zb;lLj_aiErbz9=>S#HZAp|Lo8?~+Z)8q#Udx7f6znLxfTd<(1867Az;+63}7+oWb# zLTJ?H4Pi_=k0|+OC7#20)j)wP_EC>Jrc*J)X&MnI(kwxWQQc!OKx3RVox%~UCPOrK zma$s18i|WsxaJQ`v2SRKOeTKzfsIi)S8@3$eZ&nXl0r^UE+_FV16f*yO|jrMG(6gK z+*;Cu@vp%NPjlji(-Kvz{_ldnJT0Wezz^4>-#JokB8;kWuR~Cx?t$&b7Zf$*xTKSw zmZr9@%4`Ehwv0hlbL>4e#Ak+J-Hp?mt=ojpW=%J43B@SN<^G|7(C?|WPJ=mkxJs7J zeqUDbtz2A$duO79Yn;w<-PlUwr7a=e*kxBFX9l%yO^0YFx|WMynH~I>?y;FiShaTI z5r2I@^kv76C1DB;g&;3PG}$N$2Qi4?)Z|ew6(I%~sSN3u83l&q{9yA0chPH>+}C%w z{;pO;{|jOo-qE&CB#xtJ=k`Tvz<82WL2FCfrLxI=gqfbfxC&H&S*{ImHTJ?ETB8vs z^*7`1-dufH1^mEB$&2yL{{QWsg|tMeoHI%$98S3cj)#Y^mN=q>%D?=E=|@&3La+m=F@QUnh`-wk5Q`S!Q9C?6 zx{)9Obm&p$b*c0k0&zrABSoLH3Y244228r zw*i4uhVl*8y>DL_8(xu<2v|XrLXHHXqe<{yakwPZl=SewC*R8B$!GJj@#1r9PP-Z7 zEMjkOufBxXqkyNi6`uN%!+0)@s?D`o>Z!-SJ}~=rqNITE6`P1u@WZv&SYK-L3M{Bl zMM!J9^2gI6;?Edn>lrok|2{gQpsuPYlNbnsCpS|d^=+&ZUhuzitP8yW!?fiMMT3!i zE$TZ}Is!krMP#a9(*~ZaYk&U+!i!|(qP9YhZ5aiU*4)D6{^Z%}9k>+|j}|w(RE=Ji?IA`wy^%T=#P2ZTMM*pXEp0?*=v%6O$hG z#d$x#sX=l1(ZQ>R^V|RwMx7?FA9Cffzvc4h)H874;EI_KhM?FohSjFCkamE;&}9lV zn8#1s5Ms1>IiDdw`}=Xt0s;MkaztB(vj#*FlYutJql||+z&10JZ!q8@JMAU%%@n9u zcP0;P4z{=|zVS!aw_nqBV-4Kg`MOy8PpSqiS${9MS^C&#zwBR5np=HVzTi7JnvN4J z(wR!nC`FjrOzbYtyJ8zK(<&#QwY zZXzJZ4+O3~dl%9f9W2hS4Gwd}?L88KMSikXzk^Qy>~8duRekt4@;v zI>RtDUWq=F943h^<4qG&UR4DUBfDX%-xNLN!(QrJ&X zB|Oi>mSn!76tu`&;<4I6r6SNSE7))<4nh_=GYa_G6D+wCbGz!*-i?8Gt06Wf`n5AX z77=fwHP}n3W7?m^^R%tG*|z1t?`4HFG$s%|gD#zb-;hNc2^(!>fh*asNW7opC2)z5+e<<=NOM~ zR%B{In3)Cr?_m#Tk2IL|PDe{10VESCTygTtP9@!tN0CVe8V*Ol?|rK6$G(FbL5-Li zfpWmU6qq*a0VurXE%KpkOKpJU{WMv^1(@VQSUJg+a}8E~m$?sNm)BijK98uWRNWwd zes`iWvtx=7v}3Y-o`0@(H`Ytt*n9gpwR$#3dgyhW%(#|EDFXHu(AP`dPCIJv?`uc4 z#U3`M?6a{BJ*UDvp8JNac=8rw zgn-#re>82zj)RFJ=Qk=Atz(yvLRMSQugRV`yD-r`2_7D{QJKDF))9UOe^N}9Yyils z_F=Qdni%gyXRJNtcMD^hR8G$ffjeDrL(z!t;uSH+vog`h`Y?sWO_CyD!*NJ{-VOQ* zkqby5Qmel!Pj`WWW0$Y`)Kaacnfl5yW+b`9H?^%DzVVGel2s&sfV6b2igOYmf zn#bs~L@8ld!B=A&ZXM<@ikKTk|CZEiH1xOcQ>BKusskNYh=1E3H8#yuWo;qQ-v9=a zUn9}hOFzhj;M}<2TExd99-;g31AKyhRmG#(Vy-^@Qv1}>(M%o){Dh%({3O?<)?_m= zqu{!sSsiO5W za3dUpB_rL@kBeXJa>Qt4;84QoS8`~Z+q+W+%g0w&KorW3QgZw?+4x7QgqlR^&9!JB z!|1u#(rnK-(O4?s7Y2>}g3lS99*F8i+O#Q=9Ie)!Z13%?7d6)eKWE0rp!X&pvCbTo;FBTp&I&4F?aiccIa zC()vd+LqoJ55Jm_+&I-3NtE6ckCK)^&PW<3kF(UNVfJAHvbbnq2*Ce!d3#U@5zltt z+xyConEHJW{I0Zyr{HvuAH`pwl+1nW!AqY$r=jH+{;Nh)tica6AC!;~@pI<#bXFmJ zYZ*E+qW*D!`$-rBgNl_fr^afF(d2Z%xk{@>={dfRU`rRs6}JloD;3LM`6qLjkkmI@ zXGD-dw_*77k_P!Vu<*1VUc^b0VsL0nQJeN8TgU6UYs0S(+TLhSoCd%(iqIt6j8Hhv zS(D$fVK-i!T{cIPD2jQoEXip)h7sGp`AvH3P*m*dcw+EsA-DvLj1O&^^-d}$^IcJx zy6(L~A|2Ic>p^+-xNvFz?`L&Th3e8|Bo#zM^+`;L`q7hXRkwXcVBgVm{(+0J|!{ZI2v zMRJvw94)UxdoFL^5zlTYDE!aQ>5=l#FakQXcAj%>@*>f7=fA*Z`We8(s@hY_#?Ku^}_YF z3mQr|pjY_1fVs6At&h0)wqcwDB`lc{K}(PQ@ZJ{>N7_{L-qwXfeac?Rgn%T1b@z(jSfvA&Aiw(`B z{KX!bXg4E9Kn8#1<*~d}1KtpCdp4_XaFd6A>W|ZD9kP|VMfJ_v; zWBX_2I#Cf!?=;zg??U16dH&EW0bsRPY9J77sLVlX(~xF{=^y#lJUL5P+6%zmDN4kO7xs3WsUkJ zDR+>s+NXw#(-Ku|0!7NuJT%nbzglRT*WU7Ap)$rbW$2QOGp@KN_eS;*EHStErOXP_ z=w@u%Qp*1A{o!<5ch$*Z12`@08!3VJJAjM1aU3^mUh+s) zt7-j-M7f1xkmN@+lI>);Np@Q_5lPI>bwQxy9sf>U)?BU-LUR|szCxwz?g zprIrZ%*LScZ&xfTk~GV@iXo{ZJ=~hE#JQRZEvv?ZK_|10jKL$53`sB7ZN_z0Y@n0; zA1hF&itpsjZ@heO0jl?=* zmGbV*MbQQXVC0!v;zPw}A^UU1Zw-hHlWRf`V9y_@jcs;dKT@ZujHEO}>RSENH&G<6 z{MB;80^t1FiX#h+Dlx25YC z7+ANvZP1sP{kf63g50o_Ws))8m)cZh9~pEy8FWn$#NVJitP=JAGd}ibT1M^5GygzZ z(4+HvI)5Zm|AXRLf^F?w3C^{$6bgn84_-}TvbhH~ceDeFkRS9N;dy zH4 z)uN4Ya1iOJXeQ$m<{F=M(f!29L90lefpjKb0^riOO%54)j`^d__V)`KL8Rk>o2Elc}Q>iI#$nX^^!)T_((IB|qT%{s8G3)!GU;1mzqyu?CGe@-$i$T1gIdXV$q^3uZ z&i6xE67SC9j?_T)kJ;KQncnJkj$kY>6Hb&WK||yE!)7lMtt)-*=T~>6uqs(hCHX*U z<0YqFy&decc~ddL>8T*t^QYka7*eWqn_SN`SMoEX)vgnRjw<6>-F`5-!5Blw-bqEL zzpu%sIt{3?tf}JucB-s2 zbo=bd4synJeaC|XqjfQ=H=VBe-XKU+oo9klQY-^~Y@eP?13d~OzvNg2+F1uQ6>qO= znj59wXQo9-$s^v6xJhZF&$S)k@QBX8T@P8;qMxRv*AZx-^8+U!Tuj8zL2VvkHAU|5 zBY7K7y#hTWQGxXR@V)S{=qh!AZng)q%UosQnC)_=o!TwLW&oC^Q@u1%YK8Y2 zMV+$|5EIeZ+}C@e}Ziwsbbnc>1*02%wIy_=}B5!dunOt`& zPcfoZ$k=$(XGLo&sJU-?99gQOR55k9<$j~pT)H(K*Idc&!rOlJks?~LM!!vWzQ1?a0t+5Hl<2?JjI`4s}L18K7t_c)T&>O&HK*Zm-PfHLK@ zzWws;oS9l!7K;l%iGrKbud#aD8XbCg*}?ZniKj=(wA2zU#?~9>McI>`m5MG+ce~;` ze72w%mS4kc?|N)c7jMg$t_m@58L!|!PU%T4x;~%p9+UhDH9G1OK%KDBzGUAkA*+}& z0Bdl?0L#9vg4KF<2N##km|dej4mIx16B)XL;%-ta)Z$iNUS;eMucQs^TJZom=i~-D z(2Whp#2DYGTlcc^7PmuW*0ES=w~|7*42f-2lh{IGb;Hux5YI4|L|(j~hXy>Y99Aam zI?&)Ze|#14qqPb($wSy5zaaiwV1q;DDhmxDDotlX*&K%Ve8J#M_a*qpi0(0Jod$B2@7I^$9yr<A%Y_~|b!j)6~iG$H9$ykKGKFnn|B1i`S(N2Y>EB5;FbhUyMV zj&sJmhU6ObYRjFB21Y_YXdihubxVa7sfVtm&>_tl3RmB=bP7I>g~bmf3UqHojU6^O z4Hl$I!WdS6&$^Q9$(rMqwTQ3H-jZ!@Kl#`R@8mm|FZ~put9MaWR z?XJH3r%dyFM_9)K<+{Kt!ET|kxK61Y1&2iWWqD3T?tsPSIq-G#WPdj}3jh}NL4pzI z=ach*PKP0q|2bpLa7aJBwVJd?gbQ>sz+_@IYL3Q7UM^|Rc+L^hbKcyXX+ zr2{c{0w*W1FkOnL6D%BuP#Qt2mCSR72ov@{lFqUrs;+Irq;z*PNQZQHN_Tg63DPli z$I#M^bPpk=04?;qG-_S$P-Yn^cJ)FpPF}fMY9L410;OK-@GXg zEU;{k{rX1e_rUPo1g)Ihd^{DL-5 zrv;W~b3I$S$#DDNwhENUev0NcG~&DBG_r@CxS@UmvJqD-19tk*${1ZVU0P1kly31M zj$w=;Ugh-M1S>+)J_445tUraFvP$p(-gHIsdM?`-keO_dR%n0AZXP_@AXA$!i7s|% zW_G)TfFvtmY@tde4tKEVMy=_HtoHaUaAKSKVumh1jhF14n>9 zihrKsL_5Gd$y9e{QLJB@=sk#N))4-r%q!2v1RP$2 z+)B@KRO#U&fR*wgUuoAfF4r!sr>&B6a31v3w%X}7dJ9?87%=GU)EVvG*q<5g2s@8^ zi>eXP&y=H49-%oT+IDHu8FpFceyN41yFMw71>e%m;>L9EJ}ZAvcMlldZv@|)?PHnH zeW!Iv_;Jy9Cx1@i@@*rq4gVBcp6%q<5xUPC$RRFaf&TK7{TzF&_8UPH=4#0(oA27>FAUi*i~FM7(vAL)6-cED->AuI-P!cXpz==Yez2&_Zz2k3ViEu z-2}#8+=Qx#yubtDh>FE)jR6ERWX*zN}SD4$IxUs%p$YRH) z?U~?PZQe3o`wX)}{>-)-FkJZE@%U09nE_#X+MfjcoAY0LfHlm=%Oo9wVMzZSX2w+O2 zawKmsk3K$(wbY%v$#7y~{=7O+FGCa=GUmp&jeTePhJ+}bD~wCP>`BY`UFO8o1^W9> zsO{>XA02n4D@#Jgq9VIsW{&)GC@lPbhr8F2QHiM?)x6(v%XJ{n&l#7)1FC>*xA%X?Nw~-~Mq>2*E2=vFFJ*RGikW!y2aB)_k9GLH5)cCr?9V3gY6a zuDrR$j=|dEPw*5)mrZfqc4p1$h3`-@NU~N0&KlX(9O>EG6GVZ7X+7q`8kFp_TF{K! z{HtDrQT0lUxHHBg64O|^OH443*1J($$7m#jW5otK%C< z7I@NL0ZD?8t@@vYF=G#k{?QVOuDOP>*uDVhM0{%5Tx{7y0W6#-J23KDKxJO{Z2bF)LG4z z{BT0vH0H}j7By*Yhp*nIEpwaZ3lO9JoX9$d2-uA>;bK|OxoLtZ059E5X!xmmX7)r?Hvv_V*Wkjoe}h70qVl{d0?SgKK8=RBcTjx z#26Sa@a_Ex2=t?MskKdwU0$bIG#)id6J1SzIpONK`5dWs(9H?o7mSi`&tBTyxE~0H zdLz$7HoL^}EDz3R=#5YWCQrA7G(dp@dOpn=$pQkR`I_wo`oky;c=uA1;#Yij$Sl0|6Ib}fI-05cq^UylSlJQn$J<4P)P%^Agu9-3R24~Z*v zhcVFVoe1DB>D1o~-|p`I!KpP+_T3#xA zZ`!s*wrifoU^MPK@@oV-TO-=yS;6bYxfL>UxaGYCVJi|>IWjdh*{=ysX*8`R^tEsN zk<8tCHhMb&_0mJtVrhIn zKG@0XAYvO?Lr(y5Sd7uV(K%3zS!;6!vAg1G#Zu3@B$ETxK-n9_<4`1)VaK?`Sh2+u z2R%)OBx5st+?5{00MOA{dX-5LmtS{q#Ighf6!~6wetKb=U4rMWR%6+%w_1s&mCFx9 zI0r{%J+>NUy>SF;;C(>v+?b5)bp;HSH|9EYo7$V)1^2F9urA(zlmM25U4OScEWj*G z@j$Z=r5hV<=CaED)`wjo6i#o<{!v=3Ov(oDa(74eZ(BsBof1a)H*GUZ&Ra@~OiiaW z)~Os~&kjyx#bY;9$~s*>0Gttra=k$pl~C-)7?>6Bl{pPQQvKU2csZYc zwM~}ch>EDv!cJN7=t;;5rTq235`0;(a0fo@+!rTIl3i>6 z@0f`<=q?EE<7>^%4V0ktz?}`mbL zkWH?UpPDB}0_vc0UkzG>0)0|FC1&wWmvo0287L`O&Myz-V^-H2jQA_Csf?CG73=VaIH& za;!5_z5RNMD5!S z9Q5xrPB}2bE9c-ehg@52t=47*ovDb)BahTzyKVPWb~fAOY4Vn+s6ntvA zJc}7Ua}DKi9beh?mYrFHs`-q zVdpe_?A`8qI`S}n{uT1RMkX7DJg2#vOO>}+TK`XZmbZg2LD7Sb39?h z&PM5CvzeK{nSku^uIJoO2-DTt+Qc}zbGmJ1SmqVH$109C!5>3Qe;dGESOzMy6zR{8 z(RenI!12m1rNsn$yHjkW(Who0W`UXmivg=~)dx;O#`@h5uveC1^R=g9K$eMd)YBz9 z_=%Ede{-e^M*7ho>U9;Vz4Nt$Z;)VCA-qXstvGKm6wWOHt(>yWI-tp6O4Yod)Yzao zmv40i_u&kGR7nXCNJR)i)3)a}MW-_Xoe6~k>(vh|eU#Zvdh()^s1!+B)iXH}KJlnR z?~)^O01=v3fA>YnhGqlBTxDw^_oH7&)GOe2nuC}_3Ew5Nq7KHMl}IK1QrP|-Qco&r zoGEjvixdAnfZZ#aIYWtFPu+13x?d4bguMH$(N=5gkM$Osn8<>pzvI$7svU=|I`!BhS{J&|HP9m(^V+(_7olSS;C38SxZ&8ZQ zC}`?SygxaN;<7(&gNNa6a_wvjfuFX+B?iH_K9@*eOKZtR&)!kfvx(vWmsc_%7;9Ar zNf0;3d-r0xm&|aJH7eUaA#Z?*>fhqo4);3RRHPmdyNG-vWlma6eyJ#Dg(qJ8Zalwx z>8Hzh8WRYrQo57`3vh_7O0T7X+>sE_&Sgb*y=tiEa%`y7D;)niqvEC0`v~!txKeu* zVPBqjF&G}z=2TN3ck%{mkh%gybYbZMR*!=;BIHUrTCP>>X<2k|^yc>>0%B8Pv6|yN zsj55HgCE8xQE|mIiixW5-OlagOiV(gCq|rj<^Tf5vwu8iE~1knR2-b4jhd&;H0rI< zKVB6Nx{$HyFcHqaFtpjuGh;A$2QfU;;V0j}H(&{{6Re0Fu>TDVybb-#A|JS$9b)4v8bh(nl;nLV^W~hdCrH0Bs_+1dp2P~N&w=V=$Nb6|M&|aSI|ZjZ-+Ws~ za4Sr)+|?V$?kB3yc)k~7)Ril2BZL5hbM;fiXDWb?a>87gPt`Pk%fy{e0sXis zL+)SUCGzdr^sD&>BT-gRV3ID{bQ|nli4U@LEcC0g!+vm=+yo^Y zx#4**B~y2}SQ#U%H&^$R&g=qDFU!p+eQHEw@LgbOBNrv1x1Tp!;1`JUiC|y9bkD+C z13G(S_M3-Ar)*IE!+IuIA$n8^-yCnba{FLQRS+>fH_JgkTjJ(v_G>+RuR*YGw!V6$ zbNOU4L`Ji%UJcMz;e@ywDTB#?r3|JQtZvj3YMKy3?-1&&vePe{LeJXy$Q&j57V_`l z*8UxZ2X#nU>VL$@oB!3G;7Q^RMfw5Rw@eK~Lj@b5U&CPaJs+Kd<%Zk1(nuCBIBHf} z<>TfoQG;0Z5jM22(>!0+&`{oX^cIb>y1c^Q<=d+_Fbp7r(a7jtrCZ326tE{opRDGX z?l3cyidNsA(mFDx?LFR>3~X)4VYR52G=aWKMM}E}kAP@Y^i<6r@zMmT7H%NHcjJ5_ zE1V7W(x!F!3NfcDSCW{qewUO4z?o9JvKCQFVI76SseG4bPGL;xq@d&WxE$qXz$u4Y z#t*}LMo5xXvow};wZAq+-Nfi-7U{oZiSq4vNIDTp_LqkK)1iR5lE(8u{vriPs*JSwGw*CcLe%tYAXk6J= zMV^ldVFmFlH8j;u#8iPLaIHXrbkP-!Wp~VYpW6F_-r4On_*l^p3|2pH-#^g!YkD4W z7;cAVnt-=|`Nlp3Q7j!GadWQ^Jpfl`ICnZ)w^yH%XIH1Em(yI=Jv`)=4*1+1;^S_H z-0SX4Q*NCwLG03Kx)#9gwqCk@d+m}d7VMs_mRxi!jc@CUW=jHst*TU~JH>asvuuZF zd@HGX$o=j4*M`Wov}d96PC5|Zykzf1e+okS+J45eSMwA zbv#7ghl+t7WF2ccJwabT$_1lli`bkrJPuP;j&NCJ{o*jO_*=5ZuV1z&)WS5=Ds36^ zMYqxogodALDgFv<$ zd+wa^An>yT1)FA}R6VoKs2+uFR<%zYJBd()Rr;sNtdF_NnB(C|pe*z{bsQ!843mwmX`B%sgvV9?GUc5$ab ziVG81W*^Up6YG(?-p>dY0=Or(>rL|I4az5$n|$7R%3fk@T>4VN>zmI_etScJ!=D9%a@_Jk&I9hWCv)2eLFMCnl6-xStGmtRVjj6pMqwVEnm;9 zMmkqK_l$so6MN&IIi$CLJ*aSbYgR(YtH8{!1v*%>uyN00M)X|a^?Rsyk8-j-h?hC* zNYt-^BFL1G+pdS3tbZu#ol z+iu;~Vk^n&@~c`AubULLRsNL-isrIh?;L1d3I!U+nh-6!PVdr|C8!oN{54in{mRO! zx16KB({+wZVd3DdAVVa*)cL4b`!}1Y$s24MFJI^y*`4819VL-x&snuQ5HJ=&@Xf??1RRYeiQAESXvZe;#9lpd29 z19PYWXWv zML!TkXy_ytSVC#(uQwBiQ|k^!1vCK1R7qppA=EhJ`i^e;Y&$VyplJE~tSO9a)Ilsn z{!Ie154sk-khXWNol(XfF=lD-QAioZ)_rzN-5f7(e8n@Tnw0 z_qY+jm~f zG5=LP&~`MID{o6+*z!wde5C`$o2ksB3l z6Qap7w4IzL4nDm~6VsIw#cd>BDL2qfz7vJOG9F*7%r~Y(G!@d`TO;F_uvgwowJdV4 zUh>RVYB6dwB)CK*@t#cCF+>nvfqy+DAM)MP$Af$N*d@{B7;WfPvRV+Nm$e^N`!N#G z70H)5dU$}bE@i0n(ZOy`_UGI2g*u9I%c;&jwF3EbipWZQ8^iZmLFvjh?I6s$>D(=` zQ1%FER(fPL19gOi0_KLyEw+}^XB^$25b~}>1m!g`Jv*2t?X72=W-w-2iW!YH#;d0N z2(i}9Ss!zfYT#G7%e)Y&(bEjkVoG87P>0XY!T=#_vn}i4Lw#T9FaG0O+x*+0Z&lT6?xHw8Zuxy!vQ`eqIU)jHsY1|)?Z*_8 zCw~b|n*MKBzFg!P>RAG&Yyw6t+g;X4thX&~t|3S09Xe93?oI4kK}3Mj$P8DF!jDTI z<%@tuBJJp!MT;-1SHlBo4ZMCRDw->}FZ6U%Nu=b_z}Tsp*UQl9+RlDQ2aC6W0b-f~ z4;_MYAsV8u!t#O1*emM)0mwc||0i6~h0K9n7f>cKx zo))#+3dK5zhO8r!Ytj$Ve8O~@g`Gj;M}r$a5JYLMlAY8HGs#fb01=}!*}UG}X;Hxy zfh|)P$(W_n0yN4rsO;uPXCq@{{Y`6}lP*d<2uwWKB0#_lYTKW_dc`55l8gf0JM80bDpg&hFmHV{OL!dk8`F$&d z3-YicNS!cs#sAm1yfxg>3KFB3hJYrIJ&@7B+G*=<8z7B06qxOBOh=*l+1AcIq-W80 z4Vz4=pnNEl=?1}0F2*|k90_Pg@F-fHiMnCd;G93+Cf!XqSSYNnn|#jSEmjU`4+MV_ zO`lA95uw|7=aul&7#TU^G$XIUJ{l#+(2H{!4=LD3rrXWD{DxN7E)QXK-`lG+y<-Zt7+8&$7zo)34J(FrejTWc?1k?sp40*C zZKG4Er+Y@J)Tutde_iWhh&xtL*w=TMCR$$C9dppeyu;#+9WO80pmENN+`_Hv6;SMDl;vI=4HBgJ({WS4r|JLJqVE5n zM?WI1U;M1`=pYYm1$Pe01>-vPT?;Pul1WZ8!3IOCV&JD$Zq!6O)JQ2b{-MqQ>g^AF zK8?h4A&{z{J70~~C~He+w$$f+gHE3{^OIj4$Zh8>-$p@gt~p=uA{?LXzc%Z~c!9~R zjx{gPeY2K0$c9{(tQ21ZUn~-*rqpY92{Aac?G4Llrdfw6APyix4-!}_@+Au zbR?sqL4asCevGXOJWRZdF~01~%yG@XO+8YR1;xtpdMnFvv-%Kd0X)l$L3dzigg$Gl zts_uIjllNSSs-uo=J1;3#)4{gw)IFwjqd=*3NrDzR6H)bSnvEfzf!*uT7-jtGP+nx zDBQAS%6UR_ar$WS=B-Ve@+lu%da~Oq9HMX?0xbPza8g^=eBx?T*cvUPf+O83Yzt}{ zLf0cqC~3Y#Qck7&*PErhd`Ki&zMUuM%wdZtry*RwnNB1VD_@07gsIq|fmXZzc%s+zsYOZ^MjJRZ8NoJrv zEdDj8+Xb)lJArb;z3$OGuSVKu+RwH&K(B~chv?e5EH(PySu(BvD>+=6Uz|th<#RwKSffEjfSh7P6^uR?_w=iKY zwBmS8Xm!<<11kzOBP(`|=jocao4hS~m7NrozsupH3t?oNgCnS0Yb~r*7RXIhlS!#7 z!;AajkxV=EfKMP`i@$?uJ^UsfzWA%iZa+QIqG^WF$9k;rhJzKZ_M36BXA&O0ikmR{ zG#`khRn?sWV%HK^BNQ;eP`RETOvz66Xd4%{@U0asKNUiZGrJ7$`HPvJ){)kp6slEx zM!_O2#{+sS3lU|^rfjp411=-6;SEQmNEX`O?H)h9Otmhtl?S+X)Yw=+a&diwf{L=y z-3O9y%w;Z6SScc6wC>|d(xOoX!kZmD1Vr@RWzigaLM>Pfv?Yn5h)0-}sK2c|r z#Y{q zn#cHhvbEt&`*+gid7n=v?AW{y6BS80W-9L48Zi{Jt-NGpY!Qwr@(Gc&9j&Ziy&3>= z^7aA()V&kkqLe9eOZa(eb|SW@`dlPC{vlw5hQ$S4Onx1v8K30ZQ9V)oTF;b-U}ej(@9? z<3T3p1u^}1M}rB=%H7nd+oIJh%+n!?O|ydN-FCP!jwc;KE*X*F=TWFn!=2^a*fY;U z!f;8d_Q4F*DR#r1Tlsz{!ohC(aas6UmV};TAi@&Rl?}y?yupq9GpT-tG`?}!gikde zwl5(e6En+wDmA$SQ;l;PhOBopetOJQRzghaAdw2Lm0?md4NFAzD{6jiOQk3Dk76WHuQA1EXIts~ z>vu$8ky>rxZI54HUhieSm<24oH@=Xq-vA{gN=mEKIrP2#)xrkM9N_V9<`w2$ouNG? z?!i7)iOf!M)BSQghb30R@aX8I6&+Kx2_+$Ew6B5gC9k%%$TsY)h^2yqf)8WA-|5PD z>SZ?x(tSZ)WBAD2VtQQDw^ox7ynWG7>s1F_$q|_C-pH*5+xc*~P;6{nc38RL_rRi3 zZji-Y)>5yapz}4QYFE~LTb3b_uILhB_%X#1krjcg<9%y9(GYi>$he{n7aqN2-%q|D zFy6}@KG7Mb+?(_mx$-et0yFwsKA&ZB@aup%e0}(|ot93bWa>PYdij0oahxfN@}q%q zJ7toqffqi>KsZ}rn0ZCAY6u#0iZUBo8n^|={rGF^xbMF`ujzlZCfLff_J8RIlB-xA z6?U47vT4YC7+jB3(VFUYAEUV*xBPeBWb&}x*^v2-fmw=H_Gx}57D~9U-F*XpidGBX z%4wTHJC&uei*jj?JE zC9kKSjSwU9g#}BiWjCh!+ghAnbbJZ1kb1s#4yMz$Nw2YP_w%t@#7LR6>T7-{q(d6r zQjhGBcra9ugXZLHzeMrJj-jb(*Lt~=yQ%Q6xH0W1+zqeVelzdjJX6>%;WdeM zRwCNS^?6pXI4kzp;gEeP`X}?51y|@`3ql-Krih~0;HSCg8RN*C4rX3;Z>}sY`oh#X zh~$G|#7WtP5cYMxkwyaO#XlqC7_}qZtraK4;>@Fhe+ZTeRuYV=jDI11oj4utexogi zTRFhbo+6>g28calHZAUx}3l{C$slA{`M=Sff0v!T&?tZ2+QOo+#4CosM zDSIEZVz3x)%4P?yO-`~}U0f!X$W`ULWe{?bkzq1W_h6{`U9Psi@9R%97DYzn$*bRz z(8Bq5F`_ayLszx;g;o4+@h^m-k#?+993yYMI+B~uppWjTk(PQ-Z~X2~crDU1u`$0a zD>S$G?@>FA;#TLHhFqdT<+1+O&uy#DvN4I0*6XnL<(Oinsduw$;rGwo5VmSJ`*Hom zk3zo&{sYxkYlrQ4bqX0IAte9xRqG9QiU9dJSj9f(Wra zRat`yw#qb$?LXYy4u&k5Zd6MyzUY;^(y~hdTPeFwqBo=@#`72^bLw>4n@X`?gsN>y z@ti6Qq*Ty5b_KYhIazuFYRb4??n*@KolrKTIw6H6buq?s^L6yy@1@ozJ&I6l`f`YS zCgWL)LE54vR2nIP5WUi5-JxmCT#;vh<6PVDra3mCKapcLxvYIT5Q~k4i0GKSM9c)J zC>94o%f~-Xk^04lv3y#tYb|^1%XU$m1I|<^pvW{5^Ak#)up&p9WW$krH&(#d@b#ZW zOBO-#j}vHW-(5A|YU6}l)!&4_y#}A*3BXsTT_bI1Ht=hS~{nUZXUXC(Yf4v$4 z36tv}M?=uji;{Ex%Mcad7{DoEQcwo?fygD7>UP-?Z}A#}aOX@w{H>pMinfwY_*Q0@ z*JBfG@iYlkpSFkHx$yo69M-lmGq|695qyJx9{V=}WWeX+BqtSXyfE>4;B|a?-64*D zV~g};Hx!(?=(iptzV0oR7Q;;EgQ%JXwfB8K2##XUx^Hf?_I5JrOAE0&&;fcb(STN$ zp6n}$?$%ExgE~U4#3{Zh*vVB+PppzYL&P4{My&&}h+KY+oj2&j-y5u?Lbo0~U^H+SgI^Rz1=Tf@Jy)v4qGt`o zqWqrcI3{V8u82hV|K9ET_^fVxgV;*y&UyEA{xL7TZyjm$rM!6zb*yBisLLuWjJ20L z8;WOh!#2R_8w|Pkz6l=?ZdWWd$3pwQihf-31;!Y_UKuWcx&zHzM9oqkZv^w%X?+t{ zs2YFswVbc~D_~fjNVx6s4G8_Xvi5ubNc)yux$M$ER2}j!K<_7OZZoV1%Z*0-zo7cN z(6_HJL1T*M31x3xuJ_M>_F=hUri9)3pcxy>O8?u$CSCC7(Bo;+7mDln(!PIGF58b) zYJxaRnB^Blz?i=yWu>`4vdH?}IH;y)W;og9;Q?82tYLlp`>u}#tDr52Nch7rm@wC@ z?_Ua!6KU7X?B%L+UyIYPv!}kxb-oMn7oVcc+ZK@?8y7qZ`{#U$wMtrUdr_GDgP~&E zGtSY|)oy!PTrulyJq@o{XyU5LR6jdwH$*opJI0j+bdHUH)lS0IXiZNE_!Kg?56S7;?ODRF$?>`|)mpGUbHoU67YWMI-Hj z@0a?jdB?tm{!hGw(hhcje6?=he0>qu3U+6*ynF>C;jNiv;dRa#iVmjxRCY>K3dP26 z_r4`{KsG!D5$e7V${RoRL{#klEH=;K2)g=Ca>U4M%<@{+$Id-&mTDj8< zA^y`mp2Ae1c<5Ds!^O5}mi-OD>O`ubgKGVV4%J(dJ)5!S7>q@FxDF6C~ z*n{seN8BgYNzn~63nP&kC{tvtG*hJAZ^uVd<04|%fa?3{66lKriSR7I@-#D}%CZ=nCTaZ@i)WQ<&qAoD9ED{wX zn&LA%S(%|Fd9fpVU|*edGj-yoC4g;EL5u79b#dB_CbZI02&RlVa7^ttiZgTBetmp|p*EA9m=n^LwC%c6$|yBoO*nW-!)Z^aMx z(&Rd#IUQY+908j9)|F;`?`ohf<3J2J=NvU(C))*Lke|Bp@=KsK_8^zYsg%o9h}@{& zf6CKUn+%y@@?UYEWc)I_*~3eT1K6VHAtf%!RsBf#VcUD7*5t6!b%MAnN}Q_|9T0`G zipq_MK_3+c9|w<$W9f{8#cQvC$_+pH{d=o4k3d&_?WxI!oo}zg0jKwkmW_SD|7>IGQDt!cp9+?KwW)2*im?G3=C!pfGzHi@K3%fWiU3m{7Y zzPNfgQ`OT+^rXe&goJ3u`M0-{DtsliR}E|HXvgG|ks$nnw|}kUoD_$WiV5qv!g=~6 z-nn=W=iikEyk@aO7f?#Iz_C$l!vO(s$7wVc*(^xD<8~l}=)XX3iiGi|tUp9md!84o z_;Lx|L;k4R4>uQOqK;s@^Ky&t`50c}C2IuC;FA65SPJ$DvF&Q1-_+W;i+#g(<2Bi^1luS;BAb zPH91zJ{uFw23}=IsYFM-Nvs+ii0saJ2#mqQP>;qCer484OsP%^R zD)CPXpe4^I?B|xgf4MlD)Nu5)co|ME$P z!Bbh>L5#?2RU{vr(#WIe&YivL9U?0~gpZfh2WbBzlb37W@hD@&*c=z@So@?NpISww z#Z(doeahZEI5GNQnHiHYko6@vp>kovHN<{nUq1}NN#MDTlf%NyP-Z>xJS%F6q2UfK z+0QQa)P>EUaQXvvSNQMsT%s=oD=Qj@C>e9OOnqS9zud!)IoUHuX9(22P<#IhIP&g? zCSZR!;K$qefX(g#I;K-v9q46<4SE0k#J(KH1Hi|+yZ?O%TGDMKUVZ%*Uvm{bJZ+p4 zza(moj($22|+Qcgr3}{^7JQiW~DO6pv^l*83YV# zc|rje8D2r~2%8-@g?Z}vIwJGja89&!F_0n*+feSyQq>ncQ7JBy5A+QP)jx&~#nfE= z0xHMM3&cByrlAx&jko&=e5&JyR_t+yGYdalb0R8rJ`g`8@Jj;CYa?cp!iY}6Sl0B& zzn6Un#JNFmOfuGbZKCL18QokwP18r&$E4=++>Dg>po%~@E~^Xjw$^rPUoBf}IAEY% zE=+H3{@dd0*0z;LEBJ^FRt`(o#cJO7Z(okYm`wR7N{Q{exgB>%&&;ZH{`+fjLfVKB zVO#WcHqJ;MfI;aC=J)jCV5lpn+v8j6h|I0=ntSJb3w3dMScrvr2;Eg=H}?<)lhPUL z_cUBP34-SL8M_@VBhGG*ueW(gkM6EJFlE?ZYY)( z+Wt1z^2@UlZ7IKQ1-tlC!mJG}LRa#6VEf&xlna7mRi1P0W&O$5V&$9624KYRy?k9h zHJoj%oq;vD1zit=d0NYg})x7fOl4L$e$#d2zmF@sCRMtY|It zdFrN@a1kCS!zQHtG0^V#5-65^ePIP`=BR4ab74V>>md5OKMyH7SmKZ8^;s}&f=@=! zhu0+P4+H`{6<&BoExbj$&V`QZH4mrN}KL^$P5;xsH zaKbtach11U(AlwZ+!h>sR`f9@ABq)VYG9%zv6(}59?n9;*UZkM%Han6sd z-Jj3RU8$`*xy$bWY9of%zgRQ{96Yq-^EQGm`#qMen)u2CJKO3UG!F8Sel2)5{_)-o z4f8+CxOG>L*9t$@Hm- z){ca%ttUqg?tVD3Y{e>>O`jD(WskvMoohiaqHjQY<7;A1S`VVurL?*hF=}7q zLIa3<+)fJjU;)Al)?@k=g)M8d9i41MJ9V#8l<(hr)_XD*4d;ZSs`1Q6R&!=IVThP5 zQk_Dopwbf8P|}aDNVp7DWb%k6NkM(L$io2hr=M7oMQn-{{{JiyROkP;;koGr90=af zkjepvB_5h1Hyz}hRHdUC45F-@n@T4$1rtLUU zYa%#Es6{p!K6;>B65B~4JK^1M1+*d!kkKBd;Qj2`7E-XKEmAEmxboO0Zp(tO14VZTDo+Znvvt49xVN#v&fz#P}L z#;R)PYT@c$Zf>LM4gK&lbtS5m!JLG}D)+f0>rnMphDBpnJC*(N=|*Mp8UoNRvZ(}; zdVbZu=2hjCUm~$5l2A`)6Yd&nF}D<&?v5qoOfsl48sWtRSVAUsk`P-c%=8Zi$%Yv8}6q9yV$tR z-#RNXOh_JHNTZZ*i@Q+q{*qAe%h(5@wmeR^`xz9A0J982ZgU$bi9}~NPMF>U6){}q z$EY6QTs|tL+TG1l(_79zr)P(M;{y^{i@F~2o%8PSMhNixIc%Tc*?>FsZzBVD7R|sT znt!iOq+bKsoKIx_+h_%=@+LWlEyv5-f0?k(_e3g$!iIuL=LeIGm+Kwyo9DhOQr?oa zI|{vctT@}v+eqjukFtDhAehJ{AlCPoq_My)$aGFtP^ zFo%H>-}le%FoK>H@X^buhf`83Fmb_?*uD)^k9Z|pyKui|XX&$~PfJv)MK2+&AtsD| zRr=et!`BiC4zX>14O1W4zCE75r=fyN3n$_jJvF>E@;8@dxT>+!(rKUGQ)f#@Er+N{ z-E|J$Y1}doVG>!M_(%YX1sT1xprHPPz1@WbkDMb-Q^(CPP$_Y0hNfpnH}j@_Y(iTK z<9h*Jr_DE#YPq%sn<%5!c}URSG=@qNb{PEk2IYPc`HL`g9=b3LvNZvVtrDK1=V`_- z%=vm6uYW~7vsgkYat(5;1WY*3ySBQcFfADsTu{EF@>--gtO$|HjsNrq6A~nZ9PyK- zW_J0OwVf)v!crVBG9V#1!6g4WXrNSiYcpATAJgoC!H`y0z|+*2%%56yZ##dgBlz3o zA*gN#up`Z5(ozBQ{h?;S1PH9}%e(V|+uL4wUm3eFENad9Via<#jkhs*8|!-X?mfo>Pov1O>MRd-#Ct#A&&4Lhc51H{1 z&B-1|f}r{zTg1Dtq1WG>JY2^P<5i4n&aL-`)Z9G?!vTmZK= z*VVC2!Y^71Cuuj+HRJueBlH!VKYs#7Qo+W&BqjzYc+aKeFpMygy}68Jl_@W3gCh}r z*ME2eRC}%QY#zoYW?kGIKMCuzM%Hqd$D*0okUc2i$fud4hPR-NIHDU8A*|VoO3pNA zb^SRs$tpioZ5Sn~7Gm;@!*bi|6o*)cx1B)$$I?}XRS|9Nb4clwlJ1gjknRu(Y3c6f zkOR^UhwcXHE=lP)fP!?lbV*5l-22_XGympU^X|3ZSnHW`S1?47GF9PF?F4K*3hm1b z0nE^jXqroHtA01Hy5zCy>SY;yZrkCTu3D^{_z;o-<5_6#7hevBGQ%|80 zmwINHqtWiPRU(ot{;(Wx&g6o5Wc3>=!!IC@WYIpLuv}lxzYz~ojw;%raWTTD`+ zdYzgv?w;^6g74Yfpew%!1bv>C7urVQf)toTITHAib@=jZ9ulqKtdQKkY)L0-X^th zLBV}GNVaf@pQ98o#udC95%|;%U?z-Q(Mto3s~lAbI?XUnyJ`!U4(d^fN+qC=eZjl!njB{ytaz24!sGFFB@QmxbW{C}beSmQ zwdKvMcB{h3SB9fykN*CCIXOFlsQa?}mQxDM8=u_pu(1Jgnf!Mbe@ccM;gd;QpbTT5 z-r?f*l8f*8)BmV<|H#9YFy|49z!!&e$)J$DqCd)#_o zTo0?T%43NV?qTpa?4Gtm@W$`v`!G)zH}xaqV-KryY3+^F-&@W90BDxh|MN#(^`Z2n z02(boUhxW>^URKM^H>ZmFij`(s-qi1z~o`-xzCcQWx8%6EtNfISEkctyn=m{v!i+< zjivf#MzclQ1>V@%_O~w!7ZFO=XCB*$Uzs6c*ff)NEaZ>BeLxfg=vj8Wdft4u3$_by zxkOa1|ILC?!h*^C)yr*4sZKdEFvKIbsRIElo&ro9^UBa&9fb{tVCCIIS)%An5AR7* zL=liUnCsULaUi_03~3Tb796$0kI{#@wkkTcn;ZQ ze?XCvttvJ?URi6BLTHDjnUV7EwE&5;IJNVT86;1P6be_)V2~h@m-nB12z6;^c4XJK zc)nQPcFFvyo^X>KnL?b%V+QVAXr@mBTDl^p`Rs#ic((u7jK)d@Ri zRujA6{^K6~K!Y45;?Ifw4cA?qKT&@yk0Z{)N;LU>{9Fv*WSiRZWhvR+`}OB%ToI0L zq7}B9p%@?Q+rrvvD1?YCSeO_wHj*AawhVmPhI~3%JQ{=Oi<>3E>p2= zjFZ>qT6 zZcly-N#B!~FCP=hL|+!n${SZO2dpV>|1FzpE!BuFsZTgD_YeXkeSd7!3Ns|(W}8}8 z$*LW^pyG-4QuUH~Fr`MW#_iIElj~+~4_ced<@;@J-lPtzsgZk6DNSV&$!RRt$o>hf zSRTrFW`)_E$_yo8Vw@S1$vHIrz3#D($;}JmR~ZhuA}O7UH?2(QC~3{0S376L;A5&7 z^7K0pnz`g59<9cu;b+wo`5~dHd3@*?INd{7>H3Vr|b|<8vg$|ep<0JJDa&iWe z`;0CnkdtL8hV|HQPb8IHYBTM--NP0ThdSJ>^srq-vw-Ej!?C!BE)S;qV>vozIt$0u zO~%n*61@hF2N#S9LH^qdKNc3qZsDjEZ(`d{tGN|Wp^^r+zC;`Fc(%V>4f+?xP|>t``Q`|j>)I8sAM3g<0iD7;%Y6HddSwprx={tvf@h0i|E0- z>@Om9LI=k`|NWj_Nk$k~xt>4U-n@L=LLA0n&jHeF-h#PH!oa1ychHL#Pt3!K1CI!R z-9Tu>EOKM+VUN4=?bDYlavjFpn zYmK8DBlhRaeHn$B|HoRx|8ezL%vFA5d{At2t9Zj$#NhbB4el$`_s_3a{xU#@yS1w! zgon2MpbwD$jS%@hnAnbkR>lWRl+e<=JEu1{X|F{9=V9G~AO8N}>#)*Pq5`Agk}hJp zcf&NBAZl$n#6*>-P~NDp+>D!zywfUYR%>>x?l$M4USPG8eS#?kyZ8lM-meghH%~ww1I{)S zl{ZZFC68Ov`DkoX#6?S}+wJ4wg{9l$Yd+K`G|4#68ErJld_eli>4ADr{A*o2qRw_t zDGfbdhY9)}<@nN#Y;?7%^7y>*W#y1vEcG|!I%(azWME*#9O~lIPV{JF7^+5-I&-7Q zn)}~g^h`+w1Waf;spQmZ-|z>#cpbk^7zS)7%>UhJ5%6EG#Po$7(EKTU+p~`m_~pC! z%pd+)4V7zp0@km#ZcJ|WKe%{?pavUOl2?i|+pdVW^h^jpt#`AA(2_o0AQ;pH!z9%i zIlrvLXkoY}+@3=o^{p9qxe})&gU9UpzW(43qvuQ74*{lKfB*HSiHkwH3HFoafRjZ6 zcff^(h$js&XUglaQ`xqs46B@m)!4ql`P?SRfYi?O_ZPA>NZR^18A_`frF_Ql2?cS2 z@ig5b0)`Q*ov_??QK!TV!QF^oU@Y-wS z_EObREB4a9-G1Xahc~?1_7_RKMtkh7vGi6c>~0C+o8mG>x)$bNf&90+vXLMxRS2$5 zhz%F)op+(U2EDQJg2t4HvAv12K*xw;v9*mcdpiJA%4N}|uPagzQ9(;Ght=@{keAZ^ za#22LBO+$_$6yf2!4d7E%UM?M+D5a`&>L-ifQoutVW+{}Q8&6(nc0SXIQl7&OqL{t zx*D90KYPl#_p6GCk{XT&Q%msb*cn86^dXEyyeQlEQX{4flQPp>BeO$oXyITb^cU1_ z9SD9=PM;FeHtW-3%w<2wqz&L^F#Rj{ zx<@%*XjXH*k=ka<>80`o&DZnk+PY4|zb7iI^H@ZBD^5Ip>lboBzrd`f6U0I6Wg++R z=_M~^;vKX=TBL~AzSY^D{Z33m?e|D?6MuOw^_$Riz^ zb9AO}Zf;Gq_>Mqm6oX~^GsW(DgHntIqTQp`Y(K(o_J$hp>%w}-SVuRdMnZ;`vWj{^ zoCH;k!#y|e;D)^8vyPN1S*&`0Cif`{_`0*XEsNv{ZyN*2UTBvU_lt*yMyNP%&O?K` z;45WSNG7_5BO1G;<;TVOi0+~Q4D}00`VGw&W8p-9;M*2OlVj~VH; zPo188n2?_Od~UABd}^P;!r7CD33hW`LW`-OF|?w%DA+e5`6xw)@iN1r%JTuw&4d$c zxK~0*B+y)%)wnNfZKmzbEHM!~+-TqRX}kV+<5S^BQBH*xTWFWS^Xq8cnKZa`O3L@Q zx4{=~7e9Oz9k!xx1zr6U6JK}Ui<^UVgzffOO=<@-4F!CSDW}S{V9rvjJO5vgT~;O{CQXxJmLd z-&|?HMc?UacS%u4HcM$4oQ<%-@X=iyI_OGA`AtZ`EVeIuVc!B&-p9G~A}}@3yLB(J z*VYWTVRoYagE52T3@x4oq0a+OX)*5p@HjM@sC5sIwJys_ivbfD;6fhno+Smnk^aXs zQUIr8wkd-DP2di9vxp~&78MCQe?0!V99ZlA2qyY$^!V6*;=rFaM`1*oBs#mSfyF*~ zy#BoY;)MA7Rd-)j#|!=sIrVRiU=%aGlptO#xkou>KSuNTm9UyY(;60WIl!z!`@S@I z4==o8aAdXcjt2<88eEx)pI#%M`Ab-ePY;6E>NX+&DGmP<+l{OQ5t2JV@7AJo;DNWs zz5<)eQsSKExNx7*G21Cq*qKg&M$Z$h0H$pXdp+nZ$SaSFIbyJ<>$H>UB*^%xmr&WOm2=eeV;mP^; zegYqjI^ckgkzLW#u0EpD`HYg~*td5JtdXc^u%(X|^H7%A<}YMDniT}H(*iGlJy@KF zi(ne{rZpx7w2_8o3@swXU>6bFt?%An0-NqljeS8oZ$y&Tv91^!pC*Rvv&L5L!Mf%@ zh8f|Mx3})I-}!6nj@^zFFVy-u4zF_SXNxuYwbTLI-OaBPE!%1RK^$q8!#N(yu`vx^ zS+RynD3;Qac{y12bd#YS9t%!RK@gSYgQMfeplYzp!1=-Pm8uv@Lm|i!gb%Z{Z|l|S z`2Kz3&o?X~hI3$P&0u*jSPo8I-s5Om8iZ?x0qG}3)<+th`FAV{!WI>)2g%2uj7o*O z3MfBVndrvK-f{;j3%U`adA z4B+-h@|bz+`RBayQ1v?3AN)=$f$ozD?jRmT5cO`^@R_NjO}EBMr+60ZgD`|tJor%; zj)>|7YmhOiB^mKvb~AB~wg+JpDRvRNs4CVuQhJ#zrB}T;G7t&yW4T(BOjIGNf=hMJ z6+y@c9Z^;N>(G|pXGK_Gsq?mMw-|39=T6w5oKFPg9UflQ{;3s^7AzisbqR&>knxZI zyu$xsV39h3szA*7J%tdBQr$|CxUfNZ8hsG`_Rf^jh4tFNyPEN1$JI{89}GP0m42Oi z4AV`7Z37(zs51E52zmsJCW`hQ1toFi)}obmhf*58BI5-UKzy7`PkqS zCp04WsG2>2nFtzAQ{g_KE=EMkuk&vuh#paFYdIcm-A)7^FIbZm8YsZVLBYd76b;K` zMbXI{d3ZDTGhL=2nMplu`gdH%7b3zmogZQ6?zQIfK5&p^m`Wf%S5DtF8(#XKVe|t+ zX|x?VP(pR5_rRW-ayv!v8(PSKU*Uo`ZfOE9r)at$d=s66?R!x`;=S3ILw{qR`tip5 zX1+kTJ=~aVu~8G#-w2YEDT;Kl%q;QppuUlXXPZm0nm^pg~Hyfaw4tQsPi%Qypc{mH<_71;V$z z)XDQz!7*zQ8xkd;Q7?arBh01a6#rq&o0X#)tn7AB{8-SIi||RI`-23*uEr_8?%7a3 zW}Lf%je_Dojq?HR z|EQqyAJXZz<$s0v{5k&$uP5jI-07zCLb;2|cspRX#ju`HzV_2J_f+gj>Gq#>VjRQ= z1DA?7+t$^_l+zXsxEUa-lJUuh<4;%=$@fvRh>)%sfVJyICy=8!ZljIc(&tr;*u>Ka6vb>t}YmVSIx=>}E#Ii)ocLE@9 zlM_cLU9FMflBJVRc6UcVmWW3y3X8{fJYL?@I9VsaB=Yafp1AI%xj&hhsx&9xKALssbjZJaxyvCt#xT=B3eSc52y zWl1Hc--;?^7Io3u$Q;Hae%kiFj4J=|tk1do+0J1M@*qm;Da;bBPDzk&{@qzC`9|vs z2t84*ek;B!%Dh^i`nyWmN{e&&a4qUud8pHYLk|h^Eo*F|mBq@Ze$@q?$PU4`PM6@Q znXE$Ziezp?MCl|@JKoUhG;y;o5Wlf&_5z$PQ5q7$rWlPsLAEwrQS_b=ZLrqOvX6CJ zM_Z-D0fcXn?#(te)Y)N!bqe5_`_Vc83giqx_V2NK*vuRxPlTd4&Yq%l<&`iz$|1vt zr9`4on7e|X-8RtfAJpJ#Nh4keMd1jcm>X_b!t6Imf206H%RggAMFdil2Rs2i1(K5)pDDO=X9JX;}B0itODQO)Bg7_ zao|K}6TY|c`3g4L-oJ9KJmA-*n9k$@L-h%!-X_u~wFlK&n6{QNHh!Q+V*~a;!yT=#KQPB@G}rxw=&kC4X;u z%Y_M&9osc%VDGd5#jx5q)Kdp^wr*cH(@F%Q`PgSJ?OD?BVNKUY->x+WLk|paLl{)^ zKnB-Z6nv%!Kh3R%m0j5iD?GAq@f>Ju04x~;PCekQak*tXnUDk3$MjiGTynA@LYWyAyVx| zJWDQ|^N*2x)$~b3C*}RTkX!;XW)BTCpdDI;^@&-(I+?3!2VmiXf;77y4M23$g{orD z8Chb;jkb!tXg*ZFgAo#L&sVqGdmr@-&NU*wkKwPcMi+RFny1f*DT8y0~%3M z*GdQKgUYA9TH4#m7YxU*g&uQ%H%#tfkz+lCblMn*u$NM)$+xxHg4%v>f`*qOv zhs`kFyqy}}2UH`>&kG{Ojwou-6o0vLJ1n?|W2b%Lxu%RgylnrhDmFvd{9FwTj9tmy zOmF!?_TniBp;q1Q2HlSkIGg_vrDva2KohU${dE^(1{hgG`OpGAIAL&VCX>VCfteIRWWfj3oyt0^ zJrKE3W}==`e*V;LELLLa!vek^EVApCp}tn`a>B*jPI2d|R0X?rje-F@b)O>|>3oD( zQhrPR!>K$Zy4iX#XHt(-H^$tMa_R22aE#(t7CWkDQ37LMH8wYYwz)={(L|3jDHo># z38Vw#-)_V!)b?#;>sUbV6RKgEb7Oho6#>^qHKv@fahsBlru;M0mBC&E zlqXc0j>JHm((iRx%^;F%ycXl87oBmh)N=A`p<_Y_! zy8>~Jmc(`eC5_5+65MZTx}tfDr+Z5i0n3w?BH9fiR%+R_b|y>ADX>KWA{?xg%n3kC zNh|;)%TaWPrMrSNG%jI=_%kdXr8h>Lef${Wd`3AWG-{d3r*DQE!Sq#^Z<#l59F}H% zXSRwFsXxA}*ej190^)Tyu>nMp@3VGxzePOLsbT8}_Ua9!ws!A(V48 ztVMjC^0AtfmnYBxE{JW=sE^6Tmn)ig(bCx;{Ua6wBqm4G9bRjb-C9T=xGnpS+qBfD z|9}2I{uUjU1~rsC{7CjS(^TQ$$yK@?wZ+;`GD zC<=4>WYcmHkqpj*hhrKpW+IN~Nk5dyOe1 z5{X{YaRp36X0%CwUjjlowN1*%mVMBizhsD9n>%<2vD&p=Cv@mRpcsj%TaagOu(J+5 za@wAcgYCC;W&%-$ZGe0TtS5Vwr~W-zsk27@*jZh+er6vmb5NXvrrh3gSGE1M)P$%cZ}2q)rUW5Md~i0SHO9 zU5@`#3Xk%|=3R%tyAX%#I#V55p3zSInh#N;0%36De8SO(0sSkC4$Q^_RP!_?OzD2xXmq-tjfn(j zCim};M#H}-jz0cuU%pNqJL*hh@-#OF!*TClYsBnyKdLKNZ*2{rPh0tTB#6ydN?R$- zF&qFSdxO{YQ9Ot5Jk$jfXmTBCldAUw^1}hEJcIFU$l^4)yG6 z@^pTv*x@J(y~5ZAKu@0s=^Ruj{yVQic)Ng zSPD`xX3Jxs^nv`rMLmq~`~_Xy0<>>0AjkMx@PMLkrJYswn~ei`Dn09Wv`l6%;1z3Y z?{(BE0`xey(Rv<&SpI)->R$n@4fJCg5ZTxwTdw$ix|$W8J(>6I0FrR}o$O8A0&kC0{$670_C!|NM0i><)+iM_51gwo>60=|g& ziUmTBi}Wm!7cP?8!kkP1Sa$syec6Z{{pDGfW( z7c@HKUC0ZYEL_3}x`b;wgBxTk$#K=pjqVF$bT=5^o9z^h*BP*L3T67?VA zblgYvk2KeXo{B-8yR{D=51xAosO_3Y$OqcNljOoK?{C-uU#%GWDTkgXF zZE|)+d}hlzhuUPJLVAJQA*=iIFTAo37aAL6|1-SQ0i*>t}KHa=Mofy5sFt07bO%}HnUMsIIBvvAFSpWVzmyJ zKm1xNDT$s2)Qg2}9A&ycL2+2KSo0oGy;61JtIUJ%56Ul6Xl;>#2Qj>a(PbB8{nRGs zxDsMf2l{7;DIxBrta;~#o)Dj zzXkaRQgMOMmT_l-d;WT;4wx3DReIJ(9SP=CD%eVU5^$-+MRYF zYD_RC9y>G9xFPl}#`%EV^!Dk3J)#@_kMgGgG$GS@+3bg|T|A!kmj5<5#4?C0WeYMTX!xHU8a*$+WIx3}3%_81c{Ml&G@Ue5 z&|mSn0vfr>`0P?~rjQ81MSs$$^gi%W~W_Gx2P9!m-ZAuOQt4%G_BYsIPc5vZud%gKvi3~wuH zEs4%25u^SiahzY9GIP4n4&Y2VrGyK^lH#pR*XRnXUfLY>$h0Ia|Mn|y^rmS{JxFJy z-Z;cKT^WJD3Pl;Zo5985u@&e&z`Z61hYfck`)lvdWku0~MAY0QHwz&M65Bk>v}CY1 zb5}#_tDjxFvhV@1jR`+7wpckps-vrfNRg&Qh!jzBGjiHX+JS;q0Z2UbuJ{?yim{RO zu=Dz}&Z<+v$GGf(^TChK1bTeZFkv@y`re(zB=&Gxnn%-PBJ`C02kFs*!Un_<&;W1h z4)+yz2ftXfzc10zlcQNI_NTPJ;J};V90tadTRxVHT;})XEX#&pFgId`SOZUYla72|VJ+L!EoCN7iv)>O{MD6*=% zF}1R|6`Ss~%+t8ddE#4KuqHF6qZ}AunP=<`Fxq zt$N*d?@Qq={WxD$Z{qr0C=Ffj!Q*--rC39wi+IqA>h@6scon*4|3^INZnA9qUH`_7 z!3I)(Ef6scE&R+^$P>>j515@L_nfn@{UzLHF9G_R#BLCWOHu*T9<Z6h*ld zafv5Ta3_he0E-zgOW{qdb6R~4Ci?c6Dr6_lB$qgd#VE;5@UDV#;sPmafR>0XR}pWK z9(utDP^Ymw-9zHE=7Rz0S9evp(B_%#(<0L1>;{cwjOU+l4!P0`R1;C%DDeAojk|6T zrm;9{c}Tc@~dNz5mY`|rJq3URa8gD1+g3#8;v z@1018n%tO((BGFBhf33n7$D88_u57UO8sRdZj>&pjrn6F*(Bo6`i{DR`+m-P66KF8 zuukB#3_l(|zrm0$MJ20WZv@6R>GAV5`G_;$7skltHZkf0+T7OgG{}cV8-gtrF|XXBt1GY|e|JPvea=J- zkcGz04NeSsN2snSN4K0XhE_LOPkqx~T%Hxz!Z-Q0-{H2T@8jfOT-+>@)RMXA|9#%% zOthijgMn6D4f>zA$Of^njl|F93qd$y;n~lb+5BsM;(#IHTy!-zi~2=(r6VW z$#UL!-A;C^FT4?4zpMk)XDVGvWYGfgw6u?uU$E^cTa=LXb8@hz<8|~D)>r=c#>ifY zG*_%Ix~NJWv7`ZPNVk2=~z;QrUGB)#GXW=5DNB`{Ll{*GM zf}4&GSELgurfF)lfg{B{ADOe*ty0llYbN6!ex93Fd_O{11_hm{sS_w9a%j<4yxYSu zOXn|)~5PUFJ?}8BrWwo31g##zClm!DFk#R6wN5Ax(wVrkRTjJ|E^B3 zM6CAT;vWoeA~lmaIU$&Eca(e`MMPq|rjFw&3;|?E<6wt|~ih0kJpVa)#~I4I|Z!+PBbdFS7<^XwD01StRQFyVZrqucx3i zi&)jLBTn*o(Bu_OT&Jvg@tI{$CSxOBMF}#EJ19`QWg#-*isL-|TSKN;@@&L;6@R#W zJy&#Fq%Q$?Q^G%0Y1wZ)(V$g1pE=^-1UT8Khga{~8nJ-Oqwn-h4>_Hlg$%#^d6De5 z%xKZj_OG=+%Q1={%!eL3o1us|B?mWikk)rk4`Aj!m-NUPF8nJ4Jn*${u7gN&l@4hT z@hYCT_KhBz|9iLVR`?%TR;~5@y8!V^01#f<<=@=Oyb`#3gnaq!m5U&Ji(9ff^*k~e zaGUo@<9rscsx?dOpK4Wycj29FFO)WK94N5Hx-sU&t2Vlr4i7%5wF%SU<>sl=^=*=o zoDsy!`uZ6%s*t&)NDLR9l)v}gAV=2_R%KvZr_{;j3NJWN5#)RKL-jZIn%_nJ3BY+k z`WeBLF_6TM&l*$gan$L}o2_fF0i);>ariuaJ=n=bd_eJ#5q(=At_YwNu{y&O$cX9L zi>@mQDV9w?Q6CSSf&jj_>o1mmrucv#Z{Cqt& zLu{IgIkYKjBD3a5kwvB-3iqGhqi=wKz1zWJ>4 zq5ItnTwO@}50_ml@rX(*K-J#O&0(Jq>!UIJ)&5oxS&RI4l4S>{TzDSl-r|^u8{?=I z9w=_Ekw{bH6vYxy4sYRZ~-G8t#VshCO>J}#0z)@S*ng0gYPH^++arIM}D~9;&#Yl z(6ng1IlEF--T$>X2%mTRxrEbK_n_-SCW_>THWQI#5F#SNN?CiezXP$W7-yw?5GqqF zEVQM5BJauSpP*6B^43${0((i@$Ib^c|7Dja`Z?eKg1Y|yBHaPkGTeCL#D4~yly^Mx zi(8R-ZgPNW>Q~rzbP&B)s&vX7BQ$*(&FeUDR9o8WddLFDh*p;6jp7plD4CcfL&b8b z$$D~<*#11OZ^aV}n`qFZ(@ESG^!3iNC-R9*by(Xi_%t*sv1v>JPI!mIx=adm0eBh} z+`P_DA)Fha1F1z*2R9#2;&q>-cM}>G~a1D**^7|N7^1;**jg!4!V z2;y)ZS%zz*#~9Bt9Pyx=o%cx|U=azD5M=Z#ArVH|#%ufmN;l&(g1LXZ;9rnS7B8r1AhC>j1PcAS z&-LD}32kX24*7e>**I%UR;-mPDI=4CgZ{QxLCg>gfwTYBzJ*2= zBRA#kem|gxUgdSlj-T`$6t$!O*6`sk=RpI9VVa9MCX1t}0z#o|0;Vx&Rg{=-!vKt)Rq30SyO;Al2Sr>iSnbvix|4OSq+w(4JjJWcZr+t~;b zE^C_wB|Fd-W&Ky9`}`k`?pkZEDBA7eyvysDFi-5hhJQEw%O(y~c%iN0;#v9U$3J^MFXC>>4JMv)dYZ+M@wrM$huQE z30Zm1HS{o0gf88F%Sr9znpB*i9#=Zou>D`?4X!f6}OYs?|{M zgcmvR58D|xv(@;l&=MfB{B$x=;~Ul>1mKSp?!^s}IkSvcw-4>Ze}dChJH&zg=s@Zr zewIC=EiyUTE+3a8f14E$^sYc5ezKRR%<;pFzHBgiPuAK$7%@R|prAQ+;vhCOJ(JQG zs=x&z?G3+%>#DfaDfecLZbWPakgEv5mM5@G3 zxC|ewT(>szL<}QtWlw2)D3LL&4-p4gLH6n;WMlE6^yI;oL-^t{tmrqJP4S$ZZxoXK zJb(YR$}A(nQx39_*2jFnMlo*6g{E=6s3-qxG z>q8#$u@k~a=rZW-(9ggu*cmpV19%6-hznWrfU=@)^m)A>Dh~b4h{3H~%`sn?hLs-; zUn=*((*Kka{6GNCeA9w@ha#RNPI!{V;63<+%N@2q4g}7xXR+TT*=0=^AiXekmf_#x z$A!jc1ZOqe&ieMYL@OB8GMjz(XpUKvg}y~>H%c%ABOO(3W}{wg1T)o(mlF+b|XA*>VC(5amn{%%Z{W;mS&nxfl*dl+~9L(}H5`3lPic8Z^%GbuW;Qy)y z+@L);0Z*zg{I9|AN9X8wli_CoyNF?&s_5J0psb!*)qv$O2S~;VJ&gh? zG)wLWX>R{O{ozVZD5*270i^*@b2){VuoMw}E(uD|rE$ldx1 zpFVo=- z3{LYx?@Wn*XW~XA-z8f`1&W?{zL1JbVZ_?YC#fe967hLau&@*Pn+SCi4W)$<8q<@M zR-mleSM?W#`kU&%mC9DIeKptyz5`?AtUW;79LBHQ>OBUep^5d4M5aRV&{Cfyv3Ph6 zlVy2i8i~q^>*q>jLd6c#kF-bJ`cn}=*&0en`UC;AKst5MvC+j6>(_cm_46EQ9G7Hn zPTn|8-K5MUGq^#PP=)sMNWpm*tNzuMfC zskq$9Sl^_XfJHS&+2qX>m0V*&$P6kt+6Oytbrv^=THWeHFutOkf6PamA`C3B45;KR z6eQ@7hh`Z-`8&-oJ2lOs))kNx!nY-8(3HZ=899px=J@ZTIQaD{Yig?WybmY*y4@*= zIpg5mz}N~^h`^526_qzSTmPQrwrf{mlWTplfyy>kp!SX@en+1Xa(SBn zC8rRH9f@HpE<_8aRB7W5eh>E!4qK{<-CS~{)iVXR#)o(5nDr{m#miX&#XLHtn$=@b z{fiC7kelJ&B&RpiBYBt-E^fw}{~3HNqJ7o}&RZyL3eY0jpL4VGL>)E}V5fgC$qT14 z2t`%fi6O3iNAo=+7(z}MoznI2L(T`?Wtj+zh5qT!f$hBT*2ag4Pl+qOX_UlFvJMWs zy{PId8yYfH%U|33+yugrQ}sF>c|AbpdO=@EJFXW)v&fMT^!^^2z`nTdveJ-0{0JBO z#VLiv_YoK&F_JqC7!sCGS+MnBJ790aQGfzan%bwll3pEJ#XZaSkv9sOFLbJL;4~ z*an)>3?vEg_M-P9!o=*w4s=HJXo<%LtRt1FZu2;a={uxrh-B!K`gUEGGJ&%|?xJ*y z-0fd5wxA@=2I@{JT0wQz>92QRG|-5e$TL3EeUcyQBS9V>b+3r9nbw)$Jc~=EGTycc zD%twAg~`>HJ-BOeArdu_wda(&Zkj25BWG@Y-j#*k5n_{)ruBwLd~*MapI&oz;ukYW zqqn>!MLKchYKBymY~fhY3k1|)!r^$NM84>+Aw+rAwCm39 z#{ll117E^DXzUH0>~G;W1YM0p$UBy&;k%Z6u@h{aq1-kX?i1BSuB^>N3GC}YtIc%3xqh?ExNI&YeM*?^gTw#nMWzc7~AvOtzlHGPwd|yT>KIMq;%o?oJ7LkBUK^UawHajExWx|#C!T5H#=8a+I`g~7-aCbAW|c{z2?71!5KIb>|L@86Gu zfB&%79R<`96==BskEL_)%j@yq|9xk>WxHkDx~tWyEiBtMPc7T#!dk9n*RpNfUdDdC zKi}UUaUSQK>-D^zS1RavyAvb?F@ZR4LvydB~aby)210*IN%2d?u+@Ts=yL;J;9^_l>n7P)|vhLz#ApQ{+->uvA{BU%sV zoCKP_RcPpRx)j%O1lw*Kh?nm;UVw^} zD0AsXrMGL=F7_Iz;~#$%mT=X)OP#ps_9K(CbGxT6U4FR%Q1}EBRJ0>)mc9W+NnYjxj|F*WJ+B=NH2YDm z?SCQTdD;ID(bYYFcdu;C{LV^NuOy+TKzL~W!{_R5tO5KJMM`>_7kNW}1IX?QfaBa+ zqoXf38YMgLsrpuJ=U*}lle}SlzaL~8op;_m-Y(at>BnOq=iPaEH3A&twDtEBp8Tbg zUPiA>zLI<$aXO;?6*==F$C4Y}i>p_MU7K{c*l$I1>j7QY+|eMdwFs4Hpy*^7g(Iz7 zAndq=(_d&S%rz8|=yw@&24vWsN-~m%;GRA{22#YN!bQPF?Ecm;Z8P0Vr;%$}&enuM z6+(ZS`H9sPm)Z+!-q6}yL+xsb(_dpAyK#lE(QV_-?lEkG_CD_!Ur{)}GvefG9GoGA zZU_FgykS$(dWT>h5^Kgvr^kn%I$fOrBTZr}Xk$-c%H2lyOF3>41oZ2*-NekvzIc0S z>pV1*MeCCJ{ry2^uZi`EifZ=tHd^%VbTmdoV?L3Knl`5Rz0C|e_yrd9VY4`GB1F?V zU35XNJC38dhJ7NNUD>0evUbU8D+&~CDL7d6&{4VgAw&QE4?po*RcJGUPaHJYRy`Iz zih!Op%SOJJGPPTY8Socj(Kzj9J25a+o+|OEypp-f{At~k$K%0)ST--GD_hKqDQo9`uE>7oRDyI0xpI`MBYW>D_8A}Eqt3PV<*yR2dC9(_R%(AeKH|Q?PSzCVh!e3 zN%=Ct{@d2nXXT_lJ`4A{B_Q}S3_2c&P#T#k(9ql2gt?gg65ke-sK={K%?)7Qo}m_s zrXHC3n(bw!ncT<4>zLL!@T;w93XZl+IjYpT@=Ix1Z}7c|OB5YC%ba%AK+SHEh<_%u z_S#p2o95=I{TfzROZ|sCrY03fVU*$}LSA9HXhMyKw|M|jEQQd{v(3W`I|^OMbvmhz zRnt`DZk#96@*KOC#UbRunFRQUoe7@N;q`)TlSm1!QlfKHRQfkpej)HRGBUZYm%TXUj9MHE`^o%?Z-v5)ZcbIV=MPedx zM42Y3A*<|$6zkfreS&#FF?fpLR<~wBItn6-R~|M#pg#NIA(Dr2APyvTH;3PxfAH^b z9zSu;0q=u0rT*Z(sk0MiT{&G4ZODwHM;ppH=X;#B=5X!=l?^(?)2YXG9SIx$j%UI( zF-&-&*JY{g^Rd(oubU8;3P=ffy}8VG4>T#oDzh5R3*Q;%p4DOivHOv-+jBi}__|Gg z3AKTlG$omA)HjTe>ISkLEe))nmEVk--lWOVme_5Us?>ID$JNny(`TKs-W~Xp;y7&(?zv6uXlMA?+*^q=WROg?n0$>98RDq zO4kderni$~$FHo)30c%A{yw0&hxfIwT~ibMF3 z-{lPJwedfXoDq)Gd;%}f!lNLdnlVQvu-H}wVnOqOwj zSdVNU=2?-czSbqHv}dF*>ip^=i=>+!iw~>K(};1_a#gZ%*kd-@6odwX31ysQ@j>ZT zgen(@QpItT>cG~dWFDi4HZr(CIbyFa8pc3Ffd$0UyV|j$4Z45%;!yQx%04=puo=gB zKh($(WKHgNUt>}+T$$kx6?s?k1;RCqf;_4>mNoh@kcoKtNhuR0gScA5z9{N(tk;Cx z-!$)DZPHnW4Rm?;)}+bmtmNac-m;s=$Qq0gIl2jA($itka}6O{YP^*i#=wf^4SpC# z8Ud(BZYJ>8Qx7Pz|F{UyV(@DYJVU7l-2~jAAnN>eLegWmTRn05ntlRRjfq<63t`sc zqmt=h%4m(!Ac?ZJS1@t03u1s7kz`*HuosMVr%e%b?-~mDsNAZmO7y!OG&vZEuqo;P zg|U;06&gA zc7vIRbUAp!@_lz+OC>ivF`EM_YW^Yu@Nyp#f>*s? z1|q0ZisLbA!ea5qpKwO=n z6Mq`S3*EuObqBlAceEo@`M}a;p(5$MsFgWUe(JNAv(Sx4!Lw2Ro64FVxY0Qc;E}`M zW_%(3{Q2X~f|VY1CZbu|DOos&9Q1Dv0<1KH_N0&7o$mAX51C03U)?;VEP_n@Rlj|on01oJE6gpI5n{P)EDFLUJ+|QG2K5P4q)FQ zzVXTzl@ck4AwXgKTi9qK{gjzZmjU_swYbk~Br}tB?$G`rGAaanH;EvEF{xlCNZf*V zoZ6N=vbb-k0+O-Y1nUZVjoe9{(VD&pYWCiRg;Q-#r7Ou7r(+wQ0XZ~-2}&WeIT<|@ zQ5}kQ-irFlpNhp`RYPGmIS3!~1cqX-G-r&#l#{zNUN#I(cY_G}iNcjvK2;9LKyXLX zR(71Oe}w>$9@Rr9UgUiWJudFO*G3p-TKw}aN4?_bzx4S(1c(q4es?II=<{1XbCr#u3lO{lp#`% z+;ejMsN||6>GdfLxj#}$k?585ta)Sf$yhlmy%mM9!$^v8EUFDdb1uo#$d=&Kq76#} zR&?M7xx0Myx7S_wj=lJ&t=YGk&g$b4T5M>LWRqa|9}KhyCV5+!uYc3e7XOQGXZ%Brha~RSNcH@=c5tM8}9d2 z-EjaOI;K52GW#)ye$qKOet*5&8;?3cImTY;>&o4dns9Lz=2aWUW=*pXZ8O%VwGVmM zPx8_3o{omKo2Y%x?h}>enw!o$AMfYTcD|^eb7oQ%caKnkF!u;(>$C;WW5>}3)o73@ zbS2#Gbh^(GeX;MO{h`0_=LU5R9g%}ZtbOL6o>qcSWOEm5#A1?uv zYfQHk%!L-HE{6IYJ8OuSh(|zFRe{l47YqTx%({rO(&p4d29db!sG*@K)bUoPI?25N zF9=7&e1etlv?^zDYoAdnvp8iU<^3P`m-sTasRFxr^sBX9&QeZw!zCfho^uN7f>#G6 z1|`At9QM%tx9ObYigyFgSF6kzjTPX~moI1PAI&&6yPV7V0a{9o*fTvtY2!jd>=M-E z!h~oHT@KfdV|d8iU>2nq_LwhNm#a#~aa{mUK;*tMw0W;)(RgOP_i0#IgYV8?Wo4`$ zn(M(h_=+@8YDb`m=kads-W@Ud&lOyG1smSQvSAdsG>!|?dVN^aW49Q3PzS)6X~&X8 zH7o2-{mbv@EYXq$x&XaMFX<*MKP>DG}I>PcMxU zN&CmAuKGk%i883ly_oX?`{j8~##vDTmLiE4;xJ}rwWeVX!j=zI!P!Le_Pfc6)`&yo zlOxSwCBc&f^>ywwqavcVS31CKujif_Ky}_OQIb}x`L{b!;q$j6M*MbH?UhtZD>Qu1 z?}Q^G&w~O|EIXcxxj;N>JwS?VWg=hO%o{=%*H5HjPA68hAp#G)K&)KM$EV0A#i)Lq zoD5TyP&EzkjHdD+b5Nu%^c~zFn~=~N%VWjW{Q+XTt+GNVn8hProiA~U)@?km2Gwi~ za#po$=S8jbUR*(+U%bRAV>sp8wECU*za2@+5yUBV(IOgl86nnutMV;I3>FTA*n)nC zwcUx-Ha_;H+YJK7Rx>X?d!slLwvNzy7@_NHHaN<9qez*|2jiuP&ul#=c>mD0II82E zxYq~cLGX4tLUa5KRoGn_n^jnQmQYklgY%Jn9D~56n7Byq+f)+NuW(yT8p#KISP0St zV*Fsl4DHX18&dOK`hSS=YcU@3~(xojG|Z z-E==IVhvZ2Nazw8Kn^hY^xv0=G~Wg^Exgn3wXEt@^Hm>zxd`iVe0y@{PXH0Nc`42G zAGn|WrrihRpokKhzc(r--S#?$5i#>*ylomlp`avW_Uaf3hLxZlU~WndrS*R%s~l@< zSm#7t*g6E1wim2&Ps{{;9G91oVv6^#Z)|i#VM>Ssphttx=I^MIvAXI|j#TJk85VzC zQ-80h_ub#`&aORLgiq57>kAMLkf;`-A{wU;aKKI^Lz>^yFa%!Y{EcFhRx) z>T&&YAp2hz$L2WyWs&qx5I9D}r@|*qXhe%cB$7w|)seYZ>e?755kF5PKg+=?Gn%*= zKVqlZk?sv&;|)t}C!P+yI_qGdsnU;Qn}2e8MK!M?>3HdLUbysewR^not@G82zF;*$ zBPj&p5@p9ua2H6<&)&;aww3>voV9_B{){m)z}TDaI&Uo9MJo3uQOIcU#`tsArrXgL zDWjv4*ijZN4E%CQ6pT3E3n9jqQK>R6ENgxdI|chN$<<7ub`VjNme^>GRl!gSw0)9cSf3P%dv6yx7a zpiH-~hP>Mhh`Yi$KzjP9SXcrmJn5XxysE_RF&C$%&nR+1Rgi>iP(~GF4z>{x3M&%a z9Q5UfDCKQ4Gi*d~9c7cfyi-Eqpq~;15^+V-y|1aI;VmgE$pVSODis7nafLxa&86=9SG&_fcUm}Ay*9qet|NN9$QdT8_ z?^#^CjTVb8>{BRkj?*^?$3OxC7_PErcw{d>e89{LqK;dqm-(P%B33 za4m7ipFhQ)4KtN^bX>45tn=BIu7mO0J15nnXv=55nSZ!1$USLRPRL_{eF3?$GXlyM zPGK{Timn9zn!TQVj_E5Mv#gLWwIBo8{`mc9P)65pq=io;h!DFCO4GD3oWzbX_CdKYWjtlx zrjkj&9H1!}O13ke-&&ijSI=q91uLR=Oy5GU058Q)go>!L*R{77FFV++w6j+u`h(_& zl@LzUgMH;U{}?}u2p#U3A&W0&nU;p1R2TgwhHZ?sVvbnX(RhFG-v5N~?iQGN>0Fs* z!v*qvGgli6{rYy6GN@ypU_>bIL;7)As((A62Pk!8*U#81GQn&#B`r3>&btF{ZQ5(I ztJUSKGbSnuwval_^)Gze>_~&$VDkFXA^zEH97*r83Cv3sENDf^j6}EHkMCOfo1;&J z(Ld=Xx`ak_o?s0kijff^5q4(D?Fkd|o{lVC@cO9{a{wWG#xzsy(@1ea&84wKQhkgd z9u_6{@_JTJB{*(#)(k0WPyk1FeYsCIwQ>Ti2sO5r`Z59bgd!(Nb)N)>LQS}&Oo6`v zvv|QU=@XX=43PQtt1!1+!?D^4{gcQ4R3|H1|8qe3btP9{HzNF9-L${tNuew+E2v_u zRgDcdP}6L9@2T(0@aj5B+mt^a^e5v=MR=$w25MmzE=3^HmZw?G*-`)aoW#L9EvMg) zRdZ;11+`m1mirM z0g6tf0#$oN=lakqumyW_RsVA89z!SIrsq3vV-XCt>}~$tDgT>{fWOdmyc^_sA7P2$ znTYe-Li|eyIv06n^b_;FodbFhdmiORP(~0Dzyz3oO$S}bIK}mvRfC-t39iX_w1ul#g8WDj9FSwgkZTGA=oZgVicQp#6CrS4K-eE zW}RzHpHCr<=#FC`?lDZj!N3@PMgChiauM8&sd#yEenV~F>hX?}6DF$a%%V@bi!zcJ zt4W}|oIo-@wo2t7zxEu*N=3LPTGhI5fyIXHo`smN}~jKbnURz z;^_{9XO!J$er^L$(vImo7u22L?(;6()kcQCA7!w9i9|{3S}ICTPQ4~mbF>QA-FBe_ z1Yns8#*%j0D|b9Fy$ID->O9?+!bNFEj6vZKYB~r<`okTdRT0q`dFZJO#+G&!8nKHj z=5p2FK0bCmMaBll4>WsX7p6`f(0KLqvhVsD$>WHPtziLjy+)F8N{-AsS)iBA<|)b0 zZGl1jevd2dszA{(5{Jx%twq`S0-xpYTGwk4iUnt%@Toj+JW#y(aC&t13CHmE$fG*x zy0~%)Jm_2@b`W^BlPa=qLij@2({B)V*-g|~gYG?RI8~GbZFaJ*478!MEzjKll$FP! zD*qW(fiI$U+aX^2WkPIb=h0|yq^aryyc!f%3&@sn`OdhUM5?Oa?V)+wsI#PY#fMOQrp*b<+tI!%b|cD>Cdbv|H%l59f!HmIa@BR&UPtWVpJ5kjUW6u8;2 zsOb^=$EdTnwm!w$(Hk4d`Ut+Uj_qmeR3$H80Yh{VQ0Cfkw?U#XlX;ETTi$`a`(>qG zcg>j$|Bw>eVt6M`A5Iml(Y4#r{S{g_BEXUva39ZnHcstzIzE4$Cvj63ehgNB;m;B3 zFju@nnPhASShc>t-Ol-u7{?Py-2BQs#Xua3=9S4GB;J*ED5d|3>5u2n193D^B6k(v z24;GY;yt^`8RBFm;#wX`Id4Xzl`ZT3ejD7_EzUciY^jSA9U@mzQQNF4;3rTm*zP`P z-#di*X!7@2qhhh?; zURsnhxS!BE|A#Xh+RsIe2FQW&{(;_Kl!PM|_I~0(`lL8?g-U0Qoup?Zp=;8bN{|uM zNbu`tiReQ)pVTbM(Hk95c-NwV3KdyyS5Oz1y2^@lSmKAsA>X9mEK#x+OqNn727t>* zT79&)`=IhKxiwKbv~W%CdQ$8n8n#f%!5=)DejFYXQU;uIi1y03xvAaNDb{E!(dM64 zTpC1)D-aK}JaX_b>WPRz|@U-F@# zW43+MShI*6pJ8m0$19KSNMFyKA53`0-Ug!xcx3;^AVq%I8yyP(GxxDYiLmN8Q&HhK z6gbPE z>AA*FlnZ2J1>P)L;PNZyN0_$b8_&NmmCD!TiK7fH6DXvcZw!=o=_7ghNA;QIqBZAD zuFgl116A#tMJJyK{XeJiIo4Qow!4b{w#?(6qoZn zf2y~8a3hKpV>ZhloOwb02n>S+T#GU#>{JU7jb?j3^6=moL<@=Z|LiXC^B^WaRwQVn zYl~L^@rLpA=f!98ci|d2zPmO_-MSm0MWJ8#BnlF!)n^QL*BvlDSHD>WbEn+2qglyh-etvqbbdzi#yg8wMZ2tx7jCKh>B07fQAQ8w2vzjdfN;~IFIjPAF$zPXQMe9#;Uu*Ei2Uu6bRN_Yx93Ss~zjEBRdl|Xi7G=a8CyL%@ zn(&K_o3asQCc{+IuFBQQAFC{F?R)J)3S?AN<^ty8QX2+($$O2fiT1 zH#9wJfdqpoKtoDjG>(Z?u$$ZSVvB|b7eK)sjoX(ly9#9ko!?zO`8Z*hlRqKM8ESix zo9gn*a-yP&FnYtUwg#3wM>ES`q5{Q!CmGjY%wNZZYpo|Id>~>+#G@UQPlc6KI5a@= zA$g!WQ#C83u)sUwCUZd;X31JHd3!a4VB3HHwHQ(ZXhN*;QEiMRuvKNo=pO$N+d5t? zy0Os&rBa+ZS|Vo z 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

  • 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

    sx?O0rnV0?Tkb&0i1@=yC;=r>>Z)LX7zxIgt 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 Y1IF=XuP~a*p8|i{8n@87YL-F&3j)>t^Z)<= delta 167365 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:|Qp41}zP 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�)yKFle`g$%I2ThCe6R)t4OgQC=8<(0-CDIE z%X&T7!`U_5oXo4L(h|#D-CEi|vebiDio)9`@-L7#`JV|B&U)hf_SKuv?J)7TW zujlVOG{@^=4aCOvfI+YhlFV=J?Ti$`yT+C6Kb`=ef*DXRM4A_@WT9dL|Lx_4mG=dv ze1`Y^a7d9m$vfNsy~%1X3Z3ZQ;2U^`_Py)ANMu94-0`SxM1$p6=RL>Z%8k3c9_pRi z-sdB6oAx_fiH6zpl}L9S8x0pf3*Jle_HbWh3P8W?{wsv^*Z^zAA2K;PyR3@fYG224 zjqA5oQ62B=*y`&ZxEX!fa|gM87`X>A71VSyxazIhSBrS&rko7d$nSRM%{NQr2Tce^ z>OzD|eZ|J!xzE3I?~DegUUvdNe7k?_AMyaLBMcdiGu7GoxI|ebll95ltHqR^c8#Y& z7(n6I3naSB^lN$p;^9{W*LbaaMC_7W8eeS8_Lk7MqhIN~N@8S4moZ}C84&x|$^Ux} zcg!ngu%A|GmmViQsxtWrV>QX~Csz!Wclof2TkH#*8yYweinj~y4rVs>0eB6+|8WZy zhaZ^ta@IKj-qs(<;CcKj(Oz%OPhAuVxJr%To^O@@&8~>^U7O_8duLHg(T;?|zB<0iHX z`LjU#`QAoI_r!l|-QZ(<-Dpt*FkdK`wYnC;K9#*g-}I=nStZ4RmC~XOeIv0znEs-_dzmN+zbV|^xtuREX(?IC$SpCR%Ogff*$e_dL0eg z7Qzebj^*WY5)aR-)E&8t!q1kKcK`sGF`NbiX_uPq8B%g8=j@cMW4gGNLSLiy{a87C z)J9MEE{aa7stj^>pg0cfBaKElJBvw$fB*C~tP)(L*-2L>9R3r;h}Zt=`p_x+^6AZ- z+N3Zaku>tK!_O!JZAIWX^c1xK4!%el7k8#R&0GMN?i$hyUXx)ndHX3#OdwMdXKiAH zCFQ@7PAP!5^I;J0<;G0-5yvsv4JUVnzR{=FBy?K0PpwFU;i|Dm* zt~u;@eRlsa?+5R}wM-8Do0tD}k2{ft^uzBr!47YlSghYnn?nv|kk9@5|4n8h?o0m=SBt{+t{#V=s^hD9+@@DNTA3%oPMsTtjZQYgkx*dFNU zHkOw$xyX(kA=Jqwo$U!O{8%CWtz$M5KdfCXj(295Rc?kweLZ;1595{I3xUfN^yXO{ zRbAcd^Gy_vQraf8fqe?nv!Wkx@2>?n=g`7qNdS%#Q|>tu`jLG0) zuD8;ap%qG=**vuo>l{<*6D58uhUAhok_A)-3y6cSG1}RD1d@`C+5GFv@eIx~&JnnN z40RH{h}XYgawlp;Ufl=S6@t4<@~-x7zu1lz^7b&9KiE8M^;XtUN@p*{4i4=Skxxn% z4=fuTyxQg7YEkUomOh$au-^i0z4Yd8@aSFqyDe1qk~En$BGsW;i@$hmRN^v$cEM@i zU&0YK>!%Wj&C!F|ABY2f2gt}PvD~GC(SiwWx^oSWLf3qfqvs-Ti-F;}sujyl!X|bU zY;TyA^Kz%{qhMGtpr48Kb6(*5yqSIc5c2MKtmdxoi#mbkuL^M=;(NjGSyU+t znwur_WwJh4hMVXWM$%`y*!>nXmHQwL8FlDx5l*?*O+wb3u*uxzBjHx_u<$8c+lg;xtV%}?klpTeZTUKkMFIyJ&*OR^iKo!&&*`LSSj zm-_~io#bja&;fi>T;J|P*wV0lz$M6BEJl4q*p$di(Pv&J_7gX`X#6b(>S#nFz@(7{ z0Uvb_C!Pj0eQs9mBVuzo-2%(df5S_9b?WCrqQ6QUA!Sd5GGrQQn$xF&YshV+B1eFm zs85hUw@k{m3&D;;huXjGBkzY}O`vz_I-&+q?p}`pG>z`0O;4q2Egfym_s81e z-0JLmk6f>+q$oWDp7C1X#)~|W>#*8yy~JQhLXPHcLQZ+0QT5bc_k2vsBvX;vjC6Csvs9aB)LUOmd*!N+_Mb|16B zYz(%o69*cn1_xb-9vk!w*(}gZFtI>?)6%olHWBl#s-@}haV_q8G$*324*W_e8)0IS zQMZ_3;-OI@RNdawQtZqZ_K3SIR^Yq6i>LHBlhW)K5A0b!8;9t{6>mRUA{+P`x*F;C zKD$)nnAINIg|xaXqxD4~4&Az2D%@3c^W{!cZF>lBUMmx9buA@kFk3achO=u?))0Sv zj3@xFWxSpTObiY5-30M`1y^Cb;fDJYCbddQlL66+!%BX|9tAs-6D>+5En3P-VX`(2 zz1Q1Wve;yr+fbesvH!WIn^Bm*JWUVZOs+xJP1fX3|EBH!%vI!1ZKzU*i0;b4EzAb$^-Bmc3F%9CsY4)70659_4PG4Q8lKS1WbrXy>{e;HTFXVJ>H4A!o!F-pu+jBm$y;_KgZn zd*}tq3}|D; zO2uGWJLk<9Xdg(_qBu6J-j+JwnMqjd(7ctkQ<+WSG!7*Vw~;lfi)@M{Ooqu_TXk$~ zd?8olsG(%M)K{N^nAt*|p<&b0==VfVijLxmIBr%C*YRNv06g<`5cLPQ2aLrZ;43+q*#DtNU#g4WXOTi_&2&Hkk5bF;UCFG zl~4lKq^VM(uyDtzGnpeI+-Hn|XVo~ARswFYDJ%3vWH}*=v%2EN0()yhn^Elf3TRK; zLwi_HFJnTH?_8`SQ6)f(*y)j~9G_n!pmvDq8IMNz@S$H-y_nl%e?o@I-YQI8Xm5zG zo%>kvU4WTCrmkXYl0|_sTo7G}gF9iqGn!IN9k;zt+<;F{E=`MOz^_WamiYzd6h}6g zbL?tnsLO;fo=m!Ret7B2P!9rycSca7yMJ@!as;OMAh@Ug*uW#{C8lIq8QA#|f$fsl zVsM(^*Z`6Y(F&BT+jk*cFtZ;XSt%_ugKHNAku|!g4wrlrKB*-Wg?(J${AOD7jt=r( z&Udo^FHwuQm~^o?jtimZz8`8tZ~GH?_G1uhT?W%s8EAo$Ls25#+?P^IyuFMGm0-;QF+azV>i@ z@i7^ZguL2@_5a-7@N$a3bF!JuhpyHuK?I?)Ul z%VgN5cQ`=yoC#&dl?3 zBtgiel?xAoUy|oa-Y?J)Y^7c`XQOr4vS4)v=aZ#!8kqxXqoMR)e-79DD>l)0S==f# zqCy*z)n54CflmvM*~p)RzKR|@&zpVk1+aH)N~uZYvIekO0cJA@CHVG6C?KZchDj0o zXersl{0_DZc|!OmZL~`F-th{~UUVyd!;3axr!f-|NOj?0*>?Ef^eYEcnErDXVzFuW zV|a3{0=ezDa6|erxH`X)M5iU83Uea zj?&FnW(M#^mYrG3V8n~{l;HHq6rQH*^`P%O4(jx9*->6Vv(acwd46S6ai`w?@JW@< z`H{b$y4jNGwK&3lb6P*mVv}DyjhLA(C%rz|{>0u+^U0f~zkJEfkaOaNF5|@C_09sJ znOnc>6HhbUC9lbzBJ1q(-M;79(;L4hs3jTX_Ybh~5#DlrKN@eLJ#${$mx*Yby;JI& z6(*@Mn(2oP+QTBwCRAapTr&y9mC!j%WhGKG&RHi`KjG!CJR}q+eh0;k^l#G5T34e5 zZ8%Mb`^?;4&mXScBr!Vu8yO7ybMn%fU_3oYomWoH>G>6W#jEHybMzk}c7) z46@o=H{NbCRBaoOBFs@(;%8^t$H0*RNr>CP%lY7=DT}`gRQ$ccJ9hs2YRbXEpVHXk zHDWHxNl47EH#%RSym+CZ3^Xj{`rnzL!8+%oOQ2(z>frcs`->e?m^I6$#3KtJ)B|t- zyHLDdIP$RoUpQWi%=ZjTu!bZV4di~V=e>ASXzJ{(sDbLtT0W$%t6u+UHx{A|@f}X8 zkc^Qyf4^#IOdu>qol>6*rgJ1V9qU*^ZUhL2BxDzdk>ZLMETef-9ckvI zXVi5G=dB+j&YG~H4ZqzC{(SF4G0H?iLE#5)Qfy3%e$Y=vda&d!A4=cbjv0C=y}OWT zGLKn%{&a2fy4Hz#e9cLuvXz|e?TYK=2g@IGN($iN zmj|w8=eFT7O6r2Rbjx3tHjYm~$aom8|1z|q+wm^aeYf1A(Vm~BJ}ZwN6*~8eopN+f zaouL(d6YC~A{?2l_5B zH*KU3IpPk+L~_9$hO3BK+-!}d)pH<*Txl1ayV1OmOs(;77bIblcM^qd;sVNWXWi!% zQ>(03Vrd-m(S?<a$1~p5fxqAI5n}qn zMY3d=)w(L80cJXSGz1!*b`TtUrHT;T3|MnLxio$RUlIdt3HdNBZGy7-Fl1-9KcSr4 zv__R@P*N_9F=G|qR;YbBay6z%QZhJMl$ec}wfMf%Gicdbh6D!YtA|@~UtZU#L-;qiL%69c_4+ zt5RkftQHNJLXxI+Lrf!4rBn6F2x#>ykc6hv-+mL!7%z1O4ch$<9=Rr&vkZ%w-Qv-$ zob!5zF`CCAsu=LBtEZ5IzOAIZ9_GT4TTZd_7-)K?h#Dj}Y`Pw{UPmqBid2@Kn-;!N*BEf0 zdik;@7wc$sXk}nSiq#;>cC!~$en(}GXRlg&!!rD7U33||7NlMyqevDPoBm27|I^~c z^`ix16`AZZrFp*e}v5=`x0cQz-0KZ48R22Eq zu;8%ktisZ{_`Rzq^+E%hs0H>;PKV+G9d-mqrP3Wel(qxUh{n$4mjn|QPKaE-q!>90 zTUZrXbZ>xTvOsvG(d0a>@kZ|axJB$I#yW<_uPeR-mj?nOV}4UGkf~?#5oC)%xnubh zqpNFDg`0(HjyU0(wbNdWY+{8JN;nM_HTR|z{)6r@Ms|{ zWX(1cpMEi?t6OI-6e~*sRVoN032Eel4jT`yyqD# zj#;eQB|a>$iEEstt}SPx(0t6e3fgsH$6a4=u|S1lheGZ?{PUZ>;WoIIIIb*QQyPmmNlNdfc24_UB%WxM^@ZSEdSDq^isa@ zG6J1IoE_H8iJdgLujD%WQyF4N3XAdJ`)#EcK@hh^BOQ+#p1Bj2$7PaXHvnuWX$&xY zqQ89enN2Ff*KFl|ldqAcnuw7LMoTr+wo!pb!m|r-S!(j)61mxoDj1v*OpXWNrKCh0 z4A`G+74;Qt3OxqxkR~MwqpjdO44t%p?P!)sLON~A$hSJ?^QA{yyeM#YBU4@6N;h8_ z*M=hwqh+v0-X=$BJSMId+ovlUeUmiY$A812uVwU$ST}wUw?y0Cu(mn}B;Gum^B>4B`LG z%RrVZf=wa(Q|=KFZMOyU97$y~zh8d}EXwJ*#%Eq=#-B3WHW(P8K}HE^6Un<`*|Pe`F|IZ+Bq2tg=@AHimDmOP%$Z zM&yEE#z*D$uE&>XLvIMPsgPbp>r~_JA8tH@>X`o2kSR}eQfw3c__euTddspj4Qe0C zhyl6rTok*H$3Ox&AKfL)R;HO5n4xe=+(qY-q=Hg3GpvP>9#K^hdu7aNh!3UUk~8*o zq7FByO2-iSP;-r?=wemH%&P&4q<1YA+m!-@mne&qD_sc2mW3tQ5`Z+gER@AI=3JUE zyNt{YiF!hoBU66N!2Iwg>E}pH!GZsB&5MSaa1Lpc@dLnsODqaPqm@>Bpm+0=|BE`_ z%scCaa^msM<0wAWN1_Mf8^Ph&^B@G1vtIrSNeBwos_9)kWA5k&auFz*+ZV^pA0QyL z4Uxs?;C9fTLNk6#oHDvJ0|~jCUUlK+jz<(nx+*iK2AtwZ9`|sz@GgmhD-9kFv$ba9 z-RGO>pFdT1c*^d*0Iy%@bU0-_HUqAne?Ss|Lx=_8p z8Iwt3L-CyE%J=4qCI`bGM6J6^B*i@iaKc(I-yNHCT6BDG7?n7GIqzhU_i z#Ere+uEwpAUwX6AIuJ%#Vp)b8(St6)+SllICC;gWi}mhxzw-!5m6HfAO0A3ZTYq=i z2XMuQT&#s6p>iQutGuaG5IE%hP7U}qV&EX#}$oa%BFb=#q;3;FdgCv()wP=OYv zG+sQwHdce_r@Tnp2PsE0hn-M?d6>RqJ^gPF-N~58nSe;cEh0|j($kk6HDa8$fgT7z z=brb|MJ{6!t+3GvdFZ^~UtUW!8&8PSOY!o^bCAET^lMA<4rp8(T00{enLoP)n;Wzw z&Qwy-d`IMHRz+^BK64~%v`$4hoMaS!AJApniENDG;Kv}HvYyX>XY48SE64J4mAf*b zEWzGrahCI~emQ%jMrOKB&0@Mhk$!%?EuS9#Hx63BN!?$Pu7#l0svvT=yRBkXka^>qtz_Sb|R8G2;V|@7$WJXDz_?pE}A)KJFS) zRTov9)F0U#2cu_h4pj*>aOe4P4jtaBQ3x&Nkxm{ackMO{PQM~)Rh?O9dFOB8Ujr$ZUMftW=ht`lG^}46+sDlb zh0S&NAL&S223`Agn=@#T4#%RPz6B)CD7Q;g>Xw~zn=BZdjmb8E4IMaAYF(wJp#f!2 zEUs9WPAMliT6xEsA&%nrej+QKsFgDufBtO8zqxkHe&?9P)E(5>qfye~Jv<=EtFl6$ ztl!?PCwMcfjMK{+Y*EGtSZS1Y=Pw^jSUGpD|8V1boTEDb8)`)%uB2E7*lSe8tySS2 zyt3~Kb$WPO7!qw2LgwJ#O1cyvu?8Y^7rXaJiQE4<#=r*2xWEhmUu$?%Dn+tdzZ6t1 zT>sG;Ji}18o~cQQqJ|9A=0>CmMs~kNE2)W9SlvIoU+54`@VkEQ%rKz)tnb+EMXHdX zQWBhwQOW2H@%uM|fzMj?%G4^5M8*REkf1`0pM(Idjc9Xdjz_XJ+WB{1GqW>ij>4J= z#ioAVaFJ6JYe|k0&2d})OJCG@kn;CQsfj)w|gazI7(@P`cU)OflJ}UzhRc(vOK|=frwD#9J#O##kJ_ z)k6$~8dWzT$iQCE5Yu{)aTM$285>(sMJ=1XjHt77*BZbyiH@d~m1<0Z$aOD;Xb5X3IA5NVl_gYIU92VKgCUX)rQBuu zzZV)0vPZyxrm86j@caXXAm8(^pkM5XFY%8^1n8a8oa-2!rX$=;NgZV9?~H%fn;I)m z+YCtbDRTXq2wBuDE|N*?63(sdip7j4uvaTE4~MbiH#CduRk_`4#@ zDuc^#&|ZEcTIHB)Jr`U-8Pn}-ja^_SXO5(>W5uy;dn?i3l0jJ-l^4cWd}V2| zEY;)L=y?%X{ZW}ZDqK_Trg-iiq!OzCqCBK@uu7V~fcoc%2ykLYXKQ1vwBz{wnML@% z{VyUvrZi1!lat8o8;CFNE;=Yg3^=H7p8zg!2&cuipcu`P$H;PKHPWLtZTsmsV zeouU9zh+$SODakHoH0Evwj?^j#)gU^tl}p+8L>tjnrPqbABEUA*UKei3+HnP6UL#D zf=PUzteAc~OgzlV=}B4r0~MS6*vv3eDet{ik(`$_Z5%5$Yij^QH7x0eI`LRAgtR-tEyd4OTXNF7owauwGi*P%3F zei>;yWkH_L7cVQ_}lX9_~N&Rk^rJcZ$?l5 zwaYsk(8@;8Vg^lI{_cT*8;z-j)k5T7t=jD@yfsO_4lkyqP@K(5#u|HKww())L`1%N z#_x~BEDbfg)Fst2MqDR-%rI$ZH{@weq%kIfctDJ-Z&&&*kvu-lv_kzza9?QGvStlS zxRbc+3Z26sxe+(-XVl1nPn%5Uh4BE|G=YS~u?Vorw8E%@;$QXSc4nG(-c)uZ@aYt- zrTBdLOvY6WD3x|^m_fDVL~7PYJ(QjvE_PUN@D~SV_{D0fdW`}-!#uB6OoJctbe@z7 z<@lKi2py(SR?H>SB#R*g4`X3-CtL0QASQ|l z=n8WUn^ajele<|^?6KwK1yJ)$Ef#N84U^-;v5V{32zVHAN=ePYL-mBkMJ!X0>uBjn z5YMP3V6a2LwRnvhuZ7dijVrXxh3p8jFgcp8p4QDXITA)_Z8M*{KN;BgjyU zsU#8R)Ts&i(^Cyjl6%-Ie2fBYBl?_;$tCS~CX|BmzaGDL@kxmB|B*cYWoqR=HPd}@ z`Bmsy(9P{XvVY;-#-`Xb{rsEvZ~t?=Q$sCM3ODiO*G8XMt@$kfE!3IaZhUk*C8CAT zn>Ph}oBK0j|E0-yK~k+8$*DZeuTEdd3W{^xafE9s?SR+j5aREm)Z4G~Uu8dPB?Q7z6X|woOS!l=9Vd2b3*#cq1B`q;Jz^`=%4N z6~qgk5{WvY6oZ=LB*!3{c6Q>wDgomo#m>*NX{RUrEYDQ3_v2KH3AKqns@|$qKCr{4u-|3RcdIu10{XTp zFC#OT0wo>AGgF8XMG*Y=K(5auA;yHjrGV8@^)>p_kTvIH^}kebf9SndVG~SdBsDI^ zKa7L|$z>#fH8$(qMgBqbH;6ejU)+b4A6+fQkX<}}(tjI5BiB%&C>hFg-5*gu7k2o@ zB%bS-%19A3DCkt`RtbWl>jTm14h!%qJ}ieabJ;rslsM+Zw7@S@*o^Zx8$$mr1!5C> z+t**)@V{L;Cd?>9n21)lR~d#}kdpJZCXKOM`W6*!D^JK1^X;Zim!X>}ili*+a9W4) zX%UN!bYI$gD+b34&)Jmz+-i|gW!b||`hMe#K`ZQ1&zY<&>A4nR{wwz09y7Pt#Ev*F zHSc_bOc-lV%^Z9cIDQehhd4w4RQfqvHq3XkdEtOENa$;3uh@_gcZEtzhz;k=PD%4G ztX5&5Qx(RDk2RFoi!cCRoe+cRD41hG&mvJu`GRMi>|X+3^boB=m(Y1Un_00jk4kV+ zzwJ}biSa`;3=1Rr($dsqIagn+-k2tiiKiK_4mK2M3{G$9khu+J&8LFPSlU&F>sJ*p zM>5y%!gA{0VW{YvS}+zOqOx*xb?Zb}ieM}E9F}8Tr6ALqeDvQBLsAPo^n8*70Y*!r z6}UN!zTJ_ULRx9Bc2J}QB@5z_gL+(%jeGb903S`t=iZUYNS-g)V!!$d7G?y~GmYOA zarlhofopNnoI;LHECPA-(c~;}8(QbGONUBgIBCP=mgi4h>QznwnM zF*mO(HQ#6d1dC}k5x?f*UlR`70O~UAS+;@ifs)+z?b;F7=xGHW1LdT;MU_4NBV*^s z)Y%{Rm*e7E^65-E1b-@$3YO{bthZzsyAQ`}xJ^D4;Li}_&t#(K#<|G=QX{vPL^SpH z0{sccHPQYIKUa^g)JQeaCXwbEFNM|%NqX%*&kdn}Kqcv~V?QTq@8P{|b9yr+#~VAgxZe z0?T+LX&+(kufMFc8kN6OeJV4|Wv9<18bru%U4%#JNOGPiPTw^Yc_hD8LjP9AY_;5* z_G2eoq$%9Xz$k>ufkfLY^f_PPT)P--cF46!<^6uhiuYQ}rQ8UeX4aZrzyy#ofr=w; zHxdrQ&2@N_K1;@DZyT*-)Jhi62=#i}ZKuG1k^QsQvE2&Pa7M#BcpV_!*pi;X-d_8{ z%ICO=Fg&Ylj>2%MUUgxF4$9Jd)Y9hmkIA!F-Uy&I+Re-%( zAOlt#YP-Xb+DaXlbC}AI6bY zZBX`@vTu=-ZY`kwwQlS}bVJ8C%8AW~U2@u|gix*0fJvIF$ch@*w9G#Z0Ds9N^GRwk z4fFrMqgiNJ>cz-knar^(8OB@$O6Y?1-`*wh5)Q%)Pt6R}iT`e~Xv ze^0GoiB7j%Vp^&Th>9`_)a2Bs$pxEsqwLfLo(+88I7m zT)7?dl|qQWXY~XF!%kHcKg)KkD|Iyk?kF-nkcs=B#oQkUcpv(|`1q=&d5atv**I~5 z%VL$!3r6b$$LPEjU_ER|=2y&!h0k$5acSCnaSIa!URkbuBbHga4RpdzEXvUzK3p<0 zGZY88B@8+_S%oNZ@t{ctFdSrZqPe;ZE=QFcnpNv?8N7EfHrD@FGdUT2Q1)xYO?M>o zx4Ro5?rR1PBL4|qmx7NOslJBBwC5uMw*FD3zra-`9<<94d|&OU9}^i|P4A%k5E&8@ zoo^>|<;dQ0Zd?^YHavv?&7?^xD&*36=9gwI({;KE?7(bi>z;Tz~Ed^*U<&Em%joR_})EGG`c3 zxKInpTOS!wNKmkzKX<>=>u1j-XGY-zKiIjqt=7FL!*U0Ox^T{asXh%HDcZ`K>k)NL z{L^%4V(K`j<$*>PfNeV*ssuUK`&9fDC*T#Xpz2`6B}9fUMq2)Zp(>;?`Y8BM1^4o* zX;Ke@JDTh2k!793w9)>c+GItp1W?s2F~#Y^+Y&`Fsv(#r)K^R4W+H`DDpSnBFW;_J~pOD@(lp8}O$RuW~ zT6FcP{qh;$S)WYF0of#@LGuAK542%kO^1q16eI&sqkv?tIw_{B>*`zjyRNP+MCHvz zEOhhQ@!lNxmH1zlj38ma)U1q=Mqg@3`YfvRR*j5;AGz2=!UBUiH*utBgBzkTu&KeB z%Z*-2Yv>zh7Z8d)+T-kIcpBSElE@!65H%0%n+1_D95xxDy$r|H(*wKuEQ~7dP{M!U zTDW%R!-@wKKI5Vqp-(Yj`U>mEjYs(YZtgE&VHwE{j4PcOW+F-_xS^3()1Bn?5nmAl}DlyBxcxbb4 zlc0G~S4`+if-k0H`J5@kf-(+%$gthyIZ}u9z5_}4w}qDF#qJ`1Wv!$;9!8Q29vgZ% z_@DHBM#h)N?Zks_H4*_b5IfTS^B)8=38!=ODTl!1Y_+S`PX!xI0*wtoZ|bDzqi?mi zU}K_BaPf;@agGq zGaS6$KVGW{ba?P;0cW_ll9SK5mde0*=T+^f2ABq)fq}$ncx(N;H8Kowl-_~%4msn) zU4ZHeXJnDppEo4D6Mg)eN9pFt`@C5gE1_!@=qN2vWf=}i;VQ3iDYacyvlUny>!s3P z0TioQf5G=Tnn0hpFGg7e4hh4xE47Qcfpf7Uq7vF{#rr$>63v49jQ*68d0Pgle`*_IZWvA) z@%H33pq!SmSj|Ncn=QsJFI&0ZNHff)y4o1CHyIsJ=`vq;@8vRiuo_>>xJ%AR$)XYS zU#mjek+)JNu+BroNoQZ6)ne(q0a-XqulzdH3bIf|QbltpoHLSQb}*USCCpnf+0y$& zhwK`}un4&slmGCB)tUim1@m-9lHB|q{sZ}B;ueNn6+CJEi};uE)buYGJb~oP-xl7U zc0s>h&Lu_cecbq*@g;^S<~U(1@zv9_PnWf|M}j-p?iPHt2&c8sy61pWJUe%LOAcA% z5)WDPX>w^}BhsJji>xKCUsx+sj;T_S7Om4^^fj76PZUp83p56k9ZP*9h^F}anu{5w zzXU`RZ#9FMdE9l^ClbRgc_GejB4)4`wtKZ~+4H&S!*~j&0%cQ{pt1brIZ+l52qE5# z+i!51X@DQ&F-L58m=89MwPo&h2LpjeJRW5Q!~WC*-CvMx@&Fq^$p2t*D|1V+YA%duJ|OMR%+nQ&bhk9oi@ zOWv2?z-N-8yKVGJvH@M?Z1lV&?pg%4ZHDR6#f|nS63I=+3iT_IKA}OUIFr{0y>Pwa zg}jFYz!k*ChJqa<971QmZ0%at;p#nwy0v{fcnawls?l6=hre%R{+r_@-RQxee(Lf1 zs*M&-Q~OGCC3j{ouYq-|gE5cG?f|?rB_z-_lk>FaRmpE6r~57zZe8_o#r*Aqb>>_D zT9rDBFEt5*&e+P!-K4a`xMO^+^s?j=4*Fj}Kb{f}Xe03!g>O0QRDFNx_WM&N*9onr zA>tp<*-2Yq?_<@&23wk2EKRt&!fP~l-vDhy(0O~fgmWI3{A-WeWEh7RGZVnMwGE*k z?fy!=o9TvS1==Upa+L~h$9_18;jFLXeJFqP*#1AwkBR0YKLB~AV#}Gechq^3$^8Df zdGp$NhpuIj(Yd?9jl%o`i#4};UzkgU;ylTvmM-cb&7EN}9G|8?+=7HoU!W|Tk7Cm5 zgZOdX`nF+>EOD!6jlkMXDwv>otxP}HMwVvy2k~zOzmeS&5R@Ia%Dr4SyZ=1#P!*-N z5~Z#6*yLCV`;eW_G_2-1Fp4J}pJJ~N`cL?#4>u~MB2zeGHN73ng6OF-Om1u)q6~!( zQyvS7DiA~oYb$HNk0$4x?30rAfA5*|t1b6ra=$NKaAH2aeDs#994sLj!r&ln3Tb}U z8m>_%-apZZD~a;gce?x$jt*4H7mGmfdRMmJEC9UqIJEA8iTX>~lam59l^|Lj)qVar zHWC8&g9Xu+QdLgOzsof)xcgD)8fB!m>uTgI`!Iar_onhB)-a61q^*8IcY4B60zIqy zJ`soJcoyhg(AKvlFe%)!?b>yOeCC2QOD3sNUXNzNPT+=J%n>7=; z&uQT0t3Sq#Q_jo=qboC$v0^6z+X4>T(BJ*nVymH@RAIXl_Nlezd{-Ty+&}nLpi6Igg|`Z$Vj->w5=IYi}&BoBR!oS})_p3IK3-E3-?gl5(1kfwlr0c5}LY znWs*zst2ZO3;zV98pJVXpnJXX6Dxf^g;a+>tu4wj zknX*OwBFTE?Y0)RDm2)}B8Y0;@+zeuY3F?{m0(^I7j+8Yi_2lKa((l$lDw%;_ce-{ zZDTCKYW~3>`n84SI4VZyZ7MiXz%AWSh-R>IJB9x#0w|@gklEbB9 z5LgT_>*#PyK7Wj{`KxI(UbyPN^!#;I@ny;n^gdy}I8MWU+-y}q-Y-dPuQbwAS%@Xm zal{h#L!a^OM#fBZOCyaK@fgAK+>lI)38`p-Y~U?5Ha&7varj@g3`rf@UGvR7*cSWk zxTwEM*P%L}^p!XVv+O2TG6ts!tAus#I4R+fh{Z~L`pFG2`y32OB@2kk z=VAY6($~9`QC83=)h~yxAGbz7_10lpp!}!p=2#pio5_|!o29IO(Q$h7Yb6_j^ie2- zhl6b|v+mdXM@wA#{`Y2dcYEfi4u1qx07udMpI!{>j=KAJy-TeLcR7fBk1JlDu*QV2 zb}%O+;v`%UGi!p%BtMX%R(3|nd&Z3#=ZZ*wNL;v6Dr}vLu=5$inSV!@XT}N26c?MU zqAehgTepbD)dp-d)&9`F7fTbXGPHfG_*RYLFzWP6mw!)2ZE&17>87ufk(|aQG(U!5 zzROhmQc*`e67@iGSBdK%w@a%4hEb$P^@D##x}sMVl`2s2VO;oy;#+DnalmVp>pAr4 zz*YT4mz7pFyPP5L{_cc|95ZPep3u)x%--HbPlE>nU@GQYOszB%x*!fsT{03v@?}}f zWPzt?o-qtp1Ek8?rqad~NkjvHX}v4bCDT&s!HFx{%PxjfhxT$=I_cn|HN{|r6487u z>RLa1E~tuNcO?g+C5K(cJTmq~uW`eKclXg%h%9g-GO)p!3ZIkN!)x%iU-XB;oJj1C z2Q+wR^;IT*CTS`^P)XGru@W{k&Yix*_T%|i!2Z=^_ofusH>4{XTNI{{jDbxW&zCN` zws;jG^PR&$rL*5j=>})|Y|j5=adx^@O4Zw>Un%GXq9y&;nyJug7G^vt%21>(R<-#i zqZ`L-r<)M4KIX*kAs=l5Wr{Lz63&E<&qJynAIreXCqdMD@yT%kPaj={W&zG-u}Rps zB~i(6hODtI!1aSQcpeS=S}Z^^Uczmls>f8{U$tF-J|N-|+PjNHOt&b#OvQfn*~IVb zkCecg5LNbp&9pvp>!tuXg|F|e{T~VO7A4Fu|5{Ije+}*=W@vkCX*!Xl&cCmJJ_MR_ zHreXJLs?t?bh}Oa;PgXr@2H>YNiNL)1K*O=(GB%MqR&j9hYtQ9N#__4dH;6tY-2au zuFdvl+n7AnR+}-|)@IwBYT)%t?1g5;HfRo{^% z4Tq-HH~%emyZhtkG9o3w1a6R9o>0o4PwH9{^l99p==n^?BcqBPMcGNcZwROCzB62#QY{jxpM90Fd91L&NVC)y*{>n-yIe9?2DY?!L z%9MkGQ;fNllxU&fZQdTq8X{sRzpT#cw37jQ3u#j+ev+QdQJQ?!e^8!eaGLWLQAfmE zOGClDtz~B~nWPG#n_}9$A``+MJR_Oscc<;bN~k>jlWLT+bsIZo>~PUFN(`0`lvu$F z+4en)+2C9G-ga+IyHfj=b@3ATHfr-1!@$R{_uqj225G#+*_i2%moLy7Akc{^P}p3P z1d+Jj!q857_$(5_#Fg$YOZ*|=XP?)11G$n4VT(a8EN3#4{FRy}^w|z-mWE%AKyNa1chgn`fR%FWOcM<7``?UFlmW zXx*K7fj!H}$rO{O5-)COCLfp${67HX%vEMVQa5as-+ zgUWYlQo-#$+~o5Udn2!njgE%Pw#N!N5~C~xHz8+(8y#1r#)bkyK^pWkyjA%m^po45 z2W4&wbD*N&h<;H;?RNu6Ka2_CB_8B+d7-9iKteD+F&&g49t6t?{YfLjuvw-2k$R{M z6I_egQ#LxkF^^m?W48`$^YD1Ai@<8jWwA=63MFmJji6*_N`g;RRve9C5&DT7(Nn4y z*B~xGkr{e=_3Z&{uj764+Q6W#kB-xerDgNBH38=v6zXswce;yL}}4alB& zl|D#0oyT0e_5;aGvz`UJpK|kObXRnP%{{H`B&qcawYNan@mu$k-uq_WkRbD%-O!UB zE)OPSaRA><_b)*_Z<`87j=UN03xwYnaCfJZW9;`^Ai;|hit%8w#nuKQksAMpU-*Fo z+T6X?-RygG0Ij_L%YWa1keq*fp2`lOdFW=W;cJqV?xyL-(ddxQSDVoL@%9WeB2RS| zfr|n64zj4HnAR1G*h}0>>Al$A$8j|pR~#UcsP$0k(nTt6?bX&9=fCGoZgxeI=xlm0 z>$qlh(@dp@m`eoI!U~Px4p1G`BMCpoVla zQvGqjpf+h;mA)gd&fgG&gzrif+>!xtNn(;+Ahn3oP)bp>ONq4NPCJ8d1h!JfV9bA% ziJ#rok`&(xgE|>f)sq>i0qb!S3rveQjrGh=0fUW?xyrPK(|J?-!$>;B^dbu+4k(+q zV=~4E_iIkHA>SaL!$CV81zXVtw$QNO4rA6o*SM-M|AJRcedkL604TrBFCgWq|!o0?rlJZf8{z6k`WmOm+P4lDHkOh%m&SjEH2xph<`>WAl63IYk z%HK&JiN_?~v(o8Du6-|UfG{q~l*ONQsT@Nx)fvZ~oiYasED1&J9wi^)D|1WrNmhl* z$j>->i*ztMGC8uY$MhqnZ$CZ)UL4*hP5(bj*pjlhIKhkY#`DAGU9g8U76dml2DKyS zOs>c~L%%191RDp5d1+!voIA<>XZQOI4L#7_v{Bd!USEWEtQN8%!kb9^6A~TfpuSRIu9YX3)hQSu zOD`AGNXgQk2qQkk@>1hL21;dcIten;_~+2T#Hlv4Dg4EwBuGJbQ(a@S#R0;RYU7g& zRn4ts&Un0N$73tGW|{VFFVymhF&TxTUB$S69z51;qqTTuXFTW!57yqBwbUFygP1q0 zc12@pxk}&^NidUKOzht0dlY>dDq1>5{mEs)3es-csCgD*S>iR$s!@GDq#&w$L1(aH zb?QdC(Vw7wD{uH;eu?mIG!Bxvo*;4agG`3W3v-dXt=X&XlBd-U12Yx-_xP(XYr(;pS$^!3@=b@fz7?I)g(0AFw$CE zySQCmru{qk)+#X6Zo)N_l~p%=mAK2(qmCu>y+Lz!s`uhMdXc@suCE~|VVxV%0a=HQ zS!hU*rpe|(m>9kbVML*;?fEv|@p7wqO6U>j>vkUmW<9sIzuoU-Wzs7@*cG!6`|$sHR6!83CyX<}jwXYx&n>d)@SPO6qgYj$l+7@~tHFg%m0F z-u#1rKYLcAPOC-9*n~kzZ|KGTh$+eJU@!5OsjUU+eplcAUH~xKk*f?z@2L&aQInUZqu;Ql}m!MepNSb4kwZzP~&TQK3Hrc2C#1LOCFh!PI3n%gMY>; znYL)hlLk|)gIr$qa>oZwQ}w_eJg9_1iEMye22;3wKt|0OF+95zT;Z>qF;A}W{Clsp zaIK_^IMtY3Ip|*VN3~Z5G$L)RP|S6SAcFb0?!^~9&VUw%u$4+OoS-|sLlkwo6uGLL zpTo6d^0>?>gYL!?MV)^}I&n7&xVTIyoZ3~?364y#L8|GhZCa(c_OX)X6hg>h8a5;L zR^FUZzo|5lsBD0C@4>HCGS-kBq!m&RssoCy?gG1(@85&rwQ=?3mI}@a)e2|oI&qLo zLO2cUc~_K*N%4ly2u5!R7^XY)@^keS6R#TU0>F}lf+{Gib3*a{9r<`#^!0nBg)@nH zym>#vKp0xO0Bm!q>F|}Z8YFKXC&QG%@~ax>$0m+j5;fU5b;@Rj^4DF=FoefAM+@US zw+I%Gh>N=&2+Jq(^Z(Fok^i8Md)?W;+t#ZY-)X)-N2GthnUuxs{5@cA~ z9Y?B@C=t1TNa%?pj9-Qzj3CNjgPK;YtUl8GsPxW?BN!m1(nZ; zm^Xy|RvT%}s_IVqs)Lt`6Vz`e#Er?g^vM<0S4HpJ(RE3l15D;hbt0leB`#G!00k=- z{9)C+eNN6VvkIFYX|FJ)49Ey#L;VHI+4q+2e;tyw5cc=PCxl1pq=QfVksL@3mg&>U zGQ})8(-&#yF>>4+2}Y%dY1@eyouCL)=beO0IP^2<4w+vrzu=v|*yPmw(vxO%A#F~e zf^Jk6U>vz>O#qOl1t>RuQi(Rx?W~nww#Gmn$}a3 z8)Z@lCDICXk+@W7Gn2r9UOZRnRM??{gy$gkjbbp_KI$I-xd+j&W;?J&m;$x1*Ej!y z>A;MiBoh?m25J0kOlht8=D$mCiDYDCpsv>RP4M$vaI3PWh^Wk4K=1EwmQo3LWZJba zw{6^t+=-S``;BMKDaWN8Xp6#!*VkLL>~PD$cp_NlYjqfKb2#Hl72p0m2~ehH7-b?? zqpwufwK@@K`5H6i4=>A2xsl>WaG8$3{DFYDhHsO3tFdVOx%fO& zRggAsnR#E^+k2tSkHbtnwnTD`$bxI6)=k_hBs^l!7wDQ+ee8#Z3%utlW9i8h>q!rD zuk)_s3WC8r>1sUfy|s=`^A?j(RL^xgf=<7X<6NcTf!wy81zy5fE9c;80tDhEtk7us z*2XH}v~iS63v-fb^QOK8$G3ESF%_NiN}vFsL_G5Fz81ft)9q_CW|q6{`TEtP&QA<2 zofU4-nwp=Q7{*!E=ZK&7r5olP?9r2#eh-e?y3Gj!LEU@_?hah`<70bkGB`JV+>MZ= z4j`zxb;!fP*?$i;-J?TG%1^?nLPx0Nuu~9OXaT6~`OOOJY{5gvd4&oCz&I8k)2pDJkgl`aN^Sq5>qocdhMXkj_7mBTPfZ9i94K}eBj zu-FKd^cr%fOa=)!*k8}OY}DxL7|>oauw=I%!F?b7A;Djq2W}sVx2o=C+l0DzHw)55w9M*Bn*LKmf8r!87PK z?+BleF9jw{)n)A>en!jIYhhXTv(@6R$q?RDE&TfjV=a9;#3m4;_5YKHO$=Ta z$p3l2T)hr`(7t^B@cihUx}ye(O8m@gYNM2EX>L|j%=1|!yh#b_CYRKN*GDTVW!WEU zTq4wTo}s^FU=2sEmUdo$9z>j}YsA4HixP23M~68ZDq(UAQKEq0QpPBM+p3kLj8Zns4Qq8M0cXK#Z zBw1m$O;o*z!7$MwAW$<>)5xV&Zgn_CuC4s(-O8xTMTw5BFx6QprC9hq8*2T~=uT1W zk9j9+=fz-K?~l#h^o`*(BHZtzj$bsj*Y>Q>CTW0Q3=G>e3fl#Yc7JbGx*AeW)*UYL zgzO_Wu>e+Vdmt<&`#8&jCVrB+r5idXr@0QIntYL(e-A_|!k{x*ec{YH+HvAHe`ITn zDm?w6mQSVmZdH5wF=`((-sRgB2t_YIIcir0Y(WIfEXoRo zwY*eKYUEF)p$d+8Pd@-cM-PX@SyfyPNNl41Y!6HEKXib+>E~aq&`I$bsXoI>fGhe2 z1QqUY6VE7wUYic!FHmv{66Zi_NGcEn3H?W~FLeQJA(xgh(ZSryO@oU$y?{AFQW49+Qj>oJXa=Xcv@gVh}<$ z7WemEVGR{L8q^_^q|bFgWMw`y2Q)|^Y*Y93n;ZelCxUQ8^3mmV=^dHz>Kh^_daBgD z!Uwy#AB0`9G_aqtYbdC#su5_9F1a`!D;x+4M8sF5cd$F5E&AyVl=agb)`avVi3kZG?OT^x%rNAukYuJ%wu(&))C>HUWXvL8E45CQ4f^a+Cozd_l2Ykp!sWHLYu(m%AC3i? zVv|<=#)6VB-cq5E?Vrn)oyFE7B|tb5(7;Re)gUP-(Yl39N#2+p z5Dd%arNC-&nmeUo2Bh5;qF-D3Y2cWfQPrlY(b=&eEczPgg~moECqRljjnzhY9Xs)9 ztZ{NBUCOLea$G9W*ilnlH0+yItsO-ze*!F1Nx>=h&B$Hbof1`&7=xb5IALB$h1Kx{ zKA=hbX*9kbkqRswoSBy&FdyG3+VegET2=p;WhvjHBFon$Q+8C#RXb(pl zjf_CDTIeC0-Hqp4-^vuS%p1yB>o#;w0&6=+ z=V_GdPE8NY!<(z$v0%oZ7)Rwhb3y<7^3{nI8sbq#dhGR_(rD{yEHbhC84fT=6(BlC zmg;H0_Ro{uyr?hbninjIx&V<0uNW{uWQlBdB!Xty^m0C#LA8mR=jWn^08nDsxGntt z168+1^?1_&1{Zo2mvzRfhZ}jS`eCGA5FCSIrHI=3ceIDDX*avn3C-&LEQ*6zK{x#< z3V1)(XMan9I1zb^3n%ue1el}=f(Z?)8gaE&Ezy*#;3Al0S@)^BY0zF41B^VSsbQ9W zm#4)E9*+8bu|aOt3>~+I1kMa^qyJG}i3SrZ&5*sDHD3aGj9DUzyu@N!N+1=z0<+bl z!hd@6vPnL|Wl^98ud23w*Y>(mn$F=er!Iq(`OuA0ik4^-!E)(?3z3?`jD|>Qmx?{U zmg!QIWzFht$^ApGxE7wy5Lpdpvv3(na$ymm=!fx=CY4OEgQ-SEH46 zYWV61iYNWfSq$?#f-mr}vNxF(mrP_LZ+_8iYMx-#Ib8){mZg!~2!b7w61GW#{waYB?7=BxU<*B^22SlJ;X+7; z3+-2Qu5}}?E(~u929&>#E=^}+39PF0%&u}NeBItB#~WqY4i{sIKDl3ls26-9U*uR7 z6{n&%W%J*UqvdxDeVSTRQL)G>z8QqC0l-{SG8Lc}jg7w=o&~28SI`5TMJ47LqaMNN z^vY?&F4ahK=WkNQ3f4&o+U5ylqTuf&CEo~|b~?9BJ`o~3LB^t`k_dYdOdYg%u~^a8 zu^2Td3di@Ho3xM8r{h@I87%bXZqJPXu+i}~)3wf?8*H1Du#s-x*RG^Z3S!6ASQ>K+ zfK(t5Vj7NlSGBg|7jIsMACm1~#-gekd+2`H;AQI6^E!QX%}g@=3fL4^!8WQcFmv_S zXkM zvo&tJbz0L=WRQLOPbs>PtccDHe*tKy@86m2uzBIDxRKiwMRCAub7B%Rv$1MJ1&~ET zt*oKj#Cj*z(#d~%{aoAQQ;_p{*^E7C1s=}Nyz9c@qO`j4} zj`#O9RuHJ`v<#tAk|+2FUmM!DRUXVTZ$9pr9bedIntM^HG6{i(l0`}?+5`%L3LdNJ z`MWq=Pa`7D%|h=)x7WE?N+dT!P=vgfuRQE^`u|m8%zwI>^lOIrCaLiKjLwiM_(3Nl z5|gTy@7+3!@1Xn%4nlLFYT#i6v7}R?!O$+D?H+r3b^ToGFc5#F%nsgFZEh0KlFIGM zExLGEc`W25ewpJQFB*7_qqJFPHAIn7dBxi+J#MP-M{k{CoN?|VHd5hpp| zB@Iq@JAz4y+kcUCuU`Ub%a|{(j|y6$hNVNA_ip19rV;p640saeyU3|zGVk8ZX;o9q z0kSZR(G?Y)yWh4BPejbcy|oqR!O#D8R4*z}|AQMj1z zUMWc(*ilzw;ej4pDQ7rTs4$9zg1ui2%ImIbIOd9z{Mlxlzl0%aObT47{7S8u1vq5Y zdY^--;)~BhwjI3#iaj*N+fEq%>@IOPMxAAf1I9T$Bp!H|0Od1^Q?09;u@+G$L=KZ3 z!RH}Alj0_j$?`z>Rg${ANhP`{joW>9%EouqZK5_uqs=wr*zLhOAC1aNBJsWE;`*=)eLvjpU`muy~4HaQ22LVUs;Mjmy zrMgidH7_cHB>Lt0JkiLnb3!73lNN8mxtfv;6D=Yr?I&8OVnBE*xj>wk4TkSsXEMNIR zM~%2deb?{{K2e#hO{}CvC~H9Z%OjyV8Yj@8p%225&kScmGIy37QNqFi#bsvIS5E zD^r}WXUD~-ZK}a+)a~j{rY$9e-3JOtF%Alhl+hH?ELB)aP>X+-j0`eVK%3=E+etK> zL?i0PXFkstqx+a!Ca~k$-23T8r<}a@FklH{jMno!SF;bGa**ZaY|E7RSwWZE>AF5? z^hAXt8}p^|E&2>5*(xI^5i7I*X_O8=2+trxug}NrS~C-a zFc^P&gwMpZR{X4m8((T>Day^bxXNWYK9nhknz2*~f4{=EM5|gCyo;STEy1?e9_cU}$FzmKO8UqjmB|##?nDXaO&vll zGiPPu9AyJ_F%xv zfrEt_sQu zxF0EdM0Xhu(i49jn^cfimrFoZ+Tz?)RfE^J3FyCLuTPDDz`~XoCb(w zad9&Fu%Hluf>czp*s?aB>=)1T)adWp9i11c>h!JoFqmGvl^(NKpq+dB+ur6|KdWVX zT17*HRs%~d4%s@Dw9T2~vAS3F_sL%avxn1WLLoJV=Ylot=mvsdb@N#%zU#pB!{SmI ze4;E@LsO&ntWtv*K8v|gjMiw=JK>efn>2EmRZZjpZT;SzNHZ$H50b)R*WB_4>vE=B z@2%Lm=gtd! z>G8QurPfv8k-B(UrZ|IKHQW2RthTcFdkM!Ow`Qyx!@r1zpt+v98_YnK^0waJW8c>{ zzP<^TNKqZMgxyC~OXTV9yA_A>GWl^CJ>PGP(V43k|ENU? z&-?Ds&vsto(=^)P;E@1wVjE9Cvn-65bVbcXBzVLh!hkrT9k-0aL5+G07>Lt^ZTf^2 z994s$=MFGgHI6gJP?93PL-e+?Tf}m3kNjua}EFZjtm`&Ynv)4U&dE-En z@kK#qx{o?~$pBsk!;#G&vPV-`wu&n#C>fHW{q37}-&W~An8*k1M=G-PR9`R#I?xWe zu`1#0!Qeuw^(bf_SoA#Kp$kBld1M`PbqVNP4oESqr&BX4J6^`9{yzJByO5pVaD2^Q zD6gPBt6c0@dE9v+y;YG%kgc>j^$@l_PW;{aOpUeDLa5nk_jkBpW?@zGl62!$)A2gua!o;s%uDJ$aPsT3I$9O> zOjCM>bvFJT&ob*m$uIoS>Z@zTv$p2D8;xXzrHM&wZeG#u1*|1U7AZ`9KslG)!*#JG``5r9#ZI2VQBKD}u zF#PZDE|;hm!{rkq=a^2%Dw0Okw(xh?GeQ9gNW&Og4EaBxvA-;-;iLNRq% zQRWuD#kb%jcJgUE*FmO{0ErBSY={A4 z3@NC2OZ73#5AsM{RUI!beK$lQ08N$s)YWG08j0)QtFtR@z|LGi#Buy)Nc_aH7A1^Z zA!NPGK#YW%$nv$$XAi`isM=&baeKssf8kI8D~55ZXDdx~BV{i?z`I2^`rOnsStgGx zIm=op`Lg0e>wrHNxe+y1vaM)HNy4uMboe~65d^?nk6Q>8d0=uSnih-{Pm(PBuK04! zvxzEy+*WFgqDc0@G3VKM)S;dVHmEnJEiKwNf=#tSjY7ocG6!kyZ($?lS{M5Grz!w{ zZ#j*;-8H2zM7o7=#hhTAs0%0^n0X%sjsMD6EV=*NM-O)0|Dw13+}K8zhVbID=1tmJ zcW=_?Ye8(pXIDpIC9vPFLcyFSaBx-_K@~x_6v)0>^>w~I8Yl{MJjd8Dx!Y;Gzv8D+ zc6pK=FSTH8wgmMOv04a{=@*zd4oa?m4kawnqOmby@H>v{dYA%D%vG;LATw6~YvkG2 zoK3!0evIzgeEb&sV3!F#mVpf!TlQDH3_ytM`*2G7-N%JA7VLg-e#z_s#GWH28XlsM z51C$S{kp06b@uDHh8?C5Gw+Y|W#aYEvZC-`-=L$ELAB002I}>-z1=pOh`Vit4qCEW z8#S?Ujn1_a_=AbH4qiXa=B`gN88gF$T&)}W67#8A2R&?x5u8Mq%O&he6IX@B^cHcn z&i#AIh|WrsicTFLrqeKCcc-cj%=%Ru3@NbmNjTA_o0{>`zpQ-$VD{j0w=9VdGyI@O z>#4!41*xLsUzA3hRV-hVlSLR2&Y74Ou(GHkCLzBHk24_@E=(JPh8OU)AT6`2AD82XrTMT}mjxgKo)Un)GnC1B4W+lI|0AeFq$aBiK z5M9uhE2Jnw)Yx)swH0T6qIbT{3RXJ5J~TDLfrJwIp0}9z)B7rsQI?e{gw?XtoM#Ut z;aE%JoybkbWRN5RY3h2-&BXo+ZTx+34v!qP9 zR;)Fg)tWIj@QfR&6a-sG9S&Ihuo9fx_-r*t!~2+0qpYP+ToAlP%}-!qokfw`pxqcA z0NUCSOtS^Kzu9j4e}MT`J3YdBlSZPlo|{qU0F6UC&mEeutM3i?`jfnBls7_1_0>Z= zD>8I1g~557J*AH*tv^^jS`QNE9;KMI*Y#@8&xN_EEyz`j?A+RYe&b&@=ci!4W=qB3 zoh~Or#nyhqh|Ub%xcH_#ZFjNK3SPX=0I`2qr@#+8-E4D?+BR@vsR zehUiuZyDL=$;kgTo|{8{601isqQzZFMJu_0NNI}LbN%eE(?2fqpQS*%|5N1i3H~#> zNB)!M6!w|(MytVd4!B9HN}s*zCJX^li*mL+_BqT5?Kb^64$3lL>KVl9(*tpHe`)6` zZmTUVUSEF-D`lW4!4ZdVXtT~?&BrBfBG#wB&TCJnYOa3VRi{ITU442YHLT_1Mb9u>w@;rg87DGUg8+8{R%_tDju+POj3dq-C_4!Bo`CH0gZf-1Kd z^wZG$rw*Xrq4#fsaP(Z&{cli_`ZN!E~h&ybnwWy}(O=oUuGGB;7J?gpPzIMweO7CUU6t9Ct zJ4`GsCca_(n#kzb!$gyV@RYS%Iclu&27i9)wd(%?D^hT>2@Xc;*N%0-kTG2>pMpY#Ux?b9A{{v9d3sxJwQd9lOIl$xOOSgfIa@FO_#Wc z9j7`!ezCr8%f}r*#et5Ap0-y;0cCL4N4(sps$cB7rJGsfA|RB>9Ma`Gd*Ufbt13Z^ zt}5Srv8EHyRdFPg*~c}&%d z(h8*EiU>=Es-=>0KUXRS!X=2NkYSJHA7CDfDLiszsFoWPwSC_i9oE%Q@QhD69R?GB#+(B+{zGLy@k<-GN zNl9lD&8p|e4l6#ZT`O&QA1}@Z5A@PZ2c|=7AVrVRX~wDLL*|(=%YeTG6H>R+(JhID zYy@#MI^8yFe2uX%De!aHG`xbxUZ$Z0&WI67&QH6-XjLoiP@)136YK*VM*mrzv`0Yoe4*xbz~|xF}L5@g#0Rp9_1v)@k$c zMRy^*PP(f0Co5GB5gjY_%C?p$rY-Zph-R3~{6akND;-X+ZlxzU3S&*Dx!xl`I8Wt- zMJ`(a_WnKibjUtdPWObmK!dZq0drl61!`D&s3j%bqHx~4^3a*JhEbVvwTn0~iBdkm z$!6v779RBfJ4UfNiOP4@n=mrrF(|ih`X0^MM&NyGrLe7PmnhkJ)3)D9o9~)g0=2tw z-L`f?XL){Msv%Xrv0*(rt&@OGTcuko@K3FgZr^ucTjO? zdC7J5Ghc5>$KwTpQFOo;$T!t2Su`59(F}^$;ub%?_lFLALFk9Z)$$JIULmpf)}-i?Y2>YYtBHWWHNd=NhU>$7vT~~A>^!~r3Y7G#}L11J&w%gd-4-S^gFJX0t28U!;+hDHqv>b*3%djW3;z`XZ zsF1eZ%00C&e+@-fWIh>N)sW#5Jo`f>ZnQ?akukbraZh~R5~2dOyk z`x_Y)Y1ZO^YJEM%bC!KoW!W>>9>%r|^3%Ds^CGR6fvTfWrSA^~y10hR`>baVq2^nl z0y@_WnryB<#}OJxi972F(3t*NdZ;5+usU>XL4#!#v&N{FmaoGn9hIPT@6ef+F5jZ^ zFRx+#`a?T@fq2%;`zh*_?&tKx2Mb?XN_Tk&f5`*m^}XkfNo||v7(^$tP7iDNz z&8Gnx?qPZ73$y?<&W+O2W`V9i#QIi3GR8pJ%eQK0Gr0y3==Msly#+?f;E;*t<62?B ztE+Rpf>JhJTB^t2M}USWts35=&&h(xkJ6=i#ma(DHP4_ULw|?Ag43%X3J>d`yI*W9 zC=rPanx+*Bhms*`RPT?V7qnHSM$C0aP*h@nupV}pa`ew>Wyc!@{ps*k%dQ6~6z&_V z!nG5G0@zO=Y`RuP>tPJ6>2y^2YAE~bZvv{go5m)88b8}4TzqT3A8k8(ZKp!luP@YQBR-BH1o9F-t=rD3Xf*v%iF(WD@i3PFw%BQh z=8hwQa9#CSZ`Xx@Az)o3jzk3$FBa7drev#Ds< z`+?i|vs(we>G-{7?1aH=_p>fJ>Z_U4^!2Dbju6Z@8tKeAxbty9yCbmCVDmO_PDoEQ z8$G!h^vzI|E8j{Q)qz$X@88!`-D`jE%Ph#GUKXV`TK$AalOsokt6#A!DxHyPqNU^G z*Qx7#l>P>d{L>yiiRrMR{I^0V!Pz;_j~LJ<^x6-+9X&tw`)1Wz>gQKcVa)Ypt35U(rX-nR*>^& zjT{(L>9A~o0$tzU{HH9J3 z|Ea}J7abHC+hl9i`81U4=R3T2jQ6L=xB%nW!_H@mVELBjr#g zRaT{r&umpN6A(+Q58b*Tj2^F-=8Cj`Tim8<%buE|j3)XiE<5O0Y1;>Ux zedqtjZxcnM27~j2JK8Q+3k4l5SupF@inl1$)sgX^%RW0|&2ie+Urv)#N7x4?b!OdA zE9v-Qr|ZhleT{jhV&~%gbRGAJ4!V;&hxyH@ot%Q~<*++jlM1h({4l`V?r6{`I6M^j z0T)@i!Obkmu^!mAZIJxrjSFIyEjY_bIZ0?{0n{2FOnh%?`BQ@`Vdj_nheT*(!@+cN z!TM;6H~S1)ZUEC}b_*^W|KH;J>A4ap=%mwdp`wPV_|R2E*v0^p*JY zCWoOy5yINgUDHu!U}?+FW>I}DtgRwxjzV?_f$CsH(#;=$ZEDj)CoO1Q^KZ~#@i97J z@q0v^d)HMxjl+MN==&<igIBUY1*%{^0!K`?2TQ!>HM#B9SI`p0hHme1Cf` z#J5e$^_}CiJ4J^Ra-{1F#A4TysX@!n?oT(-G&j}MT3EG-8YsrHi-*%DS7Lc?-^VRv zb38jfkbT69Md@_IgGk1qhbD{EHk33D?O75ca&=Ddn~3+@EMqy!p&&V3G_MGmD8S6| zM2cEOXPiRP-kxZG*~yfwqH;SftKR6(3WgY5n1lmW^9RZ}JkuPO*No88QFgNP{htm@ zuKb`~B7cZ_4JDkQ;4topWk6|izXPQWwaK31UJ((n8|OsMK@^XK>O`7}u-fjdW#WG1 zREEWXurcNd2E4hH^H_gWm$5*KWH~sj5J$IlRLLr{sj!GykF)vBfi9VKRSAPoVWm8l z0cV7XsQ$QXk+^%{o;Y@(wkAwj=rDU=CUr8wk6=4h+|DzPXz@tgw@>+@0n9q<$aqgG`U z^o~Vstppak)h0FDm#C+@dS3@!gpvZD+^3G0^JsP+T*%twu}-Y2sg!hkh2F{gC7tKm3>WRy@@ck2 z!O4TtB1n16!U*9QWkZ4RTy~}E^^ZD#c1Jg=z~{i)QB&C(YMm)H4r|*7yc1GCt3Hl`YMW# zorO~n3IVE(>FE@&1D0t#5{eA~*!1%bne@8k%QhWJJQT=i?0{c{AESY>Shds+@W zPH?yaGYM)*p{S?*1oDgz%&=%f4wf~P7#=cL0m2&l8&R`$Am+wgryEp>eW)#t{aS-F z=(x#2Yq^I!;S^K!uY1RTzL2BNR}0Rh?YUV9sC|9zQRzNZIje*$Hbkm z2jB1}*Pg`l(9Kb=OgErsLos}>EnS|Sd>XtRnM`)A>*F*DZ1~5q?bBnJ?;Zt}-XdTy z|LxwkhSlah6KN`T_hzILDrD?>RX`6$Z*soELxJ1@3|jTLfBc~C+20@9Z5eqHduw9! z+X!Z9yS+)c_wVWgKOEz+zdLH78s4Bkj{H}Y0eU>p+?vWf%f#9>CCjP-l~>L8L#Fx` z8p%IG9^?FQ=@=KaoF%cbyZy_w0sUCs;dp@zUy}%~C&$@$n!$q6_mZUXX|!_jO3 zwwoTHt6LNsIXwFcU7Hh$^aX=v=mM8NSRX8(97GVpNA8!K`+W*IWvRZmJPo1N#tvn) zL)JA4I+X?`fj|j;)S<2$BIh$41um_ z?i$JST!cTE8hKI~uojsmWXohw=`4((8hL(jgQ$i>)u@8;Ch6lua%t;Ct41D2_ov_3 z0Nd_e-T|-`rQ7+@^I)cu`FBsl{Ils=@1*s{FO9Z|?xir2y5M2e%72a8tEv})IY zz^|38D0xB8g;n^lJUrjnU< z?Ku*iK|mguOfx3L)*zJxku2)m>NQAp-H~8ylP1?JDjwIaGo46m*Q{4T->=uge>%t& z=pWc2SD#m_$_m7SuttjbzIw)UidJxnv=@ z@-zrg))JBCHyO>S-l1lE$Sy2e3tz9Z6Lli}J#fO=iqXaurTPsZgh5;*Mr^wK{~~l! zdEsY}NofgO1~E`83DQ8uWTyw6=V#=Bu#sbx?#pqqv|dZCSWtJ01~?|jZQ=4ZLa;qa z-9;uflAEYQ*wW}gendloOR@80up`27j44`S=IddINiIaErmWlE;-Ar3n0)#%J*xOb zCN3m`YYOiKucB5zKa&`aXZ7Ee;nIYGCAR5~k~ULo6F5#(UK@1S^4G+cSoAoVA(W0( zX@YXip&6`!&|8WL=H%^>^$g`Z7sdh!7W7d$lC;EDR5pG9l<6m$#E|$HsQu?dP^6%v z_$}`$a=(0_#yFAdr4oQS9u|*v&%bQ%nPieETJlIla6?CFE3jlp63VU+MT+0p=Hl?;vK-1UCkHo& zyX+!J6mDMN<3gf3^l$Wd10O*F(NSYY?*gPIa&m}M2(t}K3?hX?NlGYdeJxp|T|9Ci zNpiF^r2|7Q=S4u215V@ifsR%(4!&oinMe+Qywc|`qoDQ1SGDwdZ@gC{6WSx?d1i zfhSy^{@Ro<`>sa6BPQ0JSY1tjxwvI}`z}4}ro57R>L@}`h_(Jj)rb+*t>&L!+%mQp z1mZD#HC0}hoF@=|Xq= zJ4%F0-0A@%gGi8jMr->&Lv|w5uU%;F;-G@w{NmCK+HKFKN!+RUuP-g-wQ+5Z#aN6O z_!BfP2#HLv4b~>miOnjOM(P$N>-}QMjb6^r74}NX^RS#d&v2YU- zuBNjVLP`wz#I?v}VNlW(kaJjD?m?)VCoz` z6>iO$Ys&#{7DQW#(~3p@Uc>v4gMRX4Ib(M3S9yp|2Rbws8kg9BPf8RCx4eKv7`{n& zx4hINX(+k#?fw7IC?8DQ|D{p9zw`MP^Ir8fEl=QbUoNpf;h;?A*_88EKY^>?djY%G zNlwOj6$;a!oIfa}GvhKB-#Xjt`WvQhZ;X|XRUO7}WIP^DDdUU5E&^zU{%a?W(ci4w zpR5$PyUTzV11tE#QmIIbPYCL>D;}PW&FgZIQuWA#pZqykC&wn@vc{Sh7r}FhMb-|7 z@l$h(=ea_ZhpWgc>{sw|A|uo&yt>>ofr8~!8p$;lEN5ntisAgatacgC3<4?(CQy@> z&ED7Q*9^;>C2UlB3y^{4BV{-@x^G0Xjv%H4gi%0*CVeNj`+W%|EzM+)X~Wwps)8a` z-lZgDr;hrSK+0e3bk?}Ry?dK_UVd9+pT(9EYO46i(5ymQxX%_S+ zh%m`fSk;V2aRU}CjAUe0ycdIk0g%sMYFh~(H#-LWxBA!*05)b=oISPAX^M+?0nV`& z8vq{d9I`4H1T_VJA(j;1_ztafG=Yal%B18=tTmKqk1J5B zZ03Yq+h~wy4HWQS5kl_>fixZoLyIstDfVc28k0jEmt)RCf<3&?)dQW8$?th8KA?> zVZqUoA0G|SK#Nn-x^)drnc32IxX)uSBrwI@|pip)Uu7+|EsmWUyVO@hZDb( z3HaXHFyZ+z!RBS)+Fq4r0>=W(nQdn&)J5c@O1N(l1vIjD_!HV8tS6f0SmCfaM zVVxIio1sG_j`8?q%C(SQ6fStplv8&1r}9eO2AoPv${bQY$xgdPKuWTheaxiCkRr2_ zY?;uA@`@$~%HWec!@hK(80SVP2rj+5YW->^N zs!9#&@y2#01h^R0AC^|#@552fm=oFj%@ed`ewV4%CIc-pfS_(4UWvppwhLX_Bj0lr zZ>-9WwY1&C29wyQzX6;@;rj^Jq|Lq-!=|!a4Iu~cyQnwN62{6rV~sU%W~|w$=?^3* zUabb6+J0#F-WN{G1QK@@!=!t#5nrwX`kEel)ZCY7iG0l8?JP31 zh&j074YHK^m_0DAOl@Q;;tf{(y9TG>Z!@m}`NTOTqqMve*>ekh^YFa)Lrvf+v1q6w z?+wgIO(RW{91}f0xTSo<5JOOx-K=GD^&eJM^EU+k`;7Y79{Y9HcV9hsn*tXi?`pO* zvn?(4t%-*gSUifPVz^ZgLXM!*8JJAz?y}sEx?5+2uAZfkVTzdglRb40QUo(oE0ZLR zv6WYjJW!f(lgl98EsA!_h1d)yNj&ms$D+|DA*3UGcz07=f<7(M4~IbA022qPi=C@3 z0}!PBky=L$Trds=dh|U_hFF-L{_#yfK0)mB|5N+L!Bd0AY$4(!VUFNg<^G1^AAd z8(iy+as&}8?O5xiQ<;WUJ@!BI3Mv1qOU!0=;&UT_o|ZMF9gXwdgua8VnP-=7U3o%8 z|MrC`48A&@TPGF`oaztKcY^lpEHJ##aQ%O8S^5*=dfxasPF-v{~ zrA-&Nd-Y8Nbg}pNw++W~xOAKHmg1y0bIAD*=#+~shY36zz8WqyoYY8%Bg-YPXuM zCe6IOsl|cZFK0$_D5T;vTnigSFt8DIMma)nO`B+JVBa-8Lmhp7sIU?&&A#PA*NoMJ z$2EMo=fV!%1g*&_&HE?S2+=@Rq*G#TZkrjab0O*MGiq@i*!o_eN6RiDYIywL5P_N2 zb(d2QV`fD;J8tV1`vh)0Y4eR%ajbLsGxMJznUtIMtq0>oYK} zo7?x1a`hU?r-N4jD{gKVRu43Ubz3)SOkOnVhMEngVaM=tVK{BbK2;(w66+^C7==$I z5ugGvL`wVMF3+M?>UN^ro_i3JjxI~8iJCEiKI{ed8LAx)l_LZN)QI?Rn3V*J&Zh93 zXZ%q#-X;?MWVDHiPeYA2XQoW?TFQ;?Am9U5dC>pDflz%|4D5y%m%#Dv*eC0aOxGDkFs0 zd@sH&*1>=}Htm!2=$x0KmmWD zcb-wux?ltF*_kYrU;D1=03=E_Q!0jn-9vzQ_)~PSHw~V&ID<-sEfAz1aI5@!bEomC z=hxEL<5u_kFJU6w6udG93-k>^CZ<-=_&=Kj2ui%M-bzcm4Rr;6nWm z{uznzS?wtn?Rr?kDAI}&qze~8PagI=KLKOdOHwTN&KKB2Y@J}Hb%)BHVGB8RFUtjw zsP0s~vg)(rhfvifwxprQ(i+_$0TT1vC~Q|`L~6O)&q8(k7OUz9VAK%`L}6)kBLdv1!?nNdW2#*;G=l;At^((|%R4VW_ko5` z;`^$}kHcrwM^J%nTmt8ns}5#AI#=y(b>!J7F`iESj2N9+);>~Md=Uq1SH2ip9-`VI z(@}&eTju#+J11bnI6>tb@tF3*G_TCh+e^#%PxA-8&)yxZu#gC1B#4*mrqMtq;Mw*N zg87y>WOElRaUlaQA0uHzee9G;J_9iVxss&7ZCbz=bh&Qrdv30rMun#_MR$kFuJs z+JkFOxbXkc`dy{}2TSjpsQ|LzESgljFGcv{v&SbNj45)k{9+s6H2i1pn2S)P0*OX1 zA{2n@s&JFDa{#kqcD~%Z3nJK?!svm21n8tQ8jG1mct6EA(mYbj@>orT;hEciSD;!s z{{@{&p#;tKu&bMKj}v9rXM|l_bhAeeg3(4bp5N>g|7=O#V-PgSInJyL*3S)shHHy^ zk+4}cG}QGzfUN~g0?f|m*^7=^zlG(N!XGd+*lEg+Mf|Di&;})bRvSZ0Sx>Z}vuGX0 zg^DySI~=o>a$d=yosx7+Z`~moin2#Tq{TbzlTR}HBr0X`i>pi~o{g1wB)|9Y${j}g zdw3ja9$uZ0r2TkNQ%lGAgb`#YycM9^ldtB+J)9v;6p0S3qKBF9;qUAg8^W;BKcH_0 z=sg(h;-}*knIu9FI0rrE^Y?0-y_w1NJV|cI)P@Z)eJWN={QaZEW9_W3wRPYV&-YSa zYKa-lo%g`X{wL%hksTvNhN~C z&cmtGq%u5#esLmNM$uM(A>NwX?eYK8Kr9!4MdsaXz_6l&gpgn=aN=JNnNj#j26yz0DXYztkmBwu!o)0=wF$j!7Jk8I4m0#~q z5E)ssv7Z@=UqNUlb+BxiCu`Rezh6D%ZT=HNT`m9bA=W_Vc1CdqTL2&Z4=N}qYvPN;h4Y#AoQkcn;3aouy6 zhB625{ZcbYR`u4=rVPcyP9lLI0>}=7xPw)WNfw}DIWQ0%vF2l7DZkpc?vb9y{^<|= zSyr0J=yG!J5M@IpHz~-l8kBD*tJ&vE3)3;`GHyh|P7OmEf~B^b-K+5<6yXzS@aUN0`pGVc(s({G5n0G8Fnrq*DQ0e0|w>#>c( z?}+d*E$Wz&PyjGq5q{)gxkdVj#Aa#%e`+1Wwb1LjC< z#J&I(<-NJqL^Y6Gc{k}hEC|wKfSgKyJGqE|MIlME=uI2Mol9GjzOvhmt!B`)P!iK} z(Qn++P)`SA0wG_5Xenh4IC2{ z-uM0Ugh&wQ_NK7Aw<%j#eV4+%%HDp{&i5 zUO{Fy+sibb$;S7V&w*g%b+Wj03S@UsTs#65au}w~wx|p=J;kKH_qu!$v9|Y|{=^#? zwF3Bdme zDL-Q#T`Nj0Kp51L4Ap`|kT)@E^sw_-IJ+j`c>Wi8NqaLm{;uaT^pdncP)>+$R zWyLND%67AC_%5Qzm$=HIG|C6LB#>Eb;Vr8-O_1;HNW;7FJW6uWYLnV;|Edl~qMyC%lrqc9c;^u7P zxF83YNjvw4QGyW(S3qD+1pLZipr!kQq|RxzgIL@IZ6Vo19hO;0;RC22lIP28+y zO1F(NHDtm{W4W=BcxtJqylw=WtNWh19T!fxMgO}o(rDH@Ard3udx?{M+Lx~v7A>=D zQXK=PlWIm}A-_KEa6qZ=JLUTkC89);>o42>iFj@5ih}0%R}a45WcN?{M8f5h?JWa@$dX`TpqQg1lTTP4uSLMJso*=RgVEUxGA zXD)=ReEd*T==CG=;i=^fopFkESt0snJ3}NuPd4{)#`$rl5TWS5k!Y9J|0}KqX0Swx z>}6@}X2+I!4`VK=x^G+SkxHENo(9)V4>!OTf`Yw$Ly?+#^DqI7Q82cj8GtaH)4@IP zRmBHM5xR&D!VRgU<(k9T{e6d+y29w?_vV^*oJg%1T3PrCbPb+=7WR40AL6qFa0h>% zNa**}e(=G=pB_zeaO&TqN_ADlBbmx_)1~N(ZI1A!}N(lZ=BmY^F+9g9O3C$VooWCu(vWt|LJ+eRZ&0nGC6QIo%6e}K#bxvYZ zwxu;Y4|#wwUb)g9A4_0PV69Ecj^f`=+6-|36BwP8VOHLb8FHjafi}r`8dq>9*I$O#) zsWQ~MLY>2M*GN)O9kAiiWqy5t!0V0K5ixU?!DEGs#TF$LrU7w6b}}{W_I8Hgols?c zTd|9kBP)ToShidAW8pL`*p7GSrE*|SV}zhYzXZ)qd(U&-J<@j1dG*miK&y&pPE$3k zdzePgkKr@xGj66IPThlNL(6lRNxBG=et@KT0sP>;X7GFp8`XsQui;= zsu9Lj*Q3v?i(!#K%`Qe!--r+8C*hMEeoFFhMz4dGMa&Vkz99RGg;Z9M#=|pO!)tJM zGW#kMaQP8s@78>-%=tg&=CJ>4Qy)~y(XP(rlfTZUE7V)?kCgU(1QssnD);ADDr~j# zS@lhKVuxJ%108FID9k$xDxQcD%%sYe&qeWQn95sG^C_h}LtblJYUGhH9uy#Y^0ADR zTdonFwQ;JkS3xjNn+(_Vge4<)FvUd#k%U^zFd$3wNQR&)HN%iNxC~kK{2e~t=?F3g zQD@(!?o;f&vn;ZzpR3hGw6`%nM)9(pk>0OA7_L%5n;W7uTd)pP1hcjje<>rSBX;lT z41wSg><*l6)L5sqHh%gT6z`FuE>t^A*=RGhvaEw^0uVtWdQkkwnwRq*9JhVFiSf z%L_H0Cz`#<<Vs*MfS7#>wNcmJvLyIOwq|IA~h3WWTO8-k*H;7j@5HLk=Eo3l8j-{09B-&Gsl(` zi~0?$y=jK~b-!%1x-j+t@ouNsjYRRI;?b9e?1-a6eS4nNq_?6C_6GjMvCgbRoirWq zI=A=4l~qQ(eO}d)CCy3j0HlW;1Hwcg!Auah?{stVgfT|f(`^U$fudd+T*A) zjOQkmMJPCRLb9ya6DwOcKp!4kHP>F!YXa8*Uvm{wpd6A;cGY~oFXoCsh=eM7{O}iJ z?#t4~mfs#jk)Yf-tb)*Hu_TT=(w^9`)cdMSyWTCnG$IAlKVF5bWYiD$AaIW`<-_l3q4Gg16sVNT%Rs7-@NEph>!(7|=j+bY(Y* z)-t( zsD_e)-OxAYUH$9q)ttEp7B5X8hHx3sgmy=CoMKge- z_D^aBC!9DNHA;pA?=fj^j7sLSXPP9=zaHHM;WH6*Qiw|V zH;$JYLW?l)8h;$W%8j5u%fxVLB5xjtpID`i{Nl2LdSG4JBS0q1HmMzOQAW^%f?H%qgU`ztU< zpsgS2sGM;t@2Mjcu(|TOkh!}-Krw!!dPD2e&!!9pvkXi}t}>N;QCq&diLYWz%iV$g z+S=CW)|HgVJxn(1ix#gR<&Jxw=H2Fd9m!16X?wGu!5r*49d`!bb5)@kLz^baK1JQ& z0x;&8Ix7ZcT&>W9NuWJ+9IbajD1d3$H+B-;eoK*wZWm+D>iCMA#g&pYds{&Wot+7} zpzLE`t@rEAx5HE5cJt8@{#QoPsamHJH~YubszRQ|qwrz4tczA^M~>~*wCq*uN=!jw zMa1>hySXdD&-9}wYfZo|6ywrMA%G9CzhP0=7B?2Vs9~+h?*vV0$Rx~tO+Xa zbd}-6r7@@oStx)0JQKXm!1?7`hD^`%aREtt4vvy6^nhL&2NKPQa}KZjTu_H!8bOzf zTZjbPdTl`f&u71#TPGc=o{+BZr8Rkm8DO9*_wQsz$bt16wP<(sy+Lc zvcY@4`tW&IWVq!VhT?(L;oH0RBAM-Hj5^9t7$Y^;vr3fA$$|-?ZCduh9H_QEnA@Lh z(lGR5_;6xL=+xRxIs31FEXMnuU@t+O3u_D=Hb!Dse#kXYQj+1g-z)*S^Da(})G@Af zfAyk&G_DO+`a02M3W$koF}o4yl+z3fFec=~!RW!p9O!GcG;DIImSa70kx&QdQ(mM9 zqVSD`Qdx!L6>%nT^g04lm3p8p?gh=zS> z8K7iK4AedGf38?sMFlhC=hZ2N$nPlsnxfvB=4@^KE9+D>W6g zHB>p7$CGrzh;6{(hmobF>i@t4_>&?2VMS@G(f5Z6J&0ae_MtFXr6=ea#eWsmceM=` zzOfs<=7^AJ*?!wDKc>H$cQJhFXHYXJh`N$XIE?gdlr5MwVnTe_R>jY>dW++)AQ%wc zZ<+fBCC?wl6d;P8S-12R#yXC7iHfH8@1=U?2u~sqBZJ=N=RH2`+W4E~g%YE~QFa~y z&^npo8L5UPMK@`b5c$r}5vv7%GpdSYC7088590)aGU304u0c=Z_YPT&71Y!d7bl1> z=#L~zSrby}>!QR# zRD=RRoG3>=QXF7>3+wi@kyX~flEIVPe>Sg&j1>jaf_tY`KWWOE_4S*xy&_kZ z!1GDQC$TF~J&i@YQA>``4%d@Y2qZhk9%KW7EcfKcQ3V%gP^VayY^A`}!6#)r-KqFBkr3jp+k}JIPy6=5%Qupi@KPGTT z9V2ik#J=x*N-1Dfvd1RUvQ+*QD5HFCT6Pcach7H79GXAZ2qEG?O=5amFj^x9?{s-S zk{;IV`Qtfoc99!Ldy_yAkUHj7U9F(ENL`SUU}jjDfRTEbhq+H#H&pZ-`-o;=$bCbyLCF8VYIS;QY$e>i9{d)o zUg#zJJ7iHZKIhn++dwQJrHzB?)bA~kSmZsF0E?h2H*5l9^*+O-SuMshYi#B8C$aVE z6dK+%7X;;9SjM35eIRLZ=De=r5^Wb z&Y35iZKfq8UI7rqu1dvS01@8#v3w<(ks0>-G?qEtsG~7{Kh!C-)-K)i!<0H{`9bVo z3Ffy%HnvQqz_PT zU@VsAEN>bkHraetq@c+k56~m%R(LGK1V}a=1+>V*VzNaAF_FElXgzRs%fy2Z^ti4c z0nS$^BkX)6OsunL`y23}5r`Skr-*1nu>Btayq;#T7NdaXfHS2~zW@T%N)EQvAyb+! zSY?SFk^@LqzsWTHIL5^~(bAeztF|x*6~xKT(2iAD(U5h*cx^%4x zxo-{%7#XWfvWcLmrNw*Uhw0|5SZ!VJ+~tN{a6LesREpUyYT3CbS*x31c2*hejMWqA zjLv^PG@RrAFl)HT{d4_duL)Bq^1OoG2$PiZn>Jrfcjaes2>EUnvv5KMP(d+KW$1Rq zzZ4pehdtI;q3gZ{k>`rS+WML|ez2>Yf02>+eBS#GWB0=UP~OF|4{i4!HJg{$!leav zH!r3eTWan!LkVmBUPVc`KYqdm;suS*kEF}X7jKw0pSl{Yy59bZ)SVwh?o>c1B>Azt zhZYDeg$yb-1`H~YqBM7x;D4E)nC`JS`-6j^bf{?eNpqW;*4l>A9G>Y*aOR1NyM;G< zgG*2^%hm4@8M|4 z_hQ0@1@f*%?(uRde^>}s&7bSIxk1R+j1$Q@qlu|+p94P!V$3BQzNo%mul)lG!#@m) zibz;g+9O@59iCAghgSZx@-E+r5JW2}^oPZ>xeRy`* z2W}5r@=+#^W{|s|OV`z_%1xrQuQJ}oh(zC;M35Yn|X zB$^$;fn-~P3nZ%-@XK?7n-J$vC2cMZ*@gNO#_#2BE)`aGJu^1nHXm*jF<#i0?YRY| zsYJs{#i}hUEc3$#D<+B`Sh9EzD0ZdIoa?$de|C65?7=vI9Zt!EAg=~;h3Y0Jn{o^V z`GSxq@}l89mMD&F>{>d#QKo-^k~t_=Lg-y)W#zpBuBJa!oLe=hpq@DIbIelGIVNQd_RPH zLu{|d(H1m;9Mh4T=_4nia*n80rvgB+)CY50U-5fM)7%tHVI6qe z74e*1FK8U}z2}9(^Vd`sNug(Z!{8$3ijj+FqHl`(PWEKA#}G&%Wi5k;!_IwB+tRqf zpC!gVP^;}SZdX#GNiIF`W&*o1XUr{v=L9RANhR$46W+83VkW$PaOL3kl%wk(4R2=Y zm|$a=^ENQ)q(5Ff=NPgA$J+Fgc(D@)CNfz;zH;94|ii=I?c66Q1_PnjsyHI|SBf3qywo z(}7h?zXef7e^iz-M$j+xA}H-xiyk7U(ccDr&28@A-63|@+=nnk9cuNG43p;*A$WiQ z3`J&q34}`PdqM%fb0ZAcfn_#cgYL%3D;*v1;N847nK|L;-~Vyb24Md;=jcrN_jhMa z*zbb)dH+KcoG3jSYqj>ueGBpr!Dm==tCKJB($_3fTRd0h#%_AvNn6kpNxt2B2;~KV z;`Tesj5SaHliH$DL;h`@1S4Kza`NId=^|HFxF|7N~=TR%|XRqVyM47=7!!2p6nL;}<0@!meR3)J7=yl4k7RsY+-@a?O&EKya7FouW16Lgixjy!Q|G-kZ?f zXxxt=QO^5ix!-7%C=WqgfRdx@iYACJ5MxM9x_clJvm%@Cfi@m@r!!GtlyyW5D$@so z9TAkJZXJGY`ZIDkKZ70SD>`C`Ki`?DB9b@;bsjPIZN@>_5VV>R{-4x-;kNEiWy&Cu zjV;?Kw^%do#~8Od#o_9caL%<|DT zyw(XO*5HL|54-s#^xYoeO$L$@f)$1%SCk+S^Gssu5aO9ID0z=ZG?bldi{?gPKuQjCH`BUfNW2fR3J@o6=VS9G}W}! z^MRa!bN4{Z_9Mp@@bCU0`gL!m#O+rv@acknP$<-N+w@?o8d8X+y+=rvIACi>~1hXJpvgAJ`O-1CcN^cKG5E%oUO!1ayc3UC4dPu-8zy!+w0Yfi#`@4nkt zE`HaMODJnERRK?{n!;XF*Eceo|16aLh0R$4m+$zX%-K(MT0eda%)1rIl@SbX*c908 zM)|Y1_`QCm>E_aUQ24bxg_t#Ucy}cO9351$%l}%zKf{tP9Pzv?qaW`x^)V)!MuLPT zCrosNk0Iy*vO3N8^~gS13qC&flaEp_JeUIagS7G*nTCQc@o}Yj{GzH9N)gr~o!H(o zSeae-e5c_a9bH(6$Oq6BYa_u+B*!nWsB3O+-7ULdKxUTyNRBNlHcJw7Dt$VJA<~gw z3v=SmuKQuFaCAPqB{dCvo?v|G?087}wq#L}k~t2%HlP_Yh3Ke3CSv4WE22-AuAk>Y zS^fH%h-|HDa}C*laBjK}Q^=|~jNAV(a|t;i*{{ysn-%Ns)mW=+S78#tDW??X4dq0c z|8v%t)Uo;_$eE=%E?t&`!vjY`@la((-SPU+8AM}8cw|InrO~tj{M!<@)|!Yk^S3y` zznTLCg3ub4#W{YA)GyidfKSPvd|T!>KN7;EM;dNiy{VjuGSMHXjTADD&T*l$U`3f| z<%MLu6SRpPsw;(w8Ue3GGjjdPmCX@TXeYrOa*aYvxGe^(iZ41^{Dx1vA&+*MJ*U?t z-Yt}4eykD>COdFFG)09{P+PMdt``&}5KbTd*Me%6JQOmDi#oj;_fzA{HS=J>w?E2m zf)Jb{&ku#hZv)=kf;g8`I^(#ub>|7lCd~qI7Y4n;eU?WriAC~I@aP61(0wTMyMqG# z|AuP>&grrDb$2mp=i8Lg6So9EBz1F2&7{8T=Im6Ykk?)h=OT-s^Me4$;YVzn*(fl~ zA3U~u7Kx1ZmkWD@ z@i!|wmtpLEWuRGk%er4&1^nLX@Bj>4;LH()w@>Z0HX1tT%-A#mtjs+$$ zt1<*XF+48?v2-IG3*TGo`;BpX+d{Xzt&NSh3YkJAJ=X}#T&w8j;lEYsuwNXHXF3`0 z^-;>MZS8G$^VcJS@Jc?Pr`E3a!Tfx}wBE!7o_@RwmWMW0)}93;K^g!A3Q)_3kxm<{ zjWRsxZZuBiQK>Vy^|X7%n6dnJOanqG4GW{eUw~n}8E7KDrS|SupqWzOE_ui?OK{^O z;i|7SlMTb*v@!M%seyMbY&t$3D^Drim^f6pPek9PW5Wd{4(Nyq16-s@!&@A74m>Q2 zjPi`Q3ZwH}Zy+xz2bns?7k7{i-hI~%G$qB#AQDDlVO`0#J7bXLU`J!7H10G-EjfsN z;7Oe3yPvHV{dT!l;Ut*D5ziA2_lIb+_VSo&8uNV0ow4Ad`8iQ?THl3nD;0U-(fYmc zw02MPGNvo5oT~K+z`16vyuoU+blTFK!m3U=t1T_Po*{&9!0yS&`ji)38HR2Z7$#S0 z%cgt%_pl1I87pNTpD?HA<24tuiQ>C+0wqj{iI!)|6(apIPJ|s^rjy3}c^Ep|__%}TRoTi|No<8z=bx<35;-9ZEGZ1W7;$7RVq4Mjez< zEI>7c?Dihw*H@7Fjz_O)T3SN=3gVK#2pyhdUWo3-QDh3r?ea8cS++7Xk?agH`XdnS zEb4F&pzVO8gz=-`w>ugUnZ^@7g7Fg)U{OuIz*V{{Z#+)LL*7j|8n5q#-ID4mfXwlw znetS^z4qxT14P%+epxPOX}F$817<#VzeTaOJ?bmwVIwZ}I{$B8ezNet)(ykXzDc#u zy5F9-ksiBlFkq9H6o>NO7zvst^WI9oNF361W$Ol2?jDu??j6@Wv@tTU1Ym{<>AL?2 z`Q0Ios%rn6r}-{zT+Ul_UDU$T&syRHwQy{uuWP&CT+z`hmHV@Reg4?Ng4ie|j&YLF zEdWWybQg^zj-HLZ!^=6Qu*10EwyoIR1i3N;euGSd%tOFSX=Iq@ft`x{GXhSa87Bl+ ztV0$H;a|rpmWFjNXRPfyd|-koo$Wpb>PYU~c3UY$8=uQOK~eUww^!RrnJ~#W`1Ek= zn$X(^%cpjz#-1|^{hwez;dk{?ofsHDtzV5N_J-@)K9zIXqLy) zLtN+ntGdMI9Bf~QLSIguoDRfN8D{udDdFdrx35=b>WM^&V^ULyuz?IN4p)Ty_?@O# z-&cBhVJ}oX95J1cpY;>^5D=guw-F2hqP1FFdYpPPA&*mkbOYKc>m^LvlZ8xwQ}fio zUB1>*bdgS0(U1?M5z*lQ;^^DVAe}dG{>xTvRf~I)Vjcs-L}O+hNJKQug_#w}A3cQ} zH_i2I^XGX3Wwna43Gh-1qW@`a`8K+@)B;C?^yjbC_6B<(NA&&*$|~a-A;K4qTn#gU zN}`RAWUx1GC1f-wr(JU+xBri&v+!%e|K9dCknWJ~QPR>KN|zu~BHi5$Bcx+=3lf4z zgLF3tqq||0^k}3WKHuN-H*D|McFwu(>sItqV*9wjg!8&jg!%^O!vXl*r^f(Hz5HnS z-?ooNDNBj4)%RM<&9p;z@s5lgTRp<|hB+t^A!b@TnmvblBQnQ20m-&>V*`QtwzaCbX|Oxba(^A@=-K! zenHtNlr_`kOep=XZ>gYXRHL3Gp(UfcXQR>Ni!W}64t5l(z=rVR>}9xNN$`K)ys)yFv- zOAP_~VYwOlyPkcpF@O7QwtnYIWxaJ21(zlsjy6Ns^by@Yn2{+hGS=zaV~=NV1K{^o z#=2O5r7Cv9!tyMM(SmKeaZ^q;QC;jIu-F+<4%ktOV9=Qa6r9%+791Kgu zRS9rI%hHMGADNwQy;0~t9Ch_HPHdN-x1h(7vEUKpY6XI@(_T2P!_9>xxjDPzM27w# zY>6YYkG1=S{y>b5&^+%pilBUKZvwn?eA++NZS`SFi{3|UI+Z|(FV=pgrJ9rPYL#Pe zGY@;(9oF#=Y`=;sD;D8Pg^Cr`n_0Wk zchfMDY^Wl+eg9=Ya3`GA%V#r$(PCQo$*01-&MA9j|JPj)Pf%*_FApD2x;m`|CXOyS zCCYl`tQPII@PtSRVK%2a|CZ!S=J2x=Jy;}yLkcaBk<;XW+$jOru0U(cMCC_yiUtmO$;GwvetB?mc+`u0uV(M%!$HgZC+R>~uAw5<$*)~7 zsZPdFuo^FVV-qA*Xl-K7ZSNFczQcz?U5ITwb!Zt=#8d$3Xb-;JJ8vr=FV7)NKB9h` zRL1_A)9M$6U4)*X2xoKyX9SDgF~y*y!cU@ru}CT*?I4jh1~erz)p7qnQY~_p4H$`@ zY44i`c&?L7qlCX2Y1k;XUi$pnX1Wmq4r%ssKuOe{LJ+|vYFSCwugXRT*A^{#VF9Ld zug35om2e2el-D@xP_8OSXQ=jU_HUn~#!_;;=s7hiMhg2YH>F4uT31G9blfgYlW$+d z{R-ToCKXBSf;ED0B6<~{`lgkHH*f9YSe+1Ug9f^_lwYR5)r6|Bd_i{GKiD5u+pHP$ zwiDkHL(Zh?j&GoVg_3PBoGbbq$+tHKMA3c{j@(XJRtW^F9m$p>}2!futWH>?%n#KSnGXGPo+( z60e0LStj0AL#R7091~PNnSP2R<8xVQ4i{m2MLRIgup1|5R6LH8b&wDTXemef_fjR9 z#FN1b;l#Fgct#ju&3B^p(TRq0+<&rdgS`M$V#)fIb^oOjw5l}zZ++jc?{Xp5XZeEC z+)AWhJ`A?c3XZ#*Q8KGi>9BP_4J4BfmCvB1jtLfDi@l78lAos_yp!8nN zPUGDlXq}OkJrw*B(6JSHP4hIGb)1?7AvH~W8Q;t3_`g#45Txh&(=SGhemuQ!2YM&h zqt;?hg-2pLRxqY2XbjxC<4IEhL(mAow+s4%Z3!uim+0rQXasaxMBZZ)?x=ZW(KqBt zrb&tN7;XgIU%wK{B3WtgrGDDvM=+VxQw6cWOo+rfUD>%3s_Dmslcq+^OPWq0m97(X z90nNqZopH51yX5Suo2~5Bl1VxHb!uwBKQjNh^31EHtXQ~qry)1OU+P@abDC9&$RfD z9^TCvlj2X`>KKINK=L7i>MCI(aen*SWYCrxtS(^C#)nr+VbI_V#UOqKspy{gAuo_} z(GTGw4XmSYbmAxtT4X)J`2ZFOVUtb)K09eW)U?n0f<-bO%M!~KSMoJ$C}EbEu7oL= zajl%b*?pYYYN9KR41jz6`Th^7sR^8E@SVA9WP&A0V)U@`fau&=phUVD^#d3iLFx?^ zdVLZ3^2@vRLt=LnfoAW+Fy_b%+Cc_|F$vQh|1shpt=T{&T9nZ<$ux)fJdyR@pNkcJ z%upLdrbj*WHj;{VmT=Cc3yv{V>t-8>^ZQcy#_bD0prE^+tCSJbs&6P=)-4_JE7axK zAu4t(jyufQhsE;qp2Hqutj~21M@ZOt$3{oV_FV%BfZPWU=>G!b?RbS(5$~C!DzI2& z((Iun2(fJ6qh}DotAP;dw{00cL$;LMpVA(Hc3{e6!gHhs59Cp-|m(u#o9d-@GJz z_OzAmHrQNvutT?Y$yA?jg#~repS*U7P%87Ki6}Oq&ubHBpgDgsTDXTT!rFRiluTe* z@)=dT<06;?B5_+kY35kBN_ku$7$vU+!=oeME zd(EE}Ql!ZfQil_|kPm+t;6Jz5RraqJX_eQGFvu`~FP7Jm1{n1K)F2|wI#stMARYA0 zS!9=%d(DS!fhp=NM1dEB&H%7*n;UuU_tuR|U@;11P#8*6yNhMgOJHwdAxHLmOopvr zE>-X)MA5Q8V}sr+$^|an@HGdcI=YygaOUHYKwMLuf>3U?`dO#On@_8{AQ`+2zX{>F+R}7#dLdJ$1nT4TPi{PH9Q9Fh2ASgv`A7q?~`ga%5*qv0A8L+gI=Dqv6@fC z_`3BX!>#MbQa62ryb2`{I_9n^0?R?OyJ44xq`AK>x}Kp7w7j%%T{ipYYb)~VO@as* z5TR8WS}>Q6>yNWZhNSd~Q%PJMi(yxH`m@N$H;dOsWtA0+4))Ckc4IU+N48 z$oEQ{H>?ZEs?XobA2LtmkrxTMq_Rhh>3=)|TI78aqBG z7omq5jbvgu3uCkPOvbO8KL$6drs1Frajz-(FFCr33n=|E9$2AHPZm@~wgJd0WEC!; zG{gx1u$vEb8uX;8bOTGch%ZO+GrW!?g{Vs4MqZ(~%M8>HuP_|A2gaGGrkmT)Gzup1 z+<_E1(HGn2ZN86fqEj74CpX5&Ro##mU4n9S_{Kj=h~4wS z^MO%g=j~3(`qi$#B&J@EtO6Sb?ZEPfh;hj&RZ6xH*tMMClD9s4df8`}UvTm%I~fCR zL$K-6{*CqcqvafppXum|#l#sggQkt;c39W1;!#4o5$hgHx0+OI$_JF@kG3-hC7l-> z&>7s4>%51sPe%SnOj)yPfhgzb5RoJHP#B+)z7OtkKx4B;VaUz<96=Y0C5AHf@{E15 zo=(0z8#k?F(N6C@HQ(q)j9cpZdkV&Xx8RZTajS-8qX@w{Oew;WBB75P2fWH$Ys9?{ z+!I>09~82pPw~JXH&OFK1$8{HZ;@nKE-vbzPxO6WR@yoD9jy@T@HX#Ah&Pg6q(=H( zfje#_-wn=MD{Z2`tH0Z?rH1j`1L2+6$h|NC6t=@VoN9g007#wJv27cP!OVW;#FE?U z=V{Ro%A+u9uJR-;sddd;q!h+Bqy|Q^jC1F&F1bM5J*9Hr=%M{3sIA+>@KjIu;v9(i z9eo{_RXS-UgJVn^L_#VFF_&9A6-A10XX&CfPxAg7*^eJ&K+Q`EM8%Eo))i1KN5jNO zB-?Uhy#2(VC=DNUFfQ+!psl1tSKq8T{N&-xq^N>}NzLveaVEOPHHNA_ z7%^ju9y8wE>FdSK_Lvo+g+cqKR>m|-J?S6fkiK?mkn&}_|cFz@j{;I98ZXqs;Zes2=-3+y(5T=n4y z>d-BT)%!R6c0HEDp2}tU9F1;!WaM@+di}LNY~GnQug<<{?t(ZNZ#bbcSD|A*=~~OF z!vCyNbJ@LZN$#{4f{1}#euos;IC8r0Y&$4aX2-85{mH>6_D>ilTHcvgHalOY zIka24mmv>U+7kZj=kwgmxd&Q&#P`tWl|S;QhooBS5|gKisU8`+Cykti=+Pue?!Mdp zWG=AoHqWD)?{dX_*?wl;Ae%N94^NQRzhk$qydsF4*DfVC2%C?frK3_TNhHM2zSrNT zj+W5X=Zn8Yr_`Lu+hQ|;}<;$e6tN(gr3v7#;V3Xiqba0S+!UrG&~sVp({fvb z$5QS{($$Kl6>$K(KA8u9EfyMRD#IUe>V+f+nqInS`x-Qm&+g9?rqJE?{l4O{|C|qh zKlK_A4?vRT_Cp$ZCdG8%x{y$=&{ooVLz7xLs4S-p;glzk3e_36S-O3w{4&?~fU9Wy z?yb&QT2yVW5ROY>zuYtprAkn+v}kwzzeu+8&|;#2PX>iUN96|p8a z0jhfdp>k3qABC=WFD2S=uxXD)DJ;!SadYLnzY|B4mMk5TuS(9U=e{}7k=gEF4f)~3 zx50fGZ!b981iRu!YW3srjowF%pM^rAB_!#_sFO`e`ApAfDR#3MOUcR`dd7K&+b~+2 zeRuQfdT)gp)OgO%gU;`M@vtcVbiK>FhL6?9IK(EIJvY13lx`@7jXJVJK+~{71HC61 zJq7MXdjc=yKpwO~%{4{euB~XG?);SkdL*&HP?f^UHsv zsgADllkF=BW<4wi9xnh~I!&Z_5cCzRKufn5!+ZWzjMl8X!sc7Tf2Q8FzSq7v6fKk!lK_z=BOIdRl=Q~@a9s!NTTtF zR84|5@{OvZS`yLXI4i3nPX~B`lI_seY2SK?F-k+mgIOvFMZ*|iMqbcBsEfuUBkKK& z$drHLYoh&(Xf{(RrNRpzFp-{^o017jXH$%@t-)LQ%i@uky^w6(PZ|7YTF zZyR@_18<-SBm`v=nlY>SP%$hpQgQ)ED&?EAkr^Zp{80V3 zqxf!V!{kJcyzGC~Z65jcfX5dYGs=GB3b(- zlaYA*=5c3+a@F;(RaQlWOL`mH;VsSTAjN;r=9UGXDbJX(;k!3t?f=9n|7(dRpx$F+lX-kRGWJ7ckjK52eGP%bqTl| z{1*)5L~=)BrxR>n1CEA-rrPkO2z9kLedqgUs=6QnTP-DU0x3hX&$v#Lp9B7)>olTB zKZ)&E0N`Tu_bP)+R>l5z?y;-ARjsT*+4`Qt0y+I2@1 zRwZ+R(e#nvSBTmzxq9)F%USdJw9#)S@61AU0A;a!HNC1k_|H)@Q;Snsu+*KHdUFV0 z^OVD=NE=1V+#k0a-k`tTIxT_5_s}OTqtMb#g}{cVZxDae`L7~@2<1DhReqb|&6S5? znu$qV)xyK8)Z!~JJeploa9)5du6hxWhj zs{eGZ5@a3N;0F&wt~(I!N)5n83(e;^r0s%n#__t-x@se8*q_eXz_3jK8=xr5V~ z$vi;8*_QW}k~vj0r_=G)V0!pCPzAJilRh&J^Z_-or>jo@BS7jN=?fD;eaHk!7;@(L z**vS_+!`X%bK3+~H*R=%_ut2}toOfVjpT-s?%ii(U&k{+Zwh7nx!FmbRK3!{_tmWI zpK}*2-3qfSo9G4R9^K%7Fz995Sc|*M(WdPCkqNa`>TLy+KCmcdQrHx6nMLVd)_MoK z@Rv2-|C&^_dr^Z6Q?f%;xmF9McMEu5+Lt|z^#re2W?MU?vL&DI*Qx;+57&}R!noh& z&#`Z+f{#Nc&kyDy>Prv3B@mm#^?&ln)n|eYkoyvdb$_T=xsacEw&eXg*=#F?&NJkH z$&w#J*{Xp)z+4=KfP>I_aG(1i-K$c}D0xR=pH^^2)Eagn=r?3h%kk`%5=I3GBX%NB zfXO|k`3W|m_K!oBo>uCyhH0? z>TQZ>vJA@FMS}=c*MvGSR&0c6hW@Rkom0|SUNm*Qa$#1Sf}!c6 zjcL_H6gCoPuJ@J)?DcZ-t)EYkncYcFo(MPG}*7ViH2a- zsIBpO2|)0ZEh`^2maZ@^vR|Bc{qL4n4bZh{1_~7fLaRfYKRV>@`pNutYGH8p{vzGon z_`l@#2YZI#D{bggBl{Nw?Iv5K=Mp@O7~gjt(IH^d8ajoNrnHx6OW@hce*QZbDswEe zw%dyN?z~-`CfK3#5yPQ|ghMy`ouh2=wiG{xXqQIx@O7A{}CaZZfH8h%lcforT9v3-5krat~3Gtv9=KXxDT zi$>q&o%qEkYEs@CIaCN#xeT6NhF5U*oD`iP1sQIc zG&18e?IEH+CXh7BzpYP7vrA;p^K8fFt!criw z6b%Qntvvm&!|Ed{)=;~CtUC1v(W!=}dUiNn3vwF$d~=8+T9*5u$@WC4PQA`s?2Tfb zy4IP_F8%z^wlltF2s__rM%6R&>+S#rgN8ZIIfKxrlwW9Fm{QqALfp&=Ewl*8Uz4z* zHsb`MAqF~yFaEQcKDz@YeEPl|+fL^nKX|<)_=fV#6Mp_=J)57*!79~2Y+S6lx(5@# z{r6a=ZNEai^Z16=fxG{Th;mzQtV83HyMw?FS~@^eoQ7PAo2w2W0SgMF6@PWU%WV>q zHj633wTYvLet9B#**G0i@Z@zt2EHTI)b_HrCOl#_%TAACpaHRm*wkE;T_hh=2ATn8 zar~1L!lbAlkJy%rE_g27xO`ED-P1|U;-!g{h9Vf}o6B7O1iYg5f$Hi2c!GC&0$K9q z+`%2nYWTZ8oI&r6?W=z#Le-6BjLFM>9@FZE7}wq1uAnqiQn@^m%H~9TjHXFp2GkGO z14cRNK?AqMf32k62Lyr)XE&E#gJm~w<&Zpfi*!9QBE~IGMt7qb!v(fbL6P+As_MiGAf>k|26xz^3vf3 zrKoY0>&d)H5iBC&sB>xX!G9k!Ei{#$7=Y3yj+6KB1F~a6^O;}#ba(k9Z#;GxqmLc0rXaa$En)SU1a)6 z_WwM(CY2(g=1oJkrP-P;An7j+CRpprc`XHBo`uZeSl{ws4vH7C_QQXEIt5S*MQ$+v zmP$A2=#J~Bs<489uH*7GJ3#jdbO8wG{3jshM3#RGDHDd8IV zDYXy++!W0{v?z`9ag!$jRMgO}gsg$+tx*O?U;}W{Sa<)yN>F`rFE_Kd;bvS}WajtY zoKD<;Q|ICW2v40|O)6hIybf*jkUHduzgWq|u@}ol>f&j-NEcEL=8r{b;K@g4E!<7^H;Hd(^0pVvAm|xM zxNiEb)FpYoEd9pEmm&V9fTiA;dtoCSnE^HO?dR>oZfhamG0Lnzwv~zSZN{T4&oQN~ zETZI|0+QIR=2q=0SbfA#TiCHgU1hh`VIOz2jp`^vM?q}#F-KxX#hfqK0Q3(1mK*|1 zAA0*WKRPeFi$a3Nq<;gmez9q$?rU&($%|0`$FIbWTZ}8pUL~oNJW)he=_QluvbGVq z6VIIg2W-h-OJ6%e>_%6n_4D)oX0KH~ka zDC7WD^Dgv8K8nl9%Ox4}CmzE)NOPhpf{Vp6jdRYktvSVC!7&6*@!(u1KP}Zu)sAE> zrFetjKS^+uWhf*apP2Blw3{-WxIBgWu6w^DwfMMlHlD`T+T2`w;RPXb%n1lPZ_bv_ z;H#UCV{VLgkaxwv)^>1a(yj}0hz}wF$N%{=O)$d%EA5Ix$7I4Tsn zlwMtLR6X+Q11r5K?zbhMZtUv^?#-&eF?_=_SR^D+`o$(o&r&byt#1L$)u|Gc_=ZreZ{vwg~I=vUH{}%kwZ$#-;2yZS(D(# zv=mHeDURR`9||8fTww(wMD2?;$nVR|o~Bl@Zg1bYjKy|TrRfu*$1Zpk*Zj%d$!DFM zTdtJYN*C*M`p+WovJ}q%XDFVNiaIxKCu@Zu@;eu!WPj?cLgawxz_{U3#v8~=W8WyV zl%^IxSo6**F_9jF!oqp{ek!) zPco^9JnC15?H6a>5-k^bC2Ph^v7@UBJaPriIoM7GImt(o2{gsFpulZV+39T>Badrt z_=f9ScREwOIZs_P*j0Vm6bz&~p)USSWp=O2IAZw~*U$R)!{9nTHjFg`Yw zY!ckpW54!Avd7aKI-6%C(r=H^R`Bv*gU}l%#JRJ2%6=lmm2H;&fs&zw_`XddnI>=B$pa({eDh{E)Fc2o%=`GZ{oaDHu@Xu;dtoq@OH}`jq(P!HVK3JI%hY=~1w%`~ zn8&}B$i2u0#p2Z+On9PjF``N06akNwX}D@Ig3VUsoz5*d?RB_vqi|)tn2ZReBos}q zSa>LW>{A30yzyVgn$QQauRqrDTJ}>vztjiKLh)YU^)uNY@UwlS=V0s0@z8Xpb>J${ zEgg9S*anLI+1RrItONo_(_OZJmbm{I4u9$A@o`JDzUGUr>T2BG0=6LmOBxGzfh0hn zQe*2L&=Cm4Y<%+9st=f%Pn!&>r6cyBh;VL zgARZc1pivK-FUUA>=E5n*pQH`>c_kEiUS}O&^CSK02mBem*Vj(aZeD9gKpWi|LvZq ztK1*at^c{fwP7ANw#p&8UDV=M@h5($UUZph?|zqCaOq<-xwrR@o0Yi6 zq9y_BplKO`i6#WOp|V<_W$ghKUljd{g~#~(omRfde?_Yc55rfnZ1e--)NF!teOH92 zL!;bMSh|uzumOOO8w|L8#M-}Xiji}xF+8b%b97u-=z?WGy4HMzr<*xg(Ft&Z6;h9@ zytFw(`VwncmF!YK5DOGB&Mg7a2l5X@hvmUBDg=<_KWrt{{)y;0XMOc+*Mgr9qfR(o zv(xi6z|o{WOC{Lc zya9w)b2&5mw{OBtw|pBy}eB#+CJXy^oFJq8?e0KJd+XFep}}#?hOma{XPj zE`WWT>u_<&d-J#Xg7oHRv-?CU zoNSE03xBx57xl5QJoVHx z^9tSv#2GVWyiwU$%k*W-Fn;OQAXc{n4O}&BtgVYk`*z3Q9C%)H!uDUd@6_vmSbPAK z?MDqRn~qstc&SVadZ{XOZN5`j;}5ibxS}%mmvC_t9kiyC3uJYvKh$q6F;6nrSSBqe zmmifU`IKnE>;CkuqvRl4+3Gz6t2m0eGbF!MM=7+V$C=IdbJ8x7^TPV zjUrQVY?s_5rM|SN@LyaRY`%FL7kCzLT_~)jFj$q(nEsRlzmT@5TH&$E zWbKmN5&sUMqx-WX7;3;agxbd`WbXtM1%jmIDDu-5bbUMJ)RTYEuRjkHV zO)D~p$)>9Vag!a&00jkoJ5kXU`&S}EjUhue+HL*X(%RffZoVq%PXjKOU(ojIiln() zGrZtmklidrdGye&qzC4>%$Y13&ENKh(*m~HHKZ9_}3KT^85xd!cJa!HaC z7M_NRWAgBO{YKXNfj;p@u$pCu{*x955F~orvRnvxNYJDMqBuY#g{y=(1|y&6jbVeM zOJ~p37+i2JcFTf&3Le!7kN1w<_Akjcg6estfQ>0neLe40=%Ve*R{~sDpsa)n#8q4m zhv)1!s#_xJ-67EcQ2=JFOpu|Ku*kci**I!C$quy|?EAI77oj1EGXZIQE~V$oyL^Qp z>m>IvPceejw^JFzZN$_&bbJ8y*A7;)#(T0>^zC`(hSVY(dFm$Q&T6K{kcFiuUZa&w z38XZY$0Ikk7dvFvB1w*5Xui+sknv>=Kz0Y-9Yhyx21%;0iv+X}- zA1>sX6=jj>^$Y_+BzouiSY{08;M!$Do-py!loAN zd064=^#tg%>@ZdZp(->)-gnLK?;`gG=l zpwLra+Z_0P;Qwk`+(u1R!Jj6RaLZu|4I8bLgp{#W@0|3zv@1AJWlleD?mR%Fj!F!o zf9Wlruwt^m!;K{t^+%Dv1dhjG^tm6Cfp~`Vy0&{VsQ4M*?7 zH-)0E2Y;qb8SKHSIp8@F=^LH$e#65wUY-C&(!w|T7S}-^{V!h8U@0)Zg!xje5rZRn zHB?Gi7bkS)y@v3pXndwql^AVP=6E|~bJBBI9u*o{9nI1E2M|Pin}F|T6_6EU;=Js( z`|7Bgg!qV4j3+_yuZSDy8U+eX;FEom7~1zB%vaFu#bj88Ji#4*kx8G$FOQk^{sy?I z+hdO~J6OiJ2pfEHjJlyny#mGT+6k!-8kcNKcSD$Rv-M|DBBjk!o7B}-sA(XlGMAX( z57f`CDJilNl=w&Jqs$9jE_r}m<2yinAE*s5>bAb7QY(H_S%5Ak!cEpDg-j4(HXR*} zEQPjkpb9>E9jrr#f8d_`%IL@K$0a=pE>!2RpAL%1W^jcUwWtz|{IdfKDC?MO{w=qY ziN&jDY9CPl-?x;W^vO0WRJ0Jn;z<+VRgn?aR~s%}`h{VvQ+6YN4Gk!*$dGxj4VXQs zK@$qzruCx*Kq2D}Ar^|NQ~V%=&7xk!B>xlZ5R5x|*Lwwl5c;C5HYf;U2JnDPvJ7Mx zYlz;J^J^+4ozO>?!OQF}7iQ-6q<(~f@;U*sRGJEmRCkBUA;gac=8yqQ=O`Lg2P(O3 z%4NSSuZBW)UOS;Q;foV@tjxkdj%|HQkugwI&qGq_>57GX5KRj;HoD@_K4^%Pe&R6) zO0cyNMQEN|(vJrHVHFSh)1_~+89a`B2me}B$>L*9(XUOmMAWv5@r;E&kMf#k;hE)l z_9}SZG#3X`n-i8K2vG;zQGF2c5g#5bcleF=9dQKwx`?{Yd~=De=(}0}tJ;`=qYQcG zTsP_O*VzGwE>w>93HQO0uwcB&iuuiwmfC;kZk-M1O`bNhvxLf)n3)e&H$|UU#U;<` zCan>R!R*2SUr8e9ODVeV=l>fM{j?VkdNec0KL+gRx7|bXXO}6KA?GAFPvS;-%j|NW z1LLwJeb@EPwP~K4Ve8MOv)RfuUN0EvQJ6h*1$7`I3P$~M6X+Mc?uXn$8f9!gR-yFu ze=>JO9v`P!$er!)Xv7VCnBLnelDyj)N9FyjBnXd_FOwSwLOA$t*PNp{J~&@U#Ir!L zQVsEIJs?UePONhw1!mClsdNFOmWR;r0%ltMs>zt+#I9eYNaB6^PGY`-o=D1I#_}$|0ri6XG=nA%_(GTAlP8YIICaB!fRzLyQ)l7H!E28tuw%20srfOZA-?2Y4Sj$DaMr zyY)Z;$BcOCtbyq!Cua znm@z%Ra5w%Y@;0vi`uESN~Ng0K5Pk@a{287$opJ+#$Vlyt#18$VGNPn!3s);5Hg+z zf?e&5c|HWsH!g`vngk|Q*8bAjl&IXk8xf^l5(<=gHE$xox#E^ZF@@Ulq&*tw`Qk>Fc0-qcuB9Gb|IO}doJX!NqBS_ak4S7f&svfO$rDQ1W1qN7bfYrr4m zRa~17o`*)A9ikT>2mcPspDp$o2AnfPtVaeVYh&`B=A0?vLTx|$)chaJAOW}^rqOQy zCmP~Pz4QvZcsXCZo|}cuJzeh6EI)5R9-W3hT-OmNk@>h}VQxxVH(Bh5;{vrl62w^BUcSS?11aweW$` zPl_kujixEyNTiP-@4%t}T+QGzW{^0>&x;R@@=pXe{3`Ig!TZj(ZVe zVZN=wwh0kKUd6PCk}GqDF_$jlEL&32O&4zKgw#GbJDIZaRG+~-;?FbfvB=|qs(+{s z^ohxst)4Saue~{`1VoD=3C(`m-Ob#&NHq-_RE^V4{g3K9LDe2j2lY!lZe} z9&90|0Fje#E(Z-O(EjyW1CDTAe77?Xnq8iG0akGA>oy<`AX;>=#6mgW{uIJ47dwY_k#;`h` z*f2l8{UtJRl=srUf1jj{GcbbHLt=gyW&oV?^8U#I6q(lQ+Hl z_$m?J7s3pMp1};%KBwqm_$&xGz!`}J$u8>HJ?fKjRdHs6mH(Iadp#)x*H8M2E!IS=Y7~6D1io)f%(IoG^9ovU+enCXc-ewz#uvyYZcZ)guxPXx^_AFz zXdB{}xwrx;gSomm?e0x^LfvEb^U`x);B_+Y z(bf@TuFuOuO`G|T>qFHrn1DPEokP9Bi` zEdd5X$1iUt>8vH`<%@ZL8XzVZ0pZbqJv>$D<=}}>i$sz1nYdj?3JCNnBq}`LY}FRO zSAn$$(l{!WdMBTjg* zk_4L=H6_ZD7dc=ERvU>}CSd`=E1s{fvY!#Kn^NS;-`>7L;H}SFf~~|s5VSygdq|{H z+$ddAL=aa{rY4r!D+{4316!hF94yo%Rc_yJ_nv<_iYDaYAPaG38mfrugQ(l^R!JYV%1u$gug5$5YUafzF|1i;nFTyBtT0iK?ckT&S>_Val)p4su9( zqP3!jvG;k5BzOa;{c1c~zA9Lfin;y3wIQb$Rg^2`&nG0r3spgf7@@bZfsfH>aWu;S zX$?Z;uO<{}u{B$}>@`$86LfiW7Q^ZEGk9bNh;mt=F>8e#ik}D)2+R&e4I4=TGXC!1 zFG=~lPtu%R7hLIkvU>7Pn*oCa%?l0#(_&)K40ub3N%vuQc&qxx4UA-7E9%tTzt<_j zzGWuXE=MI8A^r#Q1p{e;J&LsBQ-){+nl*Onf`dfvD6SL~ZS5d6F|YgApAkI%;|m6m zb>KgrTJ4AI5t7xSG?Vu&MHfufyvSlb|EB8y?#~w&HxO|@jCpW|(46$w5&dMqBLM8i ze`O3&M*2yyCcg)C!?1FKecaiP%Oz{GZR$9DyKzq@{iZV>f;_xM+ikjRyr(tZj$?MR zR|*-n7UBBM@#O1!)g`2K<jFs>fR$=r`j<#o5QTatQ*OCFQv|RxFe}ZhpFp< zqqSKApGWS*QD^~wuORV;oKj-CoF-xy+41igCu|J32WJO&bDLJ;8_9)p92x^F^uxtR7JTGxER~Xypfu3Njubu?XV4qN5@IRj&&+8924=C{ zXX(lZ)*TsyVpib~sO#Ctv?GK1%WuY`AMl-XJFStN$OHWNJEMTlg~?3Jwb;IKd~Oc`-k`Djg^&G9H!hT|s=k(l?V z>k%#Ax~TJa>^at_RofgPgm@+)Nrm|RxdkA1g*+yszZiTLv{<`7Szlj}p^WD+Yzmo& z#X4b!%N`Dlg5Um~N_NjTQD=AQ|03l0U}UrEco;rHmw3Ev``A{a&cVRLcHBSK!?0cb z;;Yj;WoN2Hx6ANQEHJ~7nx;ZP&RjQWv+mD*FZz`>08m0+<{)Z-q-sl@eSm<$izWmb zn={lS3acNQJDcpvSO^GLD}2YhUi1h8M)yOv)&jZS~|=WCgZ*mAua4 zCc>kqw)Pf~TZHGCnwJMUkYmRW7;lSck8m2@+HnAFNStndZw#d}tKNbjm-po*a?yvz zbU{NYC*4p_xwj#{s=74Rc8d0*lqetO#X}u=Nv7Q$D(c^fHMR|$aoLgkJ-@Tc0{oGc z%tzDJ9_;T5-25lO{d-$)2cVqWO&TZHpPNByhXsH_lV6MXpubJCULF328AFSx6Q+cs zH9!r2udeIr(0n%)28=@Xp7v;B^k5#tJXc&!f44R2(A+*^zU{t0CY}cTCwg@%`JZ!m ztyE3@?MxA%1>dF^LADgZf0 zz4?=GZF`qQck<19>|_JKX1M>|OV`byW}8e(#wL-sRCu{CWa)fs(~Yb}L+P@h01-Rm z)6}4*|k&-qc z!&U2)z1r`TQm88}{9~djvTdS+2uSgtR{BvpO?Kcl@`=xz-A2zPrw^5ltK-l4FZUAD zfMzVgxs?~MK;dV>1!CQ#KkSP(WPv#dPYnWXWGLl9b?jGm?edt+*dUu-VHAMy2Zpn6 zWbyq`0&j!xYrY^EINN03n<%^qzO;y7M!}vbs~h%?KpNC9>nnZX-ODoNJwuUyoW|Qy zuUuxzmDFq3jF+!QSV~kI>Hf7i1d>-uJoi}sKLFi8BERdE*bK9OQBsXd>r(5sJ4I=0 zCg1VZk*CIZ{~7d=IEMs!C1hzE`D2GtN0Pai=je^*=)VEYPT5}Jk{1sngw|650=LyFMxt_;VdNW zZYP;ml5%`Q!qQhnXvT)VuUUx< zPVKB3`#hQ1nEQEqgp>GgU3r?vqg#OunpJG?0Becxj3aVz3hN;z7Pu@ zOL5)TKE8L0^Cm`cFP3YuU$~yH&XB*JMivj7yZ$n~?tSsyd^Wu3djI*S9}nqJSI?g6 zcU)6A<{XcI2ag`xdU;{z4<5;fNcd)!$vX%iw6P)g-4fu`)Y|rO3FPT2U2{5;{a#QS z)c|OUT^T+LVAUw8kKcuBpV*zvUXPbd)q30h#Xr#B@FiUT+V9%yRQ`^qO_FX`f8ps- zQ%yD1n^6-$Gu2dYK&6YdB^ZS2hZAjfs;O=jERJV?pIN?sAbD1-@q8Ifbu+Wo&wk&s z`ARo_>)-tAw)^=XS$XkTrnlR_{G;11Ju*bp3Lui5rn365*G()df|1@GjflD7CmCZA z5-Y}4LMu;FJKj7S*ax$+u$wLM(jm1c+|RSZnlZp<_UOiY_3nS;&%%$$UQz-H9gppq${2XxFN=o)7M#*Z}XXDA?1Wd@BG*Q ziWTeg7c`M~&)dXi@BYL}K-asOP9X}szIkT*kN@1`xiR)7!6f&1aaQ)bzP7TMEA2%w z#$px0*oahlvmOtM$h^r4Pj(Bd_i24lqv)M~ct7gtolz5x{&N7^>y#KBWohm4APH61 zvEuB|7l}vmB2lveb0)Wj;}%lJ0CMu#Os2GY48X{U?FA?xnGk#<$(Mq^5i8y>J><{x z`r9t4MOaO*j+L5T&FA60Z?kSFC7$gV z&~}?er;Wa2vPznoVvd(DmrfufC4oG zoqMuT(p%OyR^41$0dRCj<{7Wm7y(P}S66mCaIK8II$5v_v=I|bep{#abuXLeL87r- zN9>cfwe8K#Fx9x8-)DGy_xZ3)#9-+Y+wC?29P#hsb0o%wNAMmGGy&m*kJ;^ixpMon z&9|L&D0!a^5;BhU-T~e_^55{obJsUmOuMa1d~U9u4W2PDfd+4&{cZq*$L7Oamtm0l z@o?rM0FmT$c_HxUu-mxoir2Zhu_YclA*G7UG3_g#IzuXF*wpwh32@=O$;51QnJvCt zSyy{fVlWYwyc1udkN(uhe|>R(D^>Dk$4c)7gY%&?iMwiV-S&Q9ZK|oJ`u1u9Xr`L# zJ1&43On?<-JJnQQQqYpSBT>Xb9we>%^9_(Z2hL6_u*8kWuXM4JcAbLmE=g2;eckXM zMd63qO;oe!>md@AMz+?fzu%lzundrN0LY9e)-;j@H;zTAn{cfT;-v(CU=VyOV8R^3 z%C<$5O6mJu1{8f16oVSfd*u-VJAl+3C1ZHAqK2~d8)BLO7!peJL5_s6@!+`w@Z!E2 zNs2LSEx!XvlK9Hpj5)5x(hO&-GXui0>R`qBLpQK}#UcgC?ulj}#ycylI3At8j|_^2 zBU}qojx}-Ico-?hHy6`?CCXF$c)8z#<60+AB0w7A+}mfLc!MUN1&k;MkJ@;^-5Ut$ z)19QSC_i|Wl5Y|zSV9$8>87FaRG=tvip`@lWljK7bS_d1x1>2IpCKMA?~UL+5t$P5 z0tsG0TCEOJtr*Sjk8?dxaPbMA9?{Ro!4BU~pFe})F2EK)6R9nK$w&ag0P18E?D6zS zp^`4KQ~*@KKf>z@w18lf<<``&gF2;AVf-xlgyceHFz2%aI4sG&wtpbp#1 z`Tsl$^wky|ULTx)iRnTSpedTt+OW^E{|Qn!nF{+81bQ=0un6OGUsRIb0ESh2C4XfB zFw@owEV#Q1fUIt;tae(U?4U^tKzi_x;u=ombnq+UrDW(kVuI;95avHDL$+6vDw=)f ziO@iRP9#5U=h3>fae(%<2h+EKYyat2{#hUik*=*Tx(@n(`723P#Xe=)R<6Z-eh6p} zkJNb-KFea1^}y=U^`Fb0o87}^;`#XhIP1qjXg(X{nS?|zF9eq8+Jz6*2<*LmXgtx1 z8hrZemL@DOWl}WpFw^e=sgGU#~)823uK&}(TOa$)}li6r14|eiUrdr(R?{x zCljlqk#*RAPO*x5zkYLW%6xs0qd6;+W8Q9kQG(a0!)I}}Sl#+uzV}db{fx<=0xfIn znd4JUHPv@k6F@W7RNrNxGe3Xy6)D|Q{ZOmb3YV{Pm5+by9uZ&C1o8J3a;H#dzxCJk z@8R=b+U}!29)3^5NV1PTc%&O}KoopAD*ROzOPj5KFKiX$0QD}hc6({Z>t{AQdtm7u zzXEO`=NFH(lFO>2Wiwl@y$Oo6`FgZs8A}na^M#V6q{$x}m4useSUhFlS_VX;Cf$J< zZn77PrEd1Qxh9!~@)gce4k{~|@;(TLi8Q}~iawZyhK7Cq{;vtx`c)LGoqTuDoFas6~V}`{2f}(MTJALuJ4onyJ&a^dp~_$Zql1^oaJ=gA2)~ zcwa?x14O00dzm1|BDP)rJ}>k5@%dcL3hTg$8ngOv96cvAg`?Cc*gMhVr-aQEQktqg zY$Xm$ZLON!C>0ByCBa9>n>?3EVJfU~u3f$Xs6?fB=*+wU#rU{qTsjA%5THC(F!go!CX74sOAW2{%W4mGd{!?;}pvw465*d4?Ba4jtt z{<^#e$yR_#u!96fzvBJHm}vqt1HcG>xo7|c08$tyuA^LAmoETlB%3w-XwqOn@AHdP zEqTiXV8q|@Z5-aoIQ{Pv3xkUc`&q(4}{Pg0J2 z)&IV$V-i;IT2ll$W982QFck|jEnEgQ_HP5|x_RoK;V{a6{F|06-7o1?3TAHdptSn) zUrfF zOVM1C)Q!2Kog-!46MFdWa5#8#9k-!AT3=U|pFObU66$+u8)*5K=y7gR=}AMw_B7Fd zB(pXTD~F>x|LuQFUM$DYeqm?7_cyfP-=|vt=3k5Y6}$Lr|FmuY@;|qK>d7Z^v*Alk zxquB4a01H&W8VFh(JrdttM}Fwb8C?!wL8mJGzoxZt!0>P(vXA|=U7^`9*q@AOqLe5 z-&|Wc&n+)gnM$`6;KwQY)p`=1Na4bqm*#3=c{#Uy1``U2MKDSU@&}pdc9omz60Oa9 zrT`PCm~e_nUn(|GV`+ zL-pPbk(DBZp{f{SiDd;|F`g*%Tm|V~S0kCLEy-Fd<}l&HW4pwEW~=#-uH}pXJa(KJ z)wQr8;tD>;z5A8OmR_gs10w($mD+`LF`wDI?+w^iEWI?b=CE_q^!`w!?|=AHr8k8^l$Q)(J&%iQGWl4|5aXJC z@#!!1dVnm^ljhc_+=<`E2TMq#FC__nAzedzhwm}NZV_xKL2RoEezTYQSR$uC6EM*_o|K|&OLB>X)vn+;MR z9*bNctt}67FGb?U#E~H->va4mt;|Omfh1j?z@$bz$Ppq)pyZa3nXdyUE~kn~Q7(1p zoShPX8lHk=DH3pk3_?|b{qpb2qe zPG<0bVInCuILY+f<8E&m$0nYdT2_y8H9#kC6t(i7mtu|R`4~0dnkWz@09=BkB4u1o z(1SdKNOd}J%!wHtSKZ8h53eXYF@Y;NC|nj646M@J26au z#_2}>_ZJ=STSQ@%9wqSC56wf2*kuW<|fViThdtAdodl0{fvw! zu}XvC{dj)ft?}RLwzn2ZBqr4@^Rcskoa=Qkof4of!+3xhU&t8hxRn(2AV4sDhUTTs z9=-R1V-vO~dYt8@Sl$|M4EynU`sv0Q2cBxGZ@OTR@I`gVIA|bV6QqGj!|ji#(e*)paozsM z@Q)&Y8#{8-Dqw~<-OP&l!m6#O9lfXkab8xe2;W^5=4LW#|K$r34L(b6jFB*TBimbx z#|B2Ixf@0L4Zr(EC~6$qyc#f?fz&#f9Wpn_#4gY_Uc6)F!_iGE^!~Txe2v~iv1(#` zFTYUCHgVf-p32R=`#!{EYMOw5yG=F6K@|IY{Ap-lhNdhsE2sp9489)#2>6+JLngM$ z2;`ApN;sx~B{Z0d-wm>)6w~CI2<~W>>kXMdnR(!TE)EQx%%*9oqL^jZM`RAZ!cF61CC1rY$FW|R3y0}DuhQ(BHM3cqh) z46(nrk5z2mkq?byggsuKeRN}PSZDGciqBK*`|ZeI_vRrfj7FB2?YkkrB!Bb!VDyWY zFsPmUu)7bAAI{!d#->Ou<#_77zMcdk%2@ye#~w=GT)p7+VnZH)z8Gz+xv%Su%hq6- z(G2S`(J~1zqFh*8JrhuW$u*=5GN)T+ugq5({<5&TE*xZF{Q7oa2I{TD9E;n;T){`h zk+ROJqwK={Pj?tM{zeXLqJt}l(C#v8yVU0wb6An+oxq*=WI&EM{&z=<{dd!7AD6U9 z$>bUyt7~nL1xYFhFv2ke{2Qg{`S6{|r{d#aZ zf5(Ti7eht9IC#?lXdI6Md1a)$K6kTbq`N()-9Zo}d6Rq0jG0|BkjJ|w_%^YfYzO;% z0(D&i8LuBPjy;Yk$DN4qv~v%%`C_5J%X`a^NR>nUdGx(;{*sT4dvt~9b6wZmH!0y? znN9miswi$fCkuW~HaZV)_~@F%!b1P#LEDhadG`1$~)F@?6n~D?EtPH zy!%M^?o&`a-E-c`yN{UWb>)7y>H+SeNn`0?`6} zZkNRw0&4-6w=o(5EdhUeVjnVSw50uI<>hG6nuR zrMOf@m-^4g;HU8-ZyQz<%f7ekt7o_V#*MjrR?=}atg~j$e*1qP^_A2YHSKSCo&V&w zZ29Ot+y2=fT8`l}QVJTykRBt3i&kG-0XGFJ%JspzFG-q{WC~+bK)iA$c2$A@P%z1) zS!5A6(S*T3_-MQKnJv~Ap87Q}#a5wNX>0swJTaz917M;C8TJdV3z^N*!iw@l-50Pz z9JI%uggF$h!^nRxU_1=0nuvWkn4z%VyYj49#1N^?%V*V(e*x637Mv|hk12!>9Z@ATbSs}q`@Zq6( zulBY=mc)Ev-V`BOkMpKn*dmXn)3xpP8#81g95Y*5mj^Zlcpu-t#N9^cBy$7?TSGz< z$NfHUuhf55XBV~&hT5^l-d!a30e~RA_UGIaPyK=ds1S(Jbpt3fE`Z3$7~$HRWif#* zym#9S5+AW$Mn=9bE5H)Qoh{{c0YVRly&Xp2{dg{MO+msm2KSY)He&i+UtT(>5kMUN zj>$ICu(2l&W2b8bOdWaVto0dlk|L!tFlL`)g!q4R+ds#&-p3n*=@$WGisaVyF41w6 z=ho<&6;lTVLPfc5d>sHg=Cs6FAsw%)Eje5Z#4SJg*$}Dybt-@G-eB0@Jb{t^?HPbi zHPsKHCV*zDslK5?!jwe1YWDr}t(fX9DsG&D0V_A++(c#bSC{KBcjYmnA5vTYgX5%e${*M0rA)lXsC(!uk@BPG%Pd^R5KyqAGQ>hqb83LaqJjAZ*FN$}XDW09x zdPVWpKG(GBP4j@^FDWIYo;0&W*SY>zGekZeC_sglDH`N)> z7b#IlU2$MXvG2jdLgQN?-*Bly(^j53l^{uS1MK0ogRBNniHRD$E?iO*K1*(aM&5sN z!FoxCSa9i+#*R^=;x&;aA^iwaofwHWl6u5{+)y?CD#$1loz3wHo=q>)GDe?^S3I@c z!{#NxjO)Zg5>X)LaBMPQLyu!tniSWfAQ?Kv9>1*IKwEDibyaGO+?ia;qS)%=VTf}c zo)zRRoCGj`IBd*KWJoo~n7IXbBY=M`xQL0f*qbGa3s4TJhoIM7ua9FKn{oYxp%;9@1c}Nv4!M zd7}WNGG^?LuDdRe?D6Vp5)$ieUKY*_8cStH?2prX++RbwQv{MEmCD5K0Th2>8zgHw zzYy@p_=x>En~Ql9)1$Z+DV|(W<@q3gjKB`pmH2Z6TX;+af;_f5ad43c@sR%3H7;L^ zV^-HkT^mlIk&oY94;!vUF{0a}-m}~1{BzSeY8bslj>TOfNkYiE?=* z8T8kwK|;+U2muB1ziO<*;Cg?msiykcH32kJP4%_v#F9Z)B6{&uQ@uge?Kf@?8`%%s zu)T&sbvB#ZgWvppMK^bG1r{F>8M=$KMr>a1FCGVFzJt~u zB1+{YVwiFU+CMkuXAf=hqhEjh4Sfp>qsZltf6JQv))@r0vgCN<%_4s*^g~YufI+iT z3y_dG?QCw%&7}Y`U@%N*sjTbeYeR8NnJ>siXlD6}#?5Jdv@SVXC*$Ts-Z6YB*{LTu zy_0N*G$BkeBdtL5mjBTNrVxKH0_`jNS#V^XWB$5m3%eo zI(X^morh>eQ&B0nLHVcQZYZAY5(a2$#yV|@?cAtu+%l4|ei zS^J&M=H&?_3m{1!*nJL~HlYD;wSb$SD;()=N!FZlI+nLRkE?nj?&=HcI8NUHizbdme)dq`1KRW2zHN5_z^SI1>UC-YXr`L# zYgD>eSvoRMn`){zu}A}{KL3Tj&(0oNzIv57+1oc^XTS50+08Hh#P)ykhobE7pL}A? za&1czf=Yi(FuxijWrybfOXLl&T8kyD9~y>K(cs)8;*)d!`+xHrdHuJs&VK738U57T z=1>37nrEL{e1NM;LGy5?=?LC1>4Ut$FquYJZ`S6MusGrS)SC>>K0z*TWY~}5nRTsbv+dtLw zb$eVATYUI4>)-vcVuv?>_V=y3dFl)-nhVT!Y0h$IJ>f+pZ(W+law*z8k^!n6`98#g z#*dfUCIW7MwU9Cn7?O8n{}-(ue@`hKwHl48SzEDm{8+GslkYLvlHOO=N(QFd>11&4nR*X@}#^x(a}=)47&L zx!2t^CQ^$q(^kYha>Z0k$UgIVt{8d6G5hm!yjMb`J90M6jyWcp+j_t($h%q)Z*7}P ztURuNJ|?E|nDq>>9@!ZWcc~C8#)5gwF z{NcJcE_`uhIK4jeF%0J%&)aQJ*G~N$uB9A*FF-%oSFoYx*_2M61T*hWo^S z=v(-rlIB0G?y0#Suk^8MOfwKY6LhoRdUL{xC*O;q9eg)JdDGx4>-Uw;RXk0mdgaO& zYqLd2TY2<>d=!{3YN(N$=y(Lb6__;vpb+DQM3%B}uZI`NOgQ#5G~Oo^Vvsb|F#rKz z1Tb-;dej>bPeezeL}M3UH@Rc(n*_gqnv)00$ynCGobd|xV1^4op}DA6aN)&N2= z^^se#b&|i_9*5h}*e-{PfA(M@2YMp&Xc#~5zy&tB4Xyjooa858He*gQnpdrV_;|5E zzO*|haS8w{h>aKsrkGR3lPa+QD{4~$Kg3+CK?4Wq668FK)k;murg=HFJ*KK~ z$mYwrrP)3(sgPfIgsiVB_g2@;8Rh_HoHV+u{42}ET6$5Lc`|K(f~$q3LcDtPBI0}I z2CSK|Z<;D&7Y_FKwDNp+3P+EQmnAGcU#Hj4OC(c_T4T-esK%XFf{g|mMZ9!}r$*JN zvFCG!1gpM1nXSs4m4=6Lm<0rDBr9~lDRjK4vm;{TtLkXU`C|1yjF%WVc(0IpG+zA= zJ{HnG-7_Hf?d{ipiNU^OEbMkX&d87{Fh7!Tgu$*N$|E2aJy?9aeVP!Dnz`O~zmZ9l&va!Yfr-NB*?(dwZVi{;Q{Z*HDhDdS&H zz9RlxW~*IqjX=O)K%3w}gU?50eUf?fG=TL8#K|%FW(*{Mj|qDn8+jOu0o0HgcQB8= z_t=gMgazctD=Oe)BLi)X_K1BG=YU6zI~xfgBN}l#5Ci}f0kjiKhika5C*ce~O@@=) z%Riq|F~YvQZi78hUIde6om~uI%H2YGbb3xIkC|~r;03wVxWuxVF9u&KkL~98MgJFP z-oesiuJA8eU^QRNIas2RO^Q?ukQ-12^ZWQ*PdM!SI?E7*MV8xpeY*ykUWgudgY0jY zO`3=M3q{f+wVu3brkd(YYXWGdn(8H$ojn?2D5uEmsouuw_BU2ldn+IR_?Htd0!9JT zw^}X&$N>Rmmm@F&Uj;w@&2P+?hcE&;0r;1}Fak$^{#afKhd=&LPR&0+Sq9sHRqx!= zy4C7;1t`ZKx4|vGT;xh0-ucA2pbh7Q_RFPTF=0rol*pM1X48>P6R}0V7JBA? zmm3iS>~Nk*)Hi@M{!=iK9wx2>jO=d=sESe`R~V)OQ~<;D%1JuR2R~iY6B8$T5b=32 zl06McQBkg?_X;47m^UGz3#pan1sblHS`?==-cJWHHk}0)j`Qd-fHz&y4ooQ>=M=Wg zGJJj!4PL+Kw77F#`@FjSm_(mHp62d>P>SBYLWF>-rB_ym$p(g_#g zUNlG)kw*byw)@sL^-+%_7JOXzaU)N2M{K=SduP%~`^Ip#sWgnU9tJHDc=W)!Ie zMymrr!$vlz`H>=-i;M$r3VAGmhJzlV=?zV6nj$fAW7NBmxdLv2G(p=O4JjyfrcqMk z5*(T%F(g_fOPSxjk996PffMs9{;&e_2kPA>j(!tjKr+n`ns0(u| zns3Lk)R6|Daf2lX)sxIpAxC~(wY{T8U32UfG3^eEOLNniHvqtYI_~;d86W3py%hGl z?*y<2M7~S7iN@T)^9nYeXlXFo5>n%$Us;sT`DaQeL*#glyTl1u;{D|_6rg3iC;W^# zKEP2y#uqF=#v^PKW9?F~2sC@7yZo#0s)~#;4m>gKb*p6UyRu@olk3WSu^0dvH~4oT zIQnpX*CjxG=_bv8>}!;P!O;Bna;K)6>dmbQpqXkaD$6Z@@ZNX56;n<1MnrP||J(Zy zFv-sHO#Hr2tk`+FC+E>pH+)|SJr*It9+1Fx~yc>TBW znq*^p7u$d_#srg-0HK7!X!1;l3MYQo^StL&SC2;0gzi3nRo(YbS8J+6RlQYRRbB6M zo)8|`4S!<2zA5hx(gcV1q50t5h^7yl4U`-;l{b&|5nyHtNvokp2qT#^;#EvGj+8Lv zN3xH;uKehD*Vhuqhc`Td+Q!o#^|MF5|CP?DXHi{$8r;Xp_Mv$qW6QlNyl_U3kV}?~ z(!iJvOR@xivZKyv5Tki$AF87h2%{LSmdTcppp1}X*0tJzmW{|!WYd7xLn_%+QHm&S zp*FHY13aRYl`cs@M*=1JwqFB)GTK`*O{_#S3sTAC$tJS2n@zZ$1lqIBqy+e+ltwpk z`6eaI;sq8$DZ9~38*`L9PuP--6TJ)ayFxddGCEs-CQU`U*~>G9x-%*ACZ$?p)!A^E z&7E$*EGd=g+L~t9Bkfx?VB^b1G?DZk-9)<5pF}f}Bp@K0%DlN~evK0RkPFCquSAl$ zVZIZ`d6q%f#;0?}WAtRnd(k8@oG8#fE;3=tOwf^x8QHYzbZ`@}l57dbjQy5!C{uQr zAdxJ8n$89~uQ{_3N$FA6Uq-SbV#!(!Tc(Uk%a8&MK***(vRz$+ebn`IvOVOqD|42z zEGdzV@1DIqvnS2;pC{-hl%2Qads==c{XsN5pv`pwD{Se6ntWQ2tVw@&@_dj|og~)t z$^d$|R5BN*nI)R4(YX%!T(b|e9xl>XBo11Cu%%QmEBDE>SafqPff)^Abv{)%u*WGRe4+>yh#%eND}7uLLgYgF`y9 zTpuK@xznKXz(#&8LA!ZWaL8Qm;P8llK3Su3S&J@viA+V!C!>b@AIgF>M9UikG_l1U_Wd`4>N%d`C;bblvfd_5p`(Uw4sY{sSWsci0aM6C4L zm@QG#(h12-h}yb|E3H_A()gOZfZ#Dxum?^%r@IykcHSR~7L;45Vf95%!pygSKaZqw z#AH!u>4K+6cwNUq5X$IdlPwTQ%DSZM`+lcq$5gAK0i5ZnBl@|N7nBBuI*lxKl9(r( z!b!9nQ~J2^N+y%hm3}0i*&s`>MzRlF*Uo~0GOZ??bkymSYaU5KTQ)OhgDB&s^{cYc zk&R+oHUXwDi|I6-O|r>KhqNz$jb2_>ZX>~=IlFqIU6IV&~0NP3Dkhz#A;CY!)YPJFs zJdi0rUM1T^r=5N(on}CP*<_oN1UNMl$2<(p<488-**NsBOp$z4x;(sO%2$?`W6Jfi zz<>leq@>1Qy;;ll;scMMx_(GAvUIHhX#v$N$qT`#|LPIuk&$GmU5 zzb7Rv?R^iUy6!X$`iGNds%D-IqM0K{Wp3%^4PR;cU=#@ zON}xp^J9627a-HR_hQ)c~U(H0!?^g-lrc%PyM0$93QmJI_96YcewQc8`zE3^O zmHs$cNosU(chSosDhvZOv@ES(J&u>&bOS#Al^-F9dhK`uQ4f%Q9IY87()@Jlu%^Su zQ-{n3#*!L(nI>YvEmhHOw@j%?D$NdMW0D=c&)%S#sth@Qx|(k;Z0+^rOHjt~;0_Ew zVOgQPA$78>3R+y+`=DCaBhZ@3lJ#=wOmfbG+-Aaw*(gMfDILphOK>G@!WuO5TAHmdN4ZLXSh6E6F6t%onk+IXUHqOj*L3FB-mj1|o*K8L%i6Ih0 z%E}zfQGWS+tlm*B>h^n%XikRMZTW}O0xNXKb`O8nHwe>#$-8k`pQTTki3kg z>v}Zk(dh#-TjHXnJ6#!jdDe~gFv-d-)9&lZCk)A&G`l0qSjrkJo6M5Dv21=Nb3+Pp zS)Jcgb~`#zJ{>b{?ibnkn`uU-2acIEXU;3rhjcPlrNdAxSAC-RZm`F)`!OA<)S8coY2wG|VHT4rPK42{k9h0({B1-nwy3?*MK zSA*o{yb>@!-sk=C{_Kg+@}l8!9ThGI0VD`EXEeG@`#H21SyI_-Kd9`s6ihuQigX zC$C}BPfN>{bRts(wA(r&-I3G`5g8m(9w2v;~s%<*;GN?UsBQD@(zb+oY8TS)@lN*vh6UYi``h#xWazNa-=7 z_f-}g>OQis8^*3Ikv!u@Cq7A_O8a5RW;0L2F_}U6IP5gddZ@{DWsQ3C-%F?DD!;O< zT0(;YQofXxAL;NO%SDpicG(bXNl@Oj^%&!MO;g#f>(tG*1e9cIl59+~2FTsllbzQD zjpTMpkDt7kO1>-4dIM#Bt@7S~Hr>IFPS0xnJ(ysO-8H&7)gDP%KuAl3I`u9lww48R z=H8&$?`uYiwCc4ScoLk+#-r_$L>}Yv z7&QHoG){pcoHKcQr|yhI_f$P=;foxvw&hg z7F;J}*{p?r#9yoc>T7%nJ zqv*V3Ny;yEly(&91UPMfN}fG8B-o<=hGqn}W(aA3Hii`isEkNSuX#-8{bU-`(|TF8 zfdNF?AUS)U>1$$^IoKzL>lMw&9H^A=h8I0sPZKRiR(i6t=7{=S{s&Xs_23@7;y3@K z=p_;LoVeA%)K9)+K9Q^j*F#{t@TBCy^|aBSX{c!4{7QcsIVy^OsEssh>TA`8wah`z zKe+4SPHO$J`qEI3J_dgD4TSq1gq51n*4iz_^YwSBN22HSVlkN(@^hX{O35-2WTO-2 zZ9;;U{#<={tZUj+ie`HXv1I}+uI0cTsKK>t-AqYPFQ-SJXBuXpQMLh>DN=@oIFhEj zc?M0EeIm_rvjB;IGzCp#(@#VC-GpIN%Lp6^D9J`pk6%gTMgjt}ES*u#*?On; zKZ5eW2wdrZSE9{xWK?^EL>?<)pgoB4iBfSOlXxVv!Q5-11_Mkcl4R!yZ+Hd#u~m=z z99>GUrQO?-cxDQ%JrAI^>2$RA??!m!K$eA-mA~bEhxCkQO#5u>?<@w}-9&dbRI9*vad7JNl>Ds%pSTukm&*khq^?|`G(9`Tp zebPq0mW?Ba4rqy*jOdo0G@|5KD9Z%5jP$}88XbMq{dH*H-mG!IhvCsN965LZfdqXl z8v|!t+VfKl|JN_R4BOV4teLz~JJE8~+s{;@1=RiGzkXs2fAF>!zI z4(o%^;D!D~?2T%=lsL!_sKLuawOONUl(SHqP2`*Bsu~Bh`5shbzGXIbv<5EIDpj zkHpJpUs<09O*FGc$`fS7t0^y#O_U>(ZKN@(PTY}o%g<*MWMIa~OHUfG8uXe= z?(U6ZGHN=R7TLt9JQy;2>9ap?`kI)3fKr}eqkVLazS}k1$U&mLdrTwSoCK~VQ$`*_ z5{xmKAZE;aULKfdW{60~MVm3?670!KuH^I5#9BDz>au#x?7po|rHaa$P5PMhN59ggPtL8G=Ez=x4yDS-(?#VQ^N*y!PChJF@Gt#F`tKH&AgD~CX^-Frr^tbYQ;;T53Q@UUy^df1}guvfC&6uAWL`7nMfQCq>!IXWRzkMUFJ@0gU{YUrX?uYgky(FT-=uvbT zyDk5=o7n`6L`z$=FF_vQlxD4(o^4XMbt57hrfdp>1ZcdWQ6#pnQySc(QrW5Z$>SiL zJgALOO#(>P7e>CR!G&xbwPcm#eLyNPgP%e|hvbX76m>WOv4-XFr*h z!^~zv*x5+z&JD;)r1H_(T?4waG2f;%E*s~a{oZG%CYj)k1Z7Fc=XZ^|Fq1mzOv%jOGi+=LIWhUcBve4vrFF{8sEtE#lu6fPU%q#P_HRI}2xQ?Y| zI5K5P$}i>mCBsgCv+S}Uo99W;*EPXB3BbwYUQ4P>)|dQjWJjIgq4eeI?m<*3mym`) z)D@tSzsE^d4wd&Ul8l{L0z=trUt0suveWb74w=VSFOrOz^H1A=^G;j8tOAilkB0#o zqKy1ucQ22Z-B~nt@{i2xiif1ZlMYg5zj_ zMpvO(9@%4mEGsj}_h1@0k^o02qu=GIw$$mQn$;yElqCovrBFJBEZaaw8jR{{@vGC7 zvUrS?N6FR6wp)9($TT059U*N@&6VbjvAcAq8foT;*%0O#GbYO-za5eZ-~wsO1gvD^ z*VR|1Ga5S|hpm}OGSSEMdeXZ@f&+O;kzX~z2+d}H^Jarpx?z+JXI7@B_i>zM+n91J zeT83>@B6)hAa6xVkgkmZ0t#$&%ZQN*2#$_17$My;0hN#(JyKFyQaS{I(cOY{OV#yL_xQ5D-N2tx`oC@%l zZ2Wos_ubRW`a!R)7=So`dxlo*<0Ld+DvznoM$^m&RbA}W>q`Gu^nLGH$bB;1nmciy z=ZGrRv(y5TsPbdgl6D{QCt+NM1)u;`0ST$VqZl6juhf8{{q1dyXuOZ>elSuZp19|_ zeu#PC034Y+kOOHfDftmC^PYc9vMZivaB@Q21SZ?m^v2mlCIw`WAAcT#>qB3z)>Iml z+rdpuKofA^vj(oai!Sv?-?ZgO>w3KQX%vK^dJ$WC`j)HR0@C6$TUv2R@9GtJU;nPA zZtn49mO8GiI-IwA$?d}fmHtFnaXC^O*hfykQVNzn?cbW|I}&BD0e_9JQeL!>m_{ww zMiU*E?;6;i`b=&Bey+-Z|3i|g9| zdD%Khd8}f}8%_PloWkSY+Zl4H!Tu$`)icX-K^Q_iBIWz&C5()AEzh(tDi=Kt&)bhk zQxW{0R0$8zz5p86PSfEb$Q>Q)d zqYCp|sd2fn`zY~P6Lex}WSViaTGbItI(z!*_QaRFu7V{UujZsRs%5DMD0+w-yJAUK03Lk| z@g@3lX z>FBL)MZ~s<6@j|?&YL7C?Y)}35zF=^k#8m{YD?rU+n=7V!Rg4KK8+1m2Pc#`>~)oA zGgYxt-k~6x(%q6Ui{x(EvG7CO*>Ac@!N1rWyz*RG$^7Rt(#K)&REQEN=5i+^;U_NN zxNh`5yRfuObuCLJj0{qo?fTSo=bBo&*W|f=jktZeC@^=0Ep-wI$+2+Pk)C61D;=+< zEb8gYK!9};7am3WQF8#Q@0NqC9*$nuMsnMC9QvVu-&I=(QE%IdpM1c7QPU968sGb7 zt+wS&?0`n&$nXMx1(7FW*I~O2X3U&A$1{aXihNh)a8w$nEbHk50}3Kx*ILu@)`y_6Vg>4c4hrL2;DWO?Ev88Rpt)U)uBNCXxwDHp~%Rq_|i0J+Iwut&-n6^6TmeB(}P~Ueckn~JFKiaJt-Ptzy8w_a=4Ny z^D~0M0OJ-+RlSZ-7n_N7Pq780putDouS80aK8jM-K9S-%Ox{uMmV3S}A^~}~0qP&e zlquBmKiVUN4LeV4hucySD)9t`3G$f^D25|3Gmb?Op8q8RpD0d72E5<4e+K)QJcDhuOmEo0&hwq8=8bZ|H%`LUTE< z`kW=C-{!v5lu6-MjCX7~IeeK1an{S`OvT#^z2+Krjlkq-#R* ztTPQPome8pC0oiU5h;fll25NhyqFsON#?DZ4?mul;{Qd&BtiDEiY%WL>n1!nk@ZHV z_T4>p?ZM>Vj^3uU^+u%H=uNza9ALi&<6ez>!JC;K@4rwlKl+S&|8SJ1Wa|lq6(Mv_ z6cUcyo>@Qh8&OX!f$)(#xu1@25$UZ%xO#(?t8UCBnxl?n2zefy`{h<@XJ3d@Ry~y0 zYc~QpcnGJ2@2XU~oR$aU(Rx2J9A0!&ca-(ml=E41R1-@-_HhULlPm%|Um&5$m_CNZ zfzTVd|7I&*a6J-Rr~U~sRbzd5Dd1jQd>(sAzgLrxpx|Dn*1KqN+$8+=OI2J?weyK( z45{Y&HB}F(+j3k}04&b@tG{dIl)j^lI;&$dMzG5Nx2lonUyn4;+0WTY3gcsRS?oUd zp6yP5B)`7i^O}5#zLv>Pjn)KnZCf{(Cpc#|?)#3P=i2A#rb;*PIufUX*Hu<3RKR^l z)2h;Yx;yE_x#J}h zxb|;*j(8SuSa2@?N;Ky*z~2gS-wOL*pH^SKlIQ@2fN?AeAT+paSNod|Mx_*@1%kvEk(Qx&HSMPIlwu$Ud3XVcMcki?B_yca<=jue(^KF^NlYH)f2CNogZ0Z$l zTOVx*GJr=XOU2|Lmj5LyKLZ_At~Yx#J^zt$mNToN`k5#zW*kr#S z4XyLz^UPh-0_CiSkrVe?dOL}ci`~uP?b;~O`6#r&*!)%R=rHg{^TU?zQmzr|rK*pc zVvH&N7fAuc`~Nzv4`<33;U_Mk>lzSn*uij%vj6YW$yg}6L0pJBDYQVRBPT)Maj@%f z@cqZ-uBVtRGDkO>V8~5Ladg<;>;cmwv=xby5?2&l$!rjl?Y^3YT(ogrn!Up?K+80w z$SH|stTFVd*Zz+ynvvd}m);Q8r$ALpDVkT(y@%l6uCq_h>BLMd!>z;;iOBi+O);Q} z^@ff2$`G6y_HM{ss$xWMqSPXh2gD$b!<~e(fNY>HmQ4lo?%~luok;Wh_P#E(cWQD( zgbOCJHR2$F<@pV`&{k8-yf)SEaYU6&t5@6Wf#I@)POK`(#W%# zgq-cDGgmj5cAVJq}Z{Yh6QG zK@@coAlTj{^{m|}KAs-d*3o1&@dt+4+==@vw|YGT59Vg8Hzy?Ckj4m7c4jS5106yI&s{bX2f z2OH?WFZ)?mDyp~bp)D2gSbd%NG^3Z{(h!L?)2~g-GmVQFoxJ^xRBuSM^hl6{d8A0u z3imx{9Ls=)0=aYGKH9fQBx{I|&Fb>;Q^|Y^eHhBc?k8WxYCkR6!ogaa$!lzM@GsTM zy%FWIXc80jm@uC;hXh))`LLgJ+xdvt`83>o-f4;covit`cizhZT>zt{%J@pPn?ex3 zcg~>w6gz4jHFYsKcwU(wiY@Yw5RK7v5Mcag+n$K5PVn9{6aUmqX{N=; z?&@>Gpdte<@%q?*dNl?8mX1u-$`O#&i9qogU24)?B1{51Ct6{2gHvhOC;y*XftHGi z3E*yUJ*OMho!CDS@$5WU)xIxEIr8V2_RwwLeq@`{cM z5iYx#0vuAL|ldF?Kb$!K7cuP0mj{3K@XJ4fo;{PS5;VDKNzxp5UtSc z%UPBt=g3HbXcSZh$jsz$?TV5L*<_)}}_-j@XF49TI}GWCkT z5%kvRvo{QJy=xgoIe`hG}_Q@F!|Heuf54qhd6W@2c ziIL4;ygt0CyZY*%jH=iT^GS_5j~}QYfHDShTU5u0<3f~byNEO|i@*11a3>>O!19ML zOusT@2pMS%;NDov^q`*+*p^}8ufRFYO&}M#c&2TB5F8B(q;P=Foi-+Z&}f_)7h>db z#`HfB6QaZo?R*4AQ|5bPnvz$nd~<}7{qeQQ{yl=d|U45eJ+6sLF^3sSQ5J5 z%bD3TJ)s66Dwb-(xhR?{!0(Cc4P)xtQ)j@av(rzN7>YI<>8nK_QE`Z8rf|fGHsTta zRfsiZf+TjfvgO&0zb8I~q26ThQ}_8Zs%2){ua>8YJ~Fe(kBCwgT{BGAu++aC+jRuY zd3pHsB~z#`bpIl9SLcaA&`xX0_@JkyFxh^pakr|-4yH^0gnwn#*F24~5JtHm=h_t7 zeChA2hr={kxPVKfJNC`$0P*8BL9T(p;$ZGlNsZQpG%R#9nRvB^r;lp%L)2{lWrz0P3iXC(ndQ^sWT$8q2-LU?F1ihA;W4owGo)U6xA-I)|Qu+O#zbZBQ znK;3FfVDRH)p`!)3MBO2acpR(TeK`%Qsx@n8Y+vQ8+z8vl--?BjkWoE$-|%%hn;=7 zA|0J)lvpS}+MRPa{R{*^%T75+9tu~dK0K2pLi_oDRX*J$s%HEUA1n4`TLJK}%KjUd z#5dmZ=(Vqc(`$*EFU7Z0Rhs@=eti!T)@Tn+=i8T@JAKE<`{FPrc?x2jcd<$}{zBc|4BCDY2ShrCzCZs3j}JriD-^zj4m41|p*_%QF{soxwRR$GXq zIZA{LkgC?qiik(M0RbZe>pJ)NtDcz;{!Vw~;IzQL$+gm>O2(9=mn?pcPqwW@`jL1K1-`9jI>}z`& ziZKf^weQMhne>k=3Kep3n$93Kz8-Za&i?v!$`0NdYKbziWvZ5pYGC_aEu`q*m;_&N&HZ|@F ze5vneY*e(+Pe^A~lr&;A0>x<2zig-9>*LRHO^295>X5VK<31&Cn_sx!YzDxY>Rh_y z#5ZHHGasf=9|F0=thpu@D_@sRoK~ur(@{T+Wed;Ew|Na<&EdO&HiMS`i!SA7Q=3ckFfzS{T)r_YcrEn@k7P)Tb5bs9A(k7!D&CM zzjNsy&l{WpssZeZitj$dWyb=JU3yIJ3wYOe+MmHPymQ5s;bUeuGg4jvP6O|pMZYJB z#733q4-x7wU7Ab6oTk!jNgtxZ;CdeUE1~uSEF-%#%_(qk>^czwP+o<3a#~bk6k))Fd(pQqQJs(C&O)1NAUxHgz{)HSxqy&L?1^8DB^!EH>@QI1w#2 zZhXy7QiO!Ox6M{5ShH~*5StuwFjaaw#4o>vyjs)LXo&}}rB3M>sELf~UPVI+YEsrM zg;VpE-CaN@-^y~NBM=C8?q&p#4b7HQ&AQ^uE-$CWaD)VuxZhv4(y$iJ0Yd3MVe>{& zZKdYocM=MU41OV7;BQ-5aey}#x8S!M5Ms}*R{ifW zP(4;OHDNA)1(jD{8r3O0!+*KCIXJz=cahEhpLfgZ3X zn$d-cN5>`jri>X7kJC>{ONOaR?%9yjyE2y%y+9x;h`lO5d?C)Q{;FP}t8!Iulf$8- ziSp@5{_w>p189IkcZM5Ga=Nws&Lo%ePvTyr^gD5p>XoA8!_ zMHz)KQf}F3+WwGOm$#Rn$cf6w#LvTqN@lZg4|^HuH!QoW9y90<8W!2q7Z?@-oTdGZ zk4acsWvNeP{UfY%M%PXiSnQ6xRHRa_t$In1yFaL_spUUG(CedJuOw0QCZ1zUWm&~r z`Z=<0{lc47<+=*mMH~ro&Vhrom9)Id#HVX3*JC1P-$kyN0RMkcFciH#_^bcBq(Jug zl=V*;iOi?kTp#Mw(CfXd2wGaIG*rL3U9iR;jmwG3&~BuaC+jC~E^6JV-4M}QrBRdw z?^;)WQt~1?M6)Kbv|=9+{%XJp1wr=rqJYT^V95>sah@J{M(o zh$J(U-_%4~6cHQd>@kyd4`KR+kCAEa*Ahq)Z9AtNSBXbEHr|Q!^6CGYkToiC#yBIGcKT1NmNm8tqdJ$l zF|>VkofY7fVP8n@%hxEghXY%%vE6rSZNpn6Icr+-I{OM_3y2#D;GL&xldmVwe-Vvf zXKb9S^iq^K7n59>ZuIpAbr!wwY2_1>4hqMyS0gfYBokx>tjDK{l@3LWwL2)Z*C&zl z$S3;~W`l>^<&Zp1?I)b6ZU!c+ZNFBeiP5X|V!sKA*DF&S*sTI!iVK0ikSNep<;WXK zIBD=MY3sKa5N1kF)=7ka#B3}-&}yKV%8)#-SB7#8sj{99riE%IswX6;p_b}fuLB^# z^>NOj;Z(x;0>=mbSa^)%JH^|2k(UFi@<5$@Ahl+vGlWaZJ)izFLcoi6Qb=wL4M2`-=W8J*oHV}agv`q|& zXGMJuhkqeeC%Bpr%P|nj#Lqb{OYpF06RpHZL{#Mt_2u-Uq+T1C+{kK86-ANES6_lF zBhIX(;`a9cmf_85aK-w{X_f7>htYvot2)!gwk)bJj>oi$VrJ%@c{f_I^nCy;)gL?I zsNXBk9pj%fj^o$CF`exB`;Fj6Q_eW<%y>(ocdHdb1Z@o0`z)*$PD0P}q-^I2`ToFq z<&HkfxlmYCQp@`_I9i?&Og^80wmb_tlCwLT7C|Qscq@?PhcSn8v4=!IJ^FpP&4Luj(a=BxJXBxr7)YC^(J|2mYs zX+wFcYA6os+ff&sgDq;U<5Y%&%zle%rO`;;uG*%*yY|l>Rm7=b4ivLV1vv}T1 zZTZ|5#5H9~v6ecr17%4(v^exPbEB;D3{e+-|`?E2nSWOddr zAgx?S>%<2n4P9Q>rA;$8`@Ein%L2n+P}vMtIV^XfAwLThTmx#y7*%~`2K>ul#Bg2K zDZ$z9t7%geYe)E(4I_UU;^MV91`_AiEvpj>J7}1Rh z;u>^R{BF<1CiSD?RS8DSZncyNr{pUY*$`;AO&?Nrgt+Z;#7deO8#@B}z&^uTNYBZt z_;8ND6LXWDq&t9hS-(LX)fmilev>-=718y#dOU$tQ^J_XE+#Gd#~?UVqS;*C>6hON zS;`L0BRMr%w~<|ntpZHCGQ$vZ=DBxAat^xcBg6(`4Ng2Y!)b2#Tjh3ZPPTL-x@=}X zp16)=lUC_D0IM! z8MOC$gor@W9k&esjYNth5}$1PgGu3)I>Z!`K*$VcC%vi$3d$)|%b7T@ysdNUMmC*! z${3w!hq5Huzve9-c(a?W7)LTd+BX_IUlplQNWqX+QA4C6QWF@VHfjHmk&vevLvg5{ z<@%{f6;kj|?Z-?8_he2B=q^3!8Cr!+iSa}=Ob5>3l;3t@4%D`wc_3j`B2oL_S0d9O zxjy92@mFc9()9MZa3`hv%A-B+7#~`j)9_GZGM)X!oDJ1NkDNkRu(;uqp) z4DNlHdK}qv^rAPqloSCPGf#R+fBE1>wexdB^^!44LCG*3_{) ziR{3Yov>=UfI~&CU-YSy=%>w(vpK&I*7XB7{O7k9)69taGv1NPQzrPY4u#%Bfr;@Yqq<(i2 zVniARl%b-pO79sG8OA8>7%V?+*RV2(Ck?26vaf96%TQv&GXLcr7Twhwvn2*e;b34& z8L$=9Nw=@__^)vl5M}vM{{Gj9$;1qy(KsGnMGT9DcK(`V##y9b$=})FlE079>Y|6J;a>bRK{18quW9H0I~?@LQw>Q< ztGsYU-&^-*%k@)O8C}a@CV*CT3}KdGAlI^Car&R@$JOnU4(VVBv>OJ3Lkdn!L&o0F zCRv#~-H24P)DkRJr8E2zlW%V$?|ab+GTM_as7!{7jFDB7qRXbR{LgS;q{Uv%y=nsu zur!~Y5@YQgy!B}u*>XHD=o?#}EY-;Y=ZSzJ-m?uf%vR6Jl6oE zhO__V?{jGDvF+f5w1JFDy~)VF$f({sy+K0w((8W)T?p0u{&RIbb*_#)ogYA$D3S&) zuU!D`JqbmR975ss?_^F4D*bvHHV+Yg`)%KlH=EcRU0kqn(dmMh4}9efwN-9X1n*jc zH}Z91k(Hie>;lw41S9+wwEduayD^_L&{*dn{G@5;Mdw><$Byj^LU;12nvX!5RjUjx zwovYLDIb(C-U>cpN>QRaB;y#NhRq6PK!S{WUC>08lugy&OZeo1yMW7pD~*(hGq13k z5}X!wdNq(e^4+M3+jH$u?)N$3UlDC{LJVQwU6`==ojvP_s_q)^d@E~y|c&GIk)&v z|6#I*f}0T{hx6_|Pp>pbx@UoV`hRq{Lkpf@`|mr5@#-iWsEpA?t>nlEgr;nv1|pot zsD9cTomOma+Fvr~k4}LU)9&34i}5kvq@C&%>QR3Fiky4csyn$Q7nab*Glj0{d`@O~ zpq8gejk@XSde3EUCgciK;EJl@D_X6`3*)+kReIde5&p4^3mY)K~YH;6iE;sjXL^cnT`Eqry z`g?3VI3z02=Q&hq-Wy*sO$c}xA0#OBaV|Pl(Srsd8b7Gys~`p18VT^mdD4m-)>3gh=L_<-AYk4T)a@Cjb$ypEGYoT=-N7H^#i z`Xcl;IV{a;{N4B5R+7|*LyYNNt94HPthJ`2EiaHjx1#oBNX_sETo&c5v!YtS`Y2IC ziFw(+xC)P0`3b-tu2F3+;V<*wJ7LZENOW@Yv#*tiK#~X zB(I+5IqZ`dOy<-&R`{zt^|E8qLjUHE5Mo1pUB6UH->%$ zV)bPDB;jvxkJ+UjHav;a$}iW*B{SyqRVweO)G+&%h&qz(WT2)e7iUg9(raRjih|aLZ)|k%3SQp(X|_>t=RqE z={-zTKJ7qP#Fmy0fuHmyYS9nc_x`@RqwQfO$-o_+O_8zFekkQ2#9WOH&8>H~xZ^OdRQIBHP3V8d;?I(5*f;MT-c5a7v#-su{6RhUtN$cE zK;@4jND_zQF~zWroSZHD}45I9~4k}E2`Sl{1e0!NFX`%^*QCb!Iu8fJf)3vA!R_)aRWGt9Y(ScBv-vk#=bYrr1iVtq~4yRlVtZ7Nqa{iN(~9P2zq%?W#zb z2g+072sg*uCOx-7liaoE(ZKXS>w7i)1YrX9!_AM}g3s(7Q?yAv3`TdJ1dIG+>k;xj z3IOBLW4lv+oT3QTMW!$&g5tk%f6TR^=I(_8FYWnYem5|u zYGqR0x>J%eJ-K*DhD<-LhK850t+r8qKUBw8GW^%-za^mk=Wm8hZm$2VJ~ohlcTyRO zSHQAmh-XWqcJ1R`78*Zls(b%pAp5Q|6U)hHMHXaZXg2N4sD}|g7}(!OxtfpG1cam=B=T%U{1#7WG5zV^1xW{HMp%Tk(kM#q0#JN> zI|qJH0e`f0F3ODs&bBX zPFxxB!Vf^%3%>;Cp#E7`D14dhHJ!}AQdXJAsk4qsVnR5aGv(Zid@gc; zgJ$aYXwxo&Kb_b#H`Y-&^(hUJLv<<{R42qtpV-YspCwB$1&s3eT}2kYc5F}@1+iyO zminMa!5$+x_uWi?dv^65mlP){19;3Q1HTca}Q3B}8uvyM+Kx-h>G^9Ka%m)}+l3sauvK}N_jB?XEG%(s9hUznZ+ z&kZRaFYI$j)sevLy5gxm-Nn2Eam}a%*CIP?c;a?TIh{C6li~(Y7iHu_h1t^X(-GrQ z05MoZdu6l$Kf9(y51KFq<9=JjZ4HN%qLB)|{qJJl%yI%H@^C%M{yP%ZA)cNxNiZ#Q zN%^Or(@nr(>VePotN%s%8RJJ@JI0WjI39W&YO}LFHFCZJ|+z0v1i`k7X)0ksCx*d$he4S?C-dbEEBG# z85N0ZUA-(Edcz^X&N(!p4H8Eu{|Km{PO4qK z`MYWa=>ewe>Crv9MZ+)Sv7c+Ddc8PQi$(23G>*S!CcDw_&Y7u+MDPQu$HZsIB`$ev zI$r8mKUV$gm~sMqMcR^E7`2e7&WN**H4QNew@k@zE!A@!Jng$wvr6GZuQ69K=~g=A zT1OgtG)&%sQbnM&?C2BIA2_a7t{nld3bactk;sOzv}D>JixH4hP=oFySuqX3;|=O*LH} ztN2v3pysP6WqKNU>+#wD@T|a8|#f62mI|CFl+yE-g*! zw^9%XoRy8Vd9@=GB1WyO5=6Uw|NcY%g19~1=Sc$)5dUjTn3e<7c|1Yf@`dkU1sCac z&p7vwT(VE;s%WyM6LWscN;?+YRF7;z*2)2~@)B8!%biADD<>pn&%Ss@O1~!fQT!&N zgoXL%j$;dParbA)m(QVi#>GG?{<}3Uq*JDKk4&47P5gGsGM59JNxl$R8`G`7p0O7+ zWK3>JgToatIZ%Z$5Oq(@l0&Fu_7z{VF~YBg7tWuUh?a&SBTszZV8{T?mPW0vaJ{Kk z7y4Spj@W%J9t*OCcTSBUkuYu>lqo}V(_prCIv?kn8m1;EMY8auLU7=d6-T^?P~wh@ z^hL)?XcW`%oyfHOU+i~NpbToBL0(X|>`ASNKTQrh&eGl1)co|1hbj2k_x-jaFD^D( zqZV&^&;_TidID7Gbv8#I=oh8L=8R$sm%9^ZML2#umb8`o38K0ns3m9rJ?vxgsxK( zIxe*cbmJ|x?zS67bXvCJ#86py85e;Lv;bLs}Yrz4Hb~vR&D_i%GIFTb4LcP z)LU9v$!#wFP zDAs3?4{fX?D|&2vw|Ie;V_}=C^Ilur13AACSaoN*?=124TBGTgz}X53 zaf*>cm0;SS8}cn>jyy0L5@N_Y*&_7nCs!0%9qMs`odQb%twC7nSe)BRK-#k2{Wl%z zcyWX0RywetvnBr+xE4XwIHS^3No-9ur?8ti5TdWNoJirz`O$=iVEBJy-0IKrURv73 z2`p8uEK5h|BD@u9{<~e4Z6(~I4L2loc{YLn?;qkuklnS1=!G9mbXqM=`h-}GZQqf8 z%8w!EG|dqiY;bUbfxo7nnu!Sz&i}hKp%gf|-W+8*$s*7_XRV}~y;_;i6>VdtT#3R) z(vLY!V$@UU_VgabBD%y_sJcZ>Jylg4o+X;T^1rI5le+PX*LNK6E1Mu80M}I6msvJP zY!<}eFwGfs+{@{(e~0-STfX8gNJ@TxK4%UC;#G1yYDa&$$hFoJKX%LycaQcmL8fWbPlVMN_#i+h$)kB)=W^^Vb>=1@z&@Ueewcl#> z^OwP4@|lbI;{%!hnc#`O()+4Gx!A(onSN~GKcq5`#1q%{?QZ597IyqL6QM*=dHVEK zv!WZ+8m?q)S6;L~D;N6a@3-z(Ud*LIQ7s7vJG-jB)B(E}y=7iZ7k&6%cpwz{jHg%R zkA4wB-4QI=a3najGZAtUyqTec<-rOyz zzA~nyPQE#p?C1TlRnJ0H5}NFe4=RDEeN=jg?*wOWUwcmlg!yC%04jVp^CZ zR6D8;$7XbnFOUc{9J&oiY`2sL5xR#nd!tX)fTha)AKXLAD8I3$D}0|wo_1}8S!J-wOIZNx3e2_H=L_Q2HjFM8`D zZ!WWN>~82LB9EZKK9B(}9XWhts5Z0_&KHj1pnv&0t_*lVrHXnp$qFLRPF7FO4=7KK z=t~53WNhT<7G-IdWo08Py^f5`Zs^B8`~&5a~zqI5XQ9a~Q@ z1uI2WwFG9pI^u9ft2&}ImG0MTbaOZwKT941Bt&fpAH@C7cuQ!d)8FO9MN~!>aSk{o zy=h|$0{~-r>_*MP_SkA1I?Wl)iwiA(Fi)k<6$AgH4B^iWd)zhHFxkWHkQ-w@gAoU8 z5NrXVv!P7NT9Q%0bg0R-E+q@KuW>1CijTDV`XS#EIU--ByC^}qtmn|P&X1>xzdJnA z&va$jrqTQjG#LCJufI-QWOaQz)bd&jy)-A=B`JIH23X<;l;Al$VPEwoy6yDIeJ2BF zE=%~?_X-pS-0UUd>{j0Ck$2eSJrCMQGP5#&O1fE1D2RM?;x2rtw?J4dp5}(0^oXby zhpoU6In!l91T5~!qJ=1XF(bc+uOuyOkg-<-z);ZnGXm+;!d32A?mszEcimsA`0`Vz z50P40=(iP&vEjkUq8DI0L3>1vaA36GhQw489NTMbyr{1e8;^ z5`3J}9x3sNV^UK4$a15|qK$2@zv94T>e?k;;@2!pivDKkI_itBp9t|L56K0`Fq^t$ zx~dnOXm9=(QvQ~NCuFnye9XXs1&f>cdEF@wI1|3;E)O8w5OPjn_@U#iz?~fN^n{>0 zn*KJh=+(rzb(O`GZ)87oM;|}yG}p^twJ~LAz1|#|G&qazl#rNvmA$6nf}C=8-`06b z9GWwOa@9jqb*R4jhzjow7k07@2C2cyV`zgAd^k(EmKwcb@8JxzV7Y(5&Z*;5<9Ca? z_a>rYp+W=@F~W4Dv{XN3{1KM|%4b;rcG_`8&K`dGIc*aPbBq$(86w!8v{$MS!4Lw~ z;cidXE2cR>q>+86aHZWtsxE`16_T3HwfKWcAMM)F*gWhz;bt$G|0F--r58 zblX#p2)egIn*Qj^hLW7I@VQAt)dF=GgCqrl@@%%b7L|_M8)KCmya2^!zu2`=X;K2{ z{9npcS%tcG(LRx|R2>^(m!3qnCl;c$)SwK?SZRRe_u>f#!XQuHj@V-wS}60lJJZ)N zZ%Vy*<__lR8$=~!-j*2ySn`7)64fGXf=*))3ErX zFP`ns29@rB4)XT@5sgKPEZdL%N9Y>r1PkF@dMt?V zcsrmcLw6_=G~)H=MV+%6mmX}Nu2JYC+rtL$aV{HRlD#zn*Ca(!pw=TpZ9T zrmf1DthdKM=AFnglKRclpB~a;qaUVEA--LV3<}!N4C!X z7MG6TqE}xH9epzYK9IvlYFAzX+O1*oB3rD>aPf-L@3@w9tk@EI9u$Uho&c1@9#iyOIFOzx z-7T3$(7sgy{Xy5i*!>pS6|2AyKT=6(Xr9T?YjWDjsUIr^33n-)jD?Ww=9V` zJn5g}{CU~9hE-p7ROx%(w{1yBOu2KRJq8iLe#CnQG7oB2Ca)f=&9S)eyi+Q;6hnSk+{>Y zVL1&C%J6%Urxo)U>q3^e;*?W$N8^Ler9b5e5APLAz-8VLp$Btn{%^<_t8*1_Vb}0wyl;=Eb5DPeUMlr#RFQSA%e16g*rEJj2`yB@x}E> z7^h^mUj+=6F5*7uGsq^X0p)V^tBW#b)L-c(6gL6Fi#XI;vJ#*>MwG4freV(MlHSn0 zN)cM1#8CA)%%`=O+ld(W$TfGm*faqhX)mdop>kf2!f<>dc;@NF)3sn;BdoE<} z9lmE7)}KH_&QnM&pb*F0seZ=yEwzM)j8L^v5x7>X8dcJQQq!;>Qs=}s*TtR-!7u&y z|NiffECT1)pHONskE>IqoQF-;0&gb#h(2qjCZnnoD9ypYNdmIc7M2d%fo{kh{=}5 z#8~yZh}aXy*H|VpQY3^by$GnBy-%ioQe}mv58x~m4tdMNQ3j5XTD*(Nga1A|5S;93 zQ@I=P)$S8UX zol~Gf9XpWpbVT}LsypLRh%`5FkQhlesHb2 zC$^}OcC8*NqQKvtX4~6Izg1O~eG6;e0^tDCYiT(Q~vX-ZalFe2i~3Odf1 zuBQ=}Ag2EFsXifuG3(&H@4M?Q{%x$U5Hc4~*;jGMdyQNCTYT&*)+6T!(*&YS1XS5I zZPW^Hs#zJCu!hVwonu3P`Q=qhfx}=1Fy29dWK4`?SZ2pJ>z^gR#f^<0b;6|KL+NK zy4B{sX;Al)&JwBejo(daLrk+wh z5v`>m7^jT^uogiaPVv0@VxFL>*0)KhdfhDT3ZO}}Lc{8C7gmELW&blrZSh-6Ic^lJ z*K6@~bZb1{c8^ZvRgBK(ovr_{3u(tyX0RgTGR*HhGKs+T59aDvg+Bb08y*C#0-Yd> zVIB3v)Npmadu43Zt!VM47Xo(!h4hT@9vb#^(VN%#|GHv2EF-sBk(+HY-J zR)&zSEP$l>gt0Arbr-4(h~7@89K*85U}Unpt);h{cC{|Y3T@oxzyIHZl&OB(AB(%M z!bajwMUdIbnl0|Rp6JHRzm*OV!0%sLzxB%uIG;(+pZQdswECCc0k{wp`3$S#*DAby z_8>Jd#-rH*q*=9i&=Mex&~3kL<&J6Aw9F~xs^nfhuF~h`fYc;dFH-XGUAe=?;=h_m zm2zLrLXVq*gS%`!{cf)LoUZiU_P6Lq`s@!Gcz3k9**ePn$-BySKEK52v6a%c`R1oN z@^JO|9CVMFhK59u44?1Eq+l04V2>OW86Dh^n6Nk_cVXi1QT7z?$r0mk<$6j!)E3WJ zz1H9xZJ!s`P+%)Gh`hDYtw*cJMK&sVouM(BQeOhCps8PQA8{sM*D7XKw#fV|NC+1X zN2{8Rl(dPnr=YUrn+3Miz7f=M_s2f`3D8MFThGjw;^Zu!yvF$DbFnv`Pj$I8h@;7P zm}+OCi@Hw+SgIUH;FG#))_9JlCV~;Ilz+KWg}fjjt7>dWM7H=<&Q_7*ryPc5TNO%{ zGj8+^6KU4;Xv%LFF_=em95h9AoVh=(b$O|7@)Z;|uv=+g^>xS;3tvcrK641-Xw{=q z;|iBtpP#6fII_I=)V`~mr3CSP8?awo55&%Qecd?KIq~H}`D15Q5LNNqwLQ9yQkpd| z1;b8EocliC5(~t%X*OMNb!t~1f9Ln37AfzaD;|=|4bkhH-3F5&WX>0uN^qxMF^aC0 zSba#}!AjY$u{C8#dhPQ;z3oK-oo>Za8YhN&r^m-8pC1OtW?{aw`gHeHOQ%>pzW*$S$j^DG!qrRLrhholX z-+9figW6gy0kQ3CqaO|LL(=7!AH+P?K=q%8-GP$%d-NcU6NmusT=Co+m+^zsgmE}N z)o2|Py58SIq6w!$;-saro{Z&MRBAw%DJ#e%bjRGDnsfJht0`|E^)3zxC(&h_#p-@2 zjzejtu~8l@8ZILJSL5$Iu7tSa+RJ(5mc)7ap9TP`V&DCzXZGxO$?|9I%ZzZ~z4&gg z0E_h+>=RR9w-Hp^?BG6OP`60TMvA_}e#s2M%?`%Qv0c^kYIs+Y$%pH)mC`ThFEt2% zD$*VC{1*o0h7kTSH}RFIVX5Dq!_8nm=~_5EtRc-_p) z>#x_0p*mE~-Um4<(###y^ZaZi&~lBoPf_)pek6XsRdC&d)Xfh47<>Viiy7nwa~2}J zDsh4Cb$={;W=!k+yL^t%fS?z%q)GoO_-}p4SY*S9K5f0wz>^@vRY?cUTN2@#pKSgs z;$SaW!5ilkQ#Bfeb$_X(DLRYFos4wS_zM2zFlmka7#LsD? z&d;bua!{@<3~BvvU{pyynN#rznkk?HGj>(SyxOZ2|~ za4)g~=KLc$ixPPL0%I)`RkjCzrK zz1Fw@YRaWCtL*(#SQLcB@P^B!gkWk1g!z*{xu&Gn{tnBRJt?JzgZsq_*rfT+F2$#Q z;GU5>+0k=aIHpCmFsiU9pzd?I&GiI_$IW}Q2@ZV))R#-$&J zJRNrjx6qVNeNl0|w@|^4wMW}|1UI-g4ykK~Vg5V;>@PZ+W2`ajf!UrzVby2A8zNG! z;YI}TwR|Iz(8>B_qc`Co?TyK~p6H&@U0OWv8JDllo*0G>HB!}XwMykz4I!U3o?JRh z+HdW;N}Z?rF7NsE?}_MqCcq9?tX`4*AT)kJ`=4~TVzsIFpkZx<|5jn}ticmGsP)}m zX}`K9_sCE}FEYDF0@0CFKH;X6>erT#cLMJzQCt3WMgKwiddP@6K$orqY zpdo);;$hW&Azmud)yMQL;-ewdW00^&-IO*5Z=9bbU9z0lIVMEMc~7y8`32+PH}1C2 z07^Yzf|)M|JCmBzpb=`L%k)qge_1tSpylQv4YBSfM&OFY1;qfbwqW5+-S!(C&5pwS zB3dOecLLA#s<)K=KnZ~1B_E>sfK5!a;+?xANBKtsN>saejG@cyg+69U0}i9ze?lfv z#EcMY^$3ML87yD{0a6nfuXXsx`HsjTQ2;WFzlLDr!U`umX(kR*>#lmSqI_92u$$j@ zYeP$7>x=L9O$}|{;bc>-R36@c1cKdb6n^Aos~2&+rEHRHc}w$W`f{jn?-dnspgIs^ z^|t&O^>URc)chi{?(;bs<;Eo-_`ho${FFiV-K?kmB2OZ7-ua7o{@FZ{m5qhEKWtP3 zAm0>}nq6$ve6t^1$^)-;1c%B#lkppbi6ly=mthL^z5!36Yd8yaFbOp|(I89bg5% zX3xI=7%Nu4oG&(OT88JgFypUXxA8hxz^i0#8&XnVCIUtW#`6aGZ%0$Qo{oAeb!$~1 zU>-T+c0P4s#U&eUck09KX5`m!9x~PUDl61_^?j83TJhuahHDXE2!|W#wVzWvtn=RsFBT5nxRG53Tk!JbFggD+{(aON_qYNY=9 z$m+Ro&l8Xm2zl={4bPaPytk4gW#Mkl6izIsoUpfZU%mKDF)3#C9v{WW)~)$74!7{P z^a(I|7pD^x8kj{I>Q*TTD)Vq-mjK0);Vy&&`>Nn_Q?7_%Bm;SUPD@sDJ zOC)1v)G^cB(Jz5+yqNC?Y0AXgtDA1_njafr<2qJiK~C6PEnitue5s8p?T28qq9q+8 z&_&_Vs+H;w9WC!}45b~SL2cZ!T$y>3Gskd2;l0G?H}0_{EZuw&?O z%xkY^ixfx^B6eEqob-quNWXKqn(1D69BzuxyXzOdE6L9zNrsku3?`tzMk?shYLU{& z3yr!?$>QR~G}~hS;x+Gy$ZhbisI|UO2URP4Y&pe%1RH-LwPN|n<=g7*rZPX;p2jFt z0t}4X-Rv4zlZL6@VdIp63CBFD*bd7duC$`I_Z>RyrfTeDfsFBUx=CX#pI9%(*)_P% zt@`^Y-C%jOF-~{%g4KzE7gOGCFD=#A;;Qua;{zpA2C}n(Wfb0gIrKKZ_s%*vYG>cr zsahMNN_fW4jVg8IlPsL^-isY`_%Tjza_xV#k5%$L2UKE~{ zcQZhI?t6xe3bfjG6FVv*;$0F$o1b7s-T6y#GI&Tzsrk0qaNF-+c*Vo4>St26&|1Zs zAK!??bi>aBcpn?9To!;M#0{mJTww%(EB;m!;K|Vs)n}InBvPT{=8C`7oap~HYa<}0 z4!1koz1VXZ=2}i+m#GxevMD3K8?MUwGl=Y4{ReftGADDlRyc6Buf($=<=V=kdIj5M z97Li~5{`6MXM>(w+-}uX7*O5jWlc*V%P;sN#)CdP5FH^i?vwvF%1B8bdmtXrib83z z!oqvCJ>`|HvdV4;_wuXkoA<&2;ZnL7{XU$Js?n%jB(NS|3lAg_6n6e|OlQ60 z-|6~6^*o@g?jAlr&8?Ii-V25^03;d#fZDB#_Y(b1I=U=@i--fPIc-nLZYX=X5EYayGRnTCDG)9r;cvpA!-*0i0dXBe-PVCou`_HARZ;h4VQC&=XU%!q z+A`qLc2BIY3-UOz_gRIrw^#AxmRh7w*o!#Sy*o4>hRuFq%ZzH%b#sr?`YY*K$hJ>N z23et$%tTFke(3J<^QOPJ9u8UDk4(Wf-2~;++32B{x?+)c#jH-{u}Y47bL2s@FsIfc z6r}Td`xFKXdqJ3qpThx5&2!2u(6xFxPH<_dZok}NCN+3>dWui*b9Zly#!EiUQkpOu zBhaiPyiaavDnKVYSVlD-G`A)sZDkQ;YQ5gw_UHhkBLWNtsT8)!FTXy@w{Y;;>)97#t zA7SX0D~9aDs4aIw#ZOfCyFn8v-O6)DS+XClBqP=O?Jr(9tpxFw-QhHSlkO^bt#`t0 zDxy%B?>aq~*DF>@)Eku751&7{A)6NMIwTd?rK`UiZ=qZmJey?if1FZs@QsR7Mudv#R zJJWmorK1gPQm1sE0ff7FKess=MS^cT29dT%G|czzP97;z-ERl~MsSh>jDp2AICB!` z2rFAEJdB{Ws%&AdbB@Q&3oLv0iVB2kPc=Jz&eJ?CDj{Ih`c&)v-9!pYGpOVi2ZaXy zPJ71lA7#m{-)lub=*PVkZ1Xf;QgD93E|#$Uwv=6d6g~W5U!}2tJ~1FJb#UwxmgEwC zPF{R7RI`-Q6aiz&-+oA0_LfNNN*mvj=Ab{ zv8a9OkzK04t>`POU~bhGllQbX0O?uBn$QclI=ujirX3+dyKw4M1@$jp%WT zjQ_5tP``dMpfa;wx19nogi9|N2^}$58_d6ROWj5*BH{bgwb2+TIMNU&O;I*W3p!k4 z7-PuQ1$I{l$JwlwSNIUN?SrqIp4w38+K~~4g@*lDC21z#ERTvf`mmP!hQ{{ye)Djo z(*2+;R;~ofin};c`-a~E)AUJHf!(2YNB+K+vQ{G47E%zuU~z%f#d)z>9)DvOo(>Gt z686?>?*OL{>B@d%;TU~WA*Yb?BQ{qD_g3i9*}!^jyAn>r)Ddl0haA5CXPQ^;e>nHb zPJ|}zBW!4x#_6!UQ5AL@tA~OSpZ)# zQPs<=22(RBN!t#B2m~iLygj=0kBo+%7CmgJgP?W$@ncY}5M>p4yPqbYEf8ze(Ya7Y zW@&3hVCTj0Y)K6T@b@K@42Q8+ibQNN;LMtK6u&+-(hB-fVRy#f?whtt^n61g@79-j zr0q(u#%;!7x}zu)nO0|$rCfUQ(IG(51+U8we{nkvs!Rl>wZoV|VGO>u@ro`AC5V}Y z{uB3EWHv2GK%$PHTUfKDZ%4K9l?7hY?Xmq~F))k^w9daEY(slh$3IC@@}O}4M(E%+ zf-FBv`aBm0+oRInpv4X4j+`E~x{=nNFLli2StAbMo!cf`R1Wsz;XH&39n4C(L{DtR zG4qC+aU@z#eXiS@j$s$kF2&|mK-8^U)3NOuMv`n;%|5cHpGfYn6q)}n^Zs2P zBx3mJy_$;H1N}!;I(YdvZtOt!%eAk!v2z8_b%>;CWH?G+j(M@n*7GbfYnuB=Pi*jY zy~O7bu*MgFKST+tN>Dt+U07b4_7^hwyWPHdQhTJN_+mo?M2%kB1$H*j;G3|nxK>Ao zTUqK_45$6b?c2bNm7hp@evCPNGJ)=x%fIDO%?sF9Kx=+Wa!e&x$n)Hzij?XR1TF>Z< zIoVnrB|#QT!?sIePz*}Ex`aCW{$NYP&$*j)k(yt=NWI zSs-+~6Li#{RKefWL$I`mv+ zMz+CVy}BG^Y*_bS@mdwF#70uIC98drur@mA<%=S-&urB`ErKcGlx)`Y8aBL;ynNj< zPZ}Y@&AdMTN*ENPFW4KI!o)@#9|Z;i81Y+&K}tlQOkQL8y5A{P+NG>_IcKvP90Fu< zBx7XHZ^xbs$jLv3`SNfLHVUm9p=9=X47qO=N6NNIU$1;8%aIpaDHAse!mvhJR;^ch z{QOkdu(V=8)HD7!&Kuwxy8rHc+}J%?%{P>izQ27J4C!A|3qP|Ku<`}kFlOh{j%?ZL zz%CE|aLI17M@r^$N85qnnpq4Qwrz36Q-i@k_&;}#-9Wu@*a^LK^wXgRq}Dja;DAkw z4YqAek!E8#Z+(t_+v%xga6WmF6|{S_qXK{k+9If8bOjccG2;mC=zKB0pPwBsnk%VSU4fo zR9;7woo`01BEmIx`nE&}B@_Pg;1!*|m>6u6bRN=w;axdt>Voy4w)gV2QPr1j-GjAA ziMd>4Erp46Xc9KAY<1<~45`ZQGYU(vK&t^dV!L-m4teohn;-) z(l~|&y5`Q)B|lxK1PxgPrk@a@U(1PL#lG#p07}G^0ggp5J|7#U%wy+nSg70K?Ra<= zZ|L1m+aW_)01{g|FGX5|XDf=LQGt?od!KuY(oxnwCt=(7?AnUT@?T=OjnW!iyiN@| zPU)xOm3AcF`dYLj5RA>Y=dQ7W-}poRJq34_mqRDJCyy7sFjk>ZV&6N@MH9Y!tNRqM z^$Td0huF_>fwOIklqSP^%dYb2V=D%_*Uvbe-ZKwdmo40t#PBWluh{S{t8yPzGS7n2 z9Qm{@PZa7t$NT_2f>C4Q>;m`LV8Pcj5Wy{ssz20(NkklHs%p2&WC*%rJ|{^E-1~Sx zzezY293_XJr=o)r#`~MaV)b*2`~5Lj*x2)?NgccqWd*EhTjf|RHna&?9Q}x#2e)Ny zR^-PWdqhEE&}91shO(IBjBaHp3$QC{Y)KULx#pnVW+?J&bg$HckI9G7yS^3gAJF&Q zhR8%G zMcYEzczJNXp^QJB?J1!!JizAWhPt4~{S*vkWF7zhWUQcR5vfDvj;4=2Jz|Fi^z890 ztCm>d_&$=+0cNlY)L`$(?K@A_o}AIhpe>ulBV_}?@Yz=#6pe25jvN)S@>g4t zXH(>%7c8VU(&@_LV@ddI0G)bfM?YIhO&rcItXK^>m5N^jkd8?g7~f^pKP__5)=^?o z!GNY-+R=~$L(SD?=kSN@IP-?xA7;YmZt`j3c|X$^Uj2M0pfDS6>L?0l1m zLCTwtT_d>LA%I;))r5i20ng>$Rv@Ag4Kb*AI?~ia>rKuADu|S`taEFcS=!bIonM{8 z_;gOSzcye$ovB$w4#3ykG~;L$;N#-SjJt+Q*$h%$*+eIbb3yL{qKE!T2t7hS?VVNG zW}c}J&8X@-S6a|N_h-ScYqySKsBAj^c99*slQV@X15ZHs151;zzl7kIe78KI0g7$T zI9Wu;r7l1LO*=qa;kIPjsD43EgvYZ?ubKGlWcmtc=~j(5H*jqkdJHvu%e>&W%e4wo zEyWZPeAjttvMypWILX-F`#nZx1bh@aO>4#@0)0P6Q|(M)fcJ+LiuEZ4wFqx)bnwY`HT%Z4 zR_9gN^&lhQEkZv7?l^skb^JhUUHx*OCpM0h0)t7|Fh0Y5_<87Q#Y6wuVYs9o)YO{} z0REK4vq|~>$C;mn)tc)0bbx>AEwY)lK3Z;14M|5QG=LT1$AV@OY}_JZ5H2dO0#hPx zw+*!^^~MW?#(+Hnn6BQ{c2$PA^Jf{?P>Q=3z#cq!@QC6Nybzc!V(Mnf06*|mTDKlv5&-y zX}nllgsX*N{DFXj$GC*G_~VG< z_MuI0XlLoh&`qQmNPcP6cd49Eh}eAJ6xTtOR>NdrX&7f>V#80G)#kB@L&R4~K}CIT zFv9=f9r6@`+rdY)ERVJI+x5?|TI#C~gDOA_E8r>MEYju=;m(Gy-{52e58CY^j%q3) z9!d*(ob-_R^gm$9D*f@`wzA)5a~B9v2JyeW;Wx#ML=G8yt{w+5D?TuN6N1HfngMM` zOsZ=URY?rPvykZE!TLEjCKy?Y5070a@Y&)Ftx7F3mv zbH)75n;uO31TVk1cMZCJ(|4vsvJ5;*N`7|NLJKg!t*I0V? zE_Z6nFKv2IdpZp-W+`8CvDIe^Oo5WSH%vj`xnPIP`I0)mkQduWEb?yzpNej*UO>0&YXFD2Wi@A}p2mZmS$ zy%-CcSUG`S*uwgRZ~Y~Yi&LuE&W)e_rcK)6_VQ$h#+1zL5Zp}f^lLF_)LcHrs=}ma z=q`LQ?70w1>6Ru=ID+@{FaBM=v%$l@Q)mCRIbyxseEu#MUxE~ON6%lo|B(SiWx(DM zzh^e?q|IZ@`-BcO^-O@s8Tp1^xBn(6XM)S{lsZ~Ln9nH&#}|vQlqz;F)^4O!ZJgmg zUI6R;97u@LjHQDw9b5}G7#_g@$Vr}MN#cF!%j};q049l2#?-ggkB|>CnY)lu2`CK% z(BN6$f8xnib~UNBPYx+y%(R#Zmylw0N8rTM2E1$G5AOi%TKSBEnlTgock_39S4&db zRwi+qeTjUOytz~I6nuJw)XAzINLGm$P<7u?Ro?y^|LpKftfQ=Q61XAaBpP^(D>311 zEf36~z15+guNgV`wNUN#dv`eNjuVZF{GPo9mH;F`j%6w)i>- zi^)Z+hzDr7*|o%4+TE%D$MFylymDymk_;WDG*K z%rmTpkY%&cxFRM>y#6b!OQ&I$ZdV z=%H(YWk4hc7_waTq&jH*=H60j;FB2v#LoG)@1xhm1K1(a@em>>4Zp)zIK>32c!bXa zFS_UZqf~ndq)DEI(2Kl8kF;j{t>|3#RLlZ~`g{beRA>gx#F^Tkhf#c2);vALCXNN6 zd*JD>fEuOwo+?vecK~C4V*t-NzT;x*{I5#cw?GbzlIymW!Vrjh{~qb*0a^ys!B1I;vUt zus|AlQn{cE+ie~pxI!J9L;GhzP?yeU@5B!Q9l4uc_LA#g2Zk(raX`i-BwlfjPPVM0 zl@1780Q?F}($@6IfU8-E?VWd7mD0(brcX*Q0Da3&%G2lRv>2@~1uR>3$8Ts5!F% zE)nzFe*kLK8h77m1Ky-2@E-iC+23AUH9K;G5=*b&!$n`CE=2DBzww1a>el^l@$9dP6+|^gg9{;v7a(3a_m`3a%_LF z08SnQ=EDr^I)HxFd^%1mRTIG==MB_pM<`CV$IMVp0vmBWYO}w0kq4g&hvbMI#r=Ey zvlS|Tx=b4c>oz)o+}B`9*yLY>LDn=~Rcoj7xVfii1Ht2PdBbno6%#)2I@YXWIT>25 z*!=V94X7{J@n;8pvj(Z38QBHYKzb06MD-vShw7IRRd8mPF63&hgLVZYkMt7u`Y|B) z{|4)Y`uwYDmxKBnOmRJ#TYLh$Vjg*WqOqyvfy!pSBF_`*ObGE*tVEo#6*uM%npr0+U zgIKmPpX|GuxK-}(`}rU(z#s9J-vMb$y5=#UL%j2(87Q;hLDPX5G*3Brb?#RG8affY zpxX(MCtCZrDmX99LiwmOer4VGds3zxz~}mPM0Y4cIRGY2w>bsNC@*O4Z5z}@6cVOV zVOO>FJ31w4^X(hAr#TOw-oXK1&j4F*jAj(be}iUa_Iu$>FrGW)mV+rtOscK1-0SwP z;ehPNwgOTJU_tna>%+eS^kn16^cZ;X_s#Wm+2+%Qemeu8vGp!o&I9T>lgL0yFZ#2! zEeo{2HuS9TUkQtD13amk`DFhA5FJC<2V$Avic>76EgG6nXE(^N|5T{Re0V|U5|+nj zW^3|#<1c-Ds^u7yedQlxkgSR2B}GpFH7R{dbe&og=L_mkCn@%28xE6|pph_0-x!qS zEII{zGz*lfo_}PJ0cXX4^}ye1fJLa(_FGytpXO%4$-cM`Xr}=d7@0O4XrWno0R8TB zZ0#B+8!OrK<_8E4459#w@8rDsyFfIx_1h(rc-dsyS((bWYq9=@QQ0zlMf$GX zbbxYkJ)-+2FzVnDdi(e{2z(KYdeX1iAL3@1O^>L;XlQ^t$D2QW=5eZSqcPjslO9yw zqEN7rLFD>dlgm7Iz5Kz6I=&~2jPc7IQ1t%5Ao*^B00RuFiWlDI{dE~#V zpUm0p)kOGwSv2nsc@lEZbYHKlilnRZpc+m^0jmu^EV%A|Mo`l|Nw0(QlOyhpjw(O& zcJyM%wd;LbU<4OQ-9|w6;!>2q&@!V1&>w{BEbPee8IVTXEfcrRu=dWDjq8kQhb=U3 zOqld1zpPdFIW;F36~oQxz?J>4yaGrpgvX}^#%2WWb^fH8nfir%=YHGeh%eX53zPzUf2$^Jc7l(@ZLtGCnhEO1cAqM_kTf6QxZMmTNLW?cZY zZ}&((z$ovr6WLHo9jWPlgVMinu3ysH947t3-snzde((oh;BrKC3NCcNx)wmCe1y|3 z)O1MOstFd{qMM>;b!1DvgfD+6_|8*LW8!LX6Q;>Gjtm4bMyEb78l!K`Q*1-V5$C=sg zcIb{ND&UTtr)NxN&9RodYV9r}0JwPp>(&r#PdkHk-O72^qyfl{PH)$_e!5M}na76TR z6?B2#(yL`z5l{ndMgaL(!YwH%WEV$k3!Gxo^^}+R*LGbIj zS(Qy68;7h!_{|u}y&;E_3Xl*}x|GoE0$MPNoM%Di7NAMuSUT`aqd?wL!Ob2*ho9_C z`)c%&IYsk?%>Z-VKV5mjw!ODj(gA9qW?|0*$Abe!F%Kl}?;8!mZ|Sl0R6@K1f!5t; z@7^sjE2}3VebsQ$LH`fdOZO5z(g3;<;R3Z=z&4>urt{-`k7XSWDXM4rWdMHYzTGV3 zDLS!<&z?@UTakw%^kA@!Wnw030Qn;&=`dp5`^XnAUeW;=!1im@gnlY7Xu2mh5%eJA zCNcKJjDTqo0D@ePR@zD}uRR-|RtX?yw}fl+Bcshj2QMz4_yl9HD!1U8K@b}`dVKM> z5Po^2@7J_WVExOLDCDJi9HfNNg}!}{QmtOk7kf#r<=sIwl+Xa;)cZ&-A=m3~S|2RCri<~YyBL#n&>eXfz&K%HD3a-f@ zN{x1ik@%0~?RnQHHrb5T^YRtYUn%*P(K# z;4{DC&Qy~;(a42#R@@KZWJ|tsSZxY6^ne`pH`s$$wxz=S++E(i&BGPe5x zoT(vZ1v!%-Fdz#&y(LlTmnD1S)uboEghDrN*?<}t^D!}E=DwW*DXgU>o6euOe4Cbk z51w+7XkT|K;bSId^-iWI<921&%#COG$`3&85{HWOY%E;93gRsiqGb8ne;H|1qFHTP zAsnVX9YME{B+?MZ-$0-v?_9s|2cmAEvg?&&CBd8OZ!X75NEbfxH&8ib`{&NkeDqDE z9y^kSUqOu`43rQeBt%`ZHKp<#@A2u#G1*o9j+9wSNM=!F+&}04;Z7$kkKxfwz($h5$!!qV#q&|3RbMTfd_Uv(ur*CTNeTC3YjsVcSF0O-`C%k+dk?kzvld(U>eAv0U3D9b-VxO4nV zrae1&B2IRqsf;5TnKJe4bW^I??dGf9SmmAtrZ8jVLZ}IwYt)i9Fnx`#3-+yh8`p_Y z0e_3gec;WPW9xPV_j-=2;?+zO`6E?%KTZ}qF@pGe?B5GB63G~FU3WhfVQsQ5oCfll zabEP+x_Eu7C8@BvPfU)UXmx<0M3KXsE}*ldBjRehBy! z|7?>|Ej`mxvw!%eorNfA?ZY73wSDt9IH;hnBTgET)eKDVMA?qV(mhcTVz|{$N)!Rq z?Fl-_XQ$J9vuu~Zf1t}9Cwm+rqfEoRIy~&Y0?a31@ZjhM;i@e&R&f$_yjQ8RcQ%Vn zWIJ5>TsPIjcF@>1{u;E}-}(3!u8;-_dX}ga`sy`z8#}{4!mvgygAo%sZ(6(GgpdEs zXY9S^)-P<{FC=l>TgtXd4zB{52j6l@|$$a9mkNqI4R+c^zz9IldfKF z;o$!F6{{A>;SV`jLT?qB9XuzfJq8&U7;2Jhp)Ht3F|w~QS-(ki1dE$Q`-n~L2F+_W z34L&QJm#)+Dr-_%nX)|h$qS*sopCrM>>0kVkYg{=^pe@(S`+4s~54lWse}8nEpO=~^ zu;vkMF-j2bJp|8m#imt#qmf;-q3kn#j=^`s0tz917-2D+K;naWEHDuR0ppkbPa3jO z6St2h)Rn^{d$fr!BeD%-XzU6Ui#dU479cv`*qus({P z^L>G~@vWgC|jj2>5!cqh2b*AdhVnK9*tz{cMrrs&Km>0I4j{uIu?>7_0SOj}9th8Tq z0^@U%dS5I2<|&(}Q-rl{nvfjy79P>69C1^Onlx z!s5b2N<#^jvIie|9k9wet&R~?gBwv0;ha~``NF!h@oS?2QU2EdJiGb7ZAaf{UL6lB zPM5Des;S!9;+3QZMIQ`b1Sng85PBT|qBmUUW6Qb6H1HNdDnyfwzwygKm2lJts5|BT z${SkA@cC>Wn=xX8eOIl(JK=eVbR8;49w`-=rdYx3;Ja=*l{p!k{QRX_=N623K+e!o z6Bbv-@1lQ~!Lws3V``BK(giK~L&jLfn>)9vCN`(#LA|jeU~58Q%8Eyb1A_Swg#I)< z?g3`E)Gu%~xUc)&X?1LuT?@KqDBKhfl*0aS)~?IwW!+L49R(_< zEd|1=VbSqo zs|nFVJn;V@CvAV@!>=V*xL5{IORtFTuHPBBFko~+r_ydZCkjs7r1s9G0Afy5#q7N3 zNTuh*pa!@cnf6b2lvcqQ;a5Y)yDEKsn$d18&MNvLF?Nqq3Xi8DFL5_};~LrXz@Yx0 zA&tJ?n;DkAjz3$25mD$tZ_xWU5c7XsQ8yy`(qL5IyXad|AXKToqcReKXd zKApTC@5>C2f&L9r5W`PuidpIKehK=nm!KROej1)1?S0-z+ZtTK-Yy-oRskEHzsWG#!wP@7{m@g6Sx-s`M)7D;OhSi^7!i6@d=5xj?Tx; T6{DR~;79Y8E~?zc_j%X*$M^l=TCyDGoU_l4YhTwsCjQ0U-^7hkqZi|0v~hEDhDq@AJG^mows&%~ zx3%DNa)t7@8NVMYhX!B*BO2eIbCO3u6vFFr3#S^rDhY{*Chtx7q2?!R9HOJ5`Z#0` z@DzJwPRpZvO>iIynBC{dEPfcK&vtoO;~KA1EH1sLT=V&$)9LD?8vALB5^(~cHlpQv z$H|(;?0VDSv%yreUxRq4B9Ziq_2Df3j}*KJsMH^-!^PX{MF%Qiqxf}$zRZ3AQP0ig zp3_XwXN{!3@@{%NoUu$~^%^ZXeh72yK6wQF%9h!!M3cS4d5?Og{dJk{n9YEE^u&18y&Ev!t)~f0{l`J4xhwz3H&f zSijYMx)en8J1QDzG44dQ-1=2UN~7k+x3KBGH<+ACn@+!G^!N0@Ma9GnFHz%}ry@?{ z1)980x4(^@P7-;I^=B8Z&X1a&vFlx;!Z|WG){f3=GUF6-p0i?8lNcP6FJA9@3~u=> z9MKahJxImkUxcFeH8C`=Ls~W5@_xZ<(##ck)!! zNb=bF{oQp;jia|Kl4kA0od+?-j`f|8#p!O*=7ama)|IZE4-I-Q7f>=ye)u64`snM1 z*6q{)vjbI^E1e(LKAK(SO8r&SMofG&=y&ozN~3bRhim<7Uc)|_zPFc)rIK&k z&Kqw|N=1Vn?{ZDr4NIfqL5I_lIZ7Gsc^fTFaUtC^6()1c1oQU|3u%$PS|*~ocK*hg zs_`pvF34N~N?TWAcW*rfn#l#I(0k=?*UUPGvho?%45W{PH_g#$A$UB!LT$KTdz*UX zMO(%~+@ddDe_acXxLac+ienmu|Yj znjP_dr(4%iB}&cdE}-RlwnbB1Wmiukqom0Lygbj@8i%x+y`y2-7WYp)8*oZK6R|bg zQAyl`Fxjh|Q=X|U^XQ}yJJR<%WF9X$qAZZ}aguord~kv`MPv+{4d6{luJ=%8s#sUQJNbR{0Db0{%v&E| zd+$l9*I@i!M@cI$I4&++LL4&gfPY$aC?Ntr(ltgC(-iVTN*4cir5i*K{d)z0K`=~l1*Y6D;W zPP=7qMp?%Xsqm7brB4ktAXj+|!1WiSFwB>gp2wpqO_MD*Ckv(iC)`edx+1GlwN8tU zI1j;Z`Z)bGC}}#exL3Ne`!;Ryiruvdogu1Et|q^b@YSy(W>C97wn}wJbfU(3dH=_>SS7hyx(iS z+_lXrHLe|^p{5qv68K_+6XQr@YtODuAdZy$`SWKEAEW<@+vQHJsAfm_rh=!@UUjLT z!-fPprM|l~2PgnA1=)>mTa-V#OkV(##cv#`#ADp>vdDX3^@|-$E0kuwn(%7=t9+fcAtEYip%@!Xzu%UWb5-5SmOcyG7rjjm*N zTY?z6V5ywGI|1kZ5%uz$K2;MR^(2^IBlTo_PQIBrkk&d2*Dr_CyqdWo)0TQ;>M`{u zjEZ54t1#VSjyBMIR$tf$z5nkGN4rry>5!SDd^MEb2nVdxP;A~Bgi-Qx2h2=^jQi&co_o|A7%Mp{2jx0Y&y|D`f<72(C>e_L+M4x`t@QG zSKI$EZtz1$hf>M(?ImzKOg!!#oPy+IA>to&Ds+oxP^`2lR%y2b=L{Z z&J#jFb#`8cj6Ik-)!QJ?1cqv#Zn8MVj_ zffN|Cy-0k%60b`HDZ1V=4jd9(@(pOf<>S}(nHe8w#b>^jy*-lc@{zCyB2R5mlvi3N zXDm&p({O@Qm0vXc-qwU=lN~>zIU6EbkDMeQrE2cWUbgul!)`0RTaq0AS^7VQ#!mEo z>Uyt;aHhQcU&I4hitXRsa;O;3G15ex5?KRb_75SJW*1{gzZ(;H?Sp9-x3fF4jawH; z)JXitA!|h9tHdmM^_yS6eaa7k*PrC?vR?^PfE)P;T-E}@-2qS_7wo6XiH_cZwGJ5;%H6VsfU z>y`O->yeoSr*9><^^ZH|#}2Xb9}KFq6=$Ym$*D4Nx~^!C9mmng^5lG_tge1}pQ%~r zB_UI0%kA~v;Nq}nmoPOwcdR82u1yz!xi;b;#34kXF}L~BiZ$1<_M!gqXOeB09HL0` zapYy=%w^C3J0Sqp0_MG(rgh=S#O`_z{eG>3Jbg;$>o(S2sO;tR`ren7m$Y%bQX!$u zR54*?-Sj@c=4FP@z#1?)cKQ%MB$pu@Vlw(<=~zBKwlDsLlx3>;yMR@rS_EL7w=(QC z1bcU3`dEYgK02*N7Emi(fGDX58;L&_d>)`DUqKBwFUeX0P#R zNcf@d^+N~<`4+t!c52ej7j#tUo(yu#Q5=h(Ed>?Q(scSgklJshqC75F3K)_`nUosQ z!UhD_8_3`P06>J=jdk6VLpGgaA+I@^}s^U@w4F6#taAp^RmROEB!k_~*$Cr*;98vIQnzdbnB-?k`@##jUU3#jHv-@W&xKChX>#qK6xJ-G>d z{NnGY$1V&wj}2$`aJX$lNgivcI$+Wb#fAimo~X}NmVE!xs~}il9`0l8*2PEs%c?(d z0-v({d5BQ47%AKCwbh>>wq2&p7t@4_EX-O5tTJIEI>ALoa)j62?OxOPxh8Q0e0ABo zm4_+AfUk9*hsUCyN2R|r=JY^Q84a||&7Pq_j8BBC_<(9jF7BEIgGcEnhW!1}GfiQ(Ta ze&D#26D38lWD%aMOz_J1-j=aAG$;;J2a8u4@!zPcr>xDmJyKFSO1 zfvlULAPfgj=BvC5`o_qLYB!xn`W$$PhXF*st#eL1eDx2muG@(GM|?w(z5utJB9ZCM zVN&gjrN1Cb`q68UJwl!sLQ8|}Xz4Y(N0E=ef{wm)*pRp~kTqx>d6Q{J&;GLr*Y&Zp zv%J9|%wli;87sd_z@)6wx0@r`+woOKMy_R(x~J$Q{wZ=D!KU$QL1uP&dgmJ+aG!dEKHA#v#}?nKI<#E&jOEbH>yOX{t$>RsyR z_R4~EQ<4hp+END)wq<iwZ`*nOJN=&@l?rI-*U)eBvlyf&KCz%R7{J+(n zyFJXTTXDCNjj&XVdjh8Cf4>qzFULapzsuis*{nc7c!Y};uiVu z`Z>>!almH(fA-Hj;^^`7iPDpm-mrHa|MwgJ_X|TftV(I<7dKfl-E88dFsb5l$R0C? z$ESWx@wGu);=hLY-vvgkz9^euqE}X^QEnu__ItsS`TzUTI`7Vh|GS&#oZfdL|M#pU zn=B<|aXO^b8VLpeS>(AJmDLHwi~qaq{r|hHUk(J6%MkRlwygNK%W7FhEQfA;Yv(vZY@10%5`jy}3_9#HT*+&!`&=U|+#W z`ao6mZn~y80dw3PwpBQ_Ms-25g20x7 zUJv@mF~z*IrVc9udUwGZIv*mfjoayh6S55vgWm23WU!V`O8-8`N!}Df>Jq}-rb|w9 zUIPJqe0@#mfh!j(diq2(x7FGzx8Z)ZsPk{--oQz=$@u+|NM<#(U$bK9Bb&TW-Wj#{ zH=(&0A$BaCIvcguxTVFTOF))A_lD$YfC%+-BHA9N`gifVQ_VqTk9FU{6EC7}_7kc7lzaG5y82jcmORrRxu z4JihzkBMDXrAmptC{zyvu?Yy7YCGoGJ#c`W|Jmg3zl$gfe%9&}Ep-SlHmM&gZdmlc zq^ggI%rq{OIV7jh80hZmDj+^`n5{{1DBo=lA+YQ49nDqJBs7Lf8oFBc^MP;&)zryWeIcXvn`u7)H9zPL8E0BeOlPt6 z0!fs?A2BX8yvRMyL;L7KhH_ND;r4-m>b_4h?hYy1#ooMn>C*6gB>YaBa2aS*K2YK6XSN6Kre9x#i|5n2J`e-9Z*(^F3@(oRTY6RW zKc_AN{@trwL_6}E{&yi#(hr2#;_3}?Ow$~PYtsGfgSV)+@@&e_!v2r+JtFIO*zRw6{O{Bq-9SNIQu5rkR>4N z9OA(fa6wx!82k0jhPb;I9t$F$*d#o9cJl)5r`BY@nxA8$v*+uW+`D;8jVcQ3AfId5 zv#ytQ@gfhe+kM1e7ViUwURxaY*>%6sBh@mDs%?Lwqu5v=HW4mtcBZ2ovYtSI_h z&=-@>z>{aUpxogXRy^p0pd=eaF*iYq!bgAGs;4n3vOwScOy@Je>82@e1^VRiK zy-k=i$>j!;_{|(C?94Ve*6k)so)F00I);lA{Qjg`{F-w zeDN=z&S13gGO^B*I%^ciA*ob>&7^YNtJ%dH>&K=F%|z12BdTN5dl0F6ICR|l#R3Ga zBwc1EHYb}C)|fr8tKKZ%TKeLKh$j8h3sL5EUk)+7e@Rt|Kl}48c?89qll~sTVm7l8 z8d|e`ka!#2Xh$sqfEUc^axNbl?%={P}p+ z4J(@S&{W_~g_XFFZw~~qO+(g<>L^d?Nm9DmT|vr^5YG9oLweZ{uzHTJvZ>K^NtSo!k6*x3W*>_H19(#T&;^vzP<&a zRGfdXI-o}$@xU`kai1}MBTr42l_^fu$z;bnoiz&8&Km~#{>Y)sIBjT@QK|m1LRmn?>YrCPEACkoxEzA zh88QF8$Z8dTIj@oGNvAbp}Yy5z%_4}akQ)H%3NxDlHmFtXcVM?po3uAlCwkYQ5TL1)jZ{cT^ zS=aW{AZe{QiIyXnyBUD1;(ASVX?W@tG%Iw1n)k?Jatot%g>Qqr7_V(Cl9_}ka4Xa? zJ!Grr2@~~E>m8!xT!oFn*qgGlT`*m~3(q2kwQQ+7H~72KD-8r;hl-%LG=o<={HrbI zk3b_xx<0LVI0LLV?EdJ73>bGt`yaC$U37^y>#XCWBU2DVUa@c+g+r8B)N*|~tGTAe zN>0A9Tx~Sq9(nexwR$;Kp@L~eYt<2Zl{O+^}lr=pjD3tVoMl*4ba7&8RMWrXa9@PiHHou9JsdHgkrI+ z2sgMB+fxXg*UKg*SIYHyv29|xgvM9$y#DbEG9xKJ;Kf&*@tG6`f(-&jDkcLi!qpj( zkCnqRv%W+{j3YD%}I^@>>jCIRs3j?>l$gEBYW{;!?Q5B8v@JDg3uFHL3GnZAY#{x{z-rKl&O;2jmjH zK%%r4q{un4uD7A+7Jced?lQ>7eq(vRzUQ~+Q+So;o(|DD^#kizKU&xE0@+HZ{D|wj z=mhvszfZ1;X5Qub7J)nm3oWx2(;fdauuR)+os7dhQE?^=Tz8c_cx~d~4CWyG{LA12 zkiaDM@<7~0nJM;q6keI-*jf|!)NnL{=bxz5e_8k%r{~_~ebBLC6mP6HuUFx^n;vs6 zVNAxVB&t2E2c>bK4?Jo*H00Q<{P{pK8GGN?&|*kog_t1wFg-G{Qtp>A+j=7ool(1q z5gPLw)Sb@Q*?AvZ3rI-3d+ZJj1;h2`(9EJRz(Tbn3SRes_^%_JTFZOi8bB_(bRD<( zXh@Rg{wq=Y*myXKD5kL3u)Lk;1GH0nAceVlJRj0?-O-p?TtqL3OgU*d3x0WxE?CF7 zKbBb*_)I{hgFOuYe%)gFhm>~ki-tYJ$A_47${D>7Yhb9?1HQ`yX7J;?44|ZjCiqKm z#Vf~Z=UhLktsmn)g}0&!O=W%cGM=v&Py~oK1Pe!cXy%$%BJp!l)KV_=vmuRuJhBXw zeo{O2jjM$yOw|sp%Et@!yV~t4JLYEI9rBEe=h!VewOqg3;zB3Aoer=O<#6)qH~w@N zJ55Gmh88jHqRF(>%CiK@sI@-0@dC3dQ15YzSIiO2?4bBoJARJd!xG_e> zXbwFC6Mq#y6gQ!go*5ex7&rDm53o25M1H($PLZ!Y=j4X)w}>((BG|$SuaAV!B0Fvy zFId*y>DbmmcoX{!ZDjScxY?EXqOjGa`wuV!;i%MmDDT^d-9RMiycoeNm0j84!mQ+@ z^ci_(dX!WpvD@Xf_v`~wlvu}{M8#b|6ue1kPL!8CgOX1+0Gfs4Gp7x#2+=Ds#amwX zz>%xfzjXF_WL>)qu46Ot1X;%n<^P)!?vMd@MOP3IJ^zfbH!k@@Co_xnrcMcdG1T)%-G zZ$O?1)?fp|3Y+gEQL`ZylJk!@@@(ipm#xHlnhK>PX1xa?j?K;P?7Y|*Q6$Q+rkS*3 zE@ssZOK2(vI62) z3;o0*6dAruSaD1|9y&wC#ZwV0E8DLM{2e2oh~d5(#vJ}0SHjA~BH&PAiqmO-h=Zb( z!Sv*LtD$=GUCe4TjucF2D~tnAu!&RR_F2DDdk;Htcg!JNzx}I-^L%ji)N63tDG_+XbC${ePTC&1&_H57biJZ?wFH3T8&PeU94|ujX@_N!8Fk9qo{?Y z#%LD&wN@r#&md#0Q67*7K&t}Z0V&~(yFXmENsKVOD8WQqY}z!#^TASEqmOAr{^Q7! z3paY(Fe>n~emnQIs^uHoxEvL_qsc!nyzm$gNMKuixzAY{v0Tj_W1En8Gr1nm$3@ z!QWX|=V05FiXHP}hhN~XS0kKhUUOxY}#j*bM&;~DxZT;%|#o>*LEb#%Om_AN84|qWh;6%9>zrO#c zNms=O*$&kg3f9CoLMJgA%*z?^hTw7*EWytv^IZJ;^fGlP)5Nt_fl*T0IV%vl-rztU zgp0khFfA>vXZA|gMB!r%%B6*PW1QBXkikp?=$^l_7^*aNN|Xz)XXe`P_=`~XJ*~Q5 zi9Tic0Zwf!xAFVvjWbXfAGnOsA#IU}G*#&s^)R091yxUO5J-B=swPIVSNv=GCl~hY z%l)stD=`3gOG3HG&&P?6gSh+RVEjz4zV0 zundGterzeOe|rf+ z2v6+()Ht!NXt9f?Y=;#nEtEhBDL@(SNi5}ayt^; zi#$j97nxYRHL4#^0&57U-P3tjSVy=d?y#+lzsZs=mKjYR-#xS90U2Xqf_=))z~ssP z$o*P_m~Bpr-K=G>A@~yJ2-tKy>)oG+=EshNMT)aN#fX#sr}I#Za-S zYg78#+51xSSiG}CRz(e7}p-^|_fPr8BDnvNYl3->B> z4+P_$288h&_pTla{e=hWINy_a zQkoou?JkGF?{ zlV?}8+14v5r9NBnx|E_9BS@9L*=lSK4?d)%l>S0Uz|F50?v_o95pqBu=#=A(*(jO}Ou_9{PQQLd$I4K-Gc$0Pn#4&KGyrSWHsHRq z;z9P#`Z<--!1wrJ?Sbo;3PB}25&j`8js_7sUw(1Lh4ShHsciRT8sse;aT7i~9dbIN z3QL|nWqQP0TN!zSr3hYk#0}bwx<7NW?#Q>taxB%kv|{20yQ``(tVO(iD3Nfz~P_)oUowccNab=zy)4FA$O5Td%QSZnrRTItal=9i= zGIF1PKM6cf)6TS-i!~Hg9oRbG;}*=CN8>N_kk?yXa#^a+Kbe@uwf5M{8yj!MtX&Bq zJtM7T)1NEZE*3xO^_Z}%oT#VH_J#W!5Ww%7J41KY?Lk!itA^2Y>Y0Wu{aT zmLUIU8{m8YB?b=4R4Ld3b#FJbsBl!H79FFY0|-}hP>L=Olx~Fw^VsEHHvRtaOg=(PR7laK1)5J}YzrLr9Q?OI-lKf551O zZcL2$OZX&gA&t{-&95)_TFmsnzp|1L$3LFx=+GBPVp)ka&kH4Vi>W+&%^TPYBWBbX zpi#rTAh}3)GXooj+iU65sXX?d6~iSbD^QBqQ(|2Z3+6>sgCTdvpeDLGL!Nulm3l!OAsOWh%-A zX{2J_)`qaPD=}|A!~0;yT}t=n&(<&1JTUjZQp5OQb4EaL@^+#f-FkVelAnCykq5vHFFejPnu#(I^mTg&8JPQ}EbZxUECd@zk{7Szox1-V6`9~g! z0mDHDh`^a^L_M9qBDgfGmg4zptu`IPM)9v4xq+tONLnSO`~wKb1yO9!lFI@lZ>Anl zf?{BnL##k>^K`hD?a3S%BNP}UD6%8(wE-V&ww2Mzds1rGS7w3-_Df1=4;w{@ibcv;lKY9og5sBqXV-&=PscLvGCydCi;-{+fwh1SxTmT! zlYz0p5Hp}G6w4}*R_=T5T8Xjyt!1UKCEZK-C0PTwT%|^;&^R(_3BCvlxfVPaMcGa4 zQpm{sAds5Ms;nb{MR89-L1N7LxS2!e_;reRx_pe)KK)%5=7n|z7lhMtagtPL|_v#wXg(f;hNNX zk-WiZDPmaQ|CIQ^{0&n+C#$9FLOQ?qzPq{(^^Pol>cF(u-To9n(UM1y$Xia)rud}= zi^@lLMO>%25u?DOI~rG~4lft~A=~LSuXSvsy;OiBTt$j)WKF%ijKrHpv|yokRj?7+cxr&ez{FeS2W+;oU* z3^0jjFarJR5>Sr{YYw?frAvn(?whaG{#+Ejnf_e*CKf{$F#9W+^;Z73=b${wgjQ3o z!0BPA${m_sK9|LF=nJ3NRmJc#THHw1`vNsVF*wFJ)7r|Q*O-!>*wsp^>PlDb#6LxT zA`FYdmQ>DFo&Nwj?uW%YGp`0o&@xAs7!XE3*=OkK@OwrWA6@v(baVwDO6A?iVY!me zz-9}Kxf0os(XuynMi_UVbHBBHQT=-{3_@}Q&H}su=jTYzJ2+%=YSjb_b0EG^?R)pN zFzHp1g59*jY@4I%DHqekB(;}e!QYNQ*Q1zZ~7!z$s@BE*8}*XkHAjo6y7}J$(Q&+$9Zf!Ra~m_Dg=32VQYz zU8Jl}5|f2DBDn!wW_o|kb&FhUfScq%d58Fpa^h=n?DN&ctDbsUuN3GM!qvFGa-oK4 zMOF8QUul%=jb}Yb0I|rnTpjkWDe-%cR-uMvZ+*p4bFj6NhFu}dZy*h$D|2%Y-9M_r zFu%;AKj01?=MNa@Sdoi@Awnn5RK}*za|qvz-oC$6v+7#gR&B120Z>I@cZPev(J35@ zpT=9|6x%7gt9HNtCy}f@h5wzpGDC|8ZQ;z^;MFKP$Zpl%e(%d||N47o)kXQOPs3%pz_fUBromcJlh-R87g@%l6y7H#<`)Y*kzP}!G-j>8boPWqg$?9 zKEGm;lq%AD*fcnn+8^-O{YhF}@`%T(WVpxei^ylmpm_5`p<(8F9>shIZx7c0!DPcd>w2c<|oB&Oprbz@#)HOvI3KYQU&U^Q0T|{@BW36DO}25WJqrk7rY9;a;GJzg= z_1cAH*->2Nux?z1FPXsxpRDicX^C6SARBQ>x-kokK%UzWwA*K}jyFv}P~P6(X&|)s zCBnZDQ<26xE0t$p?;DGrVyRKx<3t$urDKY;n0;+Jyga#-1r*<1-3&MNz&6;<=GmY8 zn9-OzEj9=upK&LpH4>xXAw!StouiY^`Sl*)#LCF3&TOzey(>b(5i$6T>@sIh5vj?# zNQCu-)hNzcGn@S$4k3mbl>7N4Id-x!?=h|X+nm3lY-Mr1rwFZ~ApQp!KV!zHAC zw0+pX(w#S-Q1B3TN4*1Sp5m>%=l1(IOB#T(arVwgf5h6h!@6Q04KqO_15vQW2q^PA zmSCRWy5_#XJ@p_x25KBB^s~0KQ!5vSH(<7R5CRxZ94}btAKVVul(rq=U6pVRXvy53 z5AU5dtC35CGf1CUad27SvO^riu&=&C&R|3?+Wl7g;~340pMIxB5Uf@DIS{}%(K{$C zp~$S(F~bG-jdbo3s}(8Tn^YRZ!v&2qE2f=I0WmXDolzDA{YSpURG(mkO&>r!ZW4Uo zFvyWYsypT`h`9h3yEjjJl>3?1uVgMVlE3-AIb>OZw8)DRd^Spd|Jz9KCX#0jJqx7v zNcy0IYz@>tNR| zb(q_0|}3u4yvBHvub6ID-+s2n2@N_Qxwr?6x~GrjO(Iks%fsx+!T-_4CPYsAGq=Z1xe}^5{?;=NuB$5 zwZL~N7Q)7G|H>&UmY%T4WW{!)?f6Ds9>`_vF{^5cO5vf#1)W+1-1uX=oAXUsA-E!g8bpUAX4Cx&zT_>nj)tboSQaGu$uaXlz@?RH>q4s zfrli(9uzd39^>Wn73nPIw`GaOLn1v%TaR{S`Bu{)eko6KXWYs*0rtuP3=0X$eNa}_ z&Ad4-q@hulMNb-v|M?{R=`^z@m#VM;e9<6#`ePBCwIalWwz`3BTZ)n6J}4y)7^*d+ zACtr$_`@PLulaRHb;;8?6WNyKx$q(J!Otk@d(bbYlyNC1Fi@$UHAjXc?Ltit@XX3B zlz6z*$C$@}rr%${2+M%qC`hSVC^mQP;i^!~5WyuJ70>qmNI_KYkuc%KTaK_wm7YFw z6QJ>PKnQrMTR>#>uA-o_<(AYPCzuPZHF;ijtLDjg$UM_AJ_sv+IhuI=UN)>ocA{LSS~c?{&RP) zrxIqID>>srgf)Y(uD}qQ%eQ4){BMUWW=Yb{ddEHE?T6?R$+g&~OCtFbgdE++ zy!@VR1fRs)6AVmk{ei{X8;lTBO0O6u5wG<+1UcLkS^p!?F%ISmD}9B9*%!~a}> zFJAaddsnX*C+|PMWZ^NeD(Fn`#sgcAR+@C>0QJ~U$KfWiG1C$3KNy~@K#<9p*>8~D z8d$y0R94ku3(io(P4Xy5T$&yn`)Sy5vc1;r_J^Ouhd{ZJE?K-kfilMy?3nzSkB3%1fVMD?7r(DYz596?Jw0{!k6F~3h68KuhWqf!N zeD$-;b$e3_T#BB9FKqan{I-k>8yCOSA^freUbe{lY{(#h++a3Kh4x37La8c~z0u!| zR;tsQJv~KhLrcYPwjUY*}xMTGHVr{fX`ee2qhlb6O)u>U20^`-jy`1f68;y z7ZJmFv+IG#brjMoRYF**RY^<5-5|&IUJuD3I+Yc9xj1sCqA>H`bzHI-RT_+u&sD1O z*khwdwt>Mhtz*0JOYV|7g_7or&6$=Ix`w4df@jQ76GlvLH123tZ0XwO>rEbzia8G7 zKD6TZF><(8?o8Ouj`FWq%!Wwi?9YB{=l2KE*;>j7d`-zw9 z3Df*nKe-TYb1vOfbl2VB!%xH6vzf`}r)!H~yp&y`fZN*Mz1-}v7VwpsHq%NaDE|PL z;C#S_s5h5{@ODQ`?tn-|tIUObYWtT*T==CfaXObTQv;6(Ahgo7A?)_?<)bbKez|ve zo=v*&s;yM#&z1hMVtlJ6Ub@qq7%fvL?^wSpGhOxOh0t`>w#Nvc>)EJJ|A;e`)O(#8 zK>;dA1=mK&UF%aRGc}-~Wu8yRs17)0_1EF`KGysj4foXDA!vy7KLQ!P#SQQ!DR&F_ zICT}ophCKI_$L;ll3 zBhT1^Ui7gMU&CPr|Fzcc)mC1G!%7I1ZK69xDSn{KgPTlLz> zoX9JMnN5jKz24>=t$An%&&ed6NmXLZV1n$*;?3f=eLZ{S6Ql7>zXbR&{S=k)C5;30 z4O{DgY-@6$oaKo4=d6$1TqJvUoScCaZwY$(DtF@mHa2GZPs*@eRULSIY-3yftX8ew zhEj#~h(Boz;5!>>!{JDwift%{9HfaUwMUGG?>w=S$VL2ScWI@H$943E&^P#0$46Kh zHP7mbuPBA}nucxjp|1Y8oS$Qh_U_cmu&(K@T_i-X31g;d#UhvBmckWYKfhdUcGvdY zgw;62()hppe;kBZlr3dyxFe{rT@kw-DI;Z z%%;v49c$awz!#<8z1UKv$>zYfo$MPuPSj0x*w%#LP+5Fl`gJcy)?C+$Iyf|X5S&z0 zJH%N0^Uly%cxb%CigOGr^H3Fep4rem`(yVYH#bS6IOvD2u%pihOw=1Fd?(!BQjPN9 zA00q9ilt$vA&+O?Hr9StguV7PENSip`BJFHL80rZW75^BAlE~6gjS*DK}3jahb$dC zE?sTbC(5q-m_L>&YkL;?UUQv~Hj;BNPDK$$5%y&PerY^&J_geQ%e|r1vtL=~DsM}9 z8oObcu9l5Uz0#=f344AgkBu7Lnt9C19)rAThHBV*VN7me!4mg!5a9m86qv6%n zqjPF5XwLU4Ipc_{Hgd^J5WCkX?8c!mthR9z2F_(rqm1^8w~ zW@Es&V;V^RuVI{%QW#mx~>>`Z|Nez+j7~txZ3jv6$kiF zkRYt-loSW7xK(D9tRoHU9*9-QwT2_eUdVNIE2IUoeAHA|eh?e{#kp4A42TQH4A&gf z)b+YtX#J}$pXHuV*8&P5&jeXnIeQfU#;IL!KqDDRJ1(w{hDFcmDSWluX4e^w=6sI^ z55ZRtGaL0plG_5poIjh1z3}FcXMduT(9cg(-3dKEDz4n_-QEmC`m<1t$P_=~NGS0> zx((vrvOZoU87AezCj#iki&c3+U1=2q3{UE+Z>pLts(Nr&OjR*Dj>*E=1m*@d%>aQB z_^AAa-^lC}VneU~pu?ZH7uEJAO)uG%VF{Q%Ml!}uIhhLJQLkeGyDfJ`! z8$*6p_#Gw3=49`j;wy34FFdB_<28NX(pBD_;F@FT!#XvJ_D{ zJH&j)$YuMn@$hJa$^QKOn)@KL^SAib*}#`B#qLyIOHzu!K9^ne~5 zt;88s=1Nv)lThz+;RYuG@il&Ule{^S1lp%;+2Ed~_mnw4gDSF`ObDSf;L?JpdR*39J6Np*HiGl+WK=I2ool2N!hA)quHk=PRyX}3B>0Z0Uet7GytIo($+PX$*cCVnkhykm zBC_6AyQZLDw+CstKk8!C;NLL!evjJgz@=f>RxOl)nk3r5DDHHS)IrYpS@0YwERY%G zZ1WPzlUG-b5YG*52@vufDLWJ3LkS)5w0v&yPw~MS5huLD>J5vpxQI{~_Bi+aZ}D?n zoO%0V+nCs8=ldJS`?xByzx#m=-$LJxzxzzfb5JRrl!JR|j~%TUTO~r?xmpRDAz-q{ zWL~S8Pb%Jz+f3k8B78m!bQGJpbq*ps(|RUmZFoNk?GStVdra%3pC5g??2Ruyzu~)I zz*cK<_ZxX^+4O$=+uTL6ep;@fu=KP|3hN>@W7=5PnYaT?ZA=d@)rod@6|Nr2_UgRBv`OLR>i*cm@Z?KPsakt> z`@0ULw;)5Q2DYDwWvuTp^y63|IBSTPQj^z8@nBY>hyRr`I2D%a>;4f=7GOc~!LFl< zl6CG~hmTsvEFB3-BdQJ<>WO{iJZO2FHw$z9`Gk9oU$jJMVeai#P0!SyG)s&AO79HsAKf14>Ri?w>m@zV{B5q*J&(NK%IGNo z$!yxAcRkCL)Ck3Fr3JNuQ^RBV=SBVIcET}de@oB8GZR7<*KDc$2&3VtO9`Tth^yf)wp_d-JC5=VYoCJMMPYhJFo*j9iqH z3!L^Uxed63`l4r-0_G}ARw74&T|GzbI*nO3ln6R3I$#ny%;y+2`-SvF$6}x(3qMqN z7I|h%MmLg$d_*T%8_kqBLFlWUy&EODiP!(AG>@g3HQu@*#<~q1n>JkI*R$omk9a~? zc;NG65=X%PYQN`;%`rpjUg*!IIXHWa*W_h2JK+M6KId1Rl<=$qO&3m@H#v2%pd^+nR-GK3 zBKk-lZIc7IThyDpeZARDA|GwW3vj)zwQC&g^C(U(#Q?kYUi^6h+S?{i7lCqGIu|hG z7#9E93YWP+?NYnT7=L;N-g4-D^QZx<%eE^sE^xir(T4jXWkEe??LPWLofDkt$9?oz zdnAw+vIKCncOTUP(V}9WSfUbEEk2YiYNvpu`a4Y0hucf9EPGbg0?m$3zEeTN_l_$2(aCQE9V0-@V z0=*Dz_D|{BkVS^P$_WhNzO8V|O<>)w^Jo|qHQNocT;2QJdH3?wOlqUPeY8?9C9thH zMo~oczlS|fqM)@YpdJ+Dw*N2&U3Qs!Pl44cV@&!b3)reRy(=eS_=-uG!%K=V&TGvG z#B4>FXmtFo|01(<44mH`7}vOW4#_ti87LwA`()z|(vG-Ec^2yPDii^(vf8ajx^9Z_ zS24f878A*iU`**|YN=tCiGz{scEBQ;}k4Wff&r6*Q#z<6iTrO1;BlZO46h zxOi}yl@gAj%2oTc9ZCj&Q<)Tw0Is{PmFc9`3r>wIqteg@J75!U&)tx4qJNtW$H)f5 zb##HqsTy!m0Uj17ism7|uYQ_pftjfbl9}0(%axj@qLfY3V>Z3?V6Ozk@EMmje zOk970tJxeAj;4|%T}=6w8n&%{d^+uVqkd}pbrj(#=WDe?8N<2}8P{Qz22>i|#bw(t zx310t#%v5Z2B*vI1>FR3Y|-dCp|VD|e=n*f)O(3?|Kj;H@w!-4K<#sf!PBK)O)A?(5yyFpS=PiY zfCp_X4Wj*M2Ms`wy)`fSZ|KOL%&bTT);;w|`(tDzxn-mhwLs=}L9aJsf_bi1rMq>u z)m}Xdl*Jx@X2^hCU`y_CHcf&zu%A6P<5_B?DA45|$;(l;b`;XznIc*HMsX+#&p5j5 zjfIIVc~bF}C7zHVPH36L+Ccn}Bx2Iqw^{n?pJPMFYS6HvjiF8pxHd#Uic6bN05C7^6}o0w&vmKN?w7jOtdrhA&n`b4Lb z`v+2UIcUDfTd`B0;8niYR{O5}SuCS?fjW08bix>snC$6yW~>ptX7`F_PqG(fCo!k_{9eQSH8E(LaP18HKZ@ajATI zNtFg2h%)J`c}{Yrl&U@TW#0YF%<&OXb_j->8rE>>{d&?qU7!T9>n%}uK!L7C?1}|T z!THbT6>0%0%~b9+-X0b#xFOkiJkxpzLZLQofP&zxsTj*pq{&bu4FP#tepgDeYtDaS zz3^_^ZXs}+vsaA;uv zK@n|rI`OlLDPL6uYElTn@6!b~l_8={UsbGYfg!a@ZlNr}Q!WhDV$ai1x2 z0Y06??5q^`X1k+5KE5$!bQ6~;5T~C%Hgb5PT5+hV&0%{iEet&xcI9WQG{O)(OiAgN`}I2wXp?H zM`oz9g`6bS{@mPsf~z4K7TsaQf~?#PXL(*$dlY+GaXy#A8DpfUe(N+_hE~ka*> zK9V8=;zt{>O>B7z zGeoerCOD=_?>eEbG6KqpUJgTG3tU4!;#?3>p0Lu`*p$Y>K&!ctuJc@W%+l)$3h)U3 zfAv!^2ZaI490Z?FkR3bshJCSm9@%L#yShELx9nhdt-OuZTk&}e@RS>sEP7dUR8n{e zN0;SD)$&*#YN7yy=aqU{3OHVCxzdt=^4q2jNb!IPczuKea8*no|McF#^OcT@0E7nuI{ z(k-K`308q{-GCZE0xM-!{aqET9L9+PP7=f{og$f!AU5ql=Jp%OsRpAeUz8Z0Um}NW zT{4EUs8k`}&0UWB!tpWc`+g&w_8kRi1F`(nED*fJl|pwD`JPD;{Y9^)qs8gPX5wi& zI2(3(iLWem?ZS8KUr4GMt!fIH!;`XtH#rVC2|R!4m>FJ7ukX#c$fjvlC07&AWs{)d zouc#mnTm=DjS4w~rs{$!e06Lj+_?Fl;FZ%7ZqwQ!Xq1ig%z4hKpG_<3(sNWe4&h@G zzVK8&{7#$e5qHo4(@pH7TrJhnsHzF@e_=`{rtdjlK68s0^#U;t&}Elk=y^f$kwM7? zbG*f|V8!120s#`-wyBJ6N0+HgYce-%6M!nxclt*tA+b{JvMAvUyJSuKr`|tsj#|h~ z76LDk{3x|K2uYjJ9DcPqtjP3k8DTX`Y-W5;*sZbup*YK}psL^=EiAVa#h|TC>&+H( z9`4xCG?~&ZP$`G;40fqUL(i!fx}&}w%{!_w$Q+ZK_{noB(KRt1wq5r=-K~kp2I7M? zB!H-n7jX(6hecR7qR-c6yCOj9A+b%i-I_MR>6sTSX2kRJCi ztw{=RK>?;N%zU$kp6`Z*@Y#_h1SddpAecL@9m z*~K)yq!{ULf-a+6|NZ55M?^$w9c|`eKzM0B?=xt~|CraXcf&cQu1rRYuO;6SLAUes zcUaCnYAjBh2no?|kNX12rZo(SjBnGKH%fmo^%FRtP6XBAU?_k&pUA$W^7d2%Cp zHpsHG_3U5MgYwH%+P3eYFPmla_3FA1xJ%%VUUb(D$;+C_r4?7OR;Fc+C31WP*zW(x zrU{;;e)nag4lyvz1JdwBVc=*DJz&R%#4z9Dgx6z{PG^TP&WXx%j{Hd{A;MdzOpX}5 zb)`c=G1uCE@q4LcEh{08rbBQyIX!&UNY2#_GtaKvs2vDo4xZsEn7jSXy-@At3fZ5; zz;SaiUV^k(eNGz@4577FLYEZamlA!IA}T&`P4y*`zWGG>Y&(fX@|ylS`IqZXltZ!|f?cJT{S#D*zHVP`$VTvFSN5fF z#=avt>d*tf8S8%A+RV)wuc2`T=2!WiIA9&KzROv<4akKiKdg(hdmfBw)=l|=;SM3T=IzFnc`C7AD9EbN4Q!}hH0>!_{$@$sQ+WDE=XsC^+m-l56Itz>cw!tGLfz*UDpKtS684Q`B*jJ?4dY28~idP8(t~ihZ^K z(%zz}Zys2GyN>fBaYplnX$KImQm%N10Mt!1WE!qN`srMRnqLQh1-MKfAdtCgY37uJ z5s~+5l;(fGN~8h>gzlqgeyq0=kUp3;l-`xcj=Nb8UGf5mFt!5Y7X6e7+fKpYdU_pH z_7=eH^8y9{TlK$kC* zlMmfDBA#Y))L>x_jqtXr<(_BndJ0d5js6B)T<?tzchAPosne&!;TgD<)9aFiLm z&~4{A$LPwyLx;1KK9^1cg0Sz`N+O#qR5Gpr?BH(7 z7<9R@Sna72olF5b`YT^d&V)h9Q}8S&9+{v{VePrq}@KrP*a-65t7#xHS_F+A=ZsvRwK zFHD;>sBGO4_12?mf4*yW6Vv+1Qx*5K0)w!NbIqV693<1V(muHXCNb;`~j#s?&d z-GR;d5RfMKC%0F+_5qZ<8E+nRR7Fz9z7xq$+Yswm?!a5#`*)KJU`EQa^n5VRt_1Mm z-U!c`Sl!F)pmmA@$Nfo80XW!G32O4`zl>(tZo_-P0g{PiFBs8$KJ_IjF>3Wm92-~) zHY|Y!LsS;)Bw4>?_B>pyuYb%S6xVS#$gs37FGWD7Tgpp@mS*IiZ7x7 zm4UWfbwc<+oitcpm$wis8C+C<-*PVC%c9)%Olp`k!ohEHoxFxy`YlXU>v+B8z_!yZ z;@<+|O>as>DV~Sv3{gu{!VB-#8Nz@sG&+bof9=w`r;kN)SqdE{DvOe;FebK@3!asD$QUESM zMiw1K#(r5*T-%q2B5y)%Rg)pM?6y3l?`7o#oaEV9T(YXj^oly@3P%uORZmz3zQ@>6 z7NC)|`3UYWFg>-*P?w?_0?y4k(%ef5g+Q2@%nXJ ziZmpekph2*4UQZ$s4vS13yFVSxv(BA5H5nxmM->3jH}@XPwk*mw7>at%2F2`U#Sls z0zP4Ts%vvxvBgsj8M@*e@60KW|JfCqWTt8SvtKhIqMZzl5d+S&I%asEc z#^0yh>Wzvz%%jBSegf2Wxp3ku;x-k!%1tPl}$1~%`P9`~!=N_0bz=^C?cvIS34&QT~%^M65#6$~kL zh1vXKZcp?G5`t-6emV^+Pz$UCVYv+tH`1A4+G3XQu|EGi+ZzFFyzzwVg%Pd#YG3Y)0FB`p|iG?@dkp zc$EMVmUUJj#@FWYSAgW^*G9DpOU6(ro?#uD?812kcBzvl#TkP$874SG8H9{)s`=aL zr_il#ZLE!QdQCR3?P$v$Nskn_imusSR<<$Tz=s!84c2@TRrw0zH>!t&&*oGO6-?&W z-hNfSc#|*Gx5fwnuD_XE)Vo<}{{Z&JF;m1+r9A&G(x*x-@Hum`60Yg zUXm8)tt&jD5n^v&z%e@@Z19l-f)%-_*b6sO=o#<`;bFcAA4^QtQ0#SS`$u|p5iv(& zAHASj$_>n#-8dYcRli79O&p0z<9j?C6_3=k`h43S5Csz@y4j9F?bF(Z!M9|JLE6W77`Hy@{>f0yXco*FX-sCAsxb6Fo8 zsiQcXKz*nJ5vM0no|+MoNj=*grBHQFSBW43$!(4d*$DN2GBuE)VlsRIOZ}W3{c1qZmSyhJh~p^AdBaY*fsyN5iPFXyX6x$tMWW4VxJONSes0-M`?JRevzg5rEIT`1kCCTP=0 zzN&-5ycanTgH5bIg0i4N<|0O`s##Fh&5f$N5fj$U|E6PYUQ;t|UkIv>KWLa(3=7xk zpbYPMUO2ZNikwG(tG4l3nL>VnNnH*8_RsKJ8U$2WWeQMqC{Kfq9D6pHZ$*RLZTu+& zKmQ%5`#qzdooS%Z+;hB{^m3(qdq;6|S{>93OdjD>e{TN<8Zb6{cvi?&k>)?=m^gj6 zWW%8!r<6aym%_&L2-7+n*&r#h%7kyWD>%OL?CQsw@ZQk38)KuyoH}l9{RH;1gy--N z&n*Yqs^b6QMypCeWV`81F8Wjlz{#bFuKf~S15O;KiD6I6`DHd{_rSbsWrNf0sj$o7 ztsz7OjV5-^P=C@PA@o3!bqmxt((86i>GG2RG>$T~pBp$HL>(3^fGsK9{QsXbxrEH3~LWs z&f*;Ix&M~0a2Sim4YjGWCKK-2(!+N?`?)Ci6~ApC3$_ag#YC?9dHk42!X-xZ@>t+$Ky9*JGQdb~EBBUH zv@DUH>YY3=#U!T>35m1Kr(bF>`Ala>7xD4dJz^r5%U63SDQMVwR0 z_Xn))gu!hsfqCO1kDLR_igLdw*Q?&-u31(^O8x+@de$id{{Z{TArWQ*)*eP4;?)NINsSo%?8G*IfZF49hL|GRkG&r@WJu{Qe zd_pND{7zo`mwx#G&FS7g3E5WH6sR#Q2uMb@%7I@&&R6U`zZuoy2?5trxNoZySu(|y zIvL8-)Q?r&9t)uI&v)9711ldgQbp#U&e+>FAH2O^rOQb2t#eP;Jt2mIzER(!OJUe7 zPM5lKHLdaqQ_~b1Z}7mc|7}X3BhBT==#ROf)fvibgq_c zp}gN`%ODm?aW6zE!jnM^9SP&06r{w1`~C8L$?DN3HtC&z%*zaO`9#iK)81vu)GB8D zB%_j8(_78IhFba(?bN%HcB;j1G=Uan+q{1T{_|*$4fVrfy4KH01jC$hLHXOBR63*v zyzDJ-@z)Xu#~!x>|t(djWWR$jyr1!|xT z0`26G8@)Yan`I1|wbk$T>p`r!IW_QaNT0j?JX*jSnUPHFLW_V2Cgyz{a8yp2EKuwX zo5DxAW?X&jVRMfZX3p_rpR7P$!o+#Z7ASSr`U@w=wlA_Ra~5a>!)5|JDdEu}r`H5N z5p$(dKcDobJ+|(LA7zh==QO?Fe>pE`(j%?Mh@^W-yimsO|HLsdN6^@MFsh>=ES}xp zT1p2}o5L@!jE?|a9b2w*prj2Y;(}N=fj>}p4((bZ#M%slWxmfF_^ArgP`WQ~Tz!k= z*rqe?PMx~{}~*s;~0_$&B=c2H1`o~9=Q6_U>-UK zIZ>_%JTYp+>6cu7J6zteoCiCz^%<8{7np&4!0`3zLCirWVk(cRKTxB)NZam;J6`C~ zmiX*9oNyeY7Pwn&MY5(ZrcSKWIPpZusLUZZ7wcMX_%BE%Xh?_JUP?p(FQ+B@^0`nIAz}~{J^#8S>ZG92;LN| zhSzmbU*j0Bt0%P~eb{-pZ=O_0WO7`mAS(^3t<~RgwB+0V$6u|W5`CUMIDOGUKT=Zu%?t;-rx4P! zmnSYO$_6)ER~zi=(WDk2!mDh(;bg0ls8s5uI}G!x(I`^tJ~XuMOGfRg4E27yldY{) z>^0@n?l1(OJ7yeSM8K=z(CJ5mGi_;`KzsF_R>040b|`DE_?CKU z$}b~`%d-+aJEY)x3pgplECrDMW63poJY{{E^0GjZ@AQ-F$>fR^V{c$^Z-g4$zPI!; z{C&k%lmf#gcEa}hOD!rMhLn&l*Qj&|yKcGLH{7N?dZFLpgyM?iiV6FE-8K=tqJEk4 zv%$%Kv`&WpUb*zcv%bdU-nE}(lDpYuxr0`>rk{+y(k8EigQK!CMERcF;g ztyHup8J@W*PER#L+YAw4Ef(jy$$e6DTCD<(d4JOH%$z2C5HAs!4#)6grj4<|gvBVm zfL`SotgF+&#t}ZfRn{fvCAK}S38A_$V|+?74bo>XhF>u>)Pi8`9n|Q%1!VDZ&&NdyuUw0^NdRhqV7eQ<9!>ZfMtki*z$%Ka`aPn%ro642@Oh6-$jVhbE>TNZ518tBvy}%=O&d{7ji3m_i>2S^)WyrW*#(Ae+j$+xX z2v*I71kiX60zVxGqQEhnC=uPy^St=wC?)W}(4}xnEl+6~wN_%4HwBU-h2Y0M)kbSH zhXV?p?x3mAd;}iOB@y}FFRaWsWCA6@S>IPP_IHjZ?E6P+Y&}1pNe#?X+4e`L)Lhsr zYbTx>E%eLMD8IPHRN_+tFS{60U))gBD7n&I|5==63DS$edPO$g#O&H+@?kl?0?oYf z>8?$mWn<)BXt;g{gLnD}w$e^;go9OT{a-aOy|~H{GzIawLCCAKMO8bO+o>}_5LKbr zdUv9#bMPgl0u6tBQX*#b*{E|Ds*M8!rnPNB+Lr(K4;hP`_z|LMQj*Y=R~hBQ1|y=O2hj34eL*e6$qoH0Z!tbvuG5%}bxP~12bEg( zxgfG&K5@^kZx|EYPatl24K5jPV?%D^WY0Q z6sm0Kt{Qkz$@52bIK8$r$Vz(hFo2hQ@?zm!If6M4=q8zQpxgueMsS^j4QV1LloA^weh@Jjpc<9$J!j97;MQ(+O!*?x@#OXDZ-;h3G>8Azg|A!J}7XNS|ygAB!b6!$v2yGflJ_ zSSmRayvg{Oded}9@De6Qdy3rGP7=N3v{HJ4dt1N~8$3!^YAqw*t)7JV08emkFffqe zF1%WZj)Q%x=kUR;QF!5j)0SxGyJPS^GKNi@oQ%=d!FkV9VrNLU1?3tw+lne#u={U& zDDRsACJli$MUssSne#aNFR4N=UD)L}{7)=Ll-jvIx+)4ENcid#>gZH@dn%Q=!fR== zpo_Muqc>gA3HN;$i1x>%Q?8xDI=VVxEw2NF8b?#E$!b5n`}_!z-VRfNW_J=y0*EUA z`zWy|9McKl|0)lbT)wu8JO^4ea;MG@ZZ%YNZi9ZR?F#%X*=1jH0IkLf*_7#)!1HtR zU=sSNzo8M~IvfM133ral^zP1#SV7!)e@FCan~R}dM*%pN2^xWmc-QztS$56G4w1-W zHXZ^6$8nx%@>zs{n_od|;sliH2(QSCcUVtiuf*#wg8@4L?W*+a4+&&W`=H)y`{$y+ z6jP<$KaTl3N|7S3P$9NTzDd!+vbv6VEur6}gTj zU!l-=G%lXpcVwjR9a&VX!-b`dJ}0`0ea5W!D5m-qHP3c^GGyobM^Z558T3{| ztb^8usBF^)YLd;ulDDJNxP_|`2y?%U%Iw^!O{a$I=PkdU7i`r6&I$Zf5pI>(iZV{% zwzQSRI7F2{quH5g6gr3(C0)p~qz7W;Ro`Pp*(DEp!GZNTK!qrZ`SH>3gZ#=#-zTmD zqp!$tt1vI1*=eq55B1TsG2_o6xDzaF3V1P#1m(?rdr6grz#A6^sKl~`pGM2Ie(kqk zKbZ6MwK>GU^GRmMv=TwZ*=&G6c{jvI3&tZFUt`XnSESUtxH9BbknfU^GJ7WW&07&T z^QMOz7N=Oe+ESzLMqp#_OV5m>OHLP;yX{qShL1*S9K34_`ci7dwBx^9Up1~grv5iN zX&LkZ6p-9ey{;AZ~Q!}4WZ5Q>G!fnCeH`tXEezUdP!0jbUm$wawiB;@`g!4SaP=2#q zi-1<~kz$h^Qx@+e-D_U=U?YH}J--Ja5_o=XM>}9fHMM6A&U8>Kc3%tpn=y{7Pf^yj znK!4G>;~H8dS=Y>;r1&4;U1C~h5i`CPAc1T;9T<>W=@UxQ{hCAQ&?KE(EWGRP!U<< zFu>rUFp3+_oKlhPfG&-BrpQO`CpIFOk1A~`nJn$STX0v*?BE>BLcG@u`ks%}G*rJ>b1MYyvDfB~)U=U!C9)Yvxd~=n2D6H59y5+KciyjDk+DGvwX&+a{MAx{} zOx&YP5N>^xNqTAQxjuRPez=wZ*_am8o1I+bX)LI06+;oBJ$#V-e*E8me?B8Mfc-r-;W1lkb)7fdwpk#uVn zeRydc)Fg?!I|G~rZ5Z-Eh41H)o|cx(dhd%ZHpiF)jUYvX7F8WXzyy%%p{g+38?k7A z_RuW1tq-(SA})J=NCLEm@?qekcmKNw1Fyd103awW-1~y?8K8yUehASlgm$oQmVaD= zN`08fsyP%Y0k-=}IC!Q1(oz56o~Xq~Ac+*C1{2?0r`XTyRd@kN%WJBP+Z$jEpR(_K z(^|GD!?tDDg(F2n`$r7{UPzpKE5|s3nR9CL-EuNx_FBn^N<^Zgs|!xXNag-xjbJy* zI`cSqjJf}gR_B8hFZ2Gc2aV1*c0ayk#NqQM9#5V*lC8_f%g#x^vQsiDeb%U5nTASd z3pm)wjx<>QhzK~Bfy6<4teEj!G%hLVwru1~uBGV%>v{pggCn9=YT$K%7);$#`}12s zReG23(0%mj_@NOHkW)X32PloSsPwrW#O(kgyyGE&G>o{LLkt0>jS^R<2?%<4?;E=7 z#_w-2?gjq3c@7I=BoV^Iw9zZ?)>dFz-LxYGq;B!WuO7v&CfRci4gt+|*5j?OP?HWI zqEKiy!XL`gH(yV59;kr3UjUq>li9RzR;C)+0flw_bp(|9e^dF8*~YvT+(?!4A$2=gYy! zm*3_P3c9a3d<_Fo;fVig?|~1&Ndl{=EOCvbaPPvcj_$tqRb4jp8ZJ?272ue}UWj=0 zCC;UZx$eIT(=s-BJ(fJ3Uo(#jAVuiFPt?wa2EZ)CNnF7O@p3p_E z8g*;B-@XC941ApVD85m#?RKsYvchdKzJAjSKb-u1KX#FV{F|fHwgL>?(aH;8qnKW> z$x}ccVfK;qD?o6lL9=Yw3;-C@_sLAK@&AdvZGFgVmHB*!RMo0#%^$8gl%AQtL5j@G z$#!B|crc%Q!qeom(3g+iG$ikZ@*%?9YO4bY4c{2rE;kigTPpQMY#OL z)CO+i{Gd%EaAbeSB!*NIA{@08{XZvog1-t${8t(#5PQbn!HD>7wiUw6{G#S3P0zzF z5>TN4`M2Y;Wyf6RN0=PAC|r#k2)prT1A6sb(AuibpQxLBX$#LKk^0 zE#R(|L)e&4xY@-S5qXE>F;8`|@pIY3j1>i5`CsdHaAzF$4Z*}PqdlP+=~V(3{3xM) zr7@f@Nv>=6cT8jmXIK;SubDy!%)xy`I|(nHsxP8~BGo@7?}g5D8d5$=9RX@km@U#W zf3xjKtj^S%ZdJgGl~L|}b+B=q3jn3eVlFL8Zwp8FbC@S4}0*dclF5iTu4wqpuSP7T8Qwm6bhX+5`d z?EJ*+n=tEtGl8BPzK60>1j@-@Dmz*(T(}AO9{QIC#mTb)vzGfqFBS$1UWS~-t?M@} zZ*URwb<46WZ&h?WmiLOo*XF=Nyz7TyfH zdXhhZ031LjdS!Ozdq?YPa(utzmWipbX_{y!|04;kaXqgPZ`k;g`;vleCgC>}jy<>A zi+AZEN$LzKpC{52F-WO~2HLJisAvzL*9eozz%#z=qN!+>Sb27g+;Uyf@7wV4M59VK z_6doevPzOjuM6{nN>Nf?r&~3yOzaCE-&nFDly&fV)pf1NG{6D&i^*5tWfAR60nyOq zK^{ef_HUKQ$O(#y-60=mdF|3Gf%Fyb+#CNPYfa&Q&e$FqKG?5u4n2Ul@*G=|KJxOR zqvQUlK;4ohu`|IiWHtY23ut$9R|Nw1vZ)v-4s4${IbNysfWEMQZ~LK_O?9aa0rY8Z zKTKAA?>m6{+lVs`nZKBZ_)&QWbc|}J{issY` z_Aok5a6mL~o5tfMPoL~vG$$gHpNAlSUGGDF;&`1@b}6*#3*}yWrv$Y730|X0CUV4# z_LQwLY#5YSB93^iLB&HuIiPzT70Rw@cpJ`5o1Rz~)@NieUdj#`5Y`L-Qw1z&#%Ww? zn%-ctjuvz|6=}XKw+_FfV|md_tVVH zS7YlBj%;m;%f7je3t?Y?R9XG@H)*8}kZ1|tZ$W=SZf7*pb)aoI1!*OZv?&A@9wkXl?c;;ZyF#*Dkp_7T)Fz)SV5Iyn0sa2xhL#rS5&yii@o$)@GWt|3y!tc8xdcN zB_*19J?0H43MVn2#KyKIsl+jM$sVaozPn5K5sxzkB6u1vt5>ONs8DL|dUQP587YqdB1+{S6aM+!#_`5;fNfmwV`ap5HAG6> zIE@>~FFH_HW4?l8ebN`lh%$r3n4^F1rP=~x2>tEd;&@(1_!JL}D9y#*S_vpr|AOR3 ze**B0ZHn2N=Li06Umdj+Ss3f_9OTH{pBHX$;x$g4Nrd!yR0UNnSl@Y!GMnzP56;eVEC?;`ZkAZ)@0Q*nWQUnQU5sY2CJL z=p{n!qdy>T+H0#Pldsys_{DrWm7^%tR&xATOk zC>57>Ig(w0B_g`rcYz4jt>rl*pvQ>z-3u-Ky!RL19G&?boQ>-{MdCf!@RT>Dk`X&i z>gaoKMOCiKa)P&A_kLLNAT5DHzabd2b{;qH>#cZYupuq-rQnfLEg-`0d3}>&3zn=q zA2fLQNY37tlkLNGxDEHI5F7#uDN4qB8FJWP`GoqOT~EG$YqJ>kPywTU_AKz(SvH{K zn+88-{2zmPAJh%B0UFQb4`57?7XEtXvySnA%?ad#Rn-K5!eN1PQMtMxg@+#`?ju`y zKl|WB?h}Pvc;BEmqYnFe+A!0^dN%yv69y}3eNJW86IxYME@&+JSjW<7&F^-z)Dk4Xy~1~P>w zl3v|kB2rCGv8OjuBYq_GvmVC8bZc^?d?r*HwY_W|Z!q|>UBsH46NGp-?Dz#b;=t;b z$G7gSA3n2z_$8$A)AO@4qzjWEq50-7E$jCT@pL6f%x=YpP4=V4;+`ZRq5DE*??X`E zcN|mSM$_l0$2XF%78EYM>|be5$Et&%%Y4Q7i(vU)JXgua)2C!BY1?)bU1gpEY0ut3GcmIEhAi^$D6R-%1L&(0~U+=5G7!p2h z|LRU~=qE6Bc`{8fg#da&;;ch(3Rh}k3&`9UoyRj4!hn(aK&*S~La=uj0-5X@J^mr` zaUcy%KabkDC(2H~}fqR`^GS)oow^llD}i z+#StEA4`Y@=9>BosjX+~+v%CngKG*=S)hOTqt?3OV$)lB(arLPbkdw*8t@;669emS zN-g6qZ3!6?WCT4F}^kEki8`=^UglQ_&r4UX%;-M_H< z8_V!9&eRcreJB7~J|SO#w|m?5bXk^Z<2J~-?X*AhDE$HZMEH<5?|2nq?O&6Ql6c(L z$(iU>025mQb&Ft!QMJ%Dpp9dLRBlCNoYO=nw^$9J$o!X<$vz}RmF6h;?6TQ=1wIKgxT za`^u)8@5u0fiPzT#d1`9tDnvA;n4eu^17 zRy*Q??&XjGk;O4XJ%hNtrT2Ru`TiWReCqab8og@r6gVTw8xMV)a zZMA9IsN+h=A%Ot|swjPY-px|+Lq?E7s$5TKQEb7ehNmSxahx>}ZG(zBHb^BA0E)db zysb`==|i?n!ft94w_LU4JRC$q^z`FG$PJGf+m$;!npGcLw4ew{t6lh+neks$l55YG zVwCH7j!A|5IG1EpTAiT_!@mYvj6BBBvtaVl>GjcQ)i2=XGWr}!Lk??eSB`*>1kEyz zr&cwNuA?Mp9F7p;k?7He{@u-}She$L!uPBj{Luj#a;=sd%N<&LtoaCM)}Rk=lig`H zlk*3T6r%qy;ZHi0v%l4(E)wsDc9jufJeH6EtiEWJm*D`}x%0?l3BcvG5`~<@oFKcy zim8WNeq0?2XSg|HOn5H+D|4#c2_uwV zKhc}?H0TkL&Hu)HCz9gp9XQy3ho2DizgB4vayeP?~{}n`TfAM z`CYoI?2=_l1K*xp3ZGoG`73tck!E|h6g?M?X3XAZp$!rW`-817XFu#j$C#{L$`Q6d zjbi-LCc0C){!FeAo*14s0wn5^Gkd|C{SD7ma#0g8+_C&S2vy&UPe`KXA3QR5Ebso? zi{s-GIAfBgdB%{6MbN{_E=lZ?QW&-s8J@O`whqX2f6>swyd$RYmtA}AbAWrjis6;S z5tkP2sW-_f-dqy>4>?;aC^le13d z7h)hFxZpNzjJnTxqQ_1iI@+li3oPx5*=Ki~ltFCc7ENXXzb`GNdPXm+NM4?>FI6+O zT44Zul{uE=;5!Y8VTX$UM#&M>RJoZ!Nmdka^!;P=r zLE%3l=mP0E-R8S43o6LG8p8}lw76<-R4^hk$t+tAiAydGGK!{PP5-k3`K^-KEn}a^ zv`Q$IXz$8!`L0rU{}8n4ISI9b3EAtNJ4e&`R@_?t`LNx<^LMcSaH%&VoxKz-FBok={R>25n!^M08lYAL;aTNq!qbT0{O~n%oAG^n;|#((rTbI|PwkJ_?aS z8XUdLm^a9=8wa1lJ>A>xa zQ$5Ogt304I?V~wX5Dim!qcJ5(WfNi(KmS!@XVlM70^a9$a;{Y`UD(pM-YCHVZ-36i zOI&3@RvEf2Nlp5IBkB(J7L{h@Xz+nHgEFvt(J(CNcM+x95G45>TWJ{b*_2EXRaVl{ z38AA}+)$vg{>WByoPahxif1c+)R+aud0mFD4sA9mE!m5Nw%;-N)?y)i`troIh^S{@ zw&vDGn+k_Er@qf47JpT(nt-7!KqGNqr73HJv!L6T{v2PVW93A}SIFXY^ZN#C$}e-S z#W1}Bh{-_xPOPK%jP@y_l%axowJo`vEq^mXgZ7B3ktt?s!Dk7&tPGvLc^3{eRM7Vw z)0kHNZuYVa`S^|tM*0*1d@LQj?Q9zj|BtG(Y^bVhyEdU9NT+l+NH<7rV$86nqxf{eF3W0AJQ-%{Avd$2g7-=r;NTu^l4eyhF@4{cxhUlru4W z?3y28qwPi14$61zTEDPHY0q*L{5%QJC#!5*X{GL%pP7BUq(vMOS&+$wiF1mz2~ZaF zdst*XKlMbLW@=P(uA#lHAjZ+CLFxt8czdz#z)-bvZE(wx{ixErpL6onkhR&GHVtH{ z^tXl>?JDtm66cZKp1j@5jqpUo4t>S*)=XA;ItTK_>#R>5@RBAXQ6pO6H{6mXk$T_= zCVbqOmKba2nGokte zpEbz87v!H7!L%%&7Bh0&Zma_wlu-G0+qIe@R0*ADionbr*1LcXfI3XykDVox) z<-3C5Vtdz@Mtf*V&A$XK3XC`}ou25L6F@NJ>)V^c7#26}0TqTn6b>$l6Bo0*DIuD^ zMsFiW$7UNZ$u&Y$dOp;!MEniO+u+CpF*G%@*Xwh{V4i*7`NNdpCPN;46cw%^HyiZ4 zMc4j?=1_O^Sk0|-0rLI3!mL{@my$CdUML9HhH_P+?bp=v5jSNc2UW1RTDHfc5?*AQ z`e&$Bsk8* z8XD%Zm3I2QU;!h&z~5B>p&{vw*(qX(-+65XpFxvl9{>o&cO5VLa5J}9eHGV;4Z0RT zJ9{veOVREjp-V;>eY}CnD+EsgQWsKy)9ft&W@@^WEDSWFj5SqRH9o{8m#0vu3pi9r z7@rJmq(Fr9vLboJ*-7?0#zc8(8BVuROJ26(BUFOW~gaAHwK|&Lob3IAaWjltKZm zwGBrzN-8{+<+ZaVD?WMRIjyIm2b@MD1*t1qu|Rc*uVB{Y?<=mQ_7~YD!vmKZ=L<@Q zEY*nuI`*GcQtxJ|y^K;nfXy2sZvU?BHlz*9{y@JxIA+sGLaEyQO_&(Q1I~IQ*A^!=6-(2?PLw#FAogWZZaMIi6{XV}%j5^ON6M2SL?=Rm zsiHy5%W7>i`XUK~Ea+Q2umFlt1)m5$ycpE26)Ppwpn6J9V{P6|HwgO7K)@X<<%?$Y z<%U>on6+H3DpNSxN3@C$>Ks!W1!FAL+QLrX6ijfMDC*~ynHpuAv ztvk`2A>S5H8<<(fq^NN)0P=#3UoJ0^{D@!BQ zWgP9Cs`yb}4+g|N4FSwH2~@kFaUGjf0GY?HRf~)7aP?#DDy8ug0wP!NC}dDEg(x2e z34hS^`)`WZCmbx?Jk_VS`|+Jj)mM{-&;YT&Ywds#y3q~iE5%lXFU^(%KG_EzP}U)@ zuO`=2$-;CbE%_P>8X5JI9fK6tc6bgJ`5LWOq69iqQ*@1?oRrwgnQ_|1aEA1B^L6ew! zWwrffnh6{BON0&%Sp4RBMMkW~nq@iOVB$nVtefr$6IsD^#FNc}*@LK0wg_J?M}YGm zSYio}Yn|N@sV9bETW=UtZ$96cF{?e4N|MSHY-OUir>MnY@2rmwxvaX2UN3s_+0x!^ zlrou*3BC|o(ElydKByJ`@4@f8?&!PVD%j!X(Y7R7&n#=J zHU@-&N^<@-Pxw?6o-13F5cGxo-lnLK;(N*nlXMYv|FeaPl8*FbvLZoOI_lFQ(QE1a zCg1QlkpB^ChD9d-TVmCYA1vv6(FN~TmcN;fH&I;JL`8KNZ5b~b+@$PQSR;C?d7A%D zYpqo-%ln7COI9heVeN)T`LUcH)xEz{FC8$M* zV$*DwWgrQTF-8k

    f<4+e{=4ERK7`3L8@T9!vo$OB|0=#beT6w_1~+;3fkuRS3hv zBJAj52j$ag9YWt?vv}Y>{@EeBM|7XlvIUt_uRC3%xML-5s^by7rI>i{#7|79!`qKk z38_&g1&o0Z`9fWWt*pFMuE4~V{s_m7ymGdroTIO0AaD8;gZHVlI04wc=Z?#mD@DQ| zfVKayb^(1`zUz(#%p;V*d04r3)v5F&Eg6($aRHppEQ^S@xwu|rd&>!AX(AS6W8dBH zJw5!_E$#Ff}UTR1E;9iXN+^CWR0^EIuhbhb99KJf=;|Bvs1;F5E8w$>}Om` zs%SD-AN!RG`5Mv#g6ZOcOWu819hvDUF6msxZ$d7&5(3_%E<00>>e6zap-xQ1bc~4u zk#Ud>3log+<)G*0QK(^846zvQS1Iv!hK*koWTKMPu+gnyPYBXi6V# zW%)Y75zz9d`D?FKw{Ez44XF$t!-U}#8W?s(3a&O1acjkQM{lLn&6Gc)`j`&FpnN=d zf68TCuIaFu?-hV(UdrCuko;HT$vYsm4iUKq*X535MAHyov>kxdqlL&ie!s|THP=v{ zY0e*%NzQMwZ86xPmj9AgqsI$!$?4)V9VQ@q&${s#<|sE*ATFU<{Ake}O6Mla(|2+I zG5CPmgce!6ynxV*u+sJiF(zwjUG?clBQPRv@*d@4@{Ehogzp3Tz#b9Z@b)gS(K9+P zgwZv$&0Q4hUlqxZ%oWh{UY^;zhOVSsO0vq^IoThd(g&a#u~-8dRI1?*svPvXuw82| z3tz{&e*^y*luYWz@`?iqj?0Ubaf`mGMfQZCUQR8QDb$B9R9{kDU3>rd?zgIQDj*1s zCfe2ce($8t4yr}pq+G!biPwkhaC5JF*OF}tAgSIRJ%~-gS|Zwhc=J6UehT*!x=x=s zS@PQ$4t@Q6zs6727an!lN4%^`wdr4-`LopWSMw~vqDYDklhs6R7dx>lQ4L=Ft_(d$ z07iaFn?U|wnE;xQwx~#M7@uH#W{E`(!_(Q*9NVwg6Lg&#HI6pwyiG{*6R4ci?$#E2 zyPReiuepPRw)yBTv$-}?`Z{{&U3WGDp0@B{ctUK8mJ{KLoz9_ymf)q$r8g`b)t3MB zH0V7zb2L2X@7ui_;D((aT$ge!*6(~xk&gN=74#+$R1=DScb92uqMX2)9=)+_2@*h( z$Hft6f0&B(rG&iMRHB|X)?ZK8M>mMr^8ZhU~$?If+pS|Z@q90($S0+=}wbgm)} zdA1y-CxJe$AF)n0eiT_Y|5i7@L7rP+DJn6g71u7rT8@`Or!^{mur493zM-j;(hP;~y@(&i zt%3axXoaCL5V`!fH_wSvK8;%^%9l1%Cla zZwKc{`>NcQhJWg>)u(JrtxCO2MZH5wR1iUWqX)9oFZPdrqEsG{K8X_k$lq(1a18QH z!0FI1GT844^tWinwdqPjEsnPA*G9%>%1PSyNLVNP>tWE}X-%$c_6NtqsJ$;5)D+l= zRMDx^;_V7+?*GH>&+p z!T=4aXFhp{p6hx#bC_Ya+MqMvlGX5Wi1gzznOpUgBgbJIF(nn1){F#@p2|CrG-1R0 zFHMFc^@!W?ApW?=-9d+|?_I5>$nfTfr|wE5OiZ~Wb3y}0hOM9kNxZ(11yu46u&0uiBs4pqDiDs!Qfd{?tl;QUUBDS3@SQFJe`4D#J2lXS;)Lxm`mU-!!U@@f32R!U* zJvT{|KtVY?&Rnxvpb{bY*%dlHw$V4Z)Q)+-_m{M}K&?5|mdK=@OMW?}rtr#WH+zsP zz%6}7teU>{O1;k`QuvQW&m;i`HuPOA9g`cJ29Q5eZoS6&8^k( zr1W+7$F%Prjl>%>glft;NjR!tcQq|cS`|tew?zQb^(X}c$z;&DTREWXFSQdl%bW@i z_0{_$Oei|BA1L3yZ;J6{8|r-{<*J*s%d_}+B3$j(`xyb!c}!dHuhmprregnO5?m#E ztrf5S;s)vdN(j46An_ultZ4VB^RU)TTA6MJ`Y6hGF0`-9XXB6ht>( z(9~4-%jsH&1%pY{F;LQ7&^aXFyP|X?TrVWQL}AfkNrs^2F(Em>%Im{7gKTk` z0TXvUJ!LxPD>Ry6Smg>8IZQ^`H%`YdIj#E=PMbeJcxHopM}CF`7~cFz42TU{K;+%%Zmmr8D|@HoA!L3(D2lpw@7L0%u$S&_p#ZQ?pfYl`I0j<9zlY`{zS(df zg#W#p!4?-l=#ju+hbcMD#`Q#rr>74g+kCa)iDJ)YCLp)P;Cv~I8elontj><)D7KAX z=1e={qV&ErD2(y}(ekn@)$1ei({tHTOhHd{stzXuB(#vAmimA%GZTUL4cMV3X;BMk zQ9J+&?Z81rsU~LZRsjr0fodguQt(k8^T-7SxRnk|j*m&{3cUv6gP;z>-*qTBDE*A)~>axp>P)I(wH z)vXzHZ@|Mc1U#EfbD7880*Gb;Cq2t766tyzpbttG&UAnrrdSOtdiu`MqMRQGG_BMm zQ~+by<>DqJ{~jqN%R)qRYtgJz<0)~Uqc6ttUmKGL_c2i&?gsY#)jmT zlD2So=u!20by-q8zwK?2!R3aOt6SCKR5eBx97(QcU#fnpU$sk-K{7u)cO#_ceTi?m zAaedYePE5f}g15A#tY>a^aZ#XvTS$H%Q=HYP#!a>jAy}b@XC4K@?(FEZ zz7os@bYp(TVhrN}1h98iDM__)@A|tvN3oU*6r?-w8UaAobaj>5 zu?p&VgTxQKu7yH`{u*v`uOaR+qBkO|H6~gduv`@P-bMIO+yPRZ;GZWcL9{;n6kE=W z2VI9Ba;}n!2Y~_i^o@hFac2-?Ukb0e(4kG70Xl9EmX1c-m7!dPQjdFuX!r3dKXWOm z0tJWT-Oooj`8KZIN7!T^3^(NXWLe+!_!C!!h)B`D0|OAU2Xt_n<;gvD{`Re{T$gyI zAkpOV?xB+LZm6-eV3cP}6I%JFSU>JQegS-uOKGg8Uvc(UT0DtiJlsaBs!HE%39w$f zj_g|*Yv}J$c@5UsImpjC%7})|4=K~oS1pUPN4qb@)PXlnO6$av>o8G+5ok4&UDm#hKfuXYdm#)tEvaZsu?Ex9}nNskAf`e7g4e9 zcWp<1VC5-C@OkbsWFFn?7P?--4@ve!Y{UJRe9q;2hqVYFO{AWc_NdD-v|tmgXvoO6ZyqK0`5G?Wqm*G zHdXAFzDd;y$kP^7P||!Yf3TE5Qdt0Fm-eqCZ%WY-$p2Isbo!f*P68JiQH{9aXH&ST zIISyh!gKaj97owse=Nb?%E=;;^Vl;~L;slAY7k*7?n>Au9b;6zL|Rgb%XMwgj#d*DoawM-_rnYQ=zf*?k;uOW_m2`G;YhtCId zNr~X#8fdbe6TA;)^uLX~0{?|H;0)1FKPIw#D%;ta+}E2$72H4bz?2L%@* zlBjF8%9BjwIgZn8d|b5LFE-{&tuBl1p^yc7=^`2%sNx@ra%o6pD@nz%DYLVdJ~M~X zl&gqkB=V@G&y7HZgs4Li$<^@cL(!1=9^RB#EZ>Syz0==qh}|+mI;ZsA>Ug6>}XW-a=%&iRSGZQ^*jm z#;Qpw>9G!GGoi8>UeyVf+wpYhx%D?Dhm)_)S0>2cv~E1uGo=+&KwK+&atEZ}xZ>zcc&axgK zzWdX%@c2ba0fc)qWKvovVO+H#I>$uW^sO(If6XqXg@nq(ZOk=eA&g)|nh}Wric^`A z9G)QtiI-|=D>&@j9A+XhK_jmG%oB_doRAf>*L?F)HG_=^(r_Ac6l$R}v}^c-gL@)= zy(LR}g3+%tfoiX8{bUpt-Qh!b&td_W7S^X(0(GLNA9k|hH!9k~i z`3LA^cIa;7#=;oWXxOH|VV+y*mz*Zo8{)VyE;1$9$*%dyTPd$SeI4o4p5KgW zzktKEs30}uy-|daRZCtE0Ap}sq-6aLzn?)Sj=-h&BHjCV`Tek1j4YyQKSKO!GQ@!{ zRb{K7OV zM-bspb9)AV(qzIJ)4ot_q#R=&l&K^XGx^Bkm^dcL1q)4J+H$FLWCiezOy?khwCJS0 zliF%_3KfZT#eZ4NH))A=pPF@tT#?1^I!UWg__#upxHSwss_n*xrLV|tMT&%lkCI|;aoZB*o zGH&{cbA5l4&7(PdEZ}+@jg5_d&J|f?s`!0GFV@YwM_|`Fm4*uS`sMXudzZ=1Bhq8{ z?=s?C*gYXofeQ6-WeV+aC|P+#stpL^j!d`ct%f`Sel^1|LV(;*fP_c& zV`lMT?s9YO;By$|FPWKSDW2SgXYr)tNAJcG8j^~m^`E79=EqqKYnzK$X06g3-qeLB z+kO;;Ben_0G``fByHkU=Wr@d~77#6wULEKiHk3otjA%+!aHPR;$$(g zLolHvSe9IAAiiJ?b#+*=iN=Lv%WUq0hfF%m7Z?2fzlaLMJy~wf6gfS15W(T)Nf9ok z$0LK^Ca*;A2dx(I6yKTal}__;K5?S8q2fXZk77NnMQ)|LMnBc$9e$D$=@A?Pt4HX$ z!BrH>%Fid0#0%NJYFTf|whS=hE^EOcPI&LJ%fWC#!!7ffz1aRfq|T2H{yuql!^boE zp%nf6E2tHnap@%$@`$U|2(iun3us(Z-u|ZO^&M=lEi4g_`&6W!$=_*c@Hpx4Wz?5I zJPKcu9V1#ZZd>4I=RGc~mAxt=dAoZw|5n5@GblX$Mdq|KE2(G^u2c_RY@i<%>k1AJ zu#t<&!Fd!1}zQJzkwlfVaC=X#cF*bQ)!O?P3@%|HrAjaWD>6WP=Se~YyH zOx<1$9*rq~mP;tZN8tWvZ6NXiorDOL`CvxcEZRzm7P*_WOAki6C1N$@bRWgfxSjuSabARy&Iwz}vwY?7F zm}Z1r{Ie6~X(YsEae#*7tKabs%3xEA+&ngMGG}n8$$l42JtM<+_xGoMLI~%V10>v$ za^1DdSFY-M)&K$rJhWC4RqahP(qBzabmV_ycD}~WYjyvS-~t9TE1^gR6i8su z?N*@jbkMD$Be;X#+DTW5xqm_9Jlj#rUZZ;~X`tz0Yc=vmr$vKqnzYSyIyNV*45Ru< zkx4RO+M2>CB)@}~P26@*PcEN_3`*_~izkLf$ulEV=)iP9WQqrx%#tAiobms(9>++| zQY7bXx?u4IL-t7Zd8d+jG8}4jpoNI=CGOc;&B+Snv$n_H4V6-;l>(6X@gmHP9 zT=I-3%o^i^d)-xxB>0d-AKVIdM5>s)q%G}OsUZM|?vYuCSqBS(*0RRP5z-z%j|{$z ztJgGI`^cLqt&+eX2Zlj6SBIxVoM5Ir0t!9nNfW2ltQXeK#5SmdmLj>m{ubP&P(l}p z#Wv3ikQa?>JIB$%Mt`At*jjS(wa?K!(@13q9zs&G=9uV>p0x`7wXhJbAOi$iS7~P) zUB#MaFOlwTzUI+)nv$&1FiKP~!Zp%ul)rp|&nJ^20%UyMpyS1R&jH0L;RGM^LCwO ze^lR#z@jq<4DkaYK`kX=V#gMJYy5pKK*p^z&3*g5qBjT;hJ{<8zS1z4vc1Jsjf0DxREURliw{s+24`Y zWV+H%$nTgD#-E-kmPo8(**7jUnMS*B*q5_)h}2M%Fv)tcY3E1-h7gCfFV&&EsN`E? zFy!rpig+)iB4qT$>XEqLhnIk;Kw%l^Q3IrGrDOd>-b>Oz=oMha$G&i5t5QirNGN8>GW zaht%|EdSTS!S;K+exml0 zn%hc_VtY5?jX8k@2Qmv~}ONks%#J=sFGcvw-ndJ%UP* zuIS2uUgAZ}?`V#&8f{Hc;t&O&BNY`G?l<8(GD7H}SSKEm=%mnPxI)^N24ehM>pdh5 zE*bWX!hZSZ%W2(=?6ei3j7r{U+=T`pl<#j`@!f~K%_;QOMwPQ5ua7G2fzhP*Ne3LY z-!wl50>DUfAi`ff2+X=XG4XPL7Sglxya|#igd~eFl1fM4wf!q})vD~LjqG3JLK*|< z@kP5P=zCSf+2_5u>-AG@f>Vpo)Wn|Q5zMtClw1fgP=?yf$Kaax&eR-ddSYdGWpxZ8 z37lVl4!acF^+*)X~dGj8eiM_KNn7*=gVpy2~%`xa_lNv`B=@kZ|CJvFfV z(7{&b`>B&n*{(PT3|0b$W7q*50&XRU@KAi0v%30z!*KHP84#`1OF;2m=TTBzN~E0! zn3>iTOg&sU*}S!1Ddna%69&X!XqVSXXWJD;E5VhfbZz8YXx3KUigqHtXzzAD4q*)- z|Da*}Md^+4SE6U9Wt8uNKSbv}gK~)fI@@ob2SC`B!ynAEeJ$Vd3fxZ)N_~R_PJi;V zT}iONcsnQR0ni3~qY1#d&cXl)uREiQS&RMis*B^v^Omh1#aGG2#{5WN*{&Nvj?JOlUlk_&?hwvV9#H4eX`a1oVPRg++_IePAN z#!Sk3@r#L6+bAkp>o$mTAo#@84u;cS0(IXNL`*~;{Ce2&Vv^6*$+unZI14@F?Fi~B zSrd7jFk#u)l(QPnBoLn-q%0Tr_6i+q&O5cW(rk4ni(O>TmTq&A>N|9aES%w=?M<8RF2!ITsn-gVGuNdmab*i`NTJ@DrvdUb4kM^>zA*So zj9r=*UjHeRiE2)h!qp%1cN?OmBM4~_q?Bv1r#N9CJu3ADh%W!f==c-!t{li4>?~MuL)ze)Z#|*>Zb@#>N+sUazlfdSui*Za_dOR1cA0^&8xv&_E3I$?dw6ZJ$AWy%zd6GidYyCN2u>Fd#4U%S;@!8YBCc z0vF#Rj4q#`&OlcdlD`_6a24Ho>3|ZqZpMd3Xb@**fQ>yM#(!4rr+3`jT-h+Q8w!mO zJJV&IJvhW&@mjmubfl!!;xY@8V5gF7s2qYsCf-NoWWYqId`dqantaMCAgxyt5Xdf- z))3ve#}Ko{n(gQ3S96NN=JtIz)lrSiAp6<3S3GcI6; zD`Q|vg8!)UYl$ydjxDPV z$#3OlA3kfGWnmbW`EXNe|8QTiS|6$6P9H=20`$uzwXN3(hKjiV70`Do-!d=Y9qWGm zFZ6acdYt*4UiL}PTt0W05CW|F7irq&IPZ=Keyi4jp zpk(cA@4v~9W>5d8K7Z<1y>P;FBXl6@{e2QN9K{pQf@z*&(m%IH7svhWW0OA(O2)yG zL6dm*y$ou!sG!wfI9hd|R+CbJ8hTcZ`G?~=1ExOjxS}AQB2~rY=(;0F`0B-~cMM~f z0^Ce|O7L!!l%Y~^5QQPDBrco0jKb{w-H3@yjddT_kjYeTNF}#AK8Mn76^*?JpSd$| z2_@$;n2|#bRrV>`&h5dKO}=SmSXK4RV+?t^!*?T6_tqnZA)i?368y*IL0$Z8{FFX( z_!;XCwy-tZ#k{4MaxaY`!iwIrnmt1jt)w9vrB{@7j|)Qfh6#a4jN zyPqDqJeb37FpxRs55vube9lrhg^PJLyMJh<%kMM?%Z?mjE`!6~XJJ$$h46P8oOjKZYm2+c-uEWB(``>7++_^&wr* z2Hs4AK~i9B!_S!@K($>nZHerw@z2O4c^povZ__=DxUrDPg=!Va@pGTe2CvJd+&{rD z#wsw~k3?oY$tvVjb$AZpn$Vki238YgY|tJi+ml6Ru#q0gE-^z9Rw)P_b$)u4GU+{w zvAn{QgPghlxVekpccv`a2LKzLcr6F!5o7CDfkYPrEq~eE?IT0>y~fO9vpnt2d0m$1 zPd4&HwJ?zA3zX2b1-~&?(hdSN;;${1GOT?WlYnRTx zqQg7Mh@P#qX4S4u2?_T2DLGYvl-3;lDfy*vpAWle&Gv%hH9xJJpN2?n#7##KKC6py zd6c(&qmOxz&Un1p+Ig2-o7#R;NX{)immn{kCEo%;`W7<~{3L)F0Z_Mtdw=P_d}IA= z#1`k=m>lK;-HV_*gh?sfwh{1gC%^^9_E&sHLI{dzJ4dt3?2@SiOtEn)#kB)l37t|R zag49l`!Qp=nGn0RTHM^H%TpdcLHJOV)Yksrfb*oD?zs3dT$&Dfqg

    $K>prs}%SW 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 JQg{;fe*h_jPqF|2 delta 115916 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

    FGrZm2+CThk z)g`r=yVRAbGlb<zfAJM0XzK~x@0STx1SA|{2s)aUxLPdhX9BXYwY8eZ`&$P$TZ)9M1tbwn z@w_r%Fj@rl;eQVX1szWImc4+pAe~TL;lKRJlWm=)<{^e6Kl27Nnk=`B8XF7-*phy9 zE4He{GkGlrA3tIj`Nq1>qhqQ1>_2kwJqWwYdNR- z2qOG6*E^r#ii5=-4cF_ybJc*zrm&YvZH0a;V6$Zq4wukI+!MuD$5uW*t2T4lwhGI-MMiEt&vTfT1qEx` z-k^_PWOmGY-yAYjD9Xc&d%6{rqUX(F2_m2heVR`WM>w)Bz;G1K^#C`~i)u(T9P7SQ z(V)N-xGhW>dc25i_dQ^T#a-P-3-|)O`0Ea~0Li{Fm+0CC*LN1v0sc%hd;2)%Z#9KH zc;BUm3j{yU!FI$m$stZ^?jBMrEPUexJrr4u1m!owT9nbYF4klW5<0tI^tH|JjT8Sz z@F<&pdUc7l?q+RZsgJ)S$jgHI+e=gr%5=z~h&Jaj*oD+$u{mA-i>8)o?oiGFw%IZY zF(2ZaTm#9p0pD9ehm|J|AcUPhPfDl#-4{&b=>VlA9`5NfUcYdP;Nl~yZb8P?4ohh) z1Rq;ih~5X)J)D@>6v~xf8CJ_@iy7_Cg+%)=0A^Grruhy|(n?f@<~-XhO^2F1kNfjY zE5*(M2QHDdgHB-^4x47YYna5m5fzM&(1J@L_AJLQ;=kX~zsiN%Ow0VT!5h43H*G-b z)xb!>$0z>*AJK~D6uav*j7+(_I2#21w1+5qp2&Y$sVAG;gA!PFwAsy36JE#~eDoXd zhU?>93ImlCJ3Ah&8uNU46a}jvLf5icL)RzqU|fHJTfjXn))@`s-2K?v z0-Yp^_bO{~MA3J}NsTi(0?)@OmO!`j2+cS59-jXG$%b`44IopuMPss1C#-2_mmj|i zGC3&7EP)^qWBbWXVf+on`r|A%7xdovFH(dShO6JJpGqvzBip}!pE&T&6Ue%sEy=7x z%kZ1_2!-|!btsnHqzhxI z*;4;wO5Kq(94NDJHzb}U0Z|T`0oDdwCOX=Gd5SahF`Vf9%mMleLrGYl87Ubt@x7$+ zZ1LUe^CHlo^ESt!jMuF!*I+U;61k^w8h@UyUK@N>TUnL7d|YRTm~Qra(i&f~arOI) z_Uv$EB9p@TnN^WREnt&Jl-0t*|3lTC+}BCwzljShYWA zQIf2ClSNbT8e-k*InPjP!lYqbd-4E9;f6f|dmR|7NakEM4a|$jfiv8B^^=cZciT!+ zv)6p919ULs>0th^nn8gt_=FO#1a{KSMsN&~EeGnf_n)^I!tz($AnzM!!WR|J``%s; zx-vVILr(n5@!e_UI{CxXm12^&BPIM2mC0$L>yL++JwD-t+^(un79+5oot3yDuN68O7&(R50HquM)Kh&x$7CRN~Xfh3!&O|6zlRwMk>(>xEycVr)1RLtD@{bGS_?>f&-VT2c)|&|DpR`|m*dMK%vZOy0)46zQ z`osTtzwP6rFUr`SWW_!A}xMBIbCZ_o{GI7P_tmc0Kmho9}|q+MNY zlu9Tem%@(AWb;9KP;7Oqwe0DS0*Af?R*|3+k4Llh#O%=0a*?Q08lcr(Jo6_Q4aHbP3P=DEIH?s0O>Q?+h~R z)!p%8(b>S<5W0(vgX2XS)I$ZiL^PGOCoOu#T1_5B2pY=B7*Xn#hXO|zPlnD8gn`7; zi}Fuu+-*CXu!{b)VjajFLa|jd&7Ol~f*53qKgkv-gRHw3qoUZSjUeCQR21_kC~lT! z31bR0=_GJBZ8q8&JxB>`mXs0{hVeP$ijd%0pj0qEP9$VZGR9N_=Ei$Iuw}HdZ=jaU ze%Gg2J=>1VK~nbqckurC9kO}f#h}B70YCC0^gjhQg61E9$Yn|-VDf)(14+t|UU*kL z>3t-y@4*?p&B2FA`9rw3gJO(jgX?^QW9 zRu3NK`N~o8`-Y@i3+W{#HNG~YELsC}%V3AVzFFd)U{7nPy4PK`VVRto+FBoZb>#7*vd0446#XD+ zDhYXQ9HBu%#%9tlhf{EJ+b_u}_in%02aaHC7$#!S6GXQG;PRemQz$$KyW&(>wR|cg z%(s^r*%B9zfejPNJ5QiTf)}N8ZlE2P(BgsONGZB`l zq;3p9DO5}T;3JESmWN9)>)oP?kPZAZF(nOzY)Ury@HO|%T)obVo#x%Rzup_!ffbhb zo3df(7(7VQwdjVA^zO!yp?)j;kM;i40}XZj^@j1CR%3Ob{o844W%LGLnV|vAhHaGlShXGk`HbnF=|dEtW>HG z2Ti5@ZH8M(4Gr(+tY`wwm_>6h76gNN|YlG!<0ZE{ttNL1;uFj!< zL$P4%Z(T+`{j&W9t~m|kuIYgMF>^G0b%A{lTrV7BDw+0;9b_~*!3%xr6fQEH zViWh_tVAYykGhd81ItuffHy#i@^P5&A!O=vK!IL4a?BGhc@MY# zdL%dyE;1ZAvAJ~~`a^^m{Np1f00FzTv@{0|MSG!i3=JFJeyob}7$^nM<*(H4D5)H! zl7ww)790EoEU(g`sQhnD(~$}ZRbRD!%ZxMc;&MkYc%j+JeRT1y4*}t-94?{l3EUjVHw+9R8)%aO zzZ#2yt^6&gQ802&+e>MV%khN8nO5&YK3Q{-U-2rWmROW!QTxVYjm{V6SO((f*@;!i z{9E|qE+3Qs^Muh0kne0xEh4XiX=R^%5HSDw(1wNsf2*Lj67ngsclRA-_w^kXkEh*~ zNTVOM#LbkF^fqA6LKAMXKS9ysQ9hRe_AWD~abw-8QWiO9(z>h5GgpASw#mPZU@@wHvXzOu!xO*=A0%9Ofxr{EXLVH+OE3RK3PMg0?Ua5P_W$}=% zdbVmw5$|^0QJf#cUSpHgl{+yKfFoqa)q|r*c&BYD-2D`h;NRQ&DWK|vQ?gdH6(>dn zBeQwT3In-j){IR)qeC~xpCsuH2CDc)pP5I+-RHE~@}P;p_#A<+Zh zpqf|SI@)XR$;n4^?eDI>4%4#MB;-QNZE82rls&Y;IHq+jMZ|7Nzd%Rdy28x(!e*70 z{cZri8a0^H%uT3k1KkWvT2@o`W&W-u`!E?dc-Xw=C5-*{s`u0RXUW9hzh0gZ1;d4s z$cLw)L`?Iby>=YTCB&xQW)90G`(4z zdvxH`s~()h6@7gAUQpqNSQ~+!f8t$t0Gd}?!7L6t&2fWZe}=IF%^-RS7}WiXZz^ys zV_AOS&jySlCZ*%gy_GDrWM?`x%%^*-vr(Fb#_&*M(}bxg8WoVM{YA1sCnCMnAOCI4 zB?Of*kffFaNl=sh9^112+pf8Ugp(MR&+&EV1gB7Ay4ht9V(VV%u-)iX>*ejA}hF1pcc$fNMu zh0oX%eVGu0N`pRON8}|nonm+~)$Od9N0Y(<2lf^o_`+nLgcMXl-@RpTigEHp-E9wZ z5daZaKre}7L#cvsiIR*BBx0R=_?rW;mVSo^eK1=!QOASlpeE7)S(Q8&04O2n+p?-;q!9xUhNfDE@jDNVrC9?MLk}r;sOfOPlV0W3Qw+);*J@O+iJkkR^ zsk&ZIa=;Zx(0Cc7$TXbk+n%@e@FYUDsK$A}PgkI8^*V33P(IQ?QM^juw$~GvAm^=p}*yuxbnl`n@C;%4V|WATN@kk#Ku>g-gxkm1trN& zz=F$tI7|i%gAn;mgu{Th*Br=2Gw@VMkAGa8a!7;>8Mc0i$XD7t1{C|cmblS4Zn#e zzX)#o35&~}ZP%tHE#kmTt$ATy+pzU$YC(aLqlcl8L@$@2BpF&bLRC!#PZE=jXW~tFtHi}Pi*j7SC2(`ySqoN zAI|&EmgnMX=#+_DPUF5c5L@st1;K*8>v&2?R{<@Kb{|A@d8fq#v&cWPIn;3L;`Hdt zNU7!6hevwllS0VLprg>lbNM6&g`ViGdr0*UDeRwsJ;KG!b?YA8^M>$=Kb-RDuwQCR zrWC9yDHOtju8%tW<@Gav>E$n;(Ek0Q4tw^#yed__-0M6pdHcNB*P1PAN-E zPI#ir|Cm}_{MjP3JN%l$T*xt1;vOhTDzW;y#UFU~>th`gkD3>INW;oy&;qhlkE>j# z&G`(aSy zN_DPNlX#N#C#8bw{0Q=u7M zOLi-WQ*G$aNl|;MkY#uubiIYtNRN@MZvWE7X_S8gAgNF{>WAKlxxTd}XqQOz%=eFAdRC$=3l&b(u_VO_Gw#iCRW6j% zd}O}GqxaUiFbEK9O*)F!NuQ#*Rf1}qqa%Lsy(f&v19sKjpmjd(Ytg9`>-tGNTaDgi zS)M(#O}rwg@k#b3^rO*pT`Mj{i8h|kmyCHg{`fD zk)WF31$_@*GqL*tXyNYwvjspWUzXth85 zaaBi(fFqIM+)r73ah-G&c+L!lVJTteL|g;k{_?2n*llc%6-3O`pC0cD0t-(S2%thS z>^8NPQ2(~eQ&&n|W76}0!#GI$ZA6&kw^SkgltM0rNNw#563rakfxr&$g z&>()^EwiG$)O?=!SjCPx<1Y!bTu{XB>h+%6mM>l?py6TMtWZzha%1=$8pQ)i>t4eV zMFOjgVBOC>Pf$md@tKaw|5jzo!GM;P;5O9p0zYQyS(lN_Q#6 z!V+VcYOY6xjPRo$uh4`l5`bl)Kzz*m_EyEdic%zFHeP58t zojkxF1No1wdmfw6j}k&qR)Nu4bULH;_or7@>$pCAvN_jS%XzjU+%p*h0q)xrWpfh} z+c)`n3Gc6vjJJUys)Se{&Q%%m-SA{k&DbF=63h1J&(d(P`T#xrG~lEAyzgn-*$gOG z&e-$5OVYV#J9(Q;2VzlJMmJAhU8I>MRW};Nt>h-p9Q=EXchZe`hMQlM$W~LN4dMqp z5@RJ2lt#usgbmxzcBC&%_;jC^b_Hru@SuWf6qXox9;&Xr!RO!TZ@u>Ppo=*EBK&Lx zOIcLO6ZINT-mWd94f*(%&xHS%>+u0d`Yeu8CKeaVc!0ID0m`jf=9MP5fkQ1H&EY`n zP^T*9GNI}Q>cCYfS_tp=(B@xYOROuKZ!*Tn=5HEXl7FpB@}`sU$enS;N*|Q-)l?tm z*lf1nnxv<_*}&mJ?k#nIDt76`ky+J;=nUN_nW|o*P*Q!}N8f6Sm{Md5%UBZ~dv-y! zdN~2HI@bW`m8ja@B?vpm7End)#W6~6uH;r(6bVJ`FZ6tr$c-i<|t$!@XWp^EN)>=JlCgOR_a)}aqsao|GU$enGw25GRn<{+@YMS#i3rDf;KMFz(*udX! zSbNA$;|5cmGlG&MD>->UjVSE*SOw)tt)OUqEm2!Q4Uk z1*o}#yVC4qg*hk;H4Ud2lK{Lef3uo}SDP05MPahm_}U-{E4wTMf6uFXnUb*$9NmQ2 zdG%@p=c_Mq!);Lb8k3?VorE-+gVTEEt8tF`Ogj`YP)5 zXQ`s8?4|8UH;qXWAuL=L!X?oYjm*S)GNTSaF9gttMFk-K z4>G-dAy*l{9Rzk=Tod@h&SS|{y*pG9dC*$Szt z--q6~-tvA|P}oFBaJ~Qv_qZj@N&3&kp7#)6;O~8to+Tag*lbuG5{J68r=H^lbn#En z`Ge5}*S(>vAIQ@2*#v_2;xj?kz|Bh8#+@s7x|Q(0g%>*>fg*H=o*2-3OEXWk(c}&Z z8w$Gr1dYyF{WlQyrN|db|EyG!1x3N2DZ9K7!v`$l5nF!{(EBDvntitFzl=0jj%oG?k$}B& zt;&aNRw!mvfvX2VdF6ryfrFtdy_wjIae&W{wXWU*s_@ivf2Et~z7<%WitqzITetN4 zfTbH120Y-=Sz^QAuSQlsH+(iH64jD9)f&Cle>)kL8Rsz9D`=KD3SrJN1Eikb=)IIliZV zfih`)f4t}m7#~$!LzOwe^`mgep?5_@3QcMqYd{a7lKY3C@X)mzf>%mW@DnS-9I?d) zzj*bhm%%&c`6Va>-u`{~;bVlJmLx~s#v|}PXnK6HJJH7Z;YiwWmh>RVhXjy-+q}|R zRLMLBQs2SBfjw{&m`Y1i&dzEB_nVd7nkzG~HcXPM1lb`x&A}u&^#saL&C{Rbp_N}& zo&y$WQ+OAYgyUMh#17WA!^Xu3sDD{d9`q(84iGK|h;LZ4h-v*I=)b}{4&9F%zc{fZc$sOPIdG-Rto)`Q z5(F%oRJF9?G=bcBv9{V9ZzSxFeJ*9MzP^pf$26>u?7hJbtpTF1{bZR5J|jC2z64&s ze$A_%CC2vkWI2L)4WtnI!~-oc9vMbQV z<({cc(LYBqBe=-VVc_jiqg zvIvm(2!s~DTmB0ADR|qRgfAhLUQJk(a+(Ij5(Y5u@>uWOL26|CuMj;PXxVAnns^&Z z*z3D|J__biMEljHnLDtQe*+WuE3ZK@Xz0bK@_xn+Jn!Rfu$%JksaORceVs8#ijd1^ z@QhOxCt;I(JlBBW*9AZ~4cnH?3lMFO+HeC1v4DN16hMK59KpW<0d35N7@-sFEfb6( zpA69A_P@q*NHyC1LgRG4#oVmG^k{~~UNV3luCeaGEw_bBB4Df788nRjv0k^2^KT9A zTZ01e8X$_;=Ooz_^6Rg#($X*m|3;LW)@_nTJ7y>++Mkc9Fmvql-C}!TtjOF6?)u&y z3d9F3m#GSV&}O6QR2zw{K(Nnw1^$DHhAV)?KG;Il9-zF>^BJ;zsU#Z#OJ`b=rFO{Tq$VTB9XV@Koi0x zxOmk`C15mdvg)<~#;6eVQ|UcZXUnaFU@D>PwNzd^^F`}A%$>(ZqzIZ#(WTwEE;tHF`Ty zu6-%iP6I$@U{J6rSM&_={8VX zzKrexe8>@7vq`v({}%cTX}q4YghlwGKwe0B$mrPakoe*RU61mq zuiy4!d%NhPaX3(V^?!`Wfunv;_g|U0C-%f5>8XRVOsCV#y#UhZ{Y~>yul@N&XrS1C z%@M0@geJA`t(CkrfIrZ)WtVDWw9Pg#9;o2_7JKcBWS0-Aoa* zYSa1Gn}l&-E1)_lu)7#U%hP=@x8hENk9{^HL9C{c#sZv}lo!YY|EFGEx(c{YY^t0K z7`_8@543J3B6aSLoC;Gwp?;;M1(4#T{{j<*-{~dRdCv@*OQc|@B_0hxCLo}OC-M@t zVy!XTOR%#s?sGlOA6MiI!QHF zOz6UqHh9Tp_Bk)WBsa}-M+=<;Ve>=_y?qELNPjuPw81zCyxHt1A>F{j$sNItbV{K_;@Pf z)1f4$uE+a#hTlpKjsimv(gj-q*GJK9LnI|7GjeGwlLD=#tti{x@e*V@$dVdPGRR9 zyX)<#3GH@x^jLg~VuBxnO{(BInfy-MM%Q1kdvx~a`xR>kl>Anp^l zT`mOf_5&~c*PU^YHM3{ufh{R<6GSW!9e#qm%G~FxK@C`}kH+#}W|h4}_mAO;c-SfP|MO+!|JAquUw%29J^PB_ YJB6_*YkD^3@*4Q1rlbY0P_PdDKlxGZc>n+a diff --git a/docs/guides/images/viz-concentrations.png b/docs/guides/images/viz-concentrations.png index 67c16cd585c080d527bea1cd258ae351c73426b1..7b9c15d3409e26633e982a2d02826edf42d73427 100644 GIT binary patch literal 56355 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 JDryw)zW~bRR8?SPkZxgyGAKdml1?e@f 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 ff1J_i-IPm`hr6ODj diff --git a/docs/guides/images/viz-slice2d.png b/docs/guides/images/viz-slice2d.png index ef004d0e589c6e617abd6af636a77bc92e1414b3..b4d5d602b7b60840e26e69d752fc25062b11c302 100644 GIT binary patch literal 16559 zcmeHvcUY5ow{0B9!7_kl1f^O=Q4|nCY5*$;2#A6pEg~ue3B9*i5R?`bDN>bQq)D$) z5F^qF&CrCS$|a<7kDwd&v2| zy#v<9T0&I(jHt}%Ll%yXwhnS)Vz_@gLe$3IT)7g1Uaq^;guph}rF^^WwiV`Euc*LdGsWXYVF)W5H>UCDftX6T~&~j$3 zjgI2zt5iZt?9XCqu==U&a(lUz9tUzpb|vNT#O^q1*T`JS^fl5IL-hJs0<8|iwC6#) z+Ayn*MhVaHwzLA% zYTseKjow~%emO~-fI2Z^d57^Aj~6R{%w)H7mVCUgjuVKpx2vaIC$~H^^E%oN@o9(W~c^X=tf8aHwE3dPiqe;o5% z!n|>EtbM#iv~(=KCrBN$c+KvIoVCykl>LwU;ZDezh2lKz*Wp!?zw+8d6FUd(?e(!q zq4VNg-O`@)?*2xq$nyhABZAIwJQ_~;e0XEIh^WDf%hyhrduJW{@#>flkBI@c_N{sB zZNbqN6~P$uRVCJ16NP}^pi)dcrgZ7`=888B;R_zBi&Z#Qmb-u1qtX`ZKAy%ks^C1? zh3+5oeVAP#g=sV}eYW3{vA&dnE2SkDEHo(*m*+@=os^sPGetxO4mVS=l9gGxK3<^c zwcd8i#BG@Je9uu!5|d$1^iS&XC%MSNM~#LOzA|HGTps3QFX0#^ylZN3v`TG&^b#L0k@%xnCVz~ z7wgJDixwK?J8#{-ABvvQ)iW+A91b(=s9dR-X*Y2lc!usnURn6TiG>6~Mrykob3U9{ zPh~%F=G}6i$IQ9)p29^-%f@Kg0{D__Df^*s6j(TziS8mB9K5Rn{8~6ZO<}pqOhl9p ztMY>}T;`fXNvqnaVfElsS;cp8jHS+Oe#hnuZoLM3yEh(fE=iXBba8^>6dc|=DWhj(cf~7u-1X5RbStjPEV?Vh zPQZQaJ=fMdPGVZo`n-MWe+VVnQNK1wqrDjum?pef?w7r5Lw&RN=CfJr*;C80DH>6? zx*tU0cp8+#xIZVZ<9)s-3zcoJ$$QXXX;;Z6=xHlpL*jR-XAwstAI>up)I|z(rit}u z>m*CFB~5N7Upr|svwciFt~f6DSki#F=JR$szl`mj1jhagDVbZ&YWnO^=INW*|2c6$ zA)h3O-$2I^mpTlymurRM@@4vkKM6XuX|J)&W1MdFdC%QWTh<`sy04eV`A+Po!$&N{ zZXyK>z!0G@z}_E`s5!5w{GE4}E`Vf&Anwy)QStv}m8A#K@~>Yf^O zX9LQ(&5tCfe3Fc3j^aD$4Y3OH*_dnljwy?5Yt?5RNWosW&Su*h|LdudeaG(a;uWAW zF00P5DXCw;(A(BvoEgTY@-o;7Xv)-!g}^(MB0fS^L9?mJxvf95WoD5Fy{>b z+R3Hk`IWkGpgWJkH5YqiL#3F2+e1$(ImK?wc>Io9R5N+Pb zXd-hNTD6S3KK+gTJC)H*WOV=15I3#inpo#Y3deZMhA-+=AGOM_nJ$}&O(DGeVUTuT zeaoGN2I;2iqgO>gjL(}#^RZ_Al>X3isoEhlL>p{<=+LN0pG2e8GzMRcU9o#@3X`EsQw7DOwe%Gsf9cEye*48)3hF!Wh z_3pw`E_d(#wMLiLz3TP!a|J7X9;4IIvJL>QA(VU^75lS6s{4a$X|~tY!xE2bcIiav ze$Tv?9DPDYR;e({SYcb)yTL8b&HzZ}0|{u5K*t&>PUVy5`?VC7bP^b48}oIe)@|pn zTUPn(piLF^H{w+kd>do|Jso=S1LGOlnm8}p;~P{#*43%Zp$KCmq?<3MX?dkLWG6qU zk9bwaps(0Cm9)=VZrliPXFA$c9W`!*#b|9*)~zqFevg)&|`^82V#Lc*sw+jo>?4$|8E1l&)sDmE8iezh;VI=mk* zX4%fRP^1%_wa)YMN`4@(-9rF z&0{28rh67MFpTt;96;CM6~#NB9yyM^_e(B(Zkb#aA#P^CC$u~TuknY)#%`rEcZq$D zWDRVmv5N+At-)r5wwO;F87H{GQoQ>p)Ex#&T%5MXk_X6+T}CojoE64T}N=Y zO;XeSu*K!uTCy=jH$~p0_%|-F&aRC{J7`)@4MAgT=ynO!y;Vz^+>lZ8)uX_#Wek=h45s9&_+97Kz;QI41?K7KT zy-*&FoYIM3Q@Lq*_z70UGVNZTj-&*aP=~9H?(pY1mp8%Bgi#_pbrtN|&&o$V>n*e^ zQMzdN=4YQnlR^n*!`N8L_)WL7cjZ#1O%gZ8Q#=OvUdfZu?fTkBxEm&}&`dq2<>S{H z)9)1zm?tc%v;n0HQ+GFGB)EOres<3xYWgL(bh}8GUveeV+b)4GK0^RkKNNfd9O#vpf{@I#22YdHCyiGc}D#18DeV~jyK60umzuhGjyVUv@E9x zSM_a(e*UT$c)i_r!*}pkL8aG&B%NPB6tkqJr#=KfKH-FUIed<5mv2MqW-G)Phe6Khdnvyl7am!l*ZRt}* zDUF9jYpru@xYlN5u!UFNJgT7w?#-2v)!8B>YFfDX?plE{SK-h(QHfhC=}uoeo~PI4 z<9Z9*pGxfcdZb)uMXB)Cxc*06!by@X5S4rx%{P_0D{rJaC(UlQoK>BqYbPkT3%S#QA{XG@{===f6zU#U?dlpemOrgJ9%*V zwOWsVbF{}yMG^Cmx&!C!g5*g2H6^>jFAqrA;-0^5a1W;hpXco7wHdOOQbo(L(&8fV zFBQQJF~3@u42OB%oj#rZy849Ii_Rzh^tHjyFUAGFx%Mx3Tu&Aj4`fr~`YP3J6;fvR z@VvPWuG@7UEs$ey-41X1hI0Aj9nZeO+KDxV6E{ENh^sYXBi8vxJ-cy50J;~cD?}D! z!{szlSazo!w&C?>a`*YIIp=H?oPpS*`b%0TA%nY`TMn9e8VUDd^{rP zPInLEH9?8#nxXZmsB^T$QPIxhypxi%p^1hUu*}A|g54{gQZ99$51L17EA?eivvej2 zcS{a;m}&P4X>hlm8RQPB!!*gN_49V)1iJ@-F3u39c!TKsypDZO7CaI zMhOM(95!stv7dUqzCS~4tcYTn(KBSCdTgL2AEV1{uH(pB?+`S*e#dV2sEt(DmTw#_gFf*46B{<^AHFIldgI zXGIv%SqdoB>AZifvuEY*>6CQyvth^*y0R)t^M_Gi*Y)?7dze6O++pb42mqHjRPXby ze$W;Fq<8!>2$Rmt)8Q{zK>vcn=xtXw|^zvH2PRh1XsOQ2Er zH`Isvhj_FL*WikJJ7`sA?RV>Zd9C&1RLc8P&y*#>Tky}heGcDgw2h*1rTeq)qkyI! z%Z$uh{e|o`svfJe150bl56`nleF|K%qVQp={Xb;rNj^Q0?aPRN_I5$7)#=u-Y!<(8H5~X{b6L6H2IPcPS zTE?B6@$`&Fa{M**V^_4R_6vRU75b38#l}1Sa(=;7d&@xX&Jv(tO_oqg#-gA7al9I| zAU@f%;T;u=t?HSYf+7w&N@%sqX+NQp&wotcTQJf`1&(B&W}mrz(-2og zCPJy80~-3%0FWg*=M=l!=`R>=pvDxGTDJ_{%|Em^E+j(q$t|C+79$^%TB&PZeF+CY z3zzrU*NGGquD54|V%wl>A1 zMJeO2R0PuaVYVwc*P(xuNYE#2A6j_0v*1s(Z-iF8*a+_eVff4Z$V$TV*bKc5a!YvQ z<10r6BA$0#WrBzy!RTkv@!Z`Hg8lBt57Jzl4;w_k2zyi-QXDQOQ2s(Fj#~LC_(Ob3 zo_~7aU}b4Bx2(YygD%V0j~c7DN;GTKY(2k+k9zn;4Zro^1D5NVW3fZ!vsJrpy6h7v zzHA%lcalPhzvi-1Eyz6Mf}edVxIMVJ;e?xy^@((57YwZnAz5tvj@K)ChiWP~CbG(` zy<4TzAJRmV2q8jRjZ6N@`=zx{dgV`EG~-0io~OXWaR|NH(pY*!Wz57!WlTA~G(43q zGAAr{zofjP%rS8Y7wT)GMes&eM+|ZWn=GHxQg&ZO24D4yN zFejlPA=Pj{@-_OG;|F^gz{(#d|A1BBy3~p3AGxpmq6-K|%*3|XCJ3T_{?aHwB@e-cM`_+Ha{R zs1O>%L*n^+FFgHin5nI?9fg|8MvjUx-LqRInC~r82u9mfb$0DxFV+IBDg68|s2mH& zwAUn8lqpapRhTQR-4|O_$S}!wSh(u!n1jJ!MEHnQzvlvnp%&`Vbh^3%j(@51if!OX zR^)Fa+fQ5AhGu2FH&&(mNFbP;Ylu8|iv8f(ME;HgsCQl(Z_gf+F5kV>=d8foaV-c*M#gF&0x~$Z1MVawm#Gg>V znaCIX?GUem?$(!w8_eI=yjOoldMjZ*V$EVQqWDb;V&q}mTx-loN^XtsrSzrET+9?g zop)&;jxGER^^S_%;g+qx4NXt}$TKX*hy#7Ktz2+lr==L4e&t9!iaIZS!tF!sqgc6u zHNV^G%u9Y8#vdlOp_*?xrp+E$lJQNY=E5Zbgxt%`;zpg@tce`gAXDkZ`V(-&zWK=q3^RuIi*T_Jd&$DyfVN#43_s?Z>O3rhcT zY1>wbfj2ibRbjC7h?KFrYhY8c)H>FZ;7}3VQn>_UR_pz6p)V>Gp4^`Tu1XaR|(W<{&iz^QPDs>+-p;jv&4!ft4Zuhs!@>+Zt{Gjd-zkWCCp4Zj>$=pgmjVKm zv@r;f*xF;^*F2^Q^mr899o>N%lCdcn#IyIWd?j4K_O2`iFFqaIw*16 z@7s=j#}jddKaTrpLrs{v8d;_#wIafCEGTRn>%BAH;no#P9g9#GNgx=UR-jMj$)1pM zMCkl3(c(jy`K@ZS7ecY$OvRH+VCJ?*1zlfjl%H{IGyDZLwk&rV9n3E;g$SwGr|eP| zZFmF+Ve&O)(qSsr67-zC;MD~mj4DfswpT-nYn*`~VX*8-1RtLm^y!*qfFJir&9!`| zo|OY5jWJOO_1suNvHOo z*{2o|H|g_JwkC-Nn3(NXK$SGAf4B?P?BMu)_Q1+HUwC}SmZrL;Sqk^Rzv;n=%J{n8 z@K_rT*8&QuCGntMKXCKtMa`IcL`w7Qzxzfm)_a|{#MEt9K!glC%J!Fb{boL-$6MJ7 zOQQ#>{iM6`pm(Rath2VBLZM=chs0xZ5J5T`3@C6(^2S#bVL8Y;M!qKLVZ6>^l7s6S zg<@Ur$|0i{J7MSNjPEsuXTja*iNU0qx&93dJ=fl*?J8b|o4k~A!p#$21Bf$IZ%n+` zhK=;7AaN-)$z1aNy|x$8Mh@^%UoXLIefiPv7rx>NIw^G60{$ln%XCzX9&b z$U(8lGl72Q$r@2%>L;U+_Tu0Yq9Jwr^aMMqd7qPoYhbzyqMt8%CC-yb{Ey+&#$Ki3t z-AZ}kak!e(d-ka$wl&e6MV~GcE4sB$cZtvL%bozwUifG_hsT`}Fuky)1HQcT{hOW^ zu&^k8v1xqZfN6b%_}YcYRJQrNIEEF)j>PY<@ND1lYu~giFz_H`p=&lbRGFc5jngjP zb70bmtTF+C>b23hxTj`5P1}RC4GzAaZ@a0bfjD4CFgB=1u^;qA{3jz)(qms$IDgbd zJ<=Slq~Ne)zE2H5IOlXL;n-2ULax|QsQ3!J@(;01aOdMF{M@ecYB!s$&2`Z zwzp()3-kk^PxYPVIMMk(lK+;yeDpcZvvj-dNstnVr6rdw` zGmS1ACvPSXSv!0dKMiWPo5_F2(W_h8IINt!tNl1_3Ry$7Avb5*ipCUBs6|QsTl1?S zaT|XsEH+=FeaLJ4&iSdn3EH4T5uU{q3EsEm>}8~VN4-HSpS+7+{0J{38EDmqqqhz# zFc!%oVOJ|R>f3566;UYT3x01leXz~`;(aw)M`ydhgQnQtK^d^SzW1&fe+1UKD-_-5 zxzMo2{E}*t@_wZsujGOO@}A%8+&xUpE*Xi;hv72$@Fm|NmR5{hLCwztx=SB&s&+!5 zoplV|9X#E$cl~@^Pv`2bX ztPTdatwImDIaAbO@Nn20d{%Y&$(&0}I?UBE=CRbTL3O>b2pn=NxdEIKt55B~>_&RS zH1j8$($$dT8tE%Um<3vExG~XU&jbNC`HOu~s9wYHodjUos^GwR!lEu}MJ$N?CPjK8 z+?5CpTnbtOK~W8C7dMWV$h$KZM*D)ftK|2EU8?JlM#P!J;d08UlC;{g^QB_bY0ww$uoL8Ge<2D;Dvegp~h@QvQE%MLqi8MBE)SXJv4dd@v@2 zk`QhRi!%uUz@P)-N4zEs`z@U}=BT6;(4M43$|gUq6~M|$LIj%tuL?lMNDfW{0X=_} za_1>~E7+7Fh%1#3?o*0LQP0^57|dyqHiX1Cn4=^{}AFYe7@j zUH>Xw`D(NX{)1@8$`)i!w5X*bWEiP-*Eo~=6_!lAS=8;?z=^ZX4rbs2-+SAjYIxIf`1=q=L_ zA$}AGe0lBgTX4IMA@zjVEhT@>y?e@`hKK}S8=FBAn7dgOKORIiND$9;8cAf9≀4 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 literal 16554 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 diff --git a/docs/guides/images/viz-slice3d.png b/docs/guides/images/viz-slice3d.png index f4804163e3f545986fc70d170b2de6c5dacf4710..82e4f736dfe39b59e068c000dbf62e5b5e12cabd 100644 GIT binary patch delta 104616 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³_ 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

    X#PVMK* z*YXpink)JJrFyrjrFe5u4mpnxe7|=0{dWt(Fjb8Lzq3P1Hd_mu^d26v9+9yA#n7W|?pKgP8KYBTSuSneXD zG9IBH^OYnDpCq0VBN0FL#LjxlRO3C(f9gyJ+V+;DY7gA3q{<~o!nG^A3=M2MU_ZAV z7jWFd;r`PS-FCjkHD>QDWc04A+Nd=N27J6sApBYsOhq6TOtyJE&gU`R6l`3yWQHzU z%H88%7!?NBHBY{sFheNN%si9aaBf#F)uvVIR=TU7s>emo;?7WWY*=rWTClz5p2C0G zb>9LDXn@Fdhb2a)!8?<&;dGKaNqK4vtOM2r+{xZ;+ZZKH#b-FzXJvsP@v+C_eCLo8 z6#OP*S`xs^eV_r%!0*Yi4`Gg6W(NH{WCh$}nZ`H26e^V>ubenuPUAe|c!3wFgldku zfA$WLJNV0IthMHjF{e5sj~tTTh*}}&#}+(>c}EmurYqs`a*AwGnr4zN0g_=Y@F#`OH{CfRVGT6r&=5L){6D7_OOUp zmt}L?cAcp@diF|z!P6!AIhNBJr_F^iTHc$Qm@F|S%_SnYvmGTWZ;Y7S^#Pk4vu0&l z^A6eU)|m`G<47Ng6oz|;oHGwXVKu_3NRg0D8+Z(y=y-;4t^T|3>fJX~jJ*9s(IBo) zc0MZ8&bxw|`({^fB#?jfH!gRR^oZ0$K=WEO$KWiucGM;4^s^~b@6|B3=E9?BNVm~< zn76MVnY7J0L2Fnq1!TP7^3#(%Pt0LA2;x)L>7k@37BCY%3sO0 z4X1SJxVD+~Iqufdl;X7Tpcwxue&b&DIL!s zigGnjP((4Ggp@v5g_zNNCr`?~kXI-Cl`VjbM+4=iX3TrcPe zeeFEc#hcxAOQCJEL{%3he5pRc^f&6u%)H!8fBR&VguVuPi$Um)Ej4#*^0oxHHQ*;v zzISc1D6tX(#gMy>%l6TGe2p(?jI$fM`lg!!Wq@>0wfSs9We8n~PS{oY*ZLbwF)q(u z#f7oGZ56P(Ex|D}c9j|aH_*AW9V$?tM3lKEh^@{IXxVs5$mReuu9)RIN(<*Y{Bw}o z4B#jCH<>VKp9!^>N0CdNC3Bj=uj*9e6<3#hQ1c!Fnu-aKr^LjF)gL>zo6Q8^SClS_ znLa3RF!xuF9d_&)Bd+qns1b4Un|-kpt@!*|@h3_ydjBYtDr+m>ycYPLwU@GchJA%s zAm*`7k;W)0C_T3A5&M*!AA$dpF>}5lwJ?FT6;B@8zSf%loynRkBvS|zj%~GbMa|Yz zqkQ~qi*SS{+w-0Dh1Sm@acW3OJ%mQ37~k9W^G~wX^^eqWfJ!;|y@a5&|I2csWW0_Y zY_yMLGTYZ4_^tZCH^buFwbs9cueE#;Adg_7-Q*v>VRgis%PyVw3;aDons!1y&K53; zxpYtynOoP(6_Gw$B_()>BF%dp^Hdd~GrAi@B>%2W-8`&lvLe!_0!@N4uz+~~LQXzP z7+VwoGyP3_T;|8a{c_>Mp^2F)MWb@G5&}0;jg$4nkXOlG~nN z`6e^r)3;g*ox3o0f;o^>K7G}@#Y{$)jZyv_#KL>B`E0}(;Dx4KlCCw0ux4)XfrBl= zlY*(Wl9z9_4TW2|nlh5uHbTKBJfLE5Kk_@r5i5imbwGW(-HldD1ul@KH&5P*tyLk$j(oyy$PnAH?O<-g=RVayNGq4jzzo94u0% z7hpf{qXhw&YwnnXhoAs!m$xH zc1?wcpGL4)U0+4|zi?2tO^+qE7$vuMH_{PzppNJ1*}k*;?Av2kKuD%O5q@{oLS+?k zKAR@d_^Z4+gntN7!w~Y>2pHDQ7by(s-h7#s49wY+;c{DMi}Ru6pW*Z~Q`+8`^PaO# z6G4mr(FH_l2l?EO&0>@M%&?9&6`dfqTo&wf- zOsvIn1H~!Y)4=cD&n247+e^uTx?aY56e_|a!32}WVZK-~qh==DQ8}sKLoj)0s!abv zhd15oHH;aI;?PqkeX{2B+HEqaO5sO{!ahcdEUV(p5cfp%9 ziw*NOkAKR?vubMR3CTx$6wZt$U}#aNpD-oprSnqq7f9s{NQn=U#MOT+Oi=%0J&kgO zeC-p;{P=F$bL}-=-XG||X)_`=?Sv1(1`P|u;nRD8^P5Qfh0F}cmcp7kzcw)i1&bm! z0m*+pMTjVO#h3!=`0Gh|_xaz?Q!C&z=H7aasLA4ss7p9-V$Qnc+bEI;l&G6^{DIRVyRDm~(mie0=I+mM6KhoH++^mbwH<_!?}nZ+MW zWbkbJ!TXZkZhXw1?`Lm3pK@yY5o^_{^L|=qc`=z+c*-2(-n&vKc5WcSvx2XG z=23G%`@w%n^HMk0L9xVK37nTR^hViit(`jmiU+@j;$8vKnQsFjvkNz{bJD>VJ9lC7 zr1D-3wY-za(4UVdug;O^I`viB@|36)I(;54#tZG?J z$@8L^&GK%76cgg4g}E2Nr*WPo1`|KBd@XoY|90b0MnvJh@bfJEU-IJ9a5mSgQ-h@?ys>I?iz3@A^yIJ&J=zLX;pDl8+CP zPR#vAP`C!%GS6R+sn=3L7c{&e;16(4q9SL7B@@&uo4jpfV$0Kh>91K)dFR7*Rvr`- zrmM|45PDWJxLk9T*uzL#)yXO3_9*lobA25#FoK=8Zo(4eZp$CqoscS)a|m<6T{h=q zFA(u%%VlG6I6%7P03e*eR(kIS?#FWft^Ctx5mQwG>UzvGM+l1g<{;0kw<5iWq=`&} zf}g)gWbMJ6mHg9J-wi1({kQYQ5lLFSdw&Uzum8BhSA*A(ZZ9=oATs&IMw4l@LFX@p z<+L*UH2%d>Ybqnhn`2puO2Zd-Hu64(P4-LwMfY`@bH85I#og%k-=Dwooy?K=0O2>= zCsxtD;kH3V>M`ry0-j~4CE-{ZksF;++X#=#==Z3>$gE!Te<$SEz-rGw*-SxmUf(@# zfw3n%HRc1qSO^ry@F#Gp?L~l96pPi8mkSyQo+0!-ZU43?iE@=6XG zluV0M7z8}I7oIO6^1Sb^0I7;Fcxk6$3K2d=E3lVY3xsd;q=fcDL?wzDeBS3Gd@TW< zyMQ`)y#cPdF=u!z;wZ&~J(;AK@K3ir6^@Rrkc7lj!lZ!)!9q9GznqZX2gUS-Lq``% zl?LL&nGQk%)T7JrWAHY?Twa7NczQ{LO=}YI1W#*vL*xw`d=-F1QhcHerpH$h8_PL7 zfbxjeGT{QRJJ`Os|2L+`6l4%7s=WxJL$TG+B=hl!WT&kX4G;2jgASCZG~WG$&ymTF zWvxdmM_5MWz!MTSvrH{MZBWM3N0(VPgws+KNwJ&fv_*g;ZJ_H;5caf%`w!IBdofmm z5)tn$$G~gn)VMH_d-BUN^U8LrY01{OpvcHeWnce|xI5uQL zfGDE~IYl3J*G>0tMY-Y-Kw^-8|2{r0C%IfW75gnznMJ}>KX zaIx)z3`XT9D_gkbCWgwD=ADg4;)R*5(q2!!ONP$)e523Xv$ggN$&5+v!@W_h{F8L7 zc&e32)qjPF$DJI21y=VqTUY!>8>9a>B7!P~Cn7v%gj~Ex)qtSjl!hRI1w_g@B5m-4 z{|+086rnH`goNq-^Q!wm#IFdY-l@w$kd|0AcNAoHx$(I@d*%an3{Ih_SS^_FCzQ+83JmFiPJ3RLE2 z<%idS^MZdf9>lPg70c{lvUD8pEv#__*qnarj+es)Cx4V51BXcLanTApr+ZW}9LV!L zF`^PZLApXOtj3~zYA2FyaJEqetg+!ciN^A+`D{?%7cXDWA=wP`Ss~2Rld0+os6a&7 zOz5mRyglZPCvJxTMyDmnIBDqRw&l_L>jyI);uL8{`8imN}oD(Eq;B1FiY;= z!c!h9tIhkbv^7)|VldoBwqlbDc>hWAi?8(2ugh8F&$6s<)*PjDB{T{2>7GGTLH}ey>xp3^nodtyTAqIz?*FyD;Cd?B`XwR`rOtIle5y#m zg_XCVQO}6yAyy>!jzWLj)dhs|&~i(957%F@b&yim+-Up5U*lk@b>MerKNrXWG$6l3 zR2Iz_nLkxXbDlOkN>Jia{M$-OB(<5WJ*eq~X{<;W=(*;%-E*D!D(G<+_2Vieuf_NJ zXg8}vFkc7Umyj|S0ffvPGZ=ThQ+XZ~NpyWSzekux>$ zR4MV633QeXA~D~e+}m1BS7@HF!4m3}*AO2Uqe>=g487w1BtPrN;ov3FKF)f-~$gu{(}OEzj1jyIr?sA#cp!>z1`3mkshJeo;|&@1?*5 zr(}*PPS{(@;}HU7L@ClPRRkW%7@wE`AXo27ww+!$;X#NZ?xy7m1KFZA$R=gy-3iOn z6Mc`qbfvn+a5WUSwr2qbihW>TN($g29F-7erBD@Ea8YdJBKZ%JiG>-}^iOB^YVi1v z9Nu(WM^TBy;8z=LlOB;#xOnuDObF*U&`JjmJ}KC=X5xHj78iXb9)^?eqz8D{6|#^%{(K<~3SbvGOn$D0#Q{;7&;6 z2t1&`Ym45`RRKx8lPBgR|j>56ex z=zjf`;oXrozLOyQ<9$!mds04L`7TFk4oAOKe;Ljbv+8pN5Nz>0Q5wZzOd$%c%y6Y$ z)x~;}Xj%IH534m@bA6)YF4~Uf`=O^;SoysVTU+qJEM5buR*H^Fj zv?yothp#>q_8xB4ricuDqnA3aKU5#3)m59GOg@`b(cV9SU;DB~U_Z3?+&HG(mm3z- zs;CFMRP{YEmZ5oKrA63crt;!1iNIV(T9DYg)qrnr+IRJDV+kth*OUiEw(McbH%g4o zGl0FH2@?^i&*7mVKw_`h3MgC^zutq6Dp~-;Xe58_2Y6XaqcqC6#3`Nm7Xcr|2A?>g z(!@luPe41ow)2*SEmp{{66C~B&5i_rcJOCYK9~v}GMaaTOUZNvt*6GQ3z@Qb@a&-^ zu44}?LGRdw^b#kY$sT^ozuUMg2H6=#^DldVa(;WZ!~KUN!2?sm zr(PybW5l%Sx0r6?A(QVw3r8GVU z%;&Qeyq9?QoUBp|^S4RPFhs_t$;|MD>n&eu&`EptJ|AA^JWHSlaB=37O%*5&bQf<@ zkBz*f7_5Ij-wBA#^IW2QGA5Fn>hesrlIsN4Jli0M#Mhtnu&=y+k=JlN6DFX}m4-=- zsn5VCKB%CX$(uiUA zpLo8(8XxK3Mj@gM>?QKez6fcb3*N!+DkXx?BHNItFB$}6DH>LCJ4&xSElccD$^Y|q zPl1(ci9`|&@F)iHlj3_vvPX+boo~OCs&)!nc-W||na13M(ABE;5|JNJMGDWdUZ#LV zr7XrS+nFck_pIs-U0p7;1lnk?rX_deU=!!>KtKQ)G+`?-EqVL36sYf2Zko9i{eX|z z1M^1>4m341?3PVn?zQ$Mq(ChW`ZdXG%uLjUwgIL&F-BeZ&U{SDxK0)AW?T zcEu0ejoR*@l{VR1`afrh8CE+k?2?fa`()4)4*BrnoaDqhY+l9b+@83|@O2hR;xj)T zDaXhRX1p6dvgOP9S*A;m>x=xi zu>T%B{Xdu=7@&ZBzD!Yt6^4X|BF`eT$VOQ0B@!o+3%`UxUDQy`nggmV3&xRt#MriU zz`BwwvDEnv9~rurBASV(@T*HvCtPjtI%!Q3W|g9TV$lokT_sx6%dhQAQw<^2ZUap+ zEJUtd_0`LbSLr2|QXcTF$Z}pOamn#lh!Ys{_s0GH(A(X6C8a|q(+gfh|EA7FLR-BJ z2-O@J=Jofa{jb(ZdZ^!pr*}5t7Qpu$wtNIT6`yYP>reKL5({T54sJ{{CLHQDq;}wwRTl%pSUk#~&-U`$haDd_KJ&pY#jpCVp{x)`hNzk1xeiY;{#KddVDpFH<N8pqF%<&iAKzBe&@lU_ancl$KT<-PcM0-= zaC3}I{zeZK6)Fu&$`$H+ySe**u^3c%%9)VQooEda5YEvlry6~T_1s%Mj5RUM6jS}% z=sSOj<`oO-e?`SSq!lpr)_nWc?5(L$S%808%Z79AGO%rp|6>O-Nc(ogXj(FzRQKom zDq@p-wk&R!<-M1;vfbbHX7Y(cV!e$3)?BT=pJyM^GOWWyU;y(GLzp7KKjP?@)a%NB z>d-lo6J7pRghXAGD0)o%3j_y^^Y9?6br;Jn=Dv9{#T)H$FkJpKEn&OFL{mwPA&E|= zBVi+z{{tV5!9mxh;M9S39Y4w0b*5kAELa_cjvf^trqkR%ZovFDPE9sgDpN$;&)KQ9 zpQI)3_TKBR=Py5G%EbAFx~2ce_K=uZBrf#lm!BxkGM>9G`LFQg;~i(Iz&x|Q3|#-^5)Ytlv=*WGEvxw06vJvRUirqsqYU^Yg^@vGVuyuT1NZSb=5xPFO?{ zu5Yqnw_{cl9S%hG`Tq@cdrPu^LGGO9^ z+d{2AIYXv&SYGv$u75q!;EskwjGuiam8USr&AOS=m>eCFT_P!-$tdj+z$$YtXMiMRPkxrev?IK7mM1-kJy|MVB%A{e1a#$fsBl#D2 z>^D@Uzcou4>ZFzPr9%8A&`6;sdljp|3YqOs zYAo$Hgqt7*@o7~d&fDH#GoAo_66w%q`|dozP4;9gaQkb-2H?~#9XhGXdY6t(t(~c9 z$B&&*SDW%fZ62B_{=^D4FDV|hH`fWuv8;w@NP>2q{0ocJtriU=)$hyJsO#Xv6Ddr# zg#zp97of;;>XcyvJv7=Ax#q;=EssrBA^s|+$}*88+Eyr}ZTk*YO+{^}l{_%rz58ji zJfJnT-C}c>sw+X@}P=%puYZt`byHNUyzyXRNI|iy-HF827gnBj^^v8 zw(;2hZ7WSl_nGC5w({^t3;_j$@2s@uu+_EJyWE8Gc2 z7(-a3wBp}$sx*!=-Zulgr7Wa@P#z3*^esTHF-)qACpQUTn6jXfLS^%5fUZ-JXCBx2 zbLUT@^1Hl9K?{~B;bmL;?hl1Y4td9sSMr^0I=!rp%f!z>(bsm*e!*FQ!P#VEbkDc^ z_RcT}pZ4jG;fq3$R8a?UV5n8W>*Oy6Aj5YfIx-9_=g%Om0qmS6U%Hq&) zRSbvjZvT00P1x7S1^7`v_w7fY=>k!)TvikK(YP1lF~r6<$@c!ZiC~okv}`zm0m^ zNl%7!ctJR{!6c{jprrvBxppEqQQi4D2f~{Z8=z<=bgg5*kv01=IQE zH_9Z-+PWm;Is05v{vSoVB>Km)YxJEClT!j>PnDQ9a9vf#Cdon( zLvV8kz=LIL)G%xtIWsN0nBA3yLRyLbv}E*F;QFr(Mfn+Rj2JC*P{aog)#RG-DdnYTdHP#bqGADaJOog`SbkJ5A16BFbsSzEKJCjJo zPeh`qDE~TLSStiyD0u?V5H^Gh?=}G*A&z!Tg`GJ+^5(JzJg=SqS2tLN@^9DnF$Dy#xj}8qD95l zcU(9R9<{@a8$Oj%_ItdqR4$*Q9#n5qS)B1`hqp$Qx58$mC0x=6Gwp}*>>B>%=Z2;X z)y{Zi?WMh^aw@`z##76*WuU!bv1z*a#ke)6kym}$+9V={*f6@pxKk&(2vv4IIS!xr zng70}?@jY=#AvNx&K@PG6Newhj1!b`+@v zxw!0aZe#C1)GZy2@lXEAw*wlGg1XX*$y0%j3K+)viOE z=^4W=$DqZ`oVwoiD^gKWk#W6Q>76KvCUo=Ml#2jFTf%iu)+D1E`1O)_N`=*l!}H@c zN!C@=VjL=|1KviYmxo*&0)h__VeRoCv*CMlbh>k-NRLz{4nasNiKzlWf9IRhG+^_) z>YdCTF0&GL|Iv)?#F&T0#EN%tUg2e&;YZTM5AmhGv?3WL^A>F{%k5>={@Z><4ArOJ z&W5(@JM|KBe1VxD*bbkiCpQR2QPnz;qD;5646nTsj-Nf;o`9A*{y7L--AC!2|DQyD zU1np{f#I&}`3KPKXk!vVL2R)D<3}zAxm40j8JuM$Ji|!X-3-)^`P!{M2Sgi%5<-GY z`IzzTHF^cPj2Nw`#D{_9O)=<*YdstuopT3QsLub1Q^_>V&$zO^I2)74Zzy*{Ws4<} z`aQk}vN8}!nD5^sPk=S!_URb4(O68iS6&PKj{`>#N>w+r21~dkOgL9QTb0g-IH`oQ z?~#J=xI}!hfIdb3HbZk>wEYIA9d9bn^%tDTDn(^J7cvuAH}X(mGr2fO-c-a5wD~ zXzS@N10|!TXLydc0FW|WI{OC@N#mYlqt1W@cd#JYP|(i&>i_v29H-9$*%q6WMK0Ng zXI3`U!DoX^=#mUGD4?BT{Q|gutRi(rPLC*`0XsW4H9rU*bpzydL1(hf5OHy~^D6c0 z>RRX(FI?|{0XY)ai4rrzJC6J0&k|q*)%AOO13E#q_mzE(o_hT&JljSV_hlcf79;J< z!zJV0IlryjXHyjSgp%Ol@d5gcx7Kd0Oa;(bCYH)Cu5O{R>4OmJ0#KEYaPz7h?VmMQ z)$V#nS+E#Q^=~>_RzBQR?U!*JpQ(T7KN^B*;4=Ai+lgP!+no}KnqRK?4AYB( zx-Xc_zi5B#c3t}S$3JL{dTo2jvB>tSxy@V&%x@S`sGE>@vD0B8PxLR;`EbcaX;&Ru zrvjM$1ZI&m>x2VkkVEfy>J4Uxy>)|vp@bvNNnH|OSh&UuJy&YE?o!p zzHLnOuK#%iZFm#;T2gn%hE^FRqu3e9`hO0cWRGm5YTJ@#@G4UcF^n0qgk;oHUr-~3 zqk<3qsrRX=gs6x$CGzH#^;NP$M;^rdo{XFRxoasrQPX@ks7f$qU{>&0Y=6#?TyQIG zQu(?!$6Dj=Sv{KhI`i9qRP*IhUn!_Qc2C%H1g@LOO3(bq;RsfvgF zEMB_lL=~k5EREIB`+pW<@y`uJ`?i3}FFT#Ci+nZBLE*q*wCtpwsRQEM<2n;guFXur zN4)DY4j;lMSRv&4z&@12Ir00Syg6R=DTH&z_`yl%->>46#croo{x-(W< z>LKkxNbV{;r>`jQamT9F3r-i5B?8TTglScG5Zh6~NKg~n#k^O{k-!qYTlYPpzlsl%Yh#r9Rx? zwJixTN)oNB1lA)%CWl2cmOwr|^kOQriX^scK%$f&QuU$x4I6D%rL^#Ybv8gYkc@U%TA~ zXep#g$P7dv<5-sFO{Nwe)Qmnl2tHx!xTru=APY~&-Rmci;p^>w(OkV;!6h4>;X~i4 z-7yo>%mUmj8vx^uvBkD!Iv~hU<=n6B98mUWm&K`mSCi%MOY|LUi9@lv>}sL#tA%SH zTlt{M0L~(VDkp^sCdI*A`ZXRuF+eO7l5hI)@EbtJ*#0mcJZ{Lev}|{trr$S)PYoTQ zBKiBPkCOG7le{SKaM{ptKm^Wz-gi&gNDd02lXvYoQ!F)A8b>`&pX_Gq zsK5#mN9=l#M$T9ljnrDU!1)nLO#C$G*+|Tn!1LrNRQcfib{pExim}x1 zWi4e~9Czb~w${>#LUznuh_c{^na4``XuxykS>{YvlL{Yw8+38@XH(=%VB?UGH& z8#L;+>ygu1S7s;g+i5iY$$_)^Sd?9|ysSe2s+w)l7pY2&;ckHu1U~vhFJhVjV7I~Y zRvTs(1$n69!xCiRS9}O8{uu3Mdb1CR@0PO$DY~q#)>Zl12^3+@vVS_5>#OVSjGiN{ z?BKC5#tMoA9+nXo;Y`|gKUx|--T_*<*mQe*r+lu4Mdxtu&WVqw4z9vGuYd`H5+3fv z8_}LL+>x&>j#sW%12xcSw!}xN;iSC#h#;deT!Hhj8x#$?9mBV%S2T;NakaZ!b__mM zS$CRw>#nqVnBC+GT8ZCow{h3JWZfsddvp3f&^xQ7)>o3PT*C|0;MwXAn={}2h1xu< zyl9zE3AZm{=k$!uTQ6~j*rSDMI2T>^1dnPHDrbKzZ^h8S_|qNnU9*YXB8LC z2asv>^PsBc=0b79STo~N|JI<^66ImVJ0o%b(e!N!(o5+uY^MjOwgPDcJ0Og62jdfS&)SxELbeNG}aF5dE?X*MIJm;7(7 z?|7My(h@jgQ2f{-bBXG0{J&|5+~{jWl2-|*qGdAU-1x81{~~C29xoM?)c4NarM`WK zyg`TPKeTSRg%BR~(zC06%s%Z5c1~}SEu&bXRa*!r|0K*T-!#cE;Zl!9a&@H|md`gz z{NBaKDU=8I=JY0cPz75|d!{>n3Fbi}C>|QDCXg)k0Xo29(nXq7U})3khuYCGyConB zy6W=$2YyH60r0mE4vX+rgnyM20w!EIz$-Waw?pD-qMo&sWEzs>7Nj2jepZ@7LAaywP=|#VHv_+SG3HYqSHaaklbxqPXv>19CoAI zH(lsa+iR=YBk}q00NM7>Z`J-j*gEHe3j~@zsV({Ep;K=5f@0xy+&LeNdMy&C*_YZ| z6&C4L_V{~eUCJ(u7wJQwGD|Y_O;u_td9jWi7?UdsNIB*G>szc_-3v$Y4gac5t_kVZ zHR3flmbcC+_7D>Ji&q?4HX<{2g%YNmx!F+K^~`g?jg11$XVS+fIJ*IAV7ezjBD(ha z6Wz-&^NG|z(eH+Ro$_jv_3yx4Am%rG@70PS-TO3AnNhGi4JNpMo}NtT+{niO9J`mQ zj`ONj>}I4t!v4PG6EmF(fx}AYuD83Sy4xV1+z(6RClp2ZUH%a2MOLI`G6@2)BdCO> z6F;5FM9qXo4@5aPecZnV&pCVZuBm)0Qe(~=(U?glA5p8qim8r~_HWnrOQEdqO-)2U zq=f0IasQ*hd4W))4YZ!orZ6={w&OP@mBON~3i_?c)#66(FH-g*97Um%7PXyZSR=!x z+sh31u(Nm6Js9^u`eCNl6-~N?9qL@S(m9MV8@AhnWtCe6_o$LpYjpbcCvR#6z_aO> z075r)o2{rHA=I2mKtRx^%^? z%a_p*JNt`>wA__28cHMfc7ExJhO+K~~ zzcHjz@#UcAlIQgrmMiKjy+h1iF0#*j5cg~sDZjPyz0nm z$#yMW8RWF$nxFRJD{#JrspUweW?shRxr7Bv-i`@v9XU_YHw=K=XKM&!-ok$3i209f zqnj>NtS9DjLMg$JfsJEPjMJvw)1?3Wki(w-P}fYg=WTw7i-!Ja;;4(u*6RIGpifhi z5Zjsf2;roxcu~TzRy}w{VflsTZ#AA&PZ?Fa`02zAmzBIA{b88~Or0eB$Uu2h&5SK` zhKp|_ZE}b@Z86f4pR0hcbq(uT)Hwh&_g4q!wbDhzOKXqX?*;)in%2$35%j3k{`N;HHAi+sDXwT{o;HS=4!0f^XNlv{)Or@zhbCcX2aO`Zz*NGkbF9NW(!-hWJ;rRK< zT>z{Rm#<1o%%3a%Tj<8f^E^w+dAshaKaTNkj=ezn`Z5^g6Gu$&CT?O!w*nz23P^y0 zZQADr2Umx-9O7orf;Lij-9qQ{{PNwNrf>-RV!iC}1xORfC1ZcZ zW|FBYBa(DawF0?S`4Wl+(dHW>T8)kJR@6K(OvvmzGWz$vNrR6F8@b|<>X?}+jyytH zCxcW3GD~kDi{Sm|z^~na125tVOnYLeNzO`o0pSox962>UM;6o;ropN+a+aG$ERP zyEYzjKQnX`BLhA1(`R6uR9ZdoyzcuiIbEEKkwNlCih-466GWPN0cThtA;X#dM!6*i zI+txnj(HfSD6#&s6GzRcfQLCta!?MF2(@SC$NUTYTadV76FxL{COpq4u zKwwf}+!b(YkYIT7vdu$pmbd(tM}BBbm%py-KiKq_YTF9HI|cikgnudbhwH z*s~UzIpIkKNrMG)A1EXQE04|MoPOFx0dW$Ao$gm<(LLQRDAnkZ8LF5YPhPCql856t z+WmEobE4l9c`TWsDf``B>~ZcHa^4#a6WUc!HRaE?{DS7ZA;pYob&*N(??u}YjSP*m z2+wy#DO2R++G3J9^w^xh{!MFDm)6{Bv+f)yljmtt|5FRYAO~w~E93m@JEeJ*!m!L7 z!IEMZvk7k2&4q14@R9E{2NCFq>typkx(cH?K!~Cbjm*-|+Zq43Q+gDh>Fwh zqVJH#;>IIF!!@r!!&club&u>b^!HWcY4~4%FN5Q1Vj6Y6hviF(9m@~@8##D$Gdv<2 zgQ3Ib^=~baHvUY+&O^@B!}FRFitu8vD%6~CIZd+OX9{p@ICMD(cW}~vWL~D3dT1>6 zG_~A_uxq^-YuTci^Jt_d8zFPLdNql5(Mbsb-vF-6a~=75-y>%ON2u{yhSek^22v=` z!ZHrXDa&q&di}K|_jSk9o!AY)5@8nl_cN&V$oDAzs&!ig>!dgUydDWvUf|6IU2Wm} zR2ghdPr+W?%><7~|65>JQneH5&G zK^V$zDTu@!o25OQ{|KrQmaz8;Tb*t-)miEXHF%_VaHAx|-@_GjLMoS`jIFkokJtRG z@j!ZIgZFyBd&~LS?c1W5Z1Zber)j1u-BTl>i82KDp@H(c03Ojwi~g({V-ip6&>ao! zs4bVJyT;~Y@QCvTsUN^p5eOer;A~TW2Ja0$-!Y!68x&AxXfLbbM3V2N2*`oJWfiw7 zwVwf6%Dk+HX{N?h^DAc_<nKo_oEsKDLeLP5(p?j_8go2Za;6O}D+A+C37M z^2=eCVSdZQ$ld{!e8`MLY z#Uwu7d0~C4y63x1g2>PKIMfdU><7g*oH<$mv(kS~opSzmRrAQ1Xp|%ge!kJZ7*ara zqY7+PQz>37m6py;y$zO8$u)(gk#%m{3*CU`Ko)7&zxzQ%v)u`GbSV9c zde#Uw?_CzGh!Dg`8#x8T)5{$at`!WBhBH!-p(Hbl@$6&1HLqqUZ=j&Y!c&~HjABFt z1}pYUv{@GU<_wxLRGV;F)Pc|$q!=`n2T`110pdZXi&h0a(CR~^$Mv)b9lP*mtbaH% ze}k!*cK>q6i7Mm_)2Fb7Mc|r6yOGtP4-?dhaD%l@n|KH47R|QtR}7@$`Qni;AIB~| zBdv#6>5rz!R3AY(D8C1kg^dlT)qHd%jSsp$nr&$-AuDCS{%TU9@qV&l9)Kx^#kk@> zhzpY;bp)kK=l~DMw$E-;o;7#4SMq+-6q3gCF=;}QM&Q3gJIU4wRN!br$Z0$thl(Yj z4hkK$*05fl1H{uw&#|Xn6{xf3M5M71ypi)2jdM6b0ch-?cA@8GA!RsM{6#w*(p5Z3 zM*@;Yd}W6y4KUjJc9r>>2<}Ja_TN|g`dH!2=XU8Skiq>VdKw$eACJ{3gLDzE(HRZ3 zQ@Vzig-~KN_ccya2ALDx(#)tDFNYJsYuITGF`RBxC;jCET8Oht+&wv^`ZdywA;L(S z>+RbwaPAgX9{&PN_Q$hqgBLiIXHo90lA^}}IQ@p+2O7UbeUMAuAobf+HWilmV%JJ% z^mF080nSV05{tpUcRHhpkx!rknHAKAv^O{|%1k7ROOE=pB-unWcS=sory880S~x!r zo6qV-Jv`LsUVJ<4w38jf%%{K;&iBeJ{m~aj<91DhY{9~)G3{cSWPEK9V-$HqOQ$9m zk}9DpFX=fD6|%fZUs12)riDJ>(FAFAA24R-Z>5d7_n#XwK?k(i8iV8t{7FQ zS6uo;a@9z&y=cn=TI)3K2W(C&`!Jkh+2BxrZiT@!%m)^XeW!Ny-;;L46p4i{@_SbA zYLV4nLz;HU8s@E8J)iDYj-X-p#s8{iuAaXYFd0A&uStEs2XBb`|87p#mCJ_pQDFO^ z60?}n%2-+O$eM9Q`iEZv5o!hYE`T00D)2iH7E0LnK{WiGd!0b_EDdM;8PwzB&>g8I z(}}X9A#+c1%k`@O*l{Ik^6*YDicPuZObqJT_nrWn*&fS}fhQ3JP#I^nY61zwsF1J_ zA;nd?`WrJQpuHE;>vu}RJX~Q*mERPs4=zNlBDrx(y9&OdlMAclI@o3fMcWOoI56J} z3)`2OZ*`TBY4q7Top@z?SFfh*^Q zd`(xSucX#wpU1cN07Arl%(b#at8Gu?w1Crh;MLsZi`E!7+=peLe75(v{2cAqx-TNZ zBnNE=+c>?-eG}o)Okp4w7wqW7Z7}SDnmsjv*R=vd@()wmFM2vbY&vg6h5#JEP61+q4_Ifwbir}(j0yO6Gs4f=O?vsHsw)Uw=$)&YB z1RS$?O%Tt%#q~J_zd~(;&$Mnw*{!rw#ds|%#muNzuwAB+!RWVn;+)Kg@aQn61&v;h zf-p4fHaa=X?x<{?)J!%Z`+PTENC`V+(Uqm>yQqxCA*R|GCNfhD-mM@q?_O@+_UILd z1qJ=z%zlh_R)haKPx`1h0aLOe%YyNY9e@*eH@&?XgSOWogHvR>H=b{P$uCHfmz^s* zw%8qFpViTz3*dG%Zns@tGwO_ompcLF^qw2iwI}l_Bq6gD{;dPV31=5*?&N~y&&QW8 zBtj2m5Q&g={_Y#+WBux2)Ruia_fU3FV)A_3Ki^d$-B%@N9N|egr z62@Wj2{1CEBrj2qZe!_7+xeEi#vvm{EqQC8v~0U&=&UbH`ho#3XwWYCdo^?lkG`nl z&@+NK)Z8*%r9CfLX+@{k$trg{UQP2mA$WPkBGC=(%Ugl=sp{68R33i?&s9bh;<>aapIqTEw|H}ueWPJ)B0*Y#F@{LmW$cC zQ{;q{hMxTe+Vz^3xZ9a-^H90xpmYOuuTfz;iO)Y1D&U5r(76Km2)6=+2clM<9)UMj zfV=n%uqRxhd4r91lPb9@4n0G(@pl1&Nq?y z=Nej*TU{7%IlAyiD9X|eu(=4v%!gnQ*DsYdlh9&&=2t*l3$2v?lhrd1gWWlk6xKAo zpNuHo2}*L~X*Q7V=g)iBJGzr_sp0Kdr7Oyykgdy55b%rR9K=1tfq%N&$3p!kb%frg zr|v(M$+zWeM&1>PCS)c?t1`njb{}Ym36p}Gr&BU>ZbMaqwyCnxahWB43!n&aHdX&N z3x4>zUKKbF?Yr95*OWj_yIyGE&}Zvt+?2lQM7p>w%3t8S4zaQp@G1@tp;uytaQk-K zO1BM^4Qt!Cp8U3lZ@)S&^+YN!+UBT8#jfEj4-kzjBnK+qCAOidsQ`Lz>H?!E%geg= zgBwr>83f*d$+XNVJM7K>60F>ex-YUGv7)0UWQ)B7c84|keHci8IH$Vy1*>%UiKb+&H{CX{16#o<0YYWjTzxeP-Vcm+rV!yY$S+Qbl zREg;rCHP17mNpB85;+5x5+!2i*WFp2gCJp?`rmdkyDg+wmUIKJ4}fYrJ*{$|BE8BR zDyOv^e1&F`Nn6P_$f5(;OZIuqBNywOPybT8v{h(xp4^Pl0Xt0O+aj_*()k%vuSkH< z6E7=?sL6>EsnJ_mA=!Bog-w-V$n_n)STO{cBEM%7AP;HRAkv0_1B@R+!?kAdk0YJ@y@?sDozSA*s_XF>9Zg?X1IWFepQ z`R@-MkiPnNIpmQfR3vK+*f4@#z4@YS$mS=?FcEj$8c{f!J1=f(%D%>|`W!sI3X!H2 zv0PS-0ae;FP2cM2y8KV&JrPos+aGN)q7T__DY<$9OA$&$^eZx^>hS^(T!$<{Fg>vK zIyEB0YUldF7NRfcB^=i}R5qt~i{8@iE!(}?T7!hW1Ml=}3d3fktgueTD%GkyipcW|3VQ}c}@ z%j##ENCCS5s76g`k7qHbjTjCid-l9tvG3P=4_Ybse$)Ki_f%j^r&6~!?7?Hgmq0bB z;7|8;W0SA^l<;B;H=isS*YFoxf-IlGOb%2_ z>%UE)bd|kMF2<|@mdVWF-&H=w;S^(vua8c=(Y`MF_Ict2Gk-qaHoT=w-L~{?c<^0c z!CnDL|96|qDnfFc_qTXNwDJX&NoEEl6l576z7<_2v2CJ> zPr`}fVnPjxqb-(gLdg__$VCCOMlrOS!;?4Qqk0kD%0n<}ZtKTNtLwLE-|%G0mR^F( zi%Qq`B!Y#T5Qju}2eRnbw_3l|Zym}K+z@%M**j|dBc{{TWFYQw!R&Equv3+f>tzYl*@jR) zE)|oWvtTVIW@tR&wMcA@*FZGK9M_{0zEU=WNNUEsSn!uE4&2*Dd|)GeAFLwN{g9hS zSe@{nz)5|d@2>-fT}%8HEM(AP#~##x)hPzX3erJqw(4yWlZ-KSC_!&|R!}O`o2Z@! zvM)Z*YI8>qI9L*rdSn*fL;anoxA67~)!3V6p_P1RnbP7bc|e4yeU(4@$*^VO3X*~U zZCXQ1pyC}i<<1ZDNwod#Oon!Sww+Y?iyVvJX)&sa%0>A)Gi^FdHzC39J)-aJzw89T zUiWcg9i1jBXbsG+xK<~GEs6aVQTkmJn|bY}_B3PD*IVmK=#FjUfg4fg?$K5}o)+3t z<&jh{JQ80rs)speK{W?`de{P9#eT-)j(vb0z?vyQi~;iaPL@;$|D^vg%cV(lr2iGF^g1&#{#@NJ&(b|Z z*=0e!iT_xg`L&!vnHalAL&+7_E4eI4;ls~`#q;cstG(QG4pRD_EpWioKXX|g1owKc-36L z+v7bkk&jR9|Joyqaqat#Z@$#Y(I@B*?kmWBn#!%RSk4ig-_#aROIz&-WhNAktLC~x zf)KqyhV1rA|6!!L3QEn-VQ9!~0Ix|_(+$&;kF(+XPkuFv9uw?b0?WR$8Oy=j2Nh4l z2%g0)4RkrlR>}RYH<!<#BCs$bF`Oc<+yGa;s`EJ5=Vx*fo& z?KG6We9mxlJKJICM}>YOw0wdsuo1z%`K*#jMHBq-@8NFwO0;2= z()*w47^%Z(9U>i6*&Lem>D_)2I5 zYEy>k-w4^)aQKv5G9)1*Iw~YlVCV+Ty5OyB%$NeY%1M8Ruw;TSn6v2@G;X6*>dl=8 zQ2?Z$rnfiepE~pHPRlFap2xRB2~3OljkzLopv3uLQvtd5T)YHbK^M1;b}F)Db?vtd zRvoNS3k0B9xj@A^FZ#v*rrp^R@^Cy-F+J;}0St3lQ{geC;S5{<-Z=P9nGNzqXUArP z2>$RUN{Z78ao5!P0H7+Nhhb1|M~`ixm0kTW{qeWJqf7nF;r<8Q9l46B@gkSMbcwva zH|fR<)NJA zpApcQaBa5fcn9HwH_j`5?6x39@Vq%63P1E-jN{q=C{b;WRn#e%Pbq~Cs1f>k5sNFL zz5Y9kOWQvu;#l2}DisEoC0A+Y$|SS6I6h~Pu*{~IJ2x!?+%zB%aDuVGbK4_fiS8Iu-L4#kd!ug&Y2Zt#6$|!^SKXte= zZvTdYW`An(y&m?0Sd-w=53N`*Jbe{8To)`c=(>i4?csk%1aDKc-WVroGmL_jrAvt< zMtOrE4$;D=vc&8~{X^9FPPEgrz}%zu>fx&P(=1f6^D$aNf#CD=C%@YN;Vm=5rtvlm@MTwq5)-xYhZDuocznrek2t!!n3c=){UaxBX%OI}*^ zAp8Otj2E3TOh(MIs=fd3=_c*Mo-r!Ur$WvqG}(YJHD+z+J*@r}Z_`X{@lO{F%=KNyNtgI^;Nu|4SMo^>l>GY< zPoCRsRp=vPfS2LTXmKJE^2?CxKjm(F&)fKyC>)NL**q-vuR;a_?^m2Upo!}|xfYfv z6`uTef9J7$UY-7<9g>^q7#?n4X@6`<+|FhsE_uhp+{?2S(k~~~N8;yZj>VNNdoTAk z1XjbY)z4JU&}{4?F?zere%cy28_UkCt7k4m3WxC-$I7l$;1RLQzl`ZF2@bLJtZItS zcNLz8`^6Ui2{goc5Kejb2O7O!)v+vR#I&~|GY6lC9tTmm+{5>uts>Pv=Xq3#Jb)nV zRSW@2mr^yuKWXo{&KCgz$P{_fY4NnozzdDzqOA2a5^^7oukXBFNex*@WxTY1-+N0e=`2C0XoqYMAx-#+NHm zPH5F2d*x}Ol@hC>4*l&*jKl~|0|AEQr#mFNb)`U?w}HLu#09Fx$^;1^7e3*T-2J7f zq$@Q@>lZlxLk5Etmv_eDZy^Fu!?uCsH2_oO>;OzlnHPn~vn>t4A30Ls`sh}is-BDK z#|Q^PAh^djMMX2|X;uA^m5(_Is{I6Fr&)V(pvG;<2-^NAfro;_6(90n2z2aGK7K@A zEe-f69q*6X@k%UyXx6q%8Mm-XUD`le0n$B+KL8Y18TcAXp{bf0yFLEgqAvYTf< z^>s8TFaTMtoV!l4V*v`sjxmviWUyJ<=FKO*Yqq{A*1v5jGqW{IL9@2RZI|IsksjVB z(D`QXDir^!dav+^5xZZI=@ktQC8z8=cMsjjA8$s`c|&^4DEj_*_fOJcKzzsKWQ~uQ z1vv06U?*=4|EfJ{_Wd@-i@lVs;l(nh5EF#QdQ>!%lsMHYnQ=i4({8<|O+Wr-z)lA@07+hR7kC!E6X*F>?RHO(g~NaEr13{afg?`(!|1?k^T_9iIOE4P~9q&7|)a`4q4LiSbdSZQ`4e?*LO!9$c+svXGrMdh;;gDxQ2<4nXyA>&EOn#qL0Oe z5hn+4`b@r@9T2tIO)M@36W>H(%=aezC?T`Ajh(k+Xt}_Qe)k(x z*%LRz@4P>;5wS)Hzg6U7T5wDo?{d-+lU(KNBsPbw#DVo<$b(ur_CUiuCz zn$D`-q$a3`u6CF7^$16~wG=uA(8YIAgp86b83<3t{54wrtze&cbia+0>E39y^%+s? z&2V|7SXV4a>}|@uGxWK1Dd-xjSw4eJ3Y}J{$7s5-zdvR{QzvKrv0s)sId;AEo!aEd zf1g(uWv|(U2Hcp&@ny}qVg{ybXquw&*l0RKVoP$xp<8wv8O4Nx_G=Z_k8>bAxhlP)T^La$tR^Z|z^%_Zrw)2R|CV!}#W-+@uh`79_%w zC)z54m$yIc>Q1-pw3g|M{5FZJ&r7y6rD`IJ@4TjE>*bXaKGE;?5UMXF$X55Zb?pzT z4*cT4Bkboe6-kaY8vVq?y2g#xFy$6(DjW*M@}!xMc4yw~V|tsf$z-^eWgAG2czE9i zue>SUx)kN~T;bGOD!m!HffTqph-*o#;*oy6+ z@GEB&?RWtlSUxScdN>3oP)Dy_dmMvzra7v?NfkY3`o;1s8@bE)$I}r9zo{*hPvdZC zM^oRrhR_;UztvP{IraL8I65_5CUBER!6U|z7MErE$)G4C(8riP;xg(u2W1wdE2&i+@IIcMk-{`+>v+YWk03V%er%Rm07s$#}s%+6gB15ttlBV z7~GLmH@O1X^aMDx?)Tk1?Z5p9cvt+xFnbHqBmsYT6f!} zAP3`c*ch_5Pw}>RAjd!p0jV((*s?UcRXzjFt9^swNY*SHcqH~+Q9sIj|3CvpaW1Q< zcb@Nb6Gpqg|FoyY7S% z5Px1Q9LsqeXbio??5H3g)WCc?*NJCnGxD$l3r(DlxeOj0t!FV(oSz@ITk|OAnR;o*eSS-Xglo=u{{6{u`qb>teo?U4-<1A6VI@>o* zGk+vA>_9H+T!;TKf~ueRR1ad!0tlq#qyB7&8FHNBtDOJ&s}zPQgVLtoDC4>*-w)3s z-j9LigMC)px6!<)qeYrrexun6>sHb)r9SLmSbB=#j%ju|Ori1rz?lwKNkXOa8D|&n z;E~88P~0PQtN{7%N_Wu(WpGVtySGQ_SguG9WC&mcy&lF-9lq2wJP%{Sy-v3^g#X| zp{Syna*8{@c0YkU9;O9Y4>r?dW>yX!EusekJ^fnb3yA;TcKME#`KOX(%a?uf&G&DR;}DEAa1`wJsX;;Oms+y`7$BpjBnMm z^X3mr_OSE$AoUxoH+K7%byH>U?z)#>hQacp1m#EhH!!b`bWb(u)|utiJl-w=;OZy{ z9wBXaM&XCAbO$Ab@WM0t$>ESm#e8TJ<#CJ+1L?>u*fcI>;5`IqSw11ljVJG@kU}fV zJG0z_H=~fx1&P}rUTz>YV_$;ieEv0EPmbSWs6uN2monIfIT5^H{w6%iwq?j{`KOU~ ze_cEor~GrrD0VTy-7^QA3Xj|T{_QJbG4^nrXhNzf)C7eAKX?PRstwW>4keAvzFZJi z=#~{b{5O@iIg-zk;a4ymCb;dBvLMri))MkJuQcvz+0Zx6G@rE10n4dHFJz zOBi$K-s($P-_JSN^;EPdE6&p8&w<#Ae<+{idcxWKr8m2-C=7Js^%LNcH<<)d>Y=LM zdI7rO1XR`Ykw{%|{Ttv{-wRf!m2cO;9R1+7fycKS6?l13@R>lG=rU1&iF|DkjIf4e zKzHJq~s+P{kHe zVo}gyirCumZ;!5^vR@m*;Ca_a#9sY(*p(D!d|k$~Mx(o1aqA0}WQBVZ#!C`d0QvOIGj{W%Ui z;U#SrV^9wC()f(+{$ulqnZb`_fUhO#**o=}J=M4qIofOLkcp90spcFmf1WokV7JSW z4Ulkhhq~)5UcOA~CAM&Kn~)+VDr!uuSI>Fvns+EF8h>;pHlVaJ0OlT0+*JB2+LEl8 zSG9b%_$~V^quuw;+S#W369wpLYpUcFs9BYwyuv#iI4)L`herl8zMuir!Jo;(V5l9G z6*H}PR+pNWPv3-zPv%qNjY3%;Uow$z-rJA7fqn@7FZ&-ncd=i)w3>?NJG+ufe z#ce*$Zy!O=@OjkJgf`>@Cu_2FcehD-A2AU17jm!PE^nrmXodFC8iV8fXLYRJgn0gB zKtPKrs83{h(Q&p`4$2{^JC?q#;FJwvhh<>{rD7$*u{6lmTxIgpZN1OQ(NO{aN)fT< zz|T5nMfTzYL$qr9M>cjsmDjpa)-WN)Y_Rfj&j;MNW35YqD^ku=BbAdM-fZfi?BQ;% zfq7My-WF3ixgbSf5y^0TPo6y`r|irHVrYV?l`SgG%xFW3b?PVzhhNL^m0?9L33(!) zX$IW?=`Oiyp1j6be*!XuHGx6Q9v#BgEsbCeJR=|2d%5xbmn=^_Q``gAdv{%M+^h*q z06J?v{GRm0L+?pf8-Yix?-;NM%~Ie-b+uw}>c^LSIJC|7yMHnVpn16Z zgVWrW^mMvk5_v-4UFW+~(fy&ZY<=44TNZgz@V-#@TBlf8S)t!#B~B@SLhP*y);haJv8L z5ituXtSwedditeXICL~wuB0|lmQCkQc^1Q#-5}rUharf;M~!HDhq4&{K!q5%UpVno ziU_v4rJYJNMNLiJ`*4UJbqy7uTaIz8NwCl2WV)0YkXt+#Dq#BJNPrsRS3I+ zeOo{+HGUgzd*)eTcl1rOD zMo7_aQqtPP1iW-ejo6%Z!J6)rajF{M_WqQdj_|GY=gY;{lAv3=mTgtF-C4_cO_R}Hi=)gc>IYFGex=ZJqyZVK zR6V^zua&3l!PY)HJ&ez%LGm zs=2!Hy0SzDWyQ}iNF-+O;;vOv$-%zZ6)>-!GKcy;&a4auGm;i?OQG=~@|2lX7J8*Kro0R_8 zF#{4@$zL)j324!WuVF^-xgjh)zsk`ax#!wFL;pBH)m73O92guHAH;6{US#K60%o(- zS6Ess%x74QewB3}zO~>vh5vy-W}S+!Pzcy8JAAX&0Fyzh?hb>L?q-xOiJ`lO?vM^a zKw4>#0b~H_?!L$S!UJ#n%sFeXwZ1C2+8cckJ$0)!5Ug3{dh+*gF!f%-hmkem4u|p? zfYH}H-WSw1PbEj^$H%qIa;<9cCkz@&=MQCblM~4Q7bVd4U+lYVZk-j$MEsM7 z%Owr9SC`A)7LE+j;g!)C-4B;0jB5^e+&%Xo3BU7STQ?L8kiMI(yxREsiO&r#+#~je zN_B!tCcq?t(k4GWHkM1l(fZsb>FWVKwBq}Wv-QxG^F2q5%_FOo)uu9Kv*QAtiI5{9 zccS=s;+ZZio8?6#gZRTfw%m?jg)E~)OGv_tl_Vn(I@r_p#k$WFp1&pMM45-caFJec z0Qv>Sm6COoK|^$x_6)6D=OXoqW>^w3cgP}EMOMHGlg0PGghS6>iHh&p7etmNbe6Z4 zC@pm)+;eFoo{Sy7YCfD;1`f6@+_b*nU3~aZVc&0$RVoicoi}74*H)Ji{|%6Einj2e z?g>M|l7J#pMfV80U;pDApDdbgE&P{-*P_)a;A@~`?zh9(2AD)LaMj_v#(02`CGI#( zEqaV%Oi7W`QFIs5P{kh#O+nE8h5DMvUs)BYgiNZx%FrkA;JmY(At0)oK!mB$-Im|* z$OP=r-#eB2@uDl>Y0i)pp~bLiWmQ311FlJtTA*g7it-r(k0~2P73|}M6e8)M%u4hJ z0ac&=Fw-+G=ymG%Iu0DsnD5U!rbTTyv8Oed#_R9R%u_9<1252oc#`fB>01>E>c#dp zX_5(x^^YKGwI&3(g5?_tC1-6+WQsy(2}ZLL|5nUhPW`JcK_B2F(jymj+fbTCv@^Dk zMc-VlLTjOU9#fDM^DU9c>(aa+aw(A0J77K%U&u@t;vJ6DOBy|*h3-rhkFXHs9H(C~ z4cYvJa#9#L>dQ{twKy#>4WRXQuMDqB#h@m+N7q2PIZ0R?if#G%ReYb*l zde!IjbHe#j%HXCPi>7?z_B}W!PKX{&i@>~IXw#7l{GCs{d+KuVw-^O@ex;Be77iBgp8_wtZ+F=pg;soum_+9P z)!?1{Qq_#YMmL<78_n%W7srgcCp2oQ1AJ*w^Cn!?9ZktMI;5i;+(Fa9qU4F+Cpgo^ zjb=D?%S?Bsjdb(t)R9#U32)>-jTMDd83e>XCGL$Uz%&Pfo;_V&!{l;)DS23(rfM1P zCpn!^LIc#`s|}U^2Z?gY(yJRbD~W&ZHxqNLJ1(yI*{Pm?Z=9 zRt<0Gu)0Y3OyPvJnA@YnS_Sc7K|Ey>9N_TN_|~4Z8Tcm^-`Kb-%l=F%(xeo~MXWlP_1b>yj!RFSvG=)l`oHgz8tNWwoQLTlfvsk}&HJADJa zcV}JDr)30p$-`NC43!_EQa@k)Mv9W4f0h;K9q^RB4zG0b-#Sw_iXk=9(bEsNlF7qO zxTf_dSRss6B|^k`C;rz~q$K_beWy1 z9C#8>;T=^CDvxry!%e!4jo3!dCKiUWORFI6m{8hp|K#cVjE-2H?Q-(EpAsy7a4~=| zt9iIIQSv%Pw(%J|jkHZqu^Q)M;qZn#$XWhMw(#32{%z>$8A3G4kfgu4+b8h-E3pvB zX-%~A@pf;QM)K{q|9npdNN2_AuO;c}(z{p`)d0V7ms#78S7 zYoIzYsWeWY4szTTmf9>G|KiUHbbVJZ9(01uyEbi63~z-S@6?3J|5u>oEi64qr@YI_ zg~Ho5%~NbB4i>)Yc(xWko~n}pW)P}9-NSKq%RIF_6IV4Z`emM{M%QDYiKJiaJ!Bau zhJAh4kvu<2tYOsV0l#6TnYlEODKLBd3Y zSo6M2A(4EB?@pAG3r$*_L<@Q)UzWx6W{#g;tSAz)VLbt1azu56PyF$l?o%vPFDwtdTlp*L(fX4$9keGkWa zJd^Qz1a56}r^Lex?R7)iul|3H`|#e2+HbtBM^6zGDfh_4b3uoOSBUyIm$Lnw_Oaby z@dDdSoMIocSc{!sNTrU_Z;5m7r8zcDI>%(v&4dy5F)&sfVPaH#?~J$nkco*aMo7y# zeGor&N2z|Fkv!>y4OY7N)6JG$G4I7>aXY$bKQO+JHy7Fa>!XYq#3!ulEcETk-`5~T zIyR@vl%srFt#Sh>Gr3r_vej(iSKiAc3#)H*9V$g7hYa$GpMv;}8?tLAPjw?B#fn*- zPzm%uZN3*Kn7HV@z!M7e$^RZnzrR2w0NSxh|25w~Awq;$UIKs41oLHs#pj+6cKV+2 zpCsZ?!}exOBIF8T0*jK$H&ZCCbOi?9Ui=Pqg@YllM6rov*1^8k{aeRk>}tDc3; zSE+I(NKu`A*X zW%L^|R24o6ZF6OuDubgn+}wL(N&iDJyXCgFbE@BReuvX~?U%KpZ~h4O_c1b<{r^RE z2aA&dvF$}NwdP$O0fSbK1JT6o?+^NGdmhOXXboqm&bKG!eoDZQE-1#yI4qcN(4x?$ z!XxKV!y|t*j7bpS0&C6v5@n`KwL~Y4&Ln}TR{E58|6%Dl&UhT24RR!Us?3{Q5yt%f zzDLR<7P2-8b1(hdG1o7N4p&}=@XnMoRF;|YVnbDmTa9XV!Mw_y+POKbMj7U;bSKkx zAZj?x6*{B6enLg)@_7z5k}0!R^h6sfZ|rgOsFan~XL^Iy@X@S0VWiD%jXXolH?e7N zMftafBkK=~!1SiwjkALqd&Xrs`B62Vf<7 z4JhC?GOc~3{`NaYoaF8HwPWZP*EXF0lloVm9`X=Cfc5S*Ar@e}l%?+=b<}gx-Ubt+m88lMLG4Bjdvb&6 z`Cex#ex2}4p8iVcLBZqbm8Ugn_U$Pf`rl7xbilIzL%~ycXxeo&X8A`&&z&Hs7l*tz zQJG+_Mlw;#$lMn(xX+y1Vy9E3!%~ynM9&?A-Ac_Zv6xW8PaoJ@Le3u(6J(swh-`X3 zcpIZ}t}?l63xTW4!^J#1eh(0xX*E-(MXZeYXCp_h+5!Ac>dGL&L?vth7@vv4!|;7e~4dt;3YqDYp}A%iRwdzgcfhb)M-7=qVmPy+F z^&co%qGZ_?ZImkr#XSi;~p@L$(ee-t6R#8E)pm9WePA%QvyDTeR{Rxr*x8eU5!+2*A_ zvu`|M5Gr2i2Q~-T(GQ6q54e~>zSUb*C^rzj)bwUDCi7!|q7Ur?vuvcktzFCr_;GWnxPHu5*1gO#AL$p(c=Y{R{3oF&HR1- zYTV>bZXMs~XBI9PUTBikL{?X~5+mLlcUZUA5B==W&L2{kuXLAR{=NKr*CuphcQ}jJ zqWtNlJ+fF)<+qJ3L=B3Hc;efIzmF!q5qkdQ5^aqhv|=R$iq*l>%axHX@G1dBzT8o)sya!|CTTBy6=i{H?~(1C**w*5Ef8vUN0+ zwn;cYe6$*uRK3>%v4fQ3^eqV;{_4qL(TTUhju9>_fn@3h&|pS=ZlTEfrde{u@P$A$ zJQf}664l_^!j;oUm;tXTb{W-=C4S?SKL>lI;!qL8S^o%3eAoPt}`ai zgyk3Bq%FZg5{W=@R27PgJFux)p0MSPlgOQJLtU!3lhzkCHPd6BKYvnm>@uL_l&u})6@`*4MFn$z`F zb+|>e#L@;Bl#q>T;OOroY3iUcr~Rf+8(F|AYN+&Q5Iq@n{5dtkto?9u*i%pVITsHr ziPR*|_*~6%QE(BWXly9rgPC1=b9_Ipv?bDer$o~$vTTxV@BS3AMvfC}#QK2sMn7yQ8 zl-Ui*7zhKl2Xi&0XL(wRL^O$duCaT4FV$N1vFpL0{~_9|pP z8|J+G{efn3=h~lr6o4y@iCecRV6sqNv?l#3EGE_DOKX_?X`Sbu{#QYV=@K>7?pk%i z6D9gz;5SMm3^(;EX;7}+9;$ew?&AY&4S;QP~?He@-8}h zKqv0CmCZZ&Cu;<|wy7ou^s!#{VL+&Q1+-`2ki1??wi6v`EsA$ys4%)*gKtv>=Pk&R z=r=>5!1qRL_c|~xPbVZuagq5cU_ZCL4&()wWdWpq=v zP^h6(X%XodsP^AcRuJl>q?AV2hkm|Do@Q2r_W%QFbn@)kBFC-@buE+C$3kneM9-(6 z(p4exu^FYP-u9?HDxI*#uZXnsVWyA#2$}m zY^$5j6mqqrdIOssp#UL>ptfEnL9MMwR07nA32A-j04TSK>nw+1-&W6gh>Cd8%7Z_1 zOQQVz5GSHQ?ephz`hAcw{)w#&^WRu5;a+#5Z$@oy#kW5SUpUXObYGfJ;<=)i48)L* z0v-B!-|IJTKc&9)DwK~f(~Il-*8V{yNOrS{gk+MwAI+F*@{Qk?bbWq)Sqp*AllN<= zQTU1lbzZG7T(4+HMn8(U@XDOV&Z=+X&UaH30Qo)O8(cKMK# zMQ@(1`|Ok`Z}jE;veACTP^*udhcxlY7sBU;AuUck0W|k)bYTDb{C6boS9Siy$L{Fo24Ma@+A1IqE>oiX}=L zyX>j}0ejXdMF~$H88up$i(%z(`?)Y-_r7*RNE;n55zIo34dKOs1!os7Feq0pceS-i zb~iG-Otfe9KI@83%~fHJ3O|7HHyQOX2iMh2c#J`VS8{X&)W$~Hs9ABO@qUW95jzO# z`XFXYt!eji)4n<7wrEc#(eG{HyYfUT?Kv{ZZc z1$_?ot=dGgp7G@UPL5Y#=``qb6ai?L|9dLv8H=B>)RCcP662taCCuWwWSA15(Z{AHsx!)1nhj+_}`Gro1ZKHb!J(Z+l5AF3@v2 z^+EZ7hDhygWUJ0DN#JgDzAFB4ZQY;#IhFvU4VF)k4j>eJ>Qv zJ~r365NFp=&8p?o#S3_ZW9U)xS!1kNE431sVr^OKy2;8Y6eikn^SIGqaw~GH^A;z4 z5^GuJFv~hR+3Ov36Nh!tk4==jt7Q0K#RO_+d{TJ@UM8(p)Hr-KV}5Z$=xOr`ofEck zw{|fqI22#|0OAzoPYYB$V12;dtHd{iVHqVBi9l#3PkjvMW(Dk&J>SN@?fm0|stAl@ zbjA&Zo2ii|aM9DVGpmtgR?+%mmk+{#XhP)cW3^~nJQ@lOw1Nq9sbypIp;Us7@5fj( z1EMc5a*p>65k7A57LH$=LO+5KB3e%G=TLEQoB$E=&vQbk^k@2OTx`T~|59qv_&!d= zP(*op=%R`lR12B$sIUz1%|qGy9!(MbxXiAtTY-O!^`pJdwRZPfj2-4z+&NZxn#{S^ zVxNmS@C~O2dMvGmW#a-${KYSK%c8%|5LkcwTkXnn+)$6q6Uds@0FIzf?*t^F0d%xY zK=+KxKozl<)auNEk1MMtMu<+N<4Xcb z7o$QW7V)hbbDXQTg!~+cDBB~g_>dWNJR&DA21}@dj#0~Lb7)yI*?FLktBP-lPpd(W zo**Q6Y#a}_(tfR7&yB57DenBec^Pj?1IHE|wB7P*4F{*2@Xs7ZyKCYJv^ksi%E~xh zF;8w3;BAD?%c%w5pJqrW=0%(2KXG$%CY{1~jetSo{&x1|P7Bo8Zocvhfs-lRHbFA7 z6Tn}7HYD1`$4&r@DWUiP@Nbv5-3k%`ED2}{#{gGy0E7QOH zcGJ}<$wX;GV|mu2apN~AQOxj8B4}Vmn0)&;JeOI~2&LSY+vSzCf8IG@s)389>_5l* z%7L?00=+)9wIM&(l_f>@1c)zfzxwS|YLdUYm!;&>R*!Su!>sGkEjzQcUMIpKJB9Sg z{aJ*`%{m|1CB!Eu&N#8Yk={xhUv4=+;uY~zh0e9{O^@NO(8#~0dNh{C2C9-4l#@)E zg}xKgKe??)7s#ZIBeLcCcz;7)F9634rnZwISLvsZi8Mfq3+(VZXc`bRc8c-|twZ6P zUju~hX)EkfPxp=Jl7yc{A^l`;S)Xf&_)HIb93n(^Msp`D)kKGflS+o>pD5`^gG@NB z7$upXqn{Go_fj<^{mJIRhGNfyz^7KTkSrOJ&%Jr`g`z3E=|L>0vO%F>bIm1u=hpJC30?~DEN?{Zlbvkoqp?X8C=Y+GU5c$3F2ibXT* zMmI$Jm;}jb*G$BQpj(eELoOr&sqxFQXNPZO@jo5a;q6|v8Sya^=$|=5T@a(MQG?^U z7w4^<#pZskuyuIynb32xS3PDrRfFKsG;WKUaj?Uyozc-z?8bThOagU!a~&`tr_dHl zCfro6znXslG+XDe$otQcnNXo`IxbRi3X-%f?EY8vOL!wfTJbYSSRCi#B+0scT=(J9 z&+ashqZ@O<>V-n6=s4ExB&{KiQz9?MW-tM}4UuBQyMZGC__T)bg~-zgkTK4BVNkds zP)gHA*Hkbh0@q=;@e6^o8-W%@f}RsT*$-?YhbIzVR-w2*@RI*j&w#v%jZp?@=@|xY z%_(+b0;B>1dnN*N)-;Cxs!z2ntZB$t0#;_s z8I);fQTFFqs6LNgB$b$Psq5PE&(8<`2I?kxT>cOQbrb$=9XvG*jY*AA8L8$ncH&1m zMMly9{mALGhE!PKLkxF!LL$8)lSdW@B4)1IggM|@hCTpw{}Q3Skp8qWSKBPWI+Vg@LZ{p zk-#|CrRF=2J@n3@9(GlIS+bND&H2ch)Ej-|uE0o=*^)r@X>q`SkbI4bR3ztoArO_C#ULbv=NbZ-d-7~tzPV8%`L{B6`E3U+ z9R@6`;FY3LpbgLPNWLOw0(IuU9B3A18Fz-Ciief#S5|wIzencx>>z^vz zw|nxHYu>1(azCR!RweC8d1sjtFsw2>Jet~tvqO5ahDpjPgi6(?24emKCFI~CAkpWv z`!=Lc8%Esp;E5NNn+zu4d;uO+jHl+LSBS*`_pj${ki4Sy-M~-DH#XD_>wq4%s|?1| z)H3c{_^gG65?w+3LF%Pyu!M}>qPutK&TlETL9FZ+Iz*%-qwAzSERBN`iT9j0%H6Lp zTk6V8T$ChZRpG%X(ezinZ*-u#;@?);Atu?wiNs&WqYNRZshWZ-d($x#?l8v( zi6q9awQI_jbx$xO|G;^DyH~pzN~r#e!8`^JfP3fHfGE?M$L$|9P-rqhs#6PTu38Dp zyyhhV+#kKaKK>iBd!O@D-Ncgd>4rr9bpgnBGmC+0BO~+ZM-r#yWB0zz4y&zZs zQOfVNZC5*?F8m`vhZGh$V1bp^`WQL+-0+t7s0?)T8|#vCMvQ53e-001N1HcpvMp$c zc)Q$CuNbSyL)X%)#!F?>M7hN?fs(oRPXH|XXznp7?*;`NuZRBhhNS$VbnV9%#p!sr z#K|Fx^2|vZ3dTz#!K&Z22O8k#I&?TDvew&U3p)(A=R1VF!FbM~+@5Ob!Jsz~M|27S z$FdOGiRWHS4)5?GvpH{{j^E^ACb+-g@lJNEB~aJ$YI+mL`Ph>Z%jcUfbz(xUJwBz< zOEW~+X$B?aeqcOQV-VNvD{1iB61*i4Z1hULiEPDBT&L-_i#QT#q-lRe7fpxe9~Ch> z8lmtmD3RmdvHt$5Kw|^puO7v^^NN&Hu`-HTWP72$2-c%H5bDww{qM+h|8Ub!0o!Fo zaZ};MpiAd}GNFKrS%XtR2eRw-1el!&89`f|%(Oup+d)wX_b)tl!hpNuxt}r{2d)cM z`Y|*4&b&&LZK;I)9LK>B-5(D3aEdpoid5WRu8-FLj(DZU$TNs>n>0KA#*ef$G@Ox` zF`uE*eoyVwYbQVe$SOrt-(TtUR=sCqe{LvK@l%qA`_u_yV~r8 zsNwBkY)plu1)b3Gh9?jzz0*tD{s_P;{K)YjhKBTnr9UN+KEiK&W#5DO?;A$Brq6_& z5W<}5X&f0?^2XV%z(#m8PVDfPHT2!PPehE9O6&mjL%{#i!KlG9%4>$>v!3_#4+&8B zS82!Zyp4f9I;NVIHoYVyiG|Tho6cKOR6l`9zQ!_DaoeA+kk3Z@Ha5|v zLq{-zPF$3%zMRLkg0AoMaz>Dh`HFp>lB+5G1lolS7v%w`7; zf6Atge>TZ-&bdrkTlc?@mp!!*5^9J1q`Ig~ViDT+%@Wbu~g%&hCZY*^3p9(74uuW%xvQzd=C*u&Yi z>W|%WJ{}ZOcdunmg;@(%kGFk_K8>-OMGBlg7Ud~_XL`i|H7T&vp5*(!1y0Gxp_A(5 zQ$O9^VkJA`gO~106!!4jwW*+WiOhbIIrAE4sO_DA9pKr*!|)CyE*Ip!u6GmPsFbODna==P_@}y&+{rIrssOH$&k`=H%g91R~ClogzB%o3SJ@M|(JrMf&7Ip_% z56N6+GC%31&FbQdQ8sGS*qaK+8pq@PP}`+00@rIr^Hy?)iFH_vc2?Vy=I z75}8S!J)BqonYQ!YNBZ^`U6>3nNnAQ)0bna3XUyOE%J zVl4UV=-hDAk@fJ>RS*l6mpyY1^v)|`3aM?>=#ew0{@(@p?DW=^u#5MwBaBl;pL5D~ z7tk&fyKI+1`j~%Gq{U~F5V}zysPSKb`WZ4|FP$V*f-#L3T@b%G&>|h<0WsEo~Q*K z42Q0OuMtM_5^gUb<9JAaTW09;1Gr^A89DNk@B1kBN4@l1X#B$Q5a_GC>_I}}B%`!y zyPoG5@Ngd$LwvEGo0GyR7wF8;b8y}5V%ZJ5{H^kE%gfklY}UBLB{`L|qje{%5oO?S zt~Pk?>^%fQ>CkI;Cmo0CTM~)g3iXJ^jA*~coAIWaPj)*wWI6WD5*uoEHJIV_8gXMg zN|`||9w5Hcs!q~0X4*Rw+ExAVeOHZly>vCD{|wtm=_9X;D{I=0)IC>`#l1fHS0~yI zF9*;a6^~}LXqpn_yEf-1!M!b!2D=OElpD|AT_NWSr7DblrYRCo(9d~zdO|(Y9ed1h z^Y3slYdF&DMHaP$9}7Nn+f3m{+Re`nM?jd$M-@ALalq7o=N~0&BN&^j?2j-34&J^C z!yVuxqXUxk*#1=qe+1M|Uv}W-+D|$8KT8Dg<1Yu}OXGz{-EApboR_&WfELp@SWk8g zI@kviz#s04hFTTW^S<0}4*B}qs+&PxE&IH`YC?mt%{TI(+CywQ9(80SElQ|ITKvLo zphG3_$sLacPNYguaSNi+!mW_1Xg}T`m(R=}euO~_ds7LZlg24CrOQK-OPxOWC?IQ-sW8sKuLO& zQ01tWGLp%#B>8YYeR~B^+;n8TJOBi>(sBbJbivAXN=GE`_I1`*eb>JTouBMC{!9h; zzWNI#vs3IZlJ5i|IegXgB+amzNrx(o_B_7XFSLFpA|`@Bv;r!9fDJ4uPyP@c)zw?y ziC+zXDC#uuasIoLg0M;IE}S1n+hCQVO@&s#Z*zy4dd^!8*HTeh!tfs0di<`AOV|)LIZ9#3U|M4)RoUm5FLT z$a+AF_Q>5#+($UjWN@8r;&9~Nls0YuGGz~H-di!grCCs<-vp0^V7jZtV9JcOI4+fp z9uH9`nW+vPkh{iFRlahXjEs0L7;VV$4C}!t^hKP|kV3oXUWr@%+iZaCw(E4hQwq(S zOONC>?=w?@+v_t)XL$nZ>rRUhGgFRSDtVC6#moyt0F`zM zRtcBP66v)a2ad`pqm6sLC2>m34D@HpDODIu>+coeR!*A;vKY50T@ypQ8sFu+?Smzv zG#bK%SxbTwk_C`Iqp_mByThNA!Bta#8kNHXZV)LSD;K(LDD0NHzEVOD5~tc#MvX}c zc|BQGo5U9fLJ>9iimA^Kc=! zd>o6`iWI(7@b>%xJY|0cYaw221iCo+UmbFm$BJt7t0gm#;JbFO17tx1TociPLn{BF zk`$AGD3#7$c5Q73NUOYAgb;uI7XhQ%w@;)cAJtO^oC4yQ+2Xb8Tb@L=?&#_26U+-| z<5&bBndZ3s3kIi>_u+T42_4-^4J{;h{A>4452hzhh`;nmHZ9h(l!o|7-K7{d?ijiHp!*Z)y5!;@D(+oyjnEbMQ@>OY4q!^V<#a(Wu zQr>rCvhWiqA}+H37VC*cYYrs&&+yoysNLGA#KKPteYN&JCj-q2)|I2wvigh%oBrfw zVwLKbPnFc2LwU(YYsc45_-=gT_U|r5&=NCJ%JtOtgvz-G&;}abKeFAN79VY9_b9fE zndL~lhYy6(u7{`pXh_$r0B#^!wO;vGuyFQ~jbUh#C$b+E#eY3XL(<5iu{kVJqo&X7 zhxJrgXeCoRza30HGr=Dp9~X^*hann?cy?l=xBG7mu;kohmK%6!WH#Uj@Io1h69LLQ zQyC|I>GNDc$4mv~zd$tMm;R-)X9H1(xaPyV4*kuWF$nM6 z2w!@^8%-y`-u zz8Hox#KG1RKh}W}N7>psUxZZzbE_d zgTYV+^y6ka2yj2=`{(XluHVadvy=8IIh9pZHkZ9utLsg$U=)C@rpg1*xHTPXRL~s& zYxrVTaAVQI%ctvg+yg^ws36hs_KP1wyJ7b1BL5j08um{?7*Q`?F&N!mAPQ3R`nC(c zFBh)37+aoYq5Rznh*|9t_c5Ry-!vay$mHJa5Ikjd=!^@{RPwEh!I~8g@!}IcnIV<2 z`F^k3MDXOL%FO1Qb4REevYHl+F?2PmmkUeTbLSnF7K^W9P@j!0g0eD&GV?MFDjCWW z6M}YPUV}+-p^7qj4yy|V|!wWw)n5)|Dxd1|Aq+D{?K+`G-tbQhdQmllBd8OSS@i=@< zd>eg@As=upWbAqtvit53k*7=o9&<_JrtORq{nhEhh*5 z6@c&-vvLTyP09?4dF?YCtz4E@-MM$MtFCc!Xs5;g_&)N+w6JjP*IE@8dysrFH>Q=2 z?H>)Mi-S1&_doLz_&@OFvTEn9rHr}7C)?b5ua-CQK#v33l&k^ccAJ~kSSHFqA9T2s zTqm>@?V3>5n|dXItmGYxPe+{1=@0Q@eU~&ADY1%|c`CpCs;=n%oZwm({^)zzLF!2& zLZm;U0{4X=h?X9>#e6;?y)%fkYK7QHwXcx@&qQ-b@8g54NC3G3Xy_(5EV;D-{< zmSo7vf~jBNP_jt)UnY}q8ryng$TBCtqY?9}8lj`31`u0)`rM#DeqFm2mFGu5SI+Aa zrxxXZ{~eO)L2^dtO8`9rN=mh|#_|1q02x59k~Sy6Li9WV&arHeNY)XL-*%gG#88h;L1i8BVfETDO^T0?51x#X0t|~p7)4h#x|0M< zjg1TemP8HYOUb(!-9o_-*;d?4OJ(RJWs=(V_-JB7)k{`IwHkRp@Q5aLx~)&0JJu|J z3z5nkNfl<`>YhwoLy^nYooa9)%(bwV!HN99r)(X6c%qbR;i76^br?E4nmCrN%DSvy zL+*^o zy^zCV0F`a)yUV!l%c_`iRNSTN_Ph89jCk%dBL7CjTmOYnH{7=wkvVJ7r#p*z#Pi8M zf`3n-mobKQUInUG{)$4-mgheuVXar1$rc=&KxG*jhVga=S1Ta;3d1o7%d3G@uGS;W z*2>Us8hfv_x$~7v`Rc&G+*Zb`yp1#LRw6-;KGI86=Y;#{b7AsU$i)UZE6!X3DC77a zh*a&SrcvVA#va)|1_z2;@G|_(EX%TK`rVbBiNl&MRLxI#d;yq!3=>S z@!&<;7zL253nN+LU)vbW#JqmP=O_>lo&u$}Q9gdbkUdIzb0((%cYX&> zk_PiXY-8Tth2x$7qXmh~mzU-mZ~7b2wO{_Wx9SVUagaZn&3yZdEXO%7F)Y41}bIXO7qha{vh6}A1yo?s&GDMr%h z(Y0UugBM`jQ)RjFs&`Z`Jbw<=dY~UirONgBnwXc=pzohsV$v=1G>4(zkK6p}ig14k zS3+r-4Pb+4wQDNHU) z&=E8-Zoky*I6|^lo&@e}o+8@P#^B=??UD?(=#&K*$@JWk907shpa$1_*hxlwA3V0 z!*y3@*s_akfUA^pXQsBRX|?NX({E^?fsszT!as#v9wU|`0|(ffuxp=+k zjF%!Yn4X6SBbDYK9qF3F8moCfc|4{~ zz|YS0ETOJE(UI{oXis+igOgGU-|2z3lZ=pg?;T~?mqHE}8 z1EGcW+)ZHM)50MzH)c#%97*q}qBni>xHh{K>v&$)yTc*`Bppc_%rHwJ5P|-$XD_iQEkOT(q4IVTE zEutIUC}QulD=LcYH>?3ws3Q%N5rr9rDvgH`g%E0nxrU}gIvlPC?6`f1J(z4mI60=s z75vuDFTDsh-{h`N#(K)23iN5rzTC7@ZfE4y7;zWZo)Oj=IXx!28mRR2#&AmWW&94V z418yDlALUiT=W`SHnQucqbeDdw1*4vWXed&{A5!v;z2@R;X=E|#ZD`l8)iDNo)}CO z)&K>1*vkI`^OdcaAz%F2X_tF3(vNf?T;TMg{vyV!`3}We_%)n&D4;I&> z;^5#Q_|n9HoK)6PMR}$q+?{4wsyG$puw17$qCCPNCZt06$w7+-JLa|Q(K{Q0_kYk7 zxr#9zBf2f6aoajv6#4!+5wq&uGw-zAs&0YD;`VQd0;h-{P=CKxwAj8&ZC7di-Uo%G?4b_QbBYS4eN~ws4Yo)df*Fm% zReIu-TZf4YWvp{1t>mmRSJE-~#)TbbQ5Q%WWbHRt)|7lWqA|(Le1XroLL$~2T1(&> zm%@nLNvpEMr-3u##}j#w6RAiO;%vW#_(c)5y>ffVG1r9H1F!Nzkup8uR!pxxt1B!A z90Jp3U2HZ|CKout?N*RQQpD1&A(@AF3$^uYex?bHC7yaN1x%61^^b?HD*3oI1Zt-Q z%dVbfqGqnmheTlDEOfImj3`4#8A3)H_w~t>5YD{q1 zV7U)+g!oj&U`{SrP+Gm@!A&iY?q5_C`j0sS7`P1|O6y0(E*Cz`R-C37m?r`r>Z*BL z*^I9)n;Vr3K;~vMDAhD%+uKLRUq3P~w|h>1)S66{ny`l^F#E@EbH~_lHVP$&$yecT z@+P$~X`O?YTkeA(8J5+HOvO}LH@U$Mgb!Z2tDy{)4g)j-^TNJ%ZQMqL-%v-X{9L~z z-z{rC>)D)+egS8jkeJ&F7Mk!f@AW&muSWX}bzU}P3KNTl!{NH|TfsXjR;OvxaQO~1 zt28qTyC!Jocc%mR56OSpW0heJcszRVKv#c)TXg!b*G0dQD54_i8c!J3>RFgJniNCx zDHO@{QEB)7`IlGnBLQlEE$rZ*8nqkHX-UI#8}@||E+M8ay=bTF@ls6we4M+&Q!s$q z03rq`lSwcb0q69HLplyRSfyX)Ven#K8Cn}Aud1bnl847_ke5JqZ=6EH#uGNL+rx3C ztl*l#{VW$Bj_bKQU`K|tCyS?KE-=xVFUP^gJ0xNfmKV9mz&Vv;C<~f*oc*g4&&@Ucn zzSxPjlpT?R9p&kGp&g!kbHB$>zk^3t1Fy_{pB}FC8oqzzGv8N|?C?I~8h*x3s3G;x z^!PBw_ft1v)D-$~aS8~Uhk<{>34tx~BJ&AFdfC#?6=aQK4js~iVf#Cay{b(k@T~Su zP3q!(`1AQP?+5rT-mr&Qvid^@Obq)`@xjxo{ndr2j8%(1{Y;UrD1pxd!Ev>tdIZ#_ zLS-|pC2zI1Rp!p+zf<)uLg3@>o86&mTmAw4orU`5@kt^zOh&q|#;BYdA~DV{tW-aZ zs9YQ|LOFDzK)IV?010x)^)CFLGBoSGIR79;Wb0%~maMGle5_s-0t7vYjF|U!WaQ`_ z2xXB{*W3d-37z+McSk*Y{UQG-I3lM*^qZfa?GS6oV9g3DuS93)Hx#DY~ggMKmR>XFIUk*T=Y75a$SYu$t;bk9xP4ytM+v z=SG#yy5b}SraH>X_m|<4tjf|s?-|&76OX@L^+Q{xsfaLS4RUj`IDKEaTiqb^PM5Pj z6kq+Jo~rUpVv`ze4LL_;jbT-b_vAuF*p6XR^5~OcV)G_iLa*H;RId58+!2Ge{}yZi z5T<{^YQ~;_#B%0bAK4|l(i|q|o(HeKW?ujry&dwQ!TPsvYj|rg%{i4C`GVO#|AmdU zs$%#dmoQ||gLhJ)KPouORyc3|Jw6$A^aoj0S_D-hT&6Ex0%BzCnOQ7;~8mfV$=T zCu?Q;c8JPqzqUt3!fv)LELCX^L&mPn`0ap^+sAiWicvnOzg?MS zS0aXEP;F`!LAiaP6TzY7wipK$9xqnV=Jue9I84u!Ed#9>XHodFOo5%+5;DZY8%7xb zk{_~dJ*X=T8^J%ZWA>ec8d3;3!%vfod$`kPI8m5Lfb<~nU@RFu@M9E;12zJm9e3ty z^V0CRQ0Sr0z~aVsSgR8Ip)w5)mspE+9~(Dje@=dMxc=2(Y6m>{54=vfG2j>GR>9WD zHCC>~Td9ep;1GWm->!Y>$=sKqHB{2YuQ0dSu)V+5y@oF+_Zrl7~lbD9;!v<@y5N@)AYuli@} zf8|Nd81e#60h_p%6+d>?L_h2pU3p^yS8uEoLGnR-ES}pHB+7NoHv?54_+nr zJWe$Z<}LD#+dC;;1KkX{$>Cr2O&ADEUTX-)@7tQbU=t4Yfw{XT)wXqMx>?u4`ntq! zAE_KLUz z|9AN?d+fonQSKg7DxElyzps7I#)Zt}`qZdjXWnUkv&R4P1PIQdsz3w7e5(e33y>`0 zTXkst-a5Q2LV<`HJf4aBp5@|hv>aJiJUOriH6jyZRpTu;E$y~CofgBBL4PZtxXR&; z6K_bOLgZc^#>US3Y<976f4?q(8J9GvHt0K%>@4YvlNk|LW2tn(zA!LS)s~?+@Gh3;+&IBH9o^sB*ZbQspjY>n%kMJOiRmogTkP>D_yMFC`t`{>*7;MXeP)N zkYki^jyg+6VTC5)msS+2qcGgu0!#nh`DrVl(ble&$yJaMy|ClXns-Vpb-r#I(uAqI3=*rPAFa%#hNJ zba(eq0wWSbH_|EHDc#-O64ELCKm4BSdBZC%;>#FZke1`zXg41>P$%|SZzoKr9S}Afx8C!zcGIkL4z$*2)U35zTCelPcN0$= zBieGqVF^z;rtt`Ogpw*3_W<+@Yn>Vxl;X(qi~6ndMIxjA}+14>#I6(b5CZ^X3AKX`Bxthy$0{<%ejV=4q zEa$VAAVt4b6l?kc7UPOu34F)@j(w7rcz1fba;exjCDcyQ0RF~$cy?!~w9rVUK10S0 z^#|-Jis7v_Yb=`FzRWpJ)4&F?jLC3x%~?0B4WTCF8cvGwny$_{zL>#dyuN%*TOJw0 zgUz^eyx*hH6Rd65qWTDUat2{1>z&&`E$jD`i(GCZe&>Sy{lZ5mo`|ui{3nkWQj|W< z(Y2q#k5R)4qT<2Ld1>*d;P5yF=A@&c#tN7H<+=ncFE5zKY0ndI*nkyHVydaz#&~{O zGX-!IcQU4W@r^H1ohKD1s!a%%O+y`Kg#@5=LIQ)uPuHcg|D227{DHlLrr7=h2{6dO z`QgP;4u>Ng-eA37%X}^~45e_qT3;uNMKsD9vKP66($LF&;yB4d$6> zZwL0ajS-4WOD5dij{bHijb&lBz>c7OVDQ?>9{3Vl;1*Yl)-X{73wnK5#o zZG%e7aS}~ox7=E^rl}ZN!SEJbBLo&CNVD|nOWg2ILyEG9c4P$uhXe^{DZ}#BK23s% zXX!zu6|ImS$v3wsII;pM6WwPzcBdh0O?Im!$-Z~6(R=0i5iNSu#W28};vf4a9>NE; z$^*HdJl+Vc%3Va*h_8-bldQVYWAS;+w~88iG)!5kC^TODrTVL89UFJezAp$D>ix zuV!y_z*EYNI)Jz4At$wU+N})r+F|d#2uBRwWd0huUes4AO}-?{%oHqqiin(Ona>>C z`{6+*(?zNayMZ2*)9lY=={QeOOU4lnbJ!Tw&HeePZpN!f3PPnp1_mYFBafjF`iG2lTOrju`H$7n}+$ryY3>r z=?DLmMvhM@hwGO~mGjB^1WRD7@;X#T<6xtnJJX7PX(5JL0_Jh^DM!^JV&ap2#_^ zCc)XaQ5V3^8_=V@Wm5OphCQv+d`^xIVEWIEN>nedtX^P5b55I|L3_aMm?{1ClFaTZ z0cezV2cNwHISuEfl`_7-_|D-Fqnfp`0ic$Y6(=EwOuGZaFhT#g!t^`0c;*a#1%Bs) zFAhyDdUV^UidAyWWnn?MA-!X6RFG8y(p7ouU!!fBdj8)&}}y~T` zIyE-l^%-~w`C;?-)~3?qPz~TgAhO6mFYMIYxRlfPALfaed@F|*>t6gT(XAKbKVDHB zX}jj!YgK>eAb^R9`7-CeYE(D|z=wWX6Ax%cebt=-du-5>(dRiF1Stt9) z`Vh3+fWHYt`+xzq@*85fzK=cecSw8VQQK+tKE&CorFel)yPklX<|r!9Z(+CVhDGrN zh`kle;Na_(r5i>6<(Fp-~OwUp&qEX4qf z4?ZM_c$9h;j;1t1XeYg;+K^q9Cx-FefT%O4<;<5?RD3W4=P+|Z;wd>$usL5E-GXGO z$NQZWTQ8URh^Cqt@)WneKQ7uX_GX&(_FkFzFFJ)}w^FtZN7x3to3M{Eqe($rm!#7% zt(~4Sy~2mpf?T6q<_BJ*45Qw3$3hntO6pAe+~S%Cs4ZIw^7UNOdfRczIyA(u;^B36 zZgC0bdlWF3UXQ%e(eCS)TZ?QM7%Fp9uaCSbnPvVM^|-aX^tetc<+PoIMDRYXNrRTI zxfT4p1=`Pqe>v@pkenXQ+O-TV+xg4h*~XV>H;Xa+3U{@6?-P6#J#(lny-u(5RdAx& zhGUPbJSBSO*)FyOe`P$XvuVHi`Xf$sj zS7P>OG@kyLjJ!IoTl87fT>QuM&&*x0#hSE_e3K0sV7S|x+iy$0#35G}k4)^6zJ}6^ zUY#ndSS}h!_`tq8Q znK@3bxNf(Sw?9Lr!Dzmo=~H5>{jwGNUf8NqAj*_xP-r}Qx??Xq%$<40=8Zy&4q^s} zF%fRLV;nYnEWS1Q{a7|grAeFwW%S2PAude@ozR!PNiSaK1Qt2DbyD>@TBE(h zc--^qpb%9#m5^$_bL?Bpa}}~*E`adzJTZv^%ATQj#`sj4 z)6SE;(d?mPKvz9|o6))@pyGkMvg7i;ym@g*7>IiX0e5Djj_+-j@+qY^Zmc#6lKv$P z`HvTr+8ZplKZr3K9=)EAgU8cJY+>XWL|F=t|EO6BCXFWi&*OM~*|=>J?H{J4v2npj zQyvu)&to=YoQ@ugl1fK32<-AIJ6x|-(l|jlJlpxckf5Lx@nfIxJ+c>q>{nXHAsWUisb4HBspR3Sf zU&D1O%_7g?SR+0t!@0uji-qE*x2Iwx3Ex5Y zHM4rkW%e&&GOOO_;nDUC8ij&@Su46W{O#MlfNHwuS^ke7povgkI823wwmoKR1fZ#C zXA5w3`{&~*GXI8VJQbzS_bg}E0+NJzE*y;#HvFFN_IoF2njR{d+`&iJNhvO0oeIYd zzvhh*3bd)C>2|aGaY{F=mGfR{N);7f$gTpC0khqIMe!*FWA``tt!-Q(?<2Vi5|6&i zuG8MCCKcrHQZU&)DJ_kT`CSRZRVeE<*%ZoBBnqSXh*x5*R73J1iR=laB8hq9o5 z4ir%AQ}7l)T;$bkhsm~H+8ncBt9jkRBL3LP;+rCwAG5_i*7>c6CVjbHMFP?;7`L|Q zcQA0FXUS6^G8O)jDYko&xZN>|ER%9MPl*%2=A%%sz#LE8o6NT|4#7!?;877bsOCM7 zATSx8aH%w0VPgEibVc_9E+tKzlih5<;lxg-kZmRG!#U&kPRKcrUNMiI2nF6X1_2q~ zEP}kEK{A^{sqbPAh{IovZ0x}-4f8)U!Dt(dn|q9`6f63&OlX$*4`oF!W#r$V5QI9a z-?o2W*)XNW;(OhPCYXf}Cr>$}0}RY1dd=Jh;N~K)xmc4O3T~76aGBonD)c_HNIS%@ zzqNlYMH_mhfSgn$5iT*Lh7p_-hI{E$qo25kKIW5R)aRAd6-73(Pj^hc-txB`=4v6) zvFdd!^z7i8Rt$ph8ZUKp(D;^v1*I)8J%PJ~Sa7%CIe}0GO2uheD00245qM-SjxUXm z_7*JNyXQb2f5(3pEl%^tgx|72q*ij*hgJ#jM;!S69R1~onGWbB(}c!r2(Lm?NTYwQ z-Mxo}hFUU&51HR)B$clbrexr}-Q30`L@Tp4;1)3Gp{)V-ThL)6Azy6PHJ;{2T>bJ^ zJTc7AWt`@|Y!fhHymkK4r32rWpM4XU_lra(=1)_>usJGwiZM!p2@n3;qispu^PC;A zG?Vpzxs^7$zCU|j$jk2AQK+Q8Um#d>=yTKH>Vke3m(&t_(;s<-3TveiY7Ut#e3V)K zR*4_oSp}-Ih;Uviw$X~RFEV}(Y)llXGSjVZ32Fispm!EBUDiH70%2jpfW8O=^I0XYG@exPIrQ}CI!1*#^(ke=l zFvwK$Z)rAgTH{N}%5t%u*aLC>5!n9pB8v#Ig&gkz*knh$Xw2E^53^aIoHj} z8R22UFgCrp8XIL|dv6h9*W1?0Ro^>RcbjYKmaWh*oOm13y1|_Bw*G_FKLdHgDLHbH z@s3k`w7Ht+c`ngG>RdlL+&8R^vbKR=mCrqrJD$$*&mNo1x#!Exy+y z0XuNLoNX61W=uUnZ6#Au9hVXU*=u^YMQemG!OPcW^>kp*)8XDlujP!tH7{-deqfz~ z_6`4hvRtaKs7+V6jwUwpO~A;`?*nA2oPv4?Nsak?o4e|$gAy`EjjtdXUtMaG?rqOD zBa?w0xN%JLaI}>coc0f)-|KfSW%^S_ecQ- zB$@Bm%q$j*aw{QX&yf|!t-X-HIl`*#?*4cE^JW>pibL+@+KGWTe%EjOQ%isy!(aOT zUk;5GKu2@e?Dg`Jh3|eTSglV#Sg1od+pXx4a4pCUz9voc)MZ$2Uvn3&wg7vac=9wl znq?7{DG;9*H&Or#85yw>N1U4r%q-NH!rg3s#xV?1E%ivHdZn1V7fd(3P%PVh2jn!6 zSsPLJtXHeT$sA|OWA|wbf}3W=9;%ak7Z?rN`D_1*9U7lk+Eg03WNw+v#;6@?7nv}+ z{<2CaO+am9Ma&cY8N4+iRhh|BJfX+VbqJI6)PXx!IgVNByRn|sSgw=YY{C*eD$N&^ z4#OC^yNtLeV$o>4e(bY`Wbo4DLV5o^-W_lM;28NL_o)8WC)Wu6*--!0?eiwHtdO(2 z5KqeKhX}84Az1G2`uM96Ped~AsXcpAM~C?Ghg9?^4cwMb3(!dx@jxSqsgU4D1dVvq z*>thmAZeXX!FJx{1e9PX5}lHy;q5*p9iH#XVX%MILv$stm&W(God}>4j;2QcsXoDGvO%blXiO zF*f8r-^K@ozEv7e(^x1jh$q)sd_Z@mWI<0A)R-xoD`5UUhgr!k3PURYvOAUEf+g%p zNq1Pqz!HVc%wq|wsIiWz-kp%WA}&`Lh&f?1>gfYikGx7@%!~2`D+2?B25>Kx*??0c z(sE=WAK`v)3Lv0%)o>$+?LO-h*Kt2B%Uu2KT4Us4_rbTnw%|^WtYLYN#7~qLp`6we zq5w>dPMgO%?s5>uqnQxT?-xqDp5%UkcXCx!g#oHEIR1^`>l{%$}#ZLvAF9^^6=|wMCA^r z@F>KHhj&}#FE2_heHEX(d%eo~rJhy6bvkZbg<%~y=qJFQ?X|rm7wgFAII>st(?W9^ zKfcjz2pEL2fW0sGr?n;$#LB<6`A(Fkm0fty;7KP3a8WLHpM%@O8Oq|arpQueY~%l4 zKc!gfRPY(JL8q!#PnN5j|J9X6A{5eZv}$eVOa-<%KXba#-x~GtcFo5mF#_7|HDSTo zKTOqaQ`o=MXm%mJLUj>_Pw?V8nc7&HhOIx_(kVEsCdU$Y{h2!ll-vs`Bfm?hKsG6c z`oW1Q_qb}Jh^(ahsQm*oYz*{0(GCWMbe3l^B!V)wkdoioyppHCBWr}l#%nJbSNT8I z+jWb{ygemySC#&K`{A4yW11hdsv$DX9Qx(DFbFdXMj83r5iOd!NN>?Io_F*|Ql~Cu z3EAWQdB2kT`gzE+YoqO!uQS!~tL0e>L+s5;^4#bM4&!Z7`c|Y47y&zPZ1e_uxGTT~ z&*Ze#`YQeEdv5v9|0Uk_kedc-D~BtcuN*Bj$}%tZ7nN_Zju7!`xize4Gfi%GH5ssP zQ4&LP%SfUkc9vt7Q?;xO^73Yl}s%40k) zv`3$=?vTDz=qr;B2IXo<=wa$#*ar+A(Lta72Zq4~6H=4jnU~LK^I!a2vpJuUL*Ix6 z1`N}nr+$L4s@lMCDacYJ!$~auF4PqNc_G$k0rHK01ujQ!NJf<79{jG1Z{<$%Ptq{> zGnC{w#MZmZd%Ye)IRKngqYvaN%L~rS!8%|9`!QV!Z|dKHXxNzMJu#@T^Sc;&xrrQE zv|ylU0Ijc1ZlHv()n|vn<4>h}jGY;t;$%T<(P zxlYlwQMv?7&1SGf2gxwEBFD@s0%i-98Ge1SxC`7B6-Az>4sTs$G|;TIPU8OUklQ6d za<0+?ctEM8$X#MfF~1~uKmpIsh#BDTxZ6(n>MWXVBq@++jgRw#1r>ipG|VWBdYv0z z&q?;)^?S4XFe&sL<5}`!9eINl%`;m6;BGON<9~cxeC}pyN%il;k7-@a@?WBVWg;3Z`%O#o+A)$ShVWt=%9lvhPs2&uo76Mkx1moe~df^!hB18e?!HdIe^A9KUQ<4 z+H5CEG^;RUT3e(p5&*8GsIM<9%UZ9gTiv_s_`AWnZ`Z-d#drRkH7jzm4#ImG%9F;D#@Z&#Hp?b{C$ zX|x;k?eIP{ML@*tX~Z-{xyh}Pt7fR94s+f&J~WbpfRLNSX+Gw;qxOr}(uN;-J7E#) zJDCezc5PmQzD+54(lLBg52oPwf+Ohe{P{C*H}sC#`qz-;*3-Pvr3f0FBZK zYlwYI3yA-FM{l(7$_PSdmwDYLUJ^fS)H&|*b>>cKXCdsX*EJHvFie5(9zT=BF<|Xh+%8 zY>Wz?|Ih)#@bN)SxD=$S6%aEToLzTWacnR;DHDVn&PxtBjxT&C#b^|uDvVzA=#uCC z+=|2_yjh8T&mJ|ECflrhh`G7-M{>cgR4IHpR#za9A0**CK9N<0u0qH%7caVMFLFk* z1?%5dNLTMi4V)(0T>4#uLA^%C5mh$VsEZv2^~doH>4lJF967cry#!3k2T%{^<5!5!|-FX%NI1=bOJ&98*TFeQwg31*|nz z^^u01DNOF*w{V8_%-@OaAb3xUlwl4W7M&uTvg-GP6hlUk#j*b*4KV@v9e_xne)b9j z(73lBBo{b%@{f`u907~4w5>!tuI8o&z8xc z990mgcV}&SmeGfwK zyy)cwv0TiL1SwD;RT2`wSo2|JtOj{)RBSQElOYtIkjJxxHVxqLJ@+_Gvkd1&aRVHu z{)W8H)v6xt{JD&$C@APj{Ri_^aT-bDcnJP%-UJEg61(y6e0w&GCnq&%s`2GT6qY#I ztkCsRl{ivF1Hn5;`&E}@XG*mt%eAj>7@(Mysv+|+Gf1kpn!<)H5r1e}A`ajCNH;>W zZ^LsW60RnSj0S)2guMzgnVD-~-|Q6uc78U|F)6Hog2U2uIIBGKL6@N|GJ~NCmXseu zu%t=#*FCkfrRuNAVDL7n$=x4vB_$oE-1@rM#h`KHfb-6E2E_Gn(`te*`UNmX{&q!F z2LVE7MWd!BFdU4qy<&?w>WTl-fvwVbseP71zQ*eY$!F)*lKWJh?oa$l3nD_Mm4h zE2$olx3tuOi@|Z@c;v+!8y`Ec1iYnzF^8wzn#qchsCsy6wnWBb=P|ok$4gC4BY25+ zt)j~wr%M`iP>te zYFAVe9wd;07_}SXI?BiHPFGca@GHcxu&9f=K1xE*l1Ed`R z@g5zt|GCP`{nvyTL2g712ND7&i;%Z=ZOx!)oi0nK<+PQnKb`EID0dtDCyfd8Gy2;r z)HESx$^#id!enm1U-Gz+0K&o|_~K~PX@QX|Qnucgj{V|ZX`+DU=VAJZXD11Yv6Hyj ziSlXT+*-{c%H1U11iE>k3p1ICtTO389yH!NW(MX1t)-mihUTWhmcx8A_i1Sfti;3= za!hhJ?>$X}w>V1}i1{?5XG;*(hqKU`hepvE)-%FYX-?jiyY!{6S3)&qSCsM=$jqL$ zte;|J>yv`e1J~fn9fn6{YPN0nXEH9IpSxN3vwo2B$d@)9@q28+5K>B&lx0=m`+5}I z(?}LPH-Y^hR??u*1j!}mNAO1n(RONNP?1vJwbc63taK#v|0AS)LFG?mD`dt5ohEn-Z&rT8|Euz&Vwh)p%TCYFLpX?W&kh^i>rN? zCFHc8`GUi5R8V~|uC~u(1v>PqjsLK$J;0&f3=(10iy^bSbu1ftG|j{!YRz{hpHLj- zh@nfKObh%I|B|C0%!IJ_i>*{GR$Hjga0u8Sg8}{=z?$&xt2qY|w{>D;HYg^Dz}#?= zUM@K&{1Hus2dxdD0h|Fb;-cEL{w)9yvVFB^mq0BM9Q1%i5P5ghq(Cp5_>R4&x zKGSoK#IW`2+qb8ZT0oTjJy@a$PG8xKt{JYnXC4!a;X$qSD#<~n!Lv3HA{33o?;g*K zwD_kQ_E|PI&WO{`SiEC+i$0c|j_7;^#p8A$A-A5YaT;MRmbLjgGL=qB$GyBBPd=YK zf_&}Ph^`Af82D@IN9^}$G__EogAVMAK9%@UUB=Hh-4o>&$QHBNE^D{GS0Bp;x<>N` zuH*!AIQ>Z;G^jb4C79FGJ$B%PSFp|^Imb~rEV6$i2}aMlkb&4kT(vCpXNx?^IXXHy zD_Q19kK7|c@~OA`$fB38K_rEe9mUAw!vJ7OH>{PdHqjxX;??Y%iw$%#dr|Saz530F z7(kDzpEy^&Yy#*BzXWf#Vv77lfPV8S?=|2lIXT+=^muoh*8UIZLC+@?*DN%mB!*@G z!+My)=2`k#{E`t5?`wtFEgcn&a7?JX0KnPgnBb?OU^OJh%a8fZjxYi96Vt$VtCqz( zkQRUclRTM8v4dYrJC&;6ySRB4OHZ`}s~0b^_=;=Vx5 z@9sHDj0T}Qa6)jQ>DXamQ9_Lm?e!1kcrkIx@#51MBG!UTdr7=Q!XE=UC(N{uBqw1c z(w|IQbaO}yRy=^ouBZPEX`&CG9-1_*8R4?Gsz{sMje2STy>u&NxQ1QMmV>6k_1QnC zzZ~BEg3ZQbJlxk9rMRy9HN}dX;iL98(>ILTh##nq``ZP_w_D?rId^)xOwDQ}$B+rs)ydW>L)yx|f zY}gav>e|1P^`|f<0NU$+FlZWyau8DPZS9O^lp&lY1~yxku;&wb?9%Za=wHkcNV4OZ z1LL;~k~!TxA0FmEEi0vm$^9a&O}bjuk&)9TSuO=w8@v2`BR#j#FsBu(7?CjmnO$jr zoAC@*hBCT)M`z#Le6u_y`eAC5BJB$Mpj+^fjY|`}^aAz88Re(LJI%A+e+_4+F<%Q3 z9(;QbXoar!m>ymqWc%Ph#87YNy(hZAAL zVzz)oP@!?ZRo0^|dU4q*?5X8(xD_REhic>5hm1-Cte}jL2dw_$k}F&bDcueH$f8`} zsU@lfglrTS2a>@N;kHS{z9Bfmkzdj3RrDUW>%XK$_f!~&gmd&}eGaR}ljAufL_62e zW>ZRpuWmKLgQN%=tbl<2{namp0eoiXg_g7>fm`l*li36XO~CWXZ$Gudegz{i;d(mh z62^>;i`grq*bmpG@I!xa32tnU-HH9y4A>7A<+PmVRJqHRv)Upbm$|sZ^$;5Y_>3Rs zXi{dZ$8)wNhe`G^M<~z_OI7tM<_>_WHo8LmS)`Z>4NZM|e`ml;Y!FY1j2duhl`=cJSR(ge;C>H6ruV;KmBnPkTO*@^ zvPGxZXKZ?e@-}GNGHhT$)4LKqH0#MMQLa%~b=OpS=j9|U`x0v9)1k6?yt^q^265bwx92|^CGT50Op zO=k8XL9`s0Xv`G6lVgcwd}05w5z|JGxY$Jt1%`b-bQ^k+B;erheZD}%IH&isKcyy# zXnSffezR0qe58Ie$S<8dtP2o6=_h^v>4x!6bNb`MY(b2lzjbfmMLxR_ut;juVSU%p zT~PM@-FIyD(q@w;qhb??mOjWl{>tsDu|4!6xvDhO zSOsL80E3Oy8YPEcKfm|pOC=g}F|}0I`(Zc_1)bT7gW*D|dcMLjb{uh$q>PDpn zzjMh)WLAx$>Syseii3cWXM~Jl#Xhz~t66OsV5%>ySH+efSq%SzWzfER+{EI$zYlyl z>L3qE%uVzBTXD7_XV+K%n!eDKM4V#yShNE;Zhap3Ov3pqA8+#uonhiUE zuajST<^d4_N=1P|@ZW^Iru;zZbD;>n&i{|_G$o0fqa+UcU1IQLq^zB|627cAEZ-y6nlz-XDVG0tT+!SZD zh~fx4!JzMWi%rCHct^O#Q~7hH=>sh3_4{hfdy)dry+>fn41+0dFe6!`Z>MjkLrBm%7Y?b)|0GKb=%o@z?-hB*Luh*SH7I<@tH>E%|tyD zsy40TN)l`;Ne7SQ+AYh`XaW(mNiUw60u)$TPGrHa@{os$NMoApsS=Tg8k|d~P8+`9 z@U~}E{QreS?D|%!fJrONIDpPGt1T~4wur%`=T+2!z9up_94XZZ&eHLQjQV9n>uV)Q zP;ITN5pVJZ@r1JPool@N;9zdGU?arD7S=*`v)Icsa3tXgZS?y~O6l4cR;6WXgGVOj z@)pmL--*n)e;s(JncNm#VRI5{CB4q zor@tl7VryCt~3;poAmahRhKjEx~%ze!wyA4#aARwl;;y%!roV;PcUF-;HJx`p!&a? zj|!wpNKF;+AKafR3d@kj-$m}bk}|Iec2DO5cyK%sIU;+!fJ75&W4|;_yB&FYo};hr zA31mP>xPEf$<4<*+j)_eTUBlOg;~u|GN^4PML^eF0w+ zAd?NH)qhbN(#?fs>@+h&M{ohZG{f*Bw`xDiTW>_bxm(X6gSoM1do|tJUmgzQ$Ej{6 z0U+T!Z9E7}b_!?TkM1-ojrbfO(vcgP=8yS)YKLE?ZF-#9NDYos%0WQN~e%h^dA_-4L&r=rlM?YyK) z@whH;v0!PYTIakA(d_qskB2ZUm!5JN^ynIifth;m$yJ(Jv?%R;YHqk7n-{B;aWXmG z+OGUpXQEY8sW^#dS;uqI*HYbKBKLxN)e9_Q6LrEz@YWoO3}2XfIn}6??+oJvRlPS> z>qWytS=$2>s~4vm7oK|D+oyH5Kvkq8*43b#Pa@u*vY70J#DXob26UYM=m-?oPq>jN zQNU8?v=gAbpKXs?uJ!1Ce)YMGlh>QTlkK8%k>v!i%R;O!$0%EvWIh+;gy|vPVqG2& zB~>FuCnUyEf5Qio8Dqvsn46|i{Qlxs%C+YL{Z9N;gd54-f78C_tGI`w0sX0#UB`5o zI2dL%mq5r!?dSzWzeoKM$jVJYJUN4LVYdFgq#T>N*Z#T^n0VNU7L)Bj-_N@L4iyf# zT~o_!%r7X#L`|l{3SEtoDn!ysAvSPxZ;GUf42}1XympuQ_M5?-U(t47DQVlhIW=cK ztWxQ5c0!CE;NE?dQNZA@EM)2N@sddf`tDQ1)`IEJELx+z8SL3#2(Cm`yebk^nMJ2G zmhy?;mnAFLlq}I~c5){Tb@gOAuXd03IQSTzXB(wHr_qUz!ILD2o-Iwk6i#*9R+8mo6P$^jSjX{%4X~eAc<`1b5J%l0^MD|IMmfdrJG2c8v z!~}^L85pi4XqzDMVb?IQf~!NL@yJCv^p+DcO_1Kf{#iw+tQvnW|A{>^60X3m$u5Qx zy*VT#Iu)=P!}K<>=fh~KnNw-n=b$CSogPBQ<29ebS~aIZbG$C=*s>!{!Y;Xmz8#Rw(Kj_ zcca|*HRy^X&nZU+p`lW^IT({=3cxhVTG+z=Bk7`;=r5VK2-6@}+|5b6_G?s^giPt}vv5mfK8p)Z z;Caiue05L~bnh2~KC4khiMd{a=fOD>8pT}&ejNuCs)%DK0y{QFFMU>v0W@7iTnmq9`3GIoEM;PlScALvm0gs}aO zoLoc^jOGs9b+03+Wn_o^#$StfSaBq>hy6jzNorq=)i+C;fKHj;>#C1@1x>RnV=RS1 zEX~`sjPMIA=qnOTzyC*PsMK#90y{K<&UmEm$R=hmZCb~j5Hc{u0G#@y(@Dxo^IN6= zX-22CW>zn)OYjCr5J>S(rHjg1Ov?H4*nM${eZ7MuZ0SDK(C^Rc#MRfR6P1dkDu~dh zKllzf-yqeS)2ia(wOM;?y=2)QFD{Z;wW`M+N&E5GbHhF~LXIt*S7E2OK6TWGaCgp$ zH)!rv&OI0*zlns3=+-NksXDuYxBE0qYX#7c?ZM%@_0-!e9{HO$TUz;(CLKnl26cTr z8<|{x8rk73slcQ?-hzW-ra44jh$89Y9&nC1UGSTVVo-qMhimkhVaTv=;_PeD5fM_92PLbn5wC&yny-l zt0g$Vh0>(}wv59Bja$(&)mbGmq4@$6>7i0qho+_~yKey*ma*!JN-Nwoto@Br5SO|j zYj6M@P_nYw=qpVz(UPt~OrC&Vk8}2)8rf3v91*kq3NH-Cc|a5%!Ua6Aret60=kTFS zBR%OH$QCCb=p$=PT9(>M1iyVeMVywT%K9wTT7-Dt4$V3)w|xv>JWlSCh15HBQ~&QT zo_z@ohp;8SH$;{S$osq;#2|Lrnz%dN!k9gb*DK9pcVw__YnuL|diUK5A0ar`DkU z3#YDRk-o||ofhD2#Of|`%MfAk=+kvTCIi%A?Ytt@$r`jhugC5K;}f4Ju^jK*qo#n1jG?O!zD{H`aecBO3IXZ1to{>81Re8ZRo1=y~f$ zL~)nV%rIO_nB*>|u+}8KEJKq?i)-kB?J^TJFA^?sAm8ktl~N{8X_zP{xwsT(%wtv~ zAv%+%nu0w6`l`!1w(d~bcblBCxK`9cxnLsNRqXd@jR;lFc(@4iio1_*Dte^$ca(z*xiR!lO~q8tzZX2S)e>5Zf0YsJoJJDD&^G5&0WCcEgNemb* zCqz<;=*bJ;7^l^X(V*dw5mg=6LTo@eKNYYf1Zf`J_lmxGe2j5O{~s3&vV>9Kg~7ysvpFTUdF9dvIq1|strmA{@F_b zzQY^#v)h{pS(&SyqqsC)g<)Y>^aoitv{eF+*evKCv0%x>Sh_fFDl*TV$%q^KmUNyLeOHIg^RvF)k#4hZorT8ucTO7ABZq&} z6Z;%QD{%TC3IH5(feovth!M& zt+iXo^v5&{BAc*N1Ui)A?)zi>9mxU1xKNdG0lTyF1jGv_GE!@YF=NJw3pV`Pt|T z6x)1#T)1cpy4+<*>3hRM-!QS)BY@$zRu z`aw1^KOG+H4H^95Rjr>vjSlC!TOF`eJa&)j(WvwVX&GsgqnvN-uzechr|~zMb=EBa z*hcr&oqbwG2*eljz9y>O-_7RgWL$Dqy&%pEf_h8 zMWO>vq@{uK+n5J0LYnOsqo)DbYKvtr+O=H9YuV#FcOmTpV@Y^D(KO&&Ds3O^k72Na zHJS{*-NpiJJ2B4)+7Y07Bq|ktM|kYh+(Z5F3_-pkkaecMLdj7gq_E?6w^Bu_+)FYM zOQrf4#aIoK1cMEAb3%|(Rt>(eafj-B=^0JzRY|K*MMWctU>&DJW9D4n6TbPxhY}pi z(SVGLAu+MBKJkK2RIU4(eIANBufP-_+*y)Zu^@^P3QeT8Y{p5ADgP23eD0;gOsakp z9f|Ls>N!85pKz;GpAETdrDr7_EUY7ArXAsG84Bmt*sW}tP9rWN8vGvWu2^`pb*_pG!e{0#l!@O_1>I~4*A0_K z2IgY(dtHkrxu?N&ja&7%p%8|X+93EUrYOD87M<^<&Lm_^obES&%O2nA2s9DFNklqi zg|=Fn!;L3;m!>TumA%n$>B#xg_ku8_zb_1@bXuqZ7^^3pO*;d;ffV1JboA>uwKVN6 z?YB2g+EXBf1=l3mxroR8r9S-WTH z6L?$17^8b+2AUDC@_q$XD&?JWn2xc{2+|Wz?fy`%IKd>qVlSZnfNQ^bsW~h5W(Yhm z3>wl@pAt3`zaR+(viHMUJa}~-B}dPiEiG`k2gyEdQa(kA1)}Zw-tUM!jr%^P zxvd}wKdh6LXTd4n^^2XJz=c6p>lHU><&p zXvcSWMpY0K!N2gn>IcE9bXpv?{9*}A*g{t4w#JvtW8Ptfq9a&Ddu?0>GS^v{I@hd6 zcoaFET8n9>!C#YPqrJYU7n#sIxu7d`gE1MuGt%Q7x+R{=O?lsww)Ib4n?VJ~3l+RP zP8Jt)A3qdw@Ns}rt%&o#sZgzFzQB`udYDpHKt1DrQT!fPQ-=&jRbUI+e7akGno`1Z z9NtP#Whh++GKre%NGF2NiY)WRXNENAX!^l%SdwuAV6!!+4ECMl?*K!)q(FY5Fe`Zd zBH{{6R!o|u#X?BJLr~}Zy+`_$lKji`aq8&*ESm?GiEcRYF=#Y*WA|cNX#`g3qkBAf zc1YoH>TP)un2|Oshl8JY3fPwZu&>0>p>@?~i`L`Ge{>TcZ-;%aR^6=OX|N5AOi>95 znEa;w4)N^@#cQ+!UPEPQupeM-Wxwaw)kEl-)6T2r%Yr4a^?661g8WwRHG3R)xuw4UbM^b1Y^pPWuB8ihm%7A!DZScoO zD%mJ|wPM~8o5kAjc{kYoRKi)$^0ADAzk<3BbK=ne^FGpwlc@Uh=ntwV7zToEV>MH%@&}b z_G7oR_%Wk`Q$pSC#Rz*;uVOlwdP>J>1X=Lv>}h`Gmx3)BKLoA|gy(X2e=2La(n>p> z^uR6j+Xbb>3fPb!aPORyWzWywEi$DX3#=G9>=X+|BalLCPa-IRu{T%4lCP?lO9vC+r#rgf1#&tXWf zo>CStW>A)9-w8Pezp;gVjL*6^w3unE07jvd>I??KFFy+<_DQ^en#+d7ajJbp2+~Y; zF8H%?fGhClf_3B8dcC zJP{BQ-sv#~Vgv~3TIRR_{}(?5O{=nCE@6Y!*-udIcpXay_GvD>P&hvAAmIbBs z`*E2(#=gAFq0zls!pr;xiX(CaG-u!~Zm)zZ)wFXy`AkYVNmS_=w8~exdD1#o=K76q zhEAcrQvHinr_hpMFQ5 zg2w}585Z#wSfIc3Uq-23gt0P;mZh8AFuE$i?1z%aUEq0+u_@$g#tAI^^1L4U-pn2@ z&hpMdsKyZm=q7A_bSZJ3bLJb@7M+xqH25lVyLfmTx#X{$=W3UXng1DH@-E=|RkKdj zR>oDuVK3{FYz6yw45F!jI@L$fMz8@op)^C79H4z^K|cL1QA{1~KL;OGc!~_0leD4g zxb&GccP^}jFqqByHU0JxPV9R78R)k#UyKp!6nxn8!w)`NsGC2_=iG$PA&HS-8oQEe z;weh2XAu(1cc%3d+{`mghuRmd+7kZoMV}xh0sPOYcO-oqG6FNVC1%Ne8q7*w%v5;m zwW)=z5E+~CLmB$B0@TP$T-|(5YWTu%zN^(#dFJ= z<=9u%30zlE@>@!~Dj%<>Jq|_AP>9eB$PivZ*?KR>156JbF4(*VhGi{k_Z8Axx#k96 zYXg5PZUK=p|D(OF8<=xONIk)TnLA&&Qo`$}Yuvp5epH_FCFUd9dzj$d=BPL{S?*Fm z$O{=tL-=RmG}5gg`v?YQw--|q(z6fruwE1%J*fAHI}hktd><$deS65F4`U4eK9jG` zchgKYAoMuNVm(Z7(?jH5Zn;-`@HvYtBk6F9K9k6$(kGm^I^JSFU%f~*aBjCeH(Xu3 zSxtNwlPV&g`yC(T6~en33ZFrD({w^n6#;Ml*f#^ZiOt`_5^Q34$g{!IoQh&9tSz}g zi!s>>V0KqCiK#r5S(N3ciXCx`(W@GTan|6>1mAwrRqi})d~&i`K7xD28>WTeX9}%B z!38E1(w1;6_@DbAfv{2v-?d#Ju)rd!jK`Gax7$X6w;^<=}~RFO2AGC^9Ox>z0>loL7*Cd^s#o6d%HUiVxc%je)Y4=sf?lFD6Pd5y~LhuruWI@5k$S~7c= zf8UHrBMOkV#x&+N*RdHAxg)HI^!(F^-;0#?Mk-5HEuG1zC*Y(?$Yl+l1TSP>tOykx z+2GR8f45+ivqaD*?ILe$j&Gw*Wi)hsKv@n9hr#W5O;yZR@>-fP)j`b{cxUxN)Q0Qf z+H9geq9MR(ySiMdYZ~npYZy0$52gy>mgy~gvQlbrbc7ufXlDr8YEgpI3pZz{jT;W= zc*1mIo79C&1DY&6DLq>gUa)`&^}_SbT?v_a#Mcrxb}t0$)@np8m|}Lz8g2Kr{xUc6 zJ$!29Rx*DjEUq{vDdVfsqjB1u_Y&ALHd>MJU;ut!wVo5ob}50S08LHwh`bC4-o!um zbReOb#zsqBYVi$VC#ArYfli(!LoSUYxyM~`mZQzT)02iuOT(T~)V1E1p!F%*h}wV{ zxwkn}eNRC>s?xFAXIeI!!gRc=QiIj1GnATu%(ueH1-oobnvWI(#-xDnPxXS%NqoJn z)YyE6BkQE+hyY=CvZ`pQ=Tf((gpk48drxbzB$QEwMSt=2>nkB&lKzIPTr>)r4qki^ z^!BPeYe-rUO#ZX(uwfCd;au{?JQI*(#|f~}l<=*6Z}{A)E$_f4q)Z4#vL|Ge=@Z4dV%1{L zv7JMjfydpzvv0mXKSY@JiK)y>95_#ey~_(0vL1oM=vB*-UR|p@1ef7m;cu@;m3x!U zJZ$hoq^7OT-c4B%QucM$fV6x4@A%UT|d#?L8kKSDp7 zi@lKTWZ4KB5K>fZN^~Fv4EVET8%wHUzH)`ZuC<5{obCRkONG2*$XpHrZ0nEQbTlAM z%Cc-NX5n6OX5mCgcs)$i_4|_eb9l%wx915)D{|+osMTJe2=ev$*Ql*7VCPw%WYn^; zgqA9Mx7}z7=CtM)8|p5p>tcslu&0$1c<2n`^=rDu%sTNmf(8V91GJW|Ne`df=EH54 zIGWqD|L!$)&DfaYJ^OoO4a7A!FTHT~xWSm4#F^6D%ms5Wmf5HJxvGDBSuHInhL!z} zr#IW|KA6Nb`=61|ini50#UA~Z3tO?h#5JeoGix%>V{9SANnVaP*zT9UTBrK;y)HE$ zk)xF*BDu#csVSZfoRX;3r=E+rhvYpUp&pocRP&CBUVZcZ?Cwy~a1w0GqgM;ouR+7q z`2mlyxmB>H5Wu@-MrLZqa($jxKgcnR=3?$ZN{~focw8}wJ?aBi)kkhQD`epB?8b+e z!p;Ze0q6b{e>n2H;qvxyFeI`6M1(O-OaGS1jeuWh#I9m@>g@@?_+C}z-a?kpfrys0 zO^{S*d&$6|ArknfJxhIQ@WK7R<9r3r1xK*65KWrWcLk4eaq=*@0skD{l}4oAN{su8 zI{df`cb7@RV)14#CKHNt+gqe!e0ha}Da_m{ZJRe0U7`r7D*M8tL8}x6<9>9`HDDAc*BW8!O z#=-8v6H$@hMo59?tntmCv%muJ{H(g5NuK+{Dg@j_RDgSx0 z+ImydC1^%7(EN1XMBa{HU}iupbqnE(S{$14{D}L@&v>WKxan!dey5PMiLq5uc>mng z`?~(6$(s*(ce4dy)&*b2kaDzT``DN5Hji)@Dp(v3M)LySIs$M-b1^mPX3JQ-8X_~B6 zC}BG8m@D_F0ZfAH;IV$7uir9uH#e%QF3o-%95$U#rjdwlWfG4O63b==N>=;EfXOeb zV~j{%Al$dFp4?y(9h=F1f-KIyKKVFaLw!x4_rnK}xy4*<(dX5ZA3~HEpl~e}H=+aD zpE-*0Tfi3SD%os}`#Z0lpF@6{!7qcTp+*RJ#j}%@(fQH#KSA}i9{+Xbqu`nbWGn5= z=Q4{}nzOPR@Wlx&G0!sR>s4%(cl5D1NGk}>(lDnJEn4RQP zd|d8w_cB#%=HiF(k9O>?PjG~r8 z&-@UT-cQ8t^CZ?9ggUu{xw+q$3}ZedZ^_0Lk%y2mrFv=v`eoIW*pIrsuot}Y2ju+c z_OOemUXAUVX@H7qkO%4#vr{ko_r4Rqdz(OP4}~Z+ai0{S`%1LoPmF){zZbiV^uAJ_ zx81xru!}T?!whD*ffYjkWJyt2O#3%HhF3b@nrhB@ZLy~=ufqEY9ef7W6Z=d?FnH2k zky4ee$X&*CQ4AP(ZjO62A7bOWz53N$hw{T?=Kge4B|f$*`ZU?#(d=XkfzDG%W#9*-K^JU@6Sn*FG zt<*Lk9hP6=utqn?+o+~udG_fDs73C7Vo6K~M*6wsIUP9~N+i zZ+f$5lIvqf$VC)WJtKibf@iwP4Sm2ecv z{`*RFU2Th=U&Z{vn**A!>6>V8QK7?of{(0qF8ryEsU!vL3udjQ@(MDclw6XI~zE-0} zVf+>^y-F6I1lg9KN%L)!*#+)#JtG%gpTRWk>DHpI5+ocD0W)zzvsgch`aX$oMle+b z-5)?i7ZvU14hEv+gGf+_WM&Au3oL)WZXs-Ok&4RS=EfxQxb_3++%ATy6@X{M$sIWn zokNk^(?pQuidkF~!})dws{gvf1Ncgygd*|CT=K!G7q&`#jM)f4!xl!cIU;8NXR! zk5<|3y8g7Km-F2?6kE~!vm`kbkr?{?>ep)H@8tCK=l)xqf|E^Hmy*~-sL=bf@00&T zP^s20A#d>qwUJi8IICcc?W&xR@ROIxLr18HJV0N_252VfVtB}j%8wbGVmi7ku)$Ga z274^LES&`ix5aL^A4xoXiMp3;LNxzs4`R7Y_kT49Dm;3j{lu5XVmd7 z;>%~1(<_{wuUhwJ=^6QDBJ^Vbse5VpI8`DwZpD`5@J}lCNPo@m^ys&xrZnm|v+6uc z1PE&se^a!p2|7=)T=EHd<;l==d$*TC*#G}zYNFZkc*u@GT(k&~v$ZUddm!Z0+WO9* zF14s?7~7Dn>Gy;To>PyPpYhx1Z0D90(+Hd0TMV<f5!YI|aokv=)Tox8ciJbCE4O7w(BXFJvKViWipmt_T!>ap2UVk-2GQ#& ziN-ca*9e*vq2U4IqqkY;=gGiRNm(m;~ zEL*y?@L4uV05^j>gUgwR_sb9`Ccb2g<4A?ETZtjV`Y0aQWt&$fHk*BT3_9ue>pY^i z@`6syM=aMKc6;g987pko?R9Bs7bJC&Y?UE0zgMVR9UNyldLO){PuI_TcHO7dNX?p{ zU}jSPCG*wdNwfXo&T{E7`@lssc>$D_wYbjtp+Nm2v|_KR!}N3pp?o54ybkuaWlTl< z?f(^j&L~DHt`d2}w|d)%=qgz6-Hg2Uf$K!xf~QFtHg27c%gmSrN&fi{W*XNTK6DoF z^pN*&))wxlB=@R(dL_S{x|r}=9VlVF<%Ogu z?}?V>m$07r6h;{KiovjF(!P;?N@t7J&lnGSf97Hj$dN1?|2Rc>d;0Kd^-xa}8zeD- z=(yahB60yUQi!*qw5X%+O{b%sNtWoc0k9@>W#OE^(79;!&}i*VlV494u^e6EnqUT~ zjL-r;q;Wa4px0HwW`_ntwIz&rzxvYYibu6T$&CzaBf}c(QsM0`Me4gDATR`+!0&+2 zg#gn<-?Ns@q2Ybg+yBm_bk#|fBL}o~6`v8@ud}*Wd`P&K>P2s8digy~RHW}mg zjSdZuS_Noyyfk3O9P83%mw_FM4;M(ld>nG0o?}CI-Ft@re=8b?EO|DJ@2$WBkY^=p zbz_Th*C?%ln4)e$$$9`zBm1sv2#?X}%xGuDEWV@|2_+%Mj${H6lPGIKoQSnlOh$Xp zMKi^V%Iptrt=!9=AOCvOM7+cOlm3ltb?qiAIeAH1kv?-t3SnfA4gLxd2LFug&@bQ5 zBiblz%s1`)`esvlq~gd0f1^ju?65$ai5)a+HGs*pS;Po%ND0o8v*~n-fcoGDI9k@T zL5{353dH=ol*5#{LhWqNgt?AcE;Zu8b8q&No|>!7ry(h4c!I;+)IeoHn}sTEIqm5; zuuIJkspP;jWru|%*x7>L1WeWIpQvr$fwa5?8O@#I(%r1_9|xwka4ffG>(PHkI#*zbB$GV*KCyHq4G!&A`EUi-PMn_RR<3VL4Ekr)Xy z{W%^S(%^9$oYvWljP;6isks;_hST#aTkK+}I5I%mF;;XDjTj z=cY5Crw3PHla0^NALdjMP-2nuOwM88(yt)xh?|nFWaPbwi+8p+V1Vl-1ch7*sy1hR z^w<=e?Js{LM?v^XZ6O*mWUP*u@lf3@wDJDV{DK&Cn*bSR{#7GB_gXR(NjJF&vml=J zVV&ps`IcF0&&}8_=M3jMq>Ov6S10^q#wBFq&2Hhz@nT+}aIh(q5JW3(UW?{#+JUP; zgHp8`79r)rDd7BIt;ZxQGIRbi3JcU0aw#`uixTtMbQR^O^!p|qCS||5$>~$D@o6oc zS*sjJhnxSB(O2DQqD+YUItm-U4sV>s2|gJ7efOEz-?*otl9Y3hysD*$MDQzy?4ydR zlG){2+lJwcFWFBR_@~vUwmRcPEuH-C^+OeAB@NSo1zNS&zA1~O>K6l6bYt|H^9L$t zDtRyAhG$u{v_5bE?I|)=uhWQHX1pBx2$zMy2GVY2OI`A~C6(@%=!b50JQ0y&;!jP%Wf_ zipD?J8AwT|wZii0_W|F)OQr3~h2TQmZx7F8Bc(cGisQvB8j5#^$7V8#QNeWAhe{K( zRxOnA^H=A^4LABDl=dm`C8$Lf(0Z$)`-(Q$h*Yao>*812bWjx7T-0OW$Zjf0IfN|?8+GJ<50(FR zOD#Yx(gzq>&xT>8&#RaK_W_wtqcX+XFLqm)+hpD!z*HvDkS*nSw;S5~b**Q&m~Kqf zNPL9MJP$U4KUd?iAgyw`B#!y3@KWK`=&N^se^8`$oIRTJ;S&Qk(ZwPb09n_Jqrk>% z&49wsoCn6#bOZlzP-HrhpW%1@3l`P^8xlVYnGYez4rd3D)vAODAYitsU>bzy(^749 z;yQ~u#C#!tUP?Wo0RaI4F&(7j(1={~M+bf-IVu~B<_}tIFO}&cAV!*q(9Q4YR*UOY z%-0(z>{A%FpggTP#r0@u%S`;RVEIA3W~UY;J9>^iHkE3cj;R-zp`zd)(D-e3X}@%n zg-MH~K)Hbv7k9ebdO89(2ueDHdQ&Q9{;E$lUMcf8fe(5?4eP(!y%FuGvyOx5_9f-$ z*O+_t0$$D!yfc-I*g7AWQ$5`5)XA0@?w3p~9K&PS_zVu0&9Hl>Vb%}wY0Onn8FOo) zrB5r}yeTfdAk=U!!_v;^_g%Hw6uV@+*Ow{oJ>Ns93!2f307H?HDA7rDQ+vcxfe0AC zJ-kfKF61$+b>}FYQO^aqRBnSYUxI`;GgsL|+4S46seNAB;<0Y0COn9Rl|EeK!y-=l zpPyz}T#{hL-joML37TH#@8E?xUV2fZ4zeK5;%Js3M4>v+;Dy3NKEo}(a9VevI>O24 zTHMj9@8c)tJ6LJa$af`!4tiATIu3inUc4gm0`d=Z6$|i>#c7w`>abbt?1C^-TaV=@ zhsyk4-vcH}pyZ~$LSEDYe+$s-jTmXLZ(4Sb;%ROV^jr*hyMHD7B7szui5(T`Xp*P{ zXS??WRwtERNC0ZG1fBr&Rak&kHf~StTi|m5z)ittK@#CjS?I`}b*NHabpV%kGA~LN zKcrI}p!KK{C$5uguv!CPE}!h>kY7r-Tzy{jJlQ7?VP@2V!{tUCKTEKntL~EXNb^mA zff`KSF#p2d(~Bn%?wjAu1BrPb!*6qn4Nm2mM=1`*E2lztQ_4j@$My5B|*+r5aUtIC~l2v}qJnEaISj^Qi zzhvK*Yt_yV6lsf_7=k~1j*pYy>RgNEjcq+%3;aHD!xH3oJ;ZI~f>!L~f2dJ%Jvlae zXYi4JCc8B<7I(9JSErLvv`8zeMT|+?+y!pY}nk%CU&Z%3oec+Nq=x zx33zU>-8eh^R2wswL8H>%@MLLFuOPr@@w+OM?-R?quIUMTTn(E#2&I-KCZ2yNf4Ul zumFn`Aq%c%s$c5D*F@>?U73iD?8^{6(1@ctONLf`=~r8ylkA;Vk)Fe)9d?h3%Y(zT zXs3d%yR$_l%^;jpm5!~tD}`q@?t^XU!d{+Tnyom$L7iNHQB&MBMU0fj$YiX9L#N*)x~S>qJHiqtDQlir#!>shQM=?t$_#E?$m! z?6lDwaU0|t(}9L9AI#)C5DZOu3$f#7v=jSHHK%ce)bl;#0AuKdhr0pu&v~1Sg%kvRIvJhq~HU#t&@xI zj~lx_g?|TVA3*%*lWE$n$9$pGvp57us=_Qob2}XY>^$ChUgfmy3q#gKWI~2uATIQk zDhJxCJhW#i$SAnfdkSFNh8#xz?*R{y zz(bB3Jeexcre=^aoux~rhdAGYDG5jA3n<%m#Acie`5@~wFnOJ*;lj!#=w2+~PSZFk z+?#2V_?nsV?ReD3RWVxTvk^*5Km3w%C3g9QauWHkOq`9b_dK&O{5(BMMxQSisAF9{#Q5FR!poPc*X;XY+dQl z89`S#-Gg=Bn9=91+Lbfr?l67^-iu}>(y0R|SN*)98%dm6851q8l&t$|;XC1{o~>c=IYPgy+qD zX%NMUq(3WV7A_|N_Qi;x5@}UR;cqXLs&yl^tItF6n)P^&-Ndl*+VW&nr0`W zXnH0!fg&WFOgD6A^?9p3*SoP=Pw(uEEK)f3&f!{x@yj6PruX>DNWfq>Q3KiLFQT;? zfoh^cq+30=b&|t7A+{dh`B`P%KIMd)gPj7?pC&fB{0{3+OqmK(m?#VQ)y6dDl zcvjKGjM7#MCDFuC8;|^}F93gixYUSw@<#fvL?wO}uK4@9eF8qCT{4=WYrUF%wLKqO z7TK#(Bcn>+XiY}jx{qDV8+o|dM$Y_&_UW@Wf2*>jz4eP=EZcQ_a_s|7B?1MBzfAhh z&l|Q{3ax-VOCz8LK09<%rq(AuCmI>1W?$v-s7`^*3VF>n`286Ha&;B4Hz3~9y*2yJ z0_Y~vZ2_7@3taSwJRXd!$_@?wnFm&<0IkJ9I2lAY!^X8n#+2oO%*Vc=0RgG`ch&Su|J z#^%U;4tyckrg`^S18Y;aqbLOR#?NE(Cy&Jxtp1Ox1jH z0Y`>OkPg=(f)65fRu3iwXVG!p9lL-_61ZvH$R2IXIjwBqqPIF z{DRBeNMdPNFL`C5x7cZN*=%oVOh=O=-jYgKQ#YBIc3b6M+T$G`tp4gR?55Mw-RC+CBZEPF%7EXI4>xc+680oC5N0 zMUnK|JrD3cfHN5;0L{?nK%3g^OzV41s&_LmU*3 zrdL?GcPlcSO(f(prmvz`;#m+`QF^S1oziHYHpH9gfg6Az(gGthjvbr;Lq_iSy|1k& zLXh8_f8Wq&)&d!?G9{f;Q=`6{gw_jeuz;5ZwB+kDX0T=A$4=OGj0U|&$DOUbFij4; z1(LVsq0w7<@d%bclCAlcCa5^4?_0%Uk5^r75O?pda#R|;JOoH|)%F_{wfW8QPD%vZC&%(V*s4T`i<$fyW4~M%**rlaTK?lg?&*pgM`u2qN?f4P@1!v zBU%NOg4$y5eQ=yo>&%L7T7!c zym%Uc)sf4fnjlG!#R3S%DfR+@<7)m&K4rQ}@rz7`lU3+Zy2#-e$vOWEc46v0Dpnl0 zCgb~c=s;_x+{eMsSgepk=>yAP$NFNJ#>=KwUoMeeYWJ+~cWx4IQU_k-ZMHWM`>L;V zE0js{(^jAZeLkZsopj%%H;%GepR_87HRVirTg1nD^^Mmyiy!mO!WT{f z+ps|vYbEH;U_Bs6{A3)EbV2W)KpP7s1_mRYtJWC%i#%cO4H;cQ8=)bQ2Rk@6LmHM%E^`3^)n z=$P}1zE^z!C-(cHXS*h5^;x6+tpYeJEIYk`R6(?bu}3j3>-_wDZ@OJFV}#C?ZBXb` zG_VbILzE{r51io~N$|?kvcBxi0#Y~+kfRy~;FURzvTRW;=|L6VCkxWpp{psn4NtPg z3rTr+#qh}P!4%-T|k> z;%uWLQjEjN7V{fzsn?qwCg~Tu1ceu-LHU7h)-&bUG78hx{T*4K9(eHX9h1759qG-< zuxw%XQHridxLMp&no3qn8T6w2Un51av@D!nocLhJHvO&hp%(!5artpJYcc6H>{MjP zwBo%o8C`9#hliQfq2VsDopL7On;$7oJy_Y}6g-7%{71wx3y#(Tv6WkYb?0>}M$2j_ zqhK@$RfVNj3u*@QhFV+_-EY2{I5AO zdTmeRdO8WCkMya(;xQs)_WIbaW&F2uFF$8EmF1c=BpHH>eNY40`0xcda9CuIH2YSE z3`nXn4v<~L2P1|8#M%-n>ErIviVsMdbp=iFY0zk|fOlhmq%%wTgVsO;ghbX2RLGACXF7+tPxP z(QR;35n9?HHOE2HZSJo>z`2#kr7Hgj*KfGhqt)Y921Bsw&}9_|-}rpQx6hGI@i*l# zrbGM}b2@zwSm=|IoZU)kTV98=_D}? z;C_ZpKF(N@fZGiw#s{!tH1S07%Pz=ffV|#1L#x%@J z>{;u9;U~e)0z=)XK7j?rr0p_w2;4*0wY1UES{Jv(p>g42Rc>jOoy6!4Qx@LjPJ|tR zTqB{TKi=S(PG{<4eZ&GVu^^b}l0X`(`q%*E0*eVO5y*vHNnm99eM2{m^!mWY`f$@$ zvYB^)3uuAU&e@~x^M6PD!Mc^Cso1eJ*P}I9PeVviN3&pNF&2NC_FxhqaPq@G88tOE zXgb{945g_coyv`04k<5n`y5NkYOf_l#`}t8%D;2GA?Q}4S|1S1fcqz+uZUdCCWg#zo0aQ*UN@z(8HDY1RRj7YMos-49WJ)1ly5|FM zh4hfZDhTt9;Y(zVM$;Z3dBEn#Byqfg#*Z}jrepn! z3`5UYTX^uK(8v>0(W(cYNPz%&)HQOoU~Yp8HKB3%Qt_KvwpVWVE+*!`GPq^K!?KVV z{=%{eS^VebyM1smnZphG*jQN`t!_5Hi^6`h;Rxek*z*nM`X!)YM>?CpEVa&orag~Q zxO21@cfHbJ4Xql00JNeaVU|bQ!hQ^Vs_}6_q41$}4?%X$5|X$)OkeZjn3fHRkhHX= zvD$oolt6H15*2b%rH;tG*^&?^|84s6T)qP=095GdFP4Pg}WJ zqNM$=Om2GxKIzw=udac{0AYEZ6y8k_^07QmBLSle!grF1G4o0lQiWhVybUH)c8+?t zzSsMiM8h4Q+$v?;!}6A%OQ_0ATjf}$Z;?VvR-XUa2N`RmXw5muh5iJyN%lv6Aolth z+PeyP1?A}IbOD$lslWxq$|(B|!q?++&TAqgAuDarbgy=frGeo4Js|I)7r9pV#9&xQ zVH1>W));-%Yc-uXogm}{$#BQbN4@WNo2^O>Wv8%L=yyr#XxxRKPlN4nwD+tOSi~{3 zps6W^J#LSs76({wM*|yU@BOp1)MlLUafNkC8d+j~@B4qAUwlhpf74f0M=1br_v0-W z_zbe&2|VZoI18CMiuX%`(XB z48AO|pOat?R2a2rYjBk+Z^i!W*2k|min2B$K|)Fgq857cM58ArAnar{Ud7R&vqfwX z(hH2~#-yys+dvn~231@9-YhXdOb3Pr4#j(u1-^ zbK>S;TB)d!b3ip0PQ8xtnu0M&SgDBSxTWnlJBu9K1)}`KIaFU#IkhD`h~L9HCQzGy z2HdBrRbv%4>U&{P03Gqa)O(NQ(BRJ`a7nfjJh+m^&rlIlmuhBP^9t!2J%R@YnaD_O z2?;Ue)d5$@ci#(mcBi;s&0-ao$4VQ_M??R?^mHYTR3aE-_CY^a^hoQCweNP}MGeyR z<)RJ+`v3u0fI3(ix3IPEif~r}xpn(tI#y*OuP9S=)j*-9vq%Gr{p-F@Dsv1YA4(se zf^Isq9*tEfZV?e@cLM=k>A*RD1?30y3N6ojZr0R#ZChQ!QeGB@Geo>3du|{HVWe#9 zymk`9{0s??xQRS&uD*q_apY9CbWPEa@$c|WxuzIEJXCvh=s`H>85qa{H`Rq&T&zCr zX9S=noR7FYn*11hKnKd4^|)5bH_>M8jQL9eCX$6dTQdr}~FeU^ZG+^GLmvQ?o0`A#vY0; zSGM}>24jMcLD7(g@3;OW>4mo1HeYHwlItRTQsUj z-XtmvGe+7$*JLF8ey^-AAibO8q9~bG9(W);lXhzJBKks*Wp4qNopvt=G>1E@UoA_I^7RpON>9fTLWtSl_Wdfc*nTsS3M`6ghPQiwte}@S+;6=N6$m_Lh9bO>!X_J zKkZQ?kDlZOSi>xA3ww1{00g9cMmP9LHo$31XLvV!#W%_3WIRE9H2avBIsLz~T*8AI zEy-~^+|Dvr&H$7O(x-df+6rWbokzg2*53L-3LF^)!X0G+=Vi0?>!2lma#tnwpZwEtL@4Oy5V9-7|gQ0ozYpI6md>H2r#`$+t>io5ux6OrK> z7_fjX3j9bXXc=a{f`_Uw zGim`F*nKb;v=gz&G^kpskwdj$)|;35>is_NM0IJB`{06PC<@T8z%Rzfn_gH?!M+I6 z{5NuC?Hk#(`%<_G)g`D8V5EgEvnZGc&v#b3C05JP#KdGL5S;P9lm53bO6dU?1afSm z$*97oWAJ32`H?!}uJUWFR{z{}k0R*%)u$J*KeqRjod>%i{c}f$0et&9Q5Xft>XB)L z${Y_V!(k7an=N1ZP5F3wq2#Dm{M9ytYYT?OpvkSs1DJQ>pd#(FU8be z`zB}pB`(gnn;rU-?6y33N)sdQ6+ak%IyBMXS2X{Q=_faE?kBM=s+QT!fM}2%LfvG$ z%qKoz+7>+F|KATKKm7MY*)xEiG-~8x4c_@P;rwM85O#a|_E%j$*(Vz-d3kx8LhMNd zHdn@7Z+ahObM{B=PKr1>Iv()<`1T=y%-Cg``D_yI`LV$a%1&eM&*5FM>&D0=xt zz@(b7cYbgem%o)t$f6mDE=)Ci4Uwg|G{S34Y^1=vA}9F8 z%oxNfkJ2?fDCW#sZf+D}zeLr6_85H18Nl-Ik_x&EBd{|IfL$*Qq&Acfui`^`L`Six z`}#tvPq;4wNEcf89)oEVG;rx78mD^!L^2D+cG(p%cLAHLvLACm$xw6z!k)JQv!^$j zl)S$F7?5uYGNS(bC9<)RF6i9&r9H5=;6i&2l^6^+2D*+|e9Dp4zqRv|HGB=MZJFxp zP5QlR3)28B0-uR{kaJVkfTQR;ZvJyn?RTud{N>d%$jm1AR1yS68+J-slU;gsBNNa- zHmt!|BHIOHJiXr>vLwd({NnRMf8u}N^q-NnGm!!Bik;?&v7G};^6*a;BJcH`OE)JU z%Q5}C1IZcD=A-pc?VlNa*bTNiY4g6<%TMwYU|Lr`aDD?ruLa=TYWa83(cz2VbQBiI z+DtwbYC=u?_m|hj&$w49o@-EqmxKHtw$SAk0C39Q{@N$M$xUGS8Wt+TfK!tFjz-4Y0WV zPE^N%_j|i-g`K0M>F)=yu>FYIy_BmGT++hnE@I*ZwJ#kda{vAWf`DzJR3HVo7g#oW ze<10T)snHZvmOzk`2Mp25oNgnmDGKB0$7DVqfrlA`GO3193M{)sR+SiNaP-jOE3TS z#GFUcDfVRN6zEOT-Z*jq@MEqkC0)|_rEi^rT!veI=&a@*1%K%TV#R}P7#$zKIanL#?~ix)2*gMH7*id_>^UPt5Y?Y#|F(yQL~ z*Q7-EI+wrzvLIv4QrWCX>(V(Srs;2zID)%QPj=>y3@z3*?07>uR;2QMepedmQB+hU4erX5g0>M@6EXVW&uU`i8(`dV;2WYUArUhz znfkvaHb~Q~^A(YZ0t@V0y6pWXpyvQtIrAV-uYB`+z^gS5T!Ol{2?%4)(W=9A(A^^y z7ptn0aH!GII@z0xTZ@HmRXilh14|9ml$kJ7F>)gTsm1&8R{?iG+p9EGNy>2|ieN%Q z1aD1&fQO3I>Y4{ zX8em+!65OJySyToz@Lz3_pr`o!EBz`ulB`#M0(#Ss!rNcE4SGcr`R;VDF=#-3#TwAH09% zmsg^_|Dm{jZeSAY#GCL_g(7u?IZYnxD5|cIN&h)NUerTlBo;9wk<2Oq_L@3Pi*1Ir>S_A9vW-q3vX6ZXXB z;;W~$F`;V^<&Aa)Y+vG0!UcRa&@Nkp=7QAq-|xzkT+l1PlHN^Q`KPnB@hNT#{DBCD zTOEM0#BgixjLgHJbcy60A22d+iGgt3mcQ-u{_f{Yi%ePKv~up;1TY9US1LQ|t#L;8 zof`l&Ik==!dMWD9$iXCj&5ihiJgb|hf-C`gX8L7-p-4(}{k3n_>K;C#VQj(2pi59_ z#_obj;j1sbX_0T2Ho#m>ri>KPUQ%dBrE6pOHcew~7D;u$!U%Kgn&LCHLTVr7EqGD| zErBRigG*G$W5e26{dc$o0hy&W11nl^P@fIGG+k3xE-qEaQc=RxzIeXQI%~h zXhDHB9R)y)_&%QDRK<7+!I%c=Vt_Hs&r)-Q8Sh{+g0%&VTx{t;`oTF-R-eZ)cgG=U z?92P6;JJ*rbcu6j9i?H#kiymON{82^aR;eWFqxQdyHP5?B$jG<{eO>!NgIpLPR}E^ zLJ``YTvSh*2!$4>Qj*L|H~eeBGS6aQgQKbJZ=#3OY77a@GMmVn-C*9|G7EDC+Zh4w7&I$&3GSdwc?UK-;sKtZuAmx zec6wd{_&h`TODaFm`EFsMvB*l7FYD%JkDKYasaOkbmD`guwa8*+kh1Qlxc#5QSPPv zfVYXxFteQ_)TnXEd7*Vea94QE-FMd~{{UW_ganKd$)6M_P^V}h!3Q1NI5@U`sH95H zAnAu@ZKWE3;NhhEC)cMCJ4C^sb_)ua7~#8&=@pXm=)|@8^voMwMaNh|y$1jbtX3r? zSP0e^C~!mpu;C`7?!u$vfJA3XaSIz-CYu&9s{z7BGA2jj%oYnQ;5Pxg) z&e8kY#tx6b9y_e4cv>7eT1I13POqmxxcu}zkp%b** z0CsYY-zeE$hm;8;YQ`_5NLdhA>WE#g-qG4wZ$o5-FboD(T8#pgff{zbclY?zlcK)De)T}&HkIy?cDBw zs-DNdDWh}zflvsfsQRsyfMI$@D^{Fiv>y3W8JuwpdDhckc@@38084=`I`m=XNci;w z7}~BZ9S>olS4Ml|^>5qKHRR05BhcE)`3)0K1D76LC!x9vrx}*nv7pYP6>SrDl%Kg+ z(=y$i|65`%&}HLIx6|sx2F>XqwM4QC2?+(j;YnCn{$Ky0^nd>onYX(nznWn?9}V*U Ql7Nq~fd#5s&n@Qv0P!@>uK)l5 diff --git a/docs/guides/parameter-exploration.md b/docs/guides/parameter-exploration.md index f278b79..59650a9 100644 --- a/docs/guides/parameter-exploration.md +++ b/docs/guides/parameter-exploration.md @@ -132,7 +132,7 @@ for i in range(N): ``` !!! tip "Interactive notebook" - See the [sysbio-2-params notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-2-params.ipynb) for a runnable version. +See the [sysbio-2-params notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sysbio-2-params.ipynb) for a runnable version. ## Next steps diff --git a/docs/guides/remote-simulations.md b/docs/guides/remote-simulations.md index 4d74bca..1fea00b 100644 --- a/docs/guides/remote-simulations.md +++ b/docs/guides/remote-simulations.md @@ -3,7 +3,7 @@ This guide shows how to run simulations on the VCell server cluster: authenticate, save a model, start a simulation, monitor progress, and export results. !!! note - This guide requires a VCell account and access to the VCell server. Code examples cannot be run in CI — they require interactive browser-based login. +This guide requires a VCell account and access to the VCell server. Code examples cannot be run in CI — they require interactive browser-based login. ## Prerequisites @@ -390,12 +390,12 @@ vc.wait_for_simulation(api_client, saved_bm, saved_sim) store = vc.export_n5(api_client, saved_sim, biomodel=saved_bm) ``` -| Function | Purpose | Returns | -|---|---|---| -| `save_and_start()` | Save biomodel + start simulation | `(Biomodel, Simulation)` with version keys | -| `wait_for_simulation()` | Poll until completed/failed/stopped | `None` (raises on failure) | -| `export_n5()` | Export + poll + open TensorStore | `TensorStore` | -| `run_remote()` | All three chained | `TensorStore` | +| Function | Purpose | Returns | +| ----------------------- | ----------------------------------- | ------------------------------------------ | +| `save_and_start()` | Save biomodel + start simulation | `(Biomodel, Simulation)` with version keys | +| `wait_for_simulation()` | Poll until completed/failed/stopped | `None` (raises on failure) | +| `export_n5()` | Export + poll + open TensorStore | `TensorStore` | +| `run_remote()` | All three chained | `TensorStore` | All functions accept an optional `on_progress` callback and `timeout` parameter. diff --git a/docs/guides/sbml-models.md b/docs/guides/sbml-models.md index 68e4571..b1c853a 100644 --- a/docs/guides/sbml-models.md +++ b/docs/guides/sbml-models.md @@ -126,7 +126,7 @@ simulation.cleanup() ``` !!! tip "Interactive notebook" - See the [sbml_workflow notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sbml_workflow.ipynb) for a runnable version. +See the [sbml_workflow notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sbml_workflow.ipynb) for a runnable version. ## Next steps diff --git a/docs/guides/visualization.md b/docs/guides/visualization.md index de61096..d39f6cd 100644 --- a/docs/guides/visualization.md +++ b/docs/guides/visualization.md @@ -160,8 +160,8 @@ await app.run() This launches an interactive 3D viewer in the notebook with controls for time stepping, variable selection, and camera manipulation. !!! note "Trame requirements" - The Trame widget requires Jupyter with the `trame-jupyter-extension` installed. - This is included in pyvcell's dev dependencies. +The Trame widget requires Jupyter with the `trame-jupyter-extension` installed. +This is included in pyvcell's dev dependencies. ## Post-processing statistics @@ -197,7 +197,7 @@ print(f"Data shape: {data.shape}, min={data.min():.2f}, max={data.max():.2f}") ``` !!! tip "Interactive tutorial" - See the [Visualization tutorial](notebooks/visualization.ipynb) for a runnable notebook with visual output. Also see the [widget notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/widget.ipynb) for Trame widget examples, and the [SBML workflow notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sbml_workflow.ipynb) for comprehensive plotting examples. +See the [Visualization tutorial](notebooks/visualization.ipynb) for a runnable notebook with visual output. Also see the [widget notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/widget.ipynb) for Trame widget examples, and the [SBML workflow notebook](https://github.com/virtualcell/pyvcell/blob/main/examples/notebooks/sbml_workflow.ipynb) for comprehensive plotting examples. ## Next steps diff --git a/docs/index.md b/docs/index.md index d4f9332..954ce29 100644 --- a/docs/index.md +++ b/docs/index.md @@ -39,22 +39,22 @@ result.plotter.plot_slice_3d(time_index=3, channel_id="s1") ## Guides -| Guide | Description | -|-------|-------------| -| [Building a Model](guides/building-a-model.md) | Define reactions in Antimony, create geometry, simulate | -| [Working with SBML](guides/sbml-models.md) | Load and run SBML spatial models | -| [Complex Geometries](guides/complex-geometries.md) | Multi-compartment and reusable geometries | -| [Parameter Exploration](guides/parameter-exploration.md) | Batch parameter sampling and sensitivity analysis | -| [Field Data Workflows](guides/field-data.md) | Chain simulations using field data as initial conditions | -| [Visualization & Analysis](guides/visualization.md) | Plotting, 3D slices, animations, and Trame widgets | +| Guide | Description | +| -------------------------------------------------------- | -------------------------------------------------------- | +| [Building a Model](guides/building-a-model.md) | Define reactions in Antimony, create geometry, simulate | +| [Working with SBML](guides/sbml-models.md) | Load and run SBML spatial models | +| [Complex Geometries](guides/complex-geometries.md) | Multi-compartment and reusable geometries | +| [Parameter Exploration](guides/parameter-exploration.md) | Batch parameter sampling and sensitivity analysis | +| [Field Data Workflows](guides/field-data.md) | Chain simulations using field data as initial conditions | +| [Visualization & Analysis](guides/visualization.md) | Plotting, 3D slices, animations, and Trame widgets | ## API Reference -| Module | Contents | -|--------|----------| -| [Models](reference/models.md) | Biomodel, Model, Species, Compartment, Reaction, Geometry, Application, Simulation | -| [I/O Functions](reference/io.md) | Load/write VCML, SBML, and Antimony | -| [Simulation & Results](reference/simulation.md) | simulate(), Result, Plotter, VtkData, Field | +| Module | Contents | +| ----------------------------------------------- | ---------------------------------------------------------------------------------- | +| [Models](reference/models.md) | Biomodel, Model, Species, Compartment, Reaction, Geometry, Application, Simulation | +| [I/O Functions](reference/io.md) | Load/write VCML, SBML, and Antimony | +| [Simulation & Results](reference/simulation.md) | simulate(), Result, Plotter, VtkData, Field | ## Example notebooks diff --git a/docs/reference/io.md b/docs/reference/io.md index 321bad6..7118ef9 100644 --- a/docs/reference/io.md +++ b/docs/reference/io.md @@ -7,151 +7,151 @@ Functions for loading and writing models in VCML, SBML, and Antimony formats. ### load_vcml_file ::: pyvcell.vcml.load_vcml_file - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ### load_vcml_str ::: pyvcell.vcml.load_vcml_str - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ### load_vcml_url ::: pyvcell.vcml.load_vcml_url - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ### write_vcml_file ::: pyvcell.vcml.write_vcml_file - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ### to_vcml_str ::: pyvcell.vcml.to_vcml_str - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ## SBML ### load_sbml_file ::: pyvcell.vcml.load_sbml_file - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ### load_sbml_str ::: pyvcell.vcml.load_sbml_str - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ### load_sbml_url ::: pyvcell.vcml.load_sbml_url - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ### write_sbml_file ::: pyvcell.vcml.write_sbml_file - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ### to_sbml_str ::: pyvcell.vcml.to_sbml_str - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ## Antimony ### load_antimony_file ::: pyvcell.vcml.load_antimony_file - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ### load_antimony_str ::: pyvcell.vcml.load_antimony_str - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ### write_antimony_file ::: pyvcell.vcml.write_antimony_file - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ### to_antimony_str ::: pyvcell.vcml.to_antimony_str - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ## Utilities ### update_biomodel ::: pyvcell.vcml.update_biomodel - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ### field_data_refs ::: pyvcell.vcml.field_data_refs - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ## Workspace ### set_workspace_dir ::: pyvcell.vcml.set_workspace_dir - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ### get_workspace_dir ::: pyvcell.vcml.get_workspace_dir - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true diff --git a/docs/reference/models.md b/docs/reference/models.md index cb49856..2c58d2f 100644 --- a/docs/reference/models.md +++ b/docs/reference/models.md @@ -5,170 +5,170 @@ Core data model classes for representing VCell biomodels. ## Biomodel ::: pyvcell.vcml.Biomodel - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## Model ::: pyvcell.vcml.Model - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## Species ::: pyvcell.vcml.Species - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## Compartment ::: pyvcell.vcml.models.Compartment - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## Reaction ::: pyvcell.vcml.Reaction - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## Kinetics ::: pyvcell.vcml.Kinetics - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## KineticsParameter ::: pyvcell.vcml.KineticsParameter - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## ModelParameter ::: pyvcell.vcml.ModelParameter - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## Geometry ::: pyvcell.vcml.Geometry - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## SubVolume ::: pyvcell.vcml.SubVolume - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## SubVolumeType ::: pyvcell.vcml.SubVolumeType - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## SurfaceClass ::: pyvcell.vcml.SurfaceClass - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## Image ::: pyvcell.vcml.Image - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## Application ::: pyvcell.vcml.Application - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## Simulation ::: pyvcell.vcml.Simulation - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## SpeciesMapping ::: pyvcell.vcml.SpeciesMapping - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## BoundaryType ::: pyvcell.vcml.BoundaryType - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## SpeciesReference ::: pyvcell.vcml.SpeciesReference - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## SpeciesRefType ::: pyvcell.vcml.SpeciesRefType - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source diff --git a/docs/reference/simulation.md b/docs/reference/simulation.md index fa16698..42374fd 100644 --- a/docs/reference/simulation.md +++ b/docs/reference/simulation.md @@ -5,63 +5,63 @@ Functions and classes for running simulations and working with results. ## simulate ::: pyvcell.vcml.simulate - handler: python - options: - show_source: false - show_signature_annotations: true +handler: python +options: +show_source: false +show_signature_annotations: true ## Result ::: pyvcell.sim_results.result.Result - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## Plotter ::: pyvcell.sim_results.plotter.Plotter - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## VtkData ::: pyvcell.sim_results.vtk_data.VtkData - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## Field ::: pyvcell.vcml.Field - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ## SBML Spatial Simulation ### SbmlSpatialModel ::: pyvcell.sbml.sbml_spatial_model.SbmlSpatialModel - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source ### SbmlSpatialSimulation ::: pyvcell.sbml.sbml_simulation.SbmlSpatialSimulation - handler: python - options: - show_source: false - show_signature_annotations: true - members_order: source +handler: python +options: +show_source: false +show_signature_annotations: true +members_order: source diff --git a/mkdocs.yml b/mkdocs.yml index ce2893c..63de7d2 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -10,24 +10,24 @@ copyright: Maintained by Virtual Cell Project. nav: - Home: index.md - Getting Started: - - Installation: getting-started/installation.md - - Quick Start: getting-started/quickstart.md + - Installation: getting-started/installation.md + - Quick Start: getting-started/quickstart.md - Guides: - - Building a Model: guides/building-a-model.md - - Working with SBML: guides/sbml-models.md - - Complex Geometries: guides/complex-geometries.md - - Parameter Exploration: guides/parameter-exploration.md - - Remote Simulations: guides/remote-simulations.md - - Field Data Workflows: guides/field-data.md - - Visualization & Analysis: guides/visualization.md - - "Tutorial: Building a Model": guides/notebooks/building-a-model.ipynb - - "Tutorial: Complex Geometries": guides/notebooks/complex-geometries.ipynb - - "Tutorial: Remote Simulations": guides/notebooks/remote-simulations.ipynb - - "Tutorial: Visualization": guides/notebooks/visualization.ipynb + - Building a Model: guides/building-a-model.md + - Working with SBML: guides/sbml-models.md + - Complex Geometries: guides/complex-geometries.md + - Parameter Exploration: guides/parameter-exploration.md + - Remote Simulations: guides/remote-simulations.md + - Field Data Workflows: guides/field-data.md + - Visualization & Analysis: guides/visualization.md + - "Tutorial: Building a Model": guides/notebooks/building-a-model.ipynb + - "Tutorial: Complex Geometries": guides/notebooks/complex-geometries.ipynb + - "Tutorial: Remote Simulations": guides/notebooks/remote-simulations.ipynb + - "Tutorial: Visualization": guides/notebooks/visualization.ipynb - API Reference: - - Models: reference/models.md - - I/O Functions: reference/io.md - - Simulation & Results: reference/simulation.md + - Models: reference/models.md + - I/O Functions: reference/io.md + - Simulation & Results: reference/simulation.md plugins: - search From 2834703b9e329a651673d7f588d73d3bf0134993 Mon Sep 17 00:00:00 2001 From: Jim Schaff Date: Thu, 19 Mar 2026 02:04:17 -0400 Subject: [PATCH 22/24] Add Version XML write support for VCML roundtrip and fix mypy errors Implement _write_version() in VcmlWriter so Version elements roundtrip through read/write cycles. Fix mypy errors in vcml_remote.py: use camelCase alias names for generated API models and narrow str|None type. --- .../geometry/segmented_image_geometry.py | 4 +- pyvcell/vcml/models.py | 4 +- pyvcell/vcml/vcml_reader.py | 7 ++- pyvcell/vcml/vcml_remote.py | 45 ++++++++++--------- pyvcell/vcml/vcml_writer.py | 6 ++- 5 files changed, 39 insertions(+), 27 deletions(-) diff --git a/pyvcell/_internal/geometry/segmented_image_geometry.py b/pyvcell/_internal/geometry/segmented_image_geometry.py index 42a52c2..c4b5a00 100644 --- a/pyvcell/_internal/geometry/segmented_image_geometry.py +++ b/pyvcell/_internal/geometry/segmented_image_geometry.py @@ -12,7 +12,9 @@ import pyvista as pv -def _evaluate_analytic_expr(expr: str, x: npt.NDArray[Any], y: npt.NDArray[Any], z: npt.NDArray[Any]) -> npt.NDArray[Any]: +def _evaluate_analytic_expr( + expr: str, x: npt.NDArray[Any], y: npt.NDArray[Any], z: npt.NDArray[Any] +) -> npt.NDArray[Any]: """Evaluate a VCell analytic expression on coordinate arrays using numexpr.""" # Convert pow(a,b) to (a)**(b) expr = re.sub(r"pow\(([^,]+),([^)]+)\)", r"(\1)**(\2)", expr) diff --git a/pyvcell/vcml/models.py b/pyvcell/vcml/models.py index 74a38fa..6937303 100644 --- a/pyvcell/vcml/models.py +++ b/pyvcell/vcml/models.py @@ -321,8 +321,8 @@ def to_segmented_image(self, resolution: int = 50) -> SegmentedImageGeometry: label_array = ( np.frombuffer(raw_pixels, dtype=np.uint8) .astype(np.int32) - .reshape((sz, sy, sx)) # [z, y, x] - .transpose((2, 1, 0)) # [x, y, z] = (nx, ny, nz) + .reshape((sz, sy, sx)) # [z, y, x] + .transpose((2, 1, 0)) # [x, y, z] = (nx, ny, nz) ) label_names = {pc.pixel_value: pc.name for pc in self.image.pixel_classes} else: diff --git a/pyvcell/vcml/vcml_reader.py b/pyvcell/vcml/vcml_reader.py index 6ca63f5..d69cbc6 100644 --- a/pyvcell/vcml/vcml_reader.py +++ b/pyvcell/vcml/vcml_reader.py @@ -224,8 +224,11 @@ def visit_Simulation(self, element: _Element, node: vc.Application) -> None: if duration is None or output_time_step is None or mesh_size is None: raise ValueError("Simulation element is missing required child elements") simulation = vc.Simulation( - name=name, duration=duration, output_time_step=output_time_step, - mesh_size=mesh_size, version=self._parse_version(element), + name=name, + duration=duration, + output_time_step=output_time_step, + mesh_size=mesh_size, + version=self._parse_version(element), ) node.simulations.append(simulation) diff --git a/pyvcell/vcml/vcml_remote.py b/pyvcell/vcml/vcml_remote.py index c56b847..24f71a2 100644 --- a/pyvcell/vcml/vcml_remote.py +++ b/pyvcell/vcml/vcml_remote.py @@ -4,7 +4,7 @@ from collections.abc import Callable from urllib.parse import parse_qs, urlparse -from tensorstore._tensorstore import TensorStore # type: ignore[import-untyped] +from tensorstore._tensorstore import TensorStore # type: ignore[import-not-found] from pyvcell._internal.api.vcell_client.api.bio_model_resource_api import BioModelResourceApi from pyvcell._internal.api.vcell_client.api.export_resource_api import ExportResourceApi @@ -139,9 +139,7 @@ def wait_for_simulation( if status in _TERMINAL_STATUSES: if status != Status.COMPLETED: - raise RuntimeError( - f"Simulation ended with status: {status}, details: {status_record.details}" - ) + raise RuntimeError(f"Simulation ended with status: {status}, details: {status_record.details}") return if timeout is not None and (time.monotonic() - start_time) >= timeout: @@ -196,25 +194,25 @@ def export_n5( app = _find_app_for_simulation(biomodel, simulation) variable_names = [sm.species_name for sm in app.species_mappings] if len(variable_names) == 1: - var_specs = VariableSpecs(variable_names=variable_names, mode=VariableMode.VARIABLE_ONE) + var_specs = VariableSpecs(variableNames=variable_names, mode=VariableMode.VARIABLE_ONE) else: - var_specs = VariableSpecs(variable_names=variable_names, mode=VariableMode.VARIABLE_MULTI) + var_specs = VariableSpecs(variableNames=variable_names, mode=VariableMode.VARIABLE_MULTI) request = N5ExportRequest( - standard_export_information=StandardExportInfo( - simulation_name=simulation.name, - simulation_key=simulation.version.key, - simulation_job=0, - variable_specs=var_specs, - time_specs=TimeSpecs( - begin_time_index=0, - end_time_index=num_time_points - 1, - all_times=all_times, + standardExportInformation=StandardExportInfo( + simulationName=simulation.name, + simulationKey=simulation.version.key, + simulationJob=0, + variableSpecs=var_specs, + timeSpecs=TimeSpecs( + beginTimeIndex=0, + endTimeIndex=num_time_points - 1, + allTimes=all_times, mode=TimeMode.TIME_RANGE, ), ), - exportable_data_type=ExportableDataType.PDE_VARIABLE_DATA, - dataset_name=dataset_name, + exportableDataType=ExportableDataType.PDE_VARIABLE_DATA, + datasetName=dataset_name, ) if on_progress: @@ -233,6 +231,8 @@ def export_n5( for event in events: if event.job_id == job_id: if event.event_type == "EXPORT_COMPLETE": + if event.location is None: + raise RuntimeError("Export completed but no location was returned") if on_progress: on_progress(f"Export complete: {event.location}") return _open_n5_from_export_url(event.location) @@ -282,7 +282,12 @@ def run_remote( api_client, saved_bm, saved_sim, poll_interval=poll_interval, timeout=timeout, on_progress=on_progress ) return export_n5( - api_client, saved_sim, biomodel=saved_bm, variable_names=variable_names, - dataset_name=dataset_name, poll_interval=poll_interval, timeout=timeout, - on_progress=on_progress + api_client, + saved_sim, + biomodel=saved_bm, + variable_names=variable_names, + dataset_name=dataset_name, + poll_interval=poll_interval, + timeout=timeout, + on_progress=on_progress, ) diff --git a/pyvcell/vcml/vcml_writer.py b/pyvcell/vcml/vcml_writer.py index 5e87306..96b4d1a 100644 --- a/pyvcell/vcml/vcml_writer.py +++ b/pyvcell/vcml/vcml_writer.py @@ -1,3 +1,5 @@ +from __future__ import annotations + from os import PathLike from lxml import etree @@ -56,14 +58,14 @@ def _write_version(version: Version | None, parent: _Element) -> None: attrs["BranchId"] = version.branch_id if version.date is not None: attrs["Date"] = version.date - version_element = Element("Version", **attrs) + version_element = Element("Version", attrib=attrs) if version.owner_name is not None or version.owner_id is not None: owner_attrs: dict[str, str] = {} if version.owner_name is not None: owner_attrs["Name"] = version.owner_name if version.owner_id is not None: owner_attrs["Identifier"] = version.owner_id - version_element.append(Element("Owner", **owner_attrs)) + version_element.append(Element("Owner", attrib=owner_attrs)) parent.append(version_element) def write_biomodel(self, biomodel: Biomodel, parent: _Element) -> None: From 1222289aa3c63397cece7efc71f4ea2c16bc6b20 Mon Sep 17 00:00:00 2001 From: Jim Schaff Date: Thu, 19 Mar 2026 02:04:28 -0400 Subject: [PATCH 23/24] Fix tests: update expected values for domain-masked stats, use Agg backend Update expected concentration values in test_simulations.py and test_result.py to reflect domain-masked mean computation. Set matplotlib Agg backend in tests that call plot functions to prevent hanging on interactive display. Fix publication API test import. --- .../api/vcell_client/test_publication_api.py | 3 ++- .../geometry/test_segmented_image_geometry.py | 1 - tests/guides/test_notebooks.py | 6 +++--- .../test_model_with_logic_in_expressions.py | 4 ++++ tests/sim_results/test_result.py | 13 ++++++++----- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/tests/_internal/api/vcell_client/test_publication_api.py b/tests/_internal/api/vcell_client/test_publication_api.py index de7e465..13ee240 100644 --- a/tests/_internal/api/vcell_client/test_publication_api.py +++ b/tests/_internal/api/vcell_client/test_publication_api.py @@ -1,7 +1,8 @@ from datetime import date from pyvcell._internal.api.vcell_client import ApiClient, Configuration, PublicationResourceApi -from pyvcell._internal.api.vcell_client.models import BiomodelRef, Publication +from pyvcell._internal.api.vcell_client.models.biomodel_ref import BiomodelRef +from pyvcell._internal.api.vcell_client.models.publication import Publication def test_get_publications() -> None: diff --git a/tests/_internal/geometry/test_segmented_image_geometry.py b/tests/_internal/geometry/test_segmented_image_geometry.py index ed3b485..fb8b45b 100644 --- a/tests/_internal/geometry/test_segmented_image_geometry.py +++ b/tests/_internal/geometry/test_segmented_image_geometry.py @@ -7,7 +7,6 @@ ) from pyvcell.vcml.models import Geometry, Image, PixelClass - # --- _evaluate_analytic_expr --- diff --git a/tests/guides/test_notebooks.py b/tests/guides/test_notebooks.py index deb7f1a..3db74db 100644 --- a/tests/guides/test_notebooks.py +++ b/tests/guides/test_notebooks.py @@ -43,6 +43,6 @@ def test_notebook_executes(notebook: Path, tmp_path: Path) -> None: timeout=300, env={**__import__("os").environ, "MPLBACKEND": "Agg"}, ) - assert result.returncode == 0, ( - f"Notebook {notebook.name} failed:\nSTDOUT:\n{result.stdout}\nSTDERR:\n{result.stderr}" - ) + assert ( + result.returncode == 0 + ), f"Notebook {notebook.name} failed:\nSTDOUT:\n{result.stdout}\nSTDERR:\n{result.stderr}" diff --git a/tests/sim_results/test_model_with_logic_in_expressions.py b/tests/sim_results/test_model_with_logic_in_expressions.py index 1fea7e4..eb6c14a 100644 --- a/tests/sim_results/test_model_with_logic_in_expressions.py +++ b/tests/sim_results/test_model_with_logic_in_expressions.py @@ -1,5 +1,9 @@ from pathlib import Path +import matplotlib + +matplotlib.use("Agg") + import pyvcell.vcml as vcml diff --git a/tests/sim_results/test_result.py b/tests/sim_results/test_result.py index 7fc2348..5157cd8 100644 --- a/tests/sim_results/test_result.py +++ b/tests/sim_results/test_result.py @@ -3,9 +3,12 @@ import tempfile from pathlib import Path +import matplotlib import numpy as np import pytest +matplotlib.use("Agg") + from pyvcell.sim_results.result import Result from pyvcell.sim_results.var_types import NDArray2D @@ -23,11 +26,11 @@ def test_plot_slice_2D(solver_output_path: Path, solver_output_simid_jobid: tupl concentrations: NDArray2D = result.concentrations expected_concentrations = [ - [0.00000000e00, 1.66853643e-07, 5.37844509e-07, 1.01317108e-06, 1.53753808e-06], - [0.00000000e00, 1.66853643e-07, 5.37844509e-07, 1.01317108e-06, 1.53753808e-06], - [0.00000000e00, 1.16874344e-06, 1.74755208e-06, 2.05505998e-06, 2.20346703e-06], - [1.07657211e-05, 9.43012400e-06, 8.48032450e-06, 7.69749002e-06, 7.02471598e-06], - [0.00000000e00, 1.16776305e-06, 1.73912167e-06, 2.02778643e-06, 2.14461288e-06], + [0.00000000e+00, 1.72217284e-06, 5.55133941e-06, 1.04574026e-05, 1.58696344e-05], + [0.00000000e+00, 1.72217284e-06, 5.55133941e-06, 1.04574026e-05, 1.58696344e-05], + [0.00000000e+00, 1.20631362e-05, 1.80372851e-05, 2.12112149e-05, 2.27429920e-05], + [4.50000000e-04, 3.94172928e-04, 3.54471939e-04, 3.21749977e-04, 2.93628468e-04], + [0.00000000e+00, 1.20530171e-05, 1.79502710e-05, 2.09297121e-05, 2.21355314e-05], ] assert str(concentrations) == str(np.array(object=expected_concentrations, dtype=np.float64)) assert result.zarr_dataset.shape == (5, 10, 25, 71, 71) From ae8ee5f16b12cadb07fa9c9974214f083f25dd40 Mon Sep 17 00:00:00 2001 From: jcschaff Date: Thu, 19 Mar 2026 02:08:52 -0400 Subject: [PATCH 24/24] lint error --- tests/sim_results/test_result.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/sim_results/test_result.py b/tests/sim_results/test_result.py index 5157cd8..712a9fb 100644 --- a/tests/sim_results/test_result.py +++ b/tests/sim_results/test_result.py @@ -26,11 +26,11 @@ def test_plot_slice_2D(solver_output_path: Path, solver_output_simid_jobid: tupl concentrations: NDArray2D = result.concentrations expected_concentrations = [ - [0.00000000e+00, 1.72217284e-06, 5.55133941e-06, 1.04574026e-05, 1.58696344e-05], - [0.00000000e+00, 1.72217284e-06, 5.55133941e-06, 1.04574026e-05, 1.58696344e-05], - [0.00000000e+00, 1.20631362e-05, 1.80372851e-05, 2.12112149e-05, 2.27429920e-05], + [0.00000000e00, 1.72217284e-06, 5.55133941e-06, 1.04574026e-05, 1.58696344e-05], + [0.00000000e00, 1.72217284e-06, 5.55133941e-06, 1.04574026e-05, 1.58696344e-05], + [0.00000000e00, 1.20631362e-05, 1.80372851e-05, 2.12112149e-05, 2.27429920e-05], [4.50000000e-04, 3.94172928e-04, 3.54471939e-04, 3.21749977e-04, 2.93628468e-04], - [0.00000000e+00, 1.20530171e-05, 1.79502710e-05, 2.09297121e-05, 2.21355314e-05], + [0.00000000e00, 1.20530171e-05, 1.79502710e-05, 2.09297121e-05, 2.21355314e-05], ] assert str(concentrations) == str(np.array(object=expected_concentrations, dtype=np.float64)) assert result.zarr_dataset.shape == (5, 10, 25, 71, 71)

    mwNXjvRwhkm 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 XVxm7yu~X0Ud$d=cl;a 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 R8(*)go;wGMpviU;)+~Q*rhMb(1v2P$_-j- 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

  • 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 Yv9#}8ee$M68Rq>eiW&;#kIjSr2UkW9#sB~S literal 170726 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 diff --git a/docs/guides/images/complex-concentrations.png b/docs/guides/images/complex-concentrations.png index 6e4e755f6e28ce22b976ef35ff0570f6c5998d63..2e83fd7535309373d427a75bac4a2880c5c50112 100644 GIT binary patch literal 39097 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 diff --git a/docs/guides/images/complex-geometry.png b/docs/guides/images/complex-geometry.png index 5d595cc8d088994c331ff71cc9fea87299b5347f..921d8decb1f2b0672ff6e783b7477deac5b2d0c6 100644 GIT binary patch delta 167352 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

  • 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 literal 0 HcmV?d00001 diff --git a/docs/guides/images/complex-analytic-geometry.png b/docs/guides/images/complex-analytic-geometry.png new file mode 100644 index 0000000000000000000000000000000000000000..dc76854103de6aebc2ddda98e0c30f4ddf63e201 GIT binary patch literal 170726 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 literal 0 HcmV?d00001 diff --git a/docs/guides/images/complex-concentrations.png b/docs/guides/images/complex-concentrations.png new file mode 100644 index 0000000000000000000000000000000000000000..2213082f85b106ca915799c62386d9042e00165d GIT binary patch literal 32237 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