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 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/.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/Makefile b/Makefile index e4937b2..746e810 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 $(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 @poetry run mkdocs build -s 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..5a8c285 --- /dev/null +++ b/docs/guides/building-a-model.md @@ -0,0 +1,156 @@ +# 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; cell * (k1*A - k2*B) + J0 in cell; + + k1 = 5.0; k2 = 2.0 + 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': 5.0, 'k2': 2.0} +``` + +## 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. + +![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: + +```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="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. + +## Add a simulation and run + +```python +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") +``` + +## 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") +``` + +![Concentration time series](images/building-concentrations.png) + +![3D slice of species A](images/building-slice3d-A.png) + +## 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; 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 + +# 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="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.05, 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 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 + +- [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..20f8c8a --- /dev/null +++ b/docs/guides/complex-geometries.md @@ -0,0 +1,194 @@ +# 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; 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 + +# 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'] +``` + +![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: + +```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="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.05, 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") +``` + +![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: + +```python +geo = vc.Geometry(name="geo", origin=(0, 0, 0), extent=(10, 10, 10), dim=3) + +# Add a sphere (inner compartment — higher priority) +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") +``` + +![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. + +## 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; 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 +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="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.05, 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") +``` + +![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. + +## 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..73f4165 --- /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/images/building-concentrations.png b/docs/guides/images/building-concentrations.png new file mode 100644 index 0000000..67db458 Binary files /dev/null and b/docs/guides/images/building-concentrations.png differ diff --git a/docs/guides/images/building-geometry.png b/docs/guides/images/building-geometry.png new file mode 100644 index 0000000..d6feca1 Binary files /dev/null and b/docs/guides/images/building-geometry.png differ diff --git a/docs/guides/images/building-slice3d-A.png b/docs/guides/images/building-slice3d-A.png new file mode 100644 index 0000000..ba7590f Binary files /dev/null and b/docs/guides/images/building-slice3d-A.png differ diff --git a/docs/guides/images/complex-analytic-geometry.png b/docs/guides/images/complex-analytic-geometry.png new file mode 100644 index 0000000..d6feca1 Binary files /dev/null and b/docs/guides/images/complex-analytic-geometry.png differ diff --git a/docs/guides/images/complex-concentrations.png b/docs/guides/images/complex-concentrations.png new file mode 100644 index 0000000..2e83fd7 Binary files /dev/null and b/docs/guides/images/complex-concentrations.png differ diff --git a/docs/guides/images/complex-geometry.png b/docs/guides/images/complex-geometry.png new file mode 100644 index 0000000..921d8de Binary files /dev/null and b/docs/guides/images/complex-geometry.png differ diff --git a/docs/guides/images/complex-slice3d-A.png b/docs/guides/images/complex-slice3d-A.png new file mode 100644 index 0000000..53312bd Binary files /dev/null and b/docs/guides/images/complex-slice3d-A.png differ diff --git a/docs/guides/images/viz-concentrations.png b/docs/guides/images/viz-concentrations.png new file mode 100644 index 0000000..7b9c15d Binary files /dev/null and b/docs/guides/images/viz-concentrations.png differ diff --git a/docs/guides/images/viz-slice2d.png b/docs/guides/images/viz-slice2d.png new file mode 100644 index 0000000..b4d5d60 Binary files /dev/null and b/docs/guides/images/viz-slice2d.png differ diff --git a/docs/guides/images/viz-slice3d.png b/docs/guides/images/viz-slice3d.png new file mode 100644 index 0000000..82e4f73 Binary files /dev/null and b/docs/guides/images/viz-slice3d.png differ diff --git a/docs/guides/notebooks/building-a-model.ipynb b/docs/guides/notebooks/building-a-model.ipynb new file mode 100644 index 0000000..60722dc --- /dev/null +++ b/docs/guides/notebooks/building-a-model.ipynb @@ -0,0 +1,595 @@ +{ + "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-08T04:06:58.474005Z", + "iopub.status.busy": "2026-03-08T04:06:58.473933Z", + "iopub.status.idle": "2026-03-08T04:06:59.403072Z", + "shell.execute_reply": "2026-03-08T04:06:59.402825Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-03-08T04:06:59.387256Z 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-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" + ] + } + ], + "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; cell * (k1*A - k2*B)\n", + " J0 in cell;\n", + "\n", + " k1 = 5.0; k2 = 2.0\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-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": [ + { + "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-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": [ + { + "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-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='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, + "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=\"3+sin(x)\", diff_coef=1.0)\n", + "app.map_species(\"B\", init_conc=\"2+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-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": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "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-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-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-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": [ + "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_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_242707378_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_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_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_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 = 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.050000\n", + "\n", + "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_242707378_0_0040.sim\n", + "[[[data:2]]][[[progress:100%]]]" + ] + } + ], + "source": [ + "sim = app.add_sim(\n", + " name=\"sim1\",\n", + " duration=2.0,\n", + " output_time_step=0.05,\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-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": [ + { + "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-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": [ + { + "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-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": [], + "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..f328101 --- /dev/null +++ b/docs/guides/notebooks/complex-geometries.ipynb @@ -0,0 +1,693 @@ +{ + "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-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": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "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-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" + ] + } + ], + "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; cell * (k1*A - k2*B)\n", + " J0 in cell;\n", + " k1 = 5.0; k2 = 2.0\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-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": [ + { + "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-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": [ + { + "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-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": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "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-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-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-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": [ + "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_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_600541721_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_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_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_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 = 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.050000\n", + "\n", + "temporary directory used is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/\n", + "sim file name is /var/folders/zz/gcfcvgtd5v1cdgj2sw4bjzdr0000gr/T/SimID_600541721_0_0040.sim\n", + "[[[data:2]]][[[progress:100%]]]" + ] + } + ], + "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=\"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.05, 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-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": [ + { + "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-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": [ + { + "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-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": [], + "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-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": [], + "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/remote-simulations.ipynb b/docs/guides/notebooks/remote-simulations.ipynb new file mode 100644 index 0000000..db9e87b --- /dev/null +++ b/docs/guides/notebooks/remote-simulations.ipynb @@ -0,0 +1,351 @@ +{ + "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-09T12:59:50.326001Z", + "start_time": "2026-03-09T12:59:48.311989Z" + } + }, + "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-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))", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "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 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" + ] + } + ], + "execution_count": 2 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "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}\")", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "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-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" + ] + } + ], + "execution_count": 3 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "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}\")", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "BioModel key: 306602051, Simulation key: 306602048\n" + ] + } + ], + "execution_count": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Start simulation" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "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\")", + "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-09T13:00:43.209502Z", + "start_time": "2026-03-09T12:59:52.769842Z" + } + }, + "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: 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" + ] + } + ], + "execution_count": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Export results (N5 format)" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "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}\")", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Export job started: 4919316062\n" + ] + } + ], + "execution_count": 7 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-09T13:06:19.664644Z", + "start_time": "2026-03-09T13:00:43.281212Z" + } + }, + "source": [ + "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", + " 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", + " time.sleep(5)\n", + " continue\n", + " break" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Export complete: https://vcell.cam.uchc.edu/n5Data/schaff/ffea0744240babd.n5?dataSetName=4919316062\n" + ] + } + ], + "execution_count": 8 + }, + { + "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-09T13:06:19.913631Z", + "start_time": "2026-03-09T13:06:19.673180Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape: (98, 98, 3, 98, 41), Dtype: dtype(\"float64\")\n", + "Slice shape: (98, 98)\n" + ] + } + ], + "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": { + "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/notebooks/visualization.ipynb b/docs/guides/notebooks/visualization.ipynb new file mode 100644 index 0000000..c4043a8 --- /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-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": [ + { + "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-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-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-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-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_c1u6yv0y/SimID_101348305_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_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_101348305_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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", + "\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_101348305_0_0100.sim\n", + "[[[data:10]]][[[progress:100%]]]" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Simulation Complete in Main() ... \n" + ] + } + ], + "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-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": [ + { + "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-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": [ + { + "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-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": [ + { + "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-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": [ + { + "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-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": [], + "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/parameter-exploration.md b/docs/guides/parameter-exploration.md new file mode 100644 index 0000000..59650a9 --- /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/remote-simulations.md b/docs/guides/remote-simulations.md new file mode 100644 index 0000000..1fea00b --- /dev/null +++ b/docs/guides/remote-simulations.md @@ -0,0 +1,405 @@ +# 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. 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 +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: + +```python +while True: + events = export_api.export_status() + for event in events: + if event.job_id == job_id: + if event.event_type == "EXPORT_COMPLETE": + export_url = event.location + print(f"Export complete: {export_url}") + break + elif event.event_type == "EXPORT_FAILURE": + raise RuntimeError(f"Export failed: {event}") + else: + time.sleep(5) + continue + break +``` + +## Read N5 results with TensorStore + +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 +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 +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) +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 +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": + export_url = event.location + break + elif event.event_type == "EXPORT_FAILURE": + raise RuntimeError(f"Export failed: {event}") + else: + time.sleep(5) + continue + break + +# 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 +``` + +## 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 +- [Field Data Workflows](field-data.md) — Upload experimental data and use it in simulations diff --git a/docs/guides/sbml-models.md b/docs/guides/sbml-models.md new file mode 100644 index 0000000..b1c853a --- /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..d39f6cd --- /dev/null +++ b/docs/guides/visualization.md @@ -0,0 +1,205 @@ +# 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. + +![Concentration time series](images/viz-concentrations.png) + +## 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 + +![2D slice](images/viz-slice2d.png) + +## 3D volume slices + +Render a 3D orthogonal-slice view of the data: + +```python +result.plotter.plot_slice_3d( + time_index=3, + channel_id="s1", +) +``` + +![3D volume slice](images/viz-slice3d.png) + +## 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 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 + +- [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..954ce29 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..7118ef9 --- /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..2c58d2f --- /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..42374fd --- /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..63de7d2 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,19 +9,48 @@ 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 + - 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 + plugins: - search + - mkdocs-jupyter: + execute: false - mkdocstrings: handlers: python: 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 +81,10 @@ markdown_extensions: permalink: true - pymdownx.arithmatex: generic: true + - pymdownx.highlight: + anchor_linenums: true + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true + - admonition + - pymdownx.details diff --git a/poetry.lock b/poetry.lock index a62ce9d..d712e94 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"}, @@ -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,7 @@ version = "25.4.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.9" -groups = ["main", "dev"] +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 +409,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 +447,7 @@ version = "6.3.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false python-versions = ">=3.10" -groups = ["dev"] +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"}, @@ -462,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]] @@ -490,7 +490,7 @@ version = "2.0.0" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.9" -groups = ["main", "dev"] +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 +577,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\""} @@ -596,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]] @@ -751,7 +767,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"}, @@ -854,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] @@ -1065,7 +1081,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 +1121,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 +1133,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 +1200,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 +1228,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"}, @@ -1223,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] @@ -1632,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] @@ -1662,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] @@ -1708,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.10" -groups = ["dev"] +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] @@ -1723,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" @@ -1746,7 +1762,7 @@ version = "9.10.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.11" -groups = ["dev"] +groups = ["dev", "docs"] markers = "python_version == \"3.11\"" files = [ {file = "ipython-9.10.0-py3-none-any.whl", hash = "sha256:c6ab68cc23bba8c7e18e9b932797014cc61ea7fd6f19de180ab9ba73e65ee58d"}, @@ -1780,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"}, @@ -1813,7 +1829,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 +1881,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"}, @@ -1927,7 +1943,7 @@ version = "4.26.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.10" -groups = ["dev"] +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 +1974,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"}, @@ -1973,7 +1989,7 @@ version = "8.8.0" description = "Jupyter protocol implementation and client libraries" optional = false python-versions = ">=3.10" -groups = ["dev"] +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"}, @@ -1997,7 +2013,7 @@ version = "5.9.1" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false python-versions = ">=3.10" -groups = ["dev"] +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"}, @@ -2112,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] @@ -2150,7 +2166,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 +2210,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" @@ -2213,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]] @@ -2552,8 +2613,11 @@ files = [ {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"}, @@ -2649,7 +2713,7 @@ version = "4.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.10" -groups = ["main"] +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"}, @@ -2851,7 +2915,7 @@ version = "0.2.1" description = "Inline Matplotlib backend for Jupyter" optional = false python-versions = ">=3.9" -groups = ["dev"] +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 +2927,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 +2977,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"}, @@ -2949,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] @@ -2964,16 +3048,36 @@ 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" +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] @@ -2982,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" @@ -3447,7 +3551,7 @@ version = "0.10.4" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = false python-versions = ">=3.10.0" -groups = ["dev"] +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"}, @@ -3470,7 +3574,7 @@ version = "7.17.0" description = "Convert Jupyter Notebooks (.ipynb files) to other formats." optional = false python-versions = ">=3.9" -groups = ["dev"] +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 +3611,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 +3633,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"}, @@ -3549,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" @@ -3697,84 +3801,84 @@ numpy = ">=1.23.0" [[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"] 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"}, + {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]] @@ -3923,7 +4027,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 +4039,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 +4073,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"}, @@ -4181,7 +4285,7 @@ version = "3.0.52" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.8" -groups = ["dev"] +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 +4432,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 +4467,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 +4480,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"}, @@ -4391,12 +4495,12 @@ version = "3.0" description = "C parser in Python" optional = false python-versions = ">=3.10" -groups = ["main", "dev"] +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\" and implementation_name != \"PyPy\"", dev = "implementation_name != \"PyPy\"", docs = "implementation_name == \"pypy\""} [[package]] name = "pydantic" @@ -4679,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] @@ -4714,49 +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.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.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]] @@ -4939,7 +5051,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"}, @@ -5044,7 +5156,7 @@ version = "0.37.0" description = "JSON Referencing + Python" optional = false python-versions = ">=3.10" -groups = ["dev"] +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"}, @@ -5166,7 +5278,7 @@ version = "0.30.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.10" -groups = ["dev"] +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"}, @@ -5318,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)"] @@ -5367,7 +5479,7 @@ version = "2.8.3" description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.9" -groups = ["dev"] +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 +5491,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"}, @@ -5413,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] @@ -5478,7 +5590,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"}, @@ -5505,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.9" -groups = ["dev"] +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)"] @@ -5557,7 +5667,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"}, @@ -5612,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] @@ -5664,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] @@ -5737,7 +5847,7 @@ version = "4.15.0" description = "Backported and Experimental Type Hints for Python 3.9+" optional = false python-versions = ">=3.9" -groups = ["main", "dev"] +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"}, @@ -5805,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] @@ -5912,7 +6022,7 @@ version = "0.6.0" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = ">=3.8" -groups = ["dev"] +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 +6046,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"}, @@ -6076,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] @@ -6262,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 = "19b8d423dff33092ebae00512fb713616f84059c43774462668bcacd34bdb0ff" +content-hash = "f46b382dbfd14dce0832a5dcdbdb22dfa1dc2860b47f4bf61c8bc1a173af5abb" diff --git a/pyproject.toml b/pyproject.toml index 9b220ee..229dd7c 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"] @@ -164,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/pyvcell/_internal/api/vcell_client/__init__.py b/pyvcell/_internal/api/vcell_client/__init__.py index 3dd23b1..1972e27 100644 --- a/pyvcell/_internal/api/vcell_client/__init__.py +++ b/pyvcell/_internal/api/vcell_client/__init__.py @@ -16,80 +16,20 @@ __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 - - +# Define package exports __all__ = [ "AdminResourceApi", "BioModelResourceApi", + "ExportResourceApi", "FieldDataResourceApi", + "GeometryResourceApi", "HelloWorldApi", + "MathModelResourceApi", "PublicationResourceApi", "SimulationResourceApi", "SolverResourceApi", "UsersResourceApi", + "VCImageResourceApi", "ApiResponse", "ApiClient", "Configuration", @@ -100,26 +40,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 +97,185 @@ "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..4a07989 100644 --- a/pyvcell/_internal/api/vcell_client/api/__init__.py +++ b/pyvcell/_internal/api/vcell_client/api/__init__.py @@ -3,9 +3,13 @@ # 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..2cec049 100644 --- a/pyvcell/_internal/api/vcell_client/api/admin_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/admin_resource_api.py @@ -8,11 +8,15 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 -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 @@ -67,7 +71,7 @@ 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 @@ -75,8 +79,9 @@ def get_usage( _response_types_map: Dict[str, Optional[str]] = { "200": "bytearray", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -121,7 +126,7 @@ 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 @@ -129,8 +134,9 @@ def get_usage_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "bytearray", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -175,7 +181,7 @@ 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 @@ -183,8 +189,9 @@ def get_usage_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "bytearray", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -215,7 +222,7 @@ def _get_usage_serialize( # set the HTTP header `Accept` if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/pdf"]) + _header_params["Accept"] = self.api_client.select_header_accept(["application/pdf", "application/json"]) # authentication setting _auth_settings: List[str] = ["openId"] 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..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 @@ -8,15 +8,21 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 -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 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 @@ -71,7 +77,7 @@ 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, @@ -83,6 +89,9 @@ def delete_bio_model( _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() @@ -130,7 +139,7 @@ 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, @@ -142,6 +151,9 @@ def delete_bio_model_with_http_info( _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() @@ -189,7 +201,7 @@ 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, @@ -201,6 +213,9 @@ def delete_bio_model_without_preload_content( _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 @@ -232,6 +247,10 @@ def _delete_bio_model_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"]) + # authentication setting _auth_settings: List[str] = [] @@ -251,7 +270,7 @@ def _delete_bio_model_serialize( ) @validate_call - def get_biomodel_by_id( + def get_bio_model( self, bio_model_id: StrictStr, _request_timeout: Union[ @@ -264,7 +283,7 @@ def get_biomodel_by_id( _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,9 +308,9 @@ 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, @@ -301,7 +320,9 @@ def get_biomodel_by_id( _response_types_map: Dict[str, Optional[str]] = { "200": "BioModel", - "404": None, + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -311,7 +332,7 @@ def get_biomodel_by_id( ).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[ @@ -324,7 +345,7 @@ def get_biomodel_by_id_with_http_info( _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,9 +370,9 @@ 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, @@ -361,7 +382,9 @@ def get_biomodel_by_id_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "BioModel", - "404": None, + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -371,7 +394,7 @@ def get_biomodel_by_id_with_http_info( ) @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[ @@ -384,7 +407,7 @@ def get_biomodel_by_id_without_preload_content( _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,9 +432,9 @@ 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, @@ -421,12 +444,14 @@ def get_biomodel_by_id_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "BioModel", - "404": None, + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } 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, @@ -476,9 +501,12 @@ def _get_biomodel_by_id_serialize( ) @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)], @@ -488,12 +516,12 @@ def upload_bio_model( _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,10 +542,10 @@ 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, @@ -525,9 +553,8 @@ def upload_bio_model( ) _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.read() @@ -537,9 +564,12 @@ def upload_bio_model( ).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)], @@ -549,12 +579,12 @@ def upload_bio_model_with_http_info( _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,10 +605,10 @@ 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, @@ -586,9 +616,8 @@ def upload_bio_model_with_http_info( ) _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.read() @@ -598,9 +627,12 @@ def upload_bio_model_with_http_info( ) @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)], @@ -611,11 +643,11 @@ def upload_bio_model_without_preload_content( _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,10 +668,10 @@ 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, @@ -647,16 +679,244 @@ def upload_bio_model_without_preload_content( ) _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) 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] = {} + + _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/bioModel/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_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, @@ -674,22 +934,539 @@ def _upload_bio_model_serialize( _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(["text/plain"]) + _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 else: - _default_content_type = self.api_client.select_header_content_type(["text/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 @@ -698,7 +1475,7 @@ def _upload_bio_model_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/api/v1/bioModel/upload_bioModel", + resource_path="/api/v1/bioModel", path_params=_path_params, query_params=_query_params, header_params=_header_params, 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..f8a134d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/api/export_resource_api.py @@ -0,0 +1,521 @@ +""" +VCell API + +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..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 @@ -8,18 +8,27 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" - -from typing import Annotated, Any, Dict, List, Optional, Tuple, Union - -from pydantic import Field, StrictBytes, StrictFloat, StrictInt, StrictStr, validate_call +""" # 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 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_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.models.analyzed_results_from_field_data import AnalyzedResultsFromFieldData -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.rest import RESTResponseType @@ -27,19 +36,868 @@ class FieldDataResourceApi: """NOTE: This class is auto generated by OpenAPI Generator Ref: https://openapi-generator.tech - Do not edit the class manually. - """ + 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 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)]], + ] = 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: + """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 + (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._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, + ) + + _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 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)]], + ] = 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]: + """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 + (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._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, + ) + + _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 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)]], + ] = 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: + """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 + (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._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, + ) + + _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 _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] = { + "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]]]] = {} + _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)) + 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"]) + + # 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"] + + return self.api_client.param_serialize( + method="POST", + resource_path="/api/v1/fieldData/advancedCreate", + 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 analyze_file( + self, + 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)]], + ] = 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, + ) -> 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 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 + (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._analyze_file_serialize( + file=file, + file_name=file_name, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "FieldData", + "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 analyze_file_with_http_info( + self, + 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)]], + ] = 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[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 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 + (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._analyze_file_serialize( + file=file, + file_name=file_name, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "FieldData", + "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 analyze_file_without_preload_content( + self, + 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)]], + ] = 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 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 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 + (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._analyze_file_serialize( + file=file, + file_name=file_name, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "FieldData", + "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 _analyze_file_serialize( + self, + file, + file_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 + # 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 + + # 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(["multipart/form-data"]) + 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/analyzeFile", + 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 copy_models_field_data( + self, + 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)]], + ] = 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, + ) -> Dict[str, ExternalDataIdentifier]: + """Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. + + + :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 + (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._copy_models_field_data_serialize( + source_model=source_model, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "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.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, + 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)]], + ] = 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[Dict[str, ExternalDataIdentifier]]: + """Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. + + + :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 + (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._copy_models_field_data_serialize( + source_model=source_model, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "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.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, + 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)]], + ] = 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: + """Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. + + + :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 + (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._copy_models_field_data_serialize( + source_model=source_model, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index, + ) + + _response_types_map: Dict[str, Optional[str]] = { + "200": "Dict[str, ExternalDataIdentifier]", + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "422": "VCellHTTPError", + "500": "VCellHTTPError", + } + 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, + _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 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"] - def __init__(self, api_client=None) -> None: - if api_client is None: - api_client = ApiClient.get_default() - self.api_client = api_client + return self.api_client.param_serialize( + method="POST", + resource_path="/api/v1/fieldData/copyModelsFieldData", + 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 analyze_field_data_file( + def create_from_file( self, file: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None, - file_name: Optional[StrictStr] = None, + field_data_name: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -49,14 +907,14 @@ def analyze_field_data_file( _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: + """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 file_name: - :type file_name: str + :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 @@ -77,11 +935,11 @@ 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._create_from_file_serialize( file=file, - file_name=file_name, + field_data_name=field_data_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -89,9 +947,11 @@ def analyze_field_data_file( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AnalyzedResultsFromFieldData", - "401": 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.read() @@ -101,10 +961,10 @@ def analyze_field_data_file( ).data @validate_call - def analyze_field_data_file_with_http_info( + def create_from_file_with_http_info( self, file: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None, - file_name: Optional[StrictStr] = None, + field_data_name: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -114,14 +974,14 @@ def analyze_field_data_file_with_http_info( _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]: + """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 file_name: - :type file_name: str + :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 @@ -142,11 +1002,11 @@ 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._create_from_file_serialize( file=file, - file_name=file_name, + field_data_name=field_data_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -154,9 +1014,11 @@ def analyze_field_data_file_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AnalyzedResultsFromFieldData", - "401": 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.read() @@ -166,10 +1028,10 @@ def analyze_field_data_file_with_http_info( ) @validate_call - def analyze_field_data_file_without_preload_content( + def create_from_file_without_preload_content( self, file: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None, - file_name: Optional[StrictStr] = None, + field_data_name: Optional[StrictStr] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -180,13 +1042,13 @@ def analyze_field_data_file_without_preload_content( _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. + """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 file_name: - :type file_name: str + :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 @@ -207,11 +1069,11 @@ 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._create_from_file_serialize( file=file, - file_name=file_name, + field_data_name=field_data_name, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -219,17 +1081,19 @@ def analyze_field_data_file_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "AnalyzedResultsFromFieldData", - "401": None, + "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 _analyze_field_data_file_serialize( + def _create_from_file_serialize( self, file, - file_name, + field_data_name, _request_auth, _content_type, _headers, @@ -252,8 +1116,8 @@ def _analyze_field_data_file_serialize( # process the form parameters if file is not None: _files["file"] = file - if file_name is not None: - _form_params.append(("fileName", file_name)) + if field_data_name is not None: + _form_params.append(("fieldDataName", field_data_name)) # process the body parameter # set the HTTP header `Accept` @@ -273,7 +1137,7 @@ def _analyze_field_data_file_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/api/v1/fieldData/analyzeFieldDataFile", + resource_path="/api/v1/fieldData/createFromFile", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -287,9 +1151,11 @@ def _analyze_field_data_file_serialize( ) @validate_call - def create_field_data_from_analyzed_file( + def create_from_simulation( self, - analyzed_results_from_field_data: Optional[AnalyzedResultsFromFieldData] = None, + 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)], @@ -299,12 +1165,16 @@ def create_field_data_from_analyzed_file( _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. + ) -> None: + """Create new field data from existing simulation results. - :param analyzed_results_from_field_data: - :type analyzed_results_from_field_data: AnalyzedResultsFromFieldData + :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 @@ -325,10 +1195,12 @@ 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._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, @@ -336,9 +1208,10 @@ def create_field_data_from_analyzed_file( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "FieldDataSaveResults", - "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.read() @@ -348,9 +1221,11 @@ def create_field_data_from_analyzed_file( ).data @validate_call - def create_field_data_from_analyzed_file_with_http_info( + def create_from_simulation_with_http_info( self, - analyzed_results_from_field_data: Optional[AnalyzedResultsFromFieldData] = None, + 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)], @@ -360,12 +1235,16 @@ def create_field_data_from_analyzed_file_with_http_info( _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[None]: + """Create new field data from existing simulation results. - :param analyzed_results_from_field_data: - :type analyzed_results_from_field_data: AnalyzedResultsFromFieldData + :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 @@ -386,10 +1265,12 @@ 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._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, @@ -397,9 +1278,10 @@ def create_field_data_from_analyzed_file_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "FieldDataSaveResults", - "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.read() @@ -409,9 +1291,11 @@ def create_field_data_from_analyzed_file_with_http_info( ) @validate_call - def create_field_data_from_analyzed_file_without_preload_content( + def create_from_simulation_without_preload_content( self, - analyzed_results_from_field_data: Optional[AnalyzedResultsFromFieldData] = None, + 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)], @@ -422,11 +1306,15 @@ def create_field_data_from_analyzed_file_without_preload_content( _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. + """Create new field data from existing simulation results. - :param analyzed_results_from_field_data: - :type analyzed_results_from_field_data: AnalyzedResultsFromFieldData + :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 @@ -447,10 +1335,12 @@ 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._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, @@ -458,16 +1348,19 @@ def create_field_data_from_analyzed_file_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - "200": "FieldDataSaveResults", - "401": None, - "403": None, + "201": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } 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 _create_from_simulation_serialize( self, - analyzed_results_from_field_data, + sim_key_reference, + job_index, + new_field_data_name, _request_auth, _content_type, _headers, @@ -488,9 +1381,13 @@ def _create_field_data_from_analyzed_file_serialize( # 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 - 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: @@ -500,7 +1397,7 @@ def _create_field_data_from_analyzed_file_serialize( if _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/x-www-form-urlencoded"]) if _default_content_type is not None: _header_params["Content-Type"] = _default_content_type @@ -509,7 +1406,7 @@ def _create_field_data_from_analyzed_file_serialize( return self.api_client.param_serialize( method="POST", - resource_path="/api/v1/fieldData/createFieldDataFromAnalyzedFile", + resource_path="/api/v1/fieldData/createFromSimulation", path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -523,7 +1420,7 @@ def _create_field_data_from_analyzed_file_serialize( ) @validate_call - def delete_field_data( + def delete( self, field_data_id: StrictStr, _request_timeout: Union[ @@ -561,9 +1458,9 @@ 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( + _param = self._delete_serialize( field_data_id=field_data_id, _request_auth=_request_auth, _content_type=_content_type, @@ -573,8 +1470,9 @@ def delete_field_data( _response_types_map: Dict[str, Optional[str]] = { "204": None, - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -584,7 +1482,7 @@ def delete_field_data( ).data @validate_call - def delete_field_data_with_http_info( + def delete_with_http_info( self, field_data_id: StrictStr, _request_timeout: Union[ @@ -622,9 +1520,9 @@ 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( + _param = self._delete_serialize( field_data_id=field_data_id, _request_auth=_request_auth, _content_type=_content_type, @@ -634,8 +1532,9 @@ def delete_field_data_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "204": None, - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -645,7 +1544,7 @@ def delete_field_data_with_http_info( ) @validate_call - def delete_field_data_without_preload_content( + def delete_without_preload_content( self, field_data_id: StrictStr, _request_timeout: Union[ @@ -683,9 +1582,9 @@ 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( + _param = self._delete_serialize( field_data_id=field_data_id, _request_auth=_request_auth, _content_type=_content_type, @@ -695,13 +1594,14 @@ def delete_field_data_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "204": None, - "401": None, - "403": 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_field_data_serialize( + def _delete_serialize( self, field_data_id, _request_auth, @@ -728,6 +1628,10 @@ def _delete_field_data_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"]) + # authentication setting _auth_settings: List[str] = ["openId"] @@ -747,7 +1651,7 @@ def _delete_field_data_serialize( ) @validate_call - def get_all_field_data_ids( + def get_all_ids( self, _request_timeout: Union[ None, @@ -782,16 +1686,17 @@ 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( + _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": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -801,7 +1706,7 @@ def get_all_field_data_ids( ).data @validate_call - def get_all_field_data_ids_with_http_info( + def get_all_ids_with_http_info( self, _request_timeout: Union[ None, @@ -836,16 +1741,17 @@ 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( + _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": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -855,7 +1761,7 @@ def get_all_field_data_ids_with_http_info( ) @validate_call - def get_all_field_data_ids_without_preload_content( + def get_all_ids_without_preload_content( self, _request_timeout: Union[ None, @@ -890,21 +1796,22 @@ 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( + _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": None, - "403": None, + "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_field_data_ids_serialize( + def _get_all_ids_serialize( self, _request_auth, _content_type, @@ -951,7 +1858,7 @@ def _get_all_field_data_ids_serialize( ) @validate_call - def get_field_data_shape_from_id( + def get_shape_from_id( self, field_data_id: StrictStr, _request_timeout: Union[ @@ -964,7 +1871,7 @@ def get_field_data_shape_from_id( _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. + """Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. :param field_data_id: (required) @@ -989,9 +1896,9 @@ 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( + _param = self._get_shape_from_id_serialize( field_data_id=field_data_id, _request_auth=_request_auth, _content_type=_content_type, @@ -1001,8 +1908,10 @@ def get_field_data_shape_from_id( _response_types_map: Dict[str, Optional[str]] = { "200": "FieldDataShape", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -1012,7 +1921,7 @@ def get_field_data_shape_from_id( ).data @validate_call - def get_field_data_shape_from_id_with_http_info( + def get_shape_from_id_with_http_info( self, field_data_id: StrictStr, _request_timeout: Union[ @@ -1025,7 +1934,7 @@ def get_field_data_shape_from_id_with_http_info( _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. + """Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. :param field_data_id: (required) @@ -1050,9 +1959,9 @@ 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( + _param = self._get_shape_from_id_serialize( field_data_id=field_data_id, _request_auth=_request_auth, _content_type=_content_type, @@ -1062,8 +1971,10 @@ def get_field_data_shape_from_id_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "FieldDataShape", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -1073,7 +1984,7 @@ def get_field_data_shape_from_id_with_http_info( ) @validate_call - def get_field_data_shape_from_id_without_preload_content( + def get_shape_from_id_without_preload_content( self, field_data_id: StrictStr, _request_timeout: Union[ @@ -1086,7 +1997,7 @@ def get_field_data_shape_from_id_without_preload_content( _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. + """Get the shape of the field data. That is it's size, origin, extent, times, and data identifiers. :param field_data_id: (required) @@ -1111,9 +2022,9 @@ 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( + _param = self._get_shape_from_id_serialize( field_data_id=field_data_id, _request_auth=_request_auth, _content_type=_content_type, @@ -1123,13 +2034,15 @@ def get_field_data_shape_from_id_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "FieldDataShape", - "401": None, - "403": 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 _get_field_data_shape_from_id_serialize( + def _get_shape_from_id_serialize( self, field_data_id, _request_auth, @@ -1165,7 +2078,249 @@ def _get_field_data_shape_from_id_serialize( return self.api_client.param_serialize( method="GET", - resource_path="/api/v1/fieldData/fieldDataShape/{fieldDataID}", + 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, 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..6af652d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/api/geometry_resource_api.py @@ -0,0 +1,1221 @@ +""" +VCell API + +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..fe4d250 100644 --- a/pyvcell/_internal/api/vcell_client/api/hello_world_api.py +++ b/pyvcell/_internal/api/vcell_client/api/hello_world_api.py @@ -8,15 +8,17 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 -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 @@ -68,7 +70,7 @@ 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 @@ -76,6 +78,7 @@ def get_hello_world( _response_types_map: Dict[str, Optional[str]] = { "200": "HelloWorldMessage", + "403": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -120,7 +123,7 @@ 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 @@ -128,6 +131,7 @@ def get_hello_world_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "HelloWorldMessage", + "403": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -172,7 +176,7 @@ 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 @@ -180,6 +184,7 @@ def get_hello_world_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "HelloWorldMessage", + "403": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response 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..e7fce14 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/api/math_model_resource_api.py @@ -0,0 +1,1245 @@ +""" +VCell API + +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..fa6c01a 100644 --- a/pyvcell/_internal/api/vcell_client/api/publication_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/publication_resource_api.py @@ -8,15 +8,19 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 -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 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 @@ -71,7 +75,7 @@ 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, @@ -83,8 +87,9 @@ def create_publication( _response_types_map: Dict[str, Optional[str]] = { "200": "int", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -132,7 +137,7 @@ 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, @@ -144,8 +149,9 @@ def create_publication_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "int", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -193,7 +199,7 @@ 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, @@ -205,8 +211,9 @@ def create_publication_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "int", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -307,7 +314,7 @@ 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 @@ -315,8 +322,10 @@ def delete_publication( _response_types_map: Dict[str, Optional[str]] = { "204": None, - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -364,7 +373,7 @@ 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 @@ -372,8 +381,10 @@ def delete_publication_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "204": None, - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "404": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -421,7 +432,7 @@ 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 @@ -429,8 +440,10 @@ def delete_publication_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "204": None, - "401": None, - "403": 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 @@ -462,6 +475,10 @@ def _delete_publication_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"]) + # authentication setting _auth_settings: List[str] = ["openId"] @@ -519,7 +536,7 @@ 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 @@ -527,6 +544,7 @@ def get_publication_by_id( _response_types_map: Dict[str, Optional[str]] = { "200": "Publication", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -574,7 +592,7 @@ 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 @@ -582,6 +600,7 @@ def get_publication_by_id_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "Publication", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -629,7 +648,7 @@ 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 @@ -637,6 +656,7 @@ def get_publication_by_id_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "Publication", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -726,7 +746,7 @@ 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 @@ -734,6 +754,7 @@ def get_publications( _response_types_map: Dict[str, Optional[str]] = { "200": "List[Publication]", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -778,7 +799,7 @@ 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 @@ -786,6 +807,7 @@ def get_publications_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "List[Publication]", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -830,7 +852,7 @@ 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 @@ -838,6 +860,7 @@ def get_publications_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "List[Publication]", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -927,7 +950,7 @@ 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, @@ -939,8 +962,9 @@ def update_publication( _response_types_map: Dict[str, Optional[str]] = { "200": "Publication", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -988,7 +1012,7 @@ 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, @@ -1000,8 +1024,9 @@ def update_publication_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "Publication", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -1049,7 +1074,7 @@ 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, @@ -1061,8 +1086,9 @@ def update_publication_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "Publication", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response 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..1a02874 100644 --- a/pyvcell/_internal/api/vcell_client/api/simulation_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/simulation_resource_api.py @@ -8,18 +8,22 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" - -from typing import Annotated, Any, Dict, List, Optional, Tuple, Union +""" # noqa: E501 -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 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.rest import RESTResponseType @@ -80,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 _param = self._get_simulation_status_serialize( sim_id=sim_id, @@ -94,8 +98,9 @@ def get_simulation_status( _response_types_map: Dict[str, Optional[str]] = { "200": "SimulationStatusPersistentRecord", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -149,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 _param = self._get_simulation_status_serialize( sim_id=sim_id, @@ -163,8 +168,9 @@ def get_simulation_status_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "SimulationStatusPersistentRecord", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -218,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 _param = self._get_simulation_status_serialize( sim_id=sim_id, @@ -232,8 +238,9 @@ def get_simulation_status_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "SimulationStatusPersistentRecord", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -334,7 +341,7 @@ 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, @@ -346,8 +353,9 @@ def start_simulation( _response_types_map: Dict[str, Optional[str]] = { "200": "List[StatusMessage]", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -395,7 +403,7 @@ 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, @@ -407,8 +415,9 @@ def start_simulation_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "List[StatusMessage]", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -456,7 +465,7 @@ 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, @@ -468,8 +477,9 @@ def start_simulation_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "List[StatusMessage]", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -562,7 +572,7 @@ 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, @@ -574,8 +584,9 @@ def stop_simulation( _response_types_map: Dict[str, Optional[str]] = { "200": "List[StatusMessage]", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -623,7 +634,7 @@ 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, @@ -635,8 +646,9 @@ def stop_simulation_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "List[StatusMessage]", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -684,7 +696,7 @@ 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, @@ -696,8 +708,9 @@ def stop_simulation_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "List[StatusMessage]", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response 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..e8974c9 100644 --- a/pyvcell/_internal/api/vcell_client/api/solver_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/solver_resource_api.py @@ -8,11 +8,15 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 -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, StrictBytes, StrictFloat, StrictInt, StrictStr, validate_call +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 @@ -76,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 _param = self._get_fv_solver_input_from_sbml_serialize( sbml_file=sbml_file, @@ -90,6 +94,7 @@ def get_fv_solver_input_from_sbml( _response_types_map: Dict[str, Optional[str]] = { "200": "bytearray", + "422": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -143,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 _param = self._get_fv_solver_input_from_sbml_serialize( sbml_file=sbml_file, @@ -157,6 +162,7 @@ def get_fv_solver_input_from_sbml_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "bytearray", + "422": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -210,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 _param = self._get_fv_solver_input_from_sbml_serialize( sbml_file=sbml_file, @@ -224,6 +230,7 @@ def get_fv_solver_input_from_sbml_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "bytearray", + "422": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -263,7 +270,10 @@ def _get_fv_solver_input_from_sbml_serialize( # set the HTTP header `Accept` if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/octet-stream"]) + _header_params["Accept"] = self.api_client.select_header_accept([ + "application/octet-stream", + "application/json", + ]) # set the HTTP header `Content-Type` if _content_type: @@ -333,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 _param = self._get_fv_solver_input_from_vcml_serialize( vcml_file=vcml_file, @@ -346,6 +356,7 @@ def get_fv_solver_input_from_vcml( _response_types_map: Dict[str, Optional[str]] = { "200": "bytearray", + "422": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -396,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 _param = self._get_fv_solver_input_from_vcml_serialize( vcml_file=vcml_file, @@ -409,6 +420,7 @@ def get_fv_solver_input_from_vcml_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "bytearray", + "422": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -459,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 _param = self._get_fv_solver_input_from_vcml_serialize( vcml_file=vcml_file, @@ -472,6 +484,7 @@ def get_fv_solver_input_from_vcml_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "bytearray", + "422": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -508,7 +521,10 @@ def _get_fv_solver_input_from_vcml_serialize( # set the HTTP header `Accept` if "Accept" not in _header_params: - _header_params["Accept"] = self.api_client.select_header_accept(["application/octet-stream"]) + _header_params["Accept"] = self.api_client.select_header_accept([ + "application/octet-stream", + "application/json", + ]) # set the HTTP header `Content-Type` if _content_type: 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..6532be3 100644 --- a/pyvcell/_internal/api/vcell_client/api/users_resource_api.py +++ b/pyvcell/_internal/api/vcell_client/api/users_resource_api.py @@ -8,19 +8,23 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" - -from typing import Annotated, Any, Dict, List, Optional, Tuple, Union +""" # noqa: E501 -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 @@ -75,7 +79,7 @@ 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, @@ -137,7 +141,7 @@ 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, @@ -199,7 +203,7 @@ 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, @@ -300,7 +304,7 @@ 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 @@ -308,6 +312,7 @@ def get_guest_legacy_api_token( _response_types_map: Dict[str, Optional[str]] = { "200": "AccesTokenRepresentationRecord", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -352,7 +357,7 @@ 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 @@ -360,6 +365,7 @@ def get_guest_legacy_api_token_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "AccesTokenRepresentationRecord", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -404,7 +410,7 @@ 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 @@ -412,6 +418,7 @@ def get_guest_legacy_api_token_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "AccesTokenRepresentationRecord", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -498,7 +505,7 @@ 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 @@ -506,8 +513,9 @@ def get_legacy_api_token( _response_types_map: Dict[str, Optional[str]] = { "200": "AccesTokenRepresentationRecord", - "401": None, + "401": "VCellHTTPError", "403": None, + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -552,7 +560,7 @@ 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 @@ -560,8 +568,9 @@ def get_legacy_api_token_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "AccesTokenRepresentationRecord", - "401": None, + "401": "VCellHTTPError", "403": None, + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -606,7 +615,7 @@ 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 @@ -614,8 +623,9 @@ def get_legacy_api_token_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "AccesTokenRepresentationRecord", - "401": None, + "401": "VCellHTTPError", "403": None, + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -702,7 +712,7 @@ 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 @@ -710,8 +720,10 @@ def get_mapped_user( _response_types_map: Dict[str, Optional[str]] = { "200": "UserIdentityJSONSafe", - "401": None, + "401": "VCellHTTPError", "403": None, + "409": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -756,7 +768,7 @@ 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 @@ -764,8 +776,10 @@ def get_mapped_user_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "UserIdentityJSONSafe", - "401": None, + "401": "VCellHTTPError", "403": None, + "409": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -810,7 +824,7 @@ 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 @@ -818,8 +832,10 @@ def get_mapped_user_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "UserIdentityJSONSafe", - "401": None, + "401": "VCellHTTPError", "403": None, + "409": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -906,7 +922,7 @@ 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 @@ -958,7 +974,7 @@ 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 @@ -1010,7 +1026,7 @@ 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 @@ -1107,7 +1123,7 @@ 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, @@ -1119,9 +1135,10 @@ def map_new_user( _response_types_map: Dict[str, Optional[str]] = { "200": None, - "401": None, + "401": "VCellHTTPError", "403": None, "409": None, + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -1169,7 +1186,7 @@ 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, @@ -1181,9 +1198,10 @@ def map_new_user_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": None, - "401": None, + "401": "VCellHTTPError", "403": None, "409": None, + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -1231,7 +1249,7 @@ 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, @@ -1243,9 +1261,10 @@ def map_new_user_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": None, - "401": None, + "401": "VCellHTTPError", "403": None, "409": None, + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -1277,6 +1296,10 @@ 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 @@ -1342,7 +1365,7 @@ 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, @@ -1354,8 +1377,9 @@ def map_user( _response_types_map: Dict[str, Optional[str]] = { "200": "bool", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -1403,7 +1427,7 @@ 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, @@ -1415,8 +1439,9 @@ def map_user_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "bool", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -1464,7 +1489,7 @@ 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, @@ -1476,8 +1501,9 @@ def map_user_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "bool", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -1578,7 +1604,7 @@ 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, @@ -1591,6 +1617,8 @@ def process_magic_link( _response_types_map: Dict[str, Optional[str]] = { "200": None, "400": None, + "401": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -1638,7 +1666,7 @@ 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, @@ -1651,6 +1679,8 @@ def process_magic_link_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": None, "400": None, + "401": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -1698,7 +1728,7 @@ 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, @@ -1711,6 +1741,8 @@ def process_magic_link_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": None, "400": None, + "401": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -1743,6 +1775,10 @@ def _process_magic_link_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"]) + # authentication setting _auth_settings: List[str] = [] @@ -1803,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 _param = self._request_recovery_email_serialize( email=email, @@ -1817,8 +1853,10 @@ def request_recovery_email( _response_types_map: Dict[str, Optional[str]] = { "200": None, "400": None, - "401": None, + "401": "VCellHTTPError", "403": None, + "404": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -1869,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 _param = self._request_recovery_email_serialize( email=email, @@ -1883,8 +1921,10 @@ def request_recovery_email_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": None, "400": None, - "401": None, + "401": "VCellHTTPError", "403": None, + "404": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -1935,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 _param = self._request_recovery_email_serialize( email=email, @@ -1949,8 +1989,10 @@ def request_recovery_email_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": None, "400": None, - "401": None, + "401": "VCellHTTPError", "403": None, + "404": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response @@ -1987,6 +2029,10 @@ def _request_recovery_email_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"]) + # authentication setting _auth_settings: List[str] = ["openId"] @@ -2044,7 +2090,7 @@ 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, @@ -2056,8 +2102,9 @@ def unmap_user( _response_types_map: Dict[str, Optional[str]] = { "200": "bool", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -2105,7 +2152,7 @@ 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, @@ -2117,8 +2164,9 @@ def unmap_user_with_http_info( _response_types_map: Dict[str, Optional[str]] = { "200": "bool", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) response_data.read() @@ -2166,7 +2214,7 @@ 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, @@ -2178,8 +2226,9 @@ def unmap_user_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { "200": "bool", - "401": None, - "403": None, + "401": "VCellHTTPError", + "403": "VCellHTTPError", + "500": "VCellHTTPError", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) return response_data.response 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..7e2f568 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/api/vc_image_resource_api.py @@ -0,0 +1,1221 @@ +""" +VCell API + +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..d39e2b3 100644 --- a/pyvcell/_internal/api/vcell_client/api_client.py +++ b/pyvcell/_internal/api/vcell_client/api_client.py @@ -8,30 +8,35 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 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]] @@ -272,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.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" @@ -289,7 +294,7 @@ def response_deserialize( return ApiResponse( status_code=response_data.status, data=return_data, - headers=response_data.getheaders(), + headers=response_data.headers, raw_data=response_data.data, ) @@ -317,6 +322,8 @@ 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] elif isinstance(obj, tuple): @@ -334,11 +341,15 @@ 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__ + 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]): @@ -358,15 +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): data = response_text + elif re.match(r"^application\/xml\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) @@ -402,13 +415,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) @@ -465,7 +478,7 @@ 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) + new_params.extend((k, quote(str(value))) for value in v) else: if collection_format == "ssv": delimiter = " " @@ -604,11 +617,13 @@ 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) 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 +664,7 @@ 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 +679,7 @@ 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 +691,7 @@ 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..1ce1372 100644 --- a/pyvcell/_internal/api/vcell_client/api_response.py +++ b/pyvcell/_internal/api/vcell_client/api_response.py @@ -1,11 +1,8 @@ """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") 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/pyvcell/_internal/api/vcell_client/configuration.py b/pyvcell/_internal/api/vcell_client/configuration.py index cab1183..38f5f9b 100644 --- a/pyvcell/_internal/api/vcell_client/configuration.py +++ b/pyvcell/_internal/api/vcell_client/configuration.py @@ -8,18 +8,19 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 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", @@ -114,8 +115,11 @@ ) -class AuthSettings(TypedDict, total=False): - pass +AuthSettings = TypedDict( + "AuthSettings", + {}, + total=False, +) class HostSettingVariable(TypedDict): @@ -159,7 +163,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: """ @@ -180,12 +188,15 @@ def __init__( server_operation_variables: Optional[Dict[int, ServerVariablesT]] = None, ignore_operation_servers: bool = False, ssl_ca_cert: Optional[str] = None, - retries: Optional[int] = 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 + 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 @@ -257,10 +268,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 @@ -289,7 +304,7 @@ def __init__( """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 @@ -473,6 +488,7 @@ 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: @@ -490,10 +506,10 @@ def to_debug_report(self) -> str: """ return ( "Python SDK Debug Report:\n" - f"OS: {sys.platform}\n" - f"Python Version: {sys.version}\n" + "OS: {env}\n" + "Python Version: {pyversion}\n" "Version of the API: 1.0.1\n" - "SDK Package Version: 1.0.0" + "SDK Package Version: 1.0.0".format(env=sys.platform, pyversion=sys.version) ) def get_host_settings(self) -> List[HostSetting]: @@ -503,7 +519,7 @@ def get_host_settings(self) -> List[HostSetting]: """ return [ { - "url": "https://vcell-dev.cam.uchc.edu", + "url": "https://vcell.cam.uchc.edu", "description": "No description provided", } ] @@ -530,7 +546,9 @@ 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"] @@ -539,7 +557,7 @@ def get_host_from_settings( 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"] diff --git a/pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md b/pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md index 9e3b6b4..e37fbb7 100644 --- a/pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md +++ b/pyvcell/_internal/api/vcell_client/docs/AccesTokenRepresentationRecord.md @@ -25,8 +25,7 @@ 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..80bd80e 100644 --- a/pyvcell/_internal/api/vcell_client/docs/AdminResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/AdminResourceApi.md @@ -1,6 +1,6 @@ # 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 | | ---------------------------------------------- | --------------------------- | ----------------- | @@ -19,10 +19,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 @@ -59,14 +59,15 @@ This endpoint does not need any parameter. ### HTTP request headers - **Content-Type**: Not defined -- **Accept**: application/pdf +- **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..3f4e3dc --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/AnalyticCurve.md @@ -0,0 +1,35 @@ +# 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..28dd3ef --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/AnnotatedFunctionDTO.md @@ -0,0 +1,32 @@ +# 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..a88444c --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/ApplicationInfo.md @@ -0,0 +1,30 @@ +# 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/BioModel.md b/pyvcell/_internal/api/vcell_client/docs/BioModel.md index dab9d00..ced53ba 100644 --- a/pyvcell/_internal/api/vcell_client/docs/BioModel.md +++ b/pyvcell/_internal/api/vcell_client/docs/BioModel.md @@ -2,20 +2,20 @@ ## 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 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..63a7775 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/BioModelChildSummary.md @@ -0,0 +1,38 @@ +# 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..9d4dc09 100644 --- a/pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/BioModelResourceApi.md @@ -1,12 +1,15 @@ # 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** @@ -21,17 +24,18 @@ 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. @@ -57,21 +61,24 @@ No authorization required ### HTTP request headers - **Content-Type**: Not defined -- **Accept**: Not defined +- **Accept**: application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | ----------- | ---------------- | -| **204** | No Content | - | +| 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_biomodel_by_id** +# **get_bio_model** -> BioModel get_biomodel_by_id(bio_model_id) +> BioModel get_bio_model(bio_model_id) -Get BioModel information in JSON format by ID. +Get BioModel. ### Example @@ -81,25 +88,26 @@ 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 @@ -123,18 +131,214 @@ No authorization required ### 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) + +# **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 +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 + +| 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.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: + # 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) -# **upload_bio_model** +# **save_bio_model** -> str upload_bio_model(body=body) +> str save_bio_model(body, new_name=new_name, sims_requiring_updates=sims_requiring_updates) -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. ### Example @@ -143,10 +347,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 @@ -158,22 +362,26 @@ 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 +393,17 @@ 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..86da87b --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/BioModelSummary.md @@ -0,0 +1,30 @@ +# 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/CompositeCurve.md b/pyvcell/_internal/api/vcell_client/docs/CompositeCurve.md new file mode 100644 index 0000000..b0d452a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/CompositeCurve.md @@ -0,0 +1,32 @@ +# 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..d283e08 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/ControlPointCurve.md @@ -0,0 +1,34 @@ +# 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..dff99ff --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/Coordinate.md @@ -0,0 +1,29 @@ +# 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..f9651c8 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/Curve.md @@ -0,0 +1,37 @@ +# 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..8cf889e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/CurveSelectionInfo.md @@ -0,0 +1,36 @@ +# 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/ExportEvent.md b/pyvcell/_internal/api/vcell_client/docs/ExportEvent.md new file mode 100644 index 0000000..5de282e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/ExportEvent.md @@ -0,0 +1,35 @@ +# 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..788cf62 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/ExportProgressType.md @@ -0,0 +1,15 @@ +# 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..8ee32fe --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/ExportResourceApi.md @@ -0,0 +1,148 @@ +# 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..c1f00ba --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/ExportableDataType.md @@ -0,0 +1,11 @@ +# 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/ExternalDataIdentifier.md b/pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md index a6ae7ab..dee013d 100644 --- a/pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md +++ b/pyvcell/_internal/api/vcell_client/docs/ExternalDataIdentifier.md @@ -2,15 +2,15 @@ ## 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 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..27b3631 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/FieldData.md @@ -0,0 +1,35 @@ +# 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..0392759 100644 --- a/pyvcell/_internal/api/vcell_client/docs/FieldDataReference.md +++ b/pyvcell/_internal/api/vcell_client/docs/FieldDataReference.md @@ -2,11 +2,11 @@ ## 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 diff --git a/pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md index 1f21ca5..82639f7 100644 --- a/pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/FieldDataResourceApi.md @@ -1,33 +1,40 @@ # 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** +# **advanced_create** -> AnalyzedResultsFromFieldData analyze_field_data_file(file=file, file_name=file_name) +> 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,16 +46,101 @@ 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] | +| **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 + +[**FieldDataSavedResults**](FieldDataSavedResults.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) + +# **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 @@ -60,7 +152,7 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### Return type -[**AnalyzedResultsFromFieldData**](AnalyzedResultsFromFieldData.md) +[**FieldData**](FieldData.md) ### Authorization @@ -73,33 +165,35 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### 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** +# **copy_models_field_data** -> FieldDataSaveResults create_field_data_from_analyzed_file(analyzed_results_from_field_data=analyzed_results_from_field_data) +> Dict[str, ExternalDataIdentifier] copy_models_field_data(source_model=source_model) -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. ### 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.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-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 +205,26 @@ 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) + source_model = pyvcell._internal.api.vcell_client.SourceModel() # SourceModel | (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") + # 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->create_field_data_from_analyzed_file: %s\n" % e) + print("Exception when calling FieldDataResourceApi->copy_models_field_data: %s\n" % e) ``` ### Parameters -| Name | Type | Description | Notes | -| ------------------------------------ | ------------------------------------------------------------------- | ----------- | ---------- | -| **analyzed_results_from_field_data** | [**AnalyzedResultsFromFieldData**](AnalyzedResultsFromFieldData.md) | | [optional] | +| Name | Type | Description | Notes | +| ---------------- | --------------------------------- | ----------- | ---------- | +| **source_model** | [**SourceModel**](SourceModel.md) | | [optional] | ### Return type -[**FieldDataSaveResults**](FieldDataSaveResults.md) +[**Dict[str, ExternalDataIdentifier]**](ExternalDataIdentifier.md) ### Authorization @@ -144,17 +237,163 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### 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_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 +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) + field_data_name = 'field_data_name_example' # str | (optional) + + try: + # 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_from_file: %s\n" % e) +``` + +### Parameters + +| Name | Type | Description | Notes | +| ------------------- | ------------- | ----------- | ---------- | +| **file** | **bytearray** | | [optional] | +| **field_data_name** | **str** | | [optional] | + +### Return type + +[**FieldDataSavedResults**](FieldDataSavedResults.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) -# **delete_field_data** +# **create_from_simulation** -> delete_field_data(field_data_id) +> 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 + +| 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. @@ -165,10 +404,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 @@ -180,13 +419,13 @@ 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 @@ -206,21 +445,22 @@ void (empty response body) ### HTTP request headers - **Content-Type**: Not defined -- **Accept**: 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** +# **get_all_ids** -> List[FieldDataReference] get_all_field_data_ids() +> List[FieldDataReference] get_all_ids() Get all of the ids used to identify, and retrieve field data. @@ -232,10 +472,10 @@ from pyvcell._internal.api.vcell_client.models.field_data_reference import Field 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,11 +490,11 @@ 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 @@ -276,19 +516,20 @@ This endpoint does not need any parameter. ### 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** +# **get_shape_from_id** -> FieldDataShape get_field_data_shape_from_id(field_data_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 @@ -298,10 +539,10 @@ from pyvcell._internal.api.vcell_client.models.field_data_shape 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-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,15 +554,15 @@ 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 @@ -345,10 +586,84 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### 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..4a5b5fc --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/FieldDataSavedResults.md @@ -0,0 +1,28 @@ +# 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/FunctionCategory.md b/pyvcell/_internal/api/vcell_client/docs/FunctionCategory.md new file mode 100644 index 0000000..cd6b0d1 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/FunctionCategory.md @@ -0,0 +1,13 @@ +# 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..c5be17c --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GIFImage.md @@ -0,0 +1,28 @@ +# 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..73579b0 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GeometryMode.md @@ -0,0 +1,11 @@ +# 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..26582d2 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GeometryResourceApi.md @@ -0,0 +1,337 @@ +# 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..e6772c5 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GeometrySpecDTO.md @@ -0,0 +1,30 @@ +# 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..ae6284a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GeometrySummary.md @@ -0,0 +1,32 @@ +# 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..dbcc8b4 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GroupAccess.md @@ -0,0 +1,28 @@ +# 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..1592244 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GroupAccessAll.md @@ -0,0 +1,28 @@ +# 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..af624cc --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GroupAccessNone.md @@ -0,0 +1,28 @@ +# 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..62a488f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/GroupAccessSome.md @@ -0,0 +1,33 @@ +# 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..e66a54f 100644 --- a/pyvcell/_internal/api/vcell_client/docs/HelloWorldApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/HelloWorldApi.md @@ -1,6 +1,6 @@ # 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 | | ------------------------------------------------------- | -------------------------- | ------------------------ | @@ -20,12 +20,13 @@ from pyvcell._internal.api.vcell_client.models.hello_world_message import HelloW 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 @@ -62,5 +63,6 @@ No authorization required | Status code | Description | Response headers | | ----------- | ----------- | ---------------- | | **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/HumanReadableExportData.md b/pyvcell/_internal/api/vcell_client/docs/HumanReadableExportData.md new file mode 100644 index 0000000..e824ecb --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/HumanReadableExportData.md @@ -0,0 +1,37 @@ +# 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/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..d03445c --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/MathModelChildSummary.md @@ -0,0 +1,31 @@ +# 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..926696b --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/MathModelResourceApi.md @@ -0,0 +1,337 @@ +# 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..bc2c0e0 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/MathModelSummary.md @@ -0,0 +1,32 @@ +# 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..149f297 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/MathType.md @@ -0,0 +1,15 @@ +# 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/ModelType.md b/pyvcell/_internal/api/vcell_client/docs/ModelType.md new file mode 100644 index 0000000..31a1013 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/ModelType.md @@ -0,0 +1,9 @@ +# 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..a141c9c --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/N5ExportRequest.md @@ -0,0 +1,30 @@ +# 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/PublicationInfo.md b/pyvcell/_internal/api/vcell_client/docs/PublicationInfo.md new file mode 100644 index 0000000..e0844b4 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/PublicationInfo.md @@ -0,0 +1,38 @@ +# 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..b031d17 100644 --- a/pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/PublicationResourceApi.md @@ -1,6 +1,6 @@ # 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 | | ---------------------------------------------------------------------------- | ------------------------------------ | --------------------- | @@ -24,10 +24,10 @@ 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 +39,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 @@ -71,11 +71,12 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### 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) @@ -92,10 +93,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 @@ -107,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 @@ -133,15 +134,17 @@ void (empty response body) ### HTTP request headers - **Content-Type**: Not defined -- **Accept**: 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) @@ -159,17 +162,18 @@ 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 @@ -201,9 +205,10 @@ No authorization required ### HTTP response details -| Status code | Description | Response headers | -| ----------- | ----------- | ---------------- | -| **200** | OK | - | +| 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) @@ -221,12 +226,13 @@ 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 @@ -260,9 +266,10 @@ No authorization required ### HTTP response details -| Status code | Description | Response headers | -| ----------- | ----------- | ---------------- | -| **200** | OK | - | +| 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) @@ -280,10 +287,10 @@ 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 +302,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 @@ -327,10 +334,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### 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..5b62697 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/SPECIALCLAIM.md @@ -0,0 +1,13 @@ +# 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..d26aded --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/SampledCurve.md @@ -0,0 +1,32 @@ +# 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/SimulationExecutionStatusRecord.md b/pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md index abfc768..fed941b 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationExecutionStatusRecord.md @@ -26,8 +26,7 @@ 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/SimulationQueueEntryStatusRecord.md b/pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md index ff1df5c..bbe6985 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationQueueEntryStatusRecord.md @@ -11,8 +11,7 @@ ## 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 +23,7 @@ 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/SimulationResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md index aa2daeb..ea14ed3 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationResourceApi.md @@ -1,6 +1,6 @@ # 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 | | --------------------------------------------------------------------------- | --------------------------------------------------- | ------------------------------------ | @@ -18,15 +18,14 @@ Get the status of simulation running ```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,14 +37,13 @@ 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: @@ -75,11 +73,12 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### 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) @@ -97,10 +96,10 @@ from pyvcell._internal.api.vcell_client.models.status_message import StatusMessa 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 +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. @@ -144,11 +143,12 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### 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) @@ -166,10 +166,10 @@ from pyvcell._internal.api.vcell_client.models.status_message import StatusMessa 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 +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. @@ -213,10 +213,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### 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..9be915e 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SimulationStatusPersistentRecord.md +++ b/pyvcell/_internal/api/vcell_client/docs/SimulationStatusPersistentRecord.md @@ -11,8 +11,7 @@ ## 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 +23,7 @@ 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..c54914e 100644 --- a/pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/SolverResourceApi.md @@ -1,6 +1,6 @@ # 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 | | --------------------------------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------------------------- | @@ -20,24 +20,24 @@ 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: @@ -63,13 +63,14 @@ No authorization required ### HTTP request headers - **Content-Type**: multipart/form-data -- **Accept**: application/octet-stream +- **Accept**: application/octet-stream, application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | ----------- | ---------------- | -| **200** | OK | - | +| 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) @@ -86,18 +87,19 @@ 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. @@ -126,12 +128,13 @@ No authorization required ### HTTP request headers - **Content-Type**: multipart/form-data -- **Accept**: application/octet-stream +- **Accept**: application/octet-stream, application/json ### HTTP response details -| Status code | Description | Response headers | -| ----------- | ----------- | ---------------- | -| **200** | OK | - | +| 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 new file mode 100644 index 0000000..c158873 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/SourceModel.md @@ -0,0 +1,28 @@ +# 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..1100100 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/SpatialSelection.md @@ -0,0 +1,33 @@ +# 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..c54369d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionContour.md @@ -0,0 +1,30 @@ +# 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..7b25bea --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionMembrane.md @@ -0,0 +1,29 @@ +# 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..c3404c4 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/SpatialSelectionVolume.md @@ -0,0 +1,28 @@ +# 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..0d0afc8 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/Spline.md @@ -0,0 +1,31 @@ +# 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..f0a4a78 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/StandardExportInfo.md @@ -0,0 +1,34 @@ +# 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/TimeMode.md b/pyvcell/_internal/api/vcell_client/docs/TimeMode.md new file mode 100644 index 0000000..052c30c --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/TimeMode.md @@ -0,0 +1,9 @@ +# 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..a7c0227 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/TimeSpecs.md @@ -0,0 +1,30 @@ +# 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..54a25ba 100644 --- a/pyvcell/_internal/api/vcell_client/docs/User.md +++ b/pyvcell/_internal/api/vcell_client/docs/User.md @@ -2,12 +2,11 @@ ## 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 diff --git a/pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md b/pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md index 99b13e3..3ff2244 100644 --- a/pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md +++ b/pyvcell/_internal/api/vcell_client/docs/UsersResourceApi.md @@ -1,6 +1,6 @@ # pyvcell.\_internal.api.vcell_client.UsersResourceApi -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 | | -------------------------------------------------------------------------------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------- | @@ -28,10 +28,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 @@ -43,7 +43,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. @@ -96,12 +96,13 @@ from pyvcell._internal.api.vcell_client.models.acces_token_representation_record 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 @@ -135,9 +136,10 @@ No authorization required ### HTTP response details -| Status code | Description | Response headers | -| ----------- | ----------- | ---------------- | -| **200** | OK | - | +| 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) @@ -155,10 +157,10 @@ from pyvcell._internal.api.vcell_client.models.acces_token_representation_record 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 @@ -199,11 +201,12 @@ This endpoint does not need any parameter. ### 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) @@ -221,10 +224,10 @@ from pyvcell._internal.api.vcell_client.models.user_identity_json_safe import Us 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 @@ -268,8 +271,10 @@ This endpoint does not need any parameter. | Status code | Description | Response headers | | ----------- | ---------------------------------- | ---------------- | | **200** | Successful, returning the identity | - | -| **401** | Not Authorized | - | +| **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) @@ -287,12 +292,13 @@ 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 @@ -346,10 +352,10 @@ from pyvcell._internal.api.vcell_client.models.user_registration_info import Use 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 +367,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 @@ -387,16 +393,17 @@ void (empty response body) ### HTTP request headers - **Content-Type**: application/json -- **Accept**: Not defined +- **Accept**: application/json ### HTTP response details | Status code | Description | Response headers | | ----------- | ------------------------------------------------ | ---------------- | | **200** | Successful, returning the identity | - | -| **401** | Not Authorized | - | +| **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) @@ -414,10 +421,10 @@ from pyvcell._internal.api.vcell_client.models.user_login_info_for_mapping impor 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 +436,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 @@ -461,11 +468,12 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### 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) @@ -482,17 +490,18 @@ 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 @@ -518,7 +527,7 @@ No authorization required ### HTTP request headers - **Content-Type**: Not defined -- **Accept**: Not defined +- **Accept**: application/json ### HTTP response details @@ -526,6 +535,8 @@ No authorization required | ----------- | ----------------------------- | ---------------- | | **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) @@ -542,10 +553,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 @@ -557,8 +568,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. @@ -585,7 +596,7 @@ void (empty response body) ### HTTP request headers - **Content-Type**: Not defined -- **Accept**: Not defined +- **Accept**: application/json ### HTTP response details @@ -593,8 +604,10 @@ void (empty response body) | ----------- | --------------------------------------- | ---------------- | | **200** | magic link sent in email if appropriate | - | | **400** | unable to process request | - | -| **401** | Not Authorized | - | +| **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) @@ -611,10 +624,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 @@ -626,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 @@ -658,10 +671,11 @@ with pyvcell._internal.api.vcell_client.ApiClient(configuration) as api_client: ### 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..866b438 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VCDocumentType.md @@ -0,0 +1,13 @@ +# 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..0969e47 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VCImageResourceApi.md @@ -0,0 +1,333 @@ +# 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..c43315f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VCImageSummary.md @@ -0,0 +1,31 @@ +# 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..87fb082 100644 --- a/pyvcell/_internal/api/vcell_client/docs/VCSimulationIdentifier.md +++ b/pyvcell/_internal/api/vcell_client/docs/VCSimulationIdentifier.md @@ -2,11 +2,11 @@ ## 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 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..dce6add --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VCellHTTPError.md @@ -0,0 +1,28 @@ +# 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..1d8e507 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VCellSite.md @@ -0,0 +1,15 @@ +# 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..230d741 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VCellSoftwareVersion.md @@ -0,0 +1,35 @@ +# 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/VariableMode.md b/pyvcell/_internal/api/vcell_client/docs/VariableMode.md new file mode 100644 index 0000000..ad769dd --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VariableMode.md @@ -0,0 +1,11 @@ +# 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..c786ef8 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VariableSpecs.md @@ -0,0 +1,28 @@ +# 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/Version.md b/pyvcell/_internal/api/vcell_client/docs/Version.md new file mode 100644 index 0000000..5043be2 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/Version.md @@ -0,0 +1,35 @@ +# 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..c8af378 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/docs/VersionFlag.md @@ -0,0 +1,31 @@ +# 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..b77e264 100644 --- a/pyvcell/_internal/api/vcell_client/exceptions.py +++ b/pyvcell/_internal/api/vcell_client/exceptions.py @@ -8,10 +8,9 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from typing import Any, Optional - from typing_extensions import Self @@ -43,7 +42,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 +60,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 +79,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,7 +96,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(ApiKeyError, self).__init__(full_msg) @@ -127,7 +126,7 @@ def __init__( 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( @@ -149,18 +148,28 @@ 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 +194,24 @@ 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..37fecd5 100644 --- a/pyvcell/_internal/api/vcell_client/models/__init__.py +++ b/pyvcell/_internal/api/vcell_client/models/__init__.py @@ -15,26 +15,56 @@ # 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 @@ -46,52 +76,30 @@ 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 - -__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", -] +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 eb92e8f..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,23 +10,23 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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") 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..2524782 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/analytic_curve.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 + +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..fe23241 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/annotated_function_dto.py @@ -0,0 +1,120 @@ +# 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..a8ec484 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/application_info.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, 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,13 +10,11 @@ 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 diff --git a/pyvcell/_internal/api/vcell_client/models/bio_model.py b/pyvcell/_internal/api/vcell_client/models/bio_model.py index 93e9995..e6a8f42 100644 --- a/pyvcell/_internal/api/vcell_client/models/bio_model.py +++ b/pyvcell/_internal/api/vcell_client/models/bio_model.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,25 +10,23 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 @@ -38,7 +38,7 @@ 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", @@ -92,13 +92,6 @@ def to_dict(self) -> Dict[str, Any]: 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 +119,7 @@ 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, + "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..33c5a2f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/bio_model_child_summary.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 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..edee188 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/bio_model_summary.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 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..1022840 100644 --- a/pyvcell/_internal/api/vcell_client/models/biomodel_ref.py +++ b/pyvcell/_internal/api/vcell_client/models/biomodel_ref.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,23 +10,23 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 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..5660e32 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/composite_curve.py @@ -0,0 +1,133 @@ +# 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..4f1e34a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/control_point_curve.py @@ -0,0 +1,159 @@ +# 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 75% rename from pyvcell/_internal/api/vcell_client/models/key_value.py rename to pyvcell/_internal/api/vcell_client/models/coordinate.py index aaa9b41..15f1d22 100644 --- a/pyvcell/_internal/api/vcell_client/models/key_value.py +++ b/pyvcell/_internal/api/vcell_client/models/coordinate.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,26 +10,28 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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): """ + Coordinate + """ # noqa: E501 - value: Optional[Union[StrictFloat, StrictInt]] = None - __properties: ClassVar[List[str]] = ["value"] + 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, @@ -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]: @@ -70,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 KeyValue from a dict""" + """Create an instance of Coordinate from a dict""" if obj is None: return None @@ -80,7 +84,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 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..e961f47 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/curve.py @@ -0,0 +1,166 @@ +# 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..194b146 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/curve_selection_info.py @@ -0,0 +1,125 @@ +# 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..5861147 100644 --- a/pyvcell/_internal/api/vcell_client/models/data_identifier.py +++ b/pyvcell/_internal/api/vcell_client/models/data_identifier.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,26 +10,25 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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") diff --git a/pyvcell/_internal/api/vcell_client/models/detailed_state.py b/pyvcell/_internal/api/vcell_client/models/detailed_state.py index b3e2b3a..51cd272 100644 --- a/pyvcell/_internal/api/vcell_client/models/detailed_state.py +++ b/pyvcell/_internal/api/vcell_client/models/detailed_state.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,13 +10,11 @@ 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 diff --git a/pyvcell/_internal/api/vcell_client/models/domain.py b/pyvcell/_internal/api/vcell_client/models/domain.py index 4a6903b..28cfe69 100644 --- a/pyvcell/_internal/api/vcell_client/models/domain.py +++ b/pyvcell/_internal/api/vcell_client/models/domain.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,23 +10,23 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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"] 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..d3259a0 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/export_event.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, 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..87a6410 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/export_progress_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 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..dd6b500 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/exportable_data_type.py @@ -0,0 +1,36 @@ +# 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..6e0136d 100644 --- a/pyvcell/_internal/api/vcell_client/models/extent.py +++ b/pyvcell/_internal/api/vcell_client/models/extent.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,23 +10,23 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,34 +10,32 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 - """ + """ # noqa: E501 - key: Optional[KeyValue] = None + 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") + data_key: Optional[StrictStr] = Field(default=None, alias="dataKey") __properties: ClassVar[List[str]] = [ "key", "owner", @@ -83,18 +83,9 @@ def to_dict(self) -> Dict[str, Any]: 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() return _dict @classmethod @@ -114,12 +105,12 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: ) _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 85% 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..911c3d0 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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,29 +10,31 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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): - """ - AnalyzedResultsFromFieldData +class FieldData(BaseModel): """ + 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 @@ -40,6 +44,7 @@ class AnalyzedResultsFromFieldData(BaseModel): name: Optional[StrictStr] = None __properties: ClassVar[List[str]] = [ "shortSpecData", + "doubleSpecData", "varNames", "times", "origin", @@ -66,7 +71,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]: @@ -99,7 +104,7 @@ def to_dict(self) -> Dict[str, Any]: @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,12 +114,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 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, 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,31 +10,31 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 - """ + """ # noqa: E501 - 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"] + 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, @@ -71,16 +73,9 @@ def to_dict(self) -> Dict[str, Any]: 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 @@ -100,12 +95,10 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: ) _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 + "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 81% 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..30517e8 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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,27 +10,27 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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, @@ -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]: @@ -71,7 +73,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 @@ -82,8 +84,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: 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 + "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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,28 +10,27 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 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..0e2826f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/function_category.py @@ -0,0 +1,37 @@ +# 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..3f58590 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/geometry_mode.py @@ -0,0 +1,36 @@ +# 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..d8e7aa1 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/geometry_spec_dto.py @@ -0,0 +1,109 @@ +# 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..c0434cd --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/geometry_summary.py @@ -0,0 +1,120 @@ +# 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..fa969d8 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/gif_image.py @@ -0,0 +1,98 @@ +# 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..8d4cda4 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/group_access.py @@ -0,0 +1,126 @@ +# 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..73f7d86 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/group_access_all.py @@ -0,0 +1,94 @@ +# 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..92fbdce --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/group_access_none.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 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..92f7fac --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/group_access_some.py @@ -0,0 +1,143 @@ +# 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,23 +10,23 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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"] 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,25 +10,24 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 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..bfc79d6 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/human_readable_export_data.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, 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..5beb1c3 100644 --- a/pyvcell/_internal/api/vcell_client/models/i_size.py +++ b/pyvcell/_internal/api/vcell_client/models/i_size.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,23 +10,23 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 diff --git a/pyvcell/_internal/api/vcell_client/models/identity.py b/pyvcell/_internal/api/vcell_client/models/identity.py index 20746af..57b1d88 100644 --- a/pyvcell/_internal/api/vcell_client/models/identity.py +++ b/pyvcell/_internal/api/vcell_client/models/identity.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,23 +10,23 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 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..95d810b --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/math_model_child_summary.py @@ -0,0 +1,107 @@ +# 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..826f10f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/math_model_summary.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 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..671e859 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/math_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 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..7d0e986 100644 --- a/pyvcell/_internal/api/vcell_client/models/mathmodel_ref.py +++ b/pyvcell/_internal/api/vcell_client/models/mathmodel_ref.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,23 +10,23 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 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..9a8fe3b --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/model_type.py @@ -0,0 +1,35 @@ +# 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..678411f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/n5_export_request.py @@ -0,0 +1,105 @@ +# 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..093b2af 100644 --- a/pyvcell/_internal/api/vcell_client/models/origin.py +++ b/pyvcell/_internal/api/vcell_client/models/origin.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,23 +10,23 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 diff --git a/pyvcell/_internal/api/vcell_client/models/publication.py b/pyvcell/_internal/api/vcell_client/models/publication.py index 4b9b8b6..8116cd7 100644 --- a/pyvcell/_internal/api/vcell_client/models/publication.py +++ b/pyvcell/_internal/api/vcell_client/models/publication.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,27 +10,26 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 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..6ad654e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/publication_info.py @@ -0,0 +1,133 @@ +# 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..df00c50 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/sampled_curve.py @@ -0,0 +1,159 @@ +# 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..4ed4250 100644 --- a/pyvcell/_internal/api/vcell_client/models/scheduler_status.py +++ b/pyvcell/_internal/api/vcell_client/models/scheduler_status.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,13 +10,11 @@ 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 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,26 +10,25 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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") 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,19 +10,16 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 @@ -28,12 +27,14 @@ 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") diff --git a/pyvcell/_internal/api/vcell_client/models/simulation_message.py b/pyvcell/_internal/api/vcell_client/models/simulation_message.py index f422524..63a19a0 100644 --- a/pyvcell/_internal/api/vcell_client/models/simulation_message.py +++ b/pyvcell/_internal/api/vcell_client/models/simulation_message.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,26 +10,25 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,26 +10,25 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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") 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,13 +10,11 @@ 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 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,25 +10,24 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 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..e3b236a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/source_model.py @@ -0,0 +1,90 @@ +# 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..71706c2 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/spatial_selection.py @@ -0,0 +1,156 @@ +# 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..9d80fbb --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/spatial_selection_contour.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 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..f58c9f9 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/spatial_selection_membrane.py @@ -0,0 +1,134 @@ +# 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..ee66da7 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/spatial_selection_volume.py @@ -0,0 +1,125 @@ +# 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..de1016f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/specialclaim.py @@ -0,0 +1,37 @@ +# 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..9d61dee --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/spline.py @@ -0,0 +1,158 @@ +# 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..a28d019 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/standard_export_info.py @@ -0,0 +1,141 @@ +# 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..0e40399 100644 --- a/pyvcell/_internal/api/vcell_client/models/status.py +++ b/pyvcell/_internal/api/vcell_client/models/status.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,13 +10,11 @@ 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 diff --git a/pyvcell/_internal/api/vcell_client/models/status_message.py b/pyvcell/_internal/api/vcell_client/models/status_message.py index 195d34a..97aa5aa 100644 --- a/pyvcell/_internal/api/vcell_client/models/status_message.py +++ b/pyvcell/_internal/api/vcell_client/models/status_message.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,25 +10,24 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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") 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..18d1f6a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/time_mode.py @@ -0,0 +1,35 @@ +# 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..c53777c --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/time_specs.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 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..06ab5d3 100644 --- a/pyvcell/_internal/api/vcell_client/models/user.py +++ b/pyvcell/_internal/api/vcell_client/models/user.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,31 +10,29 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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, @@ -71,9 +71,6 @@ def to_dict(self) -> Dict[str, Any]: 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 +89,7 @@ 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,23 +10,23 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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") 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,23 +10,23 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,23 +10,23 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 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..8387f64 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/v_cell_http_error.py @@ -0,0 +1,89 @@ +# 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..ccb7fea --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/v_cell_site.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 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..2f540a3 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/v_cell_software_version.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.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..a4e4b27 100644 --- a/pyvcell/_internal/api/vcell_client/models/variable_domain.py +++ b/pyvcell/_internal/api/vcell_client/models/variable_domain.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,13 +10,11 @@ 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 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..876d8a8 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/variable_mode.py @@ -0,0 +1,36 @@ +# 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..43ee12c --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/variable_specs.py @@ -0,0 +1,90 @@ +# 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..4a341f2 100644 --- a/pyvcell/_internal/api/vcell_client/models/variable_type.py +++ b/pyvcell/_internal/api/vcell_client/models/variable_type.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,25 +10,24 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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") 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..bfc4c59 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/vc_document_type.py @@ -0,0 +1,37 @@ +# 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..88fc6de --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/vc_image_summary.py @@ -0,0 +1,120 @@ +# 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,31 +10,29 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 from __future__ import annotations - -import json 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 - """ + """ # noqa: E501 - simulation_key: Optional[KeyValue] = Field(default=None, alias="simulationKey") + 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, @@ -71,9 +71,6 @@ def to_dict(self) -> Dict[str, Any]: 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() @@ -96,8 +93,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: ) _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..5ac71ac --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/version.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 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..12b0d5c --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/models/version_flag.py @@ -0,0 +1,98 @@ +# 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..e2dac52 100644 --- a/pyvcell/_internal/api/vcell_client/rest.py +++ b/pyvcell/_internal/api/vcell_client/rest.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import io import json @@ -45,21 +47,26 @@ 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,6 +79,7 @@ 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 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..5dd40cb --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_analytic_curve.py @@ -0,0 +1,68 @@ +# 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_annotated_function_dto.py b/pyvcell/_internal/api/vcell_client/test/test_annotated_function_dto.py new file mode 100644 index 0000000..a8153cf --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_annotated_function_dto.py @@ -0,0 +1,68 @@ +# 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..36ec971 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_application_info.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.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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,10 +10,12 @@ 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.batch_system_type import BatchSystemType + class TestBatchSystemType(unittest.TestCase): """BatchSystemType unit test stubs""" 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest @@ -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() 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..3c00084 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_bio_model_child_summary.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 + +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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest @@ -31,17 +33,38 @@ 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 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..423858b --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_bio_model_summary.py @@ -0,0 +1,151 @@ +# 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..658ce6e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_composite_curve.py @@ -0,0 +1,61 @@ +# 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..17766f2 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_control_point_curve.py @@ -0,0 +1,71 @@ +# 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_key_value.py b/pyvcell/_internal/api/vcell_client/test/test_coordinate.py similarity index 56% rename from pyvcell/_internal/api/vcell_client/test/test_key_value.py rename to pyvcell/_internal/api/vcell_client/test/test_coordinate.py index 1fab973..dce5280 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_key_value.py +++ b/pyvcell/_internal/api/vcell_client/test/test_coordinate.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,15 +10,15 @@ 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.key_value import KeyValue +from pyvcell._internal.api.vcell_client.models.coordinate import Coordinate -class TestKeyValue(unittest.TestCase): - """KeyValue unit test stubs""" +class TestCoordinate(unittest.TestCase): + """Coordinate unit test stubs""" def setUp(self): pass @@ -24,25 +26,27 @@ def setUp(self): def tearDown(self): pass - def make_instance(self, include_optional) -> KeyValue: - """Test KeyValue + 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 `KeyValue` + # uncomment below to create an instance of `Coordinate` """ - model = KeyValue() + model = Coordinate() if include_optional: - return KeyValue( - value = 1.337 + return Coordinate( + x = 1.337, + y = 1.337, + z = 1.337 ) else: - return KeyValue( + return Coordinate( ) """ - def testKeyValue(self): - """Test KeyValue""" + def testCoordinate(self): + """Test Coordinate""" # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) 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..2f1c581 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_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.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..3afb325 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_curve_selection_info.py @@ -0,0 +1,79 @@ +# 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,10 +10,12 @@ 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.detailed_state import DetailedState + class TestDetailedState(unittest.TestCase): """DetailedState unit test stubs""" diff --git a/pyvcell/_internal/api/vcell_client/test/test_domain.py b/pyvcell/_internal/api/vcell_client/test/test_domain.py index 53ba49d..f978e73 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_domain.py +++ b/pyvcell/_internal/api/vcell_client/test/test_domain.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..a284ab4 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_export_event.py @@ -0,0 +1,81 @@ +# 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..a798519 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_export_progress_type.py @@ -0,0 +1,35 @@ +# 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..39e4c34 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_export_resource_api.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 + +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..71a3d0f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_exportable_data_type.py @@ -0,0 +1,35 @@ +# 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..c3c8949 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_extent.py +++ b/pyvcell/_internal/api/vcell_client/test/test_extent.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest @@ -34,21 +36,18 @@ def make_instance(self, include_optional) -> 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, ), + 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( diff --git a/pyvcell/_internal/api/vcell_client/test/test_analyzed_results_from_field_data.py b/pyvcell/_internal/api/vcell_client/test/test_field_data.py similarity index 70% rename from pyvcell/_internal/api/vcell_client/test/test_analyzed_results_from_field_data.py rename to pyvcell/_internal/api/vcell_client/test/test_field_data.py index d096941..8953fee 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_analyzed_results_from_field_data.py +++ b/pyvcell/_internal/api/vcell_client/test/test_field_data.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,15 +10,15 @@ 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.analyzed_results_from_field_data import AnalyzedResultsFromFieldData +from pyvcell._internal.api.vcell_client.models.field_data import FieldData -class TestAnalyzedResultsFromFieldData(unittest.TestCase): - """AnalyzedResultsFromFieldData unit test stubs""" +class TestFieldData(unittest.TestCase): + """FieldData unit test stubs""" def setUp(self): pass @@ -24,16 +26,16 @@ def setUp(self): def tearDown(self): pass - def make_instance(self, include_optional) -> AnalyzedResultsFromFieldData: - """Test AnalyzedResultsFromFieldData + 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 `AnalyzedResultsFromFieldData` + # uncomment below to create an instance of `FieldData` """ - model = AnalyzedResultsFromFieldData() + model = FieldData() if include_optional: - return AnalyzedResultsFromFieldData( + return FieldData( short_spec_data = [ [ [ @@ -41,6 +43,13 @@ def make_instance(self, include_optional) -> AnalyzedResultsFromFieldData: ] ] ], + double_spec_data = [ + [ + [ + 1.337 + ] + ] + ], var_names = [ '' ], @@ -63,12 +72,12 @@ def make_instance(self, include_optional) -> AnalyzedResultsFromFieldData: name = '' ) else: - return AnalyzedResultsFromFieldData( + return FieldData( ) """ - def testAnalyzedResultsFromFieldData(self): - """Test AnalyzedResultsFromFieldData""" + def testFieldData(self): + """Test FieldData""" # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest @@ -34,23 +36,22 @@ def make_instance(self, include_optional) -> 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, ), + 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 = , ), - external_data_annotation = '', - external_data_id_sim_refs = [ - pyvcell._internal.api.vcell_client.models.key_value.KeyValue( - value = 1.337, ) + data_key = '', ), + annotation = '', + simulations_referencing_this_id = [ + '' ] ) else: 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest @@ -24,38 +26,66 @@ 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 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_copy_models_field_data(self) -> None: + """Test case for copy_models_field_data + + Copy all existing field data from a BioModel/MathModel that you have access to, but don't own. + """ + pass + + def test_create_from_file(self) -> None: + """Test case for create_from_file - Analyze the field data from the uploaded file. Filenames must be lowercase alphanumeric, and can contain underscores. + Submit a .zip or .tif file that converts into field data, with all defaults derived from the file submitted. """ pass - def test_create_field_data_from_analyzed_file(self) -> None: - """Test case for create_field_data_from_analyzed_file + def test_create_from_simulation(self) -> None: + """Test case for create_from_simulation - Take the analyzed results of the field data, modify it to your liking, then save it on the server. + Create new field data from existing simulation results. """ pass - def test_delete_field_data(self) -> None: - """Test case for delete_field_data + 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 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_saved_results.py similarity index 58% rename from pyvcell/_internal/api/vcell_client/test/test_field_data_save_results.py rename to pyvcell/_internal/api/vcell_client/test/test_field_data_saved_results.py index 0ae7582..06451e7 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_field_data_save_results.py +++ b/pyvcell/_internal/api/vcell_client/test/test_field_data_saved_results.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,15 +10,15 @@ 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_save_results import FieldDataSaveResults +from pyvcell._internal.api.vcell_client.models.field_data_saved_results import FieldDataSavedResults -class TestFieldDataSaveResults(unittest.TestCase): - """FieldDataSaveResults unit test stubs""" +class TestFieldDataSavedResults(unittest.TestCase): + """FieldDataSavedResults unit test stubs""" def setUp(self): pass @@ -24,26 +26,26 @@ def setUp(self): def tearDown(self): pass - def make_instance(self, include_optional) -> FieldDataSaveResults: - """Test FieldDataSaveResults + 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 `FieldDataSaveResults` + # uncomment below to create an instance of `FieldDataSavedResults` """ - model = FieldDataSaveResults() + model = FieldDataSavedResults() if include_optional: - return FieldDataSaveResults( + return FieldDataSavedResults( field_data_name = '', - field_data_id = '' + field_data_key = '' ) else: - return FieldDataSaveResults( + return FieldDataSavedResults( ) """ - def testFieldDataSaveResults(self): - """Test FieldDataSaveResults""" + def testFieldDataSavedResults(self): + """Test FieldDataSavedResults""" # inst_req_only = self.make_instance(include_optional=False) # inst_req_and_optional = self.make_instance(include_optional=True) 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..5e6d24b --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_function_category.py @@ -0,0 +1,35 @@ +# 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..6d27f55 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_geometry_mode.py @@ -0,0 +1,35 @@ +# 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..08b8ffe --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_geometry_resource_api.py @@ -0,0 +1,51 @@ +# 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..c5f2c94 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_geometry_spec_dto.py @@ -0,0 +1,109 @@ +# 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..58200ab --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_geometry_summary.py @@ -0,0 +1,94 @@ +# 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..a86a232 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_gif_image.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.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..93c9817 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_group_access.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.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..81042b2 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_group_access_all.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.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..08c0eae --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_group_access_none.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.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..ee12646 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_group_access_some.py @@ -0,0 +1,83 @@ +# 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..dcf172e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_human_readable_export_data.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.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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest diff --git a/pyvcell/_internal/api/vcell_client/test/test_identity.py b/pyvcell/_internal/api/vcell_client/test/test_identity.py index a472400..722b5a2 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_identity.py +++ b/pyvcell/_internal/api/vcell_client/test/test_identity.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..b28aec7 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_math_model_child_summary.py @@ -0,0 +1,61 @@ +# 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..68e9428 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_math_model_resource_api.py @@ -0,0 +1,51 @@ +# 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..60d352e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_math_model_summary.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 + +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..96b6bb5 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_math_type.py @@ -0,0 +1,35 @@ +# 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..b5671d6 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_model_type.py @@ -0,0 +1,35 @@ +# 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..bc6f33a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_n5_export_request.py @@ -0,0 +1,141 @@ +# 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..eecc5cf 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_origin.py +++ b/pyvcell/_internal/api/vcell_client/test/test_origin.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest diff --git a/pyvcell/_internal/api/vcell_client/test/test_publication.py b/pyvcell/_internal/api/vcell_client/test/test_publication.py index 8c5733e..139baa8 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_publication.py +++ b/pyvcell/_internal/api/vcell_client/test/test_publication.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..3ba6fdc --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_publication_info.py @@ -0,0 +1,71 @@ +# 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest @@ -55,7 +57,7 @@ def test_get_publications(self) -> None: def test_update_publication(self) -> None: """Test case for update_publication - Create publication + Update publication """ pass 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..6a83233 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_sampled_curve.py @@ -0,0 +1,59 @@ +# 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,10 +10,12 @@ 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.scheduler_status import SchedulerStatus + class TestSchedulerStatus(unittest.TestCase): """SchedulerStatus unit test stubs""" 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest @@ -36,15 +38,14 @@ 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 = '', ), + 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( 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,10 +10,12 @@ 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.simulation_queue_id import SimulationQueueID + class TestSimulationQueueID(unittest.TestCase): """SimulationQueueID unit test stubs""" 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest @@ -24,8 +26,15 @@ 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. """ 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..0724c86 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_source_model.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.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..2076443 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection.py @@ -0,0 +1,105 @@ +# 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..7b01639 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_contour.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_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..e282c06 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_membrane.py @@ -0,0 +1,64 @@ +# 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..ccc495b --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_spatial_selection_volume.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.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..270433b --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_specialclaim.py @@ -0,0 +1,35 @@ +# 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..d2b34cc --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_spline.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.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..71b9d01 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_standard_export_info.py @@ -0,0 +1,145 @@ +# 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..f35e257 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_status.py +++ b/pyvcell/_internal/api/vcell_client/test/test_status.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,10 +10,12 @@ 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.status import Status + class TestStatus(unittest.TestCase): """Status unit test stubs""" 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest @@ -37,15 +39,14 @@ def make_instance(self, include_optional) -> StatusMessage: job_status = pyvcell._internal.api.vcell_client.models.simulation_job_status_record.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 = '', ), + 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( 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..8208a9d --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_time_mode.py @@ -0,0 +1,35 @@ +# 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..2c0788f --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_time_specs.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.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..4c460ee 100644 --- a/pyvcell/_internal/api/vcell_client/test/test_user.py +++ b/pyvcell/_internal/api/vcell_client/test/test_user.py @@ -1,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest @@ -35,10 +37,10 @@ def make_instance(self, include_optional) -> 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( 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..cd2f749 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_v_cell_http_error.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.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..0c8b23b --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_v_cell_site.py @@ -0,0 +1,35 @@ +# 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..1300c4e --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_v_cell_software_version.py @@ -0,0 +1,61 @@ +# 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,10 +10,12 @@ 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_domain import VariableDomain + class TestVariableDomain(unittest.TestCase): """VariableDomain unit test stubs""" 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..590b214 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_variable_mode.py @@ -0,0 +1,35 @@ +# 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..f1af341 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_variable_specs.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.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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest 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..0c35e2c --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_vc_document_type.py @@ -0,0 +1,35 @@ +# 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..b4752f7 --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_vc_image_resource_api.py @@ -0,0 +1,51 @@ +# 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..0fc87fe --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_vc_image_summary.py @@ -0,0 +1,98 @@ +# 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..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,3 +1,5 @@ +# coding: utf-8 + """ VCell API @@ -8,7 +10,7 @@ Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. -""" +""" # noqa: E501 import unittest @@ -34,15 +36,14 @@ def make_instance(self, include_optional) -> 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 = '' + key = '', + my_specials = [ + 'admins' + ], ), + id = '' ) else: return VCSimulationIdentifier( 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..22782fe --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_version.py @@ -0,0 +1,73 @@ +# 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..67cf61a --- /dev/null +++ b/pyvcell/_internal/api/vcell_client/test/test_version_flag.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.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..539101a 100644 --- a/pyvcell/_internal/api/vcell_client_README.md +++ b/pyvcell/_internal/api/vcell_client_README.md @@ -6,13 +6,13 @@ The `pyvcell._internal.api.vcell_client` package is automatically generated by t - 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,7 +20,7 @@ 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 +- urllib3 >= 2.1.0, < 3.0.0 - python-dateutil >= 2.8.2 - pydantic >= 2 - typing-extensions >= 4.7.1 @@ -36,10 +36,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,80 +65,152 @@ 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) 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..c4b5a00 --- /dev/null +++ b/pyvcell/_internal/geometry/segmented_image_geometry.py @@ -0,0 +1,96 @@ +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/_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"] = { 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() diff --git a/pyvcell/vcml/__init__.py b/pyvcell/vcml/__init__.py index d098076..78a1c5f 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, @@ -21,6 +22,7 @@ SubVolumeType, SurfaceClass, VCMLDocument, + Version, ) from pyvcell.vcml.utils import ( field_data_refs, @@ -43,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 @@ -72,6 +75,7 @@ "BoundaryType", "Application", "Simulation", + "Version", "update_biomodel", "field_data_refs", "to_vcml_str", @@ -89,9 +93,14 @@ "get_workspace_dir", "set_workspace_dir", "simulate", + "run_remote", + "save_and_start", + "wait_for_simulation", + "export_n5", "Field", "load_vcml_url", "load_sbml_url", "suppress_stdout", "restore_stdout", + "SegmentedImageGeometry", ] diff --git a/pyvcell/vcml/models.py b/pyvcell/vcml/models.py index 844bddb..6937303 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] @@ -350,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, ...]: @@ -422,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..d69cbc6 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,13 @@ 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: diff --git a/pyvcell/vcml/vcml_remote.py b/pyvcell/vcml/vcml_remote.py new file mode 100644 index 0000000..24f71a2 --- /dev/null +++ b/pyvcell/vcml/vcml_remote.py @@ -0,0 +1,293 @@ +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-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 +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(variableNames=variable_names, mode=VariableMode.VARIABLE_ONE) + else: + var_specs = VariableSpecs(variableNames=variable_names, mode=VariableMode.VARIABLE_MULTI) + + request = N5ExportRequest( + 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, + ), + ), + exportableDataType=ExportableDataType.PDE_VARIABLE_DATA, + datasetName=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 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) + 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, + ) diff --git a/pyvcell/vcml/vcml_writer.py b/pyvcell/vcml/vcml_writer.py index 46facaf..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 @@ -15,6 +17,7 @@ SpeciesMapping, SubVolumeType, VCMLDocument, + Version, ) @@ -44,6 +47,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", 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", attrib=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 +79,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 +253,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( 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/openapi.yaml b/scripts/openapi.yaml index 202540f..5ace8ec 100644 --- a/scripts/openapi.yaml +++ b/scripts/openapi.yaml @@ -6,14 +6,14 @@ 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: @@ -43,9 +43,23 @@ paths: schema: $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 @@ -71,9 +85,23 @@ paths: items: $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 @@ -99,9 +127,23 @@ paths: items: $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 @@ -120,162 +162,164 @@ 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: + /api/v1/bioModel: post: tags: - Bio Model Resource - summary: Upload the BioModel to VCell database. Returns BioModel ID. - operationId: uploadBioModel + 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 - /api/v1/bioModel/{bioModelID}: + /api/v1/bioModel/summaries: get: tags: - Bio Model Resource - summary: Get BioModel information in JSON format by ID. - operationId: getBiomodelById + summary: Return BioModel summaries. + operationId: getBioModelSummaries parameters: - - name: bioModelID - in: path - required: true + - name: includePublicAndShared + in: query + description: + Includes BioModel summaries that are public or shared with requester. + Default is true. + required: false schema: - type: string + type: boolean responses: "200": - description: return BioModel information in JSON format + description: OK content: application/json: schema: - $ref: "#/components/schemas/BioModel" - "404": - description: BioModel not found - delete: + 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: Delete the BioModel from VCell's database. - operationId: deleteBioModel + summary: Get BioModel. + operationId: getBioModel parameters: - name: bioModelID in: path required: true schema: type: string - responses: - "204": - description: No Content - /api/v1/fieldData/IDs: - get: - tags: - - Field Data Resource - summary: "Get all of the ids used to identify, and retrieve field data." - operationId: getAllFieldDataIDs responses: "200": description: OK content: application/json: schema: - type: array - items: - $ref: "#/components/schemas/FieldDataReference" - "401": - description: Not Authorized + $ref: "#/components/schemas/BioModel" "403": description: Not Allowed - security: - - openId: - - user - /api/v1/fieldData/analyzeFieldDataFile: - post: - 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 - responses: - "200": - description: OK content: application/json: schema: - $ref: "#/components/schemas/AnalyzedResultsFromFieldData" - "401": - description: Not Authorized - "403": - description: Not Allowed - security: - - openId: - - user - /api/v1/fieldData/createFieldDataFromAnalyzedFile: - 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 - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/AnalyzedResultsFromFieldData" - responses: - "200": - description: OK + $ref: "#/components/schemas/VCellHTTPError" + "404": + description: Not found content: application/json: schema: - $ref: "#/components/schemas/FieldDataSaveResults" - "401": - description: Not Authorized - "403": - description: Not Allowed - security: - - openId: - - user - /api/v1/fieldData/delete/{fieldDataID}: + $ref: "#/components/schemas/VCellHTTPError" + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: "#/components/schemas/VCellHTTPError" delete: tags: - - Field Data Resource - summary: Delete the selected field data. - operationId: deleteFieldData + - Bio Model Resource + summary: Delete the BioModel from VCell's database. + operationId: deleteBioModel parameters: - - name: fieldDataID + - name: bioModelID in: path required: true schema: @@ -284,22 +328,33 @@ paths: "204": description: No Content "401": - description: Not Authorized + description: Not Authenticated + content: + application/json: + schema: + $ref: "#/components/schemas/VCellHTTPError" "403": description: Not Allowed - security: - - openId: - - user - /api/v1/fieldData/fieldDataShape/{fieldDataID}: + 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 + - Bio Model Resource summary: - "Get the shape of the field data. That is it's size, origin, extent,\ - \ and data identifiers." - operationId: getFieldDataShapeFromID + "All of the text based information about a BioModel (summary, version,\ + \ publication status, etc...), but not the actual BioModel itself." + operationId: getBioModelSummary parameters: - - name: fieldDataID + - name: bioModelID in: path required: true schema: @@ -310,76 +365,70 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/FieldDataShape" - "401": - description: Not Authorized + $ref: "#/components/schemas/BioModelSummary" "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 content: application/json: schema: - $ref: "#/components/schemas/HelloWorldMessage" - /api/v1/publications: - get: - tags: - - Publication Resource - summary: Get all publications - operationId: getPublications - responses: - "200": - description: OK + $ref: "#/components/schemas/VCellHTTPError" + "500": + description: Data Access Exception content: application/json: schema: - type: array - items: - $ref: "#/components/schemas/Publication" - put: + $ref: "#/components/schemas/VCellHTTPError" + /api/v1/bioModel/{bioModelID}/vcml_download: + get: tags: - - Publication Resource - summary: Update publication - operationId: updatePublication - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/Publication" + - 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/Publication" - "401": - description: Not Authorized + type: string "403": description: Not Allowed - security: - - openId: - - user + 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: - - Publication Resource - summary: Create publication - operationId: createPublication + - 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/Publication" + $ref: "#/components/schemas/N5ExportRequest" responses: "200": description: OK @@ -388,21 +437,1234 @@ paths: schema: 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/publications/{id}: + /api/v1/export/status: get: tags: - - Publication Resource - summary: Get publication by ID - operationId: getPublicationById + - Export Resource + description: + Get the status of your export jobs past the timestamp (Unix epoch + in seconds). + operationId: exportStatus parameters: - - name: id + - name: timestamp + in: query + schema: + format: int64 + type: integer + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ExportEvent" + "401": + 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 + /api/v1/fieldData/IDs: + get: + tags: + - Field Data Resource + summary: "Get all of the ids used to identify, and retrieve field data." + operationId: getAllIDs + responses: + "200": + description: OK + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/FieldDataReference" + "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/advancedCreate: + post: + tags: + - 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: + multipart/form-data: + schema: + 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: + $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/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 + summary: Get publication by ID + operationId: getPublicationById + parameters: + - name: id in: path required: true schema: @@ -415,6 +1677,12 @@ paths: application/json: schema: $ref: "#/components/schemas/Publication" + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: "#/components/schemas/VCellHTTPError" delete: tags: - Publication Resource @@ -431,9 +1699,29 @@ paths: "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 @@ -468,6 +1756,12 @@ 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: @@ -493,6 +1787,12 @@ 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: @@ -507,9 +1807,19 @@ paths: schema: $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 @@ -551,6 +1861,12 @@ paths: application/json: schema: $ref: "#/components/schemas/AccesTokenRepresentationRecord" + "500": + description: Data Access Exception + content: + application/json: + schema: + $ref: "#/components/schemas/VCellHTTPError" /api/v1/users/mapUser: post: tags: @@ -570,9 +1886,23 @@ 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 @@ -590,9 +1920,25 @@ paths: schema: $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 @@ -624,11 +1970,21 @@ paths: "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 @@ -648,6 +2004,18 @@ paths: 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: @@ -669,9 +2037,25 @@ paths: "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 @@ -695,9 +2079,23 @@ 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 @@ -711,45 +2109,70 @@ components: creationDateSeconds: format: int64 type: integer - expireDateSeconds: - format: int64 - type: integer - userId: - type: string - userKey: - type: string - AnalyzedResultsFromFieldData: - type: object - 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: + expireDateSeconds: + format: int64 + type: integer + userId: type: string - name: + userKey: + type: string + AnalyticCurve: + required: + - type + type: object + allOf: + - $ref: "#/components/schemas/Curve" + properties: + type: + default: AnalyticCurve + type: string + 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 @@ -791,6 +2214,76 @@ components: type: array items: $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 +2300,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: @@ -886,6 +2518,45 @@ components: 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: @@ -922,42 +2593,202 @@ components: type: boolean dataKey: $ref: "#/components/schemas/KeyValue" - FieldDataReference: + 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 + sliceNumber: + format: int32 + type: integer + geometryMode: + $ref: "#/components/schemas/GeometryMode" + GeometrySummary: + type: object + properties: + 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: - externalDataIdentifier: - $ref: "#/components/schemas/ExternalDataIdentifier" - externalDataAnnotation: + 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: @@ -973,6 +2804,38 @@ components: type: string 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 +2870,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 +2930,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: @@ -1084,6 +3005,68 @@ components: $ref: "#/components/schemas/MathmodelRef" 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 @@ -1170,6 +3153,137 @@ components: 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 @@ -1198,6 +3312,27 @@ 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: @@ -1205,10 +3340,10 @@ components: type: string key: $ref: "#/components/schemas/KeyValue" - name: - type: string - testAccount: - type: boolean + mySpecials: + type: array + items: + $ref: "#/components/schemas/SPECIAL_CLAIM" UserIdentityJSONSafe: type: object properties: @@ -1242,6 +3377,26 @@ 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: @@ -1249,7 +3404,47 @@ components: $ref: "#/components/schemas/KeyValue" owner: $ref: "#/components/schemas/User" - iD: + 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: @@ -1261,6 +3456,21 @@ components: - 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: @@ -1283,6 +3493,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 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." 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/__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..fb8b45b --- /dev/null +++ b/tests/_internal/geometry/test_segmented_image_geometry.py @@ -0,0 +1,162 @@ +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) 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..3db74db --- /dev/null +++ b/tests/guides/test_notebooks.py @@ -0,0 +1,48 @@ +"""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" + +SKIP_NOTEBOOKS = {"remote-simulations"} + +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.""" + 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( # noqa: S603 + [ + 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}" 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, ), 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..712a9fb 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.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.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)