Skip to content

Commit

Permalink
added unit test for vcell api get publications, fixed some python typing
Browse files Browse the repository at this point in the history
  • Loading branch information
jcschaff committed Jan 23, 2025
1 parent efd77e8 commit a8c099c
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 10 deletions.
5 changes: 2 additions & 3 deletions examples/vcell_publications.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
{
"cell_type": "code",
"source": [
"from pyvcell.api.vcell_client.api_client import ApiClient, Configuration\n",
"from pyvcell.api.vcell_client import ApiClient, Configuration, PublicationResourceApi\n",
"from pyvcell.api.vcell_client.auth.auth_utils import login_interactive\n",
"from pyvcell.api.vcell_client import Publication\n",
"from pyvcell.api.vcell_client.api.publication_resource_api import PublicationResourceApi"
"from pyvcell.api.vcell_client.models import Publication"
],
"metadata": {
"collapsed": false,
Expand Down
20 changes: 20 additions & 0 deletions pyvcell/api/vcell_client/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,23 @@
from pyvcell.api.vcell_client.models.vc_simulation_identifier import VCSimulationIdentifier
from pyvcell.api.vcell_client.models.variable_domain import VariableDomain
from pyvcell.api.vcell_client.models.variable_type import VariableType

__all__ = [
"AdminResourceApi",
"BioModelResourceApi",
"FieldDataResourceApi",
"HelloWorldApi",
"PublicationResourceApi",
"SimulationResourceApi",
"UsersResourceApi",

"ApiResponse",
"ApiClient",
"Configuration",
"OpenApiException",
"ApiTypeError",
"ApiValueError",
"ApiKeyError",
"ApiAttributeError",
"ApiException",
]
41 changes: 41 additions & 0 deletions pyvcell/api/vcell_client/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,44 @@
from pyvcell.api.vcell_client.models.vc_simulation_identifier import VCSimulationIdentifier
from pyvcell.api.vcell_client.models.variable_domain import VariableDomain
from pyvcell.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",
]
Empty file added tests/__init__.py
Empty file.
5 changes: 3 additions & 2 deletions tests/expression_test.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import numpy as np
from numpy.typing import NDArray

from pyvcell.simdata.simdata_models import NamedFunction, VariableType

Expand All @@ -11,7 +12,7 @@ def test_namedfunction_eval_add() -> None:
bindings = {"v0": a, "v1": b, "v2": c}

function = NamedFunction(name="func1", vcell_expression=vcell_expression, variable_type=VariableType.VOLUME)
d: np.ndarray = function.evaluate(variable_bindings=bindings)
d: NDArray[np.float64] = function.evaluate(variable_bindings=bindings)

assert np.array_equal(d, a + b + c)
assert np.array_equal(d, np.array([12, 15, 18]))
Expand All @@ -26,7 +27,7 @@ def test_namedfunction_eval_power() -> None:
bindings = {"v0": a, "v1": b, "v2": c}

function = NamedFunction(name="func1", vcell_expression=vcell_expression, variable_type=VariableType.VOLUME)
d: np.ndarray = function.evaluate(variable_bindings=bindings)
d: NDArray[np.float64] = function.evaluate(variable_bindings=bindings)

assert np.array_equal(d, a + b**c)
assert np.array_equal(d, np.array([a[0] + b[0] ** c[0], a[1] + b[1] ** c[1], a[2] + b[2] ** c[2]]))
Expand Down
31 changes: 31 additions & 0 deletions tests/vcell_client/test_publication_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from datetime import date

from pyvcell.api.vcell_client import Configuration, ApiClient, PublicationResourceApi
from pyvcell.api.vcell_client.models import Publication, BiomodelRef


def test_get_publications() -> None:
api_url: str = "https://vcell-dev.cam.uchc.edu" # vcell base url

public_client = ApiClient(configuration=Configuration(host=api_url))

public_publication_api = PublicationResourceApi(public_client)
pubs: list[Publication] = public_publication_api.get_publications()
example_pub = Publication(pub_key=279906235, # type: ignore
title='A continuum model of mechanosensation based on contractility kit assembly',
authors=['Dolgitzer', ' D.', ' Plaza-Rodríguez', ' A. I.', ' Iglesias', ' M. A.', ' Jacob', ' M. A. C.', ' Todd', ' B.', ' Robinson', ' D. N.', ' & Iglesias', ' P. A.'],
year=2024,
citation='Biophys J. 2024 Nov 8:S0006-3495(24)00708-2',
pubmedid='39521955',
doi='https://doi.org/10.1016/j.bpj.2024.10.020',
endnoteid=0,
url='url',
wittid=0,
biomodel_refs=[BiomodelRef(bm_key=279851639, # type: ignore
name='Dolgitzer 2025 A Continuum Model of Mechanosensation Based on Contractility Kit Assembly',
owner_name='Dolgitzer',
owner_key=259537152,
version_flag=3)],
mathmodel_refs=[],
var_date=date(year=2024, month=11, day=26))
assert pubs[0] == example_pub
11 changes: 6 additions & 5 deletions tests/vcell_parsing_test.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from pathlib import Path

import numpy as np
from numpy.typing import NDArray

from pyvcell.simdata.mesh import CartesianMesh
from pyvcell.simdata.postprocessing import ImageMetadata, PostProcessing, StatisticType, VariableInfo
Expand Down Expand Up @@ -53,7 +54,7 @@ def test_parse_vcelldata() -> None:
for t in pde_dataset.times():
for v in pde_dataset.variables_block_headers():
data = pde_dataset.get_data(v.var_info, t)
if data.size > 0 and v == "cytosol::RanC_cyt":
if data.size > 0 and v.var_info.var_name == "cytosol::RanC_cyt":
print(f"v={v}, t={t}, shape={data.shape}, min={np.min(data)}, max={np.max(data)}")
teardown_files()

Expand Down Expand Up @@ -158,11 +159,11 @@ def test_function_eval() -> None:
max_values = []
for t in pde_dataset.times():
# for "RanC_cyt - (1000.0 * C_cyt * Ran_cyt)"
RanC_cyt: np.ndarray = pde_dataset.get_data("cytosol::RanC_cyt", t)
C_cyt: np.ndarray = pde_dataset.get_data("cytosol::C_cyt", t)
Ran_cyt: np.ndarray = pde_dataset.get_data("cytosol::Ran_cyt", t)
RanC_cyt: NDArray[np.float64] = pde_dataset.get_data("cytosol::RanC_cyt", t)
C_cyt: NDArray[np.float64] = pde_dataset.get_data("cytosol::C_cyt", t)
Ran_cyt: NDArray[np.float64] = pde_dataset.get_data("cytosol::Ran_cyt", t)
bindings = {"RanC_cyt": RanC_cyt, "C_cyt": C_cyt, "Ran_cyt": Ran_cyt}
J_r0: np.ndarray = function_J_r0.evaluate(bindings)
J_r0: NDArray[np.float64] = function_J_r0.evaluate(bindings)

assert J_r0.shape == (126025,)
assert np.allclose(J_r0, RanC_cyt - (1000.0 * C_cyt * Ran_cyt))
Expand Down

0 comments on commit a8c099c

Please sign in to comment.