Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
cc09e1a
documentation as guides and API docs
jcschaff Mar 4, 2026
3718d79
extract SegmentedImageGeometry and fix image/analytic geometry raster…
jcschaff Mar 6, 2026
6875085
add optional save_path parameter to plot methods
jcschaff Mar 6, 2026
e62a639
add notebook-generated images to markdown guides and notebook executi…
jcschaff Mar 6, 2026
869587a
add docs-execute-notebooks make target and gitignore notebook workspace
jcschaff Mar 6, 2026
3a017f6
fixed zarr_writer to consider domain masks when computing statistics
jcschaff Mar 8, 2026
777f2a0
improve models for complex-geometries and building-a-model guides
jcschaff Mar 8, 2026
e916f5e
regenerate vcell api python client
jcschaff Mar 8, 2026
23f22e4
fix API client bugs: base URL, Accept header, XML deserialization
jcschaff Mar 9, 2026
b5e6bb4
Add Version model to VCML pydantic models
jcschaff Mar 9, 2026
f72649a
Add remote-simulations tutorial notebook and docs integration
jcschaff Mar 9, 2026
ada30ea
Update viz-concentrations image
jcschaff Mar 9, 2026
44e55af
Use TensorStore to read remote N5 export results
jcschaff Mar 9, 2026
2c248c6
Add high-level convenience API for remote VCell simulations
jcschaff Mar 19, 2026
c942dcc
update poetry.lock for MacOS 15
jcschaff Mar 19, 2026
72b3a67
Fix ruff lint errors after rebase on main
jcschaff Mar 19, 2026
4569d1b
dded xvfb-run wrapper + xvfb install step to CI workflow
jcschaff Mar 19, 2026
4df488f
zarr_writer (domain-masked stats) changed mean_values expected values
jcschaff Mar 19, 2026
5006bf7
write version objects to XML for biomodels and simulations, round trip
jcschaff Mar 19, 2026
182fc37
Reformat regenerated API client after rebase
jcschaff Mar 19, 2026
0a03b2a
Reformat docs and regenerate guide images after rebase
jcschaff Mar 19, 2026
2834703
Add Version XML write support for VCML roundtrip and fix mypy errors
jcschaff Mar 19, 2026
1222289
Fix tests: update expected values for domain-masked stats, use Agg ba…
jcschaff Mar 19, 2026
ae8ee5f
lint error
jcschaff Mar 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 4 additions & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -183,3 +183,5 @@ examples/notebooks/workspace/

examples/scripts/workspace/
workspace

docs/guides/notebooks/workspace/
207 changes: 207 additions & 0 deletions .openapi-generator/FILES
Original file line number Diff line number Diff line change
@@ -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
1 change: 1 addition & 0 deletions .openapi-generator/VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
7.20.0
5 changes: 5 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
56 changes: 56 additions & 0 deletions docs/getting-started/installation.md
Original file line number Diff line number Diff line change
@@ -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
Loading
Loading