From c4e8cd3cd09fa1f154aab703d41c8393622a4281 Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Tue, 25 Aug 2026 08:22:36 -0700 Subject: [PATCH 01/38] feat!: implementing v3 changes --- V3-MIGRATION-GUIDE.md | 426 ++++++++++++++++++ examples/aibs_smartspim_instrument.py | 19 +- examples/aibs_smartspim_procedures.py | 17 +- examples/aind_smartspim_instrument.py | 17 +- examples/barseq_instrument.py | 16 +- examples/bergamo_ophys_acquisition.py | 19 +- examples/ephys_acquisition.py | 40 +- examples/ephys_instrument.py | 23 +- examples/exaspim_acquisition.py | 16 +- examples/exaspim_instrument.py | 18 +- examples/fip_behavior_instrument.py | 19 +- examples/fip_ophys_acquisition.py | 1 + examples/fip_ophys_instrument.py | 19 +- examples/isi_instrument.py | 17 +- examples/model.py | 3 + examples/mri_acquisition.py | 16 +- examples/multiplane_ophys_acquisition.py | 16 +- examples/multiplane_ophys_instrument.py | 29 +- examples/ophys_procedures.py | 34 +- examples/procedures.py | 50 +- examples/slap2_acquisition.py | 2 +- examples/slap2_instrument.py | 19 +- examples/slap2_structure_acquisition.py | 2 +- examples/subject.py | 1 - pyproject.toml | 6 - src/aind_data_schema/__init__.py | 2 +- src/aind_data_schema/base.py | 35 -- src/aind_data_schema/components/configs.py | 64 --- .../components/coordinates.py | 362 +-------------- src/aind_data_schema/components/devices.py | 55 +-- .../components/identifiers.py | 7 +- .../components/specimen_procedures.py | 62 --- src/aind_data_schema/components/stimulus.py | 28 +- .../components/subject_procedures.py | 18 +- src/aind_data_schema/components/subjects.py | 15 - src/aind_data_schema/core/acquisition.py | 16 - src/aind_data_schema/core/data_description.py | 46 -- src/aind_data_schema/core/instrument.py | 58 ++- src/aind_data_schema/core/metadata.py | 10 +- src/aind_data_schema/core/procedures.py | 26 +- src/aind_data_schema/core/quality_control.py | 35 -- src/aind_data_schema/utils/validators.py | 47 +- tests/coordinate_systems.py | 103 +++++ tests/test_acquisition.py | 5 +- tests/test_acquisition_configs.py | 28 +- tests/test_coordinates.py | 310 ------------- tests/test_data_description.py | 87 ++-- tests/test_device.py | 100 +--- tests/test_imaging.py | 8 +- tests/test_instrument.py | 102 +++-- tests/test_metadata.py | 12 +- tests/test_procedures.py | 50 +- tests/test_processing.py | 3 +- tests/test_quality_control.py | 45 -- tests/test_subject.py | 14 - tests/test_subjects.py | 22 +- tests/test_utils_merge.py | 6 +- tests/test_utils_validators.py | 9 +- uv.lock | 252 ----------- 59 files changed, 1138 insertions(+), 1749 deletions(-) create mode 100644 V3-MIGRATION-GUIDE.md create mode 100644 tests/coordinate_systems.py diff --git a/V3-MIGRATION-GUIDE.md b/V3-MIGRATION-GUIDE.md new file mode 100644 index 000000000..0fed6fcc9 --- /dev/null +++ b/V3-MIGRATION-GUIDE.md @@ -0,0 +1,426 @@ +# biodata-schema v3.0.0 Migration Guide + +v3.0.0 removes every field, class, method, and back-compatibility shim that was marked +deprecated in v2.x. All of them used to emit a `DeprecationWarning` (or carried Pydantic's +`deprecated=`) but still validated. They are now gone, and passing them raises a Pydantic +`ValidationError` (`extra_forbidden`), since all schema models forbid extra fields. + +There is no automatic upgrade path for stored JSON. Files written under v2.x that use the +removed fields must be rewritten before they will validate against v3.0.0. + +## Contents + +1. [`coordinate_system` renamed to `global_`/`local_coordinate_system`](#1-coordinate_system-renamed) +2. [`Section` coordinate fields moved to `PlanarSection`](#2-section-coordinate-fields) +3. [Device fields replaced by `shape`](#3-device-size-fields-replaced-by-shape) +4. [`DAQChannel.channel_index`](#4-daqchannelchannel_index) +5. [`BreedingInfo.breeding_group`](#5-breedinginfobreeding_group) +6. [Olfactory stimulus classes](#6-olfactory-stimulus-classes) +7. [`DataDescription.from_*` classmethods](#7-datadescriptionfrom_-classmethods) +8. [`QCMetric.tags` list form](#8-qcmetrictags-list-form) +9. [`CoordinateSystemLibrary` removed](#9-coordinatesystemlibrary-removed) +10. [Removed helper](#10-removed-helper) +11. [Warnings promoted to errors](#11-warnings-promoted-to-errors) +12. [Validators still emitting warnings](#12-validators-still-emitting-warnings) + +--- + +## 1. `coordinate_system` renamed + +v2.x split `coordinate_system` into `global_coordinate_system` on top-level and container +models, and `local_coordinate_system` on device and config models. The old field stayed +alongside the new one, and a `model_validator(mode="before")` copied the old value forward +with a `DeprecationWarning`. + +The old field and the copy-forward validators are both removed. + +### Renamed to `global_coordinate_system` + +| Model | Module | +| --- | --- | +| `Acquisition` | `core/acquisition.py` | +| `Procedures` | `core/procedures.py` | +| `Instrument` | `core/instrument.py` | +| `Surgery` | `components/subject_procedures.py` | +| `PlanarSectioning` | `components/specimen_procedures.py` | + +### Renamed to `local_coordinate_system` + +| Model | Module | +| --- | --- | +| `DevicePosition` (and every subclass, e.g. `Monitor`) | `components/devices.py` | +| `ImagingConfig` | `components/configs.py` | +| `LickSpoutConfig` | `components/configs.py` | +| `AirPuffConfig` | `components/configs.py` | +| `ManipulatorConfig` | `components/configs.py` | +| `ProbeConfig` | `components/configs.py` | + +**Before** + +```python +Acquisition(..., coordinate_system=CoordinateSystemLibrary.BREGMA_ARI) +ProbeConfig(..., coordinate_system=CoordinateSystemLibrary.BREGMA_ARI) +``` + +**After** + +```python +Acquisition(..., global_coordinate_system=CoordinateSystemLibrary.BREGMA_ARI) +ProbeConfig(..., local_coordinate_system=CoordinateSystemLibrary.BREGMA_ARI) +``` + +> Not affected: `AtlasCoordinate.coordinate_system` is a different field that holds an +> `Atlas`. Do not rename it. + +`Instrument.global_coordinate_system` and the `local_coordinate_system` fields on +`ManipulatorConfig` and `ProbeConfig` are required. If you relied on the old field being +copied forward, set the new field explicitly. + +## 2. `Section` coordinate fields + +`Section` had six coordinate fields that duplicated `PlanarSection`. They are removed from +`Section`. Use `PlanarSection` for any section with coordinate data. + +Removed from `Section` (`components/specimen_procedures.py`): + +- `coordinate_system_name` +- `start_coordinate` +- `end_coordinate` +- `thickness` +- `thickness_unit` +- `partial_slice` + +The `deprecated_coordinate_fields` validator that warned on these is also removed. + +**Before** + +```python +Section(output_specimen_id="123456_001", coordinate_system_name="BREGMA_ARI", thickness=0.1) +``` + +**After** + +```python +PlanarSection(output_specimen_id="123456_001", coordinate_system_name="BREGMA_ARI", + start_coordinate=Translation(translation=[0.3, 0, 0]), thickness=0.1) +``` + +`PlanarSection` requires `coordinate_system_name` and `start_coordinate`. + +## 3. Device size fields replaced by `shape` + +`Enclosure` and `Arena` (`components/devices.py`) used a `Scale`-based `size`/`size_unit` +pair. Use a geometry object instead. + +| Model | Removed | Replacement | +| --- | --- | --- | +| `Enclosure` | `size`, `size_unit` | `shape: Rectangle \| Circle` | +| `Arena` | `size`, `size_unit` | `shape: Circle \| Rectangle` | + +`shape` is now required on both models. It was optional with a `None` default in v2.x, but +`size` was required and was the only way to record extent, so every `Enclosure` and `Arena` +must now set `shape`. + +**Before** + +```python +Arena(..., size=Scale(scale=[30, 30, 20]), size_unit=SizeUnit.CM) +``` + +**After** + +```python +Arena(..., shape=Rectangle(width=30, height=30, size_unit=SizeUnit.CM)) +``` + +> Other `size_unit` fields in the schema (`Monitor`, `Rectangle`, `Wheel`, and so on) were +> never deprecated and are unchanged. + +## 4. `DAQChannel.channel_index` + +`DAQChannel.channel_index` (`components/devices.py`) and its `deprecated_channel_index` +validator are removed. Use `DAQChannel.port`. + +**Before** + +```python +DAQChannel(channel_name="ch", channel_type=DaqChannelType.DI, channel_index=1) +``` + +**After** + +```python +DAQChannel(channel_name="ch", channel_type=DaqChannelType.DI, port=1) +``` + +> Not affected: `OlfactometerChannel.channel_index` and +> `OlfactometerChannelInfo.channel_index` are unrelated fields and were never deprecated. + +## 5. `BreedingInfo.breeding_group` + +`BreedingInfo.breeding_group` (`components/subjects.py`) is removed, along with the +`warn_breeding_group_deprecated` validator that warned on the value and then cleared it. + +v2.x already discarded the value, so nothing is lost. Drop the argument. + +## 6. Olfactory stimulus classes + +Two classes are removed from `components/stimulus.py`: + +| Removed | Replacement | +| --- | --- | +| `OlfactometerChannelConfig` | `OlfactometerChannelInfo` in `components/configs.py` | +| `OlfactoryStimulation` | `StimulusEpoch.stimulus_name` plus `OlfactometerConfig` in `components/configs.py` | + +`OlfactoryStimulation.channels` and `OlfactoryStimulation.notes` were separately deprecated +and go away with the class. + +## 7. `DataDescription.from_*` classmethods + +The three derivation classmethods on `DataDescription` (`core/data_description.py`) are +removed. Use the functions in `aind_data_schema.utils.inheritance` that they already called. + +| Removed | Replacement | +| --- | --- | +| `DataDescription.from_raw(...)` | `derive_data_description_from_raw(...)` | +| `DataDescription.from_derived(...)` | `derive_data_description_from_derived(...)` | +| `DataDescription.from_data_description(...)` | `derive_data_description(...)` | + +The signatures are the same, so this is an import and a rename: + +```python +from aind_data_schema.utils.inheritance import ( + derive_data_description, + derive_data_description_from_derived, + derive_data_description_from_raw, +) + +derived = derive_data_description_from_raw(dd, "spikesort-ks25", creation_time=dt) +``` + +## 8. `QCMetric.tags` list form + +`QCMetric.tags` became a `dict` in v2.3. The `fix_tag_lists` validator +(`core/quality_control.py`) accepted the v2.2.x list form and converted it to +`{"tag_1": ..., "tag_2": ...}` with a `DeprecationWarning`. That validator is removed, so +list-valued `tags` now fail validation. + +**Before (v2.2.x JSON)** + +```json +{"tags": ["Probe A", "Drift"]} +``` + +**After** + +```json +{"tags": {"probe": "Probe A", "issue": "Drift"}} +``` + +Pick whatever keys you want. The old shim used positional `tag_1`, `tag_2` keys, so +`{"tag_1": "Probe A", "tag_2": "Drift"}` gives you the same result as v2.x if you want a +mechanical rewrite. + +### Related removal: `fix_default_grouping_list` + +`QualityControl.fix_default_grouping_list` turned a v2.2.x string-list `default_grouping` +into `[["modality"], ["tag_1"]]`. It only ran when the first metric had list-valued `tags`, +so removing `fix_tag_lists` left it unreachable and it is removed too. Pass +`default_grouping` in the current form, a list of tuples of strings. + +## 9. `CoordinateSystemLibrary` removed + +`aind_data_schema.components.coordinates.CoordinateSystemLibrary` is removed. It held a +fixed set of named `CoordinateSystem` constants (`BREGMA_ARI`, `BREGMA_RAS`, `BREGMA_ARID`, +`BREGMA_RASD`, `ARENA_RBT`, `SIPE_CAMERA_RBF`, `SIPE_MONITOR_RTF`, `SIPE_SPEAKER_LTF`, +`MPM_MANIP_RFB`, `PINPOINT_PROBE_RSAB`, `SPIM_RPI`, `SPIM_IJK`, `MRI_LPS`, `IMAGE_XYZ`, and +others). + +Coordinate systems belong to a rig or a project, not to the schema. Define the ones your +project uses in your own module and import them where you need them. + +`CoordinateSystem`, `Axis`, `Origin`, `AxisName`, and `Direction` are unchanged. Only the +library of pre-built constants is gone. + +**Before** + +```python +from aind_data_schema.components.coordinates import CoordinateSystemLibrary + +Acquisition(..., global_coordinate_system=CoordinateSystemLibrary.BREGMA_ARI) +``` + +**After** + +```python +from aind_data_schema_models.coordinates import AxisName, Direction, Origin +from aind_data_schema_models.units import SizeUnit + +from aind_data_schema.components.coordinates import Axis, CoordinateSystem + +BREGMA_ARI = CoordinateSystem( + name="BREGMA_ARI", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + ], +) + +Acquisition(..., global_coordinate_system=BREGMA_ARI) +``` + +To copy an old definition verbatim, look at `components/coordinates.py` at the v2.9.0 tag. +Every example under `examples/` now defines its coordinate system inline and can be used as +a template. + +> `AtlasLibrary` is a separate library and still ships with the package. + +## 10. Removed helper + +`aind_data_schema.base.migrate_deprecated_coordinate_system` is removed. It only existed to +do the copy-forward described in section 1 and has no replacement. `recursive_get_all_names` +in `utils/validators.py` no longer skips the old `coordinate_system` field and is simpler +as a result. + +### The `transforms` extra is gone + +`pip install biodata-schema[transforms]` is no longer valid. The optional-dependency group +and its `scipy` requirement are both removed. The extra was only there for +`Rotation.to_matrix`, which no longer ships. Drop `[transforms]` from your install command; +plain `pip install biodata-schema` covers everything. + +## 11. Warnings promoted to errors + +Six things that only warned in v2.x now fail validation. These reject files that used to be +accepted, so they are the most likely source of new `ValidationError`s. + +### `Code` requires `commit_hash` or `version` + +`Code._ensure_commit_hash_or_version` (`components/identifiers.py`) used to warn that at +least one of these fields would be required in a future release. It is required now. + +```python +Code(url="https://github.com/AllenNeuralDynamics/example") # ValidationError +Code(url="https://github.com/AllenNeuralDynamics/example", version="0.0.1") # ok +``` + +### Bare `Injection` procedures are rejected + +`Procedures.reject_injections` (`core/procedures.py`) now raises. Wrap every `Injection` in +a `Surgery` or `NonSurgicalInjection`: + +```python +Procedures(subject_id="12345", subject_procedures=[Injection(...)]) # ValidationError +Procedures(subject_id="12345", subject_procedures=[Surgery(procedures=[Injection(...)])]) # ok +``` + +### Duplicate component names on `Instrument` + +`Instrument.validate_unique_component_names` (`core/instrument.py`) now raises instead of +logging. Two cases are rejected: + +- two entries in `Instrument.components` with the same `name`, and +- two different objects anywhere in the component tree with the same `name`. + +Referencing one shared object from more than one place is fine. Objects are compared by +value before a name is reported as a duplicate. + +`Software` names are skipped entirely. Software is a descriptor, not an addressable device, +and the same package is often recorded across many devices. Setting +`Software(name="Bonsai", version="2.5")` as the `recording_software` on every camera is +valid, and so is giving a `Software` the same name as a device. + +This matters because `Connection.source_device` and `Connection.target_device` look up +components by name. + +#### Renamed devices in `multiplane_ophys_instrument` + +`examples/multiplane_ophys_instrument.py` failed this check. Three `CameraAssembly` objects +each held a `Camera` with the assembly's exact name, and `Connection.source_device` pointed +at that name, so the reference was ambiguous. The inner cameras were renamed to match the +`"… Camera Lens"` and `"… Camera Filter"` naming already used in that file: + +| Old name (assembly and camera) | Assembly keeps | Inner camera becomes | +| --- | --- | --- | +| `Behavior Camera` | `Behavior Camera` | `Behavior Camera Detector` | +| `Eye Camera` | `Eye Camera` | `Eye Camera Detector` | +| `Face Camera` | `Face Camera` | `Face Camera Detector` | + +Do the same if you copied names from that example, or if your instrument gives an assembly +and its inner camera the same name: keep the assembly name, since connections point at it, +and rename the inner device. + +### Absolute `AssetPath` values + +`recursive_check_paths` (`utils/validators.py`) now raises on an absolute `AssetPath` +instead of logging. It runs from `DataCoreModel.write_standard_file`, so writing a file with +absolute asset paths now fails. Paths must be relative to the metadata directory. + +A path that does not exist still only logs a warning, because whether a relative path +resolves depends on the working directory. + +### `Monitor.contrast_unit` and `brightness_unit` are no longer filled in + +`Monitor.add_units_if_needed` (`components/devices.py`) set these units to `percent` when a +value was given without one. It is removed. A separate validator already required the unit +whenever the value is set, and that requirement now takes effect: + +```python +Monitor(..., contrast=50) # ValidationError +Monitor(..., contrast=50, contrast_unit=UnitlessUnit.PERCENT) # ok +``` + +### `Metadata` no longer adds the `calibration` tag for you + +`Metadata.validate_calibration_object_tags` (`core/metadata.py`) still warns when a +`CalibrationObject` subject has no `"calibration"` tag, but it no longer appends the tag to +`data_description.tags`. Add it yourself: + +```python +DataDescription(..., tags=["calibration"]) +``` + +## 12. Validators still emitting warnings + +There are no `DeprecationWarning`s left in the package. These are the warnings that remain +after the changes in section 11, and they stay warnings on purpose. + +### `UserWarning`, visible through `warnings` and `pytest.warns` + +| Location | Validator | Fires when | Why it stays a warning | +| --- | --- | --- | --- | +| `core/metadata.py` | `Metadata.validate_expected_files_by_modality` | A file required by the declared modality is missing | Metadata is built up in pieces, so an error would block partial objects | +| `core/metadata.py` | `Metadata.validate_calibration_object_tags` | `CalibrationObject` subject with no `"calibration"` tag | Advisory only; see section 11 for the dropped auto-fix | +| `core/metadata.py` | `Metadata.validate_training_protocol_references` | `StimulusEpoch.training_protocol_name` has no match in `Procedures` | Only meaningful when both files are present | +| `core/metadata.py` | `Metadata.validate_data_description_name_time_consistency` | Creation time from the name is far from `acquisition_end_time` | "Close to" is a heuristic, not a rule | +| `core/processing.py` | `Processing.__add__` | Merged objects share process names | The merge already fixes it by renaming | +| `base.py` | `_GenericModel.validate_fieldnames` | A field name contains `.` or `$` | Fires on user-supplied `GenericModel` payloads the schema does not control | + +### `logger.warning`, log output only + +| Location | Validator | Fires when | Why it stays a warning | +| --- | --- | --- | --- | +| `core/metadata.py` | `Metadata.validate_core_fields` | A core field failed its own validation | This is the escape hatch for wrapping partially-invalid cores | +| `core/acquisition.py` | `DataStream.__add__` | Two merged data streams disagree | Part of the merge helper, not a validator | +| `utils/validators.py` | `recursive_check_paths` | An `AssetPath` does not exist on disk | Whether it resolves depends on the working directory | +| `base.py` | `DataCoreModel.write_standard_file` | Serialized file is over the 500 KB `MAX_FILE_SIZE` | Advisory on a write path; failing would throw away your data | + +### Note on `DEPTH` axes + +v2.x warned when a `CoordinateSystem` used a `DEPTH` axis. That warning is gone and `DEPTH` +axes are now accepted without complaint, for compatibility with existing coordinate systems. +Removing `CoordinateSystemLibrary` (section 9) is the other half of this: the package no +longer ships a `DEPTH`-based system, so projects defining their own will not pick one up by +accident. + +## Verifying your upgrade + +The full test suite and all bundled examples were updated for these changes and pass under +v3.0.0: + +```bash +uv run pytest +``` diff --git a/examples/aibs_smartspim_instrument.py b/examples/aibs_smartspim_instrument.py index a61178218..9ef2bd034 100644 --- a/examples/aibs_smartspim_instrument.py +++ b/examples/aibs_smartspim_instrument.py @@ -3,13 +3,13 @@ import argparse import datetime +from aind_data_schema_models.coordinates import AxisName, Direction, Origin from aind_data_schema_models.modalities import Modality from aind_data_schema_models.organizations import Organization +from aind_data_schema_models.units import SizeUnit from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import ( - CoordinateSystemLibrary, -) +from aind_data_schema.components.coordinates import Axis, CoordinateSystem from aind_data_schema.components.devices import ( AdditionalImagingDevice, Detector, @@ -23,6 +23,17 @@ ) from aind_data_schema.core.instrument import Instrument +SIPE_MONITOR_RTF = CoordinateSystem( + name="SIPE_MONITOR_RTF", + origin=Origin.FRONT_CENTER, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.X, direction=Direction.LR), + Axis(name=AxisName.Y, direction=Direction.DU), + Axis(name=AxisName.Z, direction=Direction.BF), + ], +) + objective = Objective( name="TLX Objective", numerical_aperture=0.2, @@ -211,7 +222,7 @@ location="440", instrument_id="SmartSPIM2", modification_date=datetime.date(2023, 10, 4), - coordinate_system=CoordinateSystemLibrary.SIPE_MONITOR_RTF, + global_coordinate_system=SIPE_MONITOR_RTF, modalities=[Modality.SPIM], temperature_control=False, components=[ diff --git a/examples/aibs_smartspim_procedures.py b/examples/aibs_smartspim_procedures.py index 2baa44f26..a9210414f 100644 --- a/examples/aibs_smartspim_procedures.py +++ b/examples/aibs_smartspim_procedures.py @@ -3,13 +3,26 @@ import argparse from datetime import date +from aind_data_schema_models.coordinates import AxisName, Direction, Origin from aind_data_schema_models.organizations import Organization +from aind_data_schema_models.units import SizeUnit -from aind_data_schema.components.coordinates import CoordinateSystemLibrary +from aind_data_schema.components.coordinates import Axis, CoordinateSystem from aind_data_schema.components.reagent import Reagent from aind_data_schema.components.subject_procedures import Perfusion from aind_data_schema.core import procedures +BREGMA_ARI = CoordinateSystem( + name="BREGMA_ARI", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + ], +) + experimenters = ["John Smith"] specimen_id = "651286" @@ -30,7 +43,7 @@ start_date=date(2022, 11, 17), experimenters=["LAS"], ethics_review_id="2234", - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, procedures=[ Perfusion( protocol_id="dx.doi.org/10.17504/protocols.io.8epv51bejl1b/v6", diff --git a/examples/aind_smartspim_instrument.py b/examples/aind_smartspim_instrument.py index 4923c0a29..d96bd21ab 100644 --- a/examples/aind_smartspim_instrument.py +++ b/examples/aind_smartspim_instrument.py @@ -3,11 +3,13 @@ import argparse from datetime import date +from aind_data_schema_models.coordinates import AxisName, Direction, Origin from aind_data_schema_models.modalities import Modality from aind_data_schema_models.organizations import Organization +from aind_data_schema_models.units import SizeUnit from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import CoordinateSystemLibrary +from aind_data_schema.components.coordinates import Axis, CoordinateSystem from aind_data_schema.components.devices import ( Device, Filter, @@ -22,6 +24,17 @@ Objective, ) +SPIM_RPI = CoordinateSystem( + name="SPIM_RPI", + origin=Origin.ORIGIN, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.X, direction=Direction.LR), + Axis(name=AxisName.Y, direction=Direction.AP), + Axis(name=AxisName.Z, direction=Direction.SI), + ], +) + objective_1 = Objective( name="TLX Objective 1", numerical_aperture=0.2, @@ -251,7 +264,7 @@ location="440", instrument_id="SmartSPIM1", modification_date=date(2023, 10, 4), - coordinate_system=CoordinateSystemLibrary.SPIM_RPI, + global_coordinate_system=SPIM_RPI, modalities=[Modality.SPIM], components=[ scope, diff --git a/examples/barseq_instrument.py b/examples/barseq_instrument.py index ca4acf077..3b3f97b3e 100644 --- a/examples/barseq_instrument.py +++ b/examples/barseq_instrument.py @@ -3,11 +3,12 @@ import argparse from datetime import date +from aind_data_schema_models.coordinates import AxisName, Direction, Origin from aind_data_schema_models.modalities import Modality from aind_data_schema_models.organizations import Organization from aind_data_schema_models.units import SizeUnit -from aind_data_schema.components.coordinates import CoordinateSystemLibrary +from aind_data_schema.components.coordinates import Axis, CoordinateSystem from aind_data_schema.components.devices import ( BinMode, Camera, @@ -23,6 +24,17 @@ ) from aind_data_schema.core.instrument import Instrument +IMAGE_XYZ = CoordinateSystem( + name="IMAGE_XYZ", + origin=Origin.ORIGIN, + axis_unit=SizeUnit.PX, + axes=[ + Axis(name=AxisName.X, direction=Direction.POS), + Axis(name=AxisName.Y, direction=Direction.POS), + Axis(name=AxisName.Z, direction=Direction.POS), + ], +) + objectives = [ Objective( name="20x Objective", @@ -216,7 +228,7 @@ location="243", instrument_id="Dogwood", modification_date=date(2024, 7, 9), - coordinate_system=CoordinateSystemLibrary.IMAGE_XYZ, + global_coordinate_system=IMAGE_XYZ, modalities=[Modality.BARSEQ], notes=( "BarSEQ imaging system with Nikon Ti2-E inverted microscope, X-Light V3 spinning disk confocal, " diff --git a/examples/bergamo_ophys_acquisition.py b/examples/bergamo_ophys_acquisition.py index 84fae625d..58a49a33d 100644 --- a/examples/bergamo_ophys_acquisition.py +++ b/examples/bergamo_ophys_acquisition.py @@ -5,9 +5,10 @@ from zoneinfo import ZoneInfo from aind_data_schema_models.brain_atlas import CCFv3 +from aind_data_schema_models.coordinates import AxisName, Direction, Origin from aind_data_schema_models.modalities import Modality from aind_data_schema_models.stimulus_modality import StimulusModality -from aind_data_schema_models.units import FrequencyUnit +from aind_data_schema_models.units import FrequencyUnit, SizeUnit from aind_data_schema.components.configs import ( Channel, @@ -18,7 +19,7 @@ Plane, SamplingStrategy, ) -from aind_data_schema.components.coordinates import CoordinateSystemLibrary, Scale, Translation +from aind_data_schema.components.coordinates import Axis, CoordinateSystem, Scale, Translation from aind_data_schema.components.identifiers import Code from aind_data_schema.components.stimulus import PhotoStimulation, PhotoStimulationGroup from aind_data_schema.core.acquisition import ( @@ -28,6 +29,17 @@ StimulusEpoch, ) +BREGMA_ARI = CoordinateSystem( + name="BREGMA_ARI", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + ], +) + # If a timezone isn't specified, the timezone of the computer running this # script will be used as default t = datetime(2022, 7, 12, 7, 00, 00, tzinfo=ZoneInfo("America/Los_Angeles")) @@ -81,7 +93,7 @@ subject_details=AcquisitionSubjectDetails( mouse_platform_name="Mouse tube", ), - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, data_streams=[ DataStream( stream_start_time=t, @@ -144,6 +156,7 @@ ], inter_trial_interval=10, ), + version="0.0.1", ), stimulus_start_time=t, stimulus_end_time=t, diff --git a/examples/ephys_acquisition.py b/examples/ephys_acquisition.py index f1c7a8846..cca590091 100644 --- a/examples/ephys_acquisition.py +++ b/examples/ephys_acquisition.py @@ -5,8 +5,10 @@ from zoneinfo import ZoneInfo from aind_data_schema_models.brain_atlas import CCFv3 +from aind_data_schema_models.coordinates import AxisName, Direction, Origin from aind_data_schema_models.modalities import Modality from aind_data_schema_models.stimulus_modality import StimulusModality +from aind_data_schema_models.units import SizeUnit from aind_data_schema.components.configs import ( EphysAssemblyConfig, @@ -16,7 +18,8 @@ from aind_data_schema.components.coordinates import ( AtlasCoordinate, AtlasLibrary, - CoordinateSystemLibrary, + Axis, + CoordinateSystem, Rotation, Translation, ) @@ -29,13 +32,36 @@ StimulusEpoch, ) +BREGMA_ARID = CoordinateSystem( + name="BREGMA_ARID", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + Axis(name=AxisName.DEPTH, direction=Direction.UD), + ], +) + +MPM_MANIP_RFB = CoordinateSystem( + name="MPM_MANIP_RFB", + origin=Origin.TIP, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.X, direction=Direction.LR), + Axis(name=AxisName.Y, direction=Direction.BF), + Axis(name=AxisName.Z, direction=Direction.UD), + ], +) + bonsai_software = Software(name="Bonsai", version="2.7") ephys_assembly_a_config = EphysAssemblyConfig( device_name="Ephys_assemblyA", manipulator=ManipulatorConfig( device_name="ManipulatorA", - coordinate_system=CoordinateSystemLibrary.MPM_MANIP_RFB, + local_coordinate_system=MPM_MANIP_RFB, local_axis_positions=Translation( translation=[8422, 4205, 11087.5], ), @@ -48,7 +74,7 @@ coordinate_system=AtlasLibrary.CCFv3_10um, translation=[8150, 3250, 7800], ), - coordinate_system=CoordinateSystemLibrary.MPM_MANIP_RFB, + local_coordinate_system=MPM_MANIP_RFB, transform=[ Translation( translation=[5000, 5000, 0, 1], @@ -69,7 +95,7 @@ device_name="Ephys_assemblyB", manipulator=ManipulatorConfig( device_name="ManipulatorB", - coordinate_system=CoordinateSystemLibrary.MPM_MANIP_RFB, + local_coordinate_system=MPM_MANIP_RFB, local_axis_positions=Translation( translation=[8422, 4205, 11087.5], ), @@ -82,7 +108,7 @@ coordinate_system=AtlasLibrary.CCFv3_10um, translation=[8150, 3250, 7800], ), - coordinate_system=CoordinateSystemLibrary.MPM_MANIP_RFB, + local_coordinate_system=MPM_MANIP_RFB, transform=[ Translation( translation=[5000, 5000, 0, 1], @@ -112,7 +138,7 @@ subject_details=AcquisitionSubjectDetails( mouse_platform_name="Running Wheel", ), - coordinate_system=CoordinateSystemLibrary.BREGMA_ARID, + global_coordinate_system=BREGMA_ARID, stimulus_epochs=[ StimulusEpoch( stimulus_name="Visual Stimulation", @@ -135,6 +161,7 @@ "grating_spatial_frequency_unit": "cycles/degree", }, ), + version="0.0.1", ), ), StimulusEpoch( @@ -159,6 +186,7 @@ "flash_duration_unit": "seconds", }, ), + version="0.0.1", ), ), ], diff --git a/examples/ephys_instrument.py b/examples/ephys_instrument.py index 6471ef78b..e7da9e65b 100644 --- a/examples/ephys_instrument.py +++ b/examples/ephys_instrument.py @@ -3,7 +3,7 @@ import argparse from datetime import date, datetime, timezone -from aind_data_schema_models.coordinates import AnatomicalRelative +from aind_data_schema_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin from aind_data_schema_models.devices import CameraTarget from aind_data_schema_models.harp_types import HarpDeviceType from aind_data_schema_models.modalities import Modality @@ -11,11 +11,7 @@ from aind_data_schema_models.units import FrequencyUnit, PowerUnit, SizeUnit from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import ( - Affine, - CoordinateSystemLibrary, - Translation, -) +from aind_data_schema.components.coordinates import Affine, Axis, CoordinateSystem, Translation from aind_data_schema.components.devices import ( Camera, CameraAssembly, @@ -39,6 +35,17 @@ from aind_data_schema.components.measurements import Calibration from aind_data_schema.core.instrument import Instrument +BREGMA_ARI = CoordinateSystem( + name="BREGMA_ARI", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + ], +) + # Describes an instrument with running wheel, 2 behavior cameras, one Harp Behavior board, # one dual-color laser module, one stick microscope, and 2 Neuropixels probes @@ -328,7 +335,7 @@ relative_position=[AnatomicalRelative.ANTERIOR, AnatomicalRelative.RIGHT], contrast=None, brightness=None, - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + local_coordinate_system=BREGMA_ARI, transform=[ Affine( affine_transform=[ @@ -387,7 +394,7 @@ instrument_id="EPHYS1", modification_date=date(2023, 10, 3), modalities=[Modality.ECEPHYS], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[ ephys_assemblyA, ephys_assemblyB, diff --git a/examples/exaspim_acquisition.py b/examples/exaspim_acquisition.py index 896a402ee..df7cdab24 100644 --- a/examples/exaspim_acquisition.py +++ b/examples/exaspim_acquisition.py @@ -4,6 +4,7 @@ from datetime import datetime from zoneinfo import ZoneInfo +from aind_data_schema_models.coordinates import AxisName, Direction, Origin from aind_data_schema_models.modalities import Modality from aind_data_schema_models.organizations import Organization from aind_data_schema_models.pid_names import PIDName @@ -20,12 +21,23 @@ LaserConfig, SampleChamberConfig, ) -from aind_data_schema.components.coordinates import CoordinateSystemLibrary, Scale, Translation +from aind_data_schema.components.coordinates import Axis, CoordinateSystem, Scale, Translation from aind_data_schema.components.measurements import Calibration, Maintenance from aind_data_schema.components.reagent import Reagent from aind_data_schema.components.wrappers import AssetPath from aind_data_schema.core.acquisition import Acquisition, DataStream +SPIM_RPI = CoordinateSystem( + name="SPIM_RPI", + origin=Origin.ORIGIN, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.X, direction=Direction.LR), + Axis(name=AxisName.Y, direction=Direction.AP), + Axis(name=AxisName.Z, direction=Direction.SI), + ], +) + # If a timezone isn't specified, the timezone of the computer running this # script will be used as default t = datetime(2022, 11, 22, 8, 43, 00, tzinfo=ZoneInfo("America/Los_Angeles")) @@ -101,7 +113,7 @@ ), ], images=[image0, image1], - coordinate_system=CoordinateSystemLibrary.SPIM_RPI, + local_coordinate_system=SPIM_RPI, ) chamber_config = SampleChamberConfig( diff --git a/examples/exaspim_instrument.py b/examples/exaspim_instrument.py index 3976c4d5a..e65a326d7 100644 --- a/examples/exaspim_instrument.py +++ b/examples/exaspim_instrument.py @@ -3,12 +3,13 @@ import argparse import datetime +from aind_data_schema_models.coordinates import AxisName, Direction, Origin from aind_data_schema_models.modalities import Modality from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import FrequencyUnit +from aind_data_schema_models.units import FrequencyUnit, SizeUnit from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import CoordinateSystemLibrary +from aind_data_schema.components.coordinates import Axis, CoordinateSystem from aind_data_schema.components.devices import ( AdditionalImagingDevice, Computer, @@ -24,6 +25,17 @@ ) from aind_data_schema.core.instrument import Instrument +SPIM_RPI = CoordinateSystem( + name="SPIM_RPI", + origin=Origin.ORIGIN, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.X, direction=Direction.LR), + Axis(name=AxisName.Y, direction=Direction.AP), + Axis(name=AxisName.Z, direction=Direction.SI), + ], +) + objectives = [ Objective( name="Custom Objective", @@ -272,7 +284,7 @@ instrument_id="exaSPIM1", modalities=[Modality.SPIM], modification_date=datetime.date(2023, 10, 4), - coordinate_system=CoordinateSystemLibrary.SPIM_RPI, + global_coordinate_system=SPIM_RPI, components=[ *objectives, *detectors, diff --git a/examples/fip_behavior_instrument.py b/examples/fip_behavior_instrument.py index 19114e7c6..0a0953e51 100644 --- a/examples/fip_behavior_instrument.py +++ b/examples/fip_behavior_instrument.py @@ -5,15 +5,13 @@ import argparse from datetime import date, datetime, timezone -from aind_data_schema_models.coordinates import AnatomicalRelative +from aind_data_schema_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin from aind_data_schema_models.devices import CameraTarget from aind_data_schema_models.modalities import Modality from aind_data_schema_models.units import FrequencyUnit, PowerUnit, SizeUnit from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import ( - CoordinateSystemLibrary, -) +from aind_data_schema.components.coordinates import Axis, CoordinateSystem from aind_data_schema.components.devices import ( Camera, CameraAssembly, @@ -40,6 +38,17 @@ from aind_data_schema.components.measurements import Calibration from aind_data_schema.core.instrument import Instrument +BREGMA_ARI = CoordinateSystem( + name="BREGMA_ARI", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + ], +) + bonsai_software = Software(name="Bonsai", version="2.5") computer = Computer( @@ -390,7 +399,7 @@ instrument_id="FIP-Behavior", modification_date=date(2000, 1, 1), modalities=[Modality.BEHAVIOR, Modality.FIB], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[ camera1, camera2, diff --git a/examples/fip_ophys_acquisition.py b/examples/fip_ophys_acquisition.py index fad3d59cd..bf046da8f 100644 --- a/examples/fip_ophys_acquisition.py +++ b/examples/fip_ophys_acquisition.py @@ -323,6 +323,7 @@ "frequency": [5, 8, 13], "frequency_unit": FrequencyUnit.KHZ, }, + version="0.0.1", ), performance_metrics=PerformanceMetrics( reward_consumed_during_epoch=Decimal("414"), diff --git a/examples/fip_ophys_instrument.py b/examples/fip_ophys_instrument.py index bfe0337b3..8196422d0 100644 --- a/examples/fip_ophys_instrument.py +++ b/examples/fip_ophys_instrument.py @@ -3,18 +3,29 @@ import argparse from datetime import date, datetime, timezone -from aind_data_schema_models.coordinates import AnatomicalRelative +from aind_data_schema_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.units import FrequencyUnit, PowerUnit +from aind_data_schema_models.units import FrequencyUnit, PowerUnit, SizeUnit import aind_data_schema.components.devices as d import aind_data_schema.core.instrument as r from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import CoordinateSystemLibrary +from aind_data_schema.components.coordinates import Axis, CoordinateSystem from aind_data_schema.components.devices import Computer from aind_data_schema.components.identifiers import Software from aind_data_schema.components.measurements import Calibration +BREGMA_ARI = CoordinateSystem( + name="BREGMA_ARI", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + ], +) + bonsai_software = Software(name="Bonsai", version="2.5") computer = Computer( @@ -332,7 +343,7 @@ instrument_id="FIP1", modification_date=date(2023, 10, 3), modalities=[Modality.FIB], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[ camera_assembly_1, camera_assembly_2, diff --git a/examples/isi_instrument.py b/examples/isi_instrument.py index 021e40b31..3b52e1334 100644 --- a/examples/isi_instrument.py +++ b/examples/isi_instrument.py @@ -14,7 +14,7 @@ import argparse from datetime import date -from aind_data_schema_models.coordinates import AnatomicalRelative +from aind_data_schema_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin from aind_data_schema_models.devices import ( CameraChroma, CameraTarget, @@ -26,7 +26,7 @@ from aind_data_schema_models.organizations import Organization from aind_data_schema_models.units import SizeUnit -from aind_data_schema.components.coordinates import CoordinateSystemLibrary +from aind_data_schema.components.coordinates import Axis, CoordinateSystem from aind_data_schema.components.devices import ( Camera, CameraAssembly, @@ -41,6 +41,17 @@ ) from aind_data_schema.core.instrument import Instrument +BREGMA_ARI = CoordinateSystem( + name="BREGMA_ARI", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + ], +) + acquisition_computer = Computer( name="Acquisition Computer", ) @@ -214,7 +225,7 @@ instrument_id="ISIV.1", modification_date=date(2026, 5, 15), modalities=[Modality.ISI], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, temperature_control=True, notes="", components=[ diff --git a/examples/model.py b/examples/model.py index 4b72b48a6..8d9b8201c 100644 --- a/examples/model.py +++ b/examples/model.py @@ -29,6 +29,7 @@ example_run_code=Code( url="url for model code repo", run_script="./predict.py", + version="0.0.1", ), training=[ ModelTraining( @@ -45,6 +46,7 @@ "batch_size": 32, "augmentation": True, }, + version="0.0.1", ), output_path="./trained_model.h5", start_date_time=now, @@ -71,6 +73,7 @@ ], url="url for model code repo", run_script="./eval.py", + version="0.0.1", ), start_date_time=now, end_date_time=now, diff --git a/examples/mri_acquisition.py b/examples/mri_acquisition.py index ff57c64d7..1f0e0ffc2 100644 --- a/examples/mri_acquisition.py +++ b/examples/mri_acquisition.py @@ -5,11 +5,12 @@ from decimal import Decimal from zoneinfo import ZoneInfo +from aind_data_schema_models.coordinates import AxisName, Direction, Origin from aind_data_schema_models.modalities import Modality from aind_data_schema_models.units import MagneticFieldUnit, SizeUnit, TimeUnit from aind_data_schema.components.configs import MRAcquisitionType, MRIScan, PulseSequenceType, SubjectPosition -from aind_data_schema.components.coordinates import Affine, CoordinateSystemLibrary, Scale, Translation +from aind_data_schema.components.coordinates import Affine, Axis, CoordinateSystem, Scale, Translation from aind_data_schema.components.devices import Scanner from aind_data_schema.core.acquisition import ( Acquisition, @@ -17,6 +18,17 @@ DataStream, ) +MRI_LPS = CoordinateSystem( + name="MRI_LPS", + origin=Origin.ORIGIN, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.X, direction=Direction.RL), + Axis(name=AxisName.Y, direction=Direction.AP), + Axis(name=AxisName.Z, direction=Direction.IS), + ], +) + mri_scanner = Scanner( name="Scanner 72", magnetic_strength=7, @@ -83,7 +95,7 @@ ethics_review_id=["1234"], acquisition_type="3D MRI Volume", instrument_id="NA", - coordinate_system=CoordinateSystemLibrary.MRI_LPS, + global_coordinate_system=MRI_LPS, subject_details=AcquisitionSubjectDetails( mouse_platform_name="cradle", ), diff --git a/examples/multiplane_ophys_acquisition.py b/examples/multiplane_ophys_acquisition.py index e2503efda..443e90d01 100644 --- a/examples/multiplane_ophys_acquisition.py +++ b/examples/multiplane_ophys_acquisition.py @@ -5,6 +5,7 @@ from zoneinfo import ZoneInfo from aind_data_schema_models.brain_atlas import CCFv3 +from aind_data_schema_models.coordinates import AxisName, Direction, Origin from aind_data_schema_models.modalities import Modality from aind_data_schema_models.stimulus_modality import StimulusModality from aind_data_schema_models.units import FrequencyUnit, PowerUnit, SizeUnit, VolumeUnit @@ -19,7 +20,7 @@ SamplingStrategy, TriggerType, ) -from aind_data_schema.components.coordinates import CoordinateSystemLibrary, Scale, Translation +from aind_data_schema.components.coordinates import Axis, CoordinateSystem, Scale, Translation from aind_data_schema.components.identifiers import Code, Software from aind_data_schema.core.acquisition import ( Acquisition, @@ -29,6 +30,17 @@ StimulusEpoch, ) +BREGMA_ARI = CoordinateSystem( + name="BREGMA_ARI", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + ], +) + # If a timezone isn't specified, the timezone of the computer running this # script will be used as default t = datetime(2022, 7, 12, 7, 00, 00, tzinfo=ZoneInfo("America/Los_Angeles")) @@ -50,7 +62,7 @@ subject_details=AcquisitionSubjectDetails( mouse_platform_name="disc", ), - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, data_streams=[ DataStream( stream_start_time=t, diff --git a/examples/multiplane_ophys_instrument.py b/examples/multiplane_ophys_instrument.py index 7defcffd7..fa85df489 100644 --- a/examples/multiplane_ophys_instrument.py +++ b/examples/multiplane_ophys_instrument.py @@ -3,18 +3,14 @@ import argparse from datetime import date -from aind_data_schema_models.coordinates import AnatomicalRelative +from aind_data_schema_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin from aind_data_schema_models.devices import CameraTarget from aind_data_schema_models.modalities import Modality from aind_data_schema_models.organizations import Organization from aind_data_schema_models.units import FrequencyUnit, SizeUnit from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import ( - Affine, - CoordinateSystemLibrary, - Translation, -) +from aind_data_schema.components.coordinates import Affine, Axis, CoordinateSystem, Translation from aind_data_schema.components.devices import ( BinMode, Camera, @@ -37,11 +33,22 @@ from aind_data_schema.components.identifiers import Software from aind_data_schema.core.instrument import Instrument +BREGMA_ARI = CoordinateSystem( + name="BREGMA_ARI", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + ], +) + instrument = Instrument( location="429", instrument_id="mesoscope", modification_date=date(2024, 10, 16), - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, modalities=[Modality.POPHYS], notes=None, temperature_control=None, @@ -78,7 +85,7 @@ relative_position=[AnatomicalRelative.ANTERIOR], contrast=None, brightness=None, - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + local_coordinate_system=BREGMA_ARI, transform=[ Affine( affine_transform=[ @@ -113,7 +120,7 @@ target=CameraTarget.BODY, relative_position=[AnatomicalRelative.SUPERIOR], camera=Camera( - name="Behavior Camera", + name="Behavior Camera Detector", serial_number=None, manufacturer=Organization.ALLIED, model="Mako G-32B", @@ -168,7 +175,7 @@ target=CameraTarget.EYE, relative_position=[AnatomicalRelative.LEFT], camera=Camera( - name="Eye Camera", + name="Eye Camera Detector", serial_number=None, manufacturer=Organization.ALLIED, model="Mako G-32B", @@ -223,7 +230,7 @@ target=CameraTarget.FACE, relative_position=[AnatomicalRelative.ANTERIOR], camera=Camera( - name="Face Camera", + name="Face Camera Detector", serial_number=None, manufacturer=Organization.ALLIED, model="Mako G-32B", diff --git a/examples/ophys_procedures.py b/examples/ophys_procedures.py index 954e880f5..f065b526f 100644 --- a/examples/ophys_procedures.py +++ b/examples/ophys_procedures.py @@ -4,15 +4,16 @@ import datetime from aind_data_schema_models.brain_atlas import CCFv3 +from aind_data_schema_models.coordinates import AxisName, Direction, Origin from aind_data_schema_models.organizations import Organization from aind_data_schema_models.pid_names import PIDName from aind_data_schema_models.reagent import FluorophoreType, StainType from aind_data_schema_models.registries import Registry from aind_data_schema_models.species import Species -from aind_data_schema_models.units import VolumeUnit +from aind_data_schema_models.units import SizeUnit, VolumeUnit from aind_data_schema.components.configs import ProbeConfig -from aind_data_schema.components.coordinates import CoordinateSystemLibrary, Translation +from aind_data_schema.components.coordinates import Axis, CoordinateSystem, Translation from aind_data_schema.components.devices import FiberProbe from aind_data_schema.components.injection_procedures import InjectionDynamics, InjectionProfile, ViralMaterial from aind_data_schema.components.reagent import FluorescentStain, Fluorophore, ProbeReagent, ProteinProbe @@ -30,6 +31,29 @@ WaterRestriction, ) +BREGMA_ARID = CoordinateSystem( + name="BREGMA_ARID", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + Axis(name=AxisName.DEPTH, direction=Direction.UD), + ], +) + +MPM_MANIP_RFB = CoordinateSystem( + name="MPM_MANIP_RFB", + origin=Origin.TIP, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.X, direction=Direction.LR), + Axis(name=AxisName.Y, direction=Direction.BF), + Axis(name=AxisName.Z, direction=Direction.UD), + ], +) + t = datetime.datetime(2022, 7, 12, 7, 00, 00) t2 = datetime.datetime(2022, 9, 23, 10, 22, 00) @@ -43,7 +67,7 @@ config = ProbeConfig( primary_targeted_structure=CCFv3.VTA, device_name="Probe A", - coordinate_system=CoordinateSystemLibrary.MPM_MANIP_RFB, + local_coordinate_system=MPM_MANIP_RFB, transform=[ Translation( translation=[-600, -3050, 0, 4200], @@ -64,7 +88,7 @@ anaesthesia=Anaesthetic(anaesthetic_type="Isoflurane", duration=180, level=1.5), workstation_id="SWS 3", protocol_id="doi", - coordinate_system=CoordinateSystemLibrary.BREGMA_ARID, + global_coordinate_system=BREGMA_ARID, procedures=[ Headframe( protocol_id="2109", @@ -85,7 +109,7 @@ titer=20000000000000, ) ], - coordinate_system_name=CoordinateSystemLibrary.BREGMA_ARID.name, + coordinate_system_name=BREGMA_ARID.name, coordinates=[ [ Translation( diff --git a/examples/procedures.py b/examples/procedures.py index d9445483b..b1a360f43 100644 --- a/examples/procedures.py +++ b/examples/procedures.py @@ -4,15 +4,11 @@ from datetime import datetime, timezone from aind_data_schema_models.brain_atlas import CCFv3 +from aind_data_schema_models.coordinates import AxisName, Direction, Origin from aind_data_schema_models.units import SizeUnit, VolumeUnit from aind_data_schema.components.configs import ProbeConfig -from aind_data_schema.components.coordinates import ( - CoordinateSystemLibrary, - Origin, - Rotation, - Translation, -) +from aind_data_schema.components.coordinates import Axis, CoordinateSystem, Rotation, Translation from aind_data_schema.components.devices import EphysProbe from aind_data_schema.components.injection_procedures import ( InjectionDynamics, @@ -33,12 +29,46 @@ Surgery, ) +BREGMA_ARI = CoordinateSystem( + name="BREGMA_ARI", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + ], +) + +BREGMA_RASD = CoordinateSystem( + name="BREGMA_RASD", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.SI, direction=Direction.IS), + Axis(name=AxisName.DEPTH, direction=Direction.UD), + ], +) + +MPM_MANIP_RFB = CoordinateSystem( + name="MPM_MANIP_RFB", + origin=Origin.TIP, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.X, direction=Direction.LR), + Axis(name=AxisName.Y, direction=Direction.BF), + Axis(name=AxisName.Z, direction=Direction.UD), + ], +) + # If a timezone isn't specified, the timezone of the computer running this # script will be used as default t = datetime(2022, 7, 12, 7, 00, 00, tzinfo=timezone.utc) t2 = datetime(2022, 9, 23, 10, 22, 00, tzinfo=timezone.utc) -coordinate_system = CoordinateSystemLibrary.BREGMA_RASD +coordinate_system = BREGMA_RASD coordinate_system.name = "LAMBDA_RASD" coordinate_system.origin = Origin.LAMBDA @@ -50,7 +80,7 @@ config = ProbeConfig( primary_targeted_structure=CCFv3.VTA, device_name="Probe A", - coordinate_system=CoordinateSystemLibrary.MPM_MANIP_RFB, + local_coordinate_system=MPM_MANIP_RFB, transform=[ Translation( translation=[-600, -3050, 0, 4200], @@ -66,7 +96,7 @@ animal_weight_prior=22.6, animal_weight_post=22.3, anaesthesia=Anaesthetic(anaesthetic_type="Isoflurane", duration=1, level=1.5), - coordinate_system=coordinate_system, + global_coordinate_system=coordinate_system, workstation_id="SWS 3", procedures=[ ProbeImplant( @@ -124,7 +154,7 @@ experimenters=["Scientist Smith"], ethics_review_id="2109", protocol_id="doi", - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, procedures=[ Perfusion( protocol_id="doi_of_protocol", diff --git a/examples/slap2_acquisition.py b/examples/slap2_acquisition.py index 219f71c12..07a9bfbf0 100644 --- a/examples/slap2_acquisition.py +++ b/examples/slap2_acquisition.py @@ -289,7 +289,7 @@ instrument_id="SLAP2_1_VCO_1", acquisition_type=project_name + ": " + acquisition_type, notes="center back of cranial window is coordinate system origin", - coordinate_system=coordinate_system, + global_coordinate_system=coordinate_system, calibrations=[], maintenance=[], data_streams=[ diff --git a/examples/slap2_instrument.py b/examples/slap2_instrument.py index 67c1ed621..55d1819e5 100644 --- a/examples/slap2_instrument.py +++ b/examples/slap2_instrument.py @@ -3,7 +3,7 @@ import argparse from datetime import datetime -from aind_data_schema_models.coordinates import AnatomicalRelative +from aind_data_schema_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin from aind_data_schema_models.devices import CameraTarget, DetectorType, FilterType from aind_data_schema_models.harp_types import HarpDeviceType from aind_data_schema_models.modalities import Modality @@ -11,9 +11,7 @@ from aind_data_schema_models.units import SizeUnit, SpeedUnit from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import ( - CoordinateSystemLibrary, -) +from aind_data_schema.components.coordinates import Axis, CoordinateSystem from aind_data_schema.components.devices import ( Camera, CameraAssembly, @@ -39,6 +37,17 @@ ) from aind_data_schema.core.instrument import Instrument +BREGMA_ARI = CoordinateSystem( + name="BREGMA_ARI", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + ], +) + computer_names = { "VCO": "w10dt714710", "SLAP2": "SLAP2-1-PC", @@ -349,7 +358,7 @@ location="443", instrument_id="SLAP2_1_VCO_1", modification_date=datetime.now().date(), - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, modalities=[Modality.SLAP2, Modality.BEHAVIOR, Modality.BEHAVIOR_VIDEOS], notes=( "Devices and connections not currently directly controlled or read out by" diff --git a/examples/slap2_structure_acquisition.py b/examples/slap2_structure_acquisition.py index 9f82c742b..479036616 100644 --- a/examples/slap2_structure_acquisition.py +++ b/examples/slap2_structure_acquisition.py @@ -150,7 +150,7 @@ instrument_id="SLAP2_1_VCO_1", acquisition_type=project_name + ": " + acquisition_type, notes="center back of cranial window is coordinate system origin", - coordinate_system=coordinate_system, + global_coordinate_system=coordinate_system, calibrations=[], maintenance=[], data_streams=[ diff --git a/examples/subject.py b/examples/subject.py index 9d6ea4a6a..9f9a61316 100644 --- a/examples/subject.py +++ b/examples/subject.py @@ -22,7 +22,6 @@ date_of_birth=t.date(), source=Organization.AI, breeding_info=BreedingInfo( - breeding_group="Emx1-IRES-Cre(ND)", maternal_id="546543", maternal_genotype="Emx1-IRES-Cre/wt; Camk2a-tTa/Camk2a-tTA", paternal_id="232323", diff --git a/pyproject.toml b/pyproject.toml index 8e9058b27..8183888d2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,11 +20,6 @@ dependencies = [ 'tzdata', ] -[project.optional-dependencies] -transforms = [ - 'scipy', -] - [dependency-groups] dev = [ 'argparse', @@ -34,7 +29,6 @@ dev = [ 'pytest>=8.3', 'pytest-cov>=6', 'ruff>=0.11', - 'scipy', 'semver', ] diff --git a/src/aind_data_schema/__init__.py b/src/aind_data_schema/__init__.py index 93bd4365f..c81fc49fc 100755 --- a/src/aind_data_schema/__init__.py +++ b/src/aind_data_schema/__init__.py @@ -1,3 +1,3 @@ """base module for biodata-schema""" -__version__ = "2.9.0" +__version__ = "3.0.0" diff --git a/src/aind_data_schema/base.py b/src/aind_data_schema/base.py index a904c3b5d..278955b96 100644 --- a/src/aind_data_schema/base.py +++ b/src/aind_data_schema/base.py @@ -30,41 +30,6 @@ MAX_FILE_SIZE = 500 * 1024 # 500KB -def migrate_deprecated_coordinate_system(data: Any, new_field_name: str) -> Any: - """Copy the old 'coordinate_system' value into the new renamed field. - - Use this as a ``model_validator(mode="before")`` in any model that has - added a ``global_coordinate_system`` or ``local_coordinate_system`` field - alongside the now-deprecated ``coordinate_system`` field. When the old - key is present in the raw input dict **and** the new key is absent, the - value is copied to the new key and a ``DeprecationWarning`` is issued. - The old key is left intact so that the deprecated field is still populated. - - Parameters - ---------- - data: - Raw input data passed to the model validator. - new_field_name: - The new field name (``"global_coordinate_system"`` or - ``"local_coordinate_system"``). - - Returns - ------- - Any - The (possibly modified) input data. - """ - if isinstance(data, dict) and "coordinate_system" in data and new_field_name not in data: - warnings.warn( - f"'coordinate_system' is deprecated. Please use '{new_field_name}' instead. " - "The value has been automatically copied to the new field.", - DeprecationWarning, - stacklevel=3, - ) - data = dict(data) # copy to avoid mutating the caller's dict - data[new_field_name] = data["coordinate_system"] - return data - - def _coerce_naive_datetime(v: Any, handler: ValidatorFunctionWrapHandler) -> AwareDatetime: """Validator to wrap around AwareDatetime to set a default timezone as user's locale""" try: diff --git a/src/aind_data_schema/components/configs.py b/src/aind_data_schema/components/configs.py index 7f695c647..d3aac6942 100644 --- a/src/aind_data_schema/components/configs.py +++ b/src/aind_data_schema/components/configs.py @@ -29,7 +29,6 @@ Discriminated, DiscriminatedList, GenericModel, - migrate_deprecated_coordinate_system, ) from aind_data_schema.components.coordinates import ( TRANSFORM_TYPES, @@ -340,15 +339,6 @@ class ImagingConfig(DeviceConfig): """Configuration of an imaging instrument""" channels: DiscriminatedList[Channel] = Field() - coordinate_system: Optional[CoordinateSystem] = Field( - default=None, - title="Coordinate system", - description=( - "Required for ImageSPIM objects and when the imaging coordinate system differs from the " - "Acquisition.coordinate_system" - ), - deprecated="Deprecated: use local_coordinate_system instead", - ) local_coordinate_system: Optional[CoordinateSystem] = Field( default=None, title="Local coordinate system", @@ -363,12 +353,6 @@ class ImagingConfig(DeviceConfig): title="Sampling strategy", ) - @model_validator(mode="before") - @classmethod - def migrate_coordinate_system(cls, data): - """Copy deprecated coordinate_system into local_coordinate_system when only old field is provided""" - return migrate_deprecated_coordinate_system(data, "local_coordinate_system") - @model_validator(mode="after") def check_image_channels(self): """Check that the required channels are present for the images""" @@ -418,11 +402,6 @@ class LickSpoutConfig(DeviceConfig): relative_position: List[AnatomicalRelative] = Field(..., title="Initial relative position") # Transform - coordinate_system: Optional[CoordinateSystem] = Field( - default=None, - title="Device coordinate system", - deprecated="Deprecated: use local_coordinate_system instead", - ) local_coordinate_system: Optional[CoordinateSystem] = Field(default=None, title="Device local coordinate system") transform: Optional[TRANSFORM_TYPES] = Field( default=None, @@ -431,12 +410,6 @@ class LickSpoutConfig(DeviceConfig): ) notes: Optional[str] = Field(default=None, title="Notes", validate_default=True) - @model_validator(mode="before") - @classmethod - def migrate_coordinate_system(cls, data): - """Copy deprecated coordinate_system into local_coordinate_system when only old field is provided""" - return migrate_deprecated_coordinate_system(data, "local_coordinate_system") - @model_validator(mode="after") def validate_other(self): """Validator for other/notes""" @@ -455,11 +428,6 @@ class AirPuffConfig(DeviceConfig): relative_position: List[AnatomicalRelative] = Field(..., title="Initial relative position") # Transform - coordinate_system: Optional[CoordinateSystem] = Field( - default=None, - title="Device coordinate system", - deprecated="Deprecated: use local_coordinate_system instead", - ) local_coordinate_system: Optional[CoordinateSystem] = Field(default=None, title="Device local coordinate system") transform: Optional[TRANSFORM_TYPES] = Field( default=None, @@ -472,12 +440,6 @@ class AirPuffConfig(DeviceConfig): duration: Optional[float] = Field(default=None, title="Duration") - @model_validator(mode="before") - @classmethod - def migrate_coordinate_system(cls, data): - """Copy deprecated coordinate_system into local_coordinate_system when only old field is provided""" - return migrate_deprecated_coordinate_system(data, "local_coordinate_system") - class SpeakerConfig(DeviceConfig): """Configuration of auditory speaker configuration""" @@ -519,20 +481,9 @@ class JoystickConfig(DeviceConfig): class ManipulatorConfig(DeviceConfig): """Configuration of a manipulator""" - coordinate_system: Optional[CoordinateSystem] = Field( - default=None, - title="Device coordinate system", - deprecated="Deprecated: use local_coordinate_system instead", - ) local_coordinate_system: CoordinateSystem = Field(..., title="Device local coordinate system") local_axis_positions: Translation = Field(..., title="Local axis positions") - @model_validator(mode="before") - @classmethod - def migrate_coordinate_system(cls, data): - """Copy deprecated coordinate_system into local_coordinate_system when only old field is provided""" - return migrate_deprecated_coordinate_system(data, "local_coordinate_system") - class ProbeConfig(DeviceConfig): """Configuration for a device inserted into a brain""" @@ -548,15 +499,6 @@ class ProbeConfig(DeviceConfig): ) # Transform - coordinate_system: Optional[CoordinateSystem] = Field( - default=None, - title="Device coordinate system", - description=( - "Device coordinate system, defines un-rotated probe's orientation relative to the " - "Acquisition.coordinate_system" - ), - deprecated="Deprecated: use local_coordinate_system instead", - ) local_coordinate_system: CoordinateSystem = Field( ..., title="Device local coordinate system", @@ -574,12 +516,6 @@ class ProbeConfig(DeviceConfig): dye: Optional[str] = Field(default=None, title="Dye") notes: Optional[str] = Field(default=None, title="Notes") - @model_validator(mode="before") - @classmethod - def migrate_coordinate_system(cls, data): - """Copy deprecated coordinate_system into local_coordinate_system when only old field is provided""" - return migrate_deprecated_coordinate_system(data, "local_coordinate_system") - class MISModuleConfig(DataModel): """Modular insertion system module configuration""" diff --git a/src/aind_data_schema/components/coordinates.py b/src/aind_data_schema/components/coordinates.py index 966f73ebf..28d73f395 100644 --- a/src/aind_data_schema/components/coordinates.py +++ b/src/aind_data_schema/components/coordinates.py @@ -1,15 +1,13 @@ """Classes to define device positions, orientations, and coordinates""" -import math -import warnings from enum import Enum -from typing import List, Optional, Union +from typing import List, Optional from aind_data_schema_models.atlas import AtlasName from aind_data_schema_models.coordinates import AxisName, Direction, Origin from aind_data_schema_models.mouse_anatomy import MouseAnatomyModel from aind_data_schema_models.units import AngleUnit, SizeUnit -from pydantic import Field, field_validator, model_validator +from pydantic import Field, field_validator from aind_data_schema.base import DataModel, DiscriminatedList from aind_data_schema.components.wrappers import AssetPath @@ -57,29 +55,6 @@ class Scale(DataModel): description="Whether to scale around the global or local coordinate system origin", ) - def to_matrix(self) -> List[List[float]]: - """Return the affine scale matrix for arbitrary sized lists - - Returns - ------- - List[List[float]] - Affine scale matrix - """ - warnings.warn( - "to_matrix() is not valid when frame or pivot are set to local values " - "and will be removed in a future version.", - DeprecationWarning, - stacklevel=2, - ) - - size = len(self.scale) - scale_matrix = [[1.0 if i == j else 0.0 for j in range(size + 1)] for i in range(size + 1)] - - for i, value in enumerate(self.scale): - scale_matrix[i][i] = value - - return scale_matrix - class Translation(DataModel): """Translation""" @@ -91,32 +66,6 @@ class Translation(DataModel): description="Whether to translate on the global or local coordinate system axes", ) - def to_matrix(self) -> List[List[float]]: - """Return the affine translation matrix for arbitrary sized lists. - - Returns - ------- - List[List[float]] - Affine transform matrix. - """ - warnings.warn( - "to_matrix() is not valid when frame or pivot are set to local values " - "and will be removed in a future version.", - DeprecationWarning, - stacklevel=2, - ) - - size = len(self.translation) - - # Create (size + 1) x (size + 1) identity matrix - translation_matrix = [[1.0 if i == j else 0.0 for j in range(size + 1)] for i in range(size + 1)] - - # Populate the translation part (last column except for bottom-right corner) - for i, value in enumerate(self.translation): - translation_matrix[i][-1] = value - - return translation_matrix - class Rotation(DataModel): """Rotation @@ -156,51 +105,6 @@ def validate_axis_order(cls, v: str) -> str: raise ValueError(f"axis_order must only contain axis characters (x, y, z), got '{v}'") return v.lower() - def to_matrix(self) -> List[List[float]]: - """Return the affine rotation matrix for arbitrary sized lists. - - Returns - ------- - List[List[float]] - Affine rotation matrix. - """ - warnings.warn( - "to_matrix() is not valid when frame or pivot are set to local values " - "and will be removed in a future version.", - DeprecationWarning, - stacklevel=2, - ) - try: - from scipy.spatial.transform import Rotation as R - except ImportError: # pragma: no cover - raise ImportError( - "Please run `pip install biodata-schema[transforms]` to " - "install necessary dependencies for Rotation.to_matrix" - ) - - # Prepare the angles and axes for scipy Rotation - angles = [angle if self.angles_unit == AngleUnit.RAD else math.radians(angle) for angle in self.angles] - - # Create the rotation matrix - # Apply left-hand rule by negating angles - if self.rotation_direction == RotationDirection.LEFT_HAND: - angles = [-a for a in angles] - - # Use specified axis order, truncated to the number of angles - order = self.axis_order[: len(self.angles)] - - # Intrinsic rotations use uppercase axis letters in scipy - if self.reference_coordinate_system == ReferenceCoordinateSystem.LOCAL: - order = order.upper() - - rotation = R.from_euler(order, angles) - rotation_matrix = rotation.as_matrix().tolist() - - size = len(self.angles) - rotation_matrix = [row + [0.0] for row in rotation_matrix] + [[0.0] * size + [1.0]] - - return rotation_matrix - class Affine(DataModel): """Definition of an NxN+1 affine transform matrix""" @@ -210,75 +114,6 @@ class Affine(DataModel): title="Affine transform matrix", ) - def to_matrix(self) -> List[List[float]]: - """Return the affine transform matrix - - Returns - ------- - List[List[float]] - Affine transform matrix - """ - warnings.warn( - "to_matrix() is not valid when frame or pivot are set to local values " - "and will be removed in a future version.", - DeprecationWarning, - stacklevel=2, - ) - return self.affine_transform - - @classmethod - def compose(cls, transform: List[Union[Translation, Rotation, Scale, "Affine"]]) -> "Affine": - """Compose an affine transform matrix from a list of transforms - - Parameters - ---------- - transform : List[Union[Translation, Rotation, Scale, Affine]] - List of transforms - - Returns - ------- - Affine - Composed transform - """ - warnings.warn( - "compose() is not valid when frame or pivot are set to local values " - "and will be removed in a future version.", - DeprecationWarning, - stacklevel=2, - ) - try: - import numpy as np - except ImportError: # pragma: no cover - raise ImportError( - "Please run `pip install biodata-schema[transforms]` " - "to install necessary dependencies for rotation support" - ) - - matrices = [t.to_matrix() for t in transform] - - # Check that all the transforms are the same size - def get_shape(list_of_lists): - """Get the shape of a list of lists""" - len0 = len(list_of_lists) - len1 = len(list_of_lists[0]) - - # Check that all the lists are the same size - if not all(len(lst) == len1 for lst in list_of_lists): # pragma: no cover - raise ValueError("Cannot get the shape of a non-rectangular list of lists") - - return (len0, len1) - - shape = get_shape(matrices[0]) - if not all(get_shape(matrix) == shape for matrix in matrices): - raise ValueError("All transforms must be the same size") - - transform_matrix = matrices[0] - - for matrix in matrices[1:]: - transform_matrix = np.matmul(transform_matrix, matrix).tolist() - - return Affine(affine_transform=transform_matrix) - class NonlinearTransform(DataModel): """Definition of a nonlinear transform""" @@ -310,19 +145,6 @@ class CoordinateSystem(DataModel): description="Whether the coordinate system is right-handed or left-handed", ) - @model_validator(mode="after") - def warn_depth_axis(self) -> "CoordinateSystem": - """Warn if using a DEPTH axis, which is deprecated in favor of - standard 3-axis coordinate systems with a Z axis for depth""" - if any(axis.name == AxisName.DEPTH for axis in self.axes): - warnings.warn( - f"CoordinateSystem '{self.name}' uses a DEPTH axis, which is deprecated. " - "Use a standard 3-axis coordinate system instead.", - DeprecationWarning, - stacklevel=2, - ) - return self - class Atlas(CoordinateSystem): """Definition an atlas""" @@ -341,186 +163,6 @@ class AtlasCoordinate(Translation): coordinate_system: Atlas = Field(..., title="Atlas") -class CoordinateSystemLibrary: - """Library of common coordinate systems - - Convention is to use the following naming scheme: - - <_ etc - - ORIGIN is the origin in the world, Bregma, "front - """ - - # Standard coordinates - BREGMA_ARI = CoordinateSystem( - name="BREGMA_ARI", - origin=Origin.BREGMA, - axis_unit=SizeUnit.MM, - axes=[ - Axis(name=AxisName.AP, direction=Direction.PA), - Axis(name=AxisName.ML, direction=Direction.LR), - Axis(name=AxisName.SI, direction=Direction.SI), - ], - ) - BREGMA_RAS = CoordinateSystem( - name="BREGMA_RAS", - origin=Origin.BREGMA, - axis_unit=SizeUnit.MM, - axes=[ - Axis(name=AxisName.ML, direction=Direction.LR), - Axis(name=AxisName.AP, direction=Direction.PA), - Axis(name=AxisName.SI, direction=Direction.IS), - ], - ) - - # Standard surface coordinates (with depth) - BREGMA_ARID = CoordinateSystem( - name="BREGMA_ARID", - origin=Origin.BREGMA, - axis_unit=SizeUnit.MM, - axes=[ - Axis(name=AxisName.AP, direction=Direction.PA), - Axis(name=AxisName.ML, direction=Direction.LR), - Axis(name=AxisName.SI, direction=Direction.SI), - Axis(name=AxisName.DEPTH, direction=Direction.UD), - ], - ) - BREGMA_RASD = CoordinateSystem( - name="BREGMA_RASD", - origin=Origin.BREGMA, - axis_unit=SizeUnit.MM, - axes=[ - Axis(name=AxisName.ML, direction=Direction.LR), - Axis(name=AxisName.AP, direction=Direction.PA), - Axis(name=AxisName.SI, direction=Direction.IS), - Axis(name=AxisName.DEPTH, direction=Direction.UD), - ], - ) - - # Arena - ARENA_RBT = CoordinateSystem( - name="ARENA_RBT", - origin=Origin.ARENA_CENTER, - axis_unit=SizeUnit.CM, - axes=[ - Axis(name=AxisName.X, direction=Direction.LR), - Axis(name=AxisName.Y, direction=Direction.FB), - Axis(name=AxisName.Z, direction=Direction.DU), - ], - ) - - SIPE_CAMERA_RBF = CoordinateSystem( - name="SIPE_CAMERA_RBF", - origin=Origin.FRONT_CENTER, - axis_unit=SizeUnit.MM, - axes=[ - Axis(name=AxisName.X, direction=Direction.LR), - Axis(name=AxisName.Y, direction=Direction.UD), - Axis(name=AxisName.Z, direction=Direction.BF), - ], - ) - - SIPE_MONITOR_RTF = CoordinateSystem( - name="SIPE_MONITOR_RTF", - origin=Origin.FRONT_CENTER, - axis_unit=SizeUnit.MM, - axes=[ - Axis(name=AxisName.X, direction=Direction.LR), - Axis(name=AxisName.Y, direction=Direction.DU), - Axis(name=AxisName.Z, direction=Direction.BF), - ], - ) - - SIPE_SPEAKER_LTF = CoordinateSystem( - name="SIPE_SPEAKER_LTF", - origin=Origin.FRONT_CENTER, - axis_unit=SizeUnit.MM, - axes=[ - Axis(name=AxisName.X, direction=Direction.RL), - Axis(name=AxisName.Y, direction=Direction.DU), - Axis(name=AxisName.Z, direction=Direction.FB), - ], - ) - - MPM_MANIP_RFB = CoordinateSystem( - name="MPM_MANIP_RFB", - origin=Origin.TIP, - axis_unit=SizeUnit.MM, - axes=[ - Axis(name=AxisName.X, direction=Direction.LR), - Axis(name=AxisName.Y, direction=Direction.BF), - Axis(name=AxisName.Z, direction=Direction.UD), - ], - ) - - PINPOINT_PROBE_RSAB = CoordinateSystem( - name="PINPOINT_PROBE_RSAB", - origin=Origin.TIP, - axis_unit=SizeUnit.MM, - axes=[ - Axis(name=AxisName.X, direction=Direction.LR), - Axis(name=AxisName.Y, direction=Direction.IS), - Axis(name=AxisName.Z, direction=Direction.PA), - Axis(name=AxisName.DEPTH, direction=Direction.UD), - ], - ) - - SPIM_IJK = CoordinateSystem( - name="SPIM_IJK", - origin=Origin.ORIGIN, - axis_unit=SizeUnit.PX, - axes=[ - Axis(name=AxisName.X, direction=Direction.POS), - Axis(name=AxisName.Y, direction=Direction.POS), - Axis(name=AxisName.Z, direction=Direction.POS), - ], - ) - - SPIM_RPI = CoordinateSystem( - name="SPIM_RPI", - origin=Origin.ORIGIN, - axis_unit=SizeUnit.MM, - axes=[ - Axis(name=AxisName.X, direction=Direction.LR), - Axis(name=AxisName.Y, direction=Direction.AP), - Axis(name=AxisName.Z, direction=Direction.SI), - ], - ) - - SPIM_LPS = CoordinateSystem( - name="SPIM_LPS", - origin=Origin.ORIGIN, - axis_unit=SizeUnit.MM, - axes=[ - Axis(name=AxisName.X, direction=Direction.RL), - Axis(name=AxisName.Y, direction=Direction.AP), - Axis(name=AxisName.Z, direction=Direction.IS), - ], - ) - - MRI_LPS = CoordinateSystem( - name="MRI_LPS", - origin=Origin.ORIGIN, - axis_unit=SizeUnit.MM, - axes=[ - Axis(name=AxisName.X, direction=Direction.RL), - Axis(name=AxisName.Y, direction=Direction.AP), - Axis(name=AxisName.Z, direction=Direction.IS), - ], - ) - - IMAGE_XYZ = CoordinateSystem( - name="IMAGE_XYZ", - origin=Origin.ORIGIN, - axis_unit=SizeUnit.PX, - axes=[ - Axis(name=AxisName.X, direction=Direction.POS), - Axis(name=AxisName.Y, direction=Direction.POS), - Axis(name=AxisName.Z, direction=Direction.POS), - ], - ) - - class AtlasLibrary: """Library of common atlases""" diff --git a/src/aind_data_schema/components/devices.py b/src/aind_data_schema/components/devices.py index 6a361eb22..50a8eb1c1 100644 --- a/src/aind_data_schema/components/devices.py +++ b/src/aind_data_schema/components/devices.py @@ -1,7 +1,6 @@ """schema for various Devices""" import logging -import warnings from datetime import date from decimal import Decimal from enum import Enum @@ -42,8 +41,8 @@ ) from pydantic import Field, ValidationInfo, field_validator, model_validator -from aind_data_schema.base import DataModel, Discriminated, GenericModel, migrate_deprecated_coordinate_system -from aind_data_schema.components.coordinates import TRANSFORM_TYPES, AxisName, CoordinateSystem, Scale +from aind_data_schema.base import DataModel, Discriminated, GenericModel +from aind_data_schema.components.coordinates import TRANSFORM_TYPES, AxisName, CoordinateSystem from aind_data_schema.components.geometry import Circle, Rectangle from aind_data_schema.components.identifiers import Software @@ -105,11 +104,6 @@ class DevicePosition(DataModel): relative_position: List[AnatomicalRelative] = Field(..., title="Relative position") # Position - coordinate_system: Optional[CoordinateSystem] = Field( - default=None, - title="Device coordinate system", - deprecated="Deprecated: use local_coordinate_system instead", - ) local_coordinate_system: Optional[CoordinateSystem] = Field( default=None, title="Device local coordinate system", @@ -120,12 +114,6 @@ class DevicePosition(DataModel): description="Position and orientation of the device in the instrument global coordinate system", ) - @model_validator(mode="before") - @classmethod - def migrate_coordinate_system(cls, data): - """Copy deprecated coordinate_system into local_coordinate_system when only old field is provided""" - return migrate_deprecated_coordinate_system(data, "local_coordinate_system") - @model_validator(mode="after") def validate_transform_and_cs(self): """Ensure that transform and coordinate system are either both set or both unset""" @@ -305,25 +293,12 @@ class DAQChannel(DataModel): # optional fields port: Optional[int] = Field(default=None, title="DAQ port") - channel_index: Optional[int] = Field( - default=None, title="DAQ channel index", deprecated="Use DAQChannel.port instead" - ) sample_rate: Optional[Decimal] = Field(default=None, title="DAQ channel sample rate (Hz)") sample_rate_unit: Optional[FrequencyUnit] = Field(default=None, title="Sample rate unit") event_based_sampling: Optional[bool] = Field( default=None, title="Set to true if DAQ channel is sampled at irregular intervals" ) - @field_validator("channel_index", mode="after") - def deprecated_channel_index(cls, value: Optional[int]) -> Optional[int]: - """Warn if channel_index is used (deprecated)""" - if value is not None: - warnings.warn( - "DAQChannel.channel_index is deprecated. Use DAQChannel.port instead.", - DeprecationWarning, - ) - return value - class DAQDevice(Device): """Data acquisition device containing multiple I/O channels""" @@ -550,9 +525,7 @@ class PockelsCell(Device): class Enclosure(Device): """Description of an enclosure""" - size: Scale = Field(..., title="Size", deprecated="Use shape") - size_unit: SizeUnit = Field(..., title="Size unit", deprecated="Use shape") - shape: Optional[Discriminated[Rectangle | Circle]] = Field(default=None, title="Shape of the enclosure") + shape: Discriminated[Rectangle | Circle] = Field(..., title="Shape of the enclosure") internal_material: Optional[str] = Field(default=None, title="Internal material") external_material: str = Field(..., title="External material") grounded: bool = Field(..., title="Grounded") @@ -607,9 +580,7 @@ class Treadmill(Device): class Arena(Device): """Description of an arena""" - size: Scale = Field(..., title="3D Size", deprecated="Use shape") - size_unit: SizeUnit = Field(..., title="Size unit", deprecated="Use shape") - shape: Optional[Discriminated[Circle | Rectangle]] = Field(default=None, title="Shape of the arena") + shape: Discriminated[Circle | Rectangle] = Field(..., title="Shape of the arena") objects_in_arena: List[Device] = Field(default=[], title="Objects in arena") @@ -641,24 +612,6 @@ class Monitor(Device, DevicePosition): ) brightness_unit: Optional[UnitlessUnit] = Field(default=None, title="Brightness unit") - @model_validator(mode="before") - def add_units_if_needed(cls, data: dict) -> dict: - """Add units for contrast and brightness if values are provided but units are missing - - This validator is necessary for backwards compatibility - TODO: Remove this validator in v3.0.0 - """ - - if "contrast" in data and data["contrast"] is not None and "contrast_unit" not in data: - logger.warning("Adding default unit 'percent' for Monitor.contrast_unit") - data["contrast_unit"] = UnitlessUnit.PERCENT - - if "brightness" in data and data["brightness"] is not None and "brightness_unit" not in data: - logger.warning("Adding default unit 'percent' for Monitor.brightness_unit") - data["brightness_unit"] = UnitlessUnit.PERCENT - - return data - class LickSpout(Device): """Description of a lick spout""" diff --git a/src/aind_data_schema/components/identifiers.py b/src/aind_data_schema/components/identifiers.py index ff679e0ff..096dba475 100644 --- a/src/aind_data_schema/components/identifiers.py +++ b/src/aind_data_schema/components/identifiers.py @@ -1,7 +1,6 @@ """Schema for identifiers""" import re -import warnings from enum import Enum from pathlib import Path from typing import Annotated, Dict, List, Optional @@ -135,9 +134,5 @@ class Code(DataModel): def _ensure_commit_hash_or_version(self) -> "Code": """Ensure that at least one of commit_hash or version is provided for code identification""" if not self.commit_hash and not self.version: - warnings.warn( - "Neither commit_hash nor version provided for Code. " - "It's recommended to provide at least one to ensure reproducibility. " - "In the future, we will require at least one of these fields." - ) + raise ValueError("Either commit_hash or version must be provided for Code to ensure reproducibility.") return self diff --git a/src/aind_data_schema/components/specimen_procedures.py b/src/aind_data_schema/components/specimen_procedures.py index 0431a32e7..dffde2907 100644 --- a/src/aind_data_schema/components/specimen_procedures.py +++ b/src/aind_data_schema/components/specimen_procedures.py @@ -1,6 +1,5 @@ """Specimen procedures module for AIND data schema.""" -import warnings from datetime import date from enum import Enum from typing import Dict, List, Optional, Union @@ -15,7 +14,6 @@ AwareDatetimeWithDefault, DataModel, DiscriminatedList, - migrate_deprecated_coordinate_system, ) from aind_data_schema.components.coordinates import Atlas, CoordinateSystem, Translation from aind_data_schema.components.identifiers import ProtocolListMixin @@ -51,54 +49,6 @@ class Section(DataModel): description="Whether the section includes additional tissue surrounding the targeted structure.", ) - coordinate_system_name: Optional[str] = Field( - default=None, title="Coordinate system name", deprecated="Use PlanarSection instead" - ) - start_coordinate: Optional[Translation] = Field( - default=None, title="Start coordinate", deprecated="Use PlanarSection instead" - ) - end_coordinate: Optional[Translation] = Field( - default=None, title="End coordinate", deprecated="Use PlanarSection instead" - ) - thickness: Optional[float] = Field(default=None, title="Slice thickness", deprecated="Use PlanarSection instead") - thickness_unit: Optional[SizeUnit] = Field( - default=None, title="Slice thickness unit", deprecated="Use PlanarSection instead" - ) - partial_slice: Optional[List[AnatomicalRelative]] = Field( - default=None, - title="Partial slice", - description="If sectioning does not include the entire slice, indicate which part of the slice is retained.", - deprecated="Use PlanarSection instead", - ) - - @model_validator(mode="after") - def deprecated_coordinate_fields(self): - """Warn if deprecated coordinate fields are used""" - deprecated_fields = [] - if self.coordinate_system_name is not None: - deprecated_fields.append("coordinate_system_name") - if self.start_coordinate is not None: - deprecated_fields.append("start_coordinate") - if self.end_coordinate is not None: - deprecated_fields.append("end_coordinate") - if self.thickness is not None: - deprecated_fields.append("thickness") - if self.thickness_unit is not None: - deprecated_fields.append("thickness_unit") - if self.partial_slice is not None: - deprecated_fields.append("partial_slice") - - if deprecated_fields: - warnings.warn( - ( - f"Section fields {deprecated_fields} are deprecated. " - "Use PlanarSection for sections with coordinate data." - ), - DeprecationWarning, - ) - - return self - class PlanarSection(Section): """Description of a single planar section of brain tissue""" @@ -137,24 +87,12 @@ class Sectioning(DataModel): class PlanarSectioning(Sectioning): """Description of a sectioning procedure performed on the coronal, sagittal, or transverse/axial plane""" - coordinate_system: Optional[CoordinateSystem | Atlas] = Field( - default=None, - title="Sectioning coordinate system", - description="Only required if different from the Procedures.coordinate_system", - deprecated="Deprecated: use global_coordinate_system instead", - ) global_coordinate_system: Optional[CoordinateSystem | Atlas] = Field( default=None, title="Sectioning global coordinate system", description="Only required if different from the Procedures.global_coordinate_system", ) - @model_validator(mode="before") - @classmethod - def migrate_coordinate_system(cls, data): - """Copy deprecated coordinate_system into global_coordinate_system when only old field is provided""" - return migrate_deprecated_coordinate_system(data, "global_coordinate_system") - sections: List[Union[Section, PlanarSection]] = Field( ..., title="Planar sections", description="Use PlanarSection for new implementations" ) diff --git a/src/aind_data_schema/components/stimulus.py b/src/aind_data_schema/components/stimulus.py index 5cbe2fca1..f9a415371 100644 --- a/src/aind_data_schema/components/stimulus.py +++ b/src/aind_data_schema/components/stimulus.py @@ -4,7 +4,7 @@ from enum import Enum from typing import List, Optional -from aind_data_schema_models.units import ConcentrationUnit, FrequencyUnit, PowerUnit, TimeUnit +from aind_data_schema_models.units import FrequencyUnit, PowerUnit, TimeUnit from pydantic import Field, model_validator from aind_data_schema.base import DataModel, GenericModel @@ -98,32 +98,6 @@ class PhotoStimulation(GenericModel): notes: Optional[str] = Field(default=None, title="Notes") -class OlfactometerChannelConfig(DataModel): - """ - **DEPRECATED**: Use OlfactometerConfig in aind_data_schema.components.configs - - Description of olfactometer channel configurations""" - - channel_index: int = Field(..., title="Channel index") - odorant: str = Field(..., title="Odorant") - odorant_dilution: Decimal = Field(..., title="Odorant dilution") - odorant_dilution_unit: ConcentrationUnit = Field(default=ConcentrationUnit.VOLUME_PERCENT, title="Dilution unit") - notes: Optional[str] = Field(default=None, title="Notes") - - -class OlfactoryStimulation(GenericModel): - """ - **DEPRECATED**: Use StimulusEpoch.stimulus_name and OlfactometerConfig in aind_data_schema.components.configs - - Description of a olfactory stimulus""" - - stimulus_name: str = Field(..., title="Stimulus name") - channels: Optional[List[OlfactometerChannelConfig]] = Field( - default=None, title="Channels", deprecated="Use OlfactometerConfig instead" - ) - notes: Optional[str] = Field(default=None, title="Notes", deprecated="Use OlfactometerConfig instead") - - class AuditoryStimulation(GenericModel): """Description of an auditory stimulus""" diff --git a/src/aind_data_schema/components/subject_procedures.py b/src/aind_data_schema/components/subject_procedures.py index 4e94ba3fd..716e45d56 100644 --- a/src/aind_data_schema/components/subject_procedures.py +++ b/src/aind_data_schema/components/subject_procedures.py @@ -5,9 +5,9 @@ from aind_data_schema_models.coordinates import Origin from aind_data_schema_models.units import MassUnit, UnitlessUnit, VolumeUnit -from pydantic import Field, model_validator +from pydantic import Field -from aind_data_schema.base import DataModel, DiscriminatedList, migrate_deprecated_coordinate_system +from aind_data_schema.base import DataModel, DiscriminatedList from aind_data_schema.components.coordinates import CoordinateSystem, Translation from aind_data_schema.components.identifiers import Code, ProtocolMixin from aind_data_schema.components.injection_procedures import Injection @@ -122,14 +122,6 @@ class Surgery(ProtocolMixin, DataModel): workstation_id: Optional[str] = Field(default=None, title="Workstation ID") # Coordinate system - coordinate_system: Optional[CoordinateSystem] = Field( - default=None, - title="Surgery coordinate system", - description=( - "Only required when the Surgery.coordinate_system is different from the Procedures.coordinate_system" - ), - deprecated="Deprecated: use global_coordinate_system instead", - ) global_coordinate_system: Optional[CoordinateSystem] = Field( default=None, title="Surgery global coordinate system", @@ -139,12 +131,6 @@ class Surgery(ProtocolMixin, DataModel): ), ) - @model_validator(mode="before") - @classmethod - def migrate_coordinate_system(cls, data): - """Copy deprecated coordinate_system into global_coordinate_system when only old field is provided""" - return migrate_deprecated_coordinate_system(data, "global_coordinate_system") - # Measured coordinates measured_coordinates: Optional[Dict[Origin, Translation]] = Field( default=None, diff --git a/src/aind_data_schema/components/subjects.py b/src/aind_data_schema/components/subjects.py index 2070bf163..49dfd9bf6 100644 --- a/src/aind_data_schema/components/subjects.py +++ b/src/aind_data_schema/components/subjects.py @@ -80,26 +80,11 @@ class Housing(DataModel): class BreedingInfo(DataModel): """Description of breeding info for subject""" - breeding_group: Optional[str] = Field( - default=None, title="Breeding Group", deprecated="Field will be removed in future releases" - ) maternal_id: str = Field(..., title="Maternal specimen ID") maternal_genotype: str = Field(..., title="Maternal genotype") paternal_id: str = Field(..., title="Paternal specimen ID") paternal_genotype: str = Field(..., title="Paternal genotype") - @field_validator("breeding_group", mode="before") - def warn_breeding_group_deprecated(cls, v: Optional[str]) -> Optional[str]: - """Validator to warn about deprecated breeding_group field""" - if v: - import warnings - - warnings.warn( - "The 'breeding_group' field is deprecated and will be removed. The field's value has been cleared.", - DeprecationWarning, - ) - return None - class MouseSubject(DataModel): """Description of a mouse subject""" diff --git a/src/aind_data_schema/core/acquisition.py b/src/aind_data_schema/core/acquisition.py index 29b72db86..c8c8cd147 100644 --- a/src/aind_data_schema/core/acquisition.py +++ b/src/aind_data_schema/core/acquisition.py @@ -19,7 +19,6 @@ DataModel, DiscriminatedList, GenericModel, - migrate_deprecated_coordinate_system, ) from aind_data_schema.components.configs import ( AirPuffConfig, @@ -429,15 +428,6 @@ def coerce_fixed_offset_tz_string(cls, v): notes: Optional[str] = Field(default=None, title="Notes") # Coordinate system - coordinate_system: Optional[CoordinateSystem] = Field( - default=None, - title="Coordinate system", - description=( - "Origin and axis definitions for determining the configured position of devices during acquisition." - " Required when coordinates are provided within the Acquisition" - ), - deprecated="Deprecated: use global_coordinate_system instead", - ) global_coordinate_system: Optional[CoordinateSystem] = Field( default=None, title="Global coordinate system", @@ -447,12 +437,6 @@ def coerce_fixed_offset_tz_string(cls, v): ), ) - @model_validator(mode="before") - @classmethod - def migrate_coordinate_system(cls, data): - """Copy deprecated coordinate_system into global_coordinate_system when only old field is provided""" - return migrate_deprecated_coordinate_system(data, "global_coordinate_system") - # Instrument metadata calibrations: List[CALIBRATIONS] = Field( default=[], diff --git a/src/aind_data_schema/core/data_description.py b/src/aind_data_schema/core/data_description.py index 7b26b2478..bd80bbea9 100644 --- a/src/aind_data_schema/core/data_description.py +++ b/src/aind_data_schema/core/data_description.py @@ -1,7 +1,6 @@ """Generic metadata classes for data""" import re -import warnings from typing import List, Literal, Optional from aind_data_schema_models.data_name_patterns import ( @@ -172,48 +171,3 @@ def source_data_when_raw(self): if self.data_level == DataLevel.RAW and self.source_data is not None: raise ValueError("source_data must not be set when data_level is 'raw'") return self - - @classmethod - def from_raw( - cls, data_description: "DataDescription", process_name: str, source_data: Optional[List[str]] = None, **kwargs - ) -> "DataDescription": - """Deprecated. Use aind_data_schema.utils.inheritance.derive_data_description_from_raw instead.""" - from aind_data_schema.utils.inheritance import derive_data_description_from_raw - - warnings.warn( - "DataDescription.from_raw is deprecated. Use " - "aind_data_schema.utils.inheritance.derive_data_description_from_raw instead.", - DeprecationWarning, - stacklevel=2, - ) - return derive_data_description_from_raw(data_description, process_name, source_data, **kwargs) - - @classmethod - def from_derived( - cls, data_description: "DataDescription", process_name: str, source_data: Optional[List[str]] = None, **kwargs - ) -> "DataDescription": - """Deprecated. Use aind_data_schema.utils.inheritance.derive_data_description_from_derived instead.""" - from aind_data_schema.utils.inheritance import derive_data_description_from_derived - - warnings.warn( - "DataDescription.from_derived is deprecated. Use " - "aind_data_schema.utils.inheritance.derive_data_description_from_derived instead.", - DeprecationWarning, - stacklevel=2, - ) - return derive_data_description_from_derived(data_description, process_name, source_data, **kwargs) - - @classmethod - def from_data_description( - cls, data_description: "DataDescription", process_name: str, source_data: Optional[List[str]] = None, **kwargs - ) -> "DataDescription": - """Deprecated. Use aind_data_schema.utils.inheritance.derive_data_description instead.""" - from aind_data_schema.utils.inheritance import derive_data_description - - warnings.warn( - "DataDescription.from_data_description is deprecated. Use " - "aind_data_schema.utils.inheritance.derive_data_description instead.", - DeprecationWarning, - stacklevel=2, - ) - return derive_data_description(data_description, process_name, source_data, **kwargs) diff --git a/src/aind_data_schema/core/instrument.py b/src/aind_data_schema/core/instrument.py index fca2a7ba4..13eac40c2 100644 --- a/src/aind_data_schema/core/instrument.py +++ b/src/aind_data_schema/core/instrument.py @@ -7,7 +7,7 @@ from aind_data_schema_models.modalities import Modality from pydantic import Field, SkipValidation, field_validator, model_validator -from aind_data_schema.base import DataCoreModel, DiscriminatedList, migrate_deprecated_coordinate_system +from aind_data_schema.base import DataCoreModel, DiscriminatedList from aind_data_schema.components.connections import Connection from aind_data_schema.components.coordinates import CoordinateSystem from aind_data_schema.components.devices import ( @@ -53,9 +53,10 @@ Tube, Wheel, ) +from aind_data_schema.components.identifiers import Software from aind_data_schema.components.measurements import CALIBRATIONS from aind_data_schema.utils.merge import merge_notes, merge_optional_list, merge_str_alphabetical -from aind_data_schema.utils.validators import recursive_get_all_names +from aind_data_schema.utils.validators import recursive_get_all_names, recursive_get_named_objects logger = logging.getLogger(__name__) @@ -103,24 +104,12 @@ class Instrument(DataCoreModel): ) # coordinate system - coordinate_system: Optional[CoordinateSystem] = Field( - default=None, - title="Coordinate system", - description="Origin and axis definitions for determining the position of the instrument's components", - deprecated="Deprecated: use global_coordinate_system instead", - ) global_coordinate_system: CoordinateSystem = Field( ..., title="Global coordinate system", description="Origin and axis definitions for determining the position of the instrument's components", ) - @model_validator(mode="before") - @classmethod - def migrate_coordinate_system(cls, data): - """Copy deprecated coordinate_system into global_coordinate_system when only old field is provided""" - return migrate_deprecated_coordinate_system(data, "global_coordinate_system") - # instrument details temperature_control: Optional[bool] = Field( default=None, title="Temperature control", description="Does the instrument maintain a constant temperature?" @@ -214,16 +203,37 @@ def validate_cameras_other(self): @model_validator(mode="after") def validate_unique_component_names(self): - """Warn if any component names are duplicated""" - names = self.get_component_names() - if len(set(names)) != len(names): - seen = set() - duplicates = set() - for name in names: - if name in seen: - duplicates.add(name) - seen.add(name) - logger.warning(f"Duplicate component names found: {sorted(duplicates)}") + """Raise if a device name is used more than once + + Component names are how connections and configurations refer to devices, so a + repeated name is ambiguous. Two things are rejected: two top-level components + sharing a name, and two *distinct* objects anywhere in the tree sharing a name. + A single shared object referenced from more than one place is not a collision, + so objects are compared by value first. + + ``Software`` names are exempt entirely: software is a descriptor rather than an + addressable device, and the same package is routinely recorded on several + devices at once. + """ + top_level = [ + component.name + for component in self.components + if getattr(component, "name", None) and not isinstance(component, Software) + ] + duplicates = {name for name in top_level if top_level.count(name) > 1} + + by_name = {} + for component in self.components: + for name, obj in recursive_get_named_objects(component): + if isinstance(obj, Software): + continue + distinct = by_name.setdefault(name, []) + if not any(obj == other for other in distinct): + distinct.append(obj) + duplicates |= {name for name, distinct in by_name.items() if len(distinct) > 1} + + if duplicates: + raise ValueError(f"Duplicate component names found: {sorted(duplicates)}") return self @model_validator(mode="after") diff --git a/src/aind_data_schema/core/metadata.py b/src/aind_data_schema/core/metadata.py index 3061df140..0d221ae55 100644 --- a/src/aind_data_schema/core/metadata.py +++ b/src/aind_data_schema/core/metadata.py @@ -292,16 +292,10 @@ def validate_calibration_object_tags(self): and isinstance(self.subject.subject_details, CalibrationObject) and self.data_description ): - if self.data_description.tags is None: - # Initialize tags list if it doesn't exist - self.data_description.tags = [] - - if "calibration" not in self.data_description.tags: + if "calibration" not in (self.data_description.tags or []): warnings.warn( - "Subject is a CalibrationObject but 'calibration' tag is missing from data_description.tags. " - "Adding 'calibration' tag automatically." + "Subject is a CalibrationObject but 'calibration' tag is missing from data_description.tags." ) - self.data_description.tags.append("calibration") return self diff --git a/src/aind_data_schema/core/procedures.py b/src/aind_data_schema/core/procedures.py index 3ce8f631e..bf5865f08 100644 --- a/src/aind_data_schema/core/procedures.py +++ b/src/aind_data_schema/core/procedures.py @@ -1,11 +1,10 @@ """schema for various Procedures""" -import warnings from typing import List, Literal, Optional from pydantic import Field, SkipValidation, model_validator -from aind_data_schema.base import DataCoreModel, DiscriminatedList, migrate_deprecated_coordinate_system +from aind_data_schema.base import DataCoreModel, DiscriminatedList from aind_data_schema.components.coordinates import CoordinateSystem from aind_data_schema.components.injection_procedures import Injection from aind_data_schema.components.specimen_procedures import SpecimenProcedure @@ -40,15 +39,6 @@ class Procedures(DataCoreModel): ) # Coordinate system - coordinate_system: Optional[CoordinateSystem] = Field( - default=None, - title="Coordinate System", - description=( - "Origin and axis definitions for determining the configured position of devices implanted during" - " procedures. Required when coordinates are provided within the Procedures" - ), - deprecated="Deprecated: use global_coordinate_system instead", - ) global_coordinate_system: Optional[CoordinateSystem] = Field( default=None, title="Global Coordinate System", @@ -58,12 +48,6 @@ class Procedures(DataCoreModel): ), ) - @model_validator(mode="before") - @classmethod - def migrate_coordinate_system(cls, data): - """Copy deprecated coordinate_system into global_coordinate_system when only old field is provided""" - return migrate_deprecated_coordinate_system(data, "global_coordinate_system") - notes: Optional[str] = Field(default=None, title="Notes") def get_device_names(self) -> List[str]: @@ -91,17 +75,13 @@ def get_device_names(self) -> List[str]: @model_validator(mode="after") def reject_injections(self): - """Raise a warning for injections since they should now be wrapped + """Reject bare injections since they must be wrapped in a Surgery or NonSurgicalInjection procedure """ for procedure in self.subject_procedures: if isinstance(procedure, Injection): - warnings.warn( - "Injection procedures should be wrapped in a Surgery or NonSurgicalInjection procedure.", - UserWarning, - stacklevel=2, - ) + raise ValueError("Injection procedures must be wrapped in a Surgery or NonSurgicalInjection procedure.") return self diff --git a/src/aind_data_schema/core/quality_control.py b/src/aind_data_schema/core/quality_control.py index 499cf4f5b..cbe320da4 100644 --- a/src/aind_data_schema/core/quality_control.py +++ b/src/aind_data_schema/core/quality_control.py @@ -1,6 +1,5 @@ """Schemas for Quality Metrics""" -import warnings from datetime import datetime, timezone from enum import Enum from typing import Any, List, Literal, Optional, Union @@ -85,23 +84,6 @@ def validate_multi_asset(self): raise ValueError(f"Metric '{self.name}' is a single-asset metric and should not have evaluated_assets") return self - @model_validator(mode="before") - @classmethod - def fix_tag_lists(cls, self): - """Convert tags from list to dict if necessary - - This function is for backwards compatibility with v2.2.X where tags were stored as lists of strings. - - Remove this function in biodata-schema v3.X - """ - if "tags" not in self: - return self - tags = self["tags"] - if isinstance(tags, list): - warnings.warn("QCMetric 'tags' field is now a dict. Converting from list to dict", DeprecationWarning) - self["tags"] = {f"tag_{i + 1}": tag for i, tag in enumerate(tags)} - return self - class CurationHistory(DataModel): """Schema to track curator name and timestamp for curation events""" @@ -295,23 +277,6 @@ def __add__(self, other: "QualityControl") -> "QualityControl": allow_tag_failures=combined_allow_tag_failures, ) - @model_validator(mode="before") - def fix_default_grouping_list(cls, value: dict) -> dict: - """Convert default grouping from list of strings to list of list of strings if necessary - This function is for backwards compatibility with v2.2.X where default_grouping was stored as a list of strings. - Remove this function in biodata-schema v3.X - """ - if "default_grouping" not in value or "metrics" not in value or len(value["metrics"]) == 0: - return value - - if all(isinstance(item, str) for item in value["default_grouping"]): - first_metric = value["metrics"][0] - if isinstance(first_metric, dict) and "tags" in first_metric: - if isinstance(first_metric["tags"], list): - value["default_grouping"] = [["modality"], ["tag_1"]] - - return value - def _get_status_by_date(metric: QCMetric | CurationMetric, date: datetime) -> Status: """Get the status of a metric at a specific date by looking through status_history. diff --git a/src/aind_data_schema/utils/validators.py b/src/aind_data_schema/utils/validators.py index ecd59db0a..e85c6d118 100644 --- a/src/aind_data_schema/utils/validators.py +++ b/src/aind_data_schema/utils/validators.py @@ -245,6 +245,36 @@ def recursive_coord_system_check(data, coordinate_system_name: Optional[str], ax _recurse_helper(data=data, coordinate_system_name=coordinate_system_name, axis_count=axis_count) +def recursive_get_named_objects(obj: Any) -> List[tuple]: + """Recursively extract (name, object) pairs from a DataModel object and its nested fields. + + Unlike :func:`recursive_get_all_names`, this keeps the object each name came from, so + callers can tell a genuine name collision between two distinct objects apart from the + same object being referenced in more than one place. + """ + pairs = [] + + if obj is None or isinstance(obj, Enum): # Skip None and Enums + return pairs + + elif isinstance(obj, list): # Handle lists + for item in obj: + pairs.extend(recursive_get_named_objects(item)) + + elif hasattr(obj, "__dict__"): # Handle objects (including Pydantic models) + if not hasattr(obj, "object_type"): + # All DataModel objects should have an object_type attribute + return pairs + if hasattr(obj, "name") and isinstance(obj.name, str): # Ensure name is a string + pairs.append((obj.name, obj)) + + # Continue recursion into fields + for field_value in vars(obj).values(): + pairs.extend(recursive_get_named_objects(field_value)) + + return pairs + + def recursive_get_all_names(obj: Any) -> List[str]: """Recursively extract all 'name' fields from a DataModel object and its nested fields.""" names = [] @@ -263,12 +293,8 @@ def recursive_get_all_names(obj: Any) -> List[str]: if hasattr(obj, "name") and isinstance(obj.name, str): # Ensure name is a string names.append(obj.name) - # Continue recursion into fields, skipping the deprecated coordinate_system - # when a renamed field (local_coordinate_system / global_coordinate_system) is present - _has_new_cs = hasattr(obj, "local_coordinate_system") or hasattr(obj, "global_coordinate_system") - for field_name, field_value in vars(obj).items(): - if field_name == "coordinate_system" and _has_new_cs: - continue + # Continue recursion into fields + for field_value in vars(obj).values(): names.extend(recursive_get_all_names(field_value)) return names @@ -276,7 +302,7 @@ def recursive_get_all_names(obj: Any) -> List[str]: def recursive_check_paths(obj: Any, directory: Optional[Path] = None): """Recursively check for AssetPath objects and validate their paths. - This function checks if the paths are absolute and logs a warning if they are. + This function raises a ValueError if a path is absolute. It also checks if the paths exist and logs a warning if they do not. If the object is a list, tuple, set, or dict, it recursively checks each item. @@ -285,13 +311,18 @@ def recursive_check_paths(obj: Any, directory: Optional[Path] = None): obj : Any directory : Optional[Path], optional root directory, by default uses the current working directory + + Raises + ------ + ValueError + If an AssetPath is absolute rather than relative to the metadata directory. """ if isinstance(obj, Enum): return if isinstance(obj, AssetPath): if obj.is_absolute(): - logger.warning(f"AssetPath {obj} is absolute, ensure file paths are relative to the metadata directory") + raise ValueError(f"AssetPath {obj} is absolute, file paths must be relative to the metadata directory") if directory is None: directory = Path.cwd() diff --git a/tests/coordinate_systems.py b/tests/coordinate_systems.py new file mode 100644 index 000000000..c0aa8e39b --- /dev/null +++ b/tests/coordinate_systems.py @@ -0,0 +1,103 @@ +"""Coordinate systems used by the test suite. + +``CoordinateSystemLibrary`` was removed from ``biodata-schema`` in v3.0.0. Projects +are expected to define the coordinate systems they use, as shown here. +""" + +from aind_data_schema_models.coordinates import AxisName, Direction, Origin +from aind_data_schema_models.units import SizeUnit + +from aind_data_schema.components.coordinates import Axis, CoordinateSystem + +BREGMA_ARI = CoordinateSystem( + name="BREGMA_ARI", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + ], +) +BREGMA_ARID = CoordinateSystem( + name="BREGMA_ARID", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.SI, direction=Direction.SI), + Axis(name=AxisName.DEPTH, direction=Direction.UD), + ], +) +BREGMA_RASD = CoordinateSystem( + name="BREGMA_RASD", + origin=Origin.BREGMA, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.ML, direction=Direction.LR), + Axis(name=AxisName.AP, direction=Direction.PA), + Axis(name=AxisName.SI, direction=Direction.IS), + Axis(name=AxisName.DEPTH, direction=Direction.UD), + ], +) +MPM_MANIP_RFB = CoordinateSystem( + name="MPM_MANIP_RFB", + origin=Origin.TIP, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.X, direction=Direction.LR), + Axis(name=AxisName.Y, direction=Direction.BF), + Axis(name=AxisName.Z, direction=Direction.UD), + ], +) +SIPE_MONITOR_RTF = CoordinateSystem( + name="SIPE_MONITOR_RTF", + origin=Origin.FRONT_CENTER, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.X, direction=Direction.LR), + Axis(name=AxisName.Y, direction=Direction.DU), + Axis(name=AxisName.Z, direction=Direction.BF), + ], +) +SPIM_RPI = CoordinateSystem( + name="SPIM_RPI", + origin=Origin.ORIGIN, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.X, direction=Direction.LR), + Axis(name=AxisName.Y, direction=Direction.AP), + Axis(name=AxisName.Z, direction=Direction.SI), + ], +) +SPIM_IJK = CoordinateSystem( + name="SPIM_IJK", + origin=Origin.ORIGIN, + axis_unit=SizeUnit.PX, + axes=[ + Axis(name=AxisName.X, direction=Direction.POS), + Axis(name=AxisName.Y, direction=Direction.POS), + Axis(name=AxisName.Z, direction=Direction.POS), + ], +) +MRI_LPS = CoordinateSystem( + name="MRI_LPS", + origin=Origin.ORIGIN, + axis_unit=SizeUnit.MM, + axes=[ + Axis(name=AxisName.X, direction=Direction.RL), + Axis(name=AxisName.Y, direction=Direction.AP), + Axis(name=AxisName.Z, direction=Direction.IS), + ], +) +IMAGE_XYZ = CoordinateSystem( + name="IMAGE_XYZ", + origin=Origin.ORIGIN, + axis_unit=SizeUnit.PX, + axes=[ + Axis(name=AxisName.X, direction=Direction.POS), + Axis(name=AxisName.Y, direction=Direction.POS), + Axis(name=AxisName.Z, direction=Direction.POS), + ], +) diff --git a/tests/test_acquisition.py b/tests/test_acquisition.py index 5d757d1af..92dd5cdc8 100644 --- a/tests/test_acquisition.py +++ b/tests/test_acquisition.py @@ -22,7 +22,7 @@ SampleChamberConfig, ) from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import CoordinateSystemLibrary, Translation +from aind_data_schema.components.coordinates import Translation from aind_data_schema.core.acquisition import ( Acquisition, AcquisitionSubjectDetails, @@ -34,6 +34,7 @@ from examples.exaspim_acquisition import acq as exaspim_acquisition from examples.mri_acquisition import acquisition as mri_acquisition from examples.mri_acquisition import scan1 +from tests.coordinate_systems import BREGMA_ARID class TestAcquisition: @@ -125,7 +126,7 @@ def test_specimen_required(self): subject_details=AcquisitionSubjectDetails( mouse_platform_name="Running wheel", ), - coordinate_system=CoordinateSystemLibrary.BREGMA_ARID, + global_coordinate_system=BREGMA_ARID, data_streams=[ DataStream( stream_start_time=datetime.now(), diff --git a/tests/test_acquisition_configs.py b/tests/test_acquisition_configs.py index 0408a59a7..3382f1890 100644 --- a/tests/test_acquisition_configs.py +++ b/tests/test_acquisition_configs.py @@ -8,7 +8,6 @@ from pydantic import ValidationError from aind_data_schema.components.configs import ( - AirPuffConfig, Channel, DetectorConfig, ImageSPIM, @@ -25,7 +24,8 @@ SubjectPosition, Valence, ) -from aind_data_schema.components.coordinates import Affine, CoordinateSystemLibrary, Translation +from aind_data_schema.components.coordinates import Affine, Translation +from tests.coordinate_systems import SPIM_IJK class TestMRIScan: @@ -163,7 +163,7 @@ def setup_method(self): ) ], ) - self.coordinate_system = CoordinateSystemLibrary.SPIM_IJK + self.coordinate_system = SPIM_IJK self.sampling_strategy = SamplingStrategy( frame_rate=30.0, frame_rate_unit=FrequencyUnit.HZ, @@ -197,7 +197,7 @@ def test_check_image_channels_success(self): ), ], sampling_strategy=self.sampling_strategy, - coordinate_system=self.coordinate_system, + local_coordinate_system=self.coordinate_system, ) assert imaging_config is not None @@ -230,7 +230,7 @@ def test_check_image_channels_failure(self): ) ], sampling_strategy=self.sampling_strategy, - coordinate_system=self.coordinate_system, + local_coordinate_system=self.coordinate_system, ) assert "Channel InvalidChannel must be defined in the ImagingConfig.channels list" in str(context.value) @@ -250,7 +250,7 @@ def test_require_cs_images_success(self): imaging_angle_unit=AngleUnit.DEG, ), ], - coordinate_system=self.coordinate_system, + local_coordinate_system=self.coordinate_system, ) assert imaging_config is not None @@ -271,7 +271,7 @@ def test_require_cs_images_failure(self): imaging_angle_unit=AngleUnit.DEG, ), ], - coordinate_system=None, + local_coordinate_system=None, ) assert ( "ImagingConfig.local_coordinate_system is required when ImagingConfig.images are ImageSPIM objects" @@ -281,17 +281,3 @@ def test_require_cs_images_failure(self): class TestAirPuffConfig: """Tests for the AirPuffConfig class""" - - def test_migrate_deprecated_coordinate_system(self): - """Test that deprecated coordinate_system is copied to local_coordinate_system""" - import warnings - - with warnings.catch_warnings(record=True) as w: - warnings.simplefilter("always") - config = AirPuffConfig( - device_name="AirPuff1", - relative_position=[], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, - ) - assert config.local_coordinate_system == CoordinateSystemLibrary.BREGMA_ARI - assert any(issubclass(warning.category, DeprecationWarning) for warning in w) diff --git a/tests/test_coordinates.py b/tests/test_coordinates.py index b58359bda..3b13c4168 100644 --- a/tests/test_coordinates.py +++ b/tests/test_coordinates.py @@ -2,14 +2,11 @@ import warnings -import numpy as np import pytest from aind_data_schema_models.atlas import AtlasName from aind_data_schema_models.units import SizeUnit -from scipy.spatial.transform import Rotation as R from aind_data_schema.components.coordinates import ( - Affine, Atlas, Axis, AxisName, @@ -20,7 +17,6 @@ ReferenceCoordinateSystem, Rotation, RotationDirection, - Scale, Translation, ) @@ -36,22 +32,6 @@ def teardown_method(self): """Tear down after tests""" warnings.resetwarnings() - def test_to_matrix_default_order(self): - """Test to_matrix method with default axis order""" - scale = Scale(scale=[2, 3, 4]) - expected_matrix = [[2.0, 0.0, 0.0, 0.0], [0.0, 3.0, 0.0, 0.0], [0.0, 0.0, 4.0, 0.0], [0.0, 0.0, 0.0, 1.0]] - assert scale.to_matrix() == expected_matrix - - def test_to_matrix_partial_axes(self): - """Test to_matrix method with partial axes""" - scale = Scale(scale=[2, 3]) - expected_matrix = [ - [2.0, 0.0, 0.0], - [0.0, 3.0, 0.0], - [0.0, 0.0, 1.0], - ] - assert scale.to_matrix() == expected_matrix - class TestTranslation: """Tests for the Translation class""" @@ -64,18 +44,6 @@ def teardown_method(self): """Tear down after tests""" warnings.resetwarnings() - def test_to_matrix_default_order(self): - """Test to_matrix method with default axis order""" - translation = Translation(translation=[2, 3, 4]) - expected_matrix = [[1.0, 0.0, 0.0, 2.0], [0.0, 1.0, 0.0, 3.0], [0.0, 0.0, 1.0, 4.0], [0.0, 0.0, 0.0, 1.0]] - assert translation.to_matrix() == expected_matrix - - def test_to_matrix_partial_axes(self): - """Test to_matrix method with partial axes""" - translation = Translation(translation=[2, 3]) - expected_matrix = [[1.0, 0.0, 2.0], [0.0, 1.0, 3.0], [0.0, 0.0, 1.0]] - assert translation.to_matrix() == expected_matrix - class TestRotation: """Tests for the Rotation class""" @@ -88,49 +56,6 @@ def teardown_method(self): """Tear down after tests""" warnings.resetwarnings() - def test_to_matrix_default_order(self): - """Test to_matrix method with default axis order""" - - rotation = Rotation( - angles=[90, 45, 30], - ) - expected_matrix = R.from_euler("xyz", [90, 45, 30], degrees=True).as_matrix().tolist() - expected_matrix = [row + [0.0] for row in expected_matrix] + [[0.0, 0.0, 0.0, 1.0]] - assert rotation.to_matrix() == expected_matrix - - def test_to_matrix_negative_directions(self): - """Test to_matrix method with inverted rotation directions""" - - rotation = Rotation( - angles=[-90, -45, -30], - ) - expected_matrix = R.from_euler("xyz", [-90, -45, -30], degrees=True).as_matrix().tolist() - expected_matrix = [row + [0.0] for row in expected_matrix] + [[0.0, 0.0, 0.0, 1.0]] - assert rotation.to_matrix() == expected_matrix - - def test_to_matrix_partial_axes(self): - """Test to_matrix method with partial axes""" - rotation = Rotation( - angles=[90, 45], - ) - expected_matrix = R.from_euler("xy", [90, 45], degrees=True).as_matrix().tolist() - expected_matrix = [row + [0.0] for row in expected_matrix] + [[0.0, 0.0, 1.0]] - assert rotation.to_matrix() == expected_matrix - - def test_to_matrix_no_rotation(self): - """Test to_matrix method with no rotation""" - - rotation = Rotation( - angles=[ - 0, - 0, - 0, - ], - ) - expected_matrix = R.from_euler("xyz", [0, 0, 0], degrees=True).as_matrix().tolist() - expected_matrix = [row + [0.0] for row in expected_matrix] + [[0.0, 0.0, 0.0, 1.0]] - assert rotation.to_matrix() == expected_matrix - class TestAffineWithAffineTransforms: """Additional tests for the Affine class with Affine transforms""" @@ -143,77 +68,6 @@ def teardown_method(self): """Tear down after tests""" warnings.resetwarnings() - def test_compose_with_single_affine(self): - """Test compose method with a single Affine transform""" - affine = Affine( - affine_transform=[[1.0, 0.0, 0.0, 5.0], [0.0, 1.0, 0.0, 6.0], [0.0, 0.0, 1.0, 7.0], [0.0, 0.0, 0.0, 1.0]] - ) - composed_transform = Affine.compose([affine]) - assert composed_transform.affine_transform == affine.affine_transform - - def test_compose_with_single_translation(self): - """Test compose method with a single Translation""" - translation = Translation(translation=[2, 3, 4]) - composed_transform = Affine.compose([translation]) - expected_matrix = translation.to_matrix() - assert composed_transform.affine_transform == expected_matrix - - def test_compose_with_single_rotation(self): - """Test compose method with a single Rotation""" - rotation = Rotation(angles=[90, 45, 30]) - composed_transform = Affine.compose([rotation]) - expected_matrix = rotation.to_matrix() - assert composed_transform.affine_transform == expected_matrix - - def test_compose_with_single_scale(self): - """Test compose method with a single Scale""" - scale = Scale(scale=[2, 3, 4]) - composed_transform = Affine.compose([scale]) - expected_matrix = scale.to_matrix() - assert composed_transform.affine_transform == expected_matrix - - def test_compose_with_affine_and_translation(self): - """Test compose method with an Affine transform and a Translation""" - affine = Affine( - affine_transform=[[1.0, 0.0, 0.0, 5.0], [0.0, 1.0, 0.0, 6.0], [0.0, 0.0, 1.0, 7.0], [0.0, 0.0, 0.0, 1.0]] - ) - translation = Translation(translation=[2, 3, 4]) - composed_transform = Affine.compose([affine, translation]) - expected_matrix = np.matmul(affine.affine_transform, translation.to_matrix()).tolist() - assert composed_transform.affine_transform == expected_matrix - - def test_compose_with_affine_and_rotation(self): - """Test compose method with an Affine transform and a Rotation""" - affine = Affine( - affine_transform=[[1.0, 0.0, 0.0, 5.0], [0.0, 1.0, 0.0, 6.0], [0.0, 0.0, 1.0, 7.0], [0.0, 0.0, 0.0, 1.0]] - ) - rotation = Rotation(angles=[90, 45, 30]) - composed_transform = Affine.compose([affine, rotation]) - expected_matrix = np.matmul(affine.affine_transform, rotation.to_matrix()).tolist() - assert composed_transform.affine_transform == expected_matrix - - def test_compose_with_affine_and_scale(self): - """Test compose method with an Affine transform and a Scale""" - affine = Affine( - affine_transform=[[1.0, 0.0, 0.0, 5.0], [0.0, 1.0, 0.0, 6.0], [0.0, 0.0, 1.0, 7.0], [0.0, 0.0, 0.0, 1.0]] - ) - scale = Scale(scale=[2, 3, 4]) - composed_transform = Affine.compose([affine, scale]) - expected_matrix = np.matmul(affine.affine_transform, scale.to_matrix()).tolist() - assert composed_transform.affine_transform == expected_matrix - - def test_compose_with_multiple_affine_transforms(self): - """Test compose method with multiple Affine transforms""" - affine1 = Affine( - affine_transform=[[1.0, 0.0, 0.0, 5.0], [0.0, 1.0, 0.0, 6.0], [0.0, 0.0, 1.0, 7.0], [0.0, 0.0, 0.0, 1.0]] - ) - affine2 = Affine( - affine_transform=[[2.0, 0.0, 0.0, 1.0], [0.0, 2.0, 0.0, 2.0], [0.0, 0.0, 2.0, 3.0], [0.0, 0.0, 0.0, 1.0]] - ) - composed_transform = Affine.compose([affine1, affine2]) - expected_matrix = np.matmul(affine1.affine_transform, affine2.affine_transform).tolist() - assert composed_transform.affine_transform == expected_matrix - class TestTranslationFrame: """Tests for Translation frame field""" @@ -236,12 +90,6 @@ def test_local_frame(self): t = Translation(translation=[1, 2, 3], reference_coordinate_system=ReferenceCoordinateSystem.LOCAL) assert t.reference_coordinate_system == ReferenceCoordinateSystem.LOCAL - def test_matrix_unaffected_by_frame(self): - """Test that the matrix output is the same regardless of frame""" - t_global = Translation(translation=[1, 2, 3], reference_coordinate_system=ReferenceCoordinateSystem.GLOBAL) - t_local = Translation(translation=[1, 2, 3], reference_coordinate_system=ReferenceCoordinateSystem.LOCAL) - assert t_global.to_matrix() == t_local.to_matrix() - class TestRotationNewFields: """Tests for new Rotation fields""" @@ -262,14 +110,6 @@ def test_default_fields(self): assert r.pivot == ReferenceCoordinateSystem.GLOBAL assert r.axis_order == "xyz" - def test_custom_axis_order(self): - """Test rotation matrix with a custom axis order""" - r = Rotation(angles=[45, 30, 15], axis_order="zyx") - assert r.axis_order == "zyx" - expected = R.from_euler("zyx", [45, 30, 15], degrees=True).as_matrix().tolist() - expected = [row + [0.0] for row in expected] + [[0.0, 0.0, 0.0, 1.0]] - assert r.to_matrix() == expected - def test_axis_order_normalized_to_lowercase(self): """Test that axis_order is normalized to lowercase""" r = Rotation(angles=[45, 0, 0], axis_order="XYZ") @@ -280,29 +120,6 @@ def test_invalid_axis_order_raises(self): with pytest.raises(Exception): Rotation(angles=[45, 0, 0], axis_order="abc") - def test_left_hand_rule_negates_angles(self): - """Test that left-hand rule negates angles relative to right-hand""" - angles = [30, 45, 60] - r_right = Rotation(angles=angles, rotation_direction=RotationDirection.RIGHT_HAND) - r_left = Rotation(angles=angles, rotation_direction=RotationDirection.LEFT_HAND) - expected_left = R.from_euler("xyz", [-30, -45, -60], degrees=True).as_matrix().tolist() - expected_left = [row + [0.0] for row in expected_left] + [[0.0, 0.0, 0.0, 1.0]] - assert r_right.to_matrix() != r_left.to_matrix() - assert r_left.to_matrix() == expected_left - - def test_local_frame_differs_from_global(self): - """Test that local (intrinsic) frame produces a different matrix than global (extrinsic)""" - angles = [30, 45, 60] - r_global = Rotation(angles=angles, reference_coordinate_system=ReferenceCoordinateSystem.GLOBAL) - r_local = Rotation(angles=angles, reference_coordinate_system=ReferenceCoordinateSystem.LOCAL) - expected_global = R.from_euler("xyz", angles, degrees=True).as_matrix().tolist() - expected_local = R.from_euler("XYZ", angles, degrees=True).as_matrix().tolist() - expected_global = [row + [0.0] for row in expected_global] + [[0.0, 0.0, 0.0, 1.0]] - expected_local = [row + [0.0] for row in expected_local] + [[0.0, 0.0, 0.0, 1.0]] - assert r_global.to_matrix() == expected_global - assert r_local.to_matrix() == expected_local - assert r_global.to_matrix() != r_local.to_matrix() - def test_pivot_field_stored(self): """Test that pivot field is stored correctly""" r = Rotation(angles=[0, 0, 90], pivot=ReferenceCoordinateSystem.LOCAL) @@ -364,65 +181,6 @@ def test_left_handedness(self): ) assert cs.handedness == Handedness.LEFT - def test_compose_with_affine_and_other_transforms(self): - """Test compose method with an Affine transform and other transforms""" - affine = Affine( - affine_transform=[[1.0, 0.0, 0.0, 5.0], [0.0, 1.0, 0.0, 6.0], [0.0, 0.0, 1.0, 7.0], [0.0, 0.0, 0.0, 1.0]] - ) - translation = Translation(translation=[2, 3, 4]) - rotation = Rotation(angles=[90, 45, 30]) - scale = Scale(scale=[2, 3, 4]) - composed_transform = Affine.compose([affine, translation, rotation, scale]) - expected_matrix = np.matmul( - affine.affine_transform, - np.matmul(translation.to_matrix(), np.matmul(rotation.to_matrix(), scale.to_matrix())), - ).tolist() - assert composed_transform.affine_transform == expected_matrix - - def test_compose_invalid_sizes(self): - """Raise error when composing matrices of different sizes""" - translation = Translation(translation=[2, 3, 4]) - rotation = Rotation( - angles=[90, 45, 30], - ) - scale = Scale(scale=[2, 3]) - affine_transform = Affine(affine_transform=[]) - with pytest.raises(ValueError) as context: - affine_transform.compose([rotation, translation, scale]) - assert "All transforms must be the same size" in str(context.value) - - -class TestMultiplyMatrix: - """Tests for the multiply_matrix function""" - - def test_multiply_identity_matrix(self): - """Test multiplying with identity matrix""" - matrix1 = [[1, 0, 0], [0, 1, 0], [0, 0, 1]] - matrix2 = [[5, 6, 7], [8, 9, 10], [11, 12, 13]] - expected_result = [[5, 6, 7], [8, 9, 10], [11, 12, 13]] - assert np.matmul(matrix1, matrix2).tolist() == expected_result - - def test_multiply_zero_matrix(self): - """Test multiplying with zero matrix""" - matrix1 = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] - matrix2 = [[5, 6, 7], [8, 9, 10], [11, 12, 13]] - expected_result = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] - assert np.matmul(matrix1, matrix2).tolist() == expected_result - - def test_multiply_non_square_matrix(self): - """Test multiplying non-square matrices""" - matrix1 = [[1, 2, 3], [4, 5, 6]] - matrix2 = [[7, 8], [9, 10], [11, 12]] - expected_result = [[58, 64], [139, 154]] - assert np.matmul(matrix1, matrix2).tolist() == expected_result - - def test_multiply_varied_size(self): - """Test multiplying incompatible matrices""" - matrix1 = [[1, 2], [3, 4]] - matrix2 = [[5, 6, 7], [8, 9, 10]] - expected_result = [[21, 24, 27], [47, 54, 61]] - assert np.matmul(matrix1, matrix2).tolist() == expected_result - class TestAtlas: """Tests for the Atlas class""" @@ -458,74 +216,6 @@ def test_validate_atlas_valid(self): assert atlas is not None -class TestDeprecationWarnings: - """Tests that deprecation warnings are raised""" - - def test_scale_to_matrix_warns(self): - """Test that Scale.to_matrix raises a DeprecationWarning""" - scale = Scale(scale=[2, 3, 4]) - with pytest.warns(DeprecationWarning): - scale.to_matrix() - - def test_translation_to_matrix_warns(self): - """Test that Translation.to_matrix raises a DeprecationWarning""" - translation = Translation(translation=[1, 2, 3]) - with pytest.warns(DeprecationWarning): - translation.to_matrix() - - def test_rotation_to_matrix_warns(self): - """Test that Rotation.to_matrix raises a DeprecationWarning""" - rotation = Rotation(angles=[90, 0, 0]) - with pytest.warns(DeprecationWarning): - rotation.to_matrix() - - def test_affine_to_matrix_warns(self): - """Test that Affine.to_matrix raises a DeprecationWarning""" - affine = Affine( - affine_transform=[[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 1.0]] - ) - with pytest.warns(DeprecationWarning): - affine.to_matrix() - - def test_affine_compose_warns(self): - """Test that Affine.compose raises a DeprecationWarning""" - translation = Translation(translation=[1, 2, 3]) - with pytest.warns(DeprecationWarning): - Affine.compose([translation]) - - def test_depth_axis_warns(self): - """Test that constructing a CoordinateSystem with a DEPTH axis raises a DeprecationWarning""" - with pytest.warns(DeprecationWarning): - CoordinateSystem( - name="TEST_DEPTH", - origin=Origin.BREGMA, - axis_unit=SizeUnit.MM, - axes=[ - Axis(name=AxisName.AP, direction=Direction.PA), - Axis(name=AxisName.ML, direction=Direction.LR), - Axis(name=AxisName.SI, direction=Direction.SI), - Axis(name=AxisName.DEPTH, direction=Direction.UD), - ], - ) - - def test_no_warning_without_depth_axis(self): - """Test that no DeprecationWarning is raised when DEPTH axis is absent""" - with warnings.catch_warnings(record=True) as w: - warnings.simplefilter("always", DeprecationWarning) - CoordinateSystem( - name="TEST_NO_DEPTH", - origin=Origin.BREGMA, - axis_unit=SizeUnit.MM, - axes=[ - Axis(name=AxisName.AP, direction=Direction.PA), - Axis(name=AxisName.ML, direction=Direction.LR), - Axis(name=AxisName.SI, direction=Direction.SI), - ], - ) - depth_warnings = [x for x in w if "DEPTH" in str(x.message)] - assert len(depth_warnings) == 0 - - class TestCoordinateSystemMouseAnatomyOrigin: """Tests for CoordinateSystem with MouseAnatomyModel as origin""" diff --git a/tests/test_data_description.py b/tests/test_data_description.py index fa4c9357a..c7f9c6946 100644 --- a/tests/test_data_description.py +++ b/tests/test_data_description.py @@ -12,6 +12,11 @@ from aind_data_schema.components.identifiers import Person from aind_data_schema.core.data_description import DataDescription, Funding, build_data_name +from aind_data_schema.utils.inheritance import ( + derive_data_description, + derive_data_description_from_derived, + derive_data_description_from_raw, +) from examples.data_description import d as example_data_description DATA_DESCRIPTION_FILES_PATH = Path(__file__).parent / "resources" / "ephys_data_description" @@ -83,7 +88,7 @@ def test_derived_data_description_construction(self): investigators=[Person(name="Jane Smith")], project_name="Test", ) - r1 = DataDescription.from_raw(da, "spikesort-ks25", creation_time=dt) + r1 = derive_data_description_from_raw(da, "spikesort-ks25", creation_time=dt) assert r1 is not None def test_nested_derived_data_description_construction(self): @@ -100,9 +105,9 @@ def test_nested_derived_data_description_construction(self): investigators=[Person(name="Jane Smith")], project_name="Test", ) - r1 = DataDescription.from_raw(da, "spikesort-ks25", creation_time=dt) - r2 = DataDescription.from_derived(r1, "some-model", creation_time=dt) - r3 = DataDescription.from_derived(r2, "a-paper", creation_time=dt) + r1 = derive_data_description_from_raw(da, "spikesort-ks25", creation_time=dt) + r2 = derive_data_description_from_derived(r1, "some-model", creation_time=dt) + r3 = derive_data_description_from_derived(r2, "a-paper", creation_time=dt) assert r3 is not None def test_data_description_construction(self): @@ -161,7 +166,7 @@ def test_derived_valid(self): ) # also over-write with specimen ID - dd = DataDescription.from_raw(dr, "process", subject_id="1234-56") + dd = derive_data_description_from_raw(dr, "process", subject_id="1234-56") assert dd is not None def test_raw_no_subject_id(self): @@ -197,7 +202,7 @@ def test_derived_bad_creation_time(self): ) with pytest.raises(ValueError) as context: - DataDescription.from_raw(da, "spikesort-ks25", creation_time="invalid creation time") + derive_data_description_from_raw(da, "spikesort-ks25", creation_time="invalid creation time") assert "creation_time" in str(context.value) @@ -308,7 +313,7 @@ def test_source_data_field(self): investigators=[Person(name="Jane Smith")], project_name="Test", ) - r1 = DataDescription.from_raw(da, "spikesort-ks25", creation_time=dt) + r1 = derive_data_description_from_raw(da, "spikesort-ks25", creation_time=dt) assert r1.source_data is not None assert len(r1.source_data) == 1 assert r1.source_data[0] == da.name @@ -332,7 +337,7 @@ def test_from_raw_with_explicit_source_data(self): # Test scenario 3: RAW data → DERIVED with explicit source_data explicit_source = ["external_dataset_1", "external_dataset_2"] - r1 = DataDescription.from_raw(da, "spikesort-ks25", source_data=explicit_source, creation_time=dt) + r1 = derive_data_description_from_raw(da, "spikesort-ks25", source_data=explicit_source, creation_time=dt) # Should use the explicit source_data instead of the original name assert r1.source_data is not None @@ -342,7 +347,7 @@ def test_from_raw_with_explicit_source_data(self): # Test scenario 4: DERIVED data → DERIVED with explicit source_data additional_source = ["another_external_dataset"] - r2 = DataDescription.from_derived(r1, "clustering", source_data=additional_source, creation_time=dt) + r2 = derive_data_description_from_derived(r1, "clustering", source_data=additional_source, creation_time=dt) # Should use the explicit source_data (not combine with existing) assert r2.source_data is not None @@ -367,16 +372,16 @@ def test_from_raw_chained_source_data_behavior(self): ) # First derivation: RAW → DERIVED (should set source_data to original name) - r1 = DataDescription.from_raw(da, "spikesort-ks25", creation_time=dt) + r1 = derive_data_description_from_raw(da, "spikesort-ks25", creation_time=dt) assert r1.source_data == [da.name] # Second derivation: DERIVED → DERIVED (should use only the immediate predecessor) - r2 = DataDescription.from_derived(r1, "clustering", creation_time=dt) + r2 = derive_data_description_from_derived(r1, "clustering", creation_time=dt) assert len(r2.source_data) == 1 assert r2.source_data[0] == r1.name # Only the immediate predecessor # Third derivation: should only reference the immediate predecessor - r3 = DataDescription.from_derived(r2, "analysis", creation_time=dt) + r3 = derive_data_description_from_derived(r2, "analysis", creation_time=dt) assert len(r3.source_data) == 1 assert r3.source_data[0] == r2.name # Only the immediate predecessor @@ -385,7 +390,7 @@ def test_from_derived_basic_functionality(self): dt = datetime.datetime(2022, 10, 12, 23, 23, 11) # Create first derived from example data - derived1 = DataDescription.from_raw(example_data_description, "spike_sorting", creation_time=dt) + derived1 = derive_data_description_from_raw(example_data_description, "spike_sorting", creation_time=dt) # Verify first derived name structure assert derived1.name.startswith(example_data_description.name) @@ -395,7 +400,7 @@ def test_from_derived_basic_functionality(self): # Create second derived using from_derived dt2 = datetime.datetime(2022, 10, 13, 10, 15, 30) - derived2 = DataDescription.from_derived(derived1, "quality_control", creation_time=dt2) + derived2 = derive_data_description_from_derived(derived1, "quality_control", creation_time=dt2) # Verify second derived uses original input, not full derived name assert derived2.name.startswith(example_data_description.name) @@ -416,7 +421,7 @@ def test_from_derived_validation_error(self): dt = datetime.datetime.now() with pytest.raises(ValueError) as context: - DataDescription.from_derived(example_data_description, "process", creation_time=dt) + derive_data_description_from_derived(example_data_description, "process", creation_time=dt) assert "must have data_level=DERIVED" in str(context.value) @@ -426,11 +431,13 @@ def test_from_derived_with_explicit_source_data(self): dt2 = datetime.datetime(2022, 10, 13, 10, 15, 30) # Create first derived from example data - derived1 = DataDescription.from_raw(example_data_description, "preprocessing", creation_time=dt) + derived1 = derive_data_description_from_raw(example_data_description, "preprocessing", creation_time=dt) # Create second derived with explicit source_data explicit_source = ["external_dataset_1", "external_dataset_2"] - derived2 = DataDescription.from_derived(derived1, "analysis", source_data=explicit_source, creation_time=dt2) + derived2 = derive_data_description_from_derived( + derived1, "analysis", source_data=explicit_source, creation_time=dt2 + ) # Should use the explicit source_data (not combine with existing) assert len(derived2.source_data) == 2 # Just the explicit source_data @@ -443,9 +450,9 @@ def test_from_derived_chained_behavior(self): dt3 = datetime.datetime(2022, 10, 14, 14, 20, 45) # Create chain: RAW → DERIVED → DERIVED → DERIVED - derived1 = DataDescription.from_raw(example_data_description, "process1", creation_time=dt1) - derived2 = DataDescription.from_derived(derived1, "process2", creation_time=dt2) - derived3 = DataDescription.from_derived(derived2, "process3", creation_time=dt3) + derived1 = derive_data_description_from_raw(example_data_description, "process1", creation_time=dt1) + derived2 = derive_data_description_from_derived(derived1, "process2", creation_time=dt2) + derived3 = derive_data_description_from_derived(derived2, "process3", creation_time=dt3) # All derived names should start with the original raw name original_prefix = example_data_description.name @@ -464,12 +471,12 @@ def test_from_derived_name_parsing(self): dt2 = datetime.datetime(2022, 10, 13, 10, 15, 30) # Create a derived data with complex process name - derived1 = DataDescription.from_raw( + derived1 = derive_data_description_from_raw( example_data_description, "spike-sorting-v2.1_with-params", creation_time=dt1 ) # Create another derived from the first - derived2 = DataDescription.from_derived(derived1, "cluster-analysis_final", creation_time=dt2) + derived2 = derive_data_description_from_derived(derived1, "cluster-analysis_final", creation_time=dt2) # Verify the second derived uses the original input correctly assert derived2.name.startswith(example_data_description.name) @@ -481,11 +488,11 @@ def test_from_data_description_with_raw_input(self): dt = datetime.datetime(2022, 10, 12, 23, 23, 11) # Should behave exactly like from_raw - result_from_data_description = DataDescription.from_data_description( + result_from_data_description = derive_data_description( example_data_description, "test_process", creation_time=dt ) - result_from_raw = DataDescription.from_raw(example_data_description, "test_process", creation_time=dt) + result_from_raw = derive_data_description_from_raw(example_data_description, "test_process", creation_time=dt) # Results should be identical assert result_from_data_description.name == result_from_raw.name @@ -498,14 +505,12 @@ def test_from_data_description_with_derived_input(self): dt2 = datetime.datetime(2022, 10, 13, 10, 15, 30) # Create derived data first - derived1 = DataDescription.from_raw(example_data_description, "first_process", creation_time=dt1) + derived1 = derive_data_description_from_raw(example_data_description, "first_process", creation_time=dt1) # Should behave exactly like from_derived - result_from_data_description = DataDescription.from_data_description( - derived1, "second_process", creation_time=dt2 - ) + result_from_data_description = derive_data_description(derived1, "second_process", creation_time=dt2) - result_from_derived = DataDescription.from_derived(derived1, "second_process", creation_time=dt2) + result_from_derived = derive_data_description_from_derived(derived1, "second_process", creation_time=dt2) # Results should be identical assert result_from_data_description.name == result_from_derived.name @@ -518,11 +523,11 @@ def test_from_data_description_unsupported_data_level(self): # Create a mock DataDescription with unsupported data_level # We'll create a derived one and then manually change its data_level - derived = DataDescription.from_raw(example_data_description, "test", creation_time=dt) + derived = derive_data_description_from_raw(example_data_description, "test", creation_time=dt) derived.data_level = DataLevel.SIMULATED # Not supported by from_data_description with pytest.raises(ValueError) as context: - DataDescription.from_data_description(derived, "process", creation_time=dt) + derive_data_description(derived, "process", creation_time=dt) assert "Unsupported data_level: simulated" in str(context.value) @@ -535,7 +540,7 @@ def test_from_data_description_with_kwargs_and_source_data(self): custom_tags = ["custom", "test"] explicit_source = ["external_source"] - result_raw = DataDescription.from_data_description( + result_raw = derive_data_description( example_data_description, "test_process", source_data=explicit_source, creation_time=dt1, tags=custom_tags ) @@ -543,9 +548,9 @@ def test_from_data_description_with_kwargs_and_source_data(self): assert result_raw.source_data == explicit_source # Test with DERIVED input - derived = DataDescription.from_raw(example_data_description, "first", creation_time=dt1) + derived = derive_data_description_from_raw(example_data_description, "first", creation_time=dt1) - result_derived = DataDescription.from_data_description( + result_derived = derive_data_description( derived, "second_process", source_data=explicit_source, creation_time=dt2, tags=custom_tags ) @@ -558,10 +563,10 @@ def test_from_derived_with_invalid_creation_time(self): dt = datetime.datetime.now() # Create first derived data - derived1 = DataDescription.from_raw(example_data_description, "preprocessing", creation_time=dt) + derived1 = derive_data_description_from_raw(example_data_description, "preprocessing", creation_time=dt) with pytest.raises(ValueError) as context: - DataDescription.from_derived(derived1, "analysis", creation_time="not_a_datetime") + derive_data_description_from_derived(derived1, "analysis", creation_time="not_a_datetime") assert "creation_time(not_a_datetime) must be a datetime object" in str(context.value) @@ -570,11 +575,11 @@ def test_from_raw_validation_error_on_derived_input(self): dt = datetime.datetime.now() # Create derived data first - derived = DataDescription.from_raw(example_data_description, "preprocessing", creation_time=dt) + derived = derive_data_description_from_raw(example_data_description, "preprocessing", creation_time=dt) # Try to use from_raw on derived data (should fail) with pytest.raises(ValueError) as context: - DataDescription.from_raw(derived, "another_process", creation_time=dt) + derive_data_description_from_raw(derived, "another_process", creation_time=dt) assert "Input data_description must have data_level=RAW, got derived" in str(context.value) @@ -590,7 +595,7 @@ def test_from_raw_missing_required_field_raises_error(self): # Try to create derived data - should trigger the PydanticUndefined error path with pytest.raises(ValueError) as context: - DataDescription.from_data_description(base_data, "test_process", creation_time=dt) + derive_data_description(base_data, "test_process", creation_time=dt) # Should raise error about the missing required field assert "Required field investigators must have a value" in str(context.value) @@ -601,14 +606,14 @@ def test_from_derived_missing_required_field_raises_error(self): # Create a copy of the valid DataDescription to avoid modifying the original base_data = DataDescription.model_validate(example_data_description.model_dump()) - derived_data = DataDescription.from_raw(base_data, "process", creation_time=dt) + derived_data = derive_data_description_from_raw(base_data, "process", creation_time=dt) # Remove a required field to make it invalid delattr(derived_data, "investigators") # Try to create derived data - should trigger the PydanticUndefined error path with pytest.raises(ValueError) as context: - DataDescription.from_data_description(derived_data, "process-2", creation_time=dt) + derive_data_description(derived_data, "process-2", creation_time=dt) # Should raise error about the missing required field assert "Required field investigators must have a value" in str(context.value) diff --git a/tests/test_device.py b/tests/test_device.py index 57c1918ff..133197054 100644 --- a/tests/test_device.py +++ b/tests/test_device.py @@ -2,15 +2,14 @@ import pytest from aind_data_schema_models.coordinates import AnatomicalRelative -from aind_data_schema_models.devices import DaqChannelType from aind_data_schema_models.harp_types import HarpDeviceType from aind_data_schema_models.organizations import Organization from aind_data_schema_models.units import UnitlessUnit +from pydantic import ValidationError -from aind_data_schema.components.coordinates import CoordinateSystemLibrary, Translation +from aind_data_schema.components.coordinates import Translation from aind_data_schema.components.devices import ( AdditionalImagingDevice, - DAQChannel, DataInterface, Detector, DetectorType, @@ -24,6 +23,7 @@ Monitor, Objective, ) +from tests.coordinate_systems import BREGMA_ARI class TestDevice: @@ -97,17 +97,17 @@ def test_position_device(self): translation=[1, 1, 1], ) ], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + local_coordinate_system=BREGMA_ARI, ) assert valid_positioned.transform is not None - assert valid_positioned.coordinate_system is not None + assert valid_positioned.local_coordinate_system is not None # Test with both transform and coordinate_system unset valid_positioned_unset = DevicePosition( relative_position=[AnatomicalRelative.SUPERIOR], ) assert valid_positioned_unset.transform is None - assert valid_positioned_unset.coordinate_system is None + assert valid_positioned_unset.local_coordinate_system is None # Test with transform set but coordinate_system unset with pytest.raises(ValueError) as e1: @@ -128,7 +128,7 @@ def test_position_device(self): with pytest.raises(ValueError) as e2: DevicePosition( relative_position=[AnatomicalRelative.SUPERIOR], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + local_coordinate_system=BREGMA_ARI, ) assert ( "DevicePosition.transform and DevicePosition.local_coordinate_system must " @@ -194,64 +194,26 @@ def test_filter(self): class TestDAQChannel: """tests DAQChannel schemas""" - def test_deprecated_channel_index(self): - """Test that using channel_index raises a deprecation warning""" - - with pytest.warns(DeprecationWarning) as warning: - DAQChannel(channel_name="test_channel", channel_type=DaqChannelType.DI, channel_index=1) - - assert len(warning) == 1 - assert "DAQChannel.channel_index is deprecated" in str(warning[0].message) - assert "Use DAQChannel.port instead" in str(warning[0].message) - class TestMonitor: """tests Monitor schemas""" - def test_add_units_if_needed_validator(self): - """tests the Monitor validator for adding units if needed""" - - monitor_with_contrast_no_unit = Monitor( - name="test_monitor", - manufacturer=Organization.ASUS, - refresh_rate=60, - width=1920, - height=1080, - viewing_distance=15.0, - relative_position=[AnatomicalRelative.SUPERIOR], - contrast=50, - ) - assert monitor_with_contrast_no_unit.contrast == 50 - assert monitor_with_contrast_no_unit.contrast_unit == UnitlessUnit.PERCENT - - monitor_with_brightness_no_unit = Monitor( - name="test_monitor", - manufacturer=Organization.ASUS, - refresh_rate=60, - width=1920, - height=1080, - viewing_distance=15.0, - relative_position=[AnatomicalRelative.SUPERIOR], - brightness=75, - ) - assert monitor_with_brightness_no_unit.brightness == 75 - assert monitor_with_brightness_no_unit.brightness_unit == UnitlessUnit.PERCENT - - monitor_with_both_no_units = Monitor( - name="test_monitor", - manufacturer=Organization.ASUS, - refresh_rate=60, - width=1920, - height=1080, - viewing_distance=15.0, - relative_position=[AnatomicalRelative.SUPERIOR], - contrast=50, - brightness=75, - ) - assert monitor_with_both_no_units.contrast == 50 - assert monitor_with_both_no_units.contrast_unit == UnitlessUnit.PERCENT - assert monitor_with_both_no_units.brightness == 75 - assert monitor_with_both_no_units.brightness_unit == UnitlessUnit.PERCENT + def test_contrast_brightness_units_not_inferred(self): + """Units for contrast and brightness are no longer filled in automatically""" + + with pytest.raises(ValidationError) as context: + Monitor( + name="test_monitor", + manufacturer=Organization.ASUS, + refresh_rate=60, + width=1920, + height=1080, + viewing_distance=15.0, + relative_position=[AnatomicalRelative.SUPERIOR], + contrast=50, + brightness=75, + ) + assert "Unit contrast_unit is required when contrast is set" in str(context.value) monitor_with_explicit_units = Monitor( name="test_monitor", @@ -266,21 +228,5 @@ def test_add_units_if_needed_validator(self): brightness=75, brightness_unit=UnitlessUnit.PERCENT, ) - assert monitor_with_explicit_units.contrast == 50 assert monitor_with_explicit_units.contrast_unit == UnitlessUnit.PERCENT - assert monitor_with_explicit_units.brightness == 75 assert monitor_with_explicit_units.brightness_unit == UnitlessUnit.PERCENT - - monitor_without_contrast_brightness = Monitor( - name="test_monitor", - manufacturer=Organization.ASUS, - refresh_rate=60, - width=1920, - height=1080, - viewing_distance=15.0, - relative_position=[AnatomicalRelative.SUPERIOR], - ) - assert monitor_without_contrast_brightness.contrast is None - assert monitor_without_contrast_brightness.contrast_unit is None - assert monitor_without_contrast_brightness.brightness is None - assert monitor_without_contrast_brightness.brightness_unit is None diff --git a/tests/test_imaging.py b/tests/test_imaging.py index 163c169f3..6ff965e0c 100644 --- a/tests/test_imaging.py +++ b/tests/test_imaging.py @@ -8,13 +8,14 @@ from pydantic import ValidationError from aind_data_schema.components.configs import Image -from aind_data_schema.components.coordinates import Affine, CoordinateSystemLibrary, Rotation, Scale, Translation +from aind_data_schema.components.coordinates import Affine, Rotation, Scale, Translation from aind_data_schema.components.devices import Laser, Objective, ScanningStage from aind_data_schema.components.identifiers import Code from aind_data_schema.core.acquisition import Acquisition from aind_data_schema.core.instrument import Instrument from aind_data_schema.core.processing import DataProcess, ProcessName, ProcessStage from examples.exaspim_acquisition import acq +from tests.coordinate_systems import BREGMA_ARI class TestImaging: @@ -61,7 +62,7 @@ def test_instrument_constructor(self): i = Instrument( instrument_id="room_exaSPIM1-1_20231004", modalities=[Modality.SPIM], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, modification_date=datetime.now().date(), components=[objective, laser, scan_stage], ) @@ -75,7 +76,7 @@ def test_modality_spim_requires_components(self): instrument_id="room_exaSPIM1-1_20231004", modalities=[Modality.SPIM], modification_date=datetime(2020, 10, 10, 0, 0, 0).date(), - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[], ) @@ -117,6 +118,7 @@ def test_registration(self): code=Code( url="https://github.com/abcd", parameters=parameters, + version="0.0.1", ), ) diff --git a/tests/test_instrument.py b/tests/test_instrument.py index 5db37abe8..86e03c30c 100644 --- a/tests/test_instrument.py +++ b/tests/test_instrument.py @@ -13,7 +13,6 @@ from pydantic import ValidationError from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import CoordinateSystemLibrary from aind_data_schema.components.devices import ( Camera, CameraAssembly, @@ -42,6 +41,7 @@ OlfactometerChannelType, ScanningStage, ) +from aind_data_schema.components.identifiers import Software from aind_data_schema.components.measurements import Calibration from aind_data_schema.core.instrument import ( DEVICES_REQUIRED, @@ -49,6 +49,7 @@ ) from examples.ephys_instrument import inst as ephys_instrument from examples.slap2_instrument import dmds +from tests.coordinate_systems import BREGMA_ARI dmd = dmds[0] @@ -350,7 +351,7 @@ def test_other_camera_target(self): instrument_id="123_EPHYS1-OPTO_20220101", modification_date=date(2020, 10, 10), modalities=[Modality.ECEPHYS, Modality.FIB], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[ *daqs, camera_no_target, @@ -386,7 +387,7 @@ def test_other_camera_target(self): instrument_id="123_EPHYS1-OPTO_20220101", modification_date=date(2020, 10, 10), modalities=[Modality.ECEPHYS, Modality.FIB], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[ *daqs, camera_no_target, @@ -427,7 +428,7 @@ def test_missing_connections(self): instrument_id="123_EPHYS1-OPTO_20220101", modification_date=date(2020, 10, 10), modalities=[Modality.ECEPHYS, Modality.FIB], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[ *daqs, *cameras, @@ -467,7 +468,7 @@ def test_missing_connections(self): instrument_id="123_EPHYS1-OPTO_20220101", modification_date=date(2020, 10, 10), modalities=[Modality.ECEPHYS, Modality.FIB], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[ *daqs, *cameras, @@ -511,7 +512,7 @@ def test_validator_modality_device_missing(self): Instrument( modalities=[Modality.from_abbreviation(modality_abbreviation)], instrument_id="123_EPHYS1-OPTO_20220101", - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, modification_date=date(2020, 10, 10), components=[], calibrations=[], @@ -526,7 +527,7 @@ def test_validator_modality_device_present(self): modalities=[Modality.from_abbreviation(modality_abbreviation)], instrument_id="123_EPHYS1-OPTO_20220101", modification_date=date(2020, 10, 10), - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[ *daqs, *cameras, @@ -538,7 +539,6 @@ def test_validator_modality_device_present(self): *patch_cords, *stimulus_devices, *objectives, - laser, dmd, scan_stage, microscope, @@ -554,7 +554,7 @@ def test_serialize_modalities(self): instrument_instance_modality = Instrument.model_construct( instrument_id="123_EPHYS1-OPTO_20220101", modalities={Modality.ECEPHYS}, # Example with a valid Modality instance - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, ) instrument_json = instrument_instance_modality.model_dump_json() instrument_data = json.loads(instrument_json) @@ -584,7 +584,7 @@ def test_coordinate_validator(self): # Create a matching CameraAssembly camera_assembly = CameraAssembly( - name="Assembly A", + name="Assembly B", camera=camera, target=CameraTarget.BRAIN, relative_position=[AnatomicalRelative.SUPERIOR], @@ -595,14 +595,13 @@ def test_coordinate_validator(self): instrument_id="123_EPHYS1-OPTO_20220101", modification_date=date(2020, 10, 10), modalities=[Modality.ECEPHYS, Modality.FIB], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, # order is AP, ML, SI + global_coordinate_system=BREGMA_ARI, # order is AP, ML, SI components=[ *daqs, *cameras, *stick_microscopes, *light_sources, *lms, - laser, *ems, *detectors, *patch_cords, @@ -702,14 +701,14 @@ def test_duplicate_non_harp_device_components(self): instrument_id="test_inst", modification_date=date(2020, 10, 10), modalities=[Modality.ECEPHYS], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[Computer(name="Computer1")], ) inst2 = Instrument( instrument_id="test_inst", modification_date=date(2020, 10, 10), modalities=[Modality.ECEPHYS], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[Computer(name="Computer1")], ) @@ -737,14 +736,14 @@ def test_duplicate_harp_clock_generator_devices(self): instrument_id="test_inst", modification_date=date(2020, 10, 10), modalities=[Modality.ECEPHYS], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[harp_clock_gen], ) inst2 = Instrument( instrument_id="test_inst", modification_date=date(2020, 10, 10), modalities=[Modality.ECEPHYS], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[harp_clock_gen.model_copy(deep=True)], ) @@ -777,7 +776,7 @@ def test_duplicate_non_harp_device_with_clock_generator_attribute(self): instrument_id="test_inst", modification_date=date(2020, 10, 10), modalities=[Modality.BEHAVIOR], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[ harp_clock_gen, LickSpoutAssembly( @@ -797,7 +796,7 @@ def test_duplicate_non_harp_device_with_clock_generator_attribute(self): instrument_id="test_inst", modification_date=date(2020, 10, 10), modalities=[Modality.BEHAVIOR], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[ harp_non_clock_gen, LickSpoutAssembly( @@ -824,7 +823,7 @@ def test_duplicate_non_harp_device_with_clock_generator_attribute(self): assert len(combined.components) == 3 def test_validate_unique_component_names(self): - """Test that duplicate component names log a warning""" + """Test that duplicate component names raise an error""" duplicate_component = ephys_instrument.components[0].model_copy(deep=True) inst_with_dup = Instrument.model_construct( instrument_id=ephys_instrument.instrument_id, @@ -836,11 +835,9 @@ def test_validate_unique_component_names(self): calibrations=ephys_instrument.calibrations, ) - with patch("aind_data_schema.core.instrument.logger") as mock_logger: + with pytest.raises(ValueError) as context: inst_with_dup.validate_unique_component_names() - mock_logger.warning.assert_called_once() - warning_msg = mock_logger.warning.call_args[0][0] - assert duplicate_component.name in warning_msg + assert duplicate_component.name in str(context.value) inst_no_dup = Instrument.model_construct( instrument_id=ephys_instrument.instrument_id, @@ -852,9 +849,59 @@ def test_validate_unique_component_names(self): calibrations=ephys_instrument.calibrations, ) - with patch("aind_data_schema.core.instrument.logger") as mock_logger: - inst_no_dup.validate_unique_component_names() - mock_logger.warning.assert_not_called() + assert inst_no_dup.validate_unique_component_names() is inst_no_dup + + def test_shared_software_name_allowed(self): + """The same Software recorded on several devices is not a name collision""" + shared_software = Software(name="Bonsai", version="2.5") + + def _camera(name): + """Build a camera assembly recording with the shared software""" + return CameraAssembly( + name=name, + target=CameraTarget.BRAIN, + relative_position=[AnatomicalRelative.SUPERIOR], + camera=Camera( + name=f"{name} Detector", + detector_type=DetectorType.CAMERA, + manufacturer=Organization.OTHER, + data_interface="USB", + frame_rate=144, + frame_rate_unit=FrequencyUnit.HZ, + sensor_width=1, + sensor_height=1, + chroma="Color", + notes="Manufacturer unknown", + recording_software=shared_software, + ), + lens=Lens(name=f"{name} Lens", manufacturer=Organization.OTHER, notes="Manufacturer unknown"), + ) + + inst = Instrument.model_construct( + instrument_id=ephys_instrument.instrument_id, + modification_date=ephys_instrument.modification_date, + modalities=ephys_instrument.modalities, + global_coordinate_system=ephys_instrument.global_coordinate_system, + components=[_camera("Camera One"), _camera("Camera Two")], + connections=[], + calibrations=[], + ) + assert inst.validate_unique_component_names() is inst + + def test_distinct_objects_sharing_a_name_rejected(self): + """Two different devices with the same name are still a collision""" + inst = Instrument.model_construct( + instrument_id=ephys_instrument.instrument_id, + modification_date=ephys_instrument.modification_date, + modalities=ephys_instrument.modalities, + global_coordinate_system=ephys_instrument.global_coordinate_system, + components=[Disc(name="Shared", radius=1), Disc(name="Shared", radius=2)], + connections=[], + calibrations=[], + ) + with pytest.raises(ValueError) as context: + inst.validate_unique_component_names() + assert "Shared" in str(context.value) class TestConnection: @@ -899,14 +946,13 @@ def test_validate_modalities_sorting(self): instrument_id="123_EPHYS1-OPTO_20220101", modification_date=date(2020, 10, 10), modalities=unsorted_modalities, - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, components=[ *daqs, *cameras, *stick_microscopes, *light_sources, *lms, - laser, *ems, *detectors, *patch_cords, diff --git a/tests/test_metadata.py b/tests/test_metadata.py index 890ded174..1b874e06c 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -14,7 +14,6 @@ from pydantic import ValidationError from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import CoordinateSystemLibrary from aind_data_schema.components.devices import EphysAssembly, EphysProbe, Laser, Manipulator from aind_data_schema.components.identifiers import Code, Database, Person from aind_data_schema.components.subject_procedures import TrainingProtocol @@ -35,6 +34,7 @@ from examples.processing import p as processing_example from examples.quality_control import q as quality_control_example from examples.subject import s as subject +from tests.coordinate_systems import BREGMA_ARI ephys_assembly = EphysAssembly( probes=[EphysProbe(probe_model="Neuropixels 1.0", name="Probe A")], @@ -73,7 +73,6 @@ def setup_class(cls) -> None: date_of_birth=datetime(2022, 11, 22, 8, 43, 00, tzinfo=timezone.utc).date(), source=Organization.AI, breeding_info=BreedingInfo( - breeding_group="Emx1-IRES-Cre(ND)", maternal_id="546543", maternal_genotype="Emx1-IRES-Cre/wt; Camk2a-tTa/Camk2a-tTA", paternal_id="232323", @@ -194,7 +193,7 @@ def test_validate_instrument_acquisition_compatibility(self): instrument_id="123_EPHYS1_20220101", modalities=modalities, components=[ephys_assembly], - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, ) with pytest.raises(ValidationError) as context: Metadata( @@ -742,7 +741,6 @@ def test_validate_time_constraints_subject(self): source=Organization.AI, genotype="wt", breeding_info=BreedingInfo( - breeding_group="Test", maternal_id="123", maternal_genotype="wt", paternal_id="456", @@ -773,7 +771,6 @@ def test_validate_time_constraints_subject(self): source=Organization.AI, genotype="wt", breeding_info=BreedingInfo( - breeding_group="Test", maternal_id="123", maternal_genotype="wt", paternal_id="456", @@ -893,10 +890,11 @@ def test_validate_calibration_object_tags(self): warning_messages = [str(warning.message) for warning in w] assert ( - "Subject is a CalibrationObject but 'calibration' tag is missing from data_description.tags. " - "Adding 'calibration' tag automatically." + "Subject is a CalibrationObject but 'calibration' tag is missing from data_description.tags." ) in warning_messages assert metadata is not None + # The validator warns but no longer mutates data_description.tags + assert metadata.data_description.tags is None def test_validate_subject_details_if_not_specimen(self): """Tests that subject details are required if acquisition.specimen_id is not provided""" diff --git a/tests/test_procedures.py b/tests/test_procedures.py index 057fba464..8006ec6b5 100644 --- a/tests/test_procedures.py +++ b/tests/test_procedures.py @@ -1,6 +1,5 @@ """test Procedures""" -import warnings from datetime import date from unittest.mock import patch @@ -14,7 +13,7 @@ from pydantic import ValidationError from aind_data_schema.components.configs import CatheterConfig -from aind_data_schema.components.coordinates import CoordinateSystemLibrary, Origin, Translation +from aind_data_schema.components.coordinates import Origin, Translation from aind_data_schema.components.devices import Catheter, Device from aind_data_schema.components.injection_procedures import ( InjectionDynamics, @@ -36,6 +35,7 @@ from aind_data_schema.components.surgery_procedures import CatheterImplant, Craniotomy, CraniotomyType from aind_data_schema.core.procedures import Procedures from aind_data_schema.utils.exceptions import OneOfError +from tests.coordinate_systems import BREGMA_ARI, BREGMA_ARID class TestProcedures: @@ -54,10 +54,10 @@ def test_required_field_validation_check(self): assert "12345" == p.subject_id @patch("aind_data_schema_models.mouse_anatomy.get_emapa_id") - def test_unwrapped_injection_warns(self, mock_get_emapa_id): - """Unwrapped Injection in subject_procedures should emit a UserWarning""" + def test_unwrapped_injection_rejected(self, mock_get_emapa_id): + """Unwrapped Injection in subject_procedures should raise""" mock_get_emapa_id.return_value = "123456" - with pytest.warns(UserWarning): + with pytest.raises(ValidationError): Procedures( subject_id="12345", subject_procedures=[ @@ -153,14 +153,14 @@ def test_injection_materials_list(self, mock_get_emapa_id): p = Procedures( subject_id="12345", - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, subject_procedures=[ Surgery( start_date=self.start_date, experimenters=["Mam Moth"], ethics_review_id="234", protocol_id="123", - coordinate_system=CoordinateSystemLibrary.BREGMA_ARID, + global_coordinate_system=BREGMA_ARID, measured_coordinates={ Origin.BREGMA: Translation( translation=[0, 0, 0], @@ -362,26 +362,6 @@ def test_validate_procedure_type_multiple(self): ) assert "SpecimenProcedure.procedure_details should only contain one type of model" in repr(e.value) - def test_section_deprecated_coordinate_fields(self): - """Test that using deprecated coordinate fields in Section raises deprecation warnings""" - with warnings.catch_warnings(record=True) as w: - warnings.simplefilter("always") - section = Section( - output_specimen_id="section1", - coordinate_system_name="CCFv3", - start_coordinate=Translation(translation=[0.5, 1.0, 0.0, 1.0]), - thickness=100.0, - thickness_unit=SizeUnit.UM, - partial_slice=[AnatomicalRelative.LEFT], - ) - deprecation_warnings = [warning for warning in w if issubclass(warning.category, DeprecationWarning)] - assert len(deprecation_warnings) >= 1 - section_warnings = [warning for warning in deprecation_warnings if "Section fields" in str(warning.message)] - assert len(section_warnings) == 1 - assert "partial_slice" in str(section_warnings[0].message) - assert "PlanarSection" in str(section_warnings[0].message) - assert section.output_specimen_id == "section1" - def test_coordinate_volume_validator(self): """Test validator for list lengths on BrainInjection""" @@ -471,9 +451,9 @@ def test_sectioning(self): # Updated initialization to use the new Section class sectioning_procedure = PlanarSectioning( - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, sections=[ - Section( + PlanarSection( output_specimen_id="123456_001", targeted_structure=CCFv3.MOP, coordinate_system_name="BREGMA_ARI", @@ -484,7 +464,7 @@ def test_sectioning(self): translation=[0.5, 0, 0], ), ), - Section( + PlanarSection( output_specimen_id="123456_002", coordinate_system_name="BREGMA_ARI", start_coordinate=Translation( @@ -494,7 +474,7 @@ def test_sectioning(self): translation=[0.7, 0, 0], ), ), - Section( + PlanarSection( output_specimen_id="123456_003", coordinate_system_name="BREGMA_ARI", start_coordinate=Translation( @@ -782,12 +762,12 @@ def test_procedures_addition_coordinate_system_validation(self): # Create two procedures with different coordinate systems p1 = Procedures( subject_id="12345", - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, + global_coordinate_system=BREGMA_ARI, ) p2 = Procedures( subject_id="12345", - coordinate_system=CoordinateSystemLibrary.BREGMA_ARID, # Different coordinate system + global_coordinate_system=BREGMA_ARID, # Different coordinate system ) # Test that combining procedures with different coordinate systems raises ValueError @@ -801,9 +781,9 @@ def test_procedures_addition_coordinate_system_validation(self): # Test that combining procedures with same coordinate systems works p3 = Procedures( subject_id="12345", - coordinate_system=CoordinateSystemLibrary.BREGMA_ARI, # Same coordinate system as p1 + global_coordinate_system=BREGMA_ARI, # Same coordinate system as p1 ) combined = p1 + p3 - assert combined.global_coordinate_system == CoordinateSystemLibrary.BREGMA_ARI + assert combined.global_coordinate_system == BREGMA_ARI assert len(combined.subject_procedures) == 0 # Both started with empty procedures diff --git a/tests/test_processing.py b/tests/test_processing.py index d231b9f5b..cababcfd6 100644 --- a/tests/test_processing.py +++ b/tests/test_processing.py @@ -305,6 +305,7 @@ def test_dependency_graph_none(self): stage=ProcessStage.PROCESSING, code=Code( url="www.example.com/ephys_compression", + version="0.0.1", ), ), DataProcess( @@ -313,7 +314,7 @@ def test_dependency_graph_none(self): process_type=ProcessName.OTHER, experimenters=["AIND Scientific Computing"], stage=ProcessStage.PROCESSING, - code=Code(url=""), + code=Code(url="", version="0.0.1"), notes="Data was copied.", ), ] diff --git a/tests/test_quality_control.py b/tests/test_quality_control.py index 56cfc8095..c6e17ef33 100644 --- a/tests/test_quality_control.py +++ b/tests/test_quality_control.py @@ -29,24 +29,6 @@ def test_constructors(self): assert quality_control is not None - def test_tags_list_to_dict_conversion(self): - """test that old list[str] tags get converted to dict[str, str]""" - - metric_dict = { - "name": "Test metric", - "modality": {"name": "Extracellular electrophysiology", "abbreviation": "ecephys"}, - "stage": "Processing", - "value": 42, - "status_history": [{"evaluator": "Test", "timestamp": "2020-10-10", "status": "Pass"}], - "tags": ["tag1", "tag2", "tag3"], - } - - with pytest.warns(DeprecationWarning): - metric = QCMetric.model_validate(metric_dict) - - assert isinstance(metric.tags, dict) - assert metric.tags == {"tag_1": "tag1", "tag_2": "tag2", "tag_3": "tag3"} - def test_tags_property(self): """test that QualityControl.tags returns all unique tag values""" tags = quality_control.tags @@ -787,33 +769,6 @@ def test_helper_functions_integration(self): late_status = qc.evaluate_status(date=late_date, tag="group:time_sensitive") assert late_status == Status.FAIL - def test_backwards_compatibility_default_grouping(self): - """Test that fix_default_grouping_list validator handles old v2.2.X format correctly""" - - # Test old v2.2.X format: list of strings for default_grouping + list-based tags - old_format_dict = { - "metrics": [ - { - "object_type": "QC metric", - "name": "Old format metric", - "modality": {"name": "Extracellular electrophysiology", "abbreviation": "ecephys"}, - "stage": "Processing", - "value": 42, - "status_history": [{"evaluator": "Test", "timestamp": "2020-10-10", "status": "Pass"}], - "tags": ["old_tag1", "old_tag2"], - } - ], - "default_grouping": ["group1", "group2"], - } - - with pytest.warns(DeprecationWarning): - qc_old = QualityControl.model_validate(old_format_dict) - - # Should convert to [("modality",), ("tag_1",)] for backwards compatibility - assert qc_old.default_grouping == [("modality",), ("tag_1",)] - # Tags should be converted to dict - assert qc_old.metrics[0].tags == {"tag_1": "old_tag1", "tag_2": "old_tag2"} - def test_new_format_default_grouping_all_strings(self): """Test that new format with all strings in default_grouping is NOT converted""" diff --git a/tests/test_subject.py b/tests/test_subject.py index 749e2f417..fe9c479cb 100644 --- a/tests/test_subject.py +++ b/tests/test_subject.py @@ -41,7 +41,6 @@ def test_constructors(self): cage_id="543", ), breeding_info=BreedingInfo( - breeding_group="Emx1-IRES-Cre(ND)", maternal_id="546543", maternal_genotype="Emx1-IRES-Cre/wt; Camk2a-tTa/Camk2a-tTA", paternal_id="232323", @@ -54,16 +53,3 @@ def test_constructors(self): Subject.model_validate_json(s.model_dump_json()) assert s is not None - assert s.subject_details.breeding_info.breeding_group is None - - def test_breeding_info_deprecated_field(self): - """test that using deprecated field raises warning""" - - with pytest.warns(DeprecationWarning): - BreedingInfo( - breeding_group="Emx1-IRES-Cre(ND)", - maternal_id="546543", - maternal_genotype="Emx1-IRES-Cre/wt; Camk2a-tTa/Camk2a-tTA", - paternal_id="232323", - paternal_genotype="Ai93(TITL-GCaMP6f)/wt", - ) diff --git a/tests/test_subjects.py b/tests/test_subjects.py index 62e49eee4..5f6037804 100644 --- a/tests/test_subjects.py +++ b/tests/test_subjects.py @@ -207,25 +207,8 @@ def test_calibration_object_empty(self): class TestBreedingInfo: """Test the breeding info model""" - def test_breeding_info_deprecated_field_warning(self): - """Test that breeding_group field triggers deprecation warning and is cleared""" - - with pytest.warns(DeprecationWarning) as warning: - breeding_info = BreedingInfo( - breeding_group="test_group", # This should trigger warning and be cleared - maternal_id="M001", - maternal_genotype="wt/wt", - paternal_id="P001", - paternal_genotype="wt/wt", - ) - - assert len(warning) == 1 - assert "breeding_group" in str(warning[0].message) - - assert breeding_info.breeding_group is None - - def test_breeding_info_without_deprecated_field(self): - """Test creating BreedingInfo without the deprecated breeding_group field""" + def test_breeding_info(self): + """Test creating BreedingInfo""" breeding_info = BreedingInfo( maternal_id="M001", maternal_genotype="wt/wt", paternal_id="P001", paternal_genotype="wt/wt" @@ -235,4 +218,3 @@ def test_breeding_info_without_deprecated_field(self): assert breeding_info.maternal_genotype == "wt/wt" assert breeding_info.paternal_id == "P001" assert breeding_info.paternal_genotype == "wt/wt" - assert breeding_info.breeding_group is None diff --git a/tests/test_utils_merge.py b/tests/test_utils_merge.py index 714c5ccde..a131f287a 100644 --- a/tests/test_utils_merge.py +++ b/tests/test_utils_merge.py @@ -4,7 +4,6 @@ import pytest -from aind_data_schema.components.coordinates import CoordinateSystemLibrary from aind_data_schema.utils.merge import ( merge_coordinate_systems, merge_notes, @@ -13,6 +12,7 @@ merge_str_alphabetical, merge_str_tuple_lists, ) +from tests.coordinate_systems import BREGMA_ARI, MPM_MANIP_RFB class TestMergeStrTupleLists: @@ -203,8 +203,8 @@ class TestMergeCoordinateSystems: def setup_method(self): """Set up test cases""" - self.CSA = CoordinateSystemLibrary.BREGMA_ARI - self.CSB = CoordinateSystemLibrary.MPM_MANIP_RFB + self.CSA = BREGMA_ARI + self.CSB = MPM_MANIP_RFB def test_both_none(self): """Test when both inputs are None""" diff --git a/tests/test_utils_validators.py b/tests/test_utils_validators.py index dd66f5183..bca2c07bb 100644 --- a/tests/test_utils_validators.py +++ b/tests/test_utils_validators.py @@ -486,15 +486,14 @@ def test_no_paths(self, mock_warning: MagicMock, mock_exists: MagicMock): @patch("pathlib.Path.is_absolute") @patch("pathlib.Path.exists") @patch("aind_data_schema.utils.validators.logger") - def test_absolute_path_warning(self, mock_warning: MagicMock, mock_is_absolute: MagicMock, mock_exists: MagicMock): + def test_absolute_path_raises(self, mock_warning: MagicMock, mock_is_absolute: MagicMock, mock_exists: MagicMock): """Test when the path is absolute""" mock_is_absolute.return_value = True mock_exists.return_value = True test_path = AssetPath("/absolute/path/to/file.txt") - recursive_check_paths(test_path, None) - mock_warning.warning.assert_called_with( - "AssetPath /absolute/path/to/file.txt is absolute, ensure file paths are relative to the metadata directory" - ) + with pytest.raises(ValueError) as context: + recursive_check_paths(test_path, None) + assert "is absolute" in str(context.value) @patch("pathlib.Path.is_absolute", return_value=False) @patch("pathlib.Path.exists", returns_value=True) diff --git a/uv.lock b/uv.lock index ae6ebed87..45a88f674 100644 --- a/uv.lock +++ b/uv.lock @@ -107,12 +107,6 @@ dependencies = [ { name = "tzdata" }, ] -[package.optional-dependencies] -transforms = [ - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, -] - [package.dev-dependencies] dev = [ { name = "argparse" }, @@ -122,8 +116,6 @@ dev = [ { name = "pytest" }, { name = "pytest-cov" }, { name = "ruff" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "semver" }, ] docs = [ @@ -143,10 +135,8 @@ requires-dist = [ { name = "aind-data-schema-models", specifier = ">=6.1.0,<7" }, { name = "pydantic", specifier = ">=2.7,<2.12" }, { name = "pydantic-extra-types" }, - { name = "scipy", marker = "extra == 'transforms'" }, { name = "tzdata" }, ] -provides-extras = ["transforms"] [package.metadata.requires-dev] dev = [ @@ -157,7 +147,6 @@ dev = [ { name = "pytest", specifier = ">=8.3" }, { name = "pytest-cov", specifier = ">=6" }, { name = "ruff", specifier = ">=0.11" }, - { name = "scipy" }, { name = "semver" }, ] docs = [ @@ -636,133 +625,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d3/ac/686789b9145413f1a61878c407210e41bfdb097976864e0913078b24098c/myst_parser-5.0.0-py3-none-any.whl", hash = "sha256:ab31e516024918296e169139072b81592336f2fef55b8986aa31c9f04b5f7211", size = 84533, upload-time = "2026-01-15T09:08:16.788Z" }, ] -[[package]] -name = "numpy" -version = "2.2.6" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11'", -] -sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, - { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, - { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, - { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, - { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, - { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, - { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, - { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, - { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, - { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, - { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, - { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, - { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, - { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, - { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, - { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, - { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, - { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, - { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, - { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, - { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, - { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, - { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, - { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, - { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, - { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, - { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, - { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, - { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, - { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, - { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, - { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, - { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, - { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, - { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, - { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, - { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, - { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, - { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, - { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, - { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, - { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, - { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, - { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, - { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, - { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, - { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, - { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, - { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, - { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, - { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, - { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, - { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, - { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, -] - -[[package]] -name = "numpy" -version = "2.4.4" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", -] -sdist = { url = "https://files.pythonhosted.org/packages/d7/9f/b8cef5bffa569759033adda9481211426f12f53299629b410340795c2514/numpy-2.4.4.tar.gz", hash = "sha256:2d390634c5182175533585cc89f3608a4682ccb173cc9bb940b2881c8d6f8fa0", size = 20731587, upload-time = "2026-03-29T13:22:01.298Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/c6/4218570d8c8ecc9704b5157a3348e486e84ef4be0ed3e38218ab473c83d2/numpy-2.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f983334aea213c99992053ede6168500e5f086ce74fbc4acc3f2b00f5762e9db", size = 16976799, upload-time = "2026-03-29T13:18:15.438Z" }, - { url = "https://files.pythonhosted.org/packages/dd/92/b4d922c4a5f5dab9ed44e6153908a5c665b71acf183a83b93b690996e39b/numpy-2.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72944b19f2324114e9dc86a159787333b77874143efcf89a5167ef83cfee8af0", size = 14971552, upload-time = "2026-03-29T13:18:18.606Z" }, - { url = "https://files.pythonhosted.org/packages/8a/dc/df98c095978fa6ee7b9a9387d1d58cbb3d232d0e69ad169a4ce784bde4fd/numpy-2.4.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:86b6f55f5a352b48d7fbfd2dbc3d5b780b2d79f4d3c121f33eb6efb22e9a2015", size = 5476566, upload-time = "2026-03-29T13:18:21.532Z" }, - { url = "https://files.pythonhosted.org/packages/28/34/b3fdcec6e725409223dd27356bdf5a3c2cc2282e428218ecc9cb7acc9763/numpy-2.4.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:ba1f4fc670ed79f876f70082eff4f9583c15fb9a4b89d6188412de4d18ae2f40", size = 6806482, upload-time = "2026-03-29T13:18:23.634Z" }, - { url = "https://files.pythonhosted.org/packages/68/62/63417c13aa35d57bee1337c67446761dc25ea6543130cf868eace6e8157b/numpy-2.4.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a87ec22c87be071b6bdbd27920b129b94f2fc964358ce38f3822635a3e2e03d", size = 15973376, upload-time = "2026-03-29T13:18:26.677Z" }, - { url = "https://files.pythonhosted.org/packages/cf/c5/9fcb7e0e69cef59cf10c746b84f7d58b08bc66a6b7d459783c5a4f6101a6/numpy-2.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df3775294accfdd75f32c74ae39fcba920c9a378a2fc18a12b6820aa8c1fb502", size = 16925137, upload-time = "2026-03-29T13:18:30.14Z" }, - { url = "https://files.pythonhosted.org/packages/7e/43/80020edacb3f84b9efdd1591120a4296462c23fd8db0dde1666f6ef66f13/numpy-2.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0d4e437e295f18ec29bc79daf55e8a47a9113df44d66f702f02a293d93a2d6dd", size = 17329414, upload-time = "2026-03-29T13:18:33.733Z" }, - { url = "https://files.pythonhosted.org/packages/fd/06/af0658593b18a5f73532d377188b964f239eb0894e664a6c12f484472f97/numpy-2.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6aa3236c78803afbcb255045fbef97a9e25a1f6c9888357d205ddc42f4d6eba5", size = 18658397, upload-time = "2026-03-29T13:18:37.511Z" }, - { url = "https://files.pythonhosted.org/packages/e6/ce/13a09ed65f5d0ce5c7dd0669250374c6e379910f97af2c08c57b0608eee4/numpy-2.4.4-cp311-cp311-win32.whl", hash = "sha256:30caa73029a225b2d40d9fae193e008e24b2026b7ee1a867b7ee8d96ca1a448e", size = 6239499, upload-time = "2026-03-29T13:18:40.372Z" }, - { url = "https://files.pythonhosted.org/packages/bd/63/05d193dbb4b5eec1eca73822d80da98b511f8328ad4ae3ca4caf0f4db91d/numpy-2.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:6bbe4eb67390b0a0265a2c25458f6b90a409d5d069f1041e6aff1e27e3d9a79e", size = 12614257, upload-time = "2026-03-29T13:18:42.95Z" }, - { url = "https://files.pythonhosted.org/packages/87/c5/8168052f080c26fa984c413305012be54741c9d0d74abd7fbeeccae3889f/numpy-2.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:fcfe2045fd2e8f3cb0ce9d4ba6dba6333b8fa05bb8a4939c908cd43322d14c7e", size = 10486775, upload-time = "2026-03-29T13:18:45.835Z" }, - { url = "https://files.pythonhosted.org/packages/28/05/32396bec30fb2263770ee910142f49c1476d08e8ad41abf8403806b520ce/numpy-2.4.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15716cfef24d3a9762e3acdf87e27f58dc823d1348f765bbea6bef8c639bfa1b", size = 16689272, upload-time = "2026-03-29T13:18:49.223Z" }, - { url = "https://files.pythonhosted.org/packages/c5/f3/a983d28637bfcd763a9c7aafdb6d5c0ebf3d487d1e1459ffdb57e2f01117/numpy-2.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23cbfd4c17357c81021f21540da84ee282b9c8fba38a03b7b9d09ba6b951421e", size = 14699573, upload-time = "2026-03-29T13:18:52.629Z" }, - { url = "https://files.pythonhosted.org/packages/9b/fd/e5ecca1e78c05106d98028114f5c00d3eddb41207686b2b7de3e477b0e22/numpy-2.4.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8b3b60bb7cba2c8c81837661c488637eee696f59a877788a396d33150c35d842", size = 5204782, upload-time = "2026-03-29T13:18:55.579Z" }, - { url = "https://files.pythonhosted.org/packages/de/2f/702a4594413c1a8632092beae8aba00f1d67947389369b3777aed783fdca/numpy-2.4.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e4a010c27ff6f210ff4c6ef34394cd61470d01014439b192ec22552ee867f2a8", size = 6552038, upload-time = "2026-03-29T13:18:57.769Z" }, - { url = "https://files.pythonhosted.org/packages/7f/37/eed308a8f56cba4d1fdf467a4fc67ef4ff4bf1c888f5fc980481890104b1/numpy-2.4.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9e75681b59ddaa5e659898085ae0eaea229d054f2ac0c7e563a62205a700121", size = 15670666, upload-time = "2026-03-29T13:19:00.341Z" }, - { url = "https://files.pythonhosted.org/packages/0a/0d/0e3ecece05b7a7e87ab9fb587855548da437a061326fff64a223b6dcb78a/numpy-2.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:81f4a14bee47aec54f883e0cad2d73986640c1590eb9bfaaba7ad17394481e6e", size = 16645480, upload-time = "2026-03-29T13:19:03.63Z" }, - { url = "https://files.pythonhosted.org/packages/34/49/f2312c154b82a286758ee2f1743336d50651f8b5195db18cdb63675ff649/numpy-2.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:62d6b0f03b694173f9fcb1fb317f7222fd0b0b103e784c6549f5e53a27718c44", size = 17020036, upload-time = "2026-03-29T13:19:07.428Z" }, - { url = "https://files.pythonhosted.org/packages/7b/e9/736d17bd77f1b0ec4f9901aaec129c00d59f5d84d5e79bba540ef12c2330/numpy-2.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fbc356aae7adf9e6336d336b9c8111d390a05df88f1805573ebb0807bd06fd1d", size = 18368643, upload-time = "2026-03-29T13:19:10.775Z" }, - { url = "https://files.pythonhosted.org/packages/63/f6/d417977c5f519b17c8a5c3bc9e8304b0908b0e21136fe43bf628a1343914/numpy-2.4.4-cp312-cp312-win32.whl", hash = "sha256:0d35aea54ad1d420c812bfa0385c71cd7cc5bcf7c65fed95fc2cd02fe8c79827", size = 5961117, upload-time = "2026-03-29T13:19:13.464Z" }, - { url = "https://files.pythonhosted.org/packages/2d/5b/e1deebf88ff431b01b7406ca3583ab2bbb90972bbe1c568732e49c844f7e/numpy-2.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:b5f0362dc928a6ecd9db58868fca5e48485205e3855957bdedea308f8672ea4a", size = 12320584, upload-time = "2026-03-29T13:19:16.155Z" }, - { url = "https://files.pythonhosted.org/packages/58/89/e4e856ac82a68c3ed64486a544977d0e7bdd18b8da75b78a577ca31c4395/numpy-2.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:846300f379b5b12cc769334464656bc882e0735d27d9726568bc932fdc49d5ec", size = 10221450, upload-time = "2026-03-29T13:19:18.994Z" }, - { url = "https://files.pythonhosted.org/packages/14/1d/d0a583ce4fefcc3308806a749a536c201ed6b5ad6e1322e227ee4848979d/numpy-2.4.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:08f2e31ed5e6f04b118e49821397f12767934cfdd12a1ce86a058f91e004ee50", size = 16684933, upload-time = "2026-03-29T13:19:22.47Z" }, - { url = "https://files.pythonhosted.org/packages/c1/62/2b7a48fbb745d344742c0277f01286dead15f3f68e4f359fbfcf7b48f70f/numpy-2.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e823b8b6edc81e747526f70f71a9c0a07ac4e7ad13020aa736bb7c9d67196115", size = 14694532, upload-time = "2026-03-29T13:19:25.581Z" }, - { url = "https://files.pythonhosted.org/packages/e5/87/499737bfba066b4a3bebff24a8f1c5b2dee410b209bc6668c9be692580f0/numpy-2.4.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4a19d9dba1a76618dd86b164d608566f393f8ec6ac7c44f0cc879011c45e65af", size = 5199661, upload-time = "2026-03-29T13:19:28.31Z" }, - { url = "https://files.pythonhosted.org/packages/cd/da/464d551604320d1491bc345efed99b4b7034143a85787aab78d5691d5a0e/numpy-2.4.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d2a8490669bfe99a233298348acc2d824d496dee0e66e31b66a6022c2ad74a5c", size = 6547539, upload-time = "2026-03-29T13:19:30.97Z" }, - { url = "https://files.pythonhosted.org/packages/7d/90/8d23e3b0dafd024bf31bdec225b3bb5c2dbfa6912f8a53b8659f21216cbf/numpy-2.4.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45dbed2ab436a9e826e302fcdcbe9133f9b0006e5af7168afb8963a6520da103", size = 15668806, upload-time = "2026-03-29T13:19:33.887Z" }, - { url = "https://files.pythonhosted.org/packages/d1/73/a9d864e42a01896bb5974475438f16086be9ba1f0d19d0bb7a07427c4a8b/numpy-2.4.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c901b15172510173f5cb310eae652908340f8dede90fff9e3bf6c0d8dfd92f83", size = 16632682, upload-time = "2026-03-29T13:19:37.336Z" }, - { url = "https://files.pythonhosted.org/packages/34/fb/14570d65c3bde4e202a031210475ae9cde9b7686a2e7dc97ee67d2833b35/numpy-2.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:99d838547ace2c4aace6c4f76e879ddfe02bb58a80c1549928477862b7a6d6ed", size = 17019810, upload-time = "2026-03-29T13:19:40.963Z" }, - { url = "https://files.pythonhosted.org/packages/8a/77/2ba9d87081fd41f6d640c83f26fb7351e536b7ce6dd9061b6af5904e8e46/numpy-2.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0aec54fd785890ecca25a6003fd9a5aed47ad607bbac5cd64f836ad8666f4959", size = 18357394, upload-time = "2026-03-29T13:19:44.859Z" }, - { url = "https://files.pythonhosted.org/packages/a2/23/52666c9a41708b0853fa3b1a12c90da38c507a3074883823126d4e9d5b30/numpy-2.4.4-cp313-cp313-win32.whl", hash = "sha256:07077278157d02f65c43b1b26a3886bce886f95d20aabd11f87932750dfb14ed", size = 5959556, upload-time = "2026-03-29T13:19:47.661Z" }, - { url = "https://files.pythonhosted.org/packages/57/fb/48649b4971cde70d817cf97a2a2fdc0b4d8308569f1dd2f2611959d2e0cf/numpy-2.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:5c70f1cc1c4efbe316a572e2d8b9b9cc44e89b95f79ca3331553fbb63716e2bf", size = 12317311, upload-time = "2026-03-29T13:19:50.67Z" }, - { url = "https://files.pythonhosted.org/packages/ba/d8/11490cddd564eb4de97b4579ef6bfe6a736cc07e94c1598590ae25415e01/numpy-2.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:ef4059d6e5152fa1a39f888e344c73fdc926e1b2dd58c771d67b0acfbf2aa67d", size = 10222060, upload-time = "2026-03-29T13:19:54.229Z" }, - { url = "https://files.pythonhosted.org/packages/99/5d/dab4339177a905aad3e2221c915b35202f1ec30d750dd2e5e9d9a72b804b/numpy-2.4.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4bbc7f303d125971f60ec0aaad5e12c62d0d2c925f0ab1273debd0e4ba37aba5", size = 14822302, upload-time = "2026-03-29T13:19:57.585Z" }, - { url = "https://files.pythonhosted.org/packages/eb/e4/0564a65e7d3d97562ed6f9b0fd0fb0a6f559ee444092f105938b50043876/numpy-2.4.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:4d6d57903571f86180eb98f8f0c839fa9ebbfb031356d87f1361be91e433f5b7", size = 5327407, upload-time = "2026-03-29T13:20:00.601Z" }, - { url = "https://files.pythonhosted.org/packages/29/8d/35a3a6ce5ad371afa58b4700f1c820f8f279948cca32524e0a695b0ded83/numpy-2.4.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:4636de7fd195197b7535f231b5de9e4b36d2c440b6e566d2e4e4746e6af0ca93", size = 6647631, upload-time = "2026-03-29T13:20:02.855Z" }, - { url = "https://files.pythonhosted.org/packages/f4/da/477731acbd5a58a946c736edfdabb2ac5b34c3d08d1ba1a7b437fa0884df/numpy-2.4.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ad2e2ef14e0b04e544ea2fa0a36463f847f113d314aa02e5b402fdf910ef309e", size = 15727691, upload-time = "2026-03-29T13:20:06.004Z" }, - { url = "https://files.pythonhosted.org/packages/e6/db/338535d9b152beabeb511579598418ba0212ce77cf9718edd70262cc4370/numpy-2.4.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a285b3b96f951841799528cd1f4f01cd70e7e0204b4abebac9463eecfcf2a40", size = 16681241, upload-time = "2026-03-29T13:20:09.417Z" }, - { url = "https://files.pythonhosted.org/packages/e2/a9/ad248e8f58beb7a0219b413c9c7d8151c5d285f7f946c3e26695bdbbe2df/numpy-2.4.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f8474c4241bc18b750be2abea9d7a9ec84f46ef861dbacf86a4f6e043401f79e", size = 17085767, upload-time = "2026-03-29T13:20:13.126Z" }, - { url = "https://files.pythonhosted.org/packages/b5/1a/3b88ccd3694681356f70da841630e4725a7264d6a885c8d442a697e1146b/numpy-2.4.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4e874c976154687c1f71715b034739b45c7711bec81db01914770373d125e392", size = 18403169, upload-time = "2026-03-29T13:20:17.096Z" }, - { url = "https://files.pythonhosted.org/packages/c2/c9/fcfd5d0639222c6eac7f304829b04892ef51c96a75d479214d77e3ce6e33/numpy-2.4.4-cp313-cp313t-win32.whl", hash = "sha256:9c585a1790d5436a5374bac930dad6ed244c046ed91b2b2a3634eb2971d21008", size = 6083477, upload-time = "2026-03-29T13:20:20.195Z" }, - { url = "https://files.pythonhosted.org/packages/d5/e3/3938a61d1c538aaec8ed6fd6323f57b0c2d2d2219512434c5c878db76553/numpy-2.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:93e15038125dc1e5345d9b5b68aa7f996ec33b98118d18c6ca0d0b7d6198b7e8", size = 12457487, upload-time = "2026-03-29T13:20:22.946Z" }, - { url = "https://files.pythonhosted.org/packages/97/6a/7e345032cc60501721ef94e0e30b60f6b0bd601f9174ebd36389a2b86d40/numpy-2.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:0dfd3f9d3adbe2920b68b5cd3d51444e13a10792ec7154cd0a2f6e74d4ab3233", size = 10292002, upload-time = "2026-03-29T13:20:25.909Z" }, - { url = "https://files.pythonhosted.org/packages/6b/33/8fae8f964a4f63ed528264ddf25d2b683d0b663e3cba26961eb838a7c1bd/numpy-2.4.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:58c8b5929fcb8287cbd6f0a3fae19c6e03a5c48402ae792962ac465224a629a4", size = 16854491, upload-time = "2026-03-29T13:21:38.03Z" }, - { url = "https://files.pythonhosted.org/packages/bc/d0/1aabee441380b981cf8cdda3ae7a46aa827d1b5a8cce84d14598bc94d6d9/numpy-2.4.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:eea7ac5d2dce4189771cedb559c738a71512768210dc4e4753b107a2048b3d0e", size = 14895830, upload-time = "2026-03-29T13:21:41.509Z" }, - { url = "https://files.pythonhosted.org/packages/a5/b8/aafb0d1065416894fccf4df6b49ef22b8db045187949545bced89c034b8e/numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:51fc224f7ca4d92656d5a5eb315f12eb5fe2c97a66249aa7b5f562528a3be38c", size = 5400927, upload-time = "2026-03-29T13:21:44.747Z" }, - { url = "https://files.pythonhosted.org/packages/d6/77/063baa20b08b431038c7f9ff5435540c7b7265c78cf56012a483019ca72d/numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:28a650663f7314afc3e6ec620f44f333c386aad9f6fc472030865dc0ebb26ee3", size = 6715557, upload-time = "2026-03-29T13:21:47.406Z" }, - { url = "https://files.pythonhosted.org/packages/c7/a8/379542d45a14f149444c5c4c4e7714707239ce9cc1de8c2803958889da14/numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:19710a9ca9992d7174e9c52f643d4272dcd1558c5f7af7f6f8190f633bd651a7", size = 15804253, upload-time = "2026-03-29T13:21:50.753Z" }, - { url = "https://files.pythonhosted.org/packages/a2/c8/f0a45426d6d21e7ea3310a15cf90c43a14d9232c31a837702dba437f3373/numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b2aec6af35c113b05695ebb5749a787acd63cafc83086a05771d1e1cd1e555f", size = 16753552, upload-time = "2026-03-29T13:21:54.344Z" }, - { url = "https://files.pythonhosted.org/packages/04/74/f4c001f4714c3ad9ce037e18cf2b9c64871a84951eaa0baf683a9ca9301c/numpy-2.4.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f2cf083b324a467e1ab358c105f6cad5ea950f50524668a80c486ff1db24e119", size = 12509075, upload-time = "2026-03-29T13:21:57.644Z" }, -] - [[package]] name = "openpyxl" version = "3.1.5" @@ -1067,120 +929,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0e/fe/da8b9e1347696bb22120b77280ec5ce25d500ca5cb39d5ad6e5c18de19c1/ruff-0.16.4-py3-none-win_arm64.whl", hash = "sha256:a3a61621c9b6f6a89573e938a080e648f1695baa3f58570a3a707bc51ff65a21", size = 10451579, upload-time = "2026-08-20T17:43:57.135Z" }, ] -[[package]] -name = "scipy" -version = "1.15.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11'", -] -dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214, upload-time = "2025-05-08T16:13:05.955Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c", size = 38702770, upload-time = "2025-05-08T16:04:20.849Z" }, - { url = "https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253", size = 30094511, upload-time = "2025-05-08T16:04:27.103Z" }, - { url = "https://files.pythonhosted.org/packages/ea/b1/4deb37252311c1acff7f101f6453f0440794f51b6eacb1aad4459a134081/scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f", size = 22368151, upload-time = "2025-05-08T16:04:31.731Z" }, - { url = "https://files.pythonhosted.org/packages/38/7d/f457626e3cd3c29b3a49ca115a304cebb8cc6f31b04678f03b216899d3c6/scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92", size = 25121732, upload-time = "2025-05-08T16:04:36.596Z" }, - { url = "https://files.pythonhosted.org/packages/db/0a/92b1de4a7adc7a15dcf5bddc6e191f6f29ee663b30511ce20467ef9b82e4/scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82", size = 35547617, upload-time = "2025-05-08T16:04:43.546Z" }, - { url = "https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40", size = 37662964, upload-time = "2025-05-08T16:04:49.431Z" }, - { url = "https://files.pythonhosted.org/packages/25/e1/3df8f83cb15f3500478c889be8fb18700813b95e9e087328230b98d547ff/scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e", size = 37238749, upload-time = "2025-05-08T16:04:55.215Z" }, - { url = "https://files.pythonhosted.org/packages/93/3e/b3257cf446f2a3533ed7809757039016b74cd6f38271de91682aa844cfc5/scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c", size = 40022383, upload-time = "2025-05-08T16:05:01.914Z" }, - { url = "https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13", size = 41259201, upload-time = "2025-05-08T16:05:08.166Z" }, - { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255, upload-time = "2025-05-08T16:05:14.596Z" }, - { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035, upload-time = "2025-05-08T16:05:20.152Z" }, - { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499, upload-time = "2025-05-08T16:05:24.494Z" }, - { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602, upload-time = "2025-05-08T16:05:29.313Z" }, - { url = "https://files.pythonhosted.org/packages/56/c5/1032cdb565f146109212153339f9cb8b993701e9fe56b1c97699eee12586/scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889", size = 35503415, upload-time = "2025-05-08T16:05:34.699Z" }, - { url = "https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982", size = 37652622, upload-time = "2025-05-08T16:05:40.762Z" }, - { url = "https://files.pythonhosted.org/packages/7e/31/be59513aa9695519b18e1851bb9e487de66f2d31f835201f1b42f5d4d475/scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9", size = 37244796, upload-time = "2025-05-08T16:05:48.119Z" }, - { url = "https://files.pythonhosted.org/packages/10/c0/4f5f3eeccc235632aab79b27a74a9130c6c35df358129f7ac8b29f562ac7/scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594", size = 40047684, upload-time = "2025-05-08T16:05:54.22Z" }, - { url = "https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb", size = 41246504, upload-time = "2025-05-08T16:06:00.437Z" }, - { url = "https://files.pythonhosted.org/packages/37/4b/683aa044c4162e10ed7a7ea30527f2cbd92e6999c10a8ed8edb253836e9c/scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019", size = 38766735, upload-time = "2025-05-08T16:06:06.471Z" }, - { url = "https://files.pythonhosted.org/packages/7b/7e/f30be3d03de07f25dc0ec926d1681fed5c732d759ac8f51079708c79e680/scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6", size = 30173284, upload-time = "2025-05-08T16:06:11.686Z" }, - { url = "https://files.pythonhosted.org/packages/07/9c/0ddb0d0abdabe0d181c1793db51f02cd59e4901da6f9f7848e1f96759f0d/scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477", size = 22446958, upload-time = "2025-05-08T16:06:15.97Z" }, - { url = "https://files.pythonhosted.org/packages/af/43/0bce905a965f36c58ff80d8bea33f1f9351b05fad4beaad4eae34699b7a1/scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c", size = 25242454, upload-time = "2025-05-08T16:06:20.394Z" }, - { url = "https://files.pythonhosted.org/packages/56/30/a6f08f84ee5b7b28b4c597aca4cbe545535c39fe911845a96414700b64ba/scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45", size = 35210199, upload-time = "2025-05-08T16:06:26.159Z" }, - { url = "https://files.pythonhosted.org/packages/0b/1f/03f52c282437a168ee2c7c14a1a0d0781a9a4a8962d84ac05c06b4c5b555/scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49", size = 37309455, upload-time = "2025-05-08T16:06:32.778Z" }, - { url = "https://files.pythonhosted.org/packages/89/b1/fbb53137f42c4bf630b1ffdfc2151a62d1d1b903b249f030d2b1c0280af8/scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e", size = 36885140, upload-time = "2025-05-08T16:06:39.249Z" }, - { url = "https://files.pythonhosted.org/packages/2e/2e/025e39e339f5090df1ff266d021892694dbb7e63568edcfe43f892fa381d/scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539", size = 39710549, upload-time = "2025-05-08T16:06:45.729Z" }, - { url = "https://files.pythonhosted.org/packages/e6/eb/3bf6ea8ab7f1503dca3a10df2e4b9c3f6b3316df07f6c0ded94b281c7101/scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed", size = 40966184, upload-time = "2025-05-08T16:06:52.623Z" }, - { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256, upload-time = "2025-05-08T16:06:58.696Z" }, - { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540, upload-time = "2025-05-08T16:07:04.209Z" }, - { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115, upload-time = "2025-05-08T16:07:08.998Z" }, - { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884, upload-time = "2025-05-08T16:07:14.091Z" }, - { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018, upload-time = "2025-05-08T16:07:19.427Z" }, - { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716, upload-time = "2025-05-08T16:07:25.712Z" }, - { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342, upload-time = "2025-05-08T16:07:31.468Z" }, - { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869, upload-time = "2025-05-08T16:07:38.002Z" }, - { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851, upload-time = "2025-05-08T16:08:33.671Z" }, - { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011, upload-time = "2025-05-08T16:07:44.039Z" }, - { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407, upload-time = "2025-05-08T16:07:49.891Z" }, - { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030, upload-time = "2025-05-08T16:07:54.121Z" }, - { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709, upload-time = "2025-05-08T16:07:58.506Z" }, - { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045, upload-time = "2025-05-08T16:08:03.929Z" }, - { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062, upload-time = "2025-05-08T16:08:09.558Z" }, - { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132, upload-time = "2025-05-08T16:08:15.34Z" }, - { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503, upload-time = "2025-05-08T16:08:21.513Z" }, - { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097, upload-time = "2025-05-08T16:08:27.627Z" }, -] - -[[package]] -name = "scipy" -version = "1.17.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", -] -dependencies = [ - { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675, upload-time = "2026-02-23T00:16:00.13Z" }, - { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057, upload-time = "2026-02-23T00:16:09.456Z" }, - { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032, upload-time = "2026-02-23T00:16:17.358Z" }, - { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533, upload-time = "2026-02-23T00:16:25.791Z" }, - { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057, upload-time = "2026-02-23T00:16:36.931Z" }, - { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300, upload-time = "2026-02-23T00:16:49.108Z" }, - { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333, upload-time = "2026-02-23T00:17:01.293Z" }, - { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314, upload-time = "2026-02-23T00:17:12.576Z" }, - { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512, upload-time = "2026-02-23T00:17:23.424Z" }, - { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248, upload-time = "2026-02-23T00:17:34.561Z" }, - { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954, upload-time = "2026-02-23T00:17:49.855Z" }, - { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662, upload-time = "2026-02-23T00:18:01.64Z" }, - { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366, upload-time = "2026-02-23T00:18:12.015Z" }, - { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017, upload-time = "2026-02-23T00:18:21.502Z" }, - { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842, upload-time = "2026-02-23T00:18:35.367Z" }, - { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890, upload-time = "2026-02-23T00:18:49.188Z" }, - { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557, upload-time = "2026-02-23T00:18:54.74Z" }, - { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856, upload-time = "2026-02-23T00:19:00.307Z" }, - { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682, upload-time = "2026-02-23T00:19:07.67Z" }, - { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340, upload-time = "2026-02-23T00:19:12.024Z" }, - { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199, upload-time = "2026-02-23T00:19:17.192Z" }, - { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001, upload-time = "2026-02-23T00:19:22.241Z" }, - { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719, upload-time = "2026-02-23T00:19:26.329Z" }, - { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595, upload-time = "2026-02-23T00:19:30.304Z" }, - { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429, upload-time = "2026-02-23T00:19:35.536Z" }, - { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952, upload-time = "2026-02-23T00:19:42.259Z" }, - { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063, upload-time = "2026-02-23T00:19:47.547Z" }, - { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449, upload-time = "2026-02-23T00:19:53.238Z" }, - { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943, upload-time = "2026-02-23T00:20:50.89Z" }, - { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621, upload-time = "2026-02-23T00:20:55.871Z" }, - { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708, upload-time = "2026-02-23T00:19:58.694Z" }, - { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135, upload-time = "2026-02-23T00:20:03.934Z" }, - { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977, upload-time = "2026-02-23T00:20:07.935Z" }, - { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601, upload-time = "2026-02-23T00:20:12.161Z" }, - { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667, upload-time = "2026-02-23T00:20:17.208Z" }, - { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159, upload-time = "2026-02-23T00:20:23.087Z" }, - { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771, upload-time = "2026-02-23T00:20:28.636Z" }, - { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910, upload-time = "2026-02-23T00:20:34.743Z" }, - { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980, upload-time = "2026-02-23T00:20:40.575Z" }, - { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543, upload-time = "2026-02-23T00:20:45.313Z" }, -] - [[package]] name = "semver" version = "3.0.4" From 512ff916e5a2d6b2f841a64dc3569905f1f8ece6 Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Tue, 25 Aug 2026 08:38:17 -0700 Subject: [PATCH 02/38] chore: bump versions --- schemas/acquisition_schema.json | 255 ++-- schemas/data_description_schema.json | 158 ++- schemas/instrument_schema.json | 726 ++++++++-- schemas/metadata_schema.json | 1208 +++++++++++------ schemas/model_schema.json | 8 +- schemas/procedures_schema.json | 432 +++--- schemas/processing_schema.json | 8 +- schemas/quality_control_schema.json | 8 +- schemas/subject_schema.json | 195 ++- src/aind_data_schema/core/acquisition.py | 2 +- src/aind_data_schema/core/data_description.py | 2 +- src/aind_data_schema/core/instrument.py | 2 +- src/aind_data_schema/core/metadata.py | 2 +- src/aind_data_schema/core/model.py | 2 +- src/aind_data_schema/core/procedures.py | 2 +- src/aind_data_schema/core/processing.py | 2 +- src/aind_data_schema/core/quality_control.py | 2 +- src/aind_data_schema/core/subject.py | 2 +- 18 files changed, 2175 insertions(+), 841 deletions(-) diff --git a/schemas/acquisition_schema.json b/schemas/acquisition_schema.json index d492ede58..215055a75 100644 --- a/schemas/acquisition_schema.json +++ b/schemas/acquisition_schema.json @@ -152,19 +152,6 @@ "title": "Initial relative position", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -2463,20 +2450,6 @@ "title": "Channels", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Required for ImageSPIM objects and when the imaging coordinate system differs from the Acquisition.coordinate_system", - "title": "Coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -2916,19 +2889,6 @@ "title": "Initial relative position", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -3091,19 +3051,6 @@ "title": "Relative position", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -3656,19 +3603,6 @@ "title": "Device name", "type": "string" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "$ref": "#/$defs/CoordinateSystem", "title": "Device local coordinate system" @@ -3815,6 +3749,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -3900,6 +3835,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -3911,6 +3847,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -3961,6 +3898,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -4216,6 +4156,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -4249,6 +4192,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -5145,20 +5091,6 @@ "default": null, "title": "Target coordinate in Acquisition.atlas" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Device coordinate system, defines un-rotated probe's orientation relative to the Acquisition.coordinate_system", - "title": "Device coordinate system" - }, "local_coordinate_system": { "$ref": "#/$defs/CoordinateSystem", "description": "Device coordinate system, defines un-rotated probe's orientation relative to the Acquisition.global_coordinate_system", @@ -5265,6 +5197,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -5350,6 +5283,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -5361,6 +5295,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -5411,6 +5346,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -5666,6 +5604,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -5699,6 +5640,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -7215,6 +7159,48 @@ "title": "_Ams_Osram", "type": "object" }, + "_Antibodies_Inc": { + "description": "Model Antibodies Inc", + "properties": { + "name": { + "const": "Antibodies Inc", + "default": "Antibodies Inc", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": null, + "default": null, + "title": "Abbreviation", + "type": "null" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": null + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Registry Identifier" + } + }, + "title": "_Antibodies_Inc", + "type": "object" + }, "_Applied_Scientific_Instrumentation": { "description": "Model Applied Scientific Instrumentation", "properties": { @@ -11174,6 +11160,48 @@ "title": "_Raspberry_Pi", "type": "object" }, + "_Rockland_Immunochemicals": { + "description": "Model Rockland Immunochemicals", + "properties": { + "name": { + "const": "Rockland Immunochemicals", + "default": "Rockland Immunochemicals", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": "ROCKLAND", + "default": "ROCKLAND", + "title": "Abbreviation", + "type": "string" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": "Research Organization Registry (ROR)" + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "02z2r2t61", + "title": "Registry Identifier" + } + }, + "title": "_Rockland_Immunochemicals", + "type": "object" + }, "_Same_Sky": { "description": "Model Same Sky", "properties": { @@ -11716,6 +11744,48 @@ "title": "_Stpt", "type": "object" }, + "_Synaptic_Systems": { + "description": "Model Synaptic Systems", + "properties": { + "name": { + "const": "Synaptic Systems", + "default": "Synaptic Systems", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": null, + "default": null, + "title": "Abbreviation", + "type": "null" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": null + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Registry Identifier" + } + }, + "title": "_Synaptic_Systems", + "type": "object" + }, "_Tamron": { "description": "Model Tamron", "properties": { @@ -12483,14 +12553,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/acquisition.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/acquisition.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/acquisition.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/acquisition.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.5.3", - "default": "2.5.3", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -13144,8 +13214,7 @@ "Universal", "W-SU", "WET", - "Zulu", - "localtime" + "Zulu" ], "minLength": 1, "type": "string" @@ -13216,20 +13285,6 @@ "default": null, "title": "Notes" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Origin and axis definitions for determining the configured position of devices during acquisition. Required when coordinates are provided within the Acquisition", - "title": "Coordinate system" - }, "global_coordinate_system": { "anyOf": [ { diff --git a/schemas/data_description_schema.json b/schemas/data_description_schema.json index e5dd848be..b1818c3c0 100644 --- a/schemas/data_description_schema.json +++ b/schemas/data_description_schema.json @@ -32,6 +32,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -117,6 +118,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -128,6 +130,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -178,6 +181,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -433,6 +439,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -466,6 +475,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -1019,6 +1031,48 @@ "title": "_Ams_Osram", "type": "object" }, + "_Antibodies_Inc": { + "description": "Model Antibodies Inc", + "properties": { + "name": { + "const": "Antibodies Inc", + "default": "Antibodies Inc", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": null, + "default": null, + "title": "Abbreviation", + "type": "null" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": null + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Registry Identifier" + } + }, + "title": "_Antibodies_Inc", + "type": "object" + }, "_Applied_Scientific_Instrumentation": { "description": "Model Applied Scientific Instrumentation", "properties": { @@ -4971,6 +5025,48 @@ "title": "_Raspberry_Pi", "type": "object" }, + "_Rockland_Immunochemicals": { + "description": "Model Rockland Immunochemicals", + "properties": { + "name": { + "const": "Rockland Immunochemicals", + "default": "Rockland Immunochemicals", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": "ROCKLAND", + "default": "ROCKLAND", + "title": "Abbreviation", + "type": "string" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": "Research Organization Registry (ROR)" + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "02z2r2t61", + "title": "Registry Identifier" + } + }, + "title": "_Rockland_Immunochemicals", + "type": "object" + }, "_Same_Sky": { "description": "Model Same Sky", "properties": { @@ -5513,6 +5609,48 @@ "title": "_Stpt", "type": "object" }, + "_Synaptic_Systems": { + "description": "Model Synaptic Systems", + "properties": { + "name": { + "const": "Synaptic Systems", + "default": "Synaptic Systems", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": null, + "default": null, + "title": "Abbreviation", + "type": "null" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": null + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Registry Identifier" + } + }, + "title": "_Synaptic_Systems", + "type": "object" + }, "_Tamron": { "description": "Model Tamron", "properties": { @@ -6280,14 +6418,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/data_description.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/data_description.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/data_description.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/data_description.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.4.1", - "default": "2.4.1", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -6357,6 +6495,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -6442,6 +6581,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -6453,6 +6593,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -6503,6 +6644,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -6758,6 +6902,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -6791,6 +6938,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, diff --git a/schemas/instrument_schema.json b/schemas/instrument_schema.json index ca83a1353..1e855304d 100644 --- a/schemas/instrument_schema.json +++ b/schemas/instrument_schema.json @@ -40,6 +40,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -125,6 +126,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -136,6 +138,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -186,6 +189,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -441,6 +447,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -474,6 +483,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -655,6 +667,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -740,6 +753,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -751,6 +765,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -801,6 +816,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -1056,6 +1074,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -1089,6 +1110,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -1273,6 +1297,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -1358,6 +1383,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -1369,6 +1395,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -1419,6 +1446,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -1674,6 +1704,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -1707,6 +1740,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -1809,40 +1845,22 @@ "default": null, "title": "Notes" }, - "size": { - "$ref": "#/$defs/Scale", - "deprecated": true, - "title": "3D Size" - }, - "size_unit": { - "$ref": "#/$defs/SizeUnit", - "deprecated": true, - "title": "Size unit" - }, "shape": { - "anyOf": [ + "discriminator": { + "mapping": { + "Circle": "#/$defs/Circle", + "Rectangle": "#/$defs/Rectangle" + }, + "propertyName": "object_type" + }, + "oneOf": [ { - "discriminator": { - "mapping": { - "Circle": "#/$defs/Circle", - "Rectangle": "#/$defs/Rectangle" - }, - "propertyName": "object_type" - }, - "oneOf": [ - { - "$ref": "#/$defs/Rectangle" - }, - { - "$ref": "#/$defs/Circle" - } - ] + "$ref": "#/$defs/Rectangle" }, { - "type": "null" + "$ref": "#/$defs/Circle" } ], - "default": null, "title": "Shape of the arena" }, "objects_in_arena": { @@ -1856,8 +1874,7 @@ }, "required": [ "name", - "size", - "size_unit" + "shape" ], "title": "Arena", "type": "object" @@ -2234,6 +2251,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -2319,6 +2337,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -2330,6 +2349,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -2380,6 +2400,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -2635,6 +2658,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -2668,6 +2694,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -3057,19 +3086,6 @@ "title": "Relative position", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -3245,6 +3261,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -3330,6 +3347,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -3341,6 +3359,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -3391,6 +3410,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -3646,6 +3668,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -3679,6 +3704,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -3989,19 +4017,6 @@ "default": null, "title": "DAQ port" }, - "channel_index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "DAQ channel index" - }, "sample_rate": { "anyOf": [ { @@ -4087,6 +4102,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -4172,6 +4188,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -4183,6 +4200,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -4233,6 +4251,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -4488,6 +4509,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -4521,6 +4545,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -4725,6 +4752,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -4810,6 +4838,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -4821,6 +4850,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -4871,6 +4901,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -5126,6 +5159,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -5159,6 +5195,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -5583,6 +5622,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -5668,6 +5708,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -5679,6 +5720,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -5729,6 +5771,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -5984,6 +6029,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -6017,6 +6065,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -6176,6 +6227,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -6261,6 +6313,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -6272,6 +6325,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -6322,6 +6376,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -6577,6 +6634,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -6610,6 +6670,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -6835,6 +6898,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -6920,6 +6984,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -6931,6 +6996,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -6981,6 +7047,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -7236,6 +7305,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -7269,6 +7341,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -7499,6 +7574,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -7584,6 +7660,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -7595,6 +7672,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -7645,6 +7723,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -7900,6 +7981,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -7933,6 +8017,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -8035,40 +8122,22 @@ "default": null, "title": "Notes" }, - "size": { - "$ref": "#/$defs/Scale", - "deprecated": true, - "title": "Size" - }, - "size_unit": { - "$ref": "#/$defs/SizeUnit", - "deprecated": true, - "title": "Size unit" - }, "shape": { - "anyOf": [ + "discriminator": { + "mapping": { + "Circle": "#/$defs/Circle", + "Rectangle": "#/$defs/Rectangle" + }, + "propertyName": "object_type" + }, + "oneOf": [ { - "discriminator": { - "mapping": { - "Circle": "#/$defs/Circle", - "Rectangle": "#/$defs/Rectangle" - }, - "propertyName": "object_type" - }, - "oneOf": [ - { - "$ref": "#/$defs/Rectangle" - }, - { - "$ref": "#/$defs/Circle" - } - ] + "$ref": "#/$defs/Rectangle" }, { - "type": "null" + "$ref": "#/$defs/Circle" } ], - "default": null, "title": "Shape of the enclosure" }, "internal_material": { @@ -8102,8 +8171,7 @@ }, "required": [ "name", - "size", - "size_unit", + "shape", "external_material", "grounded", "laser_interlock", @@ -8185,6 +8253,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -8270,6 +8339,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -8281,6 +8351,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -8331,6 +8402,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -8586,6 +8660,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -8619,6 +8696,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -8827,6 +8907,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -8912,6 +8993,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -8923,6 +9005,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -8973,6 +9056,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -9228,6 +9314,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -9261,6 +9350,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -9447,6 +9539,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -9532,6 +9625,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -9543,6 +9637,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -9593,6 +9688,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -9848,6 +9946,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -9881,6 +9982,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -10102,6 +10206,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -10187,6 +10292,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -10198,6 +10304,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -10248,6 +10355,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -10503,6 +10613,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -10536,6 +10649,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -10781,6 +10897,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -10866,6 +10983,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -10877,6 +10995,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -10927,6 +11046,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -11182,6 +11304,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -11215,6 +11340,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -11651,6 +11779,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -11736,6 +11865,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -11747,6 +11877,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -11797,6 +11928,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -12052,6 +12186,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -12085,6 +12222,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -12285,6 +12425,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -12370,6 +12511,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -12381,6 +12523,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -12431,6 +12574,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -12686,6 +12832,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -12719,6 +12868,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -12949,6 +13101,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -13034,6 +13187,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -13045,6 +13199,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -13095,6 +13250,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -13350,6 +13508,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -13383,6 +13544,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -13537,6 +13701,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -13622,6 +13787,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -13633,6 +13799,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -13683,6 +13850,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -13938,6 +14108,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -13971,6 +14144,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -14212,6 +14388,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -14297,6 +14474,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -14308,6 +14486,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -14358,6 +14537,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -14613,6 +14795,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -14646,6 +14831,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -14832,6 +15020,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -14917,6 +15106,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -14928,6 +15118,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -14978,6 +15169,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -15233,6 +15427,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -15266,6 +15463,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -15436,6 +15636,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -15521,6 +15722,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -15532,6 +15734,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -15582,6 +15785,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -15837,6 +16043,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -15870,6 +16079,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -15996,19 +16208,6 @@ "title": "Relative position", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -16087,6 +16286,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -16172,6 +16372,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -16183,6 +16384,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -16233,6 +16435,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -16488,6 +16693,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -16521,6 +16729,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -16758,6 +16969,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -16843,6 +17055,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -16854,6 +17067,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -16904,6 +17118,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -17159,6 +17376,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -17192,6 +17412,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -17397,6 +17620,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -17482,6 +17706,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -17493,6 +17718,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -17543,6 +17769,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -17798,6 +18027,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -17831,6 +18063,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -18033,6 +18268,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -18118,6 +18354,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -18129,6 +18366,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -18179,6 +18417,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -18434,6 +18675,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -18467,6 +18711,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -18664,6 +18911,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -18749,6 +18997,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -18760,6 +19009,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -18810,6 +19060,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -19065,6 +19318,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -19098,6 +19354,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -19552,6 +19811,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -19637,6 +19897,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -19648,6 +19909,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -19698,6 +19960,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -19953,6 +20218,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -19986,6 +20254,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -20230,6 +20501,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -20315,6 +20587,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -20326,6 +20599,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -20376,6 +20650,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -20631,6 +20908,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -20664,6 +20944,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -20888,6 +21171,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -20973,6 +21257,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -20984,6 +21269,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -21034,6 +21320,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -21289,6 +21578,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -21322,6 +21614,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -21838,6 +22133,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -21923,6 +22219,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -21934,6 +22231,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -21984,6 +22282,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -22239,6 +22540,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -22272,6 +22576,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -22431,6 +22738,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -22516,6 +22824,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -22527,6 +22836,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -22577,6 +22887,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -22832,6 +23145,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -22865,6 +23181,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -23087,19 +23406,6 @@ "title": "Relative position", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -23178,6 +23484,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -23263,6 +23570,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -23274,6 +23582,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -23324,6 +23633,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -23579,6 +23891,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -23612,6 +23927,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -23835,6 +24153,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -23920,6 +24239,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -23931,6 +24251,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -23981,6 +24302,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -24236,6 +24560,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -24269,6 +24596,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -24459,6 +24789,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -24544,6 +24875,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -24555,6 +24887,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -24605,6 +24938,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -24860,6 +25196,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -24893,6 +25232,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -25213,6 +25555,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -25298,6 +25641,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -25309,6 +25653,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -25359,6 +25704,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -25614,6 +25962,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -25647,6 +25998,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -26202,6 +26556,48 @@ "title": "_Analoginput", "type": "object" }, + "_Antibodies_Inc": { + "description": "Model Antibodies Inc", + "properties": { + "name": { + "const": "Antibodies Inc", + "default": "Antibodies Inc", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": null, + "default": null, + "title": "Abbreviation", + "type": "null" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": null + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Registry Identifier" + } + }, + "title": "_Antibodies_Inc", + "type": "object" + }, "_Applied_Scientific_Instrumentation": { "description": "Model Applied Scientific Instrumentation", "properties": { @@ -30673,6 +31069,48 @@ "title": "_Rgbarray", "type": "object" }, + "_Rockland_Immunochemicals": { + "description": "Model Rockland Immunochemicals", + "properties": { + "name": { + "const": "Rockland Immunochemicals", + "default": "Rockland Immunochemicals", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": "ROCKLAND", + "default": "ROCKLAND", + "title": "Abbreviation", + "type": "string" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": "Research Organization Registry (ROR)" + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "02z2r2t61", + "title": "Registry Identifier" + } + }, + "title": "_Rockland_Immunochemicals", + "type": "object" + }, "_Same_Sky": { "description": "Model Same Sky", "properties": { @@ -31291,6 +31729,48 @@ "title": "_Stpt", "type": "object" }, + "_Synaptic_Systems": { + "description": "Model Synaptic Systems", + "properties": { + "name": { + "const": "Synaptic Systems", + "default": "Synaptic Systems", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": null, + "default": null, + "title": "Abbreviation", + "type": "null" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": null + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Registry Identifier" + } + }, + "title": "_Synaptic_Systems", + "type": "object" + }, "_Synchronizer": { "description": "Model Synchronizer", "properties": { @@ -32306,14 +32786,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/instrument.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/instrument.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/instrument.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/instrument.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.2.7", - "default": "2.2.7", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -32473,20 +32953,6 @@ "description": "List of calibration measurements takend during instrument setup and maintenance", "title": "Calibrations" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Origin and axis definitions for determining the position of the instrument's components", - "title": "Coordinate system" - }, "global_coordinate_system": { "$ref": "#/$defs/CoordinateSystem", "description": "Origin and axis definitions for determining the position of the instrument's components", diff --git a/schemas/metadata_schema.json b/schemas/metadata_schema.json index eb14dd523..a3c106e3b 100644 --- a/schemas/metadata_schema.json +++ b/schemas/metadata_schema.json @@ -11,14 +11,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/acquisition.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/acquisition.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/acquisition.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/acquisition.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.5.3", - "default": "2.5.3", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -672,8 +672,7 @@ "Universal", "W-SU", "WET", - "Zulu", - "localtime" + "Zulu" ], "minLength": 1, "type": "string" @@ -744,20 +743,6 @@ "default": null, "title": "Notes" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Origin and axis definitions for determining the configured position of devices during acquisition. Required when coordinates are provided within the Acquisition", - "title": "Coordinate system" - }, "global_coordinate_system": { "anyOf": [ { @@ -1010,6 +995,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -1095,6 +1081,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -1106,6 +1093,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -1156,6 +1144,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -1411,6 +1402,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -1444,6 +1438,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -1611,19 +1608,6 @@ "title": "Initial relative position", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -1758,6 +1742,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -1843,6 +1828,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -1854,6 +1840,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -1904,6 +1891,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -2159,6 +2149,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -2192,6 +2185,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -2421,6 +2417,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -2506,6 +2503,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -2517,6 +2515,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -2567,6 +2566,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -2822,6 +2824,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -2855,6 +2860,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -2957,40 +2965,22 @@ "default": null, "title": "Notes" }, - "size": { - "$ref": "#/$defs/Scale", - "deprecated": true, - "title": "3D Size" - }, - "size_unit": { - "$ref": "#/$defs/SizeUnit", - "deprecated": true, - "title": "Size unit" - }, "shape": { - "anyOf": [ + "discriminator": { + "mapping": { + "Circle": "#/$defs/Circle", + "Rectangle": "#/$defs/Rectangle" + }, + "propertyName": "object_type" + }, + "oneOf": [ { - "discriminator": { - "mapping": { - "Circle": "#/$defs/Circle", - "Rectangle": "#/$defs/Rectangle" - }, - "propertyName": "object_type" - }, - "oneOf": [ - { - "$ref": "#/$defs/Rectangle" - }, - { - "$ref": "#/$defs/Circle" - } - ] + "$ref": "#/$defs/Rectangle" }, { - "type": "null" + "$ref": "#/$defs/Circle" } ], - "default": null, "title": "Shape of the arena" }, "objects_in_arena": { @@ -3004,8 +2994,7 @@ }, "required": [ "name", - "size", - "size_unit" + "shape" ], "title": "Arena", "type": "object" @@ -3361,19 +3350,6 @@ "title": "Object Type", "type": "string" }, - "breeding_group": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Breeding Group" - }, "maternal_id": { "title": "Maternal specimen ID", "type": "string" @@ -3764,6 +3740,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -3849,6 +3826,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -3860,6 +3838,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -3910,6 +3889,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -4165,6 +4147,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -4198,6 +4183,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -4587,19 +4575,6 @@ "title": "Relative position", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -4749,6 +4724,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -4834,6 +4810,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -4845,6 +4822,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -4895,6 +4873,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -5150,6 +5131,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -5183,6 +5167,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -5367,6 +5354,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -5452,6 +5440,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -5463,6 +5452,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -5513,6 +5503,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -5768,6 +5761,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -5801,6 +5797,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -6346,6 +6345,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -6431,6 +6431,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -6442,6 +6443,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -6492,6 +6494,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -6747,6 +6752,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -6780,6 +6788,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -7544,19 +7555,6 @@ "default": null, "title": "DAQ port" }, - "channel_index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "DAQ channel index" - }, "sample_rate": { "anyOf": [ { @@ -7642,6 +7640,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -7727,6 +7726,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -7738,6 +7738,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -7788,6 +7789,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -8043,6 +8047,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -8076,6 +8083,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -8279,14 +8289,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/data_description.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/data_description.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/data_description.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/data_description.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.4.1", - "default": "2.4.1", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -8356,6 +8366,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -8441,6 +8452,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -8452,6 +8464,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -8502,6 +8515,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -8757,6 +8773,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -8790,6 +8809,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -9496,6 +9518,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -9581,6 +9604,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -9592,6 +9616,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -9642,6 +9667,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -9897,6 +9925,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -9930,6 +9961,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -10475,6 +10509,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -10560,6 +10595,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -10571,6 +10607,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -10621,6 +10658,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -10876,6 +10916,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -10909,6 +10952,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -11067,19 +11113,6 @@ "title": "Relative position", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -11195,6 +11228,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -11280,6 +11314,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -11291,6 +11326,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -11341,6 +11377,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -11596,6 +11635,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -11629,6 +11671,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -11854,6 +11899,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -11939,6 +11985,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -11950,6 +11997,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -12000,6 +12048,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -12255,6 +12306,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -12288,6 +12342,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -12518,6 +12575,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -12603,6 +12661,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -12614,6 +12673,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -12664,6 +12724,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -12919,6 +12982,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -12952,6 +13018,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -13054,40 +13123,22 @@ "default": null, "title": "Notes" }, - "size": { - "$ref": "#/$defs/Scale", - "deprecated": true, - "title": "Size" - }, - "size_unit": { - "$ref": "#/$defs/SizeUnit", - "deprecated": true, - "title": "Size unit" - }, "shape": { - "anyOf": [ + "discriminator": { + "mapping": { + "Circle": "#/$defs/Circle", + "Rectangle": "#/$defs/Rectangle" + }, + "propertyName": "object_type" + }, + "oneOf": [ { - "discriminator": { - "mapping": { - "Circle": "#/$defs/Circle", - "Rectangle": "#/$defs/Rectangle" - }, - "propertyName": "object_type" - }, - "oneOf": [ - { - "$ref": "#/$defs/Rectangle" - }, - { - "$ref": "#/$defs/Circle" - } - ] + "$ref": "#/$defs/Rectangle" }, { - "type": "null" + "$ref": "#/$defs/Circle" } ], - "default": null, "title": "Shape of the enclosure" }, "internal_material": { @@ -13121,8 +13172,7 @@ }, "required": [ "name", - "size", - "size_unit", + "shape", "external_material", "grounded", "laser_interlock", @@ -13255,6 +13305,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -13340,6 +13391,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -13351,6 +13403,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -13401,6 +13454,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -13656,6 +13712,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -13689,6 +13748,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -14079,6 +14141,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -14164,6 +14227,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -14175,6 +14239,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -14225,6 +14290,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -14480,6 +14548,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -14513,6 +14584,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -14699,6 +14773,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -14784,6 +14859,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -14795,6 +14871,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -14845,6 +14922,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -15100,6 +15180,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -15133,6 +15216,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -15354,6 +15440,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -15439,6 +15526,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -15450,6 +15538,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -15500,6 +15589,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -15755,6 +15847,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -15788,6 +15883,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -15996,6 +16094,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -16081,6 +16180,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -16092,6 +16192,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -16142,6 +16243,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -16397,6 +16501,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -16430,6 +16537,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -16581,6 +16691,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -16666,6 +16777,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -16677,6 +16789,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -16727,6 +16840,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -16982,6 +17098,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -17015,6 +17134,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -17240,6 +17362,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -17325,6 +17448,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -17336,6 +17460,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -17386,6 +17511,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -17641,6 +17769,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -17674,6 +17805,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -17831,6 +17965,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -17916,6 +18051,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -17927,6 +18063,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -17977,6 +18114,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -18232,6 +18372,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -18265,6 +18408,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -18691,6 +18837,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -18776,6 +18923,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -18787,6 +18935,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -18837,6 +18986,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -19092,6 +19244,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -19125,6 +19280,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -19696,6 +19854,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -19781,6 +19940,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -19792,6 +19952,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -19842,6 +20003,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -20097,6 +20261,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -20130,6 +20297,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -20409,20 +20579,6 @@ "title": "Channels", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Required for ImageSPIM objects and when the imaging coordinate system differs from the Acquisition.coordinate_system", - "title": "Coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -20759,14 +20915,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/instrument.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/instrument.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/instrument.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/instrument.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.2.7", - "default": "2.2.7", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -20926,20 +21082,6 @@ "description": "List of calibration measurements takend during instrument setup and maintenance", "title": "Calibrations" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Origin and axis definitions for determining the position of the instrument's components", - "title": "Coordinate system" - }, "global_coordinate_system": { "$ref": "#/$defs/CoordinateSystem", "description": "Origin and axis definitions for determining the position of the instrument's components", @@ -21232,6 +21374,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -21317,6 +21460,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -21328,6 +21472,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -21378,6 +21523,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -21633,6 +21781,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -21666,6 +21817,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -21866,6 +22020,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -21951,6 +22106,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -21962,6 +22118,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -22012,6 +22169,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -22267,6 +22427,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -22300,6 +22463,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -22599,6 +22765,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -22684,6 +22851,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -22695,6 +22863,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -22745,6 +22914,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -23000,6 +23172,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -23033,6 +23208,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -23196,6 +23374,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -23281,6 +23460,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -23292,6 +23472,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -23342,6 +23523,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -23597,6 +23781,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -23630,6 +23817,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -23870,19 +24060,6 @@ "title": "Initial relative position", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -24025,6 +24202,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -24110,6 +24288,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -24121,6 +24300,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -24171,6 +24351,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -24426,6 +24609,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -24459,6 +24645,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -24685,19 +24874,6 @@ "title": "Relative position", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -25273,6 +25449,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -25358,6 +25535,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -25369,6 +25547,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -25419,6 +25598,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -25674,6 +25856,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -25707,6 +25892,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -25826,19 +26014,6 @@ "title": "Device name", "type": "string" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "$ref": "#/$defs/CoordinateSystem", "title": "Device local coordinate system" @@ -25932,6 +26107,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -26017,6 +26193,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -26028,6 +26205,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -26078,6 +26256,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -26333,6 +26514,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -26366,6 +26550,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -26486,14 +26673,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/model.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/model.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/model.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/model.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.0.0", - "default": "2.0.0", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -26975,19 +27162,6 @@ "title": "Relative position", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -27066,6 +27240,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -27151,6 +27326,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -27162,6 +27338,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -27212,6 +27389,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -27467,6 +27647,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -27500,6 +27683,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -27737,6 +27923,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -27822,6 +28009,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -27833,6 +28021,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -27883,6 +28072,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -28138,6 +28330,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -28171,6 +28366,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -28532,6 +28730,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -28617,6 +28816,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -28628,6 +28828,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -28678,6 +28879,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -28933,6 +29137,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -28966,6 +29173,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -29104,6 +29314,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -29189,6 +29400,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -29200,6 +29412,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -29250,6 +29463,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -29505,6 +29721,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -29538,6 +29757,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -29832,6 +30054,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -29917,6 +30140,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -29928,6 +30152,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -29978,6 +30203,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -30233,6 +30461,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -30266,6 +30497,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -30533,6 +30767,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -30618,6 +30853,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -30629,6 +30865,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -30679,6 +30916,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -30934,6 +31174,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -30967,6 +31210,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -31125,6 +31371,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -31210,6 +31457,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -31221,6 +31469,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -31271,6 +31520,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -31526,6 +31778,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -31559,6 +31814,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -31730,6 +31988,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -31815,6 +32074,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -31826,6 +32086,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -31876,6 +32137,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -32131,6 +32395,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -32164,6 +32431,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -32361,6 +32631,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -32446,6 +32717,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -32457,6 +32729,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -32507,6 +32780,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -32762,6 +33038,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -32795,6 +33074,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -33349,6 +33631,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -33434,6 +33717,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -33445,6 +33729,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -33495,6 +33780,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -33750,6 +34038,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -33783,6 +34074,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -34638,23 +34932,6 @@ "title": "Planar sections", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "$ref": "#/$defs/Atlas" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Only required if different from the Procedures.coordinate_system", - "title": "Sectioning coordinate system" - }, "global_coordinate_system": { "anyOf": [ { @@ -34764,6 +35041,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -34849,6 +35127,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -34860,6 +35139,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -34910,6 +35190,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -35165,6 +35448,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -35198,6 +35484,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -35422,6 +35711,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -35507,6 +35797,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -35518,6 +35809,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -35568,6 +35860,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -35823,6 +36118,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -35856,6 +36154,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -36189,20 +36490,6 @@ "default": null, "title": "Target coordinate in Acquisition.atlas" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Device coordinate system, defines un-rotated probe's orientation relative to the Acquisition.coordinate_system", - "title": "Device coordinate system" - }, "local_coordinate_system": { "$ref": "#/$defs/CoordinateSystem", "description": "Device coordinate system, defines un-rotated probe's orientation relative to the Acquisition.global_coordinate_system", @@ -36390,6 +36677,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -36475,6 +36763,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -36486,6 +36775,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -36536,6 +36826,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -36791,6 +37084,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -36824,6 +37120,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -36955,14 +37254,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/procedures.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/procedures.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/procedures.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/procedures.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.2.2", - "default": "2.2.2", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -37019,20 +37318,6 @@ "title": "Specimen Procedures", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Origin and axis definitions for determining the configured position of devices implanted during procedures. Required when coordinates are provided within the Procedures", - "title": "Coordinate System" - }, "global_coordinate_system": { "anyOf": [ { @@ -37139,14 +37424,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/processing.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/processing.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/processing.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/processing.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.3.1", - "default": "2.3.1", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -37569,14 +37854,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/quality_control.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/quality_control.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/quality_control.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/quality_control.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.4.2", - "default": "2.4.2", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -37704,6 +37989,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -37789,6 +38075,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -37800,6 +38087,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -37850,6 +38138,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -38105,6 +38396,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -38138,6 +38432,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -38747,6 +39044,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -38832,6 +39130,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -38843,6 +39142,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -38893,6 +39193,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -39148,6 +39451,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -39181,6 +39487,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -39340,6 +39649,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -39425,6 +39735,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -39436,6 +39747,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -39486,6 +39798,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -39741,6 +40056,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -39774,6 +40092,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -39961,88 +40282,6 @@ "default": null, "description": "Whether the section includes additional tissue surrounding the targeted structure.", "title": "Includes surrounding tissue" - }, - "coordinate_system_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Coordinate system name" - }, - "start_coordinate": { - "anyOf": [ - { - "$ref": "#/$defs/Translation" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Start coordinate" - }, - "end_coordinate": { - "anyOf": [ - { - "$ref": "#/$defs/Translation" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "End coordinate" - }, - "thickness": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Slice thickness" - }, - "thickness_unit": { - "anyOf": [ - { - "$ref": "#/$defs/SizeUnit" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Slice thickness unit" - }, - "partial_slice": { - "anyOf": [ - { - "items": { - "$ref": "#/$defs/AnatomicalRelative" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "If sectioning does not include the entire slice, indicate which part of the slice is retained.", - "title": "Partial slice" } }, "required": [ @@ -40354,19 +40593,6 @@ "title": "Relative position", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -40445,6 +40671,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -40530,6 +40757,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -40541,6 +40769,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -40591,6 +40820,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -40846,6 +41078,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -40879,6 +41114,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -41476,14 +41714,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/subject.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/subject.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/subject.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/subject.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.3.2", - "default": "2.3.2", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -41657,20 +41895,6 @@ "default": null, "title": "Workstation ID" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Only required when the Surgery.coordinate_system is different from the Procedures.coordinate_system", - "title": "Surgery coordinate system" - }, "global_coordinate_system": { "anyOf": [ { @@ -42045,6 +42269,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -42130,6 +42355,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -42141,6 +42367,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -42191,6 +42418,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -42446,6 +42676,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -42479,6 +42712,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -42679,6 +42915,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -42764,6 +43001,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -42775,6 +43013,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -42825,6 +43064,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -43080,6 +43322,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -43113,6 +43358,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -43625,6 +43873,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -43710,6 +43959,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -43721,6 +43971,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -43771,6 +44022,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -44026,6 +44280,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -44059,6 +44316,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -44614,6 +44874,48 @@ "title": "_Analoginput", "type": "object" }, + "_Antibodies_Inc": { + "description": "Model Antibodies Inc", + "properties": { + "name": { + "const": "Antibodies Inc", + "default": "Antibodies Inc", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": null, + "default": null, + "title": "Abbreviation", + "type": "null" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": null + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Registry Identifier" + } + }, + "title": "_Antibodies_Inc", + "type": "object" + }, "_Applied_Scientific_Instrumentation": { "description": "Model Applied Scientific Instrumentation", "properties": { @@ -49488,6 +49790,48 @@ "title": "_Rgbarray", "type": "object" }, + "_Rockland_Immunochemicals": { + "description": "Model Rockland Immunochemicals", + "properties": { + "name": { + "const": "Rockland Immunochemicals", + "default": "Rockland Immunochemicals", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": "ROCKLAND", + "default": "ROCKLAND", + "title": "Abbreviation", + "type": "string" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": "Research Organization Registry (ROR)" + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "02z2r2t61", + "title": "Registry Identifier" + } + }, + "title": "_Rockland_Immunochemicals", + "type": "object" + }, "_Same_Sky": { "description": "Model Same Sky", "properties": { @@ -50106,6 +50450,48 @@ "title": "_Stpt", "type": "object" }, + "_Synaptic_Systems": { + "description": "Model Synaptic Systems", + "properties": { + "name": { + "const": "Synaptic Systems", + "default": "Synaptic Systems", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": null, + "default": null, + "title": "Abbreviation", + "type": "null" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": null + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Registry Identifier" + } + }, + "title": "_Synaptic_Systems", + "type": "object" + }, "_Synchronizer": { "description": "Model Synchronizer", "properties": { @@ -51191,14 +51577,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/metadata.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/metadata.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/metadata.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/metadata.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.7.4", - "default": "2.7.4", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, diff --git a/schemas/model_schema.json b/schemas/model_schema.json index aa9e69aa8..893f35f08 100644 --- a/schemas/model_schema.json +++ b/schemas/model_schema.json @@ -1011,14 +1011,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/model.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/model.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/model.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/model.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.0.0", - "default": "2.0.0", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, diff --git a/schemas/procedures_schema.json b/schemas/procedures_schema.json index 1dba6ef53..d460536f1 100644 --- a/schemas/procedures_schema.json +++ b/schemas/procedures_schema.json @@ -468,6 +468,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -553,6 +554,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -564,6 +566,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -614,6 +617,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -869,6 +875,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -902,6 +911,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -1086,6 +1098,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -1171,6 +1184,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -1182,6 +1196,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -1232,6 +1247,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -1487,6 +1505,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -1520,6 +1541,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -2185,6 +2209,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -2270,6 +2295,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -2281,6 +2307,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -2331,6 +2358,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -2586,6 +2616,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -2619,6 +2652,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -2745,19 +2781,6 @@ "title": "Relative position", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Device coordinate system" - }, "local_coordinate_system": { "anyOf": [ { @@ -2893,6 +2916,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -2978,6 +3002,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -2989,6 +3014,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -3039,6 +3065,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -3294,6 +3323,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -3327,6 +3359,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -3502,6 +3537,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -3587,6 +3623,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -3598,6 +3635,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -3648,6 +3686,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -3903,6 +3944,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -3936,6 +3980,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -4145,6 +4192,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -4230,6 +4278,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -4241,6 +4290,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -4291,6 +4341,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -4546,6 +4599,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -4579,6 +4635,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -4730,6 +4789,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -4815,6 +4875,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -4826,6 +4887,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -4876,6 +4938,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -5131,6 +5196,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -5164,6 +5232,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -5419,6 +5490,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -5504,6 +5576,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -5515,6 +5588,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -5565,6 +5639,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -5820,6 +5897,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -5853,6 +5933,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -6645,6 +6728,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -6730,6 +6814,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -6741,6 +6826,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -6791,6 +6877,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -7046,6 +7135,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -7079,6 +7171,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -7405,6 +7500,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -7490,6 +7586,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -7501,6 +7598,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -7551,6 +7649,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -7806,6 +7907,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -7839,6 +7943,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -8247,23 +8354,6 @@ "title": "Planar sections", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "$ref": "#/$defs/Atlas" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Only required if different from the Procedures.coordinate_system", - "title": "Sectioning coordinate system" - }, "global_coordinate_system": { "anyOf": [ { @@ -8338,20 +8428,6 @@ "default": null, "title": "Target coordinate in Acquisition.atlas" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Device coordinate system, defines un-rotated probe's orientation relative to the Acquisition.coordinate_system", - "title": "Device coordinate system" - }, "local_coordinate_system": { "$ref": "#/$defs/CoordinateSystem", "description": "Device coordinate system, defines un-rotated probe's orientation relative to the Acquisition.global_coordinate_system", @@ -8510,6 +8586,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -8595,6 +8672,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -8606,6 +8684,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -8656,6 +8735,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -8911,6 +8993,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -8944,6 +9029,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -9211,6 +9299,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -9296,6 +9385,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -9307,6 +9397,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -9357,6 +9448,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -9612,6 +9706,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -9645,6 +9742,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -9970,88 +10070,6 @@ "default": null, "description": "Whether the section includes additional tissue surrounding the targeted structure.", "title": "Includes surrounding tissue" - }, - "coordinate_system_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Coordinate system name" - }, - "start_coordinate": { - "anyOf": [ - { - "$ref": "#/$defs/Translation" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Start coordinate" - }, - "end_coordinate": { - "anyOf": [ - { - "$ref": "#/$defs/Translation" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "End coordinate" - }, - "thickness": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Slice thickness" - }, - "thickness_unit": { - "anyOf": [ - { - "$ref": "#/$defs/SizeUnit" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Slice thickness unit" - }, - "partial_slice": { - "anyOf": [ - { - "items": { - "$ref": "#/$defs/AnatomicalRelative" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "If sectioning does not include the entire slice, indicate which part of the slice is retained.", - "title": "Partial slice" } }, "required": [ @@ -10517,20 +10535,6 @@ "default": null, "title": "Workstation ID" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Only required when the Surgery.coordinate_system is different from the Procedures.coordinate_system", - "title": "Surgery coordinate system" - }, "global_coordinate_system": { "anyOf": [ { @@ -11400,6 +11404,48 @@ "title": "_Ams_Osram", "type": "object" }, + "_Antibodies_Inc": { + "description": "Model Antibodies Inc", + "properties": { + "name": { + "const": "Antibodies Inc", + "default": "Antibodies Inc", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": null, + "default": null, + "title": "Abbreviation", + "type": "null" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": null + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Registry Identifier" + } + }, + "title": "_Antibodies_Inc", + "type": "object" + }, "_Applied_Scientific_Instrumentation": { "description": "Model Applied Scientific Instrumentation", "properties": { @@ -15338,6 +15384,48 @@ "title": "_Rattus_Norvegicus", "type": "object" }, + "_Rockland_Immunochemicals": { + "description": "Model Rockland Immunochemicals", + "properties": { + "name": { + "const": "Rockland Immunochemicals", + "default": "Rockland Immunochemicals", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": "ROCKLAND", + "default": "ROCKLAND", + "title": "Abbreviation", + "type": "string" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": "Research Organization Registry (ROR)" + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "02z2r2t61", + "title": "Registry Identifier" + } + }, + "title": "_Rockland_Immunochemicals", + "type": "object" + }, "_Same_Sky": { "description": "Model Same Sky", "properties": { @@ -15800,6 +15888,48 @@ "title": "_Stanford_University", "type": "object" }, + "_Synaptic_Systems": { + "description": "Model Synaptic Systems", + "properties": { + "name": { + "const": "Synaptic Systems", + "default": "Synaptic Systems", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": null, + "default": null, + "title": "Abbreviation", + "type": "null" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": null + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Registry Identifier" + } + }, + "title": "_Synaptic_Systems", + "type": "object" + }, "_Tamron": { "description": "Model Tamron", "properties": { @@ -16596,14 +16726,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/procedures.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/procedures.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/procedures.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/procedures.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.2.2", - "default": "2.2.2", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -16660,20 +16790,6 @@ "title": "Specimen Procedures", "type": "array" }, - "coordinate_system": { - "anyOf": [ - { - "$ref": "#/$defs/CoordinateSystem" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "description": "Origin and axis definitions for determining the configured position of devices implanted during procedures. Required when coordinates are provided within the Procedures", - "title": "Coordinate System" - }, "global_coordinate_system": { "anyOf": [ { diff --git a/schemas/processing_schema.json b/schemas/processing_schema.json index 57cba6ad5..9952a2b24 100644 --- a/schemas/processing_schema.json +++ b/schemas/processing_schema.json @@ -772,14 +772,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/processing.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/processing.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/processing.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/processing.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.3.1", - "default": "2.3.1", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, diff --git a/schemas/quality_control_schema.json b/schemas/quality_control_schema.json index 4475e85c2..33067abde 100644 --- a/schemas/quality_control_schema.json +++ b/schemas/quality_control_schema.json @@ -893,14 +893,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/quality_control.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/quality_control.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/quality_control.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/quality_control.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.4.2", - "default": "2.4.2", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, diff --git a/schemas/subject_schema.json b/schemas/subject_schema.json index 5794bc90b..2d6fb7de2 100644 --- a/schemas/subject_schema.json +++ b/schemas/subject_schema.json @@ -10,19 +10,6 @@ "title": "Object Type", "type": "string" }, - "breeding_group": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "deprecated": true, - "title": "Breeding Group" - }, "maternal_id": { "title": "Maternal specimen ID", "type": "string" @@ -132,6 +119,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -217,6 +205,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -228,6 +217,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -278,6 +268,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -533,6 +526,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -566,6 +562,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -794,6 +793,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -879,6 +879,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -890,6 +891,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -940,6 +942,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -1195,6 +1200,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -1228,6 +1236,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -1494,6 +1505,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -1579,6 +1591,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -1590,6 +1603,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -1640,6 +1654,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -1895,6 +1912,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -1928,6 +1948,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -2131,6 +2154,7 @@ "Allen Institute for Brain Science": "#/$defs/_Allen_Institute_For_Brain_Science", "Allen Institute for Neural Dynamics": "#/$defs/_Allen_Institute_For_Neural_Dynamics", "Allied": "#/$defs/_Allied", + "Antibodies Inc": "#/$defs/_Antibodies_Inc", "Applied Scientific Instrumentation": "#/$defs/_Applied_Scientific_Instrumentation", "Arduino": "#/$defs/_Arduino", "Arecont Vision Costar": "#/$defs/_Arecont_Vision_Costar", @@ -2216,6 +2240,7 @@ "Prizmatix": "#/$defs/_Prizmatix", "Quantifi": "#/$defs/_Quantifi", "Raspberry Pi": "#/$defs/_Raspberry_Pi", + "Rockland Immunochemicals": "#/$defs/_Rockland_Immunochemicals", "SICGEN": "#/$defs/_Sicgen", "Same Sky": "#/$defs/_Same_Sky", "Schneider-Kreuznach": "#/$defs/_Schneider_Kreuznach", @@ -2227,6 +2252,7 @@ "Spectra-Physics": "#/$defs/_Spectra_Physics", "Spinnaker": "#/$defs/_Spinnaker", "Stanford University": "#/$defs/_Stanford_University", + "Synaptic Systems": "#/$defs/_Synaptic_Systems", "TE Connectivity": "#/$defs/_Te_Connectivity", "Tamron": "#/$defs/_Tamron", "Technical Manufacturing Corporation": "#/$defs/_Technical_Manufacturing_Corporation", @@ -2277,6 +2303,9 @@ { "$ref": "#/$defs/_Allied" }, + { + "$ref": "#/$defs/_Antibodies_Inc" + }, { "$ref": "#/$defs/_Applied_Scientific_Instrumentation" }, @@ -2532,6 +2561,9 @@ { "$ref": "#/$defs/_Raspberry_Pi" }, + { + "$ref": "#/$defs/_Rockland_Immunochemicals" + }, { "$ref": "#/$defs/_Sicgen" }, @@ -2565,6 +2597,9 @@ { "$ref": "#/$defs/_Stanford_University" }, + { + "$ref": "#/$defs/_Synaptic_Systems" + }, { "$ref": "#/$defs/_Te_Connectivity" }, @@ -3153,6 +3188,48 @@ "title": "_Ams_Osram", "type": "object" }, + "_Antibodies_Inc": { + "description": "Model Antibodies Inc", + "properties": { + "name": { + "const": "Antibodies Inc", + "default": "Antibodies Inc", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": null, + "default": null, + "title": "Abbreviation", + "type": "null" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": null + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Registry Identifier" + } + }, + "title": "_Antibodies_Inc", + "type": "object" + }, "_Applied_Scientific_Instrumentation": { "description": "Model Applied Scientific Instrumentation", "properties": { @@ -7175,6 +7252,48 @@ "title": "_Rattus_Norvegicus", "type": "object" }, + "_Rockland_Immunochemicals": { + "description": "Model Rockland Immunochemicals", + "properties": { + "name": { + "const": "Rockland Immunochemicals", + "default": "Rockland Immunochemicals", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": "ROCKLAND", + "default": "ROCKLAND", + "title": "Abbreviation", + "type": "string" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": "Research Organization Registry (ROR)" + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "02z2r2t61", + "title": "Registry Identifier" + } + }, + "title": "_Rockland_Immunochemicals", + "type": "object" + }, "_Same_Sky": { "description": "Model Same Sky", "properties": { @@ -7637,6 +7756,48 @@ "title": "_Stanford_University", "type": "object" }, + "_Synaptic_Systems": { + "description": "Model Synaptic Systems", + "properties": { + "name": { + "const": "Synaptic Systems", + "default": "Synaptic Systems", + "title": "Name", + "type": "string" + }, + "abbreviation": { + "const": null, + "default": null, + "title": "Abbreviation", + "type": "null" + }, + "registry": { + "anyOf": [ + { + "$ref": "#/$defs/Registry" + }, + { + "type": "null" + } + ], + "default": null + }, + "registry_identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Registry Identifier" + } + }, + "title": "_Synaptic_Systems", + "type": "object" + }, "_Tamron": { "description": "Model Tamron", "properties": { @@ -8475,14 +8636,14 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/subject.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/aind-data-schema/main/src/aind_data_schema/core/subject.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/subject.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/subject.py", "title": "Describedby", "type": "string" }, "schema_version": { - "const": "2.3.2", - "default": "2.3.2", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, diff --git a/src/aind_data_schema/core/acquisition.py b/src/aind_data_schema/core/acquisition.py index c8c8cd147..6926d61f1 100644 --- a/src/aind_data_schema/core/acquisition.py +++ b/src/aind_data_schema/core/acquisition.py @@ -368,7 +368,7 @@ class Acquisition(ProtocolListMixin, DataCoreModel): # Meta metadata _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/acquisition.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["2.5.3"]] = Field(default="2.5.3") + schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") # ID subject_id: str = Field(default=..., title="Subject ID", description="Unique identifier for the subject") diff --git a/src/aind_data_schema/core/data_description.py b/src/aind_data_schema/core/data_description.py index bd80bbea9..7521d0b89 100644 --- a/src/aind_data_schema/core/data_description.py +++ b/src/aind_data_schema/core/data_description.py @@ -34,7 +34,7 @@ class DataDescription(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/data_description.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["2.4.1"]] = Field(default="2.4.1") + schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") license: License = Field(default=License.CC_BY_40, title="License") subject_id: Optional[str] = Field( diff --git a/src/aind_data_schema/core/instrument.py b/src/aind_data_schema/core/instrument.py index 13eac40c2..429bdc4d2 100644 --- a/src/aind_data_schema/core/instrument.py +++ b/src/aind_data_schema/core/instrument.py @@ -78,7 +78,7 @@ class Instrument(DataCoreModel): # metametadata _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/instrument.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["2.2.7"]] = Field(default="2.2.7") + schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") # instrument definition location: Optional[str] = Field(default=None, title="Location", description="Location of the instrument") diff --git a/src/aind_data_schema/core/metadata.py b/src/aind_data_schema/core/metadata.py index 0d221ae55..2a0a087e8 100644 --- a/src/aind_data_schema/core/metadata.py +++ b/src/aind_data_schema/core/metadata.py @@ -74,7 +74,7 @@ class Metadata(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/metadata.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["2.7.4"]] = Field(default="2.7.4") + schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") name: str = Field( ..., description="Name of the data asset.", diff --git a/src/aind_data_schema/core/model.py b/src/aind_data_schema/core/model.py index 0178ad2b5..73a9e040a 100644 --- a/src/aind_data_schema/core/model.py +++ b/src/aind_data_schema/core/model.py @@ -50,7 +50,7 @@ class Model(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/model.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: Literal["2.0.0"] = Field(default="2.0.0") + schema_version: Literal["3.0.0"] = Field(default="3.0.0") name: str = Field(..., title="Name") version: str = Field(..., title="Version") diff --git a/src/aind_data_schema/core/procedures.py b/src/aind_data_schema/core/procedures.py index bf5865f08..af493b28d 100644 --- a/src/aind_data_schema/core/procedures.py +++ b/src/aind_data_schema/core/procedures.py @@ -25,7 +25,7 @@ class Procedures(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/procedures.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["2.2.2"]] = Field(default="2.2.2") + schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") subject_id: str = Field( ..., description="Unique identifier for the subject of data acquisition", diff --git a/src/aind_data_schema/core/processing.py b/src/aind_data_schema/core/processing.py index c77d2a110..087e0230a 100644 --- a/src/aind_data_schema/core/processing.py +++ b/src/aind_data_schema/core/processing.py @@ -99,7 +99,7 @@ class Processing(DataCoreModel): _DESCRIBED_BY_URL: str = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/processing.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["2.3.1"]] = Field(default="2.3.1") + schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") data_processes: List[DataProcess] = Field(..., title="Data processing") pipelines: Optional[List[Code]] = Field( diff --git a/src/aind_data_schema/core/quality_control.py b/src/aind_data_schema/core/quality_control.py index cbe320da4..99f1bb308 100644 --- a/src/aind_data_schema/core/quality_control.py +++ b/src/aind_data_schema/core/quality_control.py @@ -105,7 +105,7 @@ class QualityControl(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/quality_control.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["2.4.2"]] = Field(default="2.4.2") + schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") metrics: DiscriminatedList[QCMetric | CurationMetric] = Field(..., title="Evaluations") key_experimenters: Optional[List[str]] = Field( default=None, diff --git a/src/aind_data_schema/core/subject.py b/src/aind_data_schema/core/subject.py index 85ca5cccc..ecc37e6fe 100644 --- a/src/aind_data_schema/core/subject.py +++ b/src/aind_data_schema/core/subject.py @@ -13,7 +13,7 @@ class Subject(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/subject.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["2.3.2"]] = Field(default="2.3.2") + schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") subject_id: str = Field( ..., description="Unique identifier for the subject of data acquisition", From 5d420d53842da803cf1a1c2cf6b8d59273409433 Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Tue, 25 Aug 2026 08:43:03 -0700 Subject: [PATCH 03/38] chore: bump uv version --- .github/workflows/publish_dev.yml | 2 +- .github/workflows/run_dev_tests.yml | 4 ++-- .github/workflows/run_main_tests.yml | 4 ++-- .github/workflows/tag_and_publish_main.yml | 4 ++-- .github/workflows/update_dev_docs.yml | 2 +- .github/workflows/update_docs.yml | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/publish_dev.yml b/.github/workflows/publish_dev.yml index 59486fb03..8118b4411 100644 --- a/.github/workflows/publish_dev.yml +++ b/.github/workflows/publish_dev.yml @@ -21,7 +21,7 @@ jobs: - name: Pull latest changes run: git pull origin dev - name: Install uv - uses: astral-sh/setup-uv@v9 + uses: astral-sh/setup-uv@v10.0.1 with: python-version: '3.10' - name: Configure aws credentials diff --git a/.github/workflows/run_dev_tests.yml b/.github/workflows/run_dev_tests.yml index 7b84f2ca8..63602dd88 100644 --- a/.github/workflows/run_dev_tests.yml +++ b/.github/workflows/run_dev_tests.yml @@ -17,7 +17,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Install uv - uses: astral-sh/setup-uv@v9 + uses: astral-sh/setup-uv@v10.0.1 with: python-version: ${{ matrix.python-version }} - name: Install dependencies @@ -32,7 +32,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Install uv - uses: astral-sh/setup-uv@v9 + uses: astral-sh/setup-uv@v10.0.1 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/.github/workflows/run_main_tests.yml b/.github/workflows/run_main_tests.yml index 6e118d000..3461d6487 100644 --- a/.github/workflows/run_main_tests.yml +++ b/.github/workflows/run_main_tests.yml @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Install uv - uses: astral-sh/setup-uv@v9 + uses: astral-sh/setup-uv@v10.0.1 with: python-version: ${{ matrix.python-version }} - name: Install dependencies @@ -34,7 +34,7 @@ jobs: steps: - uses: actions/checkout@v3 - name: Install uv - uses: astral-sh/setup-uv@v9 + uses: astral-sh/setup-uv@v10.0.1 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/.github/workflows/tag_and_publish_main.yml b/.github/workflows/tag_and_publish_main.yml index 0055f7e8c..51158a0f1 100644 --- a/.github/workflows/tag_and_publish_main.yml +++ b/.github/workflows/tag_and_publish_main.yml @@ -25,7 +25,7 @@ jobs: - name: Push git tag run: git push origin "v${{ env.tag }}" - name: Install uv - uses: astral-sh/setup-uv@v9 + uses: astral-sh/setup-uv@v10.0.1 with: python-version: '3.10' - name: Install dependencies @@ -54,7 +54,7 @@ jobs: - name: Pull latest changes run: git pull origin main - name: Install uv - uses: astral-sh/setup-uv@v9 + uses: astral-sh/setup-uv@v10.0.1 with: python-version: '3.10' - name: Configure aws credentials diff --git a/.github/workflows/update_dev_docs.yml b/.github/workflows/update_dev_docs.yml index be5cea378..b1572a36b 100644 --- a/.github/workflows/update_dev_docs.yml +++ b/.github/workflows/update_dev_docs.yml @@ -14,7 +14,7 @@ jobs: token: ${{ secrets.SERVICE_TOKEN }} ref: ${{ github.head_ref }} - name: Install uv - uses: astral-sh/setup-uv@v9 + uses: astral-sh/setup-uv@v10.0.1 with: python-version: '3.10' - name: Install dependencies diff --git a/.github/workflows/update_docs.yml b/.github/workflows/update_docs.yml index 7bf8316f7..4aeea547c 100644 --- a/.github/workflows/update_docs.yml +++ b/.github/workflows/update_docs.yml @@ -15,7 +15,7 @@ jobs: with: token: ${{ secrets.SERVICE_TOKEN }} - name: Install uv - uses: astral-sh/setup-uv@v9 + uses: astral-sh/setup-uv@v10.0.1 with: python-version: '3.10' - name: Install dependencies @@ -53,7 +53,7 @@ jobs: - name: Pull latest changes run: git pull origin ${{ github.ref_name }} - name: Install uv - uses: astral-sh/setup-uv@v9 + uses: astral-sh/setup-uv@v10.0.1 with: python-version: '3.10' - name: Install dependencies From 47b9a8ec1e65b0b34744ccccb57b4c627284d68b Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 15:43:55 +0000 Subject: [PATCH 04/38] bump schema version [skip actions] --- schemas/acquisition_schema.json | 7 ++++--- schemas/metadata_schema.json | 15 ++++++++------- schemas/processing_schema.json | 4 ++-- src/aind_data_schema/core/acquisition.py | 2 +- src/aind_data_schema/core/metadata.py | 2 +- src/aind_data_schema/core/processing.py | 2 +- 6 files changed, 17 insertions(+), 15 deletions(-) diff --git a/schemas/acquisition_schema.json b/schemas/acquisition_schema.json index 215055a75..efd26c55e 100644 --- a/schemas/acquisition_schema.json +++ b/schemas/acquisition_schema.json @@ -12559,8 +12559,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.0", - "default": "3.0.0", + "const": "3.0.1", + "default": "3.0.1", "title": "Schema Version", "type": "string" }, @@ -13214,7 +13214,8 @@ "Universal", "W-SU", "WET", - "Zulu" + "Zulu", + "localtime" ], "minLength": 1, "type": "string" diff --git a/schemas/metadata_schema.json b/schemas/metadata_schema.json index a3c106e3b..d8720e987 100644 --- a/schemas/metadata_schema.json +++ b/schemas/metadata_schema.json @@ -17,8 +17,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.0", - "default": "3.0.0", + "const": "3.0.1", + "default": "3.0.1", "title": "Schema Version", "type": "string" }, @@ -672,7 +672,8 @@ "Universal", "W-SU", "WET", - "Zulu" + "Zulu", + "localtime" ], "minLength": 1, "type": "string" @@ -37430,8 +37431,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.0", - "default": "3.0.0", + "const": "3.0.1", + "default": "3.0.1", "title": "Schema Version", "type": "string" }, @@ -51583,8 +51584,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.0", - "default": "3.0.0", + "const": "3.0.1", + "default": "3.0.1", "title": "Schema Version", "type": "string" }, diff --git a/schemas/processing_schema.json b/schemas/processing_schema.json index 9952a2b24..71a355e07 100644 --- a/schemas/processing_schema.json +++ b/schemas/processing_schema.json @@ -778,8 +778,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.0", - "default": "3.0.0", + "const": "3.0.1", + "default": "3.0.1", "title": "Schema Version", "type": "string" }, diff --git a/src/aind_data_schema/core/acquisition.py b/src/aind_data_schema/core/acquisition.py index 6926d61f1..31c652b55 100644 --- a/src/aind_data_schema/core/acquisition.py +++ b/src/aind_data_schema/core/acquisition.py @@ -368,7 +368,7 @@ class Acquisition(ProtocolListMixin, DataCoreModel): # Meta metadata _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/acquisition.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") + schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") # ID subject_id: str = Field(default=..., title="Subject ID", description="Unique identifier for the subject") diff --git a/src/aind_data_schema/core/metadata.py b/src/aind_data_schema/core/metadata.py index 2a0a087e8..eae717cf2 100644 --- a/src/aind_data_schema/core/metadata.py +++ b/src/aind_data_schema/core/metadata.py @@ -74,7 +74,7 @@ class Metadata(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/metadata.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") + schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") name: str = Field( ..., description="Name of the data asset.", diff --git a/src/aind_data_schema/core/processing.py b/src/aind_data_schema/core/processing.py index 087e0230a..a82c53257 100644 --- a/src/aind_data_schema/core/processing.py +++ b/src/aind_data_schema/core/processing.py @@ -99,7 +99,7 @@ class Processing(DataCoreModel): _DESCRIBED_BY_URL: str = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/processing.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") + schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") data_processes: List[DataProcess] = Field(..., title="Data processing") pipelines: Optional[List[Code]] = Field( From 9e591cd0b661f5132624e3460bc08cf2593bb448 Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Tue, 25 Aug 2026 08:44:42 -0700 Subject: [PATCH 05/38] chore: refactor --- V3-MIGRATION-GUIDE.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/V3-MIGRATION-GUIDE.md b/V3-MIGRATION-GUIDE.md index 0fed6fcc9..1a62dffb7 100644 --- a/V3-MIGRATION-GUIDE.md +++ b/V3-MIGRATION-GUIDE.md @@ -101,8 +101,12 @@ Section(output_specimen_id="123456_001", coordinate_system_name="BREGMA_ARI", th **After** ```python -PlanarSection(output_specimen_id="123456_001", coordinate_system_name="BREGMA_ARI", - start_coordinate=Translation(translation=[0.3, 0, 0]), thickness=0.1) +PlanarSection( + output_specimen_id="123456_001", + coordinate_system_name="BREGMA_ARI", + start_coordinate=Translation(translation=[0.3, 0, 0]), + thickness=0.1, +) ``` `PlanarSection` requires `coordinate_system_name` and `start_coordinate`. @@ -303,8 +307,8 @@ accepted, so they are the most likely source of new `ValidationError`s. least one of these fields would be required in a future release. It is required now. ```python -Code(url="https://github.com/AllenNeuralDynamics/example") # ValidationError -Code(url="https://github.com/AllenNeuralDynamics/example", version="0.0.1") # ok +Code(url="https://github.com/AllenNeuralDynamics/example") # ValidationError +Code(url="https://github.com/AllenNeuralDynamics/example", version="0.0.1") # ok ``` ### Bare `Injection` procedures are rejected @@ -313,7 +317,7 @@ Code(url="https://github.com/AllenNeuralDynamics/example", version="0.0.1") # ok a `Surgery` or `NonSurgicalInjection`: ```python -Procedures(subject_id="12345", subject_procedures=[Injection(...)]) # ValidationError +Procedures(subject_id="12345", subject_procedures=[Injection(...)]) # ValidationError Procedures(subject_id="12345", subject_procedures=[Surgery(procedures=[Injection(...)])]) # ok ``` @@ -369,7 +373,7 @@ value was given without one. It is removed. A separate validator already require whenever the value is set, and that requirement now takes effect: ```python -Monitor(..., contrast=50) # ValidationError +Monitor(..., contrast=50) # ValidationError Monitor(..., contrast=50, contrast_unit=UnitlessUnit.PERCENT) # ok ``` From d11e4c57df6689037f78bf4347db73e222daa8b3 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 15:49:35 +0000 Subject: [PATCH 06/38] bump schema version [skip actions] --- schemas/metadata_schema.json | 8 ++++---- schemas/processing_schema.json | 4 ++-- src/aind_data_schema/core/metadata.py | 2 +- src/aind_data_schema/core/processing.py | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/schemas/metadata_schema.json b/schemas/metadata_schema.json index d8720e987..eacccea36 100644 --- a/schemas/metadata_schema.json +++ b/schemas/metadata_schema.json @@ -37431,8 +37431,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.2", + "default": "3.0.2", "title": "Schema Version", "type": "string" }, @@ -51584,8 +51584,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.2", + "default": "3.0.2", "title": "Schema Version", "type": "string" }, diff --git a/schemas/processing_schema.json b/schemas/processing_schema.json index 71a355e07..e7179278a 100644 --- a/schemas/processing_schema.json +++ b/schemas/processing_schema.json @@ -778,8 +778,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.2", + "default": "3.0.2", "title": "Schema Version", "type": "string" }, diff --git a/src/aind_data_schema/core/metadata.py b/src/aind_data_schema/core/metadata.py index eae717cf2..0a9f14c88 100644 --- a/src/aind_data_schema/core/metadata.py +++ b/src/aind_data_schema/core/metadata.py @@ -74,7 +74,7 @@ class Metadata(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/metadata.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") + schema_version: SkipValidation[Literal["3.0.2"]] = Field(default="3.0.2") name: str = Field( ..., description="Name of the data asset.", diff --git a/src/aind_data_schema/core/processing.py b/src/aind_data_schema/core/processing.py index a82c53257..504c3cf02 100644 --- a/src/aind_data_schema/core/processing.py +++ b/src/aind_data_schema/core/processing.py @@ -99,7 +99,7 @@ class Processing(DataCoreModel): _DESCRIBED_BY_URL: str = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/processing.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") + schema_version: SkipValidation[Literal["3.0.2"]] = Field(default="3.0.2") data_processes: List[DataProcess] = Field(..., title="Data processing") pipelines: Optional[List[Code]] = Field( From b00566488fa5a259d39695138d87f6cd7a5229ef Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Tue, 25 Aug 2026 08:50:34 -0700 Subject: [PATCH 07/38] fix: repair schema bump --- schemas/acquisition_schema.json | 7 ++--- schemas/metadata_schema.json | 30 +++++++------------ schemas/model_schema.json | 10 ++----- schemas/processing_schema.json | 9 ++---- src/aind_data_schema/core/acquisition.py | 2 +- src/aind_data_schema/core/metadata.py | 2 +- src/aind_data_schema/core/processing.py | 4 +-- .../utils/schema_version_bump.py | 2 +- 8 files changed, 23 insertions(+), 43 deletions(-) diff --git a/schemas/acquisition_schema.json b/schemas/acquisition_schema.json index efd26c55e..215055a75 100644 --- a/schemas/acquisition_schema.json +++ b/schemas/acquisition_schema.json @@ -12559,8 +12559,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -13214,8 +13214,7 @@ "Universal", "W-SU", "WET", - "Zulu", - "localtime" + "Zulu" ], "minLength": 1, "type": "string" diff --git a/schemas/metadata_schema.json b/schemas/metadata_schema.json index d8720e987..53339ccf6 100644 --- a/schemas/metadata_schema.json +++ b/schemas/metadata_schema.json @@ -17,8 +17,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -672,8 +672,7 @@ "Universal", "W-SU", "WET", - "Zulu", - "localtime" + "Zulu" ], "minLength": 1, "type": "string" @@ -9108,10 +9107,7 @@ }, "name": { "default": "", - "description": [ - "Unique name of the processing step.", - " If not provided, the type will be used as the name." - ], + "description": "Unique name of the processing step. If not provided, the type will be used as the name.", "title": "Name", "type": "string" }, @@ -26830,10 +26826,7 @@ }, "name": { "default": "", - "description": [ - "Unique name of the processing step.", - " If not provided, the type will be used as the name." - ], + "description": "Unique name of the processing step. If not provided, the type will be used as the name.", "title": "Name", "type": "string" }, @@ -26992,10 +26985,7 @@ }, "name": { "default": "", - "description": [ - "Unique name of the processing step.", - " If not provided, the type will be used as the name." - ], + "description": "Unique name of the processing step. If not provided, the type will be used as the name.", "title": "Name", "type": "string" }, @@ -37431,8 +37421,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -51584,8 +51574,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, diff --git a/schemas/model_schema.json b/schemas/model_schema.json index 893f35f08..de2070140 100644 --- a/schemas/model_schema.json +++ b/schemas/model_schema.json @@ -367,10 +367,7 @@ }, "name": { "default": "", - "description": [ - "Unique name of the processing step.", - " If not provided, the type will be used as the name." - ], + "description": "Unique name of the processing step. If not provided, the type will be used as the name.", "title": "Name", "type": "string" }, @@ -529,10 +526,7 @@ }, "name": { "default": "", - "description": [ - "Unique name of the processing step.", - " If not provided, the type will be used as the name." - ], + "description": "Unique name of the processing step. If not provided, the type will be used as the name.", "title": "Name", "type": "string" }, diff --git a/schemas/processing_schema.json b/schemas/processing_schema.json index 71a355e07..938288ea0 100644 --- a/schemas/processing_schema.json +++ b/schemas/processing_schema.json @@ -329,10 +329,7 @@ }, "name": { "default": "", - "description": [ - "Unique name of the processing step.", - " If not provided, the type will be used as the name." - ], + "description": "Unique name of the processing step. If not provided, the type will be used as the name.", "title": "Name", "type": "string" }, @@ -778,8 +775,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, diff --git a/src/aind_data_schema/core/acquisition.py b/src/aind_data_schema/core/acquisition.py index 31c652b55..6926d61f1 100644 --- a/src/aind_data_schema/core/acquisition.py +++ b/src/aind_data_schema/core/acquisition.py @@ -368,7 +368,7 @@ class Acquisition(ProtocolListMixin, DataCoreModel): # Meta metadata _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/acquisition.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") + schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") # ID subject_id: str = Field(default=..., title="Subject ID", description="Unique identifier for the subject") diff --git a/src/aind_data_schema/core/metadata.py b/src/aind_data_schema/core/metadata.py index eae717cf2..2a0a087e8 100644 --- a/src/aind_data_schema/core/metadata.py +++ b/src/aind_data_schema/core/metadata.py @@ -74,7 +74,7 @@ class Metadata(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/metadata.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") + schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") name: str = Field( ..., description="Name of the data asset.", diff --git a/src/aind_data_schema/core/processing.py b/src/aind_data_schema/core/processing.py index a82c53257..49fcffc3c 100644 --- a/src/aind_data_schema/core/processing.py +++ b/src/aind_data_schema/core/processing.py @@ -56,7 +56,7 @@ class DataProcess(DataModel): name: str = Field( default="", title="Name", - description=("Unique name of the processing step.", " If not provided, the type will be used as the name."), + description=("Unique name of the processing step." " If not provided, the type will be used as the name."), ) stage: ProcessStage = Field(..., title="Processing stage") code: Code = Field(..., title="Code", description="Code used for processing") @@ -99,7 +99,7 @@ class Processing(DataCoreModel): _DESCRIBED_BY_URL: str = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/processing.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") + schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") data_processes: List[DataProcess] = Field(..., title="Data processing") pipelines: Optional[List[Code]] = Field( diff --git a/src/aind_data_schema/utils/schema_version_bump.py b/src/aind_data_schema/utils/schema_version_bump.py index bfc0e5e59..dff713564 100644 --- a/src/aind_data_schema/utils/schema_version_bump.py +++ b/src/aind_data_schema/utils/schema_version_bump.py @@ -69,7 +69,7 @@ def _get_list_of_models_that_changed(self) -> List[DataCoreModel]: """ schemas_that_need_updating = [] for core_model in SchemaWriter.get_schemas(): - core_model_json = core_model.model_json_schema() + core_model_json = json.loads(json.dumps(core_model.model_json_schema())) original_schema = self._get_schema_json(core_model) diff_list = list(dictdiffer.diff(original_schema, core_model_json)) From 657f88fa3bd8365179a2ec13d6cb7f1b0a6ab692 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 15:52:08 +0000 Subject: [PATCH 08/38] bump schema version [skip actions] --- schemas/acquisition_schema.json | 7 ++++--- schemas/metadata_schema.json | 23 +++++++---------------- src/aind_data_schema/core/acquisition.py | 2 +- src/aind_data_schema/core/metadata.py | 2 +- 4 files changed, 13 insertions(+), 21 deletions(-) diff --git a/schemas/acquisition_schema.json b/schemas/acquisition_schema.json index 215055a75..efd26c55e 100644 --- a/schemas/acquisition_schema.json +++ b/schemas/acquisition_schema.json @@ -12559,8 +12559,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.0", - "default": "3.0.0", + "const": "3.0.1", + "default": "3.0.1", "title": "Schema Version", "type": "string" }, @@ -13214,7 +13214,8 @@ "Universal", "W-SU", "WET", - "Zulu" + "Zulu", + "localtime" ], "minLength": 1, "type": "string" diff --git a/schemas/metadata_schema.json b/schemas/metadata_schema.json index eacccea36..a8041c405 100644 --- a/schemas/metadata_schema.json +++ b/schemas/metadata_schema.json @@ -9108,10 +9108,7 @@ }, "name": { "default": "", - "description": [ - "Unique name of the processing step.", - " If not provided, the type will be used as the name." - ], + "description": "Unique name of the processing step. If not provided, the type will be used as the name.", "title": "Name", "type": "string" }, @@ -26830,10 +26827,7 @@ }, "name": { "default": "", - "description": [ - "Unique name of the processing step.", - " If not provided, the type will be used as the name." - ], + "description": "Unique name of the processing step. If not provided, the type will be used as the name.", "title": "Name", "type": "string" }, @@ -26992,10 +26986,7 @@ }, "name": { "default": "", - "description": [ - "Unique name of the processing step.", - " If not provided, the type will be used as the name." - ], + "description": "Unique name of the processing step. If not provided, the type will be used as the name.", "title": "Name", "type": "string" }, @@ -37431,8 +37422,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.2", - "default": "3.0.2", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -51584,8 +51575,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.2", - "default": "3.0.2", + "const": "3.0.1", + "default": "3.0.1", "title": "Schema Version", "type": "string" }, diff --git a/src/aind_data_schema/core/acquisition.py b/src/aind_data_schema/core/acquisition.py index 6926d61f1..31c652b55 100644 --- a/src/aind_data_schema/core/acquisition.py +++ b/src/aind_data_schema/core/acquisition.py @@ -368,7 +368,7 @@ class Acquisition(ProtocolListMixin, DataCoreModel): # Meta metadata _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/acquisition.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") + schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") # ID subject_id: str = Field(default=..., title="Subject ID", description="Unique identifier for the subject") diff --git a/src/aind_data_schema/core/metadata.py b/src/aind_data_schema/core/metadata.py index 2a0a087e8..eae717cf2 100644 --- a/src/aind_data_schema/core/metadata.py +++ b/src/aind_data_schema/core/metadata.py @@ -74,7 +74,7 @@ class Metadata(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/metadata.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") + schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") name: str = Field( ..., description="Name of the data asset.", From 0f3d58f9953b5ddc4dc9337b3d8115a2ad32a85d Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Tue, 25 Aug 2026 10:11:30 -0700 Subject: [PATCH 09/38] fix: remove "localtime" as a timezone option from ubuntu --- schemas/acquisition_schema.json | 7 +++---- schemas/metadata_schema.json | 11 +++++------ src/aind_data_schema/base.py | 21 +++++++++++++++++++++ src/aind_data_schema/core/acquisition.py | 2 +- src/aind_data_schema/core/metadata.py | 2 +- src/aind_data_schema/core/processing.py | 2 +- 6 files changed, 32 insertions(+), 13 deletions(-) diff --git a/schemas/acquisition_schema.json b/schemas/acquisition_schema.json index efd26c55e..215055a75 100644 --- a/schemas/acquisition_schema.json +++ b/schemas/acquisition_schema.json @@ -12559,8 +12559,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -13214,8 +13214,7 @@ "Universal", "W-SU", "WET", - "Zulu", - "localtime" + "Zulu" ], "minLength": 1, "type": "string" diff --git a/schemas/metadata_schema.json b/schemas/metadata_schema.json index a8041c405..53339ccf6 100644 --- a/schemas/metadata_schema.json +++ b/schemas/metadata_schema.json @@ -17,8 +17,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, @@ -672,8 +672,7 @@ "Universal", "W-SU", "WET", - "Zulu", - "localtime" + "Zulu" ], "minLength": 1, "type": "string" @@ -51575,8 +51574,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.0", + "default": "3.0.0", "title": "Schema Version", "type": "string" }, diff --git a/src/aind_data_schema/base.py b/src/aind_data_schema/base.py index 278955b96..0999c14ea 100644 --- a/src/aind_data_schema/base.py +++ b/src/aind_data_schema/base.py @@ -1,5 +1,6 @@ """generic base class with supporting validators and fields for basic AIND schema""" +import importlib.resources import json import logging import re @@ -22,6 +23,7 @@ model_validator, ) from pydantic.functional_validators import WrapValidator +from pydantic_extra_types.timezone_name import TimeZoneName from aind_data_schema.utils.validators import recursive_check_paths, recursive_coord_system_check @@ -30,6 +32,25 @@ MAX_FILE_SIZE = 500 * 1024 # 500KB +def _restrict_timezone_names_to_tzdata() -> None: + """Pin TimeZoneName to the zones shipped by tzdata + + TimeZoneName builds its allowed values from zoneinfo.available_timezones(), which reads + the host's timezone database. That varies by platform: Debian and Ubuntu expose a + "localtime" key that macOS does not, so the same file validates differently and the + generated JSON schema differs by machine. tzdata is a pinned dependency and ships a + canonical zone list, so use that instead. + """ + zone_list = importlib.resources.files("tzdata").joinpath("zones").read_text() + zones = {line.strip() for line in zone_list.splitlines() if line.strip()} + TimeZoneName.allowed_values = zones + TimeZoneName.allowed_values_list = sorted(zones) + TimeZoneName.allowed_values_upper_to_correct = {zone.upper(): zone for zone in zones} + + +_restrict_timezone_names_to_tzdata() + + def _coerce_naive_datetime(v: Any, handler: ValidatorFunctionWrapHandler) -> AwareDatetime: """Validator to wrap around AwareDatetime to set a default timezone as user's locale""" try: diff --git a/src/aind_data_schema/core/acquisition.py b/src/aind_data_schema/core/acquisition.py index 31c652b55..6926d61f1 100644 --- a/src/aind_data_schema/core/acquisition.py +++ b/src/aind_data_schema/core/acquisition.py @@ -368,7 +368,7 @@ class Acquisition(ProtocolListMixin, DataCoreModel): # Meta metadata _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/acquisition.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") + schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") # ID subject_id: str = Field(default=..., title="Subject ID", description="Unique identifier for the subject") diff --git a/src/aind_data_schema/core/metadata.py b/src/aind_data_schema/core/metadata.py index eae717cf2..2a0a087e8 100644 --- a/src/aind_data_schema/core/metadata.py +++ b/src/aind_data_schema/core/metadata.py @@ -74,7 +74,7 @@ class Metadata(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/metadata.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") + schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") name: str = Field( ..., description="Name of the data asset.", diff --git a/src/aind_data_schema/core/processing.py b/src/aind_data_schema/core/processing.py index 49fcffc3c..461b50913 100644 --- a/src/aind_data_schema/core/processing.py +++ b/src/aind_data_schema/core/processing.py @@ -56,7 +56,7 @@ class DataProcess(DataModel): name: str = Field( default="", title="Name", - description=("Unique name of the processing step." " If not provided, the type will be used as the name."), + description=("Unique name of the processing step. If not provided, the type will be used as the name."), ) stage: ProcessStage = Field(..., title="Processing stage") code: Code = Field(..., title="Code", description="Code used for processing") From 61c41762a34c483ef3c5d305958474a3022f461e Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Tue, 25 Aug 2026 10:33:10 -0700 Subject: [PATCH 10/38] fix: revert change and use schema extra to drop non-iana --- src/aind_data_schema/base.py | 21 --------------------- src/aind_data_schema/core/acquisition.py | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/aind_data_schema/base.py b/src/aind_data_schema/base.py index 0999c14ea..278955b96 100644 --- a/src/aind_data_schema/base.py +++ b/src/aind_data_schema/base.py @@ -1,6 +1,5 @@ """generic base class with supporting validators and fields for basic AIND schema""" -import importlib.resources import json import logging import re @@ -23,7 +22,6 @@ model_validator, ) from pydantic.functional_validators import WrapValidator -from pydantic_extra_types.timezone_name import TimeZoneName from aind_data_schema.utils.validators import recursive_check_paths, recursive_coord_system_check @@ -32,25 +30,6 @@ MAX_FILE_SIZE = 500 * 1024 # 500KB -def _restrict_timezone_names_to_tzdata() -> None: - """Pin TimeZoneName to the zones shipped by tzdata - - TimeZoneName builds its allowed values from zoneinfo.available_timezones(), which reads - the host's timezone database. That varies by platform: Debian and Ubuntu expose a - "localtime" key that macOS does not, so the same file validates differently and the - generated JSON schema differs by machine. tzdata is a pinned dependency and ships a - canonical zone list, so use that instead. - """ - zone_list = importlib.resources.files("tzdata").joinpath("zones").read_text() - zones = {line.strip() for line in zone_list.splitlines() if line.strip()} - TimeZoneName.allowed_values = zones - TimeZoneName.allowed_values_list = sorted(zones) - TimeZoneName.allowed_values_upper_to_correct = {zone.upper(): zone for zone in zones} - - -_restrict_timezone_names_to_tzdata() - - def _coerce_naive_datetime(v: Any, handler: ValidatorFunctionWrapHandler) -> AwareDatetime: """Validator to wrap around AwareDatetime to set a default timezone as user's locale""" try: diff --git a/src/aind_data_schema/core/acquisition.py b/src/aind_data_schema/core/acquisition.py index 6926d61f1..0676d4006 100644 --- a/src/aind_data_schema/core/acquisition.py +++ b/src/aind_data_schema/core/acquisition.py @@ -78,6 +78,16 @@ SPECIMEN_MODALITIES = [Modality.SPIM.abbreviation, Modality.CONFOCAL.abbreviation] +# Names exposed by some host timezone databases (Debian and Ubuntu) that are not IANA zones +NON_IANA_TIMEZONES = {"localtime", "posixrules"} + + +def _drop_non_iana_timezones(schema: dict) -> None: + """Remove non-IANA timezone names from the generated enum so the schema is host independent""" + for option in schema.get("anyOf", []): + if "enum" in option: + option["enum"] = [tz for tz in option["enum"] if tz not in NON_IANA_TIMEZONES] + class AcquisitionSubjectDetails(DataModel): """Details about the subject during an acquisition""" @@ -393,6 +403,7 @@ class Acquisition(ProtocolListMixin, DataCoreModel): "or an integer UTC offset in hours for fixed-offset timezones. " "Use ZoneInfo (from the zoneinfo standard library) to preserve the named timezone." ), + json_schema_extra=_drop_non_iana_timezones, ) acquisition_end_time: AwareDatetimeWithDefault = Field(..., title="Acquisition end time") @@ -407,6 +418,14 @@ def coerce_fixed_offset_tz_string(cls, v): return sign * (int(m.group(2)) * 60 + int(m.group(3))) // 60 return v + @field_validator("acquisition_start_tz", mode="before") + @classmethod + def reject_non_iana_tz(cls, v): + """Reject timezone names that are host artifacts rather than IANA zones.""" + if isinstance(v, str) and v in NON_IANA_TIMEZONES: + raise ValueError(f"'{v}' is not an IANA timezone name. Use a named zone such as 'America/Los_Angeles'.") + return v + experimenters: List[str] = Field( default=[], title="experimenter(s)", From 7e2ef36788c4d147770471e8106e6367efbf8fa3 Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Tue, 25 Aug 2026 10:59:26 -0700 Subject: [PATCH 11/38] tests: repair a few broken tests --- tests/test_acquisition.py | 18 ++++++++++ tests/test_coordinates.py | 74 --------------------------------------- tests/test_identifiers.py | 15 ++++++++ 3 files changed, 33 insertions(+), 74 deletions(-) diff --git a/tests/test_acquisition.py b/tests/test_acquisition.py index 92dd5cdc8..4d8ab01bd 100644 --- a/tests/test_acquisition.py +++ b/tests/test_acquisition.py @@ -24,6 +24,7 @@ from aind_data_schema.components.connections import Connection from aind_data_schema.components.coordinates import Translation from aind_data_schema.core.acquisition import ( + NON_IANA_TIMEZONES, Acquisition, AcquisitionSubjectDetails, DataStream, @@ -608,3 +609,20 @@ def test_coerce_fixed_offset_tz_string(self): assert Acquisition.coerce_fixed_offset_tz_string(None) is None assert Acquisition.coerce_fixed_offset_tz_string(-7) == -7 assert Acquisition.coerce_fixed_offset_tz_string("America/Los_Angeles") == "America/Los_Angeles" + + def test_reject_non_iana_tz(self): + """Host timezone artifacts are rejected, real zones and offsets pass through""" + for name in NON_IANA_TIMEZONES: + with pytest.raises(ValueError) as context: + Acquisition.reject_non_iana_tz(name) + assert "is not an IANA timezone name" in str(context.value) + + assert Acquisition.reject_non_iana_tz("America/Los_Angeles") == "America/Los_Angeles" + assert Acquisition.reject_non_iana_tz(-7) == -7 + assert Acquisition.reject_non_iana_tz(None) is None + + def test_non_iana_tz_absent_from_schema(self): + """The generated enum never advertises host timezone artifacts""" + enum = Acquisition.model_json_schema()["properties"]["acquisition_start_tz"]["anyOf"][1]["enum"] + assert not NON_IANA_TIMEZONES.intersection(enum) + assert "America/Los_Angeles" in enum diff --git a/tests/test_coordinates.py b/tests/test_coordinates.py index 3b13c4168..5f687cab2 100644 --- a/tests/test_coordinates.py +++ b/tests/test_coordinates.py @@ -1,7 +1,5 @@ """Tests for the coordinates module""" -import warnings - import pytest from aind_data_schema_models.atlas import AtlasName from aind_data_schema_models.units import SizeUnit @@ -21,65 +19,9 @@ ) -class TestScale: - """Tests for the Scale class""" - - def setup_method(self): - """Set up for tests""" - warnings.simplefilter("ignore", DeprecationWarning) - - def teardown_method(self): - """Tear down after tests""" - warnings.resetwarnings() - - -class TestTranslation: - """Tests for the Translation class""" - - def setup_method(self): - """Set up for tests""" - warnings.simplefilter("ignore", DeprecationWarning) - - def teardown_method(self): - """Tear down after tests""" - warnings.resetwarnings() - - -class TestRotation: - """Tests for the Rotation class""" - - def setup_method(self): - """Set up for tests""" - warnings.simplefilter("ignore", DeprecationWarning) - - def teardown_method(self): - """Tear down after tests""" - warnings.resetwarnings() - - -class TestAffineWithAffineTransforms: - """Additional tests for the Affine class with Affine transforms""" - - def setup_method(self): - """Set up for tests""" - warnings.simplefilter("ignore", DeprecationWarning) - - def teardown_method(self): - """Tear down after tests""" - warnings.resetwarnings() - - class TestTranslationFrame: """Tests for Translation frame field""" - def setup_method(self): - """Set up for tests""" - warnings.simplefilter("ignore", DeprecationWarning) - - def teardown_method(self): - """Tear down after tests""" - warnings.resetwarnings() - def test_default_frame_is_global(self): """Test that the default frame is global""" t = Translation(translation=[1, 2, 3]) @@ -94,14 +36,6 @@ def test_local_frame(self): class TestRotationNewFields: """Tests for new Rotation fields""" - def setup_method(self): - """Set up for tests""" - warnings.simplefilter("ignore", DeprecationWarning) - - def teardown_method(self): - """Tear down after tests""" - warnings.resetwarnings() - def test_default_fields(self): """Test that default field values are correct""" r = Rotation(angles=[45, 0, 0]) @@ -129,14 +63,6 @@ def test_pivot_field_stored(self): class TestCoordinateSystemHandedness: """Tests for CoordinateSystem handedness field""" - def setup_method(self): - """Set up for tests""" - warnings.simplefilter("ignore", DeprecationWarning) - - def teardown_method(self): - """Tear down after tests""" - warnings.resetwarnings() - def test_default_handedness_is_none(self): """Test that handedness defaults to None""" cs = CoordinateSystem( diff --git a/tests/test_identifiers.py b/tests/test_identifiers.py index 6c4b24570..35ceed39d 100644 --- a/tests/test_identifiers.py +++ b/tests/test_identifiers.py @@ -51,6 +51,21 @@ def test_git_hash_invalid(self): Code(url="https://github.com/org/repo", commit_hash=git_hash) +class TestCode: + """Test Code reproducibility validator""" + + def test_commit_hash_or_version_required(self): + """Code without commit_hash or version raises ValidationError""" + with pytest.raises(ValidationError) as context: + Code(url="https://github.com/org/repo") + assert "Either commit_hash or version must be provided" in str(context.value) + + def test_either_field_satisfies_requirement(self): + """Either commit_hash or version alone is enough""" + assert Code(url="https://github.com/org/repo", version="0.0.1").version == "0.0.1" + assert Code(url="https://github.com/org/repo", commit_hash="abc1234").commit_hash == "abc1234" + + class TestDataAsset: """Test DataAsset validator""" From 1d35ac8bc7d6a60bc0a4b73b52f8d56d57e36a2f Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Fri, 11 Sep 2026 12:59:42 -0700 Subject: [PATCH 12/38] docs: clean up migration guide --- V3-MIGRATION-GUIDE.md | 286 ++++++++++++++++++------------------------ 1 file changed, 119 insertions(+), 167 deletions(-) diff --git a/V3-MIGRATION-GUIDE.md b/V3-MIGRATION-GUIDE.md index 1a62dffb7..9a34161ee 100644 --- a/V3-MIGRATION-GUIDE.md +++ b/V3-MIGRATION-GUIDE.md @@ -1,12 +1,10 @@ -# biodata-schema v3.0.0 Migration Guide +# biodata-schema v3.0.0 migration guide -v3.0.0 removes every field, class, method, and back-compatibility shim that was marked -deprecated in v2.x. All of them used to emit a `DeprecationWarning` (or carried Pydantic's -`deprecated=`) but still validated. They are now gone, and passing them raises a Pydantic -`ValidationError` (`extra_forbidden`), since all schema models forbid extra fields. +Version 3 removes fields, classes, and methods that version 2 marked as deprecated. Version +2 accepted these values and issued warnings. Version 3 rejects them with Pydantic's +`ValidationError` (`extra_forbidden`) because schema models reject extra fields. -There is no automatic upgrade path for stored JSON. Files written under v2.x that use the -removed fields must be rewritten before they will validate against v3.0.0. +The `aind-metadata-upgrader` package handles automatic metadata upgrades separately. ## Contents @@ -20,21 +18,18 @@ removed fields must be rewritten before they will validate against v3.0.0. 8. [`QCMetric.tags` list form](#8-qcmetrictags-list-form) 9. [`CoordinateSystemLibrary` removed](#9-coordinatesystemlibrary-removed) 10. [Removed helper](#10-removed-helper) -11. [Warnings promoted to errors](#11-warnings-promoted-to-errors) -12. [Validators still emitting warnings](#12-validators-still-emitting-warnings) +11. [Warnings now raise errors](#11-warnings-promoted-to-errors) +12. [Warnings that remain](#12-validators-still-emitting-warnings) --- ## 1. `coordinate_system` renamed -v2.x split `coordinate_system` into `global_coordinate_system` on top-level and container -models, and `local_coordinate_system` on device and config models. The old field stayed -alongside the new one, and a `model_validator(mode="before")` copied the old value forward -with a `DeprecationWarning`. +Version 2 split `coordinate_system` into `global_coordinate_system` for top-level and +container models, and `local_coordinate_system` for device and config models. Version 3 +removes the old field and the validators that copied its value forward. -The old field and the copy-forward validators are both removed. - -### Renamed to `global_coordinate_system` +### Use `global_coordinate_system` for these models | Model | Module | | --- | --- | @@ -44,11 +39,11 @@ The old field and the copy-forward validators are both removed. | `Surgery` | `components/subject_procedures.py` | | `PlanarSectioning` | `components/specimen_procedures.py` | -### Renamed to `local_coordinate_system` +### Use `local_coordinate_system` for these models | Model | Module | | --- | --- | -| `DevicePosition` (and every subclass, e.g. `Monitor`) | `components/devices.py` | +| `DevicePosition` and subclasses such as `Monitor` | `components/devices.py` | | `ImagingConfig` | `components/configs.py` | | `LickSpoutConfig` | `components/configs.py` | | `AirPuffConfig` | `components/configs.py` | @@ -69,19 +64,16 @@ Acquisition(..., global_coordinate_system=CoordinateSystemLibrary.BREGMA_ARI) ProbeConfig(..., local_coordinate_system=CoordinateSystemLibrary.BREGMA_ARI) ``` -> Not affected: `AtlasCoordinate.coordinate_system` is a different field that holds an -> `Atlas`. Do not rename it. +Keep `AtlasCoordinate.coordinate_system`. It stores an `Atlas` and does not use the renamed +fields. -`Instrument.global_coordinate_system` and the `local_coordinate_system` fields on -`ManipulatorConfig` and `ProbeConfig` are required. If you relied on the old field being -copied forward, set the new field explicitly. +Set `Instrument.global_coordinate_system`, `ManipulatorConfig.local_coordinate_system`, and +`ProbeConfig.local_coordinate_system` explicitly. ## 2. `Section` coordinate fields -`Section` had six coordinate fields that duplicated `PlanarSection`. They are removed from -`Section`. Use `PlanarSection` for any section with coordinate data. - -Removed from `Section` (`components/specimen_procedures.py`): +Use `PlanarSection` for sections with coordinate data. Version 3 removes these fields from +`Section` (`components/specimen_procedures.py`): - `coordinate_system_name` - `start_coordinate` @@ -90,7 +82,7 @@ Removed from `Section` (`components/specimen_procedures.py`): - `thickness_unit` - `partial_slice` -The `deprecated_coordinate_fields` validator that warned on these is also removed. +Version 3 also removes the `deprecated_coordinate_fields` validator. **Before** @@ -113,17 +105,15 @@ PlanarSection( ## 3. Device size fields replaced by `shape` -`Enclosure` and `Arena` (`components/devices.py`) used a `Scale`-based `size`/`size_unit` -pair. Use a geometry object instead. +Use a geometry object instead of the `Scale`-based `size`/`size_unit` pair on `Enclosure` and +`Arena` (`components/devices.py`). -| Model | Removed | Replacement | +| Model | Remove | Use | | --- | --- | --- | | `Enclosure` | `size`, `size_unit` | `shape: Rectangle \| Circle` | | `Arena` | `size`, `size_unit` | `shape: Circle \| Rectangle` | -`shape` is now required on both models. It was optional with a `None` default in v2.x, but -`size` was required and was the only way to record extent, so every `Enclosure` and `Arena` -must now set `shape`. +Both models require `shape`. **Before** @@ -137,13 +127,13 @@ Arena(..., size=Scale(scale=[30, 30, 20]), size_unit=SizeUnit.CM) Arena(..., shape=Rectangle(width=30, height=30, size_unit=SizeUnit.CM)) ``` -> Other `size_unit` fields in the schema (`Monitor`, `Rectangle`, `Wheel`, and so on) were -> never deprecated and are unchanged. +Keep the other `size_unit` fields in the schema, including those on `Monitor`, `Rectangle`, +and `Wheel`. ## 4. `DAQChannel.channel_index` -`DAQChannel.channel_index` (`components/devices.py`) and its `deprecated_channel_index` -validator are removed. Use `DAQChannel.port`. +Remove `DAQChannel.channel_index` and its `deprecated_channel_index` validator from +`components/devices.py`. Use `DAQChannel.port` instead. **Before** @@ -157,40 +147,37 @@ DAQChannel(channel_name="ch", channel_type=DaqChannelType.DI, channel_index=1) DAQChannel(channel_name="ch", channel_type=DaqChannelType.DI, port=1) ``` -> Not affected: `OlfactometerChannel.channel_index` and -> `OlfactometerChannelInfo.channel_index` are unrelated fields and were never deprecated. +Keep `OlfactometerChannel.channel_index` and `OlfactometerChannelInfo.channel_index`. +Those fields serve different purposes. ## 5. `BreedingInfo.breeding_group` -`BreedingInfo.breeding_group` (`components/subjects.py`) is removed, along with the -`warn_breeding_group_deprecated` validator that warned on the value and then cleared it. - -v2.x already discarded the value, so nothing is lost. Drop the argument. +Remove `BreedingInfo.breeding_group` and the `warn_breeding_group_deprecated` validator from +`components/subjects.py`. ## 6. Olfactory stimulus classes -Two classes are removed from `components/stimulus.py`: +Version 3 removes these classes from `components/stimulus.py`: -| Removed | Replacement | +| Remove | Use | | --- | --- | | `OlfactometerChannelConfig` | `OlfactometerChannelInfo` in `components/configs.py` | -| `OlfactoryStimulation` | `StimulusEpoch.stimulus_name` plus `OlfactometerConfig` in `components/configs.py` | +| `OlfactoryStimulation` | `StimulusEpoch.stimulus_name` and `OlfactometerConfig` in `components/configs.py` | -`OlfactoryStimulation.channels` and `OlfactoryStimulation.notes` were separately deprecated -and go away with the class. +Remove uses of `OlfactoryStimulation.channels` and `OlfactoryStimulation.notes` too. ## 7. `DataDescription.from_*` classmethods -The three derivation classmethods on `DataDescription` (`core/data_description.py`) are -removed. Use the functions in `aind_data_schema.utils.inheritance` that they already called. +Replace the three `DataDescription` derivation classmethods from `core/data_description.py` +with the functions in `aind_data_schema.utils.inheritance`: -| Removed | Replacement | +| Remove | Use | | --- | --- | | `DataDescription.from_raw(...)` | `derive_data_description_from_raw(...)` | | `DataDescription.from_derived(...)` | `derive_data_description_from_derived(...)` | | `DataDescription.from_data_description(...)` | `derive_data_description(...)` | -The signatures are the same, so this is an import and a rename: +The signatures stay the same. Change the import and function name: ```python from aind_data_schema.utils.inheritance import ( @@ -202,12 +189,12 @@ from aind_data_schema.utils.inheritance import ( derived = derive_data_description_from_raw(dd, "spikesort-ks25", creation_time=dt) ``` +Or use the `Metadata.from_metadata` helpers. + ## 8. `QCMetric.tags` list form -`QCMetric.tags` became a `dict` in v2.3. The `fix_tag_lists` validator -(`core/quality_control.py`) accepted the v2.2.x list form and converted it to -`{"tag_1": ..., "tag_2": ...}` with a `DeprecationWarning`. That validator is removed, so -list-valued `tags` now fail validation. +Use a dictionary for `QCMetric.tags`. Version 3 removes the `fix_tag_lists` validator from +`core/quality_control.py`, so list-valued `tags` now fail validation. **Before (v2.2.x JSON)** @@ -221,30 +208,21 @@ list-valued `tags` now fail validation. {"tags": {"probe": "Probe A", "issue": "Drift"}} ``` -Pick whatever keys you want. The old shim used positional `tag_1`, `tag_2` keys, so -`{"tag_1": "Probe A", "tag_2": "Drift"}` gives you the same result as v2.x if you want a -mechanical rewrite. - ### Related removal: `fix_default_grouping_list` -`QualityControl.fix_default_grouping_list` turned a v2.2.x string-list `default_grouping` -into `[["modality"], ["tag_1"]]`. It only ran when the first metric had list-valued `tags`, -so removing `fix_tag_lists` left it unreachable and it is removed too. Pass -`default_grouping` in the current form, a list of tuples of strings. +Version 3 removes `QualityControl.fix_default_grouping_list`. Pass `default_grouping` as a +list of tuples of strings. ## 9. `CoordinateSystemLibrary` removed -`aind_data_schema.components.coordinates.CoordinateSystemLibrary` is removed. It held a -fixed set of named `CoordinateSystem` constants (`BREGMA_ARI`, `BREGMA_RAS`, `BREGMA_ARID`, -`BREGMA_RASD`, `ARENA_RBT`, `SIPE_CAMERA_RBF`, `SIPE_MONITOR_RTF`, `SIPE_SPEAKER_LTF`, -`MPM_MANIP_RFB`, `PINPOINT_PROBE_RSAB`, `SPIM_RPI`, `SPIM_IJK`, `MRI_LPS`, `IMAGE_XYZ`, and -others). +Version 3 removes `aind_data_schema.components.coordinates.CoordinateSystemLibrary` and its +fixed set of named `CoordinateSystem` constants, including `BREGMA_ARI`, `BREGMA_RAS`, +`BREGMA_ARID`, `BREGMA_RASD`, `ARENA_RBT`, `SIPE_CAMERA_RBF`, `SIPE_MONITOR_RTF`, +`SIPE_SPEAKER_LTF`, `MPM_MANIP_RFB`, `PINPOINT_PROBE_RSAB`, `SPIM_RPI`, `SPIM_IJK`, +`MRI_LPS`, and `IMAGE_XYZ`. -Coordinate systems belong to a rig or a project, not to the schema. Define the ones your -project uses in your own module and import them where you need them. - -`CoordinateSystem`, `Axis`, `Origin`, `AxisName`, and `Direction` are unchanged. Only the -library of pre-built constants is gone. +Define the coordinate systems for your rig or project in your own module. Import them where +you need them. `CoordinateSystem`, `Axis`, `Origin`, `AxisName`, and `Direction` still work. **Before** @@ -276,155 +254,129 @@ BREGMA_ARI = CoordinateSystem( Acquisition(..., global_coordinate_system=BREGMA_ARI) ``` -To copy an old definition verbatim, look at `components/coordinates.py` at the v2.9.0 tag. -Every example under `examples/` now defines its coordinate system inline and can be used as -a template. +For an old definition, see `components/coordinates.py` at the v2.9.0 tag. The examples in +`examples/` also define coordinate systems inline. -> `AtlasLibrary` is a separate library and still ships with the package. +Keep using `AtlasLibrary`; version 3 still ships it. ## 10. Removed helper -`aind_data_schema.base.migrate_deprecated_coordinate_system` is removed. It only existed to -do the copy-forward described in section 1 and has no replacement. `recursive_get_all_names` -in `utils/validators.py` no longer skips the old `coordinate_system` field and is simpler -as a result. +Version 3 removes `aind_data_schema.base.migrate_deprecated_coordinate_system`. No +replacement exists because the helper only copied the old coordinate field forward. + +`recursive_get_all_names` in `utils/validators.py` now handles the fields directly and no +longer skips `coordinate_system`. ### The `transforms` extra is gone -`pip install biodata-schema[transforms]` is no longer valid. The optional-dependency group -and its `scipy` requirement are both removed. The extra was only there for -`Rotation.to_matrix`, which no longer ships. Drop `[transforms]` from your install command; -plain `pip install biodata-schema` covers everything. +Do not use `pip install biodata-schema[transforms]`. Version 3 removes that extra and its +`scipy` dependency. -## 11. Warnings promoted to errors +## 11. Warnings now raise errors -Six things that only warned in v2.x now fail validation. These reject files that used to be -accepted, so they are the most likely source of new `ValidationError`s. +Version 3 turns these five v2 warnings into validation errors. ### `Code` requires `commit_hash` or `version` -`Code._ensure_commit_hash_or_version` (`components/identifiers.py`) used to warn that at -least one of these fields would be required in a future release. It is required now. +Set at least one of these fields. `Code._ensure_commit_hash_or_version` in +`components/identifiers.py` now enforces the requirement. ```python Code(url="https://github.com/AllenNeuralDynamics/example") # ValidationError Code(url="https://github.com/AllenNeuralDynamics/example", version="0.0.1") # ok ``` -### Bare `Injection` procedures are rejected +### Wrap `Injection` procedures -`Procedures.reject_injections` (`core/procedures.py`) now raises. Wrap every `Injection` in -a `Surgery` or `NonSurgicalInjection`: +`Procedures.reject_injections` in `core/procedures.py` now rejects bare `Injection` objects. +Wrap each injection in a `Surgery` or `NonSurgicalInjection`: ```python Procedures(subject_id="12345", subject_procedures=[Injection(...)]) # ValidationError Procedures(subject_id="12345", subject_procedures=[Surgery(procedures=[Injection(...)])]) # ok ``` -### Duplicate component names on `Instrument` - -`Instrument.validate_unique_component_names` (`core/instrument.py`) now raises instead of -logging. Two cases are rejected: +### Give `Instrument` components unique names -- two entries in `Instrument.components` with the same `name`, and -- two different objects anywhere in the component tree with the same `name`. +`Instrument.validate_unique_component_names` in `core/instrument.py` now raises an error. +Give unique names to: -Referencing one shared object from more than one place is fine. Objects are compared by -value before a name is reported as a duplicate. +- entries in `Instrument.components` +- different objects anywhere in the component tree -`Software` names are skipped entirely. Software is a descriptor, not an addressable device, -and the same package is often recorded across many devices. Setting -`Software(name="Bonsai", version="2.5")` as the `recording_software` on every camera is -valid, and so is giving a `Software` the same name as a device. +You can reference one shared object from multiple places. The validator compares object +values before it reports a duplicate name. -This matters because `Connection.source_device` and `Connection.target_device` look up -components by name. - -#### Renamed devices in `multiplane_ophys_instrument` +The validator skips `Software` names. You can reuse a package across devices, and a software +name can match a device name. For example, this remains valid: -`examples/multiplane_ophys_instrument.py` failed this check. Three `CameraAssembly` objects -each held a `Camera` with the assembly's exact name, and `Connection.source_device` pointed -at that name, so the reference was ambiguous. The inner cameras were renamed to match the -`"… Camera Lens"` and `"… Camera Filter"` naming already used in that file: +```python +Software(name="Bonsai", version="2.5") +``` -| Old name (assembly and camera) | Assembly keeps | Inner camera becomes | -| --- | --- | --- | -| `Behavior Camera` | `Behavior Camera` | `Behavior Camera Detector` | -| `Eye Camera` | `Eye Camera` | `Eye Camera Detector` | -| `Face Camera` | `Face Camera` | `Face Camera Detector` | +Keep device names unique because `Connection.source_device` and `Connection.target_device` +find components by name. -Do the same if you copied names from that example, or if your instrument gives an assembly -and its inner camera the same name: keep the assembly name, since connections point at it, -and rename the inner device. +#### Renamed devices in `multiplane_ophys_instrument` -### Absolute `AssetPath` values +Keep each `CameraAssembly` name and give its inner camera a distinct name: -`recursive_check_paths` (`utils/validators.py`) now raises on an absolute `AssetPath` -instead of logging. It runs from `DataCoreModel.write_standard_file`, so writing a file with -absolute asset paths now fails. Paths must be relative to the metadata directory. +| Assembly name | Inner camera name | +| --- | --- | +| `Behavior Camera` | `Behavior Camera Detector` | +| `Eye Camera` | `Eye Camera Detector` | +| `Face Camera` | `Face Camera Detector` | -A path that does not exist still only logs a warning, because whether a relative path -resolves depends on the working directory. +Apply the same rule when an assembly and its inner camera share a name: keep the assembly +name because connections use it, and rename the inner device. -### `Monitor.contrast_unit` and `brightness_unit` are no longer filled in +### Specify monitor units -`Monitor.add_units_if_needed` (`components/devices.py`) set these units to `percent` when a -value was given without one. It is removed. A separate validator already required the unit -whenever the value is set, and that requirement now takes effect: +Set `contrast_unit` or `brightness_unit` whenever you set the matching value. Version 3 +removed `Monitor.add_units_if_needed`, which filled in `percent` automatically. ```python Monitor(..., contrast=50) # ValidationError Monitor(..., contrast=50, contrast_unit=UnitlessUnit.PERCENT) # ok ``` -### `Metadata` no longer adds the `calibration` tag for you +### Add the `calibration` tag yourself -`Metadata.validate_calibration_object_tags` (`core/metadata.py`) still warns when a -`CalibrationObject` subject has no `"calibration"` tag, but it no longer appends the tag to -`data_description.tags`. Add it yourself: +When a `CalibrationObject` subject lacks the `"calibration"` tag, +`Metadata.validate_calibration_object_tags` still warns. It no longer adds the tag to +`data_description.tags`: ```python DataDescription(..., tags=["calibration"]) ``` -## 12. Validators still emitting warnings +## 12. Warnings that remain -There are no `DeprecationWarning`s left in the package. These are the warnings that remain -after the changes in section 11, and they stay warnings on purpose. +Version 3 removes all `DeprecationWarning`s. The following validators and helpers still emit +warnings. ### `UserWarning`, visible through `warnings` and `pytest.warns` -| Location | Validator | Fires when | Why it stays a warning | +| Location | Validator | Fires when | Reason | | --- | --- | --- | --- | -| `core/metadata.py` | `Metadata.validate_expected_files_by_modality` | A file required by the declared modality is missing | Metadata is built up in pieces, so an error would block partial objects | -| `core/metadata.py` | `Metadata.validate_calibration_object_tags` | `CalibrationObject` subject with no `"calibration"` tag | Advisory only; see section 11 for the dropped auto-fix | -| `core/metadata.py` | `Metadata.validate_training_protocol_references` | `StimulusEpoch.training_protocol_name` has no match in `Procedures` | Only meaningful when both files are present | -| `core/metadata.py` | `Metadata.validate_data_description_name_time_consistency` | Creation time from the name is far from `acquisition_end_time` | "Close to" is a heuristic, not a rule | -| `core/processing.py` | `Processing.__add__` | Merged objects share process names | The merge already fixes it by renaming | -| `base.py` | `_GenericModel.validate_fieldnames` | A field name contains `.` or `$` | Fires on user-supplied `GenericModel` payloads the schema does not control | +| `core/metadata.py` | `Metadata.validate_expected_files_by_modality` | A required file is missing | Metadata can arrive in pieces. | +| `core/metadata.py` | `Metadata.validate_calibration_object_tags` | A `CalibrationObject` subject lacks the `"calibration"` tag | The check provides advice only. | +| `core/metadata.py` | `Metadata.validate_training_protocol_references` | `StimulusEpoch.training_protocol_name` has no match in `Procedures` | The reference matters only when both files exist. | +| `core/metadata.py` | `Metadata.validate_data_description_name_time_consistency` | The name's creation time differs greatly from `acquisition_end_time` | The check uses a heuristic. | +| `core/processing.py` | `Processing.__add__` | Merged objects share process names | The merge renames the processes. | +| `base.py` | `_GenericModel.validate_fieldnames` | A field name contains `.` or `$` | The check covers user-supplied `GenericModel` data. | ### `logger.warning`, log output only -| Location | Validator | Fires when | Why it stays a warning | +| Location | Validator | Fires when | Reason | | --- | --- | --- | --- | -| `core/metadata.py` | `Metadata.validate_core_fields` | A core field failed its own validation | This is the escape hatch for wrapping partially-invalid cores | -| `core/acquisition.py` | `DataStream.__add__` | Two merged data streams disagree | Part of the merge helper, not a validator | -| `utils/validators.py` | `recursive_check_paths` | An `AssetPath` does not exist on disk | Whether it resolves depends on the working directory | -| `base.py` | `DataCoreModel.write_standard_file` | Serialized file is over the 500 KB `MAX_FILE_SIZE` | Advisory on a write path; failing would throw away your data | +| `core/metadata.py` | `Metadata.validate_core_fields` | A core field fails its own validation | The helper can wrap partially invalid cores. | +| `core/acquisition.py` | `DataStream.__add__` | Two merged data streams disagree | The message describes a merge condition. | +| `utils/validators.py` | `recursive_check_paths` | An `AssetPath` does not exist on disk | The working directory controls path resolution. | +| `base.py` | `DataCoreModel.write_standard_file` | A serialized file exceeds `MAX_FILE_SIZE` (500 KB) | The write path warns instead of discarding data. | -### Note on `DEPTH` axes +### `DEPTH` axes -v2.x warned when a `CoordinateSystem` used a `DEPTH` axis. That warning is gone and `DEPTH` -axes are now accepted without complaint, for compatibility with existing coordinate systems. -Removing `CoordinateSystemLibrary` (section 9) is the other half of this: the package no -longer ships a `DEPTH`-based system, so projects defining their own will not pick one up by -accident. - -## Verifying your upgrade - -The full test suite and all bundled examples were updated for these changes and pass under -v3.0.0: - -```bash -uv run pytest -``` +Version 3 accepts `DEPTH` axes without warning. Projects can define their own coordinate +systems, and the package no longer supplies a `DEPTH`-based system through +`CoordinateSystemLibrary`. From 24477543dfeb34b5caeb080c288722bd0f78c239 Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Fri, 11 Sep 2026 14:43:04 -0700 Subject: [PATCH 13/38] refactor: copy over merge change from aind-data-schema --- src/aind_data_schema/core/acquisition.py | 7 +++++-- tests/test_composability_merge.py | 13 +++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/aind_data_schema/core/acquisition.py b/src/aind_data_schema/core/acquisition.py index 0676d4006..626ad0298 100644 --- a/src/aind_data_schema/core/acquisition.py +++ b/src/aind_data_schema/core/acquisition.py @@ -594,7 +594,9 @@ def __add__(self, other: "Acquisition") -> "Acquisition": # Check for incompatible key fields subj_check = self.subject_id != other.subject_id spec_check = self.specimen_id != other.specimen_id - exp_type_check = self.acquisition_type != other.acquisition_type + exp_type_check = bool(self.acquisition_type and other.acquisition_type) and ( + self.acquisition_type != other.acquisition_type + ) if any([subj_check, spec_check, exp_type_check]): raise ValueError( "Cannot combine Acquisition objects that differ in key fields:\n" @@ -635,6 +637,7 @@ def __add__(self, other: "Acquisition") -> "Acquisition": # Handle start and end time start_time = min(self.acquisition_start_time, other.acquisition_start_time) end_time = max(self.acquisition_end_time, other.acquisition_end_time) + acquisition_type = self.acquisition_type or other.acquisition_type return Acquisition( subject_id=self.subject_id, @@ -648,7 +651,7 @@ def __add__(self, other: "Acquisition") -> "Acquisition": maintenance=maintenance, acquisition_start_time=start_time, acquisition_end_time=end_time, - acquisition_type=self.acquisition_type, + acquisition_type=acquisition_type, notes=notes, data_streams=data_streams, stimulus_epochs=stimulus_epochs, diff --git a/tests/test_composability_merge.py b/tests/test_composability_merge.py index 13233d4ea..816919d38 100644 --- a/tests/test_composability_merge.py +++ b/tests/test_composability_merge.py @@ -150,6 +150,19 @@ def test_merge_acquisition(self): assert merged_acq.acquisition_type == "ExaSPIM" assert merged_acq.instrument_id == acq1.instrument_id + empty_type_acq = self.exaspim_acquisition.model_copy() + empty_type_acq.acquisition_type = "" + merged_empty_type = empty_type_acq + acq2 + assert merged_empty_type.acquisition_type == "ExaSPIM" + + merged_empty_type = acq2 + empty_type_acq + assert merged_empty_type.acquisition_type == "ExaSPIM" + + conflicting_type_acq = self.exaspim_acquisition.model_copy() + conflicting_type_acq.acquisition_type = "Other" + with pytest.raises(ValueError): + acq2 + conflicting_type_acq + # Test duplicate removal in merging acq3 = self.exaspim_acquisition.model_copy() acq4 = self.exaspim_acquisition.model_copy() From 3924a0c3b2b094a0195adf2f7a7f587d087da697 Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Fri, 11 Sep 2026 14:50:22 -0700 Subject: [PATCH 14/38] refactor: migrate from aind-data-schema-models to biodata-models --- CONTRIBUTING.md | 2 +- V3-MIGRATION-GUIDE.md | 4 +- docs/base/core/instrument.md | 2 +- docs/base/core/quality_control.md | 2 +- .../_static/coordinate_system_builder.html | 2 +- docs/source/acquisition.md | 12 +- .../atlas.md | 0 .../brain_atlas.md | 0 .../coordinates.md | 0 .../data_name_patterns.md | 0 .../devices.md | 0 .../external.md | 2 +- .../harp_types.md | 0 .../licenses.md | 0 .../modalities.md | 0 .../organizations.md | 0 .../pid_names.md | 2 +- .../process_names.md | 0 .../reagent.md | 0 .../registries.md | 0 .../species.md | 0 .../specimen_procedure_types.md | 0 .../stimulus_modality.md | 0 .../system_architecture.md | 0 .../units.md | 0 docs/source/components/configs.md | 82 +++--- docs/source/components/coordinates.md | 20 +- docs/source/components/devices.md | 236 ++++++++--------- docs/source/components/geometry.md | 4 +- docs/source/components/identifiers.md | 2 +- .../source/components/injection_procedures.md | 16 +- docs/source/components/measurements.md | 12 +- docs/source/components/reagent.md | 42 +-- docs/source/components/specimen_procedures.md | 14 +- docs/source/components/stimulus.md | 24 +- docs/source/components/subject_procedures.md | 16 +- docs/source/components/subjects.md | 18 +- docs/source/components/surgery_procedures.md | 20 +- docs/source/coordinate_systems.md | 8 +- docs/source/data_description.md | 12 +- .../example_workflow/example_workflow.md | 2 +- .../example_workflow/example_workflow.py | 12 +- docs/source/inheritance.md | 2 +- docs/source/instrument.md | 4 +- docs/source/model.md | 6 +- docs/source/processing.md | 6 +- docs/source/quality_control.md | 6 +- docs/source/registries.rst | 40 +-- examples/aibs_smartspim_instrument.py | 8 +- examples/aibs_smartspim_procedures.py | 6 +- examples/aind_smartspim_instrument.py | 8 +- examples/barseq_acquisition.py | 2 +- examples/barseq_instrument.py | 8 +- examples/bergamo_ophys_acquisition.py | 10 +- examples/data_description.py | 6 +- examples/ephys_acquisition.py | 10 +- examples/ephys_instrument.py | 12 +- examples/exaspim_acquisition.py | 12 +- examples/exaspim_instrument.py | 8 +- examples/exaspim_quality_control.py | 4 +- examples/fip_behavior_instrument.py | 8 +- examples/fip_ophys_acquisition.py | 6 +- examples/fip_ophys_instrument.py | 6 +- examples/isi_instrument.py | 10 +- examples/model.py | 2 +- examples/mri_acquisition.py | 6 +- examples/multiplane_ophys_acquisition.py | 10 +- examples/multiplane_ophys_instrument.py | 10 +- examples/ophys_acquisition.py | 2 +- examples/ophys_procedures.py | 16 +- examples/procedures.py | 6 +- examples/processing.py | 4 +- examples/quality_control.py | 2 +- examples/slap2_acquisition.py | 12 +- examples/slap2_instrument.py | 12 +- examples/slap2_structure_acquisition.py | 10 +- examples/subject.py | 4 +- examples/thermistor_procedures.py | 6 +- pyproject.toml | 2 +- schemas/instrument_schema.json | 16 +- schemas/metadata_schema.json | 248 +++++++++--------- schemas/subject_schema.json | 24 +- src/aind_data_schema/components/configs.py | 12 +- .../components/coordinates.py | 8 +- src/aind_data_schema/components/devices.py | 12 +- src/aind_data_schema/components/geometry.py | 2 +- .../components/identifiers.py | 2 +- .../components/injection_procedures.py | 8 +- .../components/measurements.py | 2 +- src/aind_data_schema/components/reagent.py | 10 +- .../components/specimen_procedures.py | 8 +- src/aind_data_schema/components/stimulus.py | 2 +- .../components/subject_procedures.py | 4 +- src/aind_data_schema/components/subjects.py | 6 +- .../components/surgery_procedures.py | 10 +- src/aind_data_schema/core/acquisition.py | 6 +- src/aind_data_schema/core/data_description.py | 8 +- src/aind_data_schema/core/instrument.py | 2 +- src/aind_data_schema/core/metadata.py | 2 +- src/aind_data_schema/core/model.py | 2 +- src/aind_data_schema/core/processing.py | 4 +- src/aind_data_schema/core/quality_control.py | 2 +- .../utils/docs/doc_generator.py | 10 +- .../utils/docs/model_generator.py | 18 +- .../utils/docs/registries_generator.py | 50 ++-- src/aind_data_schema/utils/inheritance.py | 2 +- src/aind_data_schema/utils/schema_tree.py | 16 +- tests/coordinate_systems.py | 4 +- tests/test_acquisition.py | 4 +- tests/test_acquisition_configs.py | 4 +- tests/test_base.py | 2 +- tests/test_composability_merge.py | 2 +- tests/test_configs.py | 4 +- tests/test_coordinates.py | 6 +- tests/test_data_description.py | 6 +- tests/test_device.py | 8 +- tests/test_geometry.py | 2 +- tests/test_imaging.py | 4 +- tests/test_inheritance.py | 6 +- tests/test_instrument.py | 10 +- tests/test_metadata.py | 8 +- tests/test_procedures.py | 20 +- tests/test_processing.py | 4 +- tests/test_quality_control.py | 2 +- tests/test_subject.py | 8 +- tests/test_subjects.py | 8 +- uv.lock | 32 +-- 127 files changed, 750 insertions(+), 750 deletions(-) rename docs/source/{aind_data_schema_models => biodata_models}/atlas.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/brain_atlas.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/coordinates.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/data_name_patterns.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/devices.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/external.md (71%) rename docs/source/{aind_data_schema_models => biodata_models}/harp_types.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/licenses.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/modalities.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/organizations.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/pid_names.md (79%) rename docs/source/{aind_data_schema_models => biodata_models}/process_names.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/reagent.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/registries.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/species.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/specimen_procedure_types.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/stimulus_modality.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/system_architecture.md (100%) rename docs/source/{aind_data_schema_models => biodata_models}/units.md (100%) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6a1e3ee8c..9594db405 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -110,7 +110,7 @@ Use `uv run ruff format .` to apply Ruff's formatting. **NOTE**: Please note that these linters are automatically run in github actions when a PR is opened. These linters must pass for a PR to merge. ### Units -Unit types (i.e. anything from [aind_data_schema_models.units](https://github.com/AllenNeuralDynamics/aind-data-schema-models/blob/main/src/aind_data_schema_models/units.py)) should always be paired with a variable in one of two patterns. +Unit types (i.e. anything from [biodata_models.units](https://github.com/AllenNeuralDynamics/biodata-models/blob/main/src/biodata_models/units.py)) should always be paired with a variable in one of two patterns. When you have a single `variable` with a unit, you should add the `_unit` suffix on the name of the unit: diff --git a/V3-MIGRATION-GUIDE.md b/V3-MIGRATION-GUIDE.md index 9a34161ee..b075855e0 100644 --- a/V3-MIGRATION-GUIDE.md +++ b/V3-MIGRATION-GUIDE.md @@ -235,8 +235,8 @@ Acquisition(..., global_coordinate_system=CoordinateSystemLibrary.BREGMA_ARI) **After** ```python -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.units import SizeUnit +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.units import SizeUnit from aind_data_schema.components.coordinates import Axis, CoordinateSystem diff --git a/docs/base/core/instrument.md b/docs/base/core/instrument.md index fa741e6e1..2cb706a57 100644 --- a/docs/base/core/instrument.md +++ b/docs/base/core/instrument.md @@ -26,7 +26,7 @@ If you need to specify additional information about a device we will need to add ### Missing organizations -You can find the full list of [Organizations](aind_data_schema_models/organizations.md) in the `aind-data-schema-models` repository. Some device types are restricted to a subset of this full list to simplify the `metadata-entry` app. Please open an [issue](https://github.com/AllenNeuralDynamics/biodata-schema/issues) if you need a manufacturer that isn't available in either the main list or one of the subsets. +You can find the full list of [Organizations](biodata_models/organizations.md) in the `biodata-models` repository. Some device types are restricted to a subset of this full list to simplify the `metadata-entry` app. Please open an [issue](https://github.com/AllenNeuralDynamics/biodata-schema/issues) if you need a manufacturer that isn't available in either the main list or one of the subsets. ## Position diff --git a/docs/base/core/quality_control.md b/docs/base/core/quality_control.md index c5e47d40f..37db03382 100644 --- a/docs/base/core/quality_control.md +++ b/docs/base/core/quality_control.md @@ -16,7 +16,7 @@ Each [QCMetric](#qcmetric) is a single value or array of values that can be comp Each [QCMetric](#qcmetric) has a [Status](#status). The [Status](#status) should depend directly on the `QCMetric.value`, either by a simple function: "value>5", or by a qualitative rule: "Field of view includes visual areas". The `QCMetric.description` field should describe the rule used to set the status. Metrics can be evaluated multiple times, in which case the new status should be appended the `QCMetric.status_history`. -Each [QCMetric](#qcmetric) is annotated with three pieces of additional metadata: the [Stage](#stage) during which it was evaluated, the [Modality](aind_data_schema_models/modalities.md#modality) of the evaluated data, and [tags](#tags). +Each [QCMetric](#qcmetric) is annotated with three pieces of additional metadata: the [Stage](#stage) during which it was evaluated, the [Modality](biodata_models/modalities.md#modality) of the evaluated data, and [tags](#tags). ### Curations diff --git a/docs/source/_static/coordinate_system_builder.html b/docs/source/_static/coordinate_system_builder.html index ab9b65196..15cd27047 100644 --- a/docs/source/_static/coordinate_system_builder.html +++ b/docs/source/_static/coordinate_system_builder.html @@ -872,7 +872,7 @@

At-rest orientation (in instrument CS)

Handedness, Origin, ReferenceCoordinateSystem, Rotation, RotationDirection, Scale, SizeUnit, Translation, ) -from aind_data_schema_models.units import AngleUnit, SizeUnit +from biodata_models.units import AngleUnit, SizeUnit # Instrument global coordinate system instrument_cs = CoordinateSystem( diff --git a/docs/source/acquisition.md b/docs/source/acquisition.md index eb52f1636..bd9af60fd 100644 --- a/docs/source/acquisition.md +++ b/docs/source/acquisition.md @@ -108,11 +108,11 @@ Details about the subject during an acquisition |-------|------|-------------| | `animal_weight_prior` | `Optional[decimal.Decimal]` | Animal weight (g) (Animal weight before procedure) | | `animal_weight_post` | `Optional[decimal.Decimal]` | Animal weight (g) (Animal weight after procedure) | -| `weight_unit` | [MassUnit](aind_data_schema_models/units.md#massunit) | Weight unit | +| `weight_unit` | [MassUnit](biodata_models/units.md#massunit) | Weight unit | | `anaesthesia` | Optional[[Anaesthetic](components/surgery_procedures.md#anaesthetic)] | Anaesthesia (Anaesthesia present during entire acquisition, use Manipulation for partial anaesthesia) | | `mouse_platform_name` | `str` | Mouse platform (The surface that the mouse is on during the acquisition) | | `reward_consumed_total` | `Optional[decimal.Decimal]` | Total reward consumed (mL) | -| `reward_consumed_unit` | Optional[[VolumeUnit](aind_data_schema_models/units.md#volumeunit)] | Reward consumed unit | +| `reward_consumed_unit` | Optional[[VolumeUnit](biodata_models/units.md#volumeunit)] | Reward consumed unit | ### DataStream @@ -124,7 +124,7 @@ same time. |-------|------|-------------| | `stream_start_time` | `datetime (timezone-aware)` | Stream start time | | `stream_end_time` | `datetime (timezone-aware)` | Stream stop time | -| `modalities` | List[[Modality](aind_data_schema_models/modalities.md#modality)] | Modalities (Modalities that are acquired in this stream) | +| `modalities` | List[[Modality](biodata_models/modalities.md#modality)] | Modalities (Modalities that are acquired in this stream) | | `code` | Optional[List[[Code](components/identifiers.md#code)]] | Acquisition code | | `notes` | `Optional[str]` | Notes | | `active_devices` | `List[str]` | Active devices (Device names must match devices in the Instrument) | @@ -140,7 +140,7 @@ A simplified data stream for acquisitions where instrument metadata is unavailab |-------|------|-------------| | `stream_start_time` | `datetime (timezone-aware)` | Stream start time | | `stream_end_time` | `datetime (timezone-aware)` | Stream stop time | -| `modalities` | List[[Modality](aind_data_schema_models/modalities.md#modality)] | Modalities (Modalities that are acquired in this stream) | +| `modalities` | List[[Modality](biodata_models/modalities.md#modality)] | Modalities (Modalities that are acquired in this stream) | | `notes` | `Optional[str]` | Notes | @@ -166,7 +166,7 @@ Summary of a StimulusEpoch |-------|------|-------------| | `output_parameters` | `Optional[dict]` | Additional metrics | | `reward_consumed_during_epoch` | `Optional[decimal.Decimal]` | Reward consumed during training (uL) | -| `reward_consumed_unit` | Optional[[VolumeUnit](aind_data_schema_models/units.md#volumeunit)] | Reward consumed unit | +| `reward_consumed_unit` | Optional[[VolumeUnit](biodata_models/units.md#volumeunit)] | Reward consumed unit | | `trials_total` | `Optional[int]` | Total trials | | `trials_finished` | `Optional[int]` | Finished trials | | `trials_rewarded` | `Optional[int]` | Rewarded trials | @@ -183,7 +183,7 @@ same time. Not all acquisitions have StimulusEpochs. | `stimulus_end_time` | `datetime (timezone-aware)` | Stimulus end time (When a specific stimulus ends. This might be the same as the acquisition end time.) | | `stimulus_name` | `str` | Stimulus name | | `code` | Optional[[Code](components/identifiers.md#code)] | Code or script (Custom code/script used to control the behavior/stimulus. Use the Code.parameters field to store stimulus properties) | -| `stimulus_modalities` | List[[StimulusModality](aind_data_schema_models/stimulus_modality.md#stimulusmodality)] | Stimulus modalities | +| `stimulus_modalities` | List[[StimulusModality](biodata_models/stimulus_modality.md#stimulusmodality)] | Stimulus modalities | | `performance_metrics` | Optional[[PerformanceMetrics](acquisition.md#performancemetrics)] | Performance metrics | | `notes` | `Optional[str]` | Notes | | `active_devices` | `List[str]` | Active devices (Device names must match devices in the Instrument) | diff --git a/docs/source/aind_data_schema_models/atlas.md b/docs/source/biodata_models/atlas.md similarity index 100% rename from docs/source/aind_data_schema_models/atlas.md rename to docs/source/biodata_models/atlas.md diff --git a/docs/source/aind_data_schema_models/brain_atlas.md b/docs/source/biodata_models/brain_atlas.md similarity index 100% rename from docs/source/aind_data_schema_models/brain_atlas.md rename to docs/source/biodata_models/brain_atlas.md diff --git a/docs/source/aind_data_schema_models/coordinates.md b/docs/source/biodata_models/coordinates.md similarity index 100% rename from docs/source/aind_data_schema_models/coordinates.md rename to docs/source/biodata_models/coordinates.md diff --git a/docs/source/aind_data_schema_models/data_name_patterns.md b/docs/source/biodata_models/data_name_patterns.md similarity index 100% rename from docs/source/aind_data_schema_models/data_name_patterns.md rename to docs/source/biodata_models/data_name_patterns.md diff --git a/docs/source/aind_data_schema_models/devices.md b/docs/source/biodata_models/devices.md similarity index 100% rename from docs/source/aind_data_schema_models/devices.md rename to docs/source/biodata_models/devices.md diff --git a/docs/source/aind_data_schema_models/external.md b/docs/source/biodata_models/external.md similarity index 71% rename from docs/source/aind_data_schema_models/external.md rename to docs/source/biodata_models/external.md index 7669d0b57..64ce05d22 100644 --- a/docs/source/aind_data_schema_models/external.md +++ b/docs/source/biodata_models/external.md @@ -1,6 +1,6 @@ # External registries -External registries act as an application programming interfaces (API). They allow us to store metadata from registries that are too large to store inside of the `aind-data-schema-models` repository. Because of this, we can't enumerate all of the options for each model in the documentation. Instead we link here to the search page for each registry along with one example of what the atlas responses look like. +External registries act as an application programming interfaces (API). They allow us to store metadata from registries that are too large to store inside of the `biodata-models` repository. Because of this, we can't enumerate all of the options for each model in the documentation. Instead we link here to the search page for each registry along with one example of what the atlas responses look like. ## Model definitions diff --git a/docs/source/aind_data_schema_models/harp_types.md b/docs/source/biodata_models/harp_types.md similarity index 100% rename from docs/source/aind_data_schema_models/harp_types.md rename to docs/source/biodata_models/harp_types.md diff --git a/docs/source/aind_data_schema_models/licenses.md b/docs/source/biodata_models/licenses.md similarity index 100% rename from docs/source/aind_data_schema_models/licenses.md rename to docs/source/biodata_models/licenses.md diff --git a/docs/source/aind_data_schema_models/modalities.md b/docs/source/biodata_models/modalities.md similarity index 100% rename from docs/source/aind_data_schema_models/modalities.md rename to docs/source/biodata_models/modalities.md diff --git a/docs/source/aind_data_schema_models/organizations.md b/docs/source/biodata_models/organizations.md similarity index 100% rename from docs/source/aind_data_schema_models/organizations.md rename to docs/source/biodata_models/organizations.md diff --git a/docs/source/aind_data_schema_models/pid_names.md b/docs/source/biodata_models/pid_names.md similarity index 79% rename from docs/source/aind_data_schema_models/pid_names.md rename to docs/source/biodata_models/pid_names.md index 136f90b06..11fa991d3 100644 --- a/docs/source/aind_data_schema_models/pid_names.md +++ b/docs/source/biodata_models/pid_names.md @@ -11,7 +11,7 @@ the registry for that PID, and abbreviation for that registry |-------|------|-------------| | `name` | `str` | Name | | `abbreviation` | `Optional[str]` | Abbreviation | -| `registry` | `Union[aind_data_schema_models.registries.Registry, str, NoneType]` | Registry | +| `registry` | `Union[biodata_models.registries.Registry, str, NoneType]` | Registry | | `registry_identifier` | `Optional[str]` | Registry identifier | diff --git a/docs/source/aind_data_schema_models/process_names.md b/docs/source/biodata_models/process_names.md similarity index 100% rename from docs/source/aind_data_schema_models/process_names.md rename to docs/source/biodata_models/process_names.md diff --git a/docs/source/aind_data_schema_models/reagent.md b/docs/source/biodata_models/reagent.md similarity index 100% rename from docs/source/aind_data_schema_models/reagent.md rename to docs/source/biodata_models/reagent.md diff --git a/docs/source/aind_data_schema_models/registries.md b/docs/source/biodata_models/registries.md similarity index 100% rename from docs/source/aind_data_schema_models/registries.md rename to docs/source/biodata_models/registries.md diff --git a/docs/source/aind_data_schema_models/species.md b/docs/source/biodata_models/species.md similarity index 100% rename from docs/source/aind_data_schema_models/species.md rename to docs/source/biodata_models/species.md diff --git a/docs/source/aind_data_schema_models/specimen_procedure_types.md b/docs/source/biodata_models/specimen_procedure_types.md similarity index 100% rename from docs/source/aind_data_schema_models/specimen_procedure_types.md rename to docs/source/biodata_models/specimen_procedure_types.md diff --git a/docs/source/aind_data_schema_models/stimulus_modality.md b/docs/source/biodata_models/stimulus_modality.md similarity index 100% rename from docs/source/aind_data_schema_models/stimulus_modality.md rename to docs/source/biodata_models/stimulus_modality.md diff --git a/docs/source/aind_data_schema_models/system_architecture.md b/docs/source/biodata_models/system_architecture.md similarity index 100% rename from docs/source/aind_data_schema_models/system_architecture.md rename to docs/source/biodata_models/system_architecture.md diff --git a/docs/source/aind_data_schema_models/units.md b/docs/source/biodata_models/units.md similarity index 100% rename from docs/source/aind_data_schema_models/units.md rename to docs/source/biodata_models/units.md diff --git a/docs/source/components/configs.md b/docs/source/components/configs.md index 07c744f5d..d77abb33e 100644 --- a/docs/source/components/configs.md +++ b/docs/source/components/configs.md @@ -9,12 +9,12 @@ Air puff device configuration | Field | Type | Title (Description) | |-------|------|-------------| | `valence` | [Valence](#valence) | Valence | -| `relative_position` | List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)] | Initial relative position | +| `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Initial relative position | | `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Entry coordinate, depth, and rotation in the Acquisition.global_coordinate_system) | | `pressure` | `Optional[float]` | Pressure | -| `pressure_unit` | Optional[[PressureUnit](../aind_data_schema_models/units.md#pressureunit)] | Pressure unit | +| `pressure_unit` | Optional[[PressureUnit](../biodata_models/units.md#pressureunit)] | Pressure unit | | `duration` | `Optional[float]` | Duration | | `device_name` | `str` | Device name (Must match a device defined in the instrument.json) | @@ -25,7 +25,7 @@ Configuration of a catheter | Field | Type | Title (Description) | |-------|------|-------------| -| `targeted_structure` | [MouseAnatomyModel](../aind_data_schema_models/external.md#mouseanatomymodel) | Targeted blood vessel (Use options from MouseBloodVessels) | +| `targeted_structure` | [MouseAnatomyModel](../biodata_models/external.md#mouseanatomymodel) | Targeted blood vessel (Use options from MouseBloodVessels) | | `device_name` | `str` | Device name (Must match a device defined in the instrument.json) | @@ -44,7 +44,7 @@ Configuration of a channel | `excitation_filters` | Optional[List[[DeviceConfig](#deviceconfig)]] | Excitation filters | | `emission_filters` | Optional[List[[DeviceConfig](#deviceconfig)]] | Emission filters | | `emission_wavelength` | `Optional[int]` | Emission wavelength | -| `emission_wavelength_unit` | Optional[[SizeUnit](../aind_data_schema_models/units.md#sizeunit)] | Emission wavelength unit | +| `emission_wavelength_unit` | Optional[[SizeUnit](../biodata_models/units.md#sizeunit)] | Emission wavelength unit | ### CoupledPlane @@ -57,10 +57,10 @@ Configuration of a pair of coupled imaging plane | `coupled_plane_index` | `int` | Coupled plane index (Plane index of the coupled plane) | | `power_ratio` | `float` | Power ratio | | `depth` | `float` | Depth | -| `depth_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Depth unit | +| `depth_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Depth unit | | `power` | `float` | Power | -| `power_unit` | [PowerUnit](../aind_data_schema_models/units.md#powerunit) | Power unit | -| `targeted_structure` | [BrainAtlas](../aind_data_schema_models/brain_atlas.md#ccfv3) | Targeted structure | +| `power_unit` | [PowerUnit](../biodata_models/units.md#powerunit) | Power unit | +| `targeted_structure` | [BrainAtlas](../biodata_models/brain_atlas.md#ccfv3) | Targeted structure | ### DetectorConfig @@ -70,14 +70,14 @@ Configuration of detector settings | Field | Type | Title (Description) | |-------|------|-------------| | `exposure_time` | `Optional[float]` | Exposure time | -| `exposure_time_unit` | [TimeUnit](../aind_data_schema_models/units.md#timeunit) | Exposure time unit | +| `exposure_time_unit` | [TimeUnit](../biodata_models/units.md#timeunit) | Exposure time unit | | `trigger_type` | [TriggerType](#triggertype) | Trigger type | | `compression` | Optional[[Code](identifiers.md#code)] | Compression (Compression algorithm used during acquisition) | | `crop_offset_x` | `Optional[int]` | Crop offset x (Overrides any value set in the Instrument metadata) | | `crop_offset_y` | `Optional[int]` | Crop offset y (Overrides any value set in the Instrument metadata) | | `crop_width` | `Optional[int]` | Crop width (Overrides any value set in the Instrument metadata) | | `crop_height` | `Optional[int]` | Crop height (Overrides any value set in the Instrument metadata) | -| `crop_unit` | Optional[[SizeUnit](../aind_data_schema_models/units.md#sizeunit)] | Crop size unit | +| `crop_unit` | Optional[[SizeUnit](../biodata_models/units.md#sizeunit)] | Crop size unit | | `device_name` | `str` | Device name (Must match a device defined in the instrument.json) | @@ -121,7 +121,7 @@ Description of an N-D image | Field | Type | Title (Description) | |-------|------|-------------| | `channel_name` | `str` | Channel name | -| `dimensions_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Dimensions unit | +| `dimensions_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Dimensions unit | | `image_to_acquisition_transform` | List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)] | Image to acquisition transform (Position, rotation, and scale of the image. Note that depth should be in the planes.) | | `dimensions` | Optional[[Scale](coordinates.md#scale) or [Rectangle](geometry.md#rectangle)] | Dimensions | @@ -134,11 +134,11 @@ Description of an N-D image acquired with SPIM |-------|------|-------------| | `file_name` | `AssetPath` | File name | | `imaging_angle` | `int` | Imaging angle (Angle of the detector relative to the image plane relative to perpendicular) | -| `imaging_angle_unit` | [AngleUnit](../aind_data_schema_models/units.md#angleunit) | Imaging angle unit | +| `imaging_angle_unit` | [AngleUnit](../biodata_models/units.md#angleunit) | Imaging angle unit | | `image_start_time` | `Optional[datetime (timezone-aware)]` | Image acquisition start time | | `image_end_time` | `Optional[datetime (timezone-aware)]` | Image acquisition end time | | `channel_name` | `str` | Channel name | -| `dimensions_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Dimensions unit | +| `dimensions_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Dimensions unit | | `image_to_acquisition_transform` | List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)] | Image to acquisition transform (Position, rotation, and scale of the image. Note that depth should be in the planes.) | | `dimensions` | Optional[[Scale](coordinates.md#scale) or [Rectangle](geometry.md#rectangle)] | Dimensions | @@ -163,7 +163,7 @@ Configuration of immersion medium | Field | Type | Title (Description) | |-------|------|-------------| -| `medium` | [ImmersionMedium](../aind_data_schema_models/devices.md#immersionmedium) | Immersion medium | +| `medium` | [ImmersionMedium](../biodata_models/devices.md#immersionmedium) | Immersion medium | | `refractive_index` | `float` | Index of refraction | @@ -175,7 +175,7 @@ Description of an interleaved image sampling strategy |-------|------|-------------| | `image_index_sequence` | `List[int]` | Interleaving sequence | | `frame_rate` | `float` | Frame rate | -| `frame_rate_unit` | [FrequencyUnit](../aind_data_schema_models/units.md#frequencyunit) | Frame rate unit | +| `frame_rate_unit` | [FrequencyUnit](../biodata_models/units.md#frequencyunit) | Frame rate unit | ### JoystickConfig @@ -195,9 +195,9 @@ Configuration of laser settings in an acquisition | Field | Type | Title (Description) | |-------|------|-------------| | `wavelength` | `int` | Wavelength (nm) | -| `wavelength_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Wavelength unit | +| `wavelength_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Wavelength unit | | `power` | `Optional[float]` | Excitation power | -| `power_unit` | Optional[[PowerUnit](../aind_data_schema_models/units.md#powerunit)] | Excitation power unit | +| `power_unit` | Optional[[PowerUnit](../biodata_models/units.md#powerunit)] | Excitation power unit | | `power_measured_at` | `Optional[str]` | Power measurement location (For example: objective, patch cable, etc) | | `device_name` | `str` | Device name (Must match a device defined in the instrument.json) | @@ -211,8 +211,8 @@ Lick spout acquisition information | `solution` | [Liquid](#liquid) | Solution | | `solution_valence` | [Valence](#valence) | Valence | | `volume` | `float` | Volume | -| `volume_unit` | [VolumeUnit](../aind_data_schema_models/units.md#volumeunit) | Volume unit | -| `relative_position` | List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)] | Initial relative position | +| `volume_unit` | [VolumeUnit](../biodata_models/units.md#volumeunit) | Volume unit | +| `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Initial relative position | | `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Entry coordinate, depth, and rotation in the Acquisition.global_coordinate_system) | @@ -227,7 +227,7 @@ Configuration of LED settings | Field | Type | Title (Description) | |-------|------|-------------| | `power` | `Optional[float]` | Excitation power | -| `power_unit` | Optional[[PowerUnit](../aind_data_schema_models/units.md#powerunit)] | Excitation power unit | +| `power_unit` | Optional[[PowerUnit](../biodata_models/units.md#powerunit)] | Excitation power unit | | `power_measured_at` | `Optional[str]` | Power measurement location (For example: objective, patch cable, etc) | | `device_name` | `str` | Device name (Must match a device defined in the instrument.json) | @@ -254,7 +254,7 @@ Configuration for a camera used in a New Scale modular insertion system | `detector_config` | [DetectorConfig](#detectorconfig) | Detector configuration | | `module` | [MISModuleConfig](#mismoduleconfig) | Module | | `device_name` | `str` | Device name (Must match a device defined in the instrument.json) | -| `relative_position` | List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)] | Relative position | +| `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Relative position | | `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Position and orientation of the device in the instrument global coordinate system) | @@ -269,7 +269,7 @@ Modular insertion system module configuration | `arc_angle` | `float` | Arc Angle (deg) | | `module_angle` | `float` | Module Angle (deg) | | `rotation_angle` | `Optional[float]` | Rotation Angle (deg) | -| `angle_unit` | [AngleUnit](../aind_data_schema_models/units.md#angleunit) | Angle unit | +| `angle_unit` | [AngleUnit](../biodata_models/units.md#angleunit) | Angle unit | | `notes` | `Optional[str]` | Notes | @@ -294,14 +294,14 @@ Configuration of a 3D scan | `pulse_sequence_type` | [PulseSequenceType](#pulsesequencetype) | Scan sequence (BIDS PulseSequenceType) | | `mr_acquisition_type` | [MRAcquisitionType](#mracquisitiontype) | MR acquisition type (BIDS MRAcquisitionType / DICOM Tag 0018,0023) | | `resolution` | Optional[[Scale](coordinates.md#scale)] | Voxel resolution | -| `resolution_unit` | Optional[[SizeUnit](../aind_data_schema_models/units.md#sizeunit)] | Voxel resolution unit | +| `resolution_unit` | Optional[[SizeUnit](../biodata_models/units.md#sizeunit)] | Voxel resolution unit | | `additional_scan_parameters` | `Optional[dict]` | Parameters | | `rare_factor` | `Optional[int]` | RARE factor | | `echo_time` | `decimal.Decimal` | Echo time (s) (BIDS EchoTime / DICOM Tag 0018,0081) | -| `echo_time_unit` | [TimeUnit](../aind_data_schema_models/units.md#timeunit) | Echo time unit | +| `echo_time_unit` | [TimeUnit](../biodata_models/units.md#timeunit) | Echo time unit | | `effective_echo_time` | `Optional[decimal.Decimal]` | Effective echo time | | `repetition_time` | `decimal.Decimal` | Repetition time (s) (BIDS RepetitionTime / DICOM Tag 0018,0080) | -| `repetition_time_unit` | [TimeUnit](../aind_data_schema_models/units.md#timeunit) | Repetition time unit | +| `repetition_time_unit` | [TimeUnit](../biodata_models/units.md#timeunit) | Repetition time unit | | `scanner_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Scanner coordinate system | | `affine_transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | MRI Scan affine transform (NIFTI sform/qform, Bruker vc_transform, etc) | | `subject_position` | [SubjectPosition](#subjectposition) | Subject position | @@ -353,7 +353,7 @@ Configuration of a channel in an olfactometer | `channel_index` | `int` | Channel index | | `odorant` | `str` | Odorant | | `dilution` | `decimal.Decimal` | Odorant dilution | -| `dilution_unit` | [ConcentrationUnit](../aind_data_schema_models/units.md#concentrationunit) | Dilution unit | +| `dilution_unit` | [ConcentrationUnit](../biodata_models/units.md#concentrationunit) | Dilution unit | ### OlfactometerConfig @@ -384,7 +384,7 @@ Description of an N-D image acquired in a specific imaging plane |-------|------|-------------| | `planes` | List[[Plane](#plane) or [CoupledPlane](#coupledplane) or [Slap2Plane](#slap2plane)] | Imaging planes | | `channel_name` | `str` | Channel name | -| `dimensions_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Dimensions unit | +| `dimensions_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Dimensions unit | | `image_to_acquisition_transform` | List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)] | Image to acquisition transform (Position, rotation, and scale of the image. Note that depth should be in the planes.) | | `dimensions` | Optional[[Scale](coordinates.md#scale) or [Rectangle](geometry.md#rectangle)] | Dimensions | @@ -399,10 +399,10 @@ Description of a stack of images acquired in a specific imaging plane | `depth_start` | `float` | Starting depth | | `depth_end` | `float` | Ending depth | | `depth_step` | `float` | Step size | -| `depth_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Depth unit | +| `depth_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Depth unit | | `planes` | List[[Plane](#plane) or [CoupledPlane](#coupledplane) or [Slap2Plane](#slap2plane)] | Imaging planes | | `channel_name` | `str` | Channel name | -| `dimensions_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Dimensions unit | +| `dimensions_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Dimensions unit | | `image_to_acquisition_transform` | List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)] | Image to acquisition transform (Position, rotation, and scale of the image. Note that depth should be in the planes.) | | `dimensions` | Optional[[Scale](coordinates.md#scale) or [Rectangle](geometry.md#rectangle)] | Dimensions | @@ -414,10 +414,10 @@ Configuration of an imaging plane | Field | Type | Title (Description) | |-------|------|-------------| | `depth` | `float` | Depth | -| `depth_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Depth unit | +| `depth_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Depth unit | | `power` | `float` | Power | -| `power_unit` | [PowerUnit](../aind_data_schema_models/units.md#powerunit) | Power unit | -| `targeted_structure` | [BrainAtlas](../aind_data_schema_models/brain_atlas.md#ccfv3) | Targeted structure | +| `power_unit` | [PowerUnit](../biodata_models/units.md#powerunit) | Power unit | +| `targeted_structure` | [BrainAtlas](../biodata_models/brain_atlas.md#ccfv3) | Targeted structure | ### PowerFunction @@ -438,8 +438,8 @@ Configuration for a device inserted into a brain | Field | Type | Title (Description) | |-------|------|-------------| -| `primary_targeted_structure` | [BrainAtlas](../aind_data_schema_models/brain_atlas.md#ccfv3) | Targeted structure | -| `other_targeted_structure` | Optional[List[[BrainAtlas](../aind_data_schema_models/brain_atlas.md#ccfv3)]] | Other targeted structure | +| `primary_targeted_structure` | [BrainAtlas](../biodata_models/brain_atlas.md#ccfv3) | Targeted structure | +| `other_targeted_structure` | Optional[List[[BrainAtlas](../biodata_models/brain_atlas.md#ccfv3)]] | Other targeted structure | | `atlas_coordinate` | Optional[[AtlasCoordinate](coordinates.md#atlascoordinate)] | Target coordinate in Acquisition.atlas | | `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system (Device coordinate system, defines un-rotated probe's orientation relative to the Acquisition.coordinate_system) | | `local_coordinate_system` | [CoordinateSystem](coordinates.md#coordinatesystem) | Device local coordinate system (Device coordinate system, defines un-rotated probe's orientation relative to the Acquisition.global_coordinate_system) | @@ -479,7 +479,7 @@ Description of an image sampling strategy | Field | Type | Title (Description) | |-------|------|-------------| | `frame_rate` | `float` | Frame rate | -| `frame_rate_unit` | [FrequencyUnit](../aind_data_schema_models/units.md#frequencyunit) | Frame rate unit | +| `frame_rate_unit` | [FrequencyUnit](../biodata_models/units.md#frequencyunit) | Frame rate unit | ### Slap2Plane @@ -493,14 +493,14 @@ Configuration of a SLAP2 imaging plane (all imaging ROIs of a specific acquisiti | `fov_index` | `Optional[int]` | Field of view index (For FOVs that are imaged multiple times, assign a shared index to each instance of the FOV) | | `structure_types` | Optional[List[[NeuronStructure](#neuronstructure)]] | Structure type | | `y_dilations` | `List[int]` | Unique Y dilations | -| `y_dilations_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Dilation unit | +| `y_dilations_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Dilation unit | | `frame_rates` | `List[float]` | Unique frame rates | -| `frame_rates_unit` | [FrequencyUnit](../aind_data_schema_models/units.md#frequencyunit) | Frame rate unit | +| `frame_rates_unit` | [FrequencyUnit](../biodata_models/units.md#frequencyunit) | Frame rate unit | | `depth` | `float` | Depth | -| `depth_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Depth unit | +| `depth_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Depth unit | | `power` | `float` | Power | -| `power_unit` | [PowerUnit](../aind_data_schema_models/units.md#powerunit) | Power unit | -| `targeted_structure` | [BrainAtlas](../aind_data_schema_models/brain_atlas.md#ccfv3) | Targeted structure | +| `power_unit` | [PowerUnit](../biodata_models/units.md#powerunit) | Power unit | +| `targeted_structure` | [BrainAtlas](../biodata_models/brain_atlas.md#ccfv3) | Targeted structure | ### SpeakerConfig @@ -510,7 +510,7 @@ Configuration of auditory speaker configuration | Field | Type | Title (Description) | |-------|------|-------------| | `volume` | `Optional[float]` | Volume (dB) | -| `volume_unit` | Optional[[SoundIntensityUnit](../aind_data_schema_models/units.md#soundintensityunit)] | Volume unit | +| `volume_unit` | Optional[[SoundIntensityUnit](../biodata_models/units.md#soundintensityunit)] | Volume unit | | `device_name` | `str` | Device name (Must match a device defined in the instrument.json) | @@ -523,7 +523,7 @@ Description of a stack image sampling strategy | `image_repeats` | `int` | Number of image repeats | | `stack_repeats` | `int` | Number of stack repeats | | `frame_rate` | `float` | Frame rate | -| `frame_rate_unit` | [FrequencyUnit](../aind_data_schema_models/units.md#frequencyunit) | Frame rate unit | +| `frame_rate_unit` | [FrequencyUnit](../biodata_models/units.md#frequencyunit) | Frame rate unit | ### SubjectPosition diff --git a/docs/source/components/coordinates.md b/docs/source/components/coordinates.md index 263e7fe27..6652976c5 100644 --- a/docs/source/components/coordinates.md +++ b/docs/source/components/coordinates.md @@ -17,15 +17,15 @@ Definition an atlas | Field | Type | Title (Description) | |-------|------|-------------| -| `name` | [AtlasName](../aind_data_schema_models/atlas.md#atlasname) | Atlas name | +| `name` | [AtlasName](../biodata_models/atlas.md#atlasname) | Atlas name | | `version` | `str` | Atlas version | | `size` | `List[float]` | Size | -| `size_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Size unit | +| `size_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Size unit | | `resolution` | `List[float]` | Resolution | -| `resolution_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Resolution unit | -| `origin` | [MouseAnatomyModel](../aind_data_schema_models/external.md#mouseanatomymodel) | Origin (Defines the position of (0,0,0) in the coordinate system) | +| `resolution_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Resolution unit | +| `origin` | [MouseAnatomyModel](../biodata_models/external.md#mouseanatomymodel) | Origin (Defines the position of (0,0,0) in the coordinate system) | | `axes` | List[[Axis](#axis)] | Axis names (Axis names and directions) | -| `axis_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Size unit | +| `axis_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Size unit | | `handedness` | Optional[[Handedness](#handedness)] | Handedness (Whether the coordinate system is right-handed or left-handed) | @@ -46,8 +46,8 @@ Linked direction and axis | Field | Type | Title (Description) | |-------|------|-------------| -| `name` | [AxisName](../aind_data_schema_models/coordinates.md#axisname) | Axis name (Note: axis names do not influence order or orientation) | -| `direction` | [Direction](../aind_data_schema_models/coordinates.md#direction) | Direction (Direction of positive values along the axis) | +| `name` | [AxisName](../biodata_models/coordinates.md#axisname) | Axis name (Note: axis names do not influence order or orientation) | +| `direction` | [Direction](../biodata_models/coordinates.md#direction) | Direction (Direction of positive values along the axis) | ### CoordinateSystem @@ -57,9 +57,9 @@ Definition of a coordinate system | Field | Type | Title (Description) | |-------|------|-------------| | `name` | `str` | Name (Convention is to use _ etc) | -| `origin` | [MouseAnatomyModel](../aind_data_schema_models/external.md#mouseanatomymodel) | Origin (Defines the position of (0,0,0) in the coordinate system) | +| `origin` | [MouseAnatomyModel](../biodata_models/external.md#mouseanatomymodel) | Origin (Defines the position of (0,0,0) in the coordinate system) | | `axes` | List[[Axis](#axis)] | Axis names (Axis names and directions) | -| `axis_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Size unit | +| `axis_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Size unit | | `handedness` | Optional[[Handedness](#handedness)] | Handedness (Whether the coordinate system is right-handed or left-handed) | @@ -101,7 +101,7 @@ Rotations should be applied as Euler angles in the specified axis order. | Field | Type | Title (Description) | |-------|------|-------------| | `angles` | `List[float]` | Angles (Right-hand rule, positive angles rotate CCW) | -| `angles_unit` | [AngleUnit](../aind_data_schema_models/units.md#angleunit) | Angle unit | +| `angles_unit` | [AngleUnit](../biodata_models/units.md#angleunit) | Angle unit | | `axis_order` | `str` | Axis order (Order of rotation axes as a string (e.g. 'xyz', 'zyx'). Must match the length of angles.) | | `reference_coordinate_system` | [ReferenceCoordinateSystem](#referencecoordinatesystem) | Reference coordinate system (Whether to rotate around the global or local coordinate system axes) | | `rotation_direction` | [RotationDirection](#rotationdirection) | Rotation direction (Right-hand rule: positive angles rotate CCW when looking toward the origin from the positive axis) | diff --git a/docs/source/components/devices.md b/docs/source/components/devices.md index 611052274..9b62e0e72 100644 --- a/docs/source/components/devices.md +++ b/docs/source/components/devices.md @@ -8,10 +8,10 @@ Description of additional devices | Field | Type | Title (Description) | |-------|------|-------------| -| `imaging_device_type` | [ImagingDeviceType](../aind_data_schema_models/devices.md#imagingdevicetype) | Device type | +| `imaging_device_type` | [ImagingDeviceType](../biodata_models/devices.md#imagingdevicetype) | Device type | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -24,10 +24,10 @@ Description of an air puff device | Field | Type | Title (Description) | |-------|------|-------------| | `diameter` | `float` | Spout diameter | -| `diameter_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Size unit | +| `diameter_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Size unit | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -40,12 +40,12 @@ Description of an arena | Field | Type | Title (Description) | |-------|------|-------------| | `size` | [Scale](coordinates.md#scale) | **[DEPRECATED]** Use shape. 3D Size | -| `size_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | **[DEPRECATED]** Use shape. Size unit | +| `size_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | **[DEPRECATED]** Use shape. Size unit | | `shape` | Optional[[Rectangle](geometry.md#rectangle) or [Circle](geometry.md#circle)] | Shape of the arena | | `objects_in_arena` | List[[Device](#device)] | Objects in arena | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -57,32 +57,32 @@ Camera Detector | Field | Type | Title (Description) | |-------|------|-------------| -| `detector_type` | [DetectorType](../aind_data_schema_models/devices.md#detectortype) | | -| `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer | -| `data_interface` | [DataInterface](../aind_data_schema_models/devices.md#datainterface) | Data interface | -| `cooling` | [Cooling](../aind_data_schema_models/devices.md#cooling) | Cooling | +| `detector_type` | [DetectorType](../biodata_models/devices.md#detectortype) | | +| `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | Manufacturer | +| `data_interface` | [DataInterface](../biodata_models/devices.md#datainterface) | Data interface | +| `cooling` | [Cooling](../biodata_models/devices.md#cooling) | Cooling | | `frame_rate` | `Optional[decimal.Decimal]` | Frame rate (Hz) (Frame rate being used) | -| `frame_rate_unit` | Optional[[FrequencyUnit](../aind_data_schema_models/units.md#frequencyunit)] | Frame rate unit | -| `immersion` | Optional[[ImmersionMedium](../aind_data_schema_models/devices.md#immersionmedium)] | Immersion | -| `chroma` | Optional[[CameraChroma](../aind_data_schema_models/devices.md#camerachroma)] | Camera chroma | +| `frame_rate_unit` | Optional[[FrequencyUnit](../biodata_models/units.md#frequencyunit)] | Frame rate unit | +| `immersion` | Optional[[ImmersionMedium](../biodata_models/devices.md#immersionmedium)] | Immersion | +| `chroma` | Optional[[CameraChroma](../biodata_models/devices.md#camerachroma)] | Camera chroma | | `sensor_width` | `Optional[int]` | Width of the sensor (pixels) | | `sensor_height` | `Optional[int]` | Height of the sensor (pixels) | -| `size_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Size unit | +| `size_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Size unit | | `sensor_format` | `Optional[str]` | Sensor format | | `sensor_format_unit` | `Optional[str]` | Sensor format unit | | `bit_depth` | `Optional[int]` | Bit depth | -| `bin_mode` | [BinMode](../aind_data_schema_models/devices.md#binmode) | Detector binning mode | +| `bin_mode` | [BinMode](../biodata_models/devices.md#binmode) | Detector binning mode | | `bin_width` | `Optional[int]` | Bin width | | `bin_height` | `Optional[int]` | Bin height | -| `bin_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Bin size unit | +| `bin_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Bin size unit | | `gain` | `Optional[decimal.Decimal]` | Gain | | `crop_offset_x` | `Optional[int]` | Crop offset x | | `crop_offset_y` | `Optional[int]` | Crop offset y | | `crop_width` | `Optional[int]` | Crop width | | `crop_height` | `Optional[int]` | Crop width | -| `crop_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Crop size unit | +| `crop_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Crop size unit | | `recording_software` | Optional[[Software](identifiers.md#software)] | Recording software | -| `driver` | Optional[[DeviceDriver](../aind_data_schema_models/devices.md#devicedriver)] | Driver | +| `driver` | Optional[[DeviceDriver](../biodata_models/devices.md#devicedriver)] | Driver | | `driver_version` | `Optional[str]` | Driver version | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | @@ -98,11 +98,11 @@ Named assembly of a camera and lens (and optionally a filter) | Field | Type | Title (Description) | |-------|------|-------------| | `name` | `str` | Camera assembly name | -| `target` | [CameraTarget](../aind_data_schema_models/devices.md#cameratarget) | Camera target | +| `target` | [CameraTarget](../biodata_models/devices.md#cameratarget) | Camera target | | `camera` | [Camera](#camera) | Camera | | `lens` | [Lens](#lens) | Lens | | `filter` | Optional[[Filter](#filter)] | Filter | -| `relative_position` | List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)] | Relative position | +| `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Relative position | | `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Position and orientation of the device in the instrument global coordinate system) | @@ -119,7 +119,7 @@ Description of a catheter device | `catheter_port` | [CatheterPort](#catheterport) | Catheter port | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -166,7 +166,7 @@ Description of a computer | `operating_system` | `Optional[str]` | Operating system | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -179,11 +179,11 @@ Named input or output channel on a DAQ device | Field | Type | Title (Description) | |-------|------|-------------| | `channel_name` | `str` | DAQ channel name | -| `channel_type` | [DaqChannelType](../aind_data_schema_models/devices.md#daqchanneltype) | DAQ channel type | +| `channel_type` | [DaqChannelType](../biodata_models/devices.md#daqchanneltype) | DAQ channel type | | `port` | `Optional[int]` | DAQ port | | `channel_index` | `Optional[int]` | **[DEPRECATED]** Use DAQChannel.port instead. DAQ channel index | | `sample_rate` | `Optional[decimal.Decimal]` | DAQ channel sample rate (Hz) | -| `sample_rate_unit` | Optional[[FrequencyUnit](../aind_data_schema_models/units.md#frequencyunit)] | Sample rate unit | +| `sample_rate_unit` | Optional[[FrequencyUnit](../biodata_models/units.md#frequencyunit)] | Sample rate unit | | `event_based_sampling` | `Optional[bool]` | Set to true if DAQ channel is sampled at irregular intervals | @@ -193,8 +193,8 @@ Data acquisition device containing multiple I/O channels | Field | Type | Title (Description) | |-------|------|-------------| -| `data_interface` | [DataInterface](../aind_data_schema_models/devices.md#datainterface) | Type of connection to PC | -| `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer | +| `data_interface` | [DataInterface](../biodata_models/devices.md#datainterface) | Type of connection to PC | +| `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | Manufacturer | | `channels` | List[[DAQChannel](#daqchannel)] | DAQ channels | | `firmware_version` | `Optional[str]` | Firmware version | | `hardware_version` | `Optional[str]` | Hardware version | @@ -211,32 +211,32 @@ Description of a generic detector | Field | Type | Title (Description) | |-------|------|-------------| -| `detector_type` | [DetectorType](../aind_data_schema_models/devices.md#detectortype) | Detector Type | -| `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer | -| `data_interface` | [DataInterface](../aind_data_schema_models/devices.md#datainterface) | Data interface | -| `cooling` | [Cooling](../aind_data_schema_models/devices.md#cooling) | Cooling | +| `detector_type` | [DetectorType](../biodata_models/devices.md#detectortype) | Detector Type | +| `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | Manufacturer | +| `data_interface` | [DataInterface](../biodata_models/devices.md#datainterface) | Data interface | +| `cooling` | [Cooling](../biodata_models/devices.md#cooling) | Cooling | | `frame_rate` | `Optional[decimal.Decimal]` | Frame rate (Hz) (Frame rate being used) | -| `frame_rate_unit` | Optional[[FrequencyUnit](../aind_data_schema_models/units.md#frequencyunit)] | Frame rate unit | -| `immersion` | Optional[[ImmersionMedium](../aind_data_schema_models/devices.md#immersionmedium)] | Immersion | -| `chroma` | Optional[[CameraChroma](../aind_data_schema_models/devices.md#camerachroma)] | Camera chroma | +| `frame_rate_unit` | Optional[[FrequencyUnit](../biodata_models/units.md#frequencyunit)] | Frame rate unit | +| `immersion` | Optional[[ImmersionMedium](../biodata_models/devices.md#immersionmedium)] | Immersion | +| `chroma` | Optional[[CameraChroma](../biodata_models/devices.md#camerachroma)] | Camera chroma | | `sensor_width` | `Optional[int]` | Width of the sensor (pixels) | | `sensor_height` | `Optional[int]` | Height of the sensor (pixels) | -| `size_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Size unit | +| `size_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Size unit | | `sensor_format` | `Optional[str]` | Sensor format | | `sensor_format_unit` | `Optional[str]` | Sensor format unit | | `bit_depth` | `Optional[int]` | Bit depth | -| `bin_mode` | [BinMode](../aind_data_schema_models/devices.md#binmode) | Detector binning mode | +| `bin_mode` | [BinMode](../biodata_models/devices.md#binmode) | Detector binning mode | | `bin_width` | `Optional[int]` | Bin width | | `bin_height` | `Optional[int]` | Bin height | -| `bin_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Bin size unit | +| `bin_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Bin size unit | | `gain` | `Optional[decimal.Decimal]` | Gain | | `crop_offset_x` | `Optional[int]` | Crop offset x | | `crop_offset_y` | `Optional[int]` | Crop offset y | | `crop_width` | `Optional[int]` | Crop width | | `crop_height` | `Optional[int]` | Crop width | -| `crop_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Crop size unit | +| `crop_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Crop size unit | | `recording_software` | Optional[[Software](identifiers.md#software)] | Recording software | -| `driver` | Optional[[DeviceDriver](../aind_data_schema_models/devices.md#devicedriver)] | Driver | +| `driver` | Optional[[DeviceDriver](../biodata_models/devices.md#devicedriver)] | Driver | | `driver_version` | `Optional[str]` | Driver version | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | @@ -253,7 +253,7 @@ Generic device |-------|------|-------------| | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -265,7 +265,7 @@ Position class for devices | Field | Type | Title (Description) | |-------|------|-------------| -| `relative_position` | List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)] | Relative position | +| `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Relative position | | `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Position and orientation of the device in the instrument global coordinate system) | @@ -281,15 +281,15 @@ Description of a Digital Micromirror Device (DMD) | `invert_pixel_values` | `bool` | Invert pixel values | | `motion_padding_x` | `int` | Motion padding X (pixels) | | `motion_padding_y` | `int` | Motion padding Y (pixels) | -| `padding_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Padding unit | +| `padding_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Padding unit | | `pixel_size` | `float` | DMD Pixel size (fraction of line scan period) | | `start_phase` | `float` | DMD Start phase (fraction of line scan period) | | `dmd_curtain` | `List[float]` | DMD Curtain (fraction of DMD scan period) | | `line_shear_anchors` | `List[float]` | Line shear anchors at top and bottom of field of view (pixels) | -| `line_shear_anchors_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Line shear anchors unit | +| `line_shear_anchors_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Line shear anchors unit | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -302,15 +302,15 @@ Description of a running disc (i.e. MindScope Disc) | Field | Type | Title (Description) | |-------|------|-------------| | `radius` | `decimal.Decimal` | Radius (cm) | -| `radius_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | radius unit | -| `output` | Optional[[DaqChannelType](../aind_data_schema_models/devices.md#daqchanneltype)] | (analog or digital electronics) | +| `radius_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | radius unit | +| `output` | Optional[[DaqChannelType](../biodata_models/devices.md#daqchanneltype)] | (analog or digital electronics) | | `encoder` | `Optional[str]` | Encoder (Encoder hardware type) | | `decoder` | `Optional[str]` | Decoder (Decoder chip type) | | `encoder_firmware` | Optional[[Software](identifiers.md#software)] | Encoder firmware (Firmware to read from decoder chip counts) | | `surface_material` | `Optional[str]` | Surface material | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -323,7 +323,7 @@ Description of an enclosure | Field | Type | Title (Description) | |-------|------|-------------| | `size` | [Scale](coordinates.md#scale) | **[DEPRECATED]** Use shape. Size | -| `size_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | **[DEPRECATED]** Use shape. Size unit | +| `size_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | **[DEPRECATED]** Use shape. Size unit | | `shape` | Optional[[Rectangle](geometry.md#rectangle) or [Circle](geometry.md#circle)] | Shape of the enclosure | | `internal_material` | `Optional[str]` | Internal material | | `external_material` | `str` | External material | @@ -332,7 +332,7 @@ Description of an enclosure | `air_filtration` | `bool` | Air filtration | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -355,11 +355,11 @@ Probe used in an extracellular ephys experiment | Field | Type | Title (Description) | |-------|------|-------------| -| `probe_model` | [ProbeModel](../aind_data_schema_models/devices.md#probemodel) | Probe model | +| `probe_model` | [ProbeModel](../biodata_models/devices.md#probemodel) | Probe model | | `headstage` | Optional[[Device](#device)] | Headstage for this probe | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -387,7 +387,7 @@ Description of a patch cord | `photobleaching_date` | `Optional[datetime.date]` | Photobleaching date | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -400,15 +400,15 @@ Description of a fiber optic probe | Field | Type | Title (Description) | |-------|------|-------------| | `core_diameter` | `decimal.Decimal` | Core diameter (um) | -| `core_diameter_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Core diameter unit | +| `core_diameter_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Core diameter unit | | `numerical_aperture` | `decimal.Decimal` | Numerical aperture | -| `ferrule_material` | Optional[[FerruleMaterial](../aind_data_schema_models/devices.md#ferrulematerial)] | Ferrule material | +| `ferrule_material` | Optional[[FerruleMaterial](../biodata_models/devices.md#ferrulematerial)] | Ferrule material | | `active_length` | `Optional[decimal.Decimal]` | Active length (mm) (Length of taper) | | `total_length` | `decimal.Decimal` | Total length (mm) | -| `length_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Length unit | +| `length_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Length unit | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -420,12 +420,12 @@ Filter used in a light path | Field | Type | Title (Description) | |-------|------|-------------| -| `filter_type` | [FilterType](../aind_data_schema_models/devices.md#filtertype) | Type of filter | -| `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer | +| `filter_type` | [FilterType](../biodata_models/devices.md#filtertype) | Type of filter | +| `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | Manufacturer | | `cut_off_wavelength` | `Optional[int]` | Cut-off wavelength (nm) | | `cut_on_wavelength` | `Optional[int]` | Cut-on wavelength (nm) | | `center_wavelength` | `int or List[int] or NoneType` | Center wavelength (nm) (Single wavelength or list of wavelengths for MULTIBAND or MULTI_NOTCH filters) | -| `wavelength_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Wavelength unit | +| `wavelength_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Wavelength unit | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | | `model` | `Optional[str]` | Model | @@ -439,11 +439,11 @@ DAQ that uses the Harp protocol for synchronization and data transmission | Field | Type | Title (Description) | |-------|------|-------------| -| `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer | -| `harp_device_type` | [HarpDeviceType](../aind_data_schema_models/harp_types.md#harpdevicetype) | Type of Harp device | +| `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | Manufacturer | +| `harp_device_type` | [HarpDeviceType](../biodata_models/harp_types.md#harpdevicetype) | Type of Harp device | | `core_version` | `Optional[str]` | Core version | | `tag_version` | `Optional[str]` | Tag version | -| `data_interface` | [DataInterface](../aind_data_schema_models/devices.md#datainterface) | Data interface | +| `data_interface` | [DataInterface](../biodata_models/devices.md#datainterface) | Data interface | | `is_clock_generator` | `bool` | Is Clock Generator | | `channels` | List[[DAQChannel](#daqchannel)] | DAQ channels | | `firmware_version` | `Optional[str]` | Firmware version | @@ -463,12 +463,12 @@ Description of a Lamp lightsource |-------|------|-------------| | `wavelength_min` | `Optional[int]` | Wavelength minimum (nm) | | `wavelength_max` | `Optional[int]` | Wavelength maximum (nm) | -| `wavelength_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Wavelength unit | +| `wavelength_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Wavelength unit | | `temperature` | `Optional[int]` | Temperature (K) | -| `temperature_unit` | Optional[[TemperatureUnit](../aind_data_schema_models/units.md#temperatureunit)] | Temperature unit | +| `temperature_unit` | Optional[[TemperatureUnit](../biodata_models/units.md#temperatureunit)] | Temperature unit | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -480,10 +480,10 @@ Laser module with a specific wavelength (may be a sub-component of a larger asse | Field | Type | Title (Description) | |-------|------|-------------| -| `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer | +| `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | Manufacturer | | `wavelength` | `int` | Wavelength (nm) | -| `wavelength_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Wavelength unit | -| `coupling` | Optional[[Coupling](../aind_data_schema_models/devices.md#coupling)] | Coupling | +| `wavelength_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Wavelength unit | +| `coupling` | Optional[[Coupling](../biodata_models/devices.md#coupling)] | Coupling | | `coupling_efficiency` | `Optional[decimal.Decimal]` | Coupling efficiency (percent) | | `coupling_efficiency_unit` | `"percent"` | Coupling efficiency unit | | `name` | `str` | Device name | @@ -512,7 +512,7 @@ Lens | Field | Type | Title (Description) | |-------|------|-------------| -| `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer | +| `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | Manufacturer | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | | `model` | `Optional[str]` | Model | @@ -527,13 +527,13 @@ Description of a lick spout | Field | Type | Title (Description) | |-------|------|-------------| | `spout_diameter` | `decimal.Decimal` | Spout diameter (mm) | -| `spout_diameter_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Spout diameter unit | +| `spout_diameter_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Spout diameter unit | | `solenoid_valve` | [Device](#device) | Solenoid valve | | `lick_sensor` | [Device](#device) or [HarpDevice](#harpdevice) | Lick sensor | -| `lick_sensor_type` | Optional[[LickSensorType](../aind_data_schema_models/devices.md#licksensortype)] | Lick sensor type | +| `lick_sensor_type` | Optional[[LickSensorType](../biodata_models/devices.md#licksensortype)] | Lick sensor type | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -568,11 +568,11 @@ Description of a Light Emitting Diode (LED) device | Field | Type | Title (Description) | |-------|------|-------------| -| `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer | +| `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | Manufacturer | | `wavelength` | `int` | Wavelength (nm) | -| `wavelength_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Wavelength unit | +| `wavelength_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Wavelength unit | | `bandwidth` | `Optional[int]` | Bandwidth (FWHM) | -| `bandwidth_unit` | Optional[[SizeUnit](../aind_data_schema_models/units.md#sizeunit)] | Bandwidth unit | +| `bandwidth_unit` | Optional[[SizeUnit](../biodata_models/units.md#sizeunit)] | Bandwidth unit | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | | `model` | `Optional[str]` | Model | @@ -586,7 +586,7 @@ Manipulator used on a dome module | Field | Type | Title (Description) | |-------|------|-------------| -| `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer | +| `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | Manufacturer | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | | `model` | `Optional[str]` | Model | @@ -602,7 +602,7 @@ Description of a microscope |-------|------|-------------| | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -614,23 +614,23 @@ Description of visual display for visual stimuli | Field | Type | Title (Description) | |-------|------|-------------| -| `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer | +| `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | Manufacturer | | `refresh_rate` | `int` | Refresh rate (Hz) | | `width` | `int` | Width (pixels) | | `height` | `int` | Height (pixels) | -| `size_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Size unit | +| `size_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Size unit | | `viewing_distance` | `decimal.Decimal` | Viewing distance (cm) | -| `viewing_distance_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Viewing distance unit | +| `viewing_distance_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Viewing distance unit | | `contrast` | `Optional[int]` | Contrast (Monitor's contrast setting) | -| `contrast_unit` | Optional[[UnitlessUnit](../aind_data_schema_models/units.md#unitlessunit)] | Contrast unit | +| `contrast_unit` | Optional[[UnitlessUnit](../biodata_models/units.md#unitlessunit)] | Contrast unit | | `brightness` | `Optional[int]` | Brightness (Monitor's brightness setting) | -| `brightness_unit` | Optional[[UnitlessUnit](../aind_data_schema_models/units.md#unitlessunit)] | Brightness unit | +| `brightness_unit` | Optional[[UnitlessUnit](../biodata_models/units.md#unitlessunit)] | Brightness unit | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | -| `relative_position` | List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)] | Relative position | +| `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Relative position | | `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Position and orientation of the device in the instrument global coordinate system) | @@ -643,11 +643,11 @@ Description of motorized stage | Field | Type | Title (Description) | |-------|------|-------------| | `travel` | `decimal.Decimal` | Travel of device (mm) | -| `travel_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Travel unit | +| `travel_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Travel unit | | `firmware` | Optional[[Software](identifiers.md#software)] | Firmware | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -659,11 +659,11 @@ Description of a Myomatrix array | Field | Type | Title (Description) | |-------|------|-------------| -| `array_type` | [MyomatrixArrayType](../aind_data_schema_models/devices.md#myomatrixarraytype) | Array type | +| `array_type` | [MyomatrixArrayType](../biodata_models/devices.md#myomatrixarraytype) | Array type | | `threads` | List[[MyomatrixThread](#myomatrixthread)] | Array threads | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -675,9 +675,9 @@ Description of a contact on a myomatrix thread | Field | Type | Title (Description) | |-------|------|-------------| -| `body_part` | [MouseAnatomyModel](../aind_data_schema_models/external.md#mouseanatomymodel) | Body part of contact insertion (Use MouseBodyParts) | -| `relative_position` | [AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative) | Relative position (Position relative to procedures coordinate system) | -| `muscle` | [MouseAnatomyModel](../aind_data_schema_models/external.md#mouseanatomymodel) | Muscle of contact insertion (Use MouseEmgMuscles) | +| `body_part` | [MouseAnatomyModel](../biodata_models/external.md#mouseanatomymodel) | Body part of contact insertion (Use MouseBodyParts) | +| `relative_position` | [AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative) | Relative position (Position relative to procedures coordinate system) | +| `muscle` | [MouseAnatomyModel](../biodata_models/external.md#mouseanatomymodel) | Muscle of contact insertion (Use MouseEmgMuscles) | | `in_muscle` | `bool` | In muscle | @@ -687,7 +687,7 @@ Description of a thread of a myomatrix array | Field | Type | Title (Description) | |-------|------|-------------| -| `ground_electrode_location` | [MouseAnatomyModel](../aind_data_schema_models/external.md#mouseanatomymodel) | Location of ground electrode (Use GroundWireLocations) | +| `ground_electrode_location` | [MouseAnatomyModel](../biodata_models/external.md#mouseanatomymodel) | Location of ground electrode (Use GroundWireLocations) | | `contacts` | List[[MyomatrixContact](#myomatrixcontact)] | Contacts | @@ -701,8 +701,8 @@ PXI-based Neuropixels DAQ | `bsc_firmware_version` | `str` | Basestation connect board firmware | | `slot` | `int` | Slot number for this basestation | | `ports` | List[[ProbePort](#probeport)] | Basestation ports | -| `data_interface` | [DataInterface](../aind_data_schema_models/devices.md#datainterface) | | -| `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | | +| `data_interface` | [DataInterface](../biodata_models/devices.md#datainterface) | | +| `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | | | `channels` | List[[DAQChannel](#daqchannel)] | DAQ channels | | `firmware_version` | `Optional[str]` | Firmware version | | `hardware_version` | `Optional[str]` | Hardware version | @@ -721,11 +721,11 @@ Description of an objective device |-------|------|-------------| | `numerical_aperture` | `decimal.Decimal` | Numerical aperture (in air) | | `magnification` | `decimal.Decimal` | Magnification | -| `immersion` | [ImmersionMedium](../aind_data_schema_models/devices.md#immersionmedium) | Immersion | -| `objective_type` | Optional[[ObjectiveType](../aind_data_schema_models/devices.md#objectivetype)] | Objective type | +| `immersion` | [ImmersionMedium](../biodata_models/devices.md#immersionmedium) | Immersion | +| `objective_type` | Optional[[ObjectiveType](../biodata_models/devices.md#objectivetype)] | Objective type | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -737,12 +737,12 @@ Description of an olfactometer for odor stimuli | Field | Type | Title (Description) | |-------|------|-------------| -| `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer | -| `harp_device_type` | [HarpDeviceType](../aind_data_schema_models/harp_types.md#harpdevicetype) | Type of Harp device | +| `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | Manufacturer | +| `harp_device_type` | [HarpDeviceType](../biodata_models/harp_types.md#harpdevicetype) | Type of Harp device | | `channels` | List[[OlfactometerChannel](#olfactometerchannel)] | | | `core_version` | `Optional[str]` | Core version | | `tag_version` | `Optional[str]` | Tag version | -| `data_interface` | [DataInterface](../aind_data_schema_models/devices.md#datainterface) | Data interface | +| `data_interface` | [DataInterface](../biodata_models/devices.md#datainterface) | Data interface | | `is_clock_generator` | `bool` | Is Clock Generator | | `firmware_version` | `Optional[str]` | Firmware version | | `hardware_version` | `Optional[str]` | Hardware version | @@ -783,7 +783,7 @@ Multichannel electrophysiology DAQ |-------|------|-------------| | `ports` | List[[ProbePort](#probeport)] | Acquisition board ports | | `data_interface` | `"USB"` | | -| `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | | +| `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | | | `channels` | List[[DAQChannel](#daqchannel)] | DAQ channels | | `firmware_version` | `Optional[str]` | Firmware version | | `hardware_version` | `Optional[str]` | Hardware version | @@ -814,12 +814,12 @@ Description of a Pockels Cell | `polygonal_scanner` | `Optional[str]` | Polygonal scanner (Must match name of Polygonal scanner) | | `on_time` | `Optional[decimal.Decimal]` | On time (fraction of cycle) | | `off_time` | `Optional[decimal.Decimal]` | Off time (fraction of cycle) | -| `time_setting_unit` | [UnitlessUnit](../aind_data_schema_models/units.md#unitlessunit) | Time setting unit | +| `time_setting_unit` | [UnitlessUnit](../biodata_models/units.md#unitlessunit) | Time setting unit | | `beam_modulation` | `Optional[decimal.Decimal]` | Beam modulation (V) | -| `beam_modulation_unit` | Optional[[VoltageUnit](../aind_data_schema_models/units.md#voltageunit)] | Beam modulation unit | +| `beam_modulation_unit` | Optional[[VoltageUnit](../biodata_models/units.md#voltageunit)] | Beam modulation unit | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -832,11 +832,11 @@ Description of a Polygonal scanner | Field | Type | Title (Description) | |-------|------|-------------| | `speed` | `int` | Speed (rpm) | -| `speed_unit` | [SpeedUnit](../aind_data_schema_models/units.md#speedunit) | Speed unit | +| `speed_unit` | [SpeedUnit](../biodata_models/units.md#speedunit) | Speed unit | | `number_faces` | `int` | Number of faces | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -859,10 +859,10 @@ Description of a MRI Scanner | Field | Type | Title (Description) | |-------|------|-------------| | `magnetic_strength` | `float` | Magnetic strength (T) | -| `magnetic_strength_unit` | [MagneticFieldUnit](../aind_data_schema_models/units.md#magneticfieldunit) | Magnetic strength unit | +| `magnetic_strength_unit` | [MagneticFieldUnit](../biodata_models/units.md#magneticfieldunit) | Magnetic strength unit | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -874,14 +874,14 @@ Description of a scanning motorized stages | Field | Type | Title (Description) | |-------|------|-------------| -| `stage_axis_direction` | [StageAxisDirection](../aind_data_schema_models/devices.md#stageaxisdirection) | Direction of stage axis | -| `stage_axis_name` | [AxisName](../aind_data_schema_models/coordinates.md#axisname) | Name of stage axis | +| `stage_axis_direction` | [StageAxisDirection](../biodata_models/devices.md#stageaxisdirection) | Direction of stage axis | +| `stage_axis_name` | [AxisName](../biodata_models/coordinates.md#axisname) | Name of stage axis | | `travel` | `decimal.Decimal` | Travel of device (mm) | -| `travel_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Travel unit | +| `travel_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Travel unit | | `firmware` | Optional[[Software](identifiers.md#software)] | Firmware | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -893,13 +893,13 @@ Description of a speaker for auditory stimuli | Field | Type | Title (Description) | |-------|------|-------------| -| `manufacturer` | [Organization](../aind_data_schema_models/organizations.md#organization) | Manufacturer | +| `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | Manufacturer | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | -| `relative_position` | List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)] | Relative position | +| `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Relative position | | `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Position and orientation of the device in the instrument global coordinate system) | @@ -912,12 +912,12 @@ Description of treadmill platform | Field | Type | Title (Description) | |-------|------|-------------| | `treadmill_width` | `decimal.Decimal` | Width of treadmill (mm) | -| `width_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Width unit | +| `width_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Width unit | | `encoder` | Optional[[Device](#device)] | Encoder | | `pulse_per_revolution` | `Optional[int]` | Pulse per revolution | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -930,10 +930,10 @@ Description of a tube platform | Field | Type | Title (Description) | |-------|------|-------------| | `diameter` | `decimal.Decimal` | Diameter | -| `diameter_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Diameter unit | +| `diameter_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Diameter unit | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | @@ -947,14 +947,14 @@ Description of a running wheel |-------|------|-------------| | `radius` | `decimal.Decimal` | Radius (mm) | | `width` | `decimal.Decimal` | Width (mm) | -| `size_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Size unit | +| `size_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Size unit | | `encoder` | [Device](#device) | Encoder | | `pulse_per_revolution` | `int` | Pulse per revolution | | `magnetic_brake` | [Device](#device) | Magnetic brake | | `torque_sensor` | [Device](#device) | Torque sensor | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | -| `manufacturer` | Optional[[Organization](../aind_data_schema_models/organizations.md#organization)] | Manufacturer | +| `manufacturer` | Optional[[Organization](../biodata_models/organizations.md#organization)] | Manufacturer | | `model` | `Optional[str]` | Model | | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | diff --git a/docs/source/components/geometry.md b/docs/source/components/geometry.md index 1eb1bd794..eb2ed0167 100644 --- a/docs/source/components/geometry.md +++ b/docs/source/components/geometry.md @@ -9,7 +9,7 @@ Circle geometry | Field | Type | Title (Description) | |-------|------|-------------| | `radius` | `float` | Radius | -| `radius_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Radius unit | +| `radius_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Radius unit | ### Rectangle @@ -20,6 +20,6 @@ Rectangle geometry |-------|------|-------------| | `width` | `float` | Width | | `height` | `float` | Height | -| `size_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Size unit | +| `size_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Size unit | diff --git a/docs/source/components/identifiers.md b/docs/source/components/identifiers.md index cef44a136..120d0002a 100644 --- a/docs/source/components/identifiers.md +++ b/docs/source/components/identifiers.md @@ -71,7 +71,7 @@ Person identifier | Field | Type | Title (Description) | |-------|------|-------------| | `name` | `str` | Person's name (First and last name OR anonymous ID) | -| `registry` | [Registry](../aind_data_schema_models/registries.md#registry) | Registry | +| `registry` | [Registry](../biodata_models/registries.md#registry) | Registry | | `registry_identifier` | `Optional[str]` | ORCID ID | diff --git a/docs/source/components/injection_procedures.md b/docs/source/components/injection_procedures.md index 8a92b07a2..d4603ef46 100644 --- a/docs/source/components/injection_procedures.md +++ b/docs/source/components/injection_procedures.md @@ -9,8 +9,8 @@ Description of an injection procedure | Field | Type | Title (Description) | |-------|------|-------------| | `injection_materials` | List[[ViralMaterial](#viralmaterial) or [NonViralMaterial](#nonviralmaterial)] | Injection material | -| `targeted_structure` | Optional[[MouseAnatomyModel](../aind_data_schema_models/external.md#mouseanatomymodel)] | Injection target (Use InjectionTargets) | -| `relative_position` | Optional[List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)]] | Relative position | +| `targeted_structure` | Optional[[MouseAnatomyModel](../biodata_models/external.md#mouseanatomymodel)] | Injection target (Use InjectionTargets) | +| `relative_position` | Optional[List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)]] | Relative position | | `dynamics` | List[[InjectionDynamics](#injectiondynamics)] | Injection dynamics (List of injection events, one per location/depth) | | `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) | @@ -23,11 +23,11 @@ Description of the volume and rate of an injection |-------|------|-------------| | `profile` | [InjectionProfile](#injectionprofile) | Injection profile | | `volume` | `Optional[float]` | Injection volume | -| `volume_unit` | Optional[[VolumeUnit](../aind_data_schema_models/units.md#volumeunit)] | Injection volume unit | +| `volume_unit` | Optional[[VolumeUnit](../biodata_models/units.md#volumeunit)] | Injection volume unit | | `duration` | `Optional[float]` | Injection duration | -| `duration_unit` | Optional[[TimeUnit](../aind_data_schema_models/units.md#timeunit)] | Injection duration unit | +| `duration_unit` | Optional[[TimeUnit](../biodata_models/units.md#timeunit)] | Injection duration unit | | `injection_current` | `Optional[float]` | Injection current (uA) | -| `injection_current_unit` | Optional[[CurrentUnit](../aind_data_schema_models/units.md#currentunit)] | Injection current unit | +| `injection_current_unit` | Optional[[CurrentUnit](../biodata_models/units.md#currentunit)] | Injection current unit | | `alternating_current` | `Optional[str]` | Alternating current | @@ -51,8 +51,8 @@ Description of a non-viral injection material | `concentration` | `Optional[float]` | Concentration (Must provide concentration unit) | | `concentration_unit` | `Optional[str]` | Concentration unit (For example, mg/mL) | | `name` | `str` | Name | -| `source` | [Organization](../aind_data_schema_models/organizations.md#organization) | Source | -| `rrid` | Optional[[PIDName](../aind_data_schema_models/pid_names.md#pidname)] | Research Resource ID | +| `source` | [Organization](../biodata_models/organizations.md#organization) | Source | +| `rrid` | Optional[[PIDName](../biodata_models/pid_names.md#pidname)] | Research Resource ID | | `lot_number` | `Optional[str]` | Lot number | | `expiration_date` | `Optional[datetime.date]` | Lot expiration date | @@ -79,7 +79,7 @@ Description of viral material for injections |-------|------|-------------| | `name` | `str` | Full genome name (Full genome for virus construct) | | `tars_identifiers` | Optional[[TarsVirusIdentifiers](#tarsvirusidentifiers)] | TARS IDs (TARS database identifiers) | -| `addgene_id` | Optional[[PIDName](../aind_data_schema_models/pid_names.md#pidname)] | Addgene id (Registry must be Addgene) | +| `addgene_id` | Optional[[PIDName](../biodata_models/pid_names.md#pidname)] | Addgene id (Registry must be Addgene) | | `titer` | `Optional[int]` | Effective titer (Final titer of viral material, accounting for mixture/diliution) | | `titer_unit` | `Optional[str]` | Titer unit (For example, gc/mL) | diff --git a/docs/source/components/measurements.md b/docs/source/components/measurements.md index 3f6c7ff44..13429b8fc 100644 --- a/docs/source/components/measurements.md +++ b/docs/source/components/measurements.md @@ -12,10 +12,10 @@ Generic calibration class | `description` | `str` | Description (Brief description of what is being calibrated) | | `measured_at` | `Optional[str]` | Measurement location | | `input` | `List[float or str]` | Inputs (Calibration input) | -| `input_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) or [MassUnit](../aind_data_schema_models/units.md#massunit) or [FrequencyUnit](../aind_data_schema_models/units.md#frequencyunit) or [SpeedUnit](../aind_data_schema_models/units.md#speedunit) or [VolumeUnit](../aind_data_schema_models/units.md#volumeunit) or [AngleUnit](../aind_data_schema_models/units.md#angleunit) or [TimeUnit](../aind_data_schema_models/units.md#timeunit) or [PowerUnit](../aind_data_schema_models/units.md#powerunit) or [CurrentUnit](../aind_data_schema_models/units.md#currentunit) or [ConcentrationUnit](../aind_data_schema_models/units.md#concentrationunit) or [TemperatureUnit](../aind_data_schema_models/units.md#temperatureunit) or [SoundIntensityUnit](../aind_data_schema_models/units.md#soundintensityunit) or [VoltageUnit](../aind_data_schema_models/units.md#voltageunit) or [MemoryUnit](../aind_data_schema_models/units.md#memoryunit) or [UnitlessUnit](../aind_data_schema_models/units.md#unitlessunit) or [MagneticFieldUnit](../aind_data_schema_models/units.md#magneticfieldunit) or [PressureUnit](../aind_data_schema_models/units.md#pressureunit) or {TorqueUnit} | Input unit | +| `input_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) or [MassUnit](../biodata_models/units.md#massunit) or [FrequencyUnit](../biodata_models/units.md#frequencyunit) or [SpeedUnit](../biodata_models/units.md#speedunit) or [VolumeUnit](../biodata_models/units.md#volumeunit) or [AngleUnit](../biodata_models/units.md#angleunit) or [TimeUnit](../biodata_models/units.md#timeunit) or [PowerUnit](../biodata_models/units.md#powerunit) or [CurrentUnit](../biodata_models/units.md#currentunit) or [ConcentrationUnit](../biodata_models/units.md#concentrationunit) or [TemperatureUnit](../biodata_models/units.md#temperatureunit) or [SoundIntensityUnit](../biodata_models/units.md#soundintensityunit) or [VoltageUnit](../biodata_models/units.md#voltageunit) or [MemoryUnit](../biodata_models/units.md#memoryunit) or [UnitlessUnit](../biodata_models/units.md#unitlessunit) or [MagneticFieldUnit](../biodata_models/units.md#magneticfieldunit) or [PressureUnit](../biodata_models/units.md#pressureunit) or {TorqueUnit} | Input unit | | `repeats` | `Optional[int]` | Number of repeats (If each input was repeated multiple times, provide the number of repeats) | | `output` | `List[float or str]` | Outputs (Calibration output (provide the average if repeated)) | -| `output_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) or [MassUnit](../aind_data_schema_models/units.md#massunit) or [FrequencyUnit](../aind_data_schema_models/units.md#frequencyunit) or [SpeedUnit](../aind_data_schema_models/units.md#speedunit) or [VolumeUnit](../aind_data_schema_models/units.md#volumeunit) or [AngleUnit](../aind_data_schema_models/units.md#angleunit) or [TimeUnit](../aind_data_schema_models/units.md#timeunit) or [PowerUnit](../aind_data_schema_models/units.md#powerunit) or [CurrentUnit](../aind_data_schema_models/units.md#currentunit) or [ConcentrationUnit](../aind_data_schema_models/units.md#concentrationunit) or [TemperatureUnit](../aind_data_schema_models/units.md#temperatureunit) or [SoundIntensityUnit](../aind_data_schema_models/units.md#soundintensityunit) or [VoltageUnit](../aind_data_schema_models/units.md#voltageunit) or [MemoryUnit](../aind_data_schema_models/units.md#memoryunit) or [UnitlessUnit](../aind_data_schema_models/units.md#unitlessunit) or [MagneticFieldUnit](../aind_data_schema_models/units.md#magneticfieldunit) or [PressureUnit](../aind_data_schema_models/units.md#pressureunit) or {TorqueUnit} | Output unit | +| `output_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) or [MassUnit](../biodata_models/units.md#massunit) or [FrequencyUnit](../biodata_models/units.md#frequencyunit) or [SpeedUnit](../biodata_models/units.md#speedunit) or [VolumeUnit](../biodata_models/units.md#volumeunit) or [AngleUnit](../biodata_models/units.md#angleunit) or [TimeUnit](../biodata_models/units.md#timeunit) or [PowerUnit](../biodata_models/units.md#powerunit) or [CurrentUnit](../biodata_models/units.md#currentunit) or [ConcentrationUnit](../biodata_models/units.md#concentrationunit) or [TemperatureUnit](../biodata_models/units.md#temperatureunit) or [SoundIntensityUnit](../biodata_models/units.md#soundintensityunit) or [VoltageUnit](../biodata_models/units.md#voltageunit) or [MemoryUnit](../biodata_models/units.md#memoryunit) or [UnitlessUnit](../biodata_models/units.md#unitlessunit) or [MagneticFieldUnit](../biodata_models/units.md#magneticfieldunit) or [PressureUnit](../biodata_models/units.md#pressureunit) or {TorqueUnit} | Output unit | | `fit` | Optional[[CalibrationFit](#calibrationfit)] | Fit (Fit equation for the calibration data used during data acquisition) | | `notes` | `Optional[str]` | Notes | | `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) | @@ -64,9 +64,9 @@ Calibration of a device that outputs power based on input strength | Field | Type | Title (Description) | |-------|------|-------------| | `input` | `List[float]` | Input (Power, voltage, or percentage input strength) | -| `input_unit` | `aind_data_schema_models.units.PowerUnit or aind_data_schema_models.units.VoltageUnit` | Input unit | +| `input_unit` | `biodata_models.units.PowerUnit or biodata_models.units.VoltageUnit` | Input unit | | `output` | `List[float]` | Output (Power output (provide the average if repeated)) | -| `output_unit` | [PowerUnit](../aind_data_schema_models/units.md#powerunit) | Output unit | +| `output_unit` | [PowerUnit](../biodata_models/units.md#powerunit) | Output unit | | `description` | `"Power measured for various power or percentage input strengths"` | | | `calibration_date` | `datetime (timezone-aware)` | Date and time of calibration | | `measured_at` | `Optional[str]` | Measurement location | @@ -84,10 +84,10 @@ Calibration of a liquid delivery device based on solenoid/valve opening times | Field | Type | Title (Description) | |-------|------|-------------| | `input` | `List[float]` | Input times (Length of time solenoid/valve is open) | -| `input_unit` | [TimeUnit](../aind_data_schema_models/units.md#timeunit) | Input unit | +| `input_unit` | [TimeUnit](../biodata_models/units.md#timeunit) | Input unit | | `repeats` | `Optional[int]` | Number of repeats (If each input was repeated multiple times, provide the number of repeats) | | `output` | `List[float]` | Output (Volume output (provide the average if repeated)) | -| `output_unit` | [VolumeUnit](../aind_data_schema_models/units.md#volumeunit) | Output unit | +| `output_unit` | [VolumeUnit](../biodata_models/units.md#volumeunit) | Output unit | | `description` | `"Volume measured for various solenoid opening times"` | | | `calibration_date` | `datetime (timezone-aware)` | Date and time of calibration | | `measured_at` | `Optional[str]` | Measurement location | diff --git a/docs/source/components/reagent.md b/docs/source/components/reagent.md index f6f8a5846..ce61c0a6f 100644 --- a/docs/source/components/reagent.md +++ b/docs/source/components/reagent.md @@ -8,13 +8,13 @@ Description of an inherently fluorescent marker. Note this class will change nam | Field | Type | Title (Description) | |-------|------|-------------| -| `stain_type` | [StainType](../aind_data_schema_models/reagent.md#staintype) | | +| `stain_type` | [StainType](../biodata_models/reagent.md#staintype) | | | `excitation_wavelength` | `int` | Excitation wavelength (nm) | | `emission_wavelength` | `int` | Emission wavelength (nm) | -| `wavelength_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Excitation wavelength unit | +| `wavelength_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Excitation wavelength unit | | `name` | `str` | Name | -| `source` | [Organization](../aind_data_schema_models/organizations.md#organization) | Source | -| `rrid` | Optional[[PIDName](../aind_data_schema_models/pid_names.md#pidname)] | Research Resource ID | +| `source` | [Organization](../biodata_models/organizations.md#organization) | Source | +| `rrid` | Optional[[PIDName](../biodata_models/pid_names.md#pidname)] | Research Resource ID | | `lot_number` | `Optional[str]` | Lot number | | `expiration_date` | `Optional[datetime.date]` | Lot expiration date | @@ -27,12 +27,12 @@ Note this class will change names in v3.0 | Field | Type | Title (Description) | |-------|------|-------------| | `probe` | [GeneProbe](#geneprobe) or [ProteinProbe](#proteinprobe) or [SmallMoleculeProbe](#smallmoleculeprobe) | Target of the stain | -| `stain_type` | [StainType](../aind_data_schema_models/reagent.md#staintype) | Stain type | +| `stain_type` | [StainType](../biodata_models/reagent.md#staintype) | Stain type | | `fluorophore` | [Fluorophore](#fluorophore) | Fluorophore used in the stain | | `initiator_name` | `Optional[str]` | Initiator for HCR probes | | `name` | `str` | Name | -| `source` | [Organization](../aind_data_schema_models/organizations.md#organization) | Source | -| `rrid` | Optional[[PIDName](../aind_data_schema_models/pid_names.md#pidname)] | Research Resource ID | +| `source` | [Organization](../biodata_models/organizations.md#organization) | Source | +| `rrid` | Optional[[PIDName](../biodata_models/pid_names.md#pidname)] | Research Resource ID | | `lot_number` | `Optional[str]` | Lot number | | `expiration_date` | `Optional[datetime.date]` | Lot expiration date | @@ -43,9 +43,9 @@ Flurophore used in HCR, Immunolabeling, etc | Field | Type | Title (Description) | |-------|------|-------------| -| `fluorophore_type` | [FluorophoreType](../aind_data_schema_models/reagent.md#fluorophoretype) | Fluorophore type | +| `fluorophore_type` | [FluorophoreType](../biodata_models/reagent.md#fluorophoretype) | Fluorophore type | | `excitation_wavelength` | `int` | Excitation wavelength (nm) | -| `excitation_wavelength_unit` | [SizeUnit](../aind_data_schema_models/units.md#sizeunit) | Excitation wavelength unit | +| `excitation_wavelength_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Excitation wavelength unit | ### GeneProbe @@ -54,7 +54,7 @@ Description of a set of oligonucleotide probes targeting a specific gene | Field | Type | Title (Description) | |-------|------|-------------| -| `gene` | [PIDName](../aind_data_schema_models/pid_names.md#pidname) | Gene name | +| `gene` | [PIDName](../biodata_models/pid_names.md#pidname) | Gene name | | `probes` | Optional[List[[OligoProbe](#oligoprobe)]] | Probes | @@ -66,8 +66,8 @@ set of probes used in BarSEQ |-------|------|-------------| | `gene_probes` | List[[GeneProbe](#geneprobe)] | Gene probes | | `name` | `str` | Name | -| `source` | [Organization](../aind_data_schema_models/organizations.md#organization) | Source | -| `rrid` | Optional[[PIDName](../aind_data_schema_models/pid_names.md#pidname)] | Research Resource ID | +| `source` | [Organization](../biodata_models/organizations.md#organization) | Source | +| `rrid` | Optional[[PIDName](../biodata_models/pid_names.md#pidname)] | Research Resource ID | | `lot_number` | `Optional[str]` | Lot number | | `expiration_date` | `Optional[datetime.date]` | Lot expiration date | @@ -90,8 +90,8 @@ Description of a probe used as a reagent |-------|------|-------------| | `target` | [GeneProbe](#geneprobe) or [ProteinProbe](#proteinprobe) or [SmallMoleculeProbe](#smallmoleculeprobe) | Target | | `name` | `str` | Name | -| `source` | [Organization](../aind_data_schema_models/organizations.md#organization) | Source | -| `rrid` | Optional[[PIDName](../aind_data_schema_models/pid_names.md#pidname)] | Research Resource ID | +| `source` | [Organization](../biodata_models/organizations.md#organization) | Source | +| `rrid` | Optional[[PIDName](../biodata_models/pid_names.md#pidname)] | Research Resource ID | | `lot_number` | `Optional[str]` | Lot number | | `expiration_date` | `Optional[datetime.date]` | Lot expiration date | @@ -102,10 +102,10 @@ Description of a protein probe including antibodies | Field | Type | Title (Description) | |-------|------|-------------| -| `protein` | [PIDName](../aind_data_schema_models/pid_names.md#pidname) | Target protein name | -| `species` | Optional[[Species](../aind_data_schema_models/species.md#species)] | Species of the probe | +| `protein` | [PIDName](../biodata_models/pid_names.md#pidname) | Target protein name | +| `species` | Optional[[Species](../biodata_models/species.md#species)] | Species of the probe | | `mass` | `float` | Mass of protein probe (ug) | -| `mass_unit` | [MassUnit](../aind_data_schema_models/units.md#massunit) | Mass unit | +| `mass_unit` | [MassUnit](../biodata_models/units.md#massunit) | Mass unit | | `sequence` | `Optional[str]` | Amino acid sequence of the probe | @@ -116,8 +116,8 @@ Description of reagent used in procedure | Field | Type | Title (Description) | |-------|------|-------------| | `name` | `str` | Name | -| `source` | [Organization](../aind_data_schema_models/organizations.md#organization) | Source | -| `rrid` | Optional[[PIDName](../aind_data_schema_models/pid_names.md#pidname)] | Research Resource ID | +| `source` | [Organization](../biodata_models/organizations.md#organization) | Source | +| `rrid` | Optional[[PIDName](../biodata_models/pid_names.md#pidname)] | Research Resource ID | | `lot_number` | `Optional[str]` | Lot number | | `expiration_date` | `Optional[datetime.date]` | Lot expiration date | @@ -128,9 +128,9 @@ Description of a small molecule probe | Field | Type | Title (Description) | |-------|------|-------------| -| `molecule` | [PIDName](../aind_data_schema_models/pid_names.md#pidname) | Target small molecule name | +| `molecule` | [PIDName](../biodata_models/pid_names.md#pidname) | Target small molecule name | | `mass` | `float` | Mass of small molecule probe (ug) | -| `mass_unit` | [MassUnit](../aind_data_schema_models/units.md#massunit) | Mass unit | +| `mass_unit` | [MassUnit](../biodata_models/units.md#massunit) | Mass unit | ### Solution diff --git a/docs/source/components/specimen_procedures.md b/docs/source/components/specimen_procedures.md index d792a38f0..d145d1997 100644 --- a/docs/source/components/specimen_procedures.md +++ b/docs/source/components/specimen_procedures.md @@ -39,10 +39,10 @@ Description of a single planar section of brain tissue | `start_coordinate` | [Translation](coordinates.md#translation) | Start coordinate | | `end_coordinate` | Optional[[Translation](coordinates.md#translation)] | End coordinate | | `thickness` | `Optional[float]` | Slice thickness | -| `thickness_unit` | Optional[[SizeUnit](../aind_data_schema_models/units.md#sizeunit)] | Slice thickness unit | -| `partial_slice` | Optional[List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)]] | Partial slice (If sectioning does not include the entire slice, indicate which part of the slice is retained.) | +| `thickness_unit` | Optional[[SizeUnit](../biodata_models/units.md#sizeunit)] | Slice thickness unit | +| `partial_slice` | Optional[List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)]] | Partial slice (If sectioning does not include the entire slice, indicate which part of the slice is retained.) | | `output_specimen_id` | `str` | Specimen ID (Output IDs should generally follow the format {input_specimen_id}_###) | -| `targeted_structure` | Optional[[BrainAtlas](../aind_data_schema_models/brain_atlas.md#ccfv3)] | Targeted structure | +| `targeted_structure` | Optional[[BrainAtlas](../biodata_models/brain_atlas.md#ccfv3)] | Targeted structure | | `includes_surrounding_tissue` | `Optional[bool]` | Includes surrounding tissue (Whether the section includes additional tissue surrounding the targeted structure.) | @@ -65,14 +65,14 @@ Description of a single section of brain tissue. Slices should use PlanarSection | Field | Type | Title (Description) | |-------|------|-------------| | `output_specimen_id` | `str` | Specimen ID (Output IDs should generally follow the format {input_specimen_id}_###) | -| `targeted_structure` | Optional[[BrainAtlas](../aind_data_schema_models/brain_atlas.md#ccfv3)] | Targeted structure | +| `targeted_structure` | Optional[[BrainAtlas](../biodata_models/brain_atlas.md#ccfv3)] | Targeted structure | | `includes_surrounding_tissue` | `Optional[bool]` | Includes surrounding tissue (Whether the section includes additional tissue surrounding the targeted structure.) | | `coordinate_system_name` | `Optional[str]` | **[DEPRECATED]** Use PlanarSection instead. Coordinate system name | | `start_coordinate` | Optional[[Translation](coordinates.md#translation)] | **[DEPRECATED]** Use PlanarSection instead. Start coordinate | | `end_coordinate` | Optional[[Translation](coordinates.md#translation)] | **[DEPRECATED]** Use PlanarSection instead. End coordinate | | `thickness` | `Optional[float]` | **[DEPRECATED]** Use PlanarSection instead. Slice thickness | -| `thickness_unit` | Optional[[SizeUnit](../aind_data_schema_models/units.md#sizeunit)] | **[DEPRECATED]** Use PlanarSection instead. Slice thickness unit | -| `partial_slice` | Optional[List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)]] | **[DEPRECATED]** Use PlanarSection instead. Partial slice (If sectioning does not include the entire slice, indicate which part of the slice is retained.) | +| `thickness_unit` | Optional[[SizeUnit](../biodata_models/units.md#sizeunit)] | **[DEPRECATED]** Use PlanarSection instead. Slice thickness unit | +| `partial_slice` | Optional[List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)]] | **[DEPRECATED]** Use PlanarSection instead. Partial slice (If sectioning does not include the entire slice, indicate which part of the slice is retained.) | ### SectionOrientation @@ -101,7 +101,7 @@ Description of surgical or other procedure performed on a specimen | Field | Type | Title (Description) | |-------|------|-------------| -| `procedure_type` | [SpecimenProcedureType](../aind_data_schema_models/specimen_procedure_types.md#specimenproceduretype) | Procedure type | +| `procedure_type` | [SpecimenProcedureType](../biodata_models/specimen_procedure_types.md#specimenproceduretype) | Procedure type | | `procedure_name` | `Optional[str]` | Procedure name | | `specimen_id` | `str or List[str]` | Specimen ID(s) | | `start_date` | `datetime.date` | Start date | diff --git a/docs/source/components/stimulus.md b/docs/source/components/stimulus.md index 11a0122ea..b98ea9312 100644 --- a/docs/source/components/stimulus.md +++ b/docs/source/components/stimulus.md @@ -11,10 +11,10 @@ Description of an auditory stimulus | `stimulus_name` | `str` | Stimulus name | | `sample_frequency` | `decimal.Decimal` | Sample frequency | | `amplitude_modulation_frequency` | `Optional[int]` | Amplitude modulation frequency | -| `frequency_unit` | [FrequencyUnit](../aind_data_schema_models/units.md#frequencyunit) | Tone frequency unit | +| `frequency_unit` | [FrequencyUnit](../biodata_models/units.md#frequencyunit) | Tone frequency unit | | `bandpass_low_frequency` | `Optional[decimal.Decimal]` | Bandpass low frequency | | `bandpass_high_frequency` | `Optional[decimal.Decimal]` | Bandpass high frequency | -| `bandpass_filter_type` | Optional[[FilterType](../aind_data_schema_models/devices.md#filtertype)] | Bandpass filter type | +| `bandpass_filter_type` | Optional[[FilterType](../biodata_models/devices.md#filtertype)] | Bandpass filter type | | `bandpass_order` | `Optional[int]` | Bandpass order | | `notes` | `Optional[str]` | Notes | @@ -40,7 +40,7 @@ Description of olfactometer channel configurations | `channel_index` | `int` | Channel index | | `odorant` | `str` | Odorant | | `odorant_dilution` | `decimal.Decimal` | Odorant dilution | -| `odorant_dilution_unit` | [ConcentrationUnit](../aind_data_schema_models/units.md#concentrationunit) | Dilution unit | +| `odorant_dilution_unit` | [ConcentrationUnit](../biodata_models/units.md#concentrationunit) | Dilution unit | | `notes` | `Optional[str]` | Notes | @@ -66,17 +66,17 @@ Description of opto stimulation parameters | `stimulus_name` | `str` | Stimulus name | | `pulse_shape` | [PulseShape](#pulseshape) | Pulse shape | | `pulse_frequency` | `List[decimal.Decimal]` | Pulse frequency (Hz) | -| `pulse_frequency_unit` | [FrequencyUnit](../aind_data_schema_models/units.md#frequencyunit) | Pulse frequency unit | +| `pulse_frequency_unit` | [FrequencyUnit](../biodata_models/units.md#frequencyunit) | Pulse frequency unit | | `number_pulse_trains` | `List[int]` | Number of pulse trains | | `pulse_width` | `List[int]` | Pulse width (ms) | -| `pulse_width_unit` | [TimeUnit](../aind_data_schema_models/units.md#timeunit) | Pulse width unit | +| `pulse_width_unit` | [TimeUnit](../biodata_models/units.md#timeunit) | Pulse width unit | | `pulse_train_duration` | `List[decimal.Decimal]` | Pulse train duration (s) | -| `pulse_train_duration_unit` | [TimeUnit](../aind_data_schema_models/units.md#timeunit) | Pulse train duration unit | +| `pulse_train_duration_unit` | [TimeUnit](../biodata_models/units.md#timeunit) | Pulse train duration unit | | `fixed_pulse_train_interval` | `bool` | Fixed pulse train interval | | `pulse_train_interval` | `Optional[decimal.Decimal]` | Pulse train interval (s) (Time between pulse trains) | -| `pulse_train_interval_unit` | [TimeUnit](../aind_data_schema_models/units.md#timeunit) | Pulse train interval unit | +| `pulse_train_interval_unit` | [TimeUnit](../biodata_models/units.md#timeunit) | Pulse train interval unit | | `baseline_duration` | `decimal.Decimal` | Baseline duration (s) (Duration of baseline recording prior to first pulse train) | -| `baseline_duration_unit` | [TimeUnit](../aind_data_schema_models/units.md#timeunit) | Baseline duration unit | +| `baseline_duration_unit` | [TimeUnit](../biodata_models/units.md#timeunit) | Baseline duration unit | | `other_parameters` | `Optional[dict]` | Other parameters | | `notes` | `Optional[str]` | Notes | @@ -91,7 +91,7 @@ Description of a photostimulation acquisition | `number_groups` | `int` | Number of groups | | `groups` | List[[PhotoStimulationGroup](#photostimulationgroup)] | Groups | | `inter_trial_interval` | `decimal.Decimal` | Inter trial interval (s) | -| `inter_trial_interval_unit` | [TimeUnit](../aind_data_schema_models/units.md#timeunit) | Inter trial interval unit | +| `inter_trial_interval_unit` | [TimeUnit](../biodata_models/units.md#timeunit) | Inter trial interval unit | | `other_parameters` | `Optional[dict]` | Other parameters | | `notes` | `Optional[str]` | Notes | @@ -105,13 +105,13 @@ Description of a photostimulation group | `group_index` | `int` | Group index | | `number_of_neurons` | `int` | Number of neurons | | `stimulation_laser_power` | `decimal.Decimal` | Stimulation laser power (mW) | -| `stimulation_laser_power_unit` | [PowerUnit](../aind_data_schema_models/units.md#powerunit) | Stimulation laser power unit | +| `stimulation_laser_power_unit` | [PowerUnit](../biodata_models/units.md#powerunit) | Stimulation laser power unit | | `number_trials` | `int` | Number of trials | | `number_spirals` | `int` | Number of spirals | | `spiral_duration` | `decimal.Decimal` | Spiral duration (s) | -| `spiral_duration_unit` | [TimeUnit](../aind_data_schema_models/units.md#timeunit) | Spiral duration unit | +| `spiral_duration_unit` | [TimeUnit](../biodata_models/units.md#timeunit) | Spiral duration unit | | `inter_spiral_interval` | `decimal.Decimal` | Inter trial interval (s) | -| `inter_spiral_interval_unit` | [TimeUnit](../aind_data_schema_models/units.md#timeunit) | Inter trial interval unit | +| `inter_spiral_interval_unit` | [TimeUnit](../biodata_models/units.md#timeunit) | Inter trial interval unit | | `other_parameters` | `Optional[dict]` | Other parameters | | `notes` | `Optional[str]` | Notes | diff --git a/docs/source/components/subject_procedures.md b/docs/source/components/subject_procedures.md index 2e1d43abe..9084e56dd 100644 --- a/docs/source/components/subject_procedures.md +++ b/docs/source/components/subject_procedures.md @@ -10,11 +10,11 @@ Description of a food restriction procedure |-------|------|-------------| | `ethics_review_id` | `str` | Ethics review ID | | `target_fraction_weight` | `int` | Target fraction weight (%) | -| `target_fraction_weight_unit` | [UnitlessUnit](../aind_data_schema_models/units.md#unitlessunit) | Target fraction weight unit | +| `target_fraction_weight_unit` | [UnitlessUnit](../biodata_models/units.md#unitlessunit) | Target fraction weight unit | | `minimum_food_per_day` | `float` | Minimum food per day | -| `minimum_food_per_day_unit` | [MassUnit](../aind_data_schema_models/units.md#massunit) | Minimum food per day unit | +| `minimum_food_per_day_unit` | [MassUnit](../biodata_models/units.md#massunit) | Minimum food per day unit | | `baseline_weight` | `float` | Baseline weight (g) (Weight at start of food restriction) | -| `weight_unit` | [MassUnit](../aind_data_schema_models/units.md#massunit) | Weight unit | +| `weight_unit` | [MassUnit](../biodata_models/units.md#massunit) | Weight unit | | `start_date` | `datetime.date` | Food restriction start date | | `end_date` | `Optional[datetime.date]` | Food restriction end date | @@ -58,12 +58,12 @@ Description of subject procedures performed at one time | `ethics_review_id` | `Optional[str]` | Ethics review ID | | `animal_weight_prior` | `Optional[float]` | Animal weight (g) (Animal weight before procedure) | | `animal_weight_post` | `Optional[float]` | Animal weight (g) (Animal weight after procedure) | -| `weight_unit` | [MassUnit](../aind_data_schema_models/units.md#massunit) | Weight unit | +| `weight_unit` | [MassUnit](../biodata_models/units.md#massunit) | Weight unit | | `anaesthesia` | Optional[[Anaesthetic](surgery_procedures.md#anaesthetic)] | Anaesthesia | | `workstation_id` | `Optional[str]` | Workstation ID | | `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use global_coordinate_system instead. Surgery coordinate system (Only required when the Surgery.coordinate_system is different from the Procedures.coordinate_system) | | `global_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Surgery global coordinate system (Only required when the Surgery.global_coordinate_system is different from the Procedures.global_coordinate_system) | -| `measured_coordinates` | Optional[Dict[[Origin](../aind_data_schema_models/coordinates.md#origin), [Translation](coordinates.md#translation)]] | Measured coordinates (Coordinates measured during the procedure, for example Bregma and Lambda) | +| `measured_coordinates` | Optional[Dict[[Origin](../biodata_models/coordinates.md#origin), [Translation](coordinates.md#translation)]] | Measured coordinates (Coordinates measured during the procedure, for example Bregma and Lambda) | | `procedures` | List[[CatheterImplant](surgery_procedures.md#catheterimplant) or [Craniotomy](surgery_procedures.md#craniotomy) or [DeviceImplant](surgery_procedures.md#deviceimplant) or [ProbeImplant](surgery_procedures.md#probeimplant) or [Headframe](surgery_procedures.md#headframe) or [BrainInjection](surgery_procedures.md#braininjection) or [Injection](injection_procedures.md#injection) or [MyomatrixInsertion](surgery_procedures.md#myomatrixinsertion) or [GenericSurgeryProcedure](surgery_procedures.md#genericsurgeryprocedure) or [Perfusion](surgery_procedures.md#perfusion) or [SampleCollection](surgery_procedures.md#samplecollection)] | Procedures | | `notes` | `Optional[str]` | Notes | | `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) | @@ -91,11 +91,11 @@ Description of a water restriction procedure |-------|------|-------------| | `ethics_review_id` | `str` | Ethics review ID | | `target_fraction_weight` | `int` | Target fraction weight (%) | -| `target_fraction_weight_unit` | [UnitlessUnit](../aind_data_schema_models/units.md#unitlessunit) | Target fraction weight unit | +| `target_fraction_weight_unit` | [UnitlessUnit](../biodata_models/units.md#unitlessunit) | Target fraction weight unit | | `minimum_water_per_day` | `float` | Minimum water per day (mL) | -| `minimum_water_per_day_unit` | [VolumeUnit](../aind_data_schema_models/units.md#volumeunit) | Minimum water per day unit | +| `minimum_water_per_day_unit` | [VolumeUnit](../biodata_models/units.md#volumeunit) | Minimum water per day unit | | `baseline_weight` | `float` | Baseline weight (g) (Weight at start of water restriction) | -| `weight_unit` | [MassUnit](../aind_data_schema_models/units.md#massunit) | Weight unit | +| `weight_unit` | [MassUnit](../biodata_models/units.md#massunit) | Weight unit | | `start_date` | `datetime.date` | Water restriction start date | | `end_date` | `Optional[datetime.date]` | Water restriction end date | diff --git a/docs/source/components/subjects.md b/docs/source/components/subjects.md index e3e2586d5..118f46d24 100644 --- a/docs/source/components/subjects.md +++ b/docs/source/components/subjects.md @@ -58,10 +58,10 @@ Description of a human subject | Field | Type | Title (Description) | |-------|------|-------------| -| `species` | `aind_data_schema_models.species.SpeciesModel` | Species | +| `species` | `biodata_models.species.SpeciesModel` | Species | | `sex` | [Sex](#sex) | Sex | | `year_of_birth` | `int` | Year of birth | -| `source` | [Organization](../aind_data_schema_models/organizations.md#organization) | Source (Where the subject was acquired from.) | +| `source` | [Organization](../biodata_models/organizations.md#organization) | Source (Where the subject was acquired from.) | ### LightCycle @@ -93,16 +93,16 @@ Description of a mouse subject |-------|------|-------------| | `sex` | [Sex](#sex) | Sex | | `date_of_birth` | `datetime.date` | Date of birth | -| `strain` | [Strain](../aind_data_schema_models/species.md#strain) | Strain | -| `species` | [Species](../aind_data_schema_models/species.md#species) | Species | -| `alleles` | List[[PIDName](../aind_data_schema_models/pid_names.md#pidname)] | Alleles (Allele names and persistent IDs) | +| `strain` | [Strain](../biodata_models/species.md#strain) | Strain | +| `species` | [Species](../biodata_models/species.md#species) | Species | +| `alleles` | List[[PIDName](../biodata_models/pid_names.md#pidname)] | Alleles (Allele names and persistent IDs) | | `genotype` | `str` | Genotype (Genotype of the animal providing both alleles) | | `breeding_info` | Optional[[BreedingInfo](#breedinginfo)] | Breeding Info | | `wellness_reports` | List[[WellnessReport](#wellnessreport)] | Wellness Report | | `housing` | Optional[[Housing](#housing)] | Housing | -| `source` | [Organization](../aind_data_schema_models/organizations.md#organization) | Source (Where the subject was acquired from. If bred in-house, use Allen Institute.) | +| `source` | [Organization](../biodata_models/organizations.md#organization) | Source (Where the subject was acquired from. If bred in-house, use Allen Institute.) | | `restrictions` | `Optional[str]` | Restrictions (Any restrictions on use or publishing based on subject source) | -| `rrid` | Optional[[PIDName](../aind_data_schema_models/pid_names.md#pidname)] | RRID (RRID of mouse if acquired from supplier) | +| `rrid` | Optional[[PIDName](../biodata_models/pid_names.md#pidname)] | RRID (RRID of mouse if acquired from supplier) | ### NonHumanPrimateSubject @@ -111,12 +111,12 @@ Description of a non-human primate subject | Field | Type | Title (Description) | |-------|------|-------------| -| `species` | [Species](../aind_data_schema_models/species.md#species) | species | +| `species` | [Species](../biodata_models/species.md#species) | species | | `sex` | [Sex](#sex) | Sex | | `date_of_birth` | `Optional[datetime.date]` | Date of birth | | `year_of_birth` | `int` | Year of birth | | `mating_status` | [MatingStatus](#matingstatus) | Mating status | -| `source` | [Organization](../aind_data_schema_models/organizations.md#organization) | Source (Where the subject was acquired from.) | +| `source` | [Organization](../biodata_models/organizations.md#organization) | Source (Where the subject was acquired from.) | ### Sex diff --git a/docs/source/components/surgery_procedures.md b/docs/source/components/surgery_procedures.md index afae4ae54..04a4889a3 100644 --- a/docs/source/components/surgery_procedures.md +++ b/docs/source/components/surgery_procedures.md @@ -10,7 +10,7 @@ Description of an anaesthetic |-------|------|-------------| | `anaesthetic_type` | `str` | Type | | `duration` | `float` | Duration | -| `duration_unit` | [TimeUnit](../aind_data_schema_models/units.md#timeunit) | Duration unit | +| `duration_unit` | [TimeUnit](../biodata_models/units.md#timeunit) | Duration unit | | `level` | `Optional[float]` | Level (percent) | @@ -22,9 +22,9 @@ Description of an injection procedure into a brain |-------|------|-------------| | `coordinate_system_name` | `str` | Coordinate system name | | `coordinates` | List[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Injection coordinate, depth, and rotation | -| `targeted_structure` | Optional[[BrainAtlas](../aind_data_schema_models/brain_atlas.md#ccfv3)] | Injection targeted brain structure | +| `targeted_structure` | Optional[[BrainAtlas](../biodata_models/brain_atlas.md#ccfv3)] | Injection targeted brain structure | | `injection_materials` | List[[ViralMaterial](injection_procedures.md#viralmaterial) or [NonViralMaterial](injection_procedures.md#nonviralmaterial)] | Injection material | -| `relative_position` | Optional[List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)]] | Relative position | +| `relative_position` | Optional[List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)]] | Relative position | | `dynamics` | List[[InjectionDynamics](injection_procedures.md#injectiondynamics)] | Injection dynamics (List of injection events, one per location/depth) | | `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) | @@ -35,7 +35,7 @@ Description of a catheter implant procedure | Field | Type | Title (Description) | |-------|------|-------------| -| `where_performed` | [Organization](../aind_data_schema_models/organizations.md#organization) | Where performed | +| `where_performed` | [Organization](../biodata_models/organizations.md#organization) | Where performed | | `implanted_device` | [Catheter](devices.md#catheter) | Implanted device | | `device_config` | [CatheterConfig](configs.md#catheterconfig) | Device configuration | @@ -48,9 +48,9 @@ Description of craniotomy procedure |-------|------|-------------| | `craniotomy_type` | [CraniotomyType](#craniotomytype) | Craniotomy type | | `coordinate_system_name` | `Optional[str]` | Coordinate system name | -| `position` | [Translation](coordinates.md#translation) or List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)] or NoneType | Craniotomy position | +| `position` | [Translation](coordinates.md#translation) or List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] or NoneType | Craniotomy position | | `size` | `Optional[float]` | Craniotomy size (Diameter or side length) | -| `size_unit` | Optional[[SizeUnit](../aind_data_schema_models/units.md#sizeunit)] | Craniotomy size unit | +| `size_unit` | Optional[[SizeUnit](../biodata_models/units.md#sizeunit)] | Craniotomy size unit | | `protective_material` | Optional[[ProtectiveMaterial](#protectivematerial)] | Protective material | | `implant_part_number` | `Optional[str]` | Implant part number | | `dura_removed` | `Optional[bool]` | Dura removed | @@ -78,7 +78,7 @@ Description of a generic device implant procedure |-------|------|-------------| | `implanted_device` | [Device](devices.md#device) | Implanted device | | `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) | -| `relative_position` | List[[AnatomicalRelative](../aind_data_schema_models/coordinates.md#anatomicalrelative)] | Relative position | +| `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Relative position | | `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Position and orientation of the device in the instrument global coordinate system) | @@ -101,11 +101,11 @@ Ground wire implant procedure | Field | Type | Title (Description) | |-------|------|-------------| -| `ground_electrode_location` | [MouseAnatomyModel](../aind_data_schema_models/external.md#mouseanatomymodel) | Location of ground electrode | +| `ground_electrode_location` | [MouseAnatomyModel](../biodata_models/external.md#mouseanatomymodel) | Location of ground electrode | | `ground_wire_hole` | `Optional[int]` | Ground wire hole (For SHIELD implants, the hole number for the ground wire) | | `ground_wire_material` | Optional[[GroundWireMaterial](#groundwirematerial)] | Ground wire material | | `ground_wire_diameter` | `Optional[float]` | Ground wire diameter | -| `ground_wire_diameter_unit` | Optional[[SizeUnit](../aind_data_schema_models/units.md#sizeunit)] | Ground wire diameter unit | +| `ground_wire_diameter_unit` | Optional[[SizeUnit](../biodata_models/units.md#sizeunit)] | Ground wire diameter unit | ### GroundWireMaterial @@ -197,7 +197,7 @@ Description of a single sample collection | `sample_type` | [SampleType](#sampletype) | Sample type | | `time` | `datetime (timezone-aware)` | Collection time | | `collection_volume` | `float` | Collection volume | -| `collection_volume_unit` | [VolumeUnit](../aind_data_schema_models/units.md#volumeunit) | Collection volume unit | +| `collection_volume_unit` | [VolumeUnit](../biodata_models/units.md#volumeunit) | Collection volume unit | | `collection_method` | `Optional[str]` | Collection method for terminal collection | diff --git a/docs/source/coordinate_systems.md b/docs/source/coordinate_systems.md index abcabcccf..2cae7a500 100644 --- a/docs/source/coordinate_systems.md +++ b/docs/source/coordinate_systems.md @@ -11,7 +11,7 @@ The top-level coordinate systems in the instrument, acquisition, and procedures ## CoordinateSystem -A [CoordinateSystem](components/coordinates.md#coordinatesystem) is defined by an [Origin](aind_data_schema_models/coordinates.md#origin) and a list of [AxisName](aind_data_schema_models/coordinates.md#axisname) and [Direction](aind_data_schema_models/coordinates.md#direction) pairs. The name of a coordinate system is created by combining the origin and positive directions of the axes. For example, `BREGMA_ARI` is a coordinate system with an origin at bregma and three axes pointing anterior, right, and inferior. This is made explicit in the full definition: +A [CoordinateSystem](components/coordinates.md#coordinatesystem) is defined by an [Origin](biodata_models/coordinates.md#origin) and a list of [AxisName](biodata_models/coordinates.md#axisname) and [Direction](biodata_models/coordinates.md#direction) pairs. The name of a coordinate system is created by combining the origin and positive directions of the axes. For example, `BREGMA_ARI` is a coordinate system with an origin at bregma and three axes pointing anterior, right, and inferior. This is made explicit in the full definition: ```{code} python CoordinateSystem( @@ -34,7 +34,7 @@ This matches the image below: ### Origin -An [Origin](aind_data_schema_models/coordinates.md#origin) is a point in space, often relative to the mouse's anatomy but it can also be a point on a device. Standard anatomical references are positions like Bregma or Lambda +An [Origin](biodata_models/coordinates.md#origin) is a point in space, often relative to the mouse's anatomy but it can also be a point on a device. Standard anatomical references are positions like Bregma or Lambda
BREGMA_ARI Coordinate System @@ -42,7 +42,7 @@ An [Origin](aind_data_schema_models/coordinates.md#origin) is a point in space, ### Axis -Each [Axis](components/coordinates.md#axis) is a combination of an [AxisName](aind_data_schema_models/coordinates.md#axisname) and [Direction](aind_data_schema_models/coordinates.md#direction). +Each [Axis](components/coordinates.md#axis) is a combination of an [AxisName](biodata_models/coordinates.md#axisname) and [Direction](biodata_models/coordinates.md#direction). ### Units @@ -95,7 +95,7 @@ To understand the position and orientation of a **device** in an instrument requ ### Relative Position -For devices where the exact position is not important or is unknown, simply tell us where the device is *roughly* relative to the origin. By combining several [AnatomicalRelative](aind_data_schema_models/coordinates.md#anatomicalrelative) directions in a list, for example `[AnatomicalRelative.ANTERIOR, AnatomicalRelative.SUPERIOR]`, etc, you can describe the position. +For devices where the exact position is not important or is unknown, simply tell us where the device is *roughly* relative to the origin. By combining several [AnatomicalRelative](biodata_models/coordinates.md#anatomicalrelative) directions in a list, for example `[AnatomicalRelative.ANTERIOR, AnatomicalRelative.SUPERIOR]`, etc, you can describe the position. ### Exact Position diff --git a/docs/source/data_description.md b/docs/source/data_description.md index 985284336..60cd59176 100644 --- a/docs/source/data_description.md +++ b/docs/source/data_description.md @@ -23,19 +23,19 @@ Description of a logical collection of data files | Field | Type | Title (Description) | |-------|------|-------------| -| `license` | [License](aind_data_schema_models/licenses.md#license) | License | +| `license` | [License](biodata_models/licenses.md#license) | License | | `subject_id` | `Optional[str]` | Subject ID (Unique identifier for the subject of data acquisition) | | `creation_time` | `datetime (timezone-aware)` | Creation Time (Time that data files were created, used to uniquely identify the data) | | `tags` | `Optional[List[str]]` | Tags (Descriptive strings to help categorize and search for data) | | `name` | `Optional[str]` | Data asset name (When left blank, a name will be generated based on subject_id and creation_time. Conventionally also used as the name of the data folder.) | -| `institution` | [Organization](aind_data_schema_models/organizations.md#organization) | Institution (An established society, corporation, foundation or other organization that collected this data) | +| `institution` | [Organization](biodata_models/organizations.md#organization) | Institution (An established society, corporation, foundation or other organization that collected this data) | | `funding_source` | List[[Funding](data_description.md#funding)] | Funding source (Funding source. If internal funding, select 'Allen Institute') | -| `data_level` | [DataLevel](aind_data_schema_models/data_name_patterns.md#datalevel) | Data Level (Level of processing that data has undergone) | -| `group` | Optional[[Group](aind_data_schema_models/data_name_patterns.md#group)] | Group (A short name for the group of individuals that collected this data) | +| `data_level` | [DataLevel](biodata_models/data_name_patterns.md#datalevel) | Data Level (Level of processing that data has undergone) | +| `group` | Optional[[Group](biodata_models/data_name_patterns.md#group)] | Group (A short name for the group of individuals that collected this data) | | `investigators` | List[[Person](components/identifiers.md#person)] | Investigators (Full name(s) of key investigators (e.g. PI, lead scientist, contact person)) | | `project_name` | `str` | Project Name (A name for a set of coordinated activities intended to achieve one or more objectives.) | | `restrictions` | `Optional[str]` | Restrictions (Detail any restrictions on publishing or sharing these data) | -| `modalities` | List[[Modality](aind_data_schema_models/modalities.md#modality)] | Modalities (A short name for the specific manner, characteristic, pattern of application, or the employment of any technology or formal procedure to generate data for a study) | +| `modalities` | List[[Modality](biodata_models/modalities.md#modality)] | Modalities (A short name for the specific manner, characteristic, pattern of application, or the employment of any technology or formal procedure to generate data for a study) | | `source_data` | `Optional[List[str]]` | Source data (For derived assets, list the source data asset names used to create this data) | | `data_summary` | `Optional[str]` | Data summary (Semantic summary of experimental goal) | @@ -48,6 +48,6 @@ Description of funding sources | Field | Type | Title (Description) | |-------|------|-------------| -| `funder` | [Organization](aind_data_schema_models/organizations.md#organization) | Funder | +| `funder` | [Organization](biodata_models/organizations.md#organization) | Funder | | `grant_number` | `Optional[str]` | Grant number | | `fundee` | Optional[List[[Person](components/identifiers.md#person)]] | Fundee (Person(s) funded by this mechanism) | diff --git a/docs/source/example_workflow/example_workflow.md b/docs/source/example_workflow/example_workflow.md index 170fd49bc..7a5a22144 100644 --- a/docs/source/example_workflow/example_workflow.md +++ b/docs/source/example_workflow/example_workflow.md @@ -75,7 +75,7 @@ how was it funded, etc. We'll define a function to generate this, and re-use it :lines: 40-55 ``` -A few of the fields in the data description required us to use enumerated variables, like [DataLevel](../aind_data_schema_models/data_name_patterns.md#datalevel). Controlled vocabularies like this one are used to standardize the metadata and make it easier for people to search across assets from different experiments. We also use controlled vocabularies that are linked to external registries, like for [Organization](../aind_data_schema_models/organizations.md#organization) +A few of the fields in the data description required us to use enumerated variables, like [DataLevel](../biodata_models/data_name_patterns.md#datalevel). Controlled vocabularies like this one are used to standardize the metadata and make it easier for people to search across assets from different experiments. We also use controlled vocabularies that are linked to external registries, like for [Organization](../biodata_models/organizations.md#organization) ## Subject diff --git a/docs/source/example_workflow/example_workflow.py b/docs/source/example_workflow/example_workflow.py index d863ee8aa..b276cff21 100644 --- a/docs/source/example_workflow/example_workflow.py +++ b/docs/source/example_workflow/example_workflow.py @@ -4,12 +4,12 @@ from zoneinfo import ZoneInfo import pandas as pd -from aind_data_schema_models.brain_atlas import CCFv3 -from aind_data_schema_models.data_name_patterns import DataLevel -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.species import Strain -from aind_data_schema_models.units import VolumeUnit +from biodata_models.brain_atlas import CCFv3 +from biodata_models.data_name_patterns import DataLevel +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization +from biodata_models.species import Strain +from biodata_models.units import VolumeUnit from aind_data_schema.components.coordinates import CoordinateSystemLibrary, Rotation, Translation from aind_data_schema.components.identifiers import Person diff --git a/docs/source/inheritance.md b/docs/source/inheritance.md index 8d849adcf..e453fd492 100644 --- a/docs/source/inheritance.md +++ b/docs/source/inheritance.md @@ -36,7 +36,7 @@ from aind_data_schema.core.metadata import Metadata from aind_data_schema.core.processing import DataProcess, Processing, ProcessName, ProcessStage from aind_data_schema.core.quality_control import QCMetric, QCStatus, QualityControl, Stage, Status from aind_data_schema.components.identifiers import Code -from aind_data_schema_models.modalities import Modality +from biodata_models.modalities import Modality # Load and validate source metadata (e.g. from a JSON file) source = Metadata.model_validate_json(open("metadata.nd.json").read()) diff --git a/docs/source/instrument.md b/docs/source/instrument.md index b44705e87..22904a213 100644 --- a/docs/source/instrument.md +++ b/docs/source/instrument.md @@ -26,7 +26,7 @@ If you need to specify additional information about a device we will need to add ### Missing organizations -You can find the full list of [Organizations](aind_data_schema_models/organizations.md) in the `aind-data-schema-models` repository. Some device types are restricted to a subset of this full list to simplify the `metadata-entry` app. Please open an [issue](https://github.com/AllenNeuralDynamics/biodata-schema/issues) if you need a manufacturer that isn't available in either the main list or one of the subsets. +You can find the full list of [Organizations](biodata_models/organizations.md) in the `biodata-models` repository. Some device types are restricted to a subset of this full list to simplify the `metadata-entry` app. Please open an [issue](https://github.com/AllenNeuralDynamics/biodata-schema/issues) if you need a manufacturer that isn't available in either the main list or one of the subsets. ## Position @@ -58,7 +58,7 @@ Description of an instrument | `location` | `Optional[str]` | Location (Location of the instrument) | | `instrument_id` | `str` | Instrument ID (Unique instrument identifier) | | `modification_date` | `datetime.date` | Date of modification (Date of the last change to the instrument, hardware addition/removal, calibration, etc.) | -| `modalities` | List[[Modality](aind_data_schema_models/modalities.md#modality)] | Modalities (List of all possible modalities that the instrument is capable of acquiring) | +| `modalities` | List[[Modality](biodata_models/modalities.md#modality)] | Modalities (List of all possible modalities that the instrument is capable of acquiring) | | `calibrations` | Optional[List[[Calibration](components/measurements.md#calibration) or [VolumeCalibration](components/measurements.md#volumecalibration) or [PowerCalibration](components/measurements.md#powercalibration)]] | Calibrations (List of calibration measurements takend during instrument setup and maintenance) | | `coordinate_system` | Optional[[CoordinateSystem](components/coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use global_coordinate_system instead. Coordinate system (Origin and axis definitions for determining the position of the instrument's components) | | `global_coordinate_system` | [CoordinateSystem](components/coordinates.md#coordinatesystem) | Global coordinate system (Origin and axis definitions for determining the position of the instrument's components) | diff --git a/docs/source/model.md b/docs/source/model.md index 53bbb0f20..243ab1483 100644 --- a/docs/source/model.md +++ b/docs/source/model.md @@ -17,7 +17,7 @@ Description of a machine learning model including architecture, training, and ev | `name` | `str` | Name | | `version` | `str` | Version | | `example_run_code` | [Code](components/identifiers.md#code) | Example run code (Code to run the model, possibly including example parameters/data) | -| `architecture` | [ModelArchitecture](aind_data_schema_models/system_architecture.md#modelarchitecture) | architecture (Model architecture / type of model) | +| `architecture` | [ModelArchitecture](biodata_models/system_architecture.md#modelarchitecture) | architecture (Model architecture / type of model) | | `software_framework` | Optional[[Software](components/identifiers.md#software)] | Software framework | | `architecture_parameters` | `Optional[dict]` | Architecture parameters (Parameters of model architecture, such as input signature or number of layers.) | | `intended_use` | `str` | Intended model use (Semantic description of intended use) | @@ -35,7 +35,7 @@ Description of model evaluation | Field | Type | Title (Description) | |-------|------|-------------| -| `process_type` | [ProcessName](aind_data_schema_models/process_names.md#processname) | | +| `process_type` | [ProcessName](biodata_models/process_names.md#processname) | | | `performance` | List[[PerformanceMetric](model.md#performancemetric)] | Evaluation performance | | `name` | `str` | Name (('Unique name of the processing step.', ' If not provided, the type will be used as the name.')) | | `stage` | [ProcessStage](processing.md#processstage) | Processing stage | @@ -65,7 +65,7 @@ Description of model training | Field | Type | Title (Description) | |-------|------|-------------| -| `process_type` | [ProcessName](aind_data_schema_models/process_names.md#processname) | | +| `process_type` | [ProcessName](biodata_models/process_names.md#processname) | | | `train_performance` | List[[PerformanceMetric](model.md#performancemetric)] | Training performance (Performance on training set) | | `test_performance` | Optional[List[[PerformanceMetric](model.md#performancemetric)]] | Test performance (Performance on test data, evaluated during training) | | `test_evaluation_method` | `Optional[str]` | Test evaluation method (Approach to cross-validation or Train/test splitting) | diff --git a/docs/source/processing.md b/docs/source/processing.md index d3b17be23..430e3380e 100644 --- a/docs/source/processing.md +++ b/docs/source/processing.md @@ -35,7 +35,7 @@ Description of a single processing step | Field | Type | Title (Description) | |-------|------|-------------| -| `process_type` | [ProcessName](aind_data_schema_models/process_names.md#processname) | Process type | +| `process_type` | [ProcessName](biodata_models/process_names.md#processname) | Process type | | `name` | `str` | Name (('Unique name of the processing step.', ' If not provided, the type will be used as the name.')) | | `stage` | [ProcessStage](processing.md#processstage) | Processing stage | | `code` | [Code](components/identifiers.md#code) | Code (Code used for processing) | @@ -81,9 +81,9 @@ Description of resources used by a process | `cpu_cores` | `Optional[int]` | CPU cores | | `gpu` | `Optional[str]` | GPU name | | `system_memory` | `Optional[float]` | System memory | -| `system_memory_unit` | Optional[[MemoryUnit](aind_data_schema_models/units.md#memoryunit)] | System memory unit | +| `system_memory_unit` | Optional[[MemoryUnit](biodata_models/units.md#memoryunit)] | System memory unit | | `ram` | `Optional[float]` | System RAM | -| `ram_unit` | Optional[[MemoryUnit](aind_data_schema_models/units.md#memoryunit)] | Ram unit | +| `ram_unit` | Optional[[MemoryUnit](biodata_models/units.md#memoryunit)] | Ram unit | | `cpu_usage` | Optional[List[[ResourceTimestamped](processing.md#resourcetimestamped)]] | CPU usage | | `gpu_usage` | Optional[List[[ResourceTimestamped](processing.md#resourcetimestamped)]] | GPU usage | | `ram_usage` | Optional[List[[ResourceTimestamped](processing.md#resourcetimestamped)]] | RAM usage | diff --git a/docs/source/quality_control.md b/docs/source/quality_control.md index 864bfa2bb..2985d44a3 100644 --- a/docs/source/quality_control.md +++ b/docs/source/quality_control.md @@ -16,7 +16,7 @@ Each [QCMetric](#qcmetric) is a single value or array of values that can be comp Each [QCMetric](#qcmetric) has a [Status](#status). The [Status](#status) should depend directly on the `QCMetric.value`, either by a simple function: "value>5", or by a qualitative rule: "Field of view includes visual areas". The `QCMetric.description` field should describe the rule used to set the status. Metrics can be evaluated multiple times, in which case the new status should be appended the `QCMetric.status_history`. -Each [QCMetric](#qcmetric) is annotated with three pieces of additional metadata: the [Stage](#stage) during which it was evaluated, the [Modality](aind_data_schema_models/modalities.md#modality) of the evaluated data, and [tags](#tags). +Each [QCMetric](#qcmetric) is annotated with three pieces of additional metadata: the [Stage](#stage) during which it was evaluated, the [Modality](biodata_models/modalities.md#modality) of the evaluated data, and [tags](#tags). ### Curations @@ -114,7 +114,7 @@ Description of a curation metric | `type` | `str` | Curation type | | `curation_history` | List[[CurationHistory](quality_control.md#curationhistory)] | Curation history | | `name` | `str` | Metric name | -| `modality` | [Modality](aind_data_schema_models/modalities.md#modality) | Modality | +| `modality` | [Modality](biodata_models/modalities.md#modality) | Modality | | `stage` | [Stage](quality_control.md#stage) | Evaluation stage | | `status_history` | List[[QCStatus](quality_control.md#qcstatus)] | Metric status history | | `description` | `Optional[str]` | Metric description (Describes the measured value and the rule that links the value and status.) | @@ -130,7 +130,7 @@ Description of a single quality control metric | Field | Type | Title (Description) | |-------|------|-------------| | `name` | `str` | Metric name | -| `modality` | [Modality](aind_data_schema_models/modalities.md#modality) | Modality | +| `modality` | [Modality](biodata_models/modalities.md#modality) | Modality | | `stage` | [Stage](quality_control.md#stage) | Evaluation stage | | `value` | `typing.Any` | Metric value | | `status_history` | List[[QCStatus](quality_control.md#qcstatus)] | Metric status history | diff --git a/docs/source/registries.rst b/docs/source/registries.rst index 4bf985248..349bc24c6 100644 --- a/docs/source/registries.rst +++ b/docs/source/registries.rst @@ -3,27 +3,27 @@ Registries Registries are models that are linked to an external definition, like the NCBI species taxonomy, the Research Organization Registry, and the Common Coordinate Framework. Because we expect registries to evolve on a different timeline from the core schemas we have separated them into their own codebase. -`Source code `_ +`Source code `_ .. toctree:: :maxdepth: 2 - aind_data_schema_models/atlas - aind_data_schema_models/brain_atlas - aind_data_schema_models/coordinates - aind_data_schema_models/data_name_patterns - aind_data_schema_models/devices - aind_data_schema_models/external - aind_data_schema_models/harp_types - aind_data_schema_models/licenses - aind_data_schema_models/modalities - aind_data_schema_models/organizations - aind_data_schema_models/pid_names - aind_data_schema_models/process_names - aind_data_schema_models/reagent - aind_data_schema_models/registries - aind_data_schema_models/species - aind_data_schema_models/specimen_procedure_types - aind_data_schema_models/stimulus_modality - aind_data_schema_models/system_architecture - aind_data_schema_models/units \ No newline at end of file + biodata_models/atlas + biodata_models/brain_atlas + biodata_models/coordinates + biodata_models/data_name_patterns + biodata_models/devices + biodata_models/external + biodata_models/harp_types + biodata_models/licenses + biodata_models/modalities + biodata_models/organizations + biodata_models/pid_names + biodata_models/process_names + biodata_models/reagent + biodata_models/registries + biodata_models/species + biodata_models/specimen_procedure_types + biodata_models/stimulus_modality + biodata_models/system_architecture + biodata_models/units \ No newline at end of file diff --git a/examples/aibs_smartspim_instrument.py b/examples/aibs_smartspim_instrument.py index 9ef2bd034..5c55d63c3 100644 --- a/examples/aibs_smartspim_instrument.py +++ b/examples/aibs_smartspim_instrument.py @@ -3,10 +3,10 @@ import argparse import datetime -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import SizeUnit +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization +from biodata_models.units import SizeUnit from aind_data_schema.components.connections import Connection from aind_data_schema.components.coordinates import Axis, CoordinateSystem diff --git a/examples/aibs_smartspim_procedures.py b/examples/aibs_smartspim_procedures.py index a9210414f..4868b68a9 100644 --- a/examples/aibs_smartspim_procedures.py +++ b/examples/aibs_smartspim_procedures.py @@ -3,9 +3,9 @@ import argparse from datetime import date -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import SizeUnit +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.organizations import Organization +from biodata_models.units import SizeUnit from aind_data_schema.components.coordinates import Axis, CoordinateSystem from aind_data_schema.components.reagent import Reagent diff --git a/examples/aind_smartspim_instrument.py b/examples/aind_smartspim_instrument.py index d96bd21ab..1c9d62bf0 100644 --- a/examples/aind_smartspim_instrument.py +++ b/examples/aind_smartspim_instrument.py @@ -3,10 +3,10 @@ import argparse from datetime import date -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import SizeUnit +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization +from biodata_models.units import SizeUnit from aind_data_schema.components.connections import Connection from aind_data_schema.components.coordinates import Axis, CoordinateSystem diff --git a/examples/barseq_acquisition.py b/examples/barseq_acquisition.py index 8c32672aa..e3e8a1d0f 100644 --- a/examples/barseq_acquisition.py +++ b/examples/barseq_acquisition.py @@ -10,7 +10,7 @@ from datetime import datetime from zoneinfo import ZoneInfo -from aind_data_schema_models.modalities import Modality +from biodata_models.modalities import Modality from aind_data_schema.core.acquisition import Acquisition, ExternalDataStream diff --git a/examples/barseq_instrument.py b/examples/barseq_instrument.py index 3b3f97b3e..ede886b0a 100644 --- a/examples/barseq_instrument.py +++ b/examples/barseq_instrument.py @@ -3,10 +3,10 @@ import argparse from datetime import date -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import SizeUnit +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization +from biodata_models.units import SizeUnit from aind_data_schema.components.coordinates import Axis, CoordinateSystem from aind_data_schema.components.devices import ( diff --git a/examples/bergamo_ophys_acquisition.py b/examples/bergamo_ophys_acquisition.py index 58a49a33d..d00131312 100644 --- a/examples/bergamo_ophys_acquisition.py +++ b/examples/bergamo_ophys_acquisition.py @@ -4,11 +4,11 @@ from datetime import datetime from zoneinfo import ZoneInfo -from aind_data_schema_models.brain_atlas import CCFv3 -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.stimulus_modality import StimulusModality -from aind_data_schema_models.units import FrequencyUnit, SizeUnit +from biodata_models.brain_atlas import CCFv3 +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.modalities import Modality +from biodata_models.stimulus_modality import StimulusModality +from biodata_models.units import FrequencyUnit, SizeUnit from aind_data_schema.components.configs import ( Channel, diff --git a/examples/data_description.py b/examples/data_description.py index 8b417d033..4873d20dc 100644 --- a/examples/data_description.py +++ b/examples/data_description.py @@ -3,9 +3,9 @@ import argparse from datetime import datetime, timezone -from aind_data_schema_models.data_name_patterns import DataLevel -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization +from biodata_models.data_name_patterns import DataLevel +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization from aind_data_schema.components.identifiers import Person from aind_data_schema.core.data_description import DataDescription, Funding diff --git a/examples/ephys_acquisition.py b/examples/ephys_acquisition.py index cca590091..97d2e594d 100644 --- a/examples/ephys_acquisition.py +++ b/examples/ephys_acquisition.py @@ -4,11 +4,11 @@ from datetime import datetime from zoneinfo import ZoneInfo -from aind_data_schema_models.brain_atlas import CCFv3 -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.stimulus_modality import StimulusModality -from aind_data_schema_models.units import SizeUnit +from biodata_models.brain_atlas import CCFv3 +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.modalities import Modality +from biodata_models.stimulus_modality import StimulusModality +from biodata_models.units import SizeUnit from aind_data_schema.components.configs import ( EphysAssemblyConfig, diff --git a/examples/ephys_instrument.py b/examples/ephys_instrument.py index e7da9e65b..3e127637f 100644 --- a/examples/ephys_instrument.py +++ b/examples/ephys_instrument.py @@ -3,12 +3,12 @@ import argparse from datetime import date, datetime, timezone -from aind_data_schema_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin -from aind_data_schema_models.devices import CameraTarget -from aind_data_schema_models.harp_types import HarpDeviceType -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import FrequencyUnit, PowerUnit, SizeUnit +from biodata_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin +from biodata_models.devices import CameraTarget +from biodata_models.harp_types import HarpDeviceType +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization +from biodata_models.units import FrequencyUnit, PowerUnit, SizeUnit from aind_data_schema.components.connections import Connection from aind_data_schema.components.coordinates import Affine, Axis, CoordinateSystem, Translation diff --git a/examples/exaspim_acquisition.py b/examples/exaspim_acquisition.py index df7cdab24..3ec9e985f 100644 --- a/examples/exaspim_acquisition.py +++ b/examples/exaspim_acquisition.py @@ -4,12 +4,12 @@ from datetime import datetime from zoneinfo import ZoneInfo -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.pid_names import PIDName -from aind_data_schema_models.registries import Registry -from aind_data_schema_models.units import PowerUnit, SizeUnit +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization +from biodata_models.pid_names import PIDName +from biodata_models.registries import Registry +from biodata_models.units import PowerUnit, SizeUnit from aind_data_schema.components.configs import ( Channel, diff --git a/examples/exaspim_instrument.py b/examples/exaspim_instrument.py index e65a326d7..eb392cf56 100644 --- a/examples/exaspim_instrument.py +++ b/examples/exaspim_instrument.py @@ -3,10 +3,10 @@ import argparse import datetime -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import FrequencyUnit, SizeUnit +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization +from biodata_models.units import FrequencyUnit, SizeUnit from aind_data_schema.components.connections import Connection from aind_data_schema.components.coordinates import Axis, CoordinateSystem diff --git a/examples/exaspim_quality_control.py b/examples/exaspim_quality_control.py index c136d1bb1..f85f52027 100644 --- a/examples/exaspim_quality_control.py +++ b/examples/exaspim_quality_control.py @@ -3,8 +3,8 @@ import argparse from datetime import datetime -from aind_data_schema_models.brain_atlas import CCFv3 -from aind_data_schema_models.modalities import Modality +from biodata_models.brain_atlas import CCFv3 +from biodata_models.modalities import Modality from aind_data_schema.core.quality_control import QCMetric, QCStatus, QualityControl, Stage, Status diff --git a/examples/fip_behavior_instrument.py b/examples/fip_behavior_instrument.py index 0a0953e51..d7d08c60d 100644 --- a/examples/fip_behavior_instrument.py +++ b/examples/fip_behavior_instrument.py @@ -5,10 +5,10 @@ import argparse from datetime import date, datetime, timezone -from aind_data_schema_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin -from aind_data_schema_models.devices import CameraTarget -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.units import FrequencyUnit, PowerUnit, SizeUnit +from biodata_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin +from biodata_models.devices import CameraTarget +from biodata_models.modalities import Modality +from biodata_models.units import FrequencyUnit, PowerUnit, SizeUnit from aind_data_schema.components.connections import Connection from aind_data_schema.components.coordinates import Axis, CoordinateSystem diff --git a/examples/fip_ophys_acquisition.py b/examples/fip_ophys_acquisition.py index bf046da8f..65d3e4ac0 100644 --- a/examples/fip_ophys_acquisition.py +++ b/examples/fip_ophys_acquisition.py @@ -5,9 +5,9 @@ from decimal import Decimal from zoneinfo import ZoneInfo -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.stimulus_modality import StimulusModality -from aind_data_schema_models.units import FrequencyUnit, PowerUnit, SizeUnit, TimeUnit, VolumeUnit +from biodata_models.modalities import Modality +from biodata_models.stimulus_modality import StimulusModality +from biodata_models.units import FrequencyUnit, PowerUnit, SizeUnit, TimeUnit, VolumeUnit from aind_data_schema.components.configs import ( Channel, diff --git a/examples/fip_ophys_instrument.py b/examples/fip_ophys_instrument.py index 8196422d0..43106504f 100644 --- a/examples/fip_ophys_instrument.py +++ b/examples/fip_ophys_instrument.py @@ -3,9 +3,9 @@ import argparse from datetime import date, datetime, timezone -from aind_data_schema_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.units import FrequencyUnit, PowerUnit, SizeUnit +from biodata_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin +from biodata_models.modalities import Modality +from biodata_models.units import FrequencyUnit, PowerUnit, SizeUnit import aind_data_schema.components.devices as d import aind_data_schema.core.instrument as r diff --git a/examples/isi_instrument.py b/examples/isi_instrument.py index 3b52e1334..3065f9fd5 100644 --- a/examples/isi_instrument.py +++ b/examples/isi_instrument.py @@ -14,17 +14,17 @@ import argparse from datetime import date -from aind_data_schema_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin -from aind_data_schema_models.devices import ( +from biodata_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin +from biodata_models.devices import ( CameraChroma, CameraTarget, DataInterface, DetectorType, FilterType, ) -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import SizeUnit +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization +from biodata_models.units import SizeUnit from aind_data_schema.components.coordinates import Axis, CoordinateSystem from aind_data_schema.components.devices import ( diff --git a/examples/model.py b/examples/model.py index 8d9b8201c..d4cf73865 100644 --- a/examples/model.py +++ b/examples/model.py @@ -3,7 +3,7 @@ import argparse import datetime -from aind_data_schema_models.system_architecture import ModelArchitecture +from biodata_models.system_architecture import ModelArchitecture from aind_data_schema.components.identifiers import Code, DataAsset, Software from aind_data_schema.core.model import Model, ModelEvaluation, ModelTraining, PerformanceMetric diff --git a/examples/mri_acquisition.py b/examples/mri_acquisition.py index 1f0e0ffc2..16ff7c196 100644 --- a/examples/mri_acquisition.py +++ b/examples/mri_acquisition.py @@ -5,9 +5,9 @@ from decimal import Decimal from zoneinfo import ZoneInfo -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.units import MagneticFieldUnit, SizeUnit, TimeUnit +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.modalities import Modality +from biodata_models.units import MagneticFieldUnit, SizeUnit, TimeUnit from aind_data_schema.components.configs import MRAcquisitionType, MRIScan, PulseSequenceType, SubjectPosition from aind_data_schema.components.coordinates import Affine, Axis, CoordinateSystem, Scale, Translation diff --git a/examples/multiplane_ophys_acquisition.py b/examples/multiplane_ophys_acquisition.py index 443e90d01..ac63ecbac 100644 --- a/examples/multiplane_ophys_acquisition.py +++ b/examples/multiplane_ophys_acquisition.py @@ -4,11 +4,11 @@ from datetime import datetime from zoneinfo import ZoneInfo -from aind_data_schema_models.brain_atlas import CCFv3 -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.stimulus_modality import StimulusModality -from aind_data_schema_models.units import FrequencyUnit, PowerUnit, SizeUnit, VolumeUnit +from biodata_models.brain_atlas import CCFv3 +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.modalities import Modality +from biodata_models.stimulus_modality import StimulusModality +from biodata_models.units import FrequencyUnit, PowerUnit, SizeUnit, VolumeUnit from aind_data_schema.components.configs import ( Channel, diff --git a/examples/multiplane_ophys_instrument.py b/examples/multiplane_ophys_instrument.py index fa85df489..fcbf4c529 100644 --- a/examples/multiplane_ophys_instrument.py +++ b/examples/multiplane_ophys_instrument.py @@ -3,11 +3,11 @@ import argparse from datetime import date -from aind_data_schema_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin -from aind_data_schema_models.devices import CameraTarget -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import FrequencyUnit, SizeUnit +from biodata_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin +from biodata_models.devices import CameraTarget +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization +from biodata_models.units import FrequencyUnit, SizeUnit from aind_data_schema.components.connections import Connection from aind_data_schema.components.coordinates import Affine, Axis, CoordinateSystem, Translation diff --git a/examples/ophys_acquisition.py b/examples/ophys_acquisition.py index 36be58420..9ad7acd62 100644 --- a/examples/ophys_acquisition.py +++ b/examples/ophys_acquisition.py @@ -4,7 +4,7 @@ from datetime import datetime from zoneinfo import ZoneInfo -from aind_data_schema_models.modalities import Modality +from biodata_models.modalities import Modality from aind_data_schema.components.configs import Channel, DetectorConfig, LaserConfig, PatchCordConfig from aind_data_schema.components.connections import Connection diff --git a/examples/ophys_procedures.py b/examples/ophys_procedures.py index f065b526f..094371b97 100644 --- a/examples/ophys_procedures.py +++ b/examples/ophys_procedures.py @@ -3,14 +3,14 @@ import argparse import datetime -from aind_data_schema_models.brain_atlas import CCFv3 -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.pid_names import PIDName -from aind_data_schema_models.reagent import FluorophoreType, StainType -from aind_data_schema_models.registries import Registry -from aind_data_schema_models.species import Species -from aind_data_schema_models.units import SizeUnit, VolumeUnit +from biodata_models.brain_atlas import CCFv3 +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.organizations import Organization +from biodata_models.pid_names import PIDName +from biodata_models.reagent import FluorophoreType, StainType +from biodata_models.registries import Registry +from biodata_models.species import Species +from biodata_models.units import SizeUnit, VolumeUnit from aind_data_schema.components.configs import ProbeConfig from aind_data_schema.components.coordinates import Axis, CoordinateSystem, Translation diff --git a/examples/procedures.py b/examples/procedures.py index b1a360f43..9cc55e566 100644 --- a/examples/procedures.py +++ b/examples/procedures.py @@ -3,9 +3,9 @@ import argparse from datetime import datetime, timezone -from aind_data_schema_models.brain_atlas import CCFv3 -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.units import SizeUnit, VolumeUnit +from biodata_models.brain_atlas import CCFv3 +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.units import SizeUnit, VolumeUnit from aind_data_schema.components.configs import ProbeConfig from aind_data_schema.components.coordinates import Axis, CoordinateSystem, Rotation, Translation diff --git a/examples/processing.py b/examples/processing.py index f37e3b8a9..23263827b 100644 --- a/examples/processing.py +++ b/examples/processing.py @@ -3,8 +3,8 @@ import argparse from datetime import datetime, timezone -from aind_data_schema_models.system_architecture import CPUArchitecture, OperatingSystem -from aind_data_schema_models.units import MemoryUnit +from biodata_models.system_architecture import CPUArchitecture, OperatingSystem +from biodata_models.units import MemoryUnit from aind_data_schema.components.identifiers import Code, DataAsset from aind_data_schema.core.processing import ( diff --git a/examples/quality_control.py b/examples/quality_control.py index 105abe974..e7d18c235 100644 --- a/examples/quality_control.py +++ b/examples/quality_control.py @@ -3,7 +3,7 @@ import argparse from datetime import datetime, timezone -from aind_data_schema_models.modalities import Modality +from biodata_models.modalities import Modality from aind_data_schema.core.quality_control import QCMetric, QCStatus, QualityControl, Stage, Status diff --git a/examples/slap2_acquisition.py b/examples/slap2_acquisition.py index 07a9bfbf0..90b3e743d 100644 --- a/examples/slap2_acquisition.py +++ b/examples/slap2_acquisition.py @@ -3,12 +3,12 @@ import argparse from datetime import datetime, timezone -from aind_data_schema_models.brain_atlas import CCFv3 -from aind_data_schema_models.coordinates import AxisName, Direction -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.slap2_acquisition_type import Slap2AcquisitionType -from aind_data_schema_models.stimulus_modality import StimulusModality -from aind_data_schema_models.units import FrequencyUnit, PowerUnit, SizeUnit, TimeUnit +from biodata_models.brain_atlas import CCFv3 +from biodata_models.coordinates import AxisName, Direction +from biodata_models.modalities import Modality +from biodata_models.slap2_acquisition_type import Slap2AcquisitionType +from biodata_models.stimulus_modality import StimulusModality +from biodata_models.units import FrequencyUnit, PowerUnit, SizeUnit, TimeUnit from aind_data_schema.components.configs import ( Channel, diff --git a/examples/slap2_instrument.py b/examples/slap2_instrument.py index 55d1819e5..a10ccc73b 100644 --- a/examples/slap2_instrument.py +++ b/examples/slap2_instrument.py @@ -3,12 +3,12 @@ import argparse from datetime import datetime -from aind_data_schema_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin -from aind_data_schema_models.devices import CameraTarget, DetectorType, FilterType -from aind_data_schema_models.harp_types import HarpDeviceType -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import SizeUnit, SpeedUnit +from biodata_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin +from biodata_models.devices import CameraTarget, DetectorType, FilterType +from biodata_models.harp_types import HarpDeviceType +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization +from biodata_models.units import SizeUnit, SpeedUnit from aind_data_schema.components.connections import Connection from aind_data_schema.components.coordinates import Axis, CoordinateSystem diff --git a/examples/slap2_structure_acquisition.py b/examples/slap2_structure_acquisition.py index 479036616..bf09f63ab 100644 --- a/examples/slap2_structure_acquisition.py +++ b/examples/slap2_structure_acquisition.py @@ -3,11 +3,11 @@ import argparse from datetime import datetime, timezone -from aind_data_schema_models.brain_atlas import CCFv3 -from aind_data_schema_models.coordinates import AxisName, Direction -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.slap2_acquisition_type import Slap2AcquisitionType -from aind_data_schema_models.units import FrequencyUnit, PowerUnit, SizeUnit +from biodata_models.brain_atlas import CCFv3 +from biodata_models.coordinates import AxisName, Direction +from biodata_models.modalities import Modality +from biodata_models.slap2_acquisition_type import Slap2AcquisitionType +from biodata_models.units import FrequencyUnit, PowerUnit, SizeUnit from aind_data_schema.components.configs import ( Channel, diff --git a/examples/subject.py b/examples/subject.py index 9f9a61316..9d247b993 100644 --- a/examples/subject.py +++ b/examples/subject.py @@ -3,8 +3,8 @@ import argparse from datetime import datetime, timezone -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.species import Species, Strain +from biodata_models.organizations import Organization +from biodata_models.species import Species, Strain from aind_data_schema.components.subjects import BreedingInfo, Housing, MouseSubject, Sex from aind_data_schema.core.subject import Subject diff --git a/examples/thermistor_procedures.py b/examples/thermistor_procedures.py index e3b213a89..47f923260 100644 --- a/examples/thermistor_procedures.py +++ b/examples/thermistor_procedures.py @@ -3,9 +3,9 @@ import argparse from datetime import date -from aind_data_schema_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import SizeUnit +from biodata_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin +from biodata_models.organizations import Organization +from biodata_models.units import SizeUnit from aind_data_schema.components.coordinates import Axis, CoordinateSystem, Translation from aind_data_schema.components.devices import Device diff --git a/pyproject.toml b/pyproject.toml index 8183888d2..6aedfb7e6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,7 @@ readme = "README.md" dynamic = ["version"] dependencies = [ - 'aind-data-schema-models>=6.1.0,<7', + 'biodata-models>=1.0.1,<2', 'pydantic>=2.7, <2.12', 'pydantic-extra-types', 'tzdata', diff --git a/schemas/instrument_schema.json b/schemas/instrument_schema.json index 1e855304d..919f6e545 100644 --- a/schemas/instrument_schema.json +++ b/schemas/instrument_schema.json @@ -11482,7 +11482,7 @@ "AnalogInput": "#/$defs/_Analoginput", "Archimedes": "#/$defs/_Archimedes", "AudioSwitch": "#/$defs/_Audioswitch", - "Behavior": "#/$defs/aind_data_schema_models__harp_types___Behavior", + "Behavior": "#/$defs/biodata_models__harp_types___Behavior", "CameraController": "#/$defs/_Cameracontroller", "CameraControllerGen2": "#/$defs/_Cameracontrollergen2", "ClockSynchronizer": "#/$defs/_Clocksynchronizer", @@ -11538,7 +11538,7 @@ "$ref": "#/$defs/_Audioswitch" }, { - "$ref": "#/$defs/aind_data_schema_models__harp_types___Behavior" + "$ref": "#/$defs/biodata_models__harp_types___Behavior" }, { "$ref": "#/$defs/_Cameracontroller" @@ -19499,7 +19499,7 @@ "AnalogInput": "#/$defs/_Analoginput", "Archimedes": "#/$defs/_Archimedes", "AudioSwitch": "#/$defs/_Audioswitch", - "Behavior": "#/$defs/aind_data_schema_models__harp_types___Behavior", + "Behavior": "#/$defs/biodata_models__harp_types___Behavior", "CameraController": "#/$defs/_Cameracontroller", "CameraControllerGen2": "#/$defs/_Cameracontrollergen2", "ClockSynchronizer": "#/$defs/_Clocksynchronizer", @@ -19555,7 +19555,7 @@ "$ref": "#/$defs/_Audioswitch" }, { - "$ref": "#/$defs/aind_data_schema_models__harp_types___Behavior" + "$ref": "#/$defs/biodata_models__harp_types___Behavior" }, { "$ref": "#/$defs/_Cameracontroller" @@ -32736,7 +32736,7 @@ "title": "_World_Precision_Intstruments", "type": "object" }, - "aind_data_schema_models__harp_types___Behavior": { + "biodata_models__harp_types___Behavior": { "description": "Model Behavior", "properties": { "whoami": { @@ -32755,7 +32755,7 @@ "title": "_Behavior", "type": "object" }, - "aind_data_schema_models__modalities___Behavior": { + "biodata_models__modalities___Behavior": { "additionalProperties": false, "description": "Model behavior", "properties": { @@ -32834,7 +32834,7 @@ "MRI": "#/$defs/_Mri", "SPIM": "#/$defs/_Spim", "STPT": "#/$defs/_Stpt", - "behavior": "#/$defs/aind_data_schema_models__modalities___Behavior", + "behavior": "#/$defs/biodata_models__modalities___Behavior", "behavior-videos": "#/$defs/_Behavior_Videos", "brightfield": "#/$defs/_Brightfield", "confocal": "#/$defs/_Confocal", @@ -32855,7 +32855,7 @@ "$ref": "#/$defs/_Barseq" }, { - "$ref": "#/$defs/aind_data_schema_models__modalities___Behavior" + "$ref": "#/$defs/biodata_models__modalities___Behavior" }, { "$ref": "#/$defs/_Behavior_Videos" diff --git a/schemas/metadata_schema.json b/schemas/metadata_schema.json index 53339ccf6..b38b904cc 100644 --- a/schemas/metadata_schema.json +++ b/schemas/metadata_schema.json @@ -1108,7 +1108,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -1484,7 +1484,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -1855,7 +1855,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -2231,7 +2231,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -2530,7 +2530,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -2906,7 +2906,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -3853,7 +3853,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -4229,7 +4229,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -4837,7 +4837,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -5213,7 +5213,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -5467,7 +5467,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -5843,7 +5843,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -6458,7 +6458,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -6834,7 +6834,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -7343,7 +7343,7 @@ "MRI": "#/$defs/_Mri", "SPIM": "#/$defs/_Spim", "STPT": "#/$defs/_Stpt", - "behavior": "#/$defs/aind_data_schema_models__modalities___Behavior", + "behavior": "#/$defs/biodata_models__modalities___Behavior", "behavior-videos": "#/$defs/_Behavior_Videos", "brightfield": "#/$defs/_Brightfield", "confocal": "#/$defs/_Confocal", @@ -7364,7 +7364,7 @@ "$ref": "#/$defs/_Barseq" }, { - "$ref": "#/$defs/aind_data_schema_models__modalities___Behavior" + "$ref": "#/$defs/biodata_models__modalities___Behavior" }, { "$ref": "#/$defs/_Behavior_Videos" @@ -7753,7 +7753,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -8129,7 +8129,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -8479,7 +8479,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -8855,7 +8855,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -8940,7 +8940,7 @@ "MRI": "#/$defs/_Mri", "SPIM": "#/$defs/_Spim", "STPT": "#/$defs/_Stpt", - "behavior": "#/$defs/aind_data_schema_models__modalities___Behavior", + "behavior": "#/$defs/biodata_models__modalities___Behavior", "behavior-videos": "#/$defs/_Behavior_Videos", "brightfield": "#/$defs/_Brightfield", "confocal": "#/$defs/_Confocal", @@ -8961,7 +8961,7 @@ "$ref": "#/$defs/_Barseq" }, { - "$ref": "#/$defs/aind_data_schema_models__modalities___Behavior" + "$ref": "#/$defs/biodata_models__modalities___Behavior" }, { "$ref": "#/$defs/_Behavior_Videos" @@ -9254,7 +9254,7 @@ "MRI": "#/$defs/_Mri", "SPIM": "#/$defs/_Spim", "STPT": "#/$defs/_Stpt", - "behavior": "#/$defs/aind_data_schema_models__modalities___Behavior", + "behavior": "#/$defs/biodata_models__modalities___Behavior", "behavior-videos": "#/$defs/_Behavior_Videos", "brightfield": "#/$defs/_Brightfield", "confocal": "#/$defs/_Confocal", @@ -9275,7 +9275,7 @@ "$ref": "#/$defs/_Barseq" }, { - "$ref": "#/$defs/aind_data_schema_models__modalities___Behavior" + "$ref": "#/$defs/biodata_models__modalities___Behavior" }, { "$ref": "#/$defs/_Behavior_Videos" @@ -9628,7 +9628,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -10004,7 +10004,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -10619,7 +10619,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -10995,7 +10995,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -11338,7 +11338,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -11714,7 +11714,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -12009,7 +12009,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -12385,7 +12385,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -12685,7 +12685,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -13061,7 +13061,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -13415,7 +13415,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -13791,7 +13791,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -13907,7 +13907,7 @@ "MRI": "#/$defs/_Mri", "SPIM": "#/$defs/_Spim", "STPT": "#/$defs/_Stpt", - "behavior": "#/$defs/aind_data_schema_models__modalities___Behavior", + "behavior": "#/$defs/biodata_models__modalities___Behavior", "behavior-videos": "#/$defs/_Behavior_Videos", "brightfield": "#/$defs/_Brightfield", "confocal": "#/$defs/_Confocal", @@ -13928,7 +13928,7 @@ "$ref": "#/$defs/_Barseq" }, { - "$ref": "#/$defs/aind_data_schema_models__modalities___Behavior" + "$ref": "#/$defs/biodata_models__modalities___Behavior" }, { "$ref": "#/$defs/_Behavior_Videos" @@ -14251,7 +14251,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -14627,7 +14627,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -14883,7 +14883,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -15259,7 +15259,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -15550,7 +15550,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -15926,7 +15926,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -16204,7 +16204,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -16580,7 +16580,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -16801,7 +16801,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -17177,7 +17177,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -17472,7 +17472,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -17848,7 +17848,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -18075,7 +18075,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -18451,7 +18451,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -18947,7 +18947,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -19323,7 +19323,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -19419,7 +19419,7 @@ "AnalogInput": "#/$defs/_Analoginput", "Archimedes": "#/$defs/_Archimedes", "AudioSwitch": "#/$defs/_Audioswitch", - "Behavior": "#/$defs/aind_data_schema_models__harp_types___Behavior", + "Behavior": "#/$defs/biodata_models__harp_types___Behavior", "CameraController": "#/$defs/_Cameracontroller", "CameraControllerGen2": "#/$defs/_Cameracontrollergen2", "ClockSynchronizer": "#/$defs/_Clocksynchronizer", @@ -19475,7 +19475,7 @@ "$ref": "#/$defs/_Audioswitch" }, { - "$ref": "#/$defs/aind_data_schema_models__harp_types___Behavior" + "$ref": "#/$defs/biodata_models__harp_types___Behavior" }, { "$ref": "#/$defs/_Cameracontroller" @@ -19964,7 +19964,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -20340,7 +20340,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -20960,7 +20960,7 @@ "MRI": "#/$defs/_Mri", "SPIM": "#/$defs/_Spim", "STPT": "#/$defs/_Stpt", - "behavior": "#/$defs/aind_data_schema_models__modalities___Behavior", + "behavior": "#/$defs/biodata_models__modalities___Behavior", "behavior-videos": "#/$defs/_Behavior_Videos", "brightfield": "#/$defs/_Brightfield", "confocal": "#/$defs/_Confocal", @@ -20981,7 +20981,7 @@ "$ref": "#/$defs/_Barseq" }, { - "$ref": "#/$defs/aind_data_schema_models__modalities___Behavior" + "$ref": "#/$defs/biodata_models__modalities___Behavior" }, { "$ref": "#/$defs/_Behavior_Videos" @@ -21484,7 +21484,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -21860,7 +21860,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -22130,7 +22130,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -22506,7 +22506,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -22875,7 +22875,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -23251,7 +23251,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -23484,7 +23484,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -23860,7 +23860,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -24312,7 +24312,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -24688,7 +24688,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -25559,7 +25559,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -25935,7 +25935,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -26217,7 +26217,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -26593,7 +26593,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -27344,7 +27344,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -27720,7 +27720,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -28027,7 +28027,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -28403,7 +28403,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -28587,7 +28587,7 @@ "mapping": { "BALB/c": "#/$defs/_Balb_C", "C57BL/6J": "#/$defs/_C57Bl_6J", - "Unknown": "#/$defs/aind_data_schema_models__species___Unknown" + "Unknown": "#/$defs/biodata_models__species___Unknown" }, "propertyName": "name" }, @@ -28599,7 +28599,7 @@ "$ref": "#/$defs/_Balb_C" }, { - "$ref": "#/$defs/aind_data_schema_models__species___Unknown" + "$ref": "#/$defs/biodata_models__species___Unknown" } ], "title": "Strain" @@ -28834,7 +28834,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -29210,7 +29210,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -29418,7 +29418,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -29794,7 +29794,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -30158,7 +30158,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -30534,7 +30534,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -30871,7 +30871,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -31247,7 +31247,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -31475,7 +31475,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -31851,7 +31851,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -32092,7 +32092,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -32468,7 +32468,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -32735,7 +32735,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -33111,7 +33111,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -33210,7 +33210,7 @@ "AnalogInput": "#/$defs/_Analoginput", "Archimedes": "#/$defs/_Archimedes", "AudioSwitch": "#/$defs/_Audioswitch", - "Behavior": "#/$defs/aind_data_schema_models__harp_types___Behavior", + "Behavior": "#/$defs/biodata_models__harp_types___Behavior", "CameraController": "#/$defs/_Cameracontroller", "CameraControllerGen2": "#/$defs/_Cameracontrollergen2", "ClockSynchronizer": "#/$defs/_Clocksynchronizer", @@ -33266,7 +33266,7 @@ "$ref": "#/$defs/_Audioswitch" }, { - "$ref": "#/$defs/aind_data_schema_models__harp_types___Behavior" + "$ref": "#/$defs/biodata_models__harp_types___Behavior" }, { "$ref": "#/$defs/_Cameracontroller" @@ -33735,7 +33735,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -34111,7 +34111,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -35145,7 +35145,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -35521,7 +35521,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -35815,7 +35815,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -36191,7 +36191,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -36781,7 +36781,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -37157,7 +37157,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -37644,7 +37644,7 @@ "MRI": "#/$defs/_Mri", "SPIM": "#/$defs/_Spim", "STPT": "#/$defs/_Stpt", - "behavior": "#/$defs/aind_data_schema_models__modalities___Behavior", + "behavior": "#/$defs/biodata_models__modalities___Behavior", "behavior-videos": "#/$defs/_Behavior_Videos", "brightfield": "#/$defs/_Brightfield", "confocal": "#/$defs/_Confocal", @@ -37665,7 +37665,7 @@ "$ref": "#/$defs/_Barseq" }, { - "$ref": "#/$defs/aind_data_schema_models__modalities___Behavior" + "$ref": "#/$defs/biodata_models__modalities___Behavior" }, { "$ref": "#/$defs/_Behavior_Videos" @@ -38093,7 +38093,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -38469,7 +38469,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -39148,7 +39148,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -39524,7 +39524,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -39753,7 +39753,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -40129,7 +40129,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -40775,7 +40775,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -41151,7 +41151,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -42373,7 +42373,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -42749,7 +42749,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -43019,7 +43019,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -43395,7 +43395,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -43977,7 +43977,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -44353,7 +44353,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -51435,7 +51435,7 @@ "title": "_World_Precision_Intstruments", "type": "object" }, - "aind_data_schema_models__harp_types___Behavior": { + "biodata_models__harp_types___Behavior": { "description": "Model Behavior", "properties": { "whoami": { @@ -51454,7 +51454,7 @@ "title": "_Behavior", "type": "object" }, - "aind_data_schema_models__modalities___Behavior": { + "biodata_models__modalities___Behavior": { "additionalProperties": false, "description": "Model behavior", "properties": { @@ -51474,7 +51474,7 @@ "title": "_Behavior", "type": "object" }, - "aind_data_schema_models__organizations___Unknown": { + "biodata_models__organizations___Unknown": { "description": "Model Unknown", "properties": { "name": { @@ -51516,7 +51516,7 @@ "title": "_Unknown", "type": "object" }, - "aind_data_schema_models__species___Unknown": { + "biodata_models__species___Unknown": { "description": "Model Unknown", "properties": { "name": { diff --git a/schemas/subject_schema.json b/schemas/subject_schema.json index 2d6fb7de2..f7457c1ec 100644 --- a/schemas/subject_schema.json +++ b/schemas/subject_schema.json @@ -232,7 +232,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -608,7 +608,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -906,7 +906,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -1282,7 +1282,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -1371,7 +1371,7 @@ "mapping": { "BALB/c": "#/$defs/_Balb_C", "C57BL/6J": "#/$defs/_C57Bl_6J", - "Unknown": "#/$defs/aind_data_schema_models__species___Unknown" + "Unknown": "#/$defs/biodata_models__species___Unknown" }, "propertyName": "name" }, @@ -1383,7 +1383,7 @@ "$ref": "#/$defs/_Balb_C" }, { - "$ref": "#/$defs/aind_data_schema_models__species___Unknown" + "$ref": "#/$defs/biodata_models__species___Unknown" } ], "title": "Strain" @@ -1618,7 +1618,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -1994,7 +1994,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -2267,7 +2267,7 @@ "Tymphany": "#/$defs/_Tymphany", "University of California, San Diego": "#/$defs/_University_Of_California_San_Diego", "University of Pennsylvania": "#/$defs/_University_Of_Pennsylvania", - "Unknown": "#/$defs/aind_data_schema_models__organizations___Unknown", + "Unknown": "#/$defs/biodata_models__organizations___Unknown", "Vieworks": "#/$defs/_Vieworks", "Vortran": "#/$defs/_Vortran", "World Precision Intstruments": "#/$defs/_World_Precision_Intstruments", @@ -2643,7 +2643,7 @@ "$ref": "#/$defs/_University_Of_Pennsylvania" }, { - "$ref": "#/$defs/aind_data_schema_models__organizations___Unknown" + "$ref": "#/$defs/biodata_models__organizations___Unknown" }, { "$ref": "#/$defs/_Vieworks" @@ -8541,7 +8541,7 @@ "title": "_World_Precision_Intstruments", "type": "object" }, - "aind_data_schema_models__organizations___Unknown": { + "biodata_models__organizations___Unknown": { "description": "Model Unknown", "properties": { "name": { @@ -8583,7 +8583,7 @@ "title": "_Unknown", "type": "object" }, - "aind_data_schema_models__species___Unknown": { + "biodata_models__species___Unknown": { "description": "Model Unknown", "properties": { "name": { diff --git a/src/aind_data_schema/components/configs.py b/src/aind_data_schema/components/configs.py index d3aac6942..27fe074e0 100644 --- a/src/aind_data_schema/components/configs.py +++ b/src/aind_data_schema/components/configs.py @@ -4,12 +4,12 @@ from enum import Enum from typing import List, Optional -from aind_data_schema_models.brain_atlas import BrainStructureModel -from aind_data_schema_models.coordinates import AnatomicalRelative -from aind_data_schema_models.devices import ImmersionMedium -from aind_data_schema_models.mouse_anatomy import MouseAnatomyModel -from aind_data_schema_models.slap2_acquisition_type import Slap2AcquisitionType -from aind_data_schema_models.units import ( +from biodata_models.brain_atlas import BrainStructureModel +from biodata_models.coordinates import AnatomicalRelative +from biodata_models.devices import ImmersionMedium +from biodata_models.mouse_anatomy import MouseAnatomyModel +from biodata_models.slap2_acquisition_type import Slap2AcquisitionType +from biodata_models.units import ( AngleUnit, ConcentrationUnit, FrequencyUnit, diff --git a/src/aind_data_schema/components/coordinates.py b/src/aind_data_schema/components/coordinates.py index 28d73f395..1cdf440d9 100644 --- a/src/aind_data_schema/components/coordinates.py +++ b/src/aind_data_schema/components/coordinates.py @@ -3,10 +3,10 @@ from enum import Enum from typing import List, Optional -from aind_data_schema_models.atlas import AtlasName -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.mouse_anatomy import MouseAnatomyModel -from aind_data_schema_models.units import AngleUnit, SizeUnit +from biodata_models.atlas import AtlasName +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.mouse_anatomy import MouseAnatomyModel +from biodata_models.units import AngleUnit, SizeUnit from pydantic import Field, field_validator from aind_data_schema.base import DataModel, DiscriminatedList diff --git a/src/aind_data_schema/components/devices.py b/src/aind_data_schema/components/devices.py index 50a8eb1c1..071cf3b34 100644 --- a/src/aind_data_schema/components/devices.py +++ b/src/aind_data_schema/components/devices.py @@ -6,8 +6,8 @@ from enum import Enum from typing import List, Literal, Optional -from aind_data_schema_models.coordinates import AnatomicalRelative -from aind_data_schema_models.devices import ( +from biodata_models.coordinates import AnatomicalRelative +from biodata_models.devices import ( BinMode, CameraChroma, CameraTarget, @@ -27,10 +27,10 @@ ProbeModel, StageAxisDirection, ) -from aind_data_schema_models.harp_types import HarpDeviceType -from aind_data_schema_models.mouse_anatomy import MouseAnatomyModel -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import ( +from biodata_models.harp_types import HarpDeviceType +from biodata_models.mouse_anatomy import MouseAnatomyModel +from biodata_models.organizations import Organization +from biodata_models.units import ( FrequencyUnit, MagneticFieldUnit, SizeUnit, diff --git a/src/aind_data_schema/components/geometry.py b/src/aind_data_schema/components/geometry.py index a9e66c642..b929bcc4b 100644 --- a/src/aind_data_schema/components/geometry.py +++ b/src/aind_data_schema/components/geometry.py @@ -1,6 +1,6 @@ """Classes to define geometry""" -from aind_data_schema_models.units import SizeUnit +from biodata_models.units import SizeUnit from pydantic import Field from aind_data_schema.base import DataModel diff --git a/src/aind_data_schema/components/identifiers.py b/src/aind_data_schema/components/identifiers.py index 096dba475..e69a91d5c 100644 --- a/src/aind_data_schema/components/identifiers.py +++ b/src/aind_data_schema/components/identifiers.py @@ -5,7 +5,7 @@ from pathlib import Path from typing import Annotated, Dict, List, Optional -from aind_data_schema_models.registries import Registry +from biodata_models.registries import Registry from pydantic import BaseModel, Field, StringConstraints, model_validator from aind_data_schema.base import DataModel, DiscriminatedList, GenericModel diff --git a/src/aind_data_schema/components/injection_procedures.py b/src/aind_data_schema/components/injection_procedures.py index 4c0060051..56ca6dd08 100644 --- a/src/aind_data_schema/components/injection_procedures.py +++ b/src/aind_data_schema/components/injection_procedures.py @@ -4,10 +4,10 @@ from enum import Enum from typing import List, Optional -from aind_data_schema_models.coordinates import AnatomicalRelative -from aind_data_schema_models.mouse_anatomy import MouseAnatomyModel -from aind_data_schema_models.pid_names import PIDName -from aind_data_schema_models.units import CurrentUnit, TimeUnit, VolumeUnit +from biodata_models.coordinates import AnatomicalRelative +from biodata_models.mouse_anatomy import MouseAnatomyModel +from biodata_models.pid_names import PIDName +from biodata_models.units import CurrentUnit, TimeUnit, VolumeUnit from pydantic import Field, model_validator from aind_data_schema.base import DataModel, DiscriminatedList diff --git a/src/aind_data_schema/components/measurements.py b/src/aind_data_schema/components/measurements.py index 0958fd608..9e6edb3a7 100644 --- a/src/aind_data_schema/components/measurements.py +++ b/src/aind_data_schema/components/measurements.py @@ -3,7 +3,7 @@ from enum import Enum from typing import Annotated, List, Literal, Optional -from aind_data_schema_models.units import UNITS, PowerUnit, TimeUnit, VoltageUnit, VolumeUnit +from biodata_models.units import UNITS, PowerUnit, TimeUnit, VoltageUnit, VolumeUnit from pydantic import model_validator from aind_data_schema.base import AwareDatetimeWithDefault, DataModel, Discriminated, Field, GenericModel diff --git a/src/aind_data_schema/components/reagent.py b/src/aind_data_schema/components/reagent.py index 34e04ecaa..44e847da4 100644 --- a/src/aind_data_schema/components/reagent.py +++ b/src/aind_data_schema/components/reagent.py @@ -3,11 +3,11 @@ from datetime import date from typing import List, Optional, Union -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.pid_names import PIDName -from aind_data_schema_models.reagent import FluorophoreType, StainType -from aind_data_schema_models.species import Species -from aind_data_schema_models.units import MassUnit, SizeUnit +from biodata_models.organizations import Organization +from biodata_models.pid_names import PIDName +from biodata_models.reagent import FluorophoreType, StainType +from biodata_models.species import Species +from biodata_models.units import MassUnit, SizeUnit from pydantic import Field from aind_data_schema.base import DataModel, Discriminated diff --git a/src/aind_data_schema/components/specimen_procedures.py b/src/aind_data_schema/components/specimen_procedures.py index dffde2907..9280ad516 100644 --- a/src/aind_data_schema/components/specimen_procedures.py +++ b/src/aind_data_schema/components/specimen_procedures.py @@ -4,10 +4,10 @@ from enum import Enum from typing import Dict, List, Optional, Union -from aind_data_schema_models.brain_atlas import BrainStructureModel -from aind_data_schema_models.coordinates import AnatomicalRelative -from aind_data_schema_models.specimen_procedure_types import SpecimenProcedureType -from aind_data_schema_models.units import SizeUnit +from biodata_models.brain_atlas import BrainStructureModel +from biodata_models.coordinates import AnatomicalRelative +from biodata_models.specimen_procedure_types import SpecimenProcedureType +from biodata_models.units import SizeUnit from pydantic import Field, model_validator from aind_data_schema.base import ( diff --git a/src/aind_data_schema/components/stimulus.py b/src/aind_data_schema/components/stimulus.py index f9a415371..c16bfe855 100644 --- a/src/aind_data_schema/components/stimulus.py +++ b/src/aind_data_schema/components/stimulus.py @@ -4,7 +4,7 @@ from enum import Enum from typing import List, Optional -from aind_data_schema_models.units import FrequencyUnit, PowerUnit, TimeUnit +from biodata_models.units import FrequencyUnit, PowerUnit, TimeUnit from pydantic import Field, model_validator from aind_data_schema.base import DataModel, GenericModel diff --git a/src/aind_data_schema/components/subject_procedures.py b/src/aind_data_schema/components/subject_procedures.py index 716e45d56..30eba62af 100644 --- a/src/aind_data_schema/components/subject_procedures.py +++ b/src/aind_data_schema/components/subject_procedures.py @@ -3,8 +3,8 @@ from datetime import date from typing import Dict, List, Optional -from aind_data_schema_models.coordinates import Origin -from aind_data_schema_models.units import MassUnit, UnitlessUnit, VolumeUnit +from biodata_models.coordinates import Origin +from biodata_models.units import MassUnit, UnitlessUnit, VolumeUnit from pydantic import Field from aind_data_schema.base import DataModel, DiscriminatedList diff --git a/src/aind_data_schema/components/subjects.py b/src/aind_data_schema/components/subjects.py index 49dfd9bf6..2565bd9d3 100644 --- a/src/aind_data_schema/components/subjects.py +++ b/src/aind_data_schema/components/subjects.py @@ -5,9 +5,9 @@ from enum import Enum from typing import Annotated, List, Optional -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.pid_names import PIDName -from aind_data_schema_models.species import Species, SpeciesModel, Strain +from biodata_models.organizations import Organization +from biodata_models.pid_names import PIDName +from biodata_models.species import Species, SpeciesModel, Strain from pydantic import Field, field_validator, model_validator from pydantic_core.core_schema import ValidationInfo diff --git a/src/aind_data_schema/components/surgery_procedures.py b/src/aind_data_schema/components/surgery_procedures.py index c8e1fce29..818a4da11 100644 --- a/src/aind_data_schema/components/surgery_procedures.py +++ b/src/aind_data_schema/components/surgery_procedures.py @@ -3,11 +3,11 @@ from enum import Enum from typing import List, Optional, Union -from aind_data_schema_models.brain_atlas import BrainStructureModel -from aind_data_schema_models.coordinates import AnatomicalRelative -from aind_data_schema_models.mouse_anatomy import MouseAnatomyModel -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import SizeUnit, TimeUnit, VolumeUnit +from biodata_models.brain_atlas import BrainStructureModel +from biodata_models.coordinates import AnatomicalRelative +from biodata_models.mouse_anatomy import MouseAnatomyModel +from biodata_models.organizations import Organization +from biodata_models.units import SizeUnit, TimeUnit, VolumeUnit from pydantic import Field, field_validator, model_validator from aind_data_schema.base import AwareDatetimeWithDefault, DataModel diff --git a/src/aind_data_schema/core/acquisition.py b/src/aind_data_schema/core/acquisition.py index 626ad0298..61f53291d 100644 --- a/src/aind_data_schema/core/acquisition.py +++ b/src/aind_data_schema/core/acquisition.py @@ -7,9 +7,9 @@ from typing import Annotated, List, Literal, Optional, Union from zoneinfo import ZoneInfo -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.stimulus_modality import StimulusModality -from aind_data_schema_models.units import MassUnit, VolumeUnit +from biodata_models.modalities import Modality +from biodata_models.stimulus_modality import StimulusModality +from biodata_models.units import MassUnit, VolumeUnit from pydantic import Field, SkipValidation, field_validator, model_validator from pydantic_extra_types.timezone_name import TimeZoneName diff --git a/src/aind_data_schema/core/data_description.py b/src/aind_data_schema/core/data_description.py index 7521d0b89..a9dcc3756 100644 --- a/src/aind_data_schema/core/data_description.py +++ b/src/aind_data_schema/core/data_description.py @@ -3,16 +3,16 @@ import re from typing import List, Literal, Optional -from aind_data_schema_models.data_name_patterns import ( +from biodata_models.data_name_patterns import ( DataLevel, DataRegex, Group, build_data_name, datetime_from_name_string, ) -from aind_data_schema_models.licenses import License -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization +from biodata_models.licenses import License +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization from pydantic import Field, SkipValidation, model_validator from aind_data_schema.base import AwareDatetimeWithDefault, DataCoreModel, DataModel diff --git a/src/aind_data_schema/core/instrument.py b/src/aind_data_schema/core/instrument.py index 429bdc4d2..e45ac8a99 100644 --- a/src/aind_data_schema/core/instrument.py +++ b/src/aind_data_schema/core/instrument.py @@ -4,7 +4,7 @@ from datetime import date from typing import List, Literal, Optional -from aind_data_schema_models.modalities import Modality +from biodata_models.modalities import Modality from pydantic import Field, SkipValidation, field_validator, model_validator from aind_data_schema.base import DataCoreModel, DiscriminatedList diff --git a/src/aind_data_schema/core/metadata.py b/src/aind_data_schema/core/metadata.py index 2a0a087e8..dcd586c9f 100644 --- a/src/aind_data_schema/core/metadata.py +++ b/src/aind_data_schema/core/metadata.py @@ -7,7 +7,7 @@ from pathlib import Path from typing import Dict, List, Literal, Optional, Union, get_args -from aind_data_schema_models.modalities import Modality +from biodata_models.modalities import Modality from pydantic import ( ConfigDict, Field, diff --git a/src/aind_data_schema/core/model.py b/src/aind_data_schema/core/model.py index 73a9e040a..f661d3c16 100644 --- a/src/aind_data_schema/core/model.py +++ b/src/aind_data_schema/core/model.py @@ -2,7 +2,7 @@ from typing import Any, List, Literal, Optional -from aind_data_schema_models.system_architecture import ModelArchitecture +from biodata_models.system_architecture import ModelArchitecture from pydantic import Field from aind_data_schema.base import DataCoreModel, DataModel, DiscriminatedList, GenericModel diff --git a/src/aind_data_schema/core/processing.py b/src/aind_data_schema/core/processing.py index 461b50913..45388583c 100644 --- a/src/aind_data_schema/core/processing.py +++ b/src/aind_data_schema/core/processing.py @@ -5,8 +5,8 @@ from enum import Enum from typing import Annotated, Dict, List, Literal, Optional -from aind_data_schema_models.process_names import ProcessName -from aind_data_schema_models.units import MemoryUnit, UnitlessUnit +from biodata_models.process_names import ProcessName +from biodata_models.units import MemoryUnit, UnitlessUnit from pydantic import Field, SkipValidation, model_validator from aind_data_schema.base import AwareDatetimeWithDefault, DataCoreModel, DataModel, GenericModel diff --git a/src/aind_data_schema/core/quality_control.py b/src/aind_data_schema/core/quality_control.py index 99f1bb308..f2897eaa6 100644 --- a/src/aind_data_schema/core/quality_control.py +++ b/src/aind_data_schema/core/quality_control.py @@ -4,7 +4,7 @@ from enum import Enum from typing import Any, List, Literal, Optional, Union -from aind_data_schema_models.modalities import Modality +from biodata_models.modalities import Modality from pydantic import Field, SkipValidation, model_validator from aind_data_schema.base import AwareDatetimeWithDefault, DataCoreModel, DataModel, DiscriminatedList diff --git a/src/aind_data_schema/utils/docs/doc_generator.py b/src/aind_data_schema/utils/docs/doc_generator.py index 851d1b997..e6f4711c4 100644 --- a/src/aind_data_schema/utils/docs/doc_generator.py +++ b/src/aind_data_schema/utils/docs/doc_generator.py @@ -149,13 +149,13 @@ def process_components(component_folder, output_rel_path): replacement = replacement.replace("components/", "") # If we aren't linking out of the component folder, remove the component folder from the link - if "aind_data_schema_models/" not in replacement: + if "biodata_models/" not in replacement: replacement = replacement.replace(f"{component_folder}.md", "") combined_content = combined_content.replace(link, replacement) # Deal with special cases which are incorrectly linked too deep - combined_content = combined_content.replace("(aind_data_schema_models/", "(../aind_data_schema_models/") + combined_content = combined_content.replace("(biodata_models/", "(../biodata_models/") # Write to the output file with open(output_file_path, "w") as output_file: @@ -190,7 +190,7 @@ def process_registry(registry_folder, output_rel_path): """ # Define paths base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "..", "..")) - registry_docs_dir = os.path.join(base_dir, "docs", "base", "models", "aind_data_schema_models", registry_folder) + registry_docs_dir = os.path.join(base_dir, "docs", "base", "models", "biodata_models", registry_folder) output_dir = os.path.join(base_dir, output_rel_path) output_file_path = os.path.join(output_dir, f"{registry_folder}.md") @@ -240,7 +240,7 @@ def process_registry(registry_folder, output_rel_path): def generate_all_registry_documentation(): """Generate documentation for registries folders""" base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "..", "..")) - registries_dir = os.path.join(base_dir, "docs", "base", "models", "aind_data_schema_models") + registries_dir = os.path.join(base_dir, "docs", "base", "models", "biodata_models") if not os.path.exists(registries_dir): print(f"Warning: Registry directory not found: {registries_dir}") @@ -249,7 +249,7 @@ def generate_all_registry_documentation(): registry_folders = [d for d in os.listdir(registries_dir) if os.path.isdir(os.path.join(registries_dir, d))] for registry_folder in registry_folders: - process_registry(registry_folder, os.path.join("docs", "source", "aind_data_schema_models")) + process_registry(registry_folder, os.path.join("docs", "source", "biodata_models")) def generate_all_core_documentation(): diff --git a/src/aind_data_schema/utils/docs/model_generator.py b/src/aind_data_schema/utils/docs/model_generator.py index b0b2eed35..9d2a52d7c 100644 --- a/src/aind_data_schema/utils/docs/model_generator.py +++ b/src/aind_data_schema/utils/docs/model_generator.py @@ -15,19 +15,19 @@ special_cases = { "pydantic.types.AwareDatetime": "datetime (timezone-aware)", - "aind_data_schema_models.organizations": ("[Organization](aind_data_schema_models/organizations.md#organization)"), - "aind_data_schema_models.modalities": ("[Modality](aind_data_schema_models/modalities.md#modality)"), - "aind_data_schema_models.brain_atlas": ("[BrainAtlas](aind_data_schema_models/brain_atlas.md#ccfv3)"), - "aind_data_schema_models.harp_types": ("[HarpDeviceType](aind_data_schema_models/harp_types.md#harpdevicetype)"), - "aind_data_schema_models.species._C57Bl_6J": "[Strain](aind_data_schema_models/species.md#strain)", - "aind_data_schema_models.species._Callithrix_Jacchus": "[Species](aind_data_schema_models/species.md#species)", + "biodata_models.organizations": ("[Organization](biodata_models/organizations.md#organization)"), + "biodata_models.modalities": ("[Modality](biodata_models/modalities.md#modality)"), + "biodata_models.brain_atlas": ("[BrainAtlas](biodata_models/brain_atlas.md#ccfv3)"), + "biodata_models.harp_types": ("[HarpDeviceType](biodata_models/harp_types.md#harpdevicetype)"), + "biodata_models.species._C57Bl_6J": "[Strain](biodata_models/species.md#strain)", + "biodata_models.species._Callithrix_Jacchus": "[Species](biodata_models/species.md#species)", "aind_data_schema.core.quality_control.QCMetric": "{QCMetric} or {CurationMetric}", "aind_data_schema.components.wrappers.AssetPath": "AssetPath", "aind_data_schema.base._GenericModel": "dict", - "aind_data_schema_models.mouse_anatomy.MouseAnatomyModel": ( - "[MouseAnatomyModel](aind_data_schema_models/external.md#mouseanatomymodel)" + "biodata_models.mouse_anatomy.MouseAnatomyModel": ( + "[MouseAnatomyModel](biodata_models/external.md#mouseanatomymodel)" ), - "aind_data_schema_models.pid_names.PIDName": "{PIDName}", + "biodata_models.pid_names.PIDName": "{PIDName}", } skip_fields = ["object_type", "describedBy", "schema_version"] diff --git a/src/aind_data_schema/utils/docs/registries_generator.py b/src/aind_data_schema/utils/docs/registries_generator.py index ef33c0373..ec734849a 100644 --- a/src/aind_data_schema/utils/docs/registries_generator.py +++ b/src/aind_data_schema/utils/docs/registries_generator.py @@ -5,17 +5,17 @@ from enum import Enum # Atlas models -from aind_data_schema_models.atlas import AtlasName -from aind_data_schema_models.brain_atlas import BrainStructureModel, CCFv3 +from biodata_models.atlas import AtlasName +from biodata_models.brain_atlas import BrainStructureModel, CCFv3 # Coordinates models -from aind_data_schema_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin +from biodata_models.coordinates import AnatomicalRelative, AxisName, Direction, Origin # Name patterns -from aind_data_schema_models.data_name_patterns import DataLevel, Group +from biodata_models.data_name_patterns import DataLevel, Group # Devices models -from aind_data_schema_models.devices import ( +from biodata_models.devices import ( BinMode, CameraChroma, CameraTarget, @@ -35,33 +35,33 @@ ProbeModel, StageAxisDirection, ) -from aind_data_schema_models.harp_types import HarpDeviceType -from aind_data_schema_models.licenses import License +from biodata_models.harp_types import HarpDeviceType +from biodata_models.licenses import License # Other registry models -from aind_data_schema_models.modalities import Modality +from biodata_models.modalities import Modality # Organization models -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.pid_names import PIDName +from biodata_models.organizations import Organization +from biodata_models.pid_names import PIDName # Processing -from aind_data_schema_models.process_names import ProcessName +from biodata_models.process_names import ProcessName # Reagent models -from aind_data_schema_models.reagent import FluorophoreType, StainType +from biodata_models.reagent import FluorophoreType, StainType # Registries -from aind_data_schema_models.registries import Registry +from biodata_models.registries import Registry # Species models -from aind_data_schema_models.species import Species, Strain -from aind_data_schema_models.specimen_procedure_types import SpecimenProcedureType -from aind_data_schema_models.stimulus_modality import StimulusModality -from aind_data_schema_models.system_architecture import CPUArchitecture, ModelArchitecture, OperatingSystem +from biodata_models.species import Species, Strain +from biodata_models.specimen_procedure_types import SpecimenProcedureType +from biodata_models.stimulus_modality import StimulusModality +from biodata_models.system_architecture import CPUArchitecture, ModelArchitecture, OperatingSystem # Units models -from aind_data_schema_models.units import ( +from biodata_models.units import ( AngleUnit, ConcentrationUnit, CurrentUnit, @@ -165,13 +165,13 @@ ] special_cases = { - "ADDGENE": "[Addgene](aind_data_schema_models/registries.md#registry)", - "EMAPA": "[Emapa](aind_data_schema_models/registries.md#registry)", - "MGI": "[MGI](aind_data_schema_models/registries.md#registry)", - "NCBI": "[NBCI](aind_data_schema_models/registries.md#registry)", - "ORCID": "[ORCID](aind_data_schema_models/registries.md#registry)", - "ROR": "[ROR](aind_data_schema_models/registries.md#registry)", - "RID": "[RID](aind_data_schema_models/registries.md#registry)", + "ADDGENE": "[Addgene](biodata_models/registries.md#registry)", + "EMAPA": "[Emapa](biodata_models/registries.md#registry)", + "MGI": "[MGI](biodata_models/registries.md#registry)", + "NCBI": "[NBCI](biodata_models/registries.md#registry)", + "ORCID": "[ORCID](biodata_models/registries.md#registry)", + "ROR": "[ROR](biodata_models/registries.md#registry)", + "RID": "[RID](biodata_models/registries.md#registry)", "aind_data_schema.components.wrappers.AssetPath": "AssetPath", } diff --git a/src/aind_data_schema/utils/inheritance.py b/src/aind_data_schema/utils/inheritance.py index 775897530..ee2fbf437 100644 --- a/src/aind_data_schema/utils/inheritance.py +++ b/src/aind_data_schema/utils/inheritance.py @@ -4,7 +4,7 @@ from datetime import datetime, timezone from typing import Any, List, Optional, Tuple -from aind_data_schema_models.data_name_patterns import DataLevel, DataRegex, datetime_to_name_string +from biodata_models.data_name_patterns import DataLevel, DataRegex, datetime_to_name_string from pydantic_core import PydanticUndefined from aind_data_schema.core.data_description import DataDescription diff --git a/src/aind_data_schema/utils/schema_tree.py b/src/aind_data_schema/utils/schema_tree.py index e1a25cb06..e6093e5a6 100644 --- a/src/aind_data_schema/utils/schema_tree.py +++ b/src/aind_data_schema/utils/schema_tree.py @@ -39,7 +39,7 @@ def _latex_escape(text: str) -> str: def _discriminated_str(types: list) -> str: """Return a string representation for a list of types that are part of a discriminated union.""" bases = {t.__bases__[0] for t in types if isinstance(t, type) and t.__bases__} - registry_bases = {b for b in bases if "aind_data_schema_models" in getattr(b, "__module__", "")} + registry_bases = {b for b in bases if "biodata_models" in getattr(b, "__module__", "")} if len(registry_bases) == 1: return next(iter(registry_bases)).__name__.removesuffix("Model") names = [_annotation_to_str(t) for t in types] @@ -109,10 +109,10 @@ def _extract_expandable_types(annotation) -> list: def _extract_named_types(annotation) -> list: """Return every named class (model or enum) embedded in an annotation, from either - aind_data_schema or aind_data_schema_models, for documentation-link purposes. + aind_data_schema or biodata_models, for documentation-link purposes. Broader than :func:`_extract_expandable_types`: it also picks up enums and - registry classes from aind_data_schema_models, which have their own docs page but + registry classes from biodata_models, which have their own docs page but aren't locally-defined models we can recurse into within the diagram. """ from pydantic import BaseModel @@ -141,7 +141,7 @@ def _extract_named_types(annotation) -> list: and (issubclass(annotation, BaseModel) or issubclass(annotation, enum.Enum)) ): module = annotation.__module__ - if module.startswith("aind_data_schema.") or module.startswith("aind_data_schema_models."): + if module.startswith("aind_data_schema.") or module.startswith("biodata_models."): return [annotation] return [] @@ -250,14 +250,14 @@ def _doc_url(model_cls) -> str: everything else gets a page per module under its top-level package folder). """ module = model_cls.__module__ - for prefix in ("aind_data_schema.", "aind_data_schema_models."): + for prefix in ("aind_data_schema.", "biodata_models."): prefix_len = len(prefix) if module.startswith(prefix): parts = module[prefix_len:].split(".") if prefix == "aind_data_schema." and parts[0] == "core": doc_path = parts[1] - elif prefix == "aind_data_schema_models.": - doc_path = "aind_data_schema_models/" + parts[0] + elif prefix == "biodata_models.": + doc_path = "biodata_models/" + parts[0] else: doc_path = "/".join(parts) return f"{doc_path}.html#{model_cls.__name__.lower()}" @@ -295,7 +295,7 @@ def _build_model_entry(model_cls) -> tuple: named.append(t) # A field's `links` cover every named type it touches: local models get a `key` - # so the popup can drill into them in-app, while enums and aind_data_schema_models + # so the popup can drill into them in-app, while enums and biodata_models # registry classes only get a `url` out to their own docs page. links = [ { diff --git a/tests/coordinate_systems.py b/tests/coordinate_systems.py index c0aa8e39b..031f34622 100644 --- a/tests/coordinate_systems.py +++ b/tests/coordinate_systems.py @@ -4,8 +4,8 @@ are expected to define the coordinate systems they use, as shown here. """ -from aind_data_schema_models.coordinates import AxisName, Direction, Origin -from aind_data_schema_models.units import SizeUnit +from biodata_models.coordinates import AxisName, Direction, Origin +from biodata_models.units import SizeUnit from aind_data_schema.components.coordinates import Axis, CoordinateSystem diff --git a/tests/test_acquisition.py b/tests/test_acquisition.py index 4d8ab01bd..b8f69c25d 100644 --- a/tests/test_acquisition.py +++ b/tests/test_acquisition.py @@ -7,8 +7,8 @@ import pydantic import pytest -from aind_data_schema_models.brain_atlas import CCFv3 -from aind_data_schema_models.modalities import Modality +from biodata_models.brain_atlas import CCFv3 +from biodata_models.modalities import Modality from pydantic import ValidationError from aind_data_schema.components.configs import ( diff --git a/tests/test_acquisition_configs.py b/tests/test_acquisition_configs.py index 3382f1890..059c04a0c 100644 --- a/tests/test_acquisition_configs.py +++ b/tests/test_acquisition_configs.py @@ -3,8 +3,8 @@ from decimal import Decimal import pytest -from aind_data_schema_models.brain_atlas import CCFv3 -from aind_data_schema_models.units import AngleUnit, FrequencyUnit, SizeUnit, TimeUnit, VolumeUnit +from biodata_models.brain_atlas import CCFv3 +from biodata_models.units import AngleUnit, FrequencyUnit, SizeUnit, TimeUnit, VolumeUnit from pydantic import ValidationError from aind_data_schema.components.configs import ( diff --git a/tests/test_base.py b/tests/test_base.py index 9aade8ba9..ea8df3220 100644 --- a/tests/test_base.py +++ b/tests/test_base.py @@ -8,7 +8,7 @@ from unittest.mock import MagicMock, mock_open, patch import pytest -from aind_data_schema_models.brain_atlas import BrainStructureModel +from biodata_models.brain_atlas import BrainStructureModel from pydantic import Field, SkipValidation, ValidationError, create_model from aind_data_schema.base import ( diff --git a/tests/test_composability_merge.py b/tests/test_composability_merge.py index 816919d38..f76cacdb3 100644 --- a/tests/test_composability_merge.py +++ b/tests/test_composability_merge.py @@ -4,7 +4,7 @@ from zoneinfo import ZoneInfo import pytest -from aind_data_schema_models.modalities import Modality +from biodata_models.modalities import Modality from aind_data_schema.components.identifiers import Code from aind_data_schema.core.acquisition import AcquisitionSubjectDetails diff --git a/tests/test_configs.py b/tests/test_configs.py index 72e36fcaf..f8e4aa00b 100644 --- a/tests/test_configs.py +++ b/tests/test_configs.py @@ -1,8 +1,8 @@ """Test for configs""" import pytest -from aind_data_schema_models.brain_atlas import CCFv3 -from aind_data_schema_models.units import PowerUnit, SizeUnit +from biodata_models.brain_atlas import CCFv3 +from biodata_models.units import PowerUnit, SizeUnit from pydantic import ValidationError from aind_data_schema.components.configs import CoupledPlane, ImagingConfig, PlanarImage, Plane diff --git a/tests/test_coordinates.py b/tests/test_coordinates.py index 5f687cab2..f54691f82 100644 --- a/tests/test_coordinates.py +++ b/tests/test_coordinates.py @@ -1,8 +1,8 @@ """Tests for the coordinates module""" import pytest -from aind_data_schema_models.atlas import AtlasName -from aind_data_schema_models.units import SizeUnit +from biodata_models.atlas import AtlasName +from biodata_models.units import SizeUnit from aind_data_schema.components.coordinates import ( Atlas, @@ -148,7 +148,7 @@ class TestCoordinateSystemMouseAnatomyOrigin: @pytest.mark.online def test_mouse_anatomy_origin(self): # pragma: no cover """Test that CoordinateSystem accepts a MouseAnatomyModel as origin""" - from aind_data_schema_models.mouse_anatomy import MouseAnatomy + from biodata_models.mouse_anatomy import MouseAnatomy cs = CoordinateSystem( name="TEST_MOUSE_ANATOMY", diff --git a/tests/test_data_description.py b/tests/test_data_description.py index c7f9c6946..ed2723a98 100644 --- a/tests/test_data_description.py +++ b/tests/test_data_description.py @@ -5,9 +5,9 @@ from unittest.mock import MagicMock, patch import pytest -from aind_data_schema_models.data_name_patterns import DataLevel -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization +from biodata_models.data_name_patterns import DataLevel +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization from pydantic import ValidationError from aind_data_schema.components.identifiers import Person diff --git a/tests/test_device.py b/tests/test_device.py index 133197054..6b49afc00 100644 --- a/tests/test_device.py +++ b/tests/test_device.py @@ -1,10 +1,10 @@ """test Device models""" import pytest -from aind_data_schema_models.coordinates import AnatomicalRelative -from aind_data_schema_models.harp_types import HarpDeviceType -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import UnitlessUnit +from biodata_models.coordinates import AnatomicalRelative +from biodata_models.harp_types import HarpDeviceType +from biodata_models.organizations import Organization +from biodata_models.units import UnitlessUnit from pydantic import ValidationError from aind_data_schema.components.coordinates import Translation diff --git a/tests/test_geometry.py b/tests/test_geometry.py index ec0977385..888304462 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -1,6 +1,6 @@ """Tests for the geometry module""" -from aind_data_schema_models.units import SizeUnit +from biodata_models.units import SizeUnit from aind_data_schema.components.geometry import Circle, Rectangle diff --git a/tests/test_imaging.py b/tests/test_imaging.py index 6ff965e0c..fa56007b2 100644 --- a/tests/test_imaging.py +++ b/tests/test_imaging.py @@ -3,8 +3,8 @@ from datetime import datetime, timezone import pytest -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization from pydantic import ValidationError from aind_data_schema.components.configs import Image diff --git a/tests/test_inheritance.py b/tests/test_inheritance.py index e67526bb1..225543f32 100644 --- a/tests/test_inheritance.py +++ b/tests/test_inheritance.py @@ -3,9 +3,9 @@ from datetime import datetime, timezone import pytest -from aind_data_schema_models.data_name_patterns import DataLevel -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization +from biodata_models.data_name_patterns import DataLevel +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization from aind_data_schema.components.identifiers import Code, Person from aind_data_schema.core.data_description import DataDescription, Funding diff --git a/tests/test_instrument.py b/tests/test_instrument.py index 86e03c30c..353ab7281 100644 --- a/tests/test_instrument.py +++ b/tests/test_instrument.py @@ -5,11 +5,11 @@ from unittest.mock import patch import pytest -from aind_data_schema_models.coordinates import AnatomicalRelative -from aind_data_schema_models.harp_types import HarpDeviceType -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.units import FrequencyUnit, PowerUnit +from biodata_models.coordinates import AnatomicalRelative +from biodata_models.harp_types import HarpDeviceType +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization +from biodata_models.units import FrequencyUnit, PowerUnit from pydantic import ValidationError from aind_data_schema.components.connections import Connection diff --git a/tests/test_metadata.py b/tests/test_metadata.py index 1b874e06c..7cd74b79f 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -7,10 +7,10 @@ from unittest.mock import patch import pytest -from aind_data_schema_models.data_name_patterns import DataLevel -from aind_data_schema_models.modalities import Modality -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.species import Strain +from biodata_models.data_name_patterns import DataLevel +from biodata_models.modalities import Modality +from biodata_models.organizations import Organization +from biodata_models.species import Strain from pydantic import ValidationError from aind_data_schema.components.connections import Connection diff --git a/tests/test_procedures.py b/tests/test_procedures.py index 8006ec6b5..4d1c4655f 100644 --- a/tests/test_procedures.py +++ b/tests/test_procedures.py @@ -4,12 +4,12 @@ from unittest.mock import patch import pytest -from aind_data_schema_models.brain_atlas import CCFv3 -from aind_data_schema_models.coordinates import AnatomicalRelative -from aind_data_schema_models.mouse_anatomy import InjectionTargets, MouseBloodVessels -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.specimen_procedure_types import SpecimenProcedureType -from aind_data_schema_models.units import ConcentrationUnit, CurrentUnit, SizeUnit, TimeUnit, VolumeUnit +from biodata_models.brain_atlas import CCFv3 +from biodata_models.coordinates import AnatomicalRelative +from biodata_models.mouse_anatomy import InjectionTargets, MouseBloodVessels +from biodata_models.organizations import Organization +from biodata_models.specimen_procedure_types import SpecimenProcedureType +from biodata_models.units import ConcentrationUnit, CurrentUnit, SizeUnit, TimeUnit, VolumeUnit from pydantic import ValidationError from aind_data_schema.components.configs import CatheterConfig @@ -53,7 +53,7 @@ def test_required_field_validation_check(self): p = Procedures(subject_id="12345") assert "12345" == p.subject_id - @patch("aind_data_schema_models.mouse_anatomy.get_emapa_id") + @patch("biodata_models.mouse_anatomy.get_emapa_id") def test_unwrapped_injection_rejected(self, mock_get_emapa_id): """Unwrapped Injection in subject_procedures should raise""" mock_get_emapa_id.return_value = "123456" @@ -76,7 +76,7 @@ def test_unwrapped_injection_rejected(self, mock_get_emapa_id): ], ) - @patch("aind_data_schema_models.mouse_anatomy.get_emapa_id") + @patch("biodata_models.mouse_anatomy.get_emapa_id") def test_injection_material_check(self, mock_get_emapa_id): """Check for validation error when injection_materials is empty""" @@ -112,7 +112,7 @@ def test_injection_material_check(self, mock_get_emapa_id): assert "injection_materials" in repr(e.value) - @patch("aind_data_schema_models.mouse_anatomy.get_emapa_id") + @patch("biodata_models.mouse_anatomy.get_emapa_id") def test_injection_material_none(self, mock_get_emapa_id): """Check for validation error when injection_materials is None""" mock_get_emapa_id.return_value = "123456" @@ -146,7 +146,7 @@ def test_injection_material_none(self, mock_get_emapa_id): assert "injection_materials" in repr(e.value) - @patch("aind_data_schema_models.mouse_anatomy.get_emapa_id") + @patch("biodata_models.mouse_anatomy.get_emapa_id") def test_injection_materials_list(self, mock_get_emapa_id): """Valid injection_materials list""" mock_get_emapa_id.return_value = "123456" diff --git a/tests/test_processing.py b/tests/test_processing.py index cababcfd6..96967060e 100644 --- a/tests/test_processing.py +++ b/tests/test_processing.py @@ -4,8 +4,8 @@ import pydantic import pytest -from aind_data_schema_models.system_architecture import CPUArchitecture, OperatingSystem -from aind_data_schema_models.units import MemoryUnit +from biodata_models.system_architecture import CPUArchitecture, OperatingSystem +from biodata_models.units import MemoryUnit from aind_data_schema.components.identifiers import Code, DataAsset from aind_data_schema.core.processing import ( diff --git a/tests/test_quality_control.py b/tests/test_quality_control.py index c6e17ef33..e3307ca5b 100644 --- a/tests/test_quality_control.py +++ b/tests/test_quality_control.py @@ -3,7 +3,7 @@ from datetime import datetime import pytest -from aind_data_schema_models.modalities import Modality +from biodata_models.modalities import Modality from pydantic import ValidationError from aind_data_schema.core.quality_control import ( diff --git a/tests/test_subject.py b/tests/test_subject.py index fe9c479cb..bd4d38023 100644 --- a/tests/test_subject.py +++ b/tests/test_subject.py @@ -4,10 +4,10 @@ import pydantic import pytest -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.pid_names import PIDName -from aind_data_schema_models.registries import Registry -from aind_data_schema_models.species import Species, Strain +from biodata_models.organizations import Organization +from biodata_models.pid_names import PIDName +from biodata_models.registries import Registry +from biodata_models.species import Species, Strain from aind_data_schema.components.subjects import BreedingInfo, Housing, LightCycle, MouseSubject from aind_data_schema.core.subject import Subject diff --git a/tests/test_subjects.py b/tests/test_subjects.py index 5f6037804..ecc99bed4 100644 --- a/tests/test_subjects.py +++ b/tests/test_subjects.py @@ -3,10 +3,10 @@ from datetime import datetime import pytest -from aind_data_schema_models.organizations import Organization -from aind_data_schema_models.pid_names import PIDName -from aind_data_schema_models.registries import Registry -from aind_data_schema_models.species import Species, Strain +from biodata_models.organizations import Organization +from biodata_models.pid_names import PIDName +from biodata_models.registries import Registry +from biodata_models.species import Species, Strain from aind_data_schema.components.subjects import ( BreedingInfo, diff --git a/uv.lock b/uv.lock index 45a88f674..ff8236b7e 100644 --- a/uv.lock +++ b/uv.lock @@ -19,20 +19,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl", hash = "sha256:88ae3211e68a1d0b011504b2ffc1691feafce124b845bd072ab6f9f66f34d4b7", size = 1395903, upload-time = "2024-05-10T11:23:08.421Z" }, ] -[[package]] -name = "aind-data-schema-models" -version = "6.2.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "importlib-resources" }, - { name = "pydantic" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3a/4d/f061dd571b570b528020e78094b1eec299d91405a8630c8598bd9892b59a/aind_data_schema_models-6.2.1.tar.gz", hash = "sha256:67e833ab0d88776f94dcc8a1e480f1096b9952ae6256323f7901d03cb0327349", size = 362815, upload-time = "2026-08-19T16:47:32.436Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/37/c2/50c661a5d13787b67906d0d832b206322d48280e2a764381136670ef661f/aind_data_schema_models-6.2.1-py3-none-any.whl", hash = "sha256:21d1ea816a3ac9e70a063c0a28becc49d3dd3bff94bec613b03a28a938b60aad", size = 336501, upload-time = "2026-08-19T16:47:30.737Z" }, -] - [[package]] name = "alabaster" version = "1.0.0" @@ -97,11 +83,25 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721, upload-time = "2025-11-30T15:08:24.087Z" }, ] +[[package]] +name = "biodata-models" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-resources" }, + { name = "pydantic" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e0/06/04cb073d3a7b3aace223c559e2f964e515ce644a074a09cf9ebb0f3b7b07/biodata_models-1.0.1.tar.gz", hash = "sha256:d057dc3d3c154c9330771ea7cc9e4a408f90fa45d2c32f648f4c43cf06b9199b", size = 386193, upload-time = "2026-09-11T17:53:41.683Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/ee/5f8560cc41e7e584d3ffba2ff3fa7fa30470c61d80534fe7d6f0bb53a19a/biodata_models-1.0.1-py3-none-any.whl", hash = "sha256:7b0d25ca936f4ebece75d5ab8b14c2418aa6501448ff76c52b4b123c75f613b0", size = 359546, upload-time = "2026-09-11T17:53:40.129Z" }, +] + [[package]] name = "biodata-schema" source = { editable = "." } dependencies = [ - { name = "aind-data-schema-models" }, + { name = "biodata-models" }, { name = "pydantic" }, { name = "pydantic-extra-types" }, { name = "tzdata" }, @@ -132,7 +132,7 @@ docs = [ [package.metadata] requires-dist = [ - { name = "aind-data-schema-models", specifier = ">=6.1.0,<7" }, + { name = "biodata-models", specifier = ">=1.0.1,<2" }, { name = "pydantic", specifier = ">=2.7,<2.12" }, { name = "pydantic-extra-types" }, { name = "tzdata" }, From 34ef0b4b08459943e51f9fbace4fcd366cf98729 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 11 Sep 2026 21:51:17 +0000 Subject: [PATCH 15/38] bump schema version [skip actions] --- schemas/instrument_schema.json | 5 +- schemas/metadata_schema.json | 145 ++++++++++++++++++++++-- schemas/procedures_schema.json | 105 ++++++++++++++++- schemas/subject_schema.json | 119 ++++++++++++++++++- src/aind_data_schema/core/instrument.py | 2 +- src/aind_data_schema/core/metadata.py | 2 +- src/aind_data_schema/core/procedures.py | 2 +- src/aind_data_schema/core/subject.py | 2 +- 8 files changed, 360 insertions(+), 22 deletions(-) diff --git a/schemas/instrument_schema.json b/schemas/instrument_schema.json index 919f6e545..35b7282d8 100644 --- a/schemas/instrument_schema.json +++ b/schemas/instrument_schema.json @@ -21898,6 +21898,7 @@ "enum": [ "Michigan uLED Probe (Version 1)", "MPI Photonic Probe (Version 1)", + "MPI Photonic Probe (Version 2)", "Neuropixels Opto (Demonstrator)", "Neuropixels UHD (Fixed)", "Neuropixels UHD (Switchable)", @@ -32792,8 +32793,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.0", - "default": "3.0.0", + "const": "3.0.1", + "default": "3.0.1", "title": "Schema Version", "type": "string" }, diff --git a/schemas/metadata_schema.json b/schemas/metadata_schema.json index b38b904cc..4dca2ab6d 100644 --- a/schemas/metadata_schema.json +++ b/schemas/metadata_schema.json @@ -17321,6 +17321,7 @@ "Alexa Fluor", "Atto", "CF", + "CoraLite", "Cyanine", "DyLight" ], @@ -20918,8 +20919,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.0", - "default": "3.0.0", + "const": "3.0.1", + "default": "3.0.1", "title": "Schema Version", "type": "string" }, @@ -28593,13 +28594,13 @@ }, "oneOf": [ { - "$ref": "#/$defs/_C57Bl_6J" + "$ref": "#/$defs/biodata_models__species___Unknown" }, { "$ref": "#/$defs/_Balb_C" }, { - "$ref": "#/$defs/biodata_models__species___Unknown" + "$ref": "#/$defs/_C57Bl_6J" } ], "title": "Strain" @@ -28614,10 +28615,13 @@ "Gallus gallus": "#/$defs/_Gallus_Gallus", "Homo sapiens": "#/$defs/_Homo_Sapiens", "Lama glama": "#/$defs/_Lama_Glama", + "Macaca fascicularis": "#/$defs/_Macaca_Fascicularis", "Macaca mulatta": "#/$defs/_Macaca_Mulatta", + "Macaca nemestrina": "#/$defs/_Macaca_Nemestrina", "Mus musculus": "#/$defs/_Mus_Musculus", "Oryctolagus cuniculus": "#/$defs/_Oryctolagus_Cuniculus", "Rattus norvegicus": "#/$defs/_Rattus_Norvegicus", + "Saimiri sciureus": "#/$defs/_Saimiri_Sciureus", "Vicuna pacos": "#/$defs/_Vicuna_Pacos" }, "propertyName": "name" @@ -28644,9 +28648,15 @@ { "$ref": "#/$defs/_Lama_Glama" }, + { + "$ref": "#/$defs/_Macaca_Fascicularis" + }, { "$ref": "#/$defs/_Macaca_Mulatta" }, + { + "$ref": "#/$defs/_Macaca_Nemestrina" + }, { "$ref": "#/$defs/_Mus_Musculus" }, @@ -28656,6 +28666,9 @@ { "$ref": "#/$defs/_Rattus_Norvegicus" }, + { + "$ref": "#/$defs/_Saimiri_Sciureus" + }, { "$ref": "#/$defs/_Vicuna_Pacos" } @@ -30673,10 +30686,13 @@ "Gallus gallus": "#/$defs/_Gallus_Gallus", "Homo sapiens": "#/$defs/_Homo_Sapiens", "Lama glama": "#/$defs/_Lama_Glama", + "Macaca fascicularis": "#/$defs/_Macaca_Fascicularis", "Macaca mulatta": "#/$defs/_Macaca_Mulatta", + "Macaca nemestrina": "#/$defs/_Macaca_Nemestrina", "Mus musculus": "#/$defs/_Mus_Musculus", "Oryctolagus cuniculus": "#/$defs/_Oryctolagus_Cuniculus", "Rattus norvegicus": "#/$defs/_Rattus_Norvegicus", + "Saimiri sciureus": "#/$defs/_Saimiri_Sciureus", "Vicuna pacos": "#/$defs/_Vicuna_Pacos" }, "propertyName": "name" @@ -30703,9 +30719,15 @@ { "$ref": "#/$defs/_Lama_Glama" }, + { + "$ref": "#/$defs/_Macaca_Fascicularis" + }, { "$ref": "#/$defs/_Macaca_Mulatta" }, + { + "$ref": "#/$defs/_Macaca_Nemestrina" + }, { "$ref": "#/$defs/_Mus_Musculus" }, @@ -30715,6 +30737,9 @@ { "$ref": "#/$defs/_Rattus_Norvegicus" }, + { + "$ref": "#/$defs/_Saimiri_Sciureus" + }, { "$ref": "#/$defs/_Vicuna_Pacos" } @@ -36601,6 +36626,7 @@ "enum": [ "Michigan uLED Probe (Version 1)", "MPI Photonic Probe (Version 1)", + "MPI Photonic Probe (Version 2)", "Neuropixels Opto (Demonstrator)", "Neuropixels UHD (Fixed)", "Neuropixels UHD (Switchable)", @@ -37251,8 +37277,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.0", - "default": "3.0.0", + "const": "3.0.1", + "default": "3.0.1", "title": "Schema Version", "type": "string" }, @@ -37525,10 +37551,13 @@ "Gallus gallus": "#/$defs/_Gallus_Gallus", "Homo sapiens": "#/$defs/_Homo_Sapiens", "Lama glama": "#/$defs/_Lama_Glama", + "Macaca fascicularis": "#/$defs/_Macaca_Fascicularis", "Macaca mulatta": "#/$defs/_Macaca_Mulatta", + "Macaca nemestrina": "#/$defs/_Macaca_Nemestrina", "Mus musculus": "#/$defs/_Mus_Musculus", "Oryctolagus cuniculus": "#/$defs/_Oryctolagus_Cuniculus", "Rattus norvegicus": "#/$defs/_Rattus_Norvegicus", + "Saimiri sciureus": "#/$defs/_Saimiri_Sciureus", "Vicuna pacos": "#/$defs/_Vicuna_Pacos" }, "propertyName": "name" @@ -37555,9 +37584,15 @@ { "$ref": "#/$defs/_Lama_Glama" }, + { + "$ref": "#/$defs/_Macaca_Fascicularis" + }, { "$ref": "#/$defs/_Macaca_Mulatta" }, + { + "$ref": "#/$defs/_Macaca_Nemestrina" + }, { "$ref": "#/$defs/_Mus_Musculus" }, @@ -37567,6 +37602,9 @@ { "$ref": "#/$defs/_Rattus_Norvegicus" }, + { + "$ref": "#/$defs/_Saimiri_Sciureus" + }, { "$ref": "#/$defs/_Vicuna_Pacos" } @@ -41711,8 +41749,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.0", - "default": "3.0.0", + "const": "3.0.1", + "default": "3.0.1", "title": "Schema Version", "type": "string" }, @@ -48050,6 +48088,35 @@ "title": "_Lumencor", "type": "object" }, + "_Macaca_Fascicularis": { + "description": "Model Macaca fascicularis", + "properties": { + "name": { + "const": "Macaca fascicularis", + "default": "Macaca fascicularis", + "title": "Name", + "type": "string" + }, + "common_name": { + "const": "Crab-eating macaque", + "default": "Crab-eating macaque", + "title": "Common Name", + "type": "string" + }, + "registry": { + "$ref": "#/$defs/Registry", + "default": "National Center for Biotechnology Information (NCBI)" + }, + "registry_identifier": { + "const": "NCBI:txid9541", + "default": "NCBI:txid9541", + "title": "Registry Identifier", + "type": "string" + } + }, + "title": "_Macaca_Fascicularis", + "type": "object" + }, "_Macaca_Mulatta": { "description": "Model Macaca mulatta", "properties": { @@ -48079,6 +48146,35 @@ "title": "_Macaca_Mulatta", "type": "object" }, + "_Macaca_Nemestrina": { + "description": "Model Macaca nemestrina", + "properties": { + "name": { + "const": "Macaca nemestrina", + "default": "Macaca nemestrina", + "title": "Name", + "type": "string" + }, + "common_name": { + "const": "Pig-tailed macaque", + "default": "Pig-tailed macaque", + "title": "Common Name", + "type": "string" + }, + "registry": { + "$ref": "#/$defs/Registry", + "default": "National Center for Biotechnology Information (NCBI)" + }, + "registry_identifier": { + "const": "NCBI:txid9545", + "default": "NCBI:txid9545", + "title": "Registry Identifier", + "type": "string" + } + }, + "title": "_Macaca_Nemestrina", + "type": "object" + }, "_Mapseq": { "additionalProperties": false, "description": "Model MAPseq", @@ -49823,6 +49919,35 @@ "title": "_Rockland_Immunochemicals", "type": "object" }, + "_Saimiri_Sciureus": { + "description": "Model Saimiri sciureus", + "properties": { + "name": { + "const": "Saimiri sciureus", + "default": "Saimiri sciureus", + "title": "Name", + "type": "string" + }, + "common_name": { + "const": "Common squirrel monkey", + "default": "Common squirrel monkey", + "title": "Common Name", + "type": "string" + }, + "registry": { + "$ref": "#/$defs/Registry", + "default": "National Center for Biotechnology Information (NCBI)" + }, + "registry_identifier": { + "const": "NCBI:txid9521", + "default": "NCBI:txid9521", + "title": "Registry Identifier", + "type": "string" + } + }, + "title": "_Saimiri_Sciureus", + "type": "object" + }, "_Same_Sky": { "description": "Model Same Sky", "properties": { @@ -51574,8 +51699,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.0", - "default": "3.0.0", + "const": "3.0.1", + "default": "3.0.1", "title": "Schema Version", "type": "string" }, diff --git a/schemas/procedures_schema.json b/schemas/procedures_schema.json index d460536f1..d05090310 100644 --- a/schemas/procedures_schema.json +++ b/schemas/procedures_schema.json @@ -5422,6 +5422,7 @@ "Alexa Fluor", "Atto", "CF", + "CoraLite", "Cyanine", "DyLight" ], @@ -8548,6 +8549,7 @@ "enum": [ "Michigan uLED Probe (Version 1)", "MPI Photonic Probe (Version 1)", + "MPI Photonic Probe (Version 2)", "Neuropixels Opto (Demonstrator)", "Neuropixels UHD (Fixed)", "Neuropixels UHD (Switchable)", @@ -9190,10 +9192,13 @@ "Gallus gallus": "#/$defs/_Gallus_Gallus", "Homo sapiens": "#/$defs/_Homo_Sapiens", "Lama glama": "#/$defs/_Lama_Glama", + "Macaca fascicularis": "#/$defs/_Macaca_Fascicularis", "Macaca mulatta": "#/$defs/_Macaca_Mulatta", + "Macaca nemestrina": "#/$defs/_Macaca_Nemestrina", "Mus musculus": "#/$defs/_Mus_Musculus", "Oryctolagus cuniculus": "#/$defs/_Oryctolagus_Cuniculus", "Rattus norvegicus": "#/$defs/_Rattus_Norvegicus", + "Saimiri sciureus": "#/$defs/_Saimiri_Sciureus", "Vicuna pacos": "#/$defs/_Vicuna_Pacos" }, "propertyName": "name" @@ -9220,9 +9225,15 @@ { "$ref": "#/$defs/_Lama_Glama" }, + { + "$ref": "#/$defs/_Macaca_Fascicularis" + }, { "$ref": "#/$defs/_Macaca_Mulatta" }, + { + "$ref": "#/$defs/_Macaca_Nemestrina" + }, { "$ref": "#/$defs/_Mus_Musculus" }, @@ -9232,6 +9243,9 @@ { "$ref": "#/$defs/_Rattus_Norvegicus" }, + { + "$ref": "#/$defs/_Saimiri_Sciureus" + }, { "$ref": "#/$defs/_Vicuna_Pacos" } @@ -13924,6 +13938,35 @@ "title": "_Lumencor", "type": "object" }, + "_Macaca_Fascicularis": { + "description": "Model Macaca fascicularis", + "properties": { + "name": { + "const": "Macaca fascicularis", + "default": "Macaca fascicularis", + "title": "Name", + "type": "string" + }, + "common_name": { + "const": "Crab-eating macaque", + "default": "Crab-eating macaque", + "title": "Common Name", + "type": "string" + }, + "registry": { + "$ref": "#/$defs/Registry", + "default": "National Center for Biotechnology Information (NCBI)" + }, + "registry_identifier": { + "const": "NCBI:txid9541", + "default": "NCBI:txid9541", + "title": "Registry Identifier", + "type": "string" + } + }, + "title": "_Macaca_Fascicularis", + "type": "object" + }, "_Macaca_Mulatta": { "description": "Model Macaca mulatta", "properties": { @@ -13953,6 +13996,35 @@ "title": "_Macaca_Mulatta", "type": "object" }, + "_Macaca_Nemestrina": { + "description": "Model Macaca nemestrina", + "properties": { + "name": { + "const": "Macaca nemestrina", + "default": "Macaca nemestrina", + "title": "Name", + "type": "string" + }, + "common_name": { + "const": "Pig-tailed macaque", + "default": "Pig-tailed macaque", + "title": "Common Name", + "type": "string" + }, + "registry": { + "$ref": "#/$defs/Registry", + "default": "National Center for Biotechnology Information (NCBI)" + }, + "registry_identifier": { + "const": "NCBI:txid9545", + "default": "NCBI:txid9545", + "title": "Registry Identifier", + "type": "string" + } + }, + "title": "_Macaca_Nemestrina", + "type": "object" + }, "_Massachusetts_Institute_Of_Technology": { "description": "Model Massachusetts Institute of Technology", "properties": { @@ -15426,6 +15498,35 @@ "title": "_Rockland_Immunochemicals", "type": "object" }, + "_Saimiri_Sciureus": { + "description": "Model Saimiri sciureus", + "properties": { + "name": { + "const": "Saimiri sciureus", + "default": "Saimiri sciureus", + "title": "Name", + "type": "string" + }, + "common_name": { + "const": "Common squirrel monkey", + "default": "Common squirrel monkey", + "title": "Common Name", + "type": "string" + }, + "registry": { + "$ref": "#/$defs/Registry", + "default": "National Center for Biotechnology Information (NCBI)" + }, + "registry_identifier": { + "const": "NCBI:txid9521", + "default": "NCBI:txid9521", + "title": "Registry Identifier", + "type": "string" + } + }, + "title": "_Saimiri_Sciureus", + "type": "object" + }, "_Same_Sky": { "description": "Model Same Sky", "properties": { @@ -16732,8 +16833,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.0", - "default": "3.0.0", + "const": "3.0.1", + "default": "3.0.1", "title": "Schema Version", "type": "string" }, diff --git a/schemas/subject_schema.json b/schemas/subject_schema.json index f7457c1ec..01c87138a 100644 --- a/schemas/subject_schema.json +++ b/schemas/subject_schema.json @@ -1377,13 +1377,13 @@ }, "oneOf": [ { - "$ref": "#/$defs/_C57Bl_6J" + "$ref": "#/$defs/biodata_models__species___Unknown" }, { "$ref": "#/$defs/_Balb_C" }, { - "$ref": "#/$defs/biodata_models__species___Unknown" + "$ref": "#/$defs/_C57Bl_6J" } ], "title": "Strain" @@ -1398,10 +1398,13 @@ "Gallus gallus": "#/$defs/_Gallus_Gallus", "Homo sapiens": "#/$defs/_Homo_Sapiens", "Lama glama": "#/$defs/_Lama_Glama", + "Macaca fascicularis": "#/$defs/_Macaca_Fascicularis", "Macaca mulatta": "#/$defs/_Macaca_Mulatta", + "Macaca nemestrina": "#/$defs/_Macaca_Nemestrina", "Mus musculus": "#/$defs/_Mus_Musculus", "Oryctolagus cuniculus": "#/$defs/_Oryctolagus_Cuniculus", "Rattus norvegicus": "#/$defs/_Rattus_Norvegicus", + "Saimiri sciureus": "#/$defs/_Saimiri_Sciureus", "Vicuna pacos": "#/$defs/_Vicuna_Pacos" }, "propertyName": "name" @@ -1428,9 +1431,15 @@ { "$ref": "#/$defs/_Lama_Glama" }, + { + "$ref": "#/$defs/_Macaca_Fascicularis" + }, { "$ref": "#/$defs/_Macaca_Mulatta" }, + { + "$ref": "#/$defs/_Macaca_Nemestrina" + }, { "$ref": "#/$defs/_Mus_Musculus" }, @@ -1440,6 +1449,9 @@ { "$ref": "#/$defs/_Rattus_Norvegicus" }, + { + "$ref": "#/$defs/_Saimiri_Sciureus" + }, { "$ref": "#/$defs/_Vicuna_Pacos" } @@ -2069,10 +2081,13 @@ "Gallus gallus": "#/$defs/_Gallus_Gallus", "Homo sapiens": "#/$defs/_Homo_Sapiens", "Lama glama": "#/$defs/_Lama_Glama", + "Macaca fascicularis": "#/$defs/_Macaca_Fascicularis", "Macaca mulatta": "#/$defs/_Macaca_Mulatta", + "Macaca nemestrina": "#/$defs/_Macaca_Nemestrina", "Mus musculus": "#/$defs/_Mus_Musculus", "Oryctolagus cuniculus": "#/$defs/_Oryctolagus_Cuniculus", "Rattus norvegicus": "#/$defs/_Rattus_Norvegicus", + "Saimiri sciureus": "#/$defs/_Saimiri_Sciureus", "Vicuna pacos": "#/$defs/_Vicuna_Pacos" }, "propertyName": "name" @@ -2099,9 +2114,15 @@ { "$ref": "#/$defs/_Lama_Glama" }, + { + "$ref": "#/$defs/_Macaca_Fascicularis" + }, { "$ref": "#/$defs/_Macaca_Mulatta" }, + { + "$ref": "#/$defs/_Macaca_Nemestrina" + }, { "$ref": "#/$defs/_Mus_Musculus" }, @@ -2111,6 +2132,9 @@ { "$ref": "#/$defs/_Rattus_Norvegicus" }, + { + "$ref": "#/$defs/_Saimiri_Sciureus" + }, { "$ref": "#/$defs/_Vicuna_Pacos" } @@ -5792,6 +5816,35 @@ "title": "_Lumencor", "type": "object" }, + "_Macaca_Fascicularis": { + "description": "Model Macaca fascicularis", + "properties": { + "name": { + "const": "Macaca fascicularis", + "default": "Macaca fascicularis", + "title": "Name", + "type": "string" + }, + "common_name": { + "const": "Crab-eating macaque", + "default": "Crab-eating macaque", + "title": "Common Name", + "type": "string" + }, + "registry": { + "$ref": "#/$defs/Registry", + "default": "National Center for Biotechnology Information (NCBI)" + }, + "registry_identifier": { + "const": "NCBI:txid9541", + "default": "NCBI:txid9541", + "title": "Registry Identifier", + "type": "string" + } + }, + "title": "_Macaca_Fascicularis", + "type": "object" + }, "_Macaca_Mulatta": { "description": "Model Macaca mulatta", "properties": { @@ -5821,6 +5874,35 @@ "title": "_Macaca_Mulatta", "type": "object" }, + "_Macaca_Nemestrina": { + "description": "Model Macaca nemestrina", + "properties": { + "name": { + "const": "Macaca nemestrina", + "default": "Macaca nemestrina", + "title": "Name", + "type": "string" + }, + "common_name": { + "const": "Pig-tailed macaque", + "default": "Pig-tailed macaque", + "title": "Common Name", + "type": "string" + }, + "registry": { + "$ref": "#/$defs/Registry", + "default": "National Center for Biotechnology Information (NCBI)" + }, + "registry_identifier": { + "const": "NCBI:txid9545", + "default": "NCBI:txid9545", + "title": "Registry Identifier", + "type": "string" + } + }, + "title": "_Macaca_Nemestrina", + "type": "object" + }, "_Massachusetts_Institute_Of_Technology": { "description": "Model Massachusetts Institute of Technology", "properties": { @@ -7294,6 +7376,35 @@ "title": "_Rockland_Immunochemicals", "type": "object" }, + "_Saimiri_Sciureus": { + "description": "Model Saimiri sciureus", + "properties": { + "name": { + "const": "Saimiri sciureus", + "default": "Saimiri sciureus", + "title": "Name", + "type": "string" + }, + "common_name": { + "const": "Common squirrel monkey", + "default": "Common squirrel monkey", + "title": "Common Name", + "type": "string" + }, + "registry": { + "$ref": "#/$defs/Registry", + "default": "National Center for Biotechnology Information (NCBI)" + }, + "registry_identifier": { + "const": "NCBI:txid9521", + "default": "NCBI:txid9521", + "title": "Registry Identifier", + "type": "string" + } + }, + "title": "_Saimiri_Sciureus", + "type": "object" + }, "_Same_Sky": { "description": "Model Same Sky", "properties": { @@ -8642,8 +8753,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.0", - "default": "3.0.0", + "const": "3.0.1", + "default": "3.0.1", "title": "Schema Version", "type": "string" }, diff --git a/src/aind_data_schema/core/instrument.py b/src/aind_data_schema/core/instrument.py index e45ac8a99..347dc76b8 100644 --- a/src/aind_data_schema/core/instrument.py +++ b/src/aind_data_schema/core/instrument.py @@ -78,7 +78,7 @@ class Instrument(DataCoreModel): # metametadata _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/instrument.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") + schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") # instrument definition location: Optional[str] = Field(default=None, title="Location", description="Location of the instrument") diff --git a/src/aind_data_schema/core/metadata.py b/src/aind_data_schema/core/metadata.py index dcd586c9f..29715e357 100644 --- a/src/aind_data_schema/core/metadata.py +++ b/src/aind_data_schema/core/metadata.py @@ -74,7 +74,7 @@ class Metadata(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/metadata.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") + schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") name: str = Field( ..., description="Name of the data asset.", diff --git a/src/aind_data_schema/core/procedures.py b/src/aind_data_schema/core/procedures.py index af493b28d..f9608103d 100644 --- a/src/aind_data_schema/core/procedures.py +++ b/src/aind_data_schema/core/procedures.py @@ -25,7 +25,7 @@ class Procedures(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/procedures.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") + schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") subject_id: str = Field( ..., description="Unique identifier for the subject of data acquisition", diff --git a/src/aind_data_schema/core/subject.py b/src/aind_data_schema/core/subject.py index ecc37e6fe..84f83afd8 100644 --- a/src/aind_data_schema/core/subject.py +++ b/src/aind_data_schema/core/subject.py @@ -13,7 +13,7 @@ class Subject(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/subject.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") + schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") subject_id: str = Field( ..., description="Unique identifier for the subject of data acquisition", From bb9e1eb574242b94f26d74e14d7b2ce90962b3eb Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Fri, 11 Sep 2026 15:03:41 -0700 Subject: [PATCH 16/38] refactor: missing aind_data_schema -> biodata_schema renames --- .github/workflows/publish_dev.yml | 2 +- .github/workflows/run_dev_tests.yml | 2 +- .github/workflows/run_main_tests.yml | 2 +- .github/workflows/tag_and_publish_main.yml | 2 +- .github/workflows/update_dev_docs.yml | 6 ++-- .github/workflows/update_docs.yml | 4 +-- CONTRIBUTING.md | 10 +++--- diagram-app/src/types.ts | 2 +- diagram-app/vite.config.ts | 4 +-- docs/base/core/acquisition.md | 2 +- docs/base/core/data_description.md | 2 +- docs/base/core/instrument.md | 2 +- docs/base/core/metadata.md | 2 +- docs/base/core/model.md | 2 +- docs/base/core/procedures.md | 2 +- docs/base/core/processing.md | 2 +- docs/base/core/quality_control.md | 4 +-- docs/base/core/subject.md | 2 +- .../_static/coordinate_system_builder.html | 2 +- docs/source/acquisition.md | 2 +- docs/source/components.rst | 2 +- docs/source/components/configs.md | 2 +- docs/source/components/stimulus.md | 4 +-- docs/source/conf.py | 4 +-- docs/source/coordinate_systems.md | 4 +-- docs/source/data_description.md | 2 +- .../example_workflow/example_workflow.md | 6 ++-- .../example_workflow/example_workflow.py | 16 ++++----- docs/source/inheritance.md | 8 ++--- docs/source/instrument.md | 2 +- docs/source/metadata.md | 2 +- docs/source/model.md | 2 +- docs/source/procedures.md | 2 +- docs/source/processing.md | 2 +- docs/source/quality_control.md | 4 +-- docs/source/subject.md | 2 +- docs/source/validation.md | 2 +- examples/aibs_smartspim_instrument.py | 8 ++--- examples/aibs_smartspim_procedures.py | 8 ++--- examples/aind_smartspim_instrument.py | 8 ++--- examples/barseq_acquisition.py | 2 +- examples/barseq_instrument.py | 6 ++-- examples/bergamo_ophys_acquisition.py | 10 +++--- examples/data_description.py | 4 +-- examples/ephys_acquisition.py | 10 +++--- examples/ephys_instrument.py | 10 +++--- examples/exaspim_acquisition.py | 12 +++---- examples/exaspim_instrument.py | 8 ++--- examples/exaspim_quality_control.py | 2 +- examples/fip_behavior_instrument.py | 12 +++---- examples/fip_ophys_acquisition.py | 8 ++--- examples/fip_ophys_instrument.py | 14 ++++---- examples/isi_instrument.py | 6 ++-- examples/model.py | 6 ++-- examples/mri_acquisition.py | 8 ++--- examples/multiplane_ophys_acquisition.py | 8 ++--- examples/multiplane_ophys_instrument.py | 10 +++--- examples/ophys_acquisition.py | 6 ++-- examples/ophys_procedures.py | 14 ++++---- examples/procedures.py | 12 +++---- examples/processing.py | 4 +-- examples/quality_control.py | 2 +- examples/slap2_acquisition.py | 8 ++--- examples/slap2_instrument.py | 8 ++--- examples/slap2_structure_acquisition.py | 6 ++-- examples/subject.py | 4 +-- examples/thermistor_procedures.py | 8 ++--- pyproject.toml | 8 ++--- schemas/acquisition_schema.json | 4 +-- schemas/data_description_schema.json | 4 +-- schemas/instrument_schema.json | 4 +-- schemas/metadata_schema.json | 36 +++++++++---------- schemas/model_schema.json | 4 +-- schemas/procedures_schema.json | 4 +-- schemas/processing_schema.json | 4 +-- schemas/quality_control_schema.json | 4 +-- schemas/subject_schema.json | 4 +-- .../__init__.py | 0 .../base.py | 2 +- .../components/__init__.py | 0 .../components/configs.py | 12 +++---- .../components/connections.py | 2 +- .../components/coordinates.py | 4 +-- .../components/devices.py | 8 ++--- .../components/geometry.py | 2 +- .../components/identifiers.py | 2 +- .../components/injection_procedures.py | 6 ++-- .../components/measurements.py | 10 +++--- .../components/reagent.py | 2 +- .../components/specimen_procedures.py | 10 +++--- .../components/stimulus.py | 2 +- .../components/subject_procedures.py | 10 +++--- .../components/subjects.py | 6 ++-- .../components/surgery_procedures.py | 12 +++---- .../components/wrappers.py | 0 .../core/__init__.py | 0 .../core/acquisition.py | 24 ++++++------- .../core/data_description.py | 6 ++-- .../core/instrument.py | 18 +++++----- .../core/metadata.py | 32 ++++++++--------- .../core/model.py | 8 ++--- .../core/procedures.py | 16 ++++----- .../core/processing.py | 12 +++---- .../core/quality_control.py | 6 ++-- .../core/subject.py | 6 ++-- .../utils/__init__.py | 0 .../utils/compatibility_check.py | 4 +-- .../utils/docs/doc_generator.py | 8 ++--- .../utils/docs/model_generator.py | 18 +++++----- .../utils/docs/registries_generator.py | 4 +-- .../utils/docs/utils.py | 4 +-- .../utils/examples_generator.py | 0 .../utils/exceptions.py | 0 .../utils/inheritance.py | 6 ++-- .../utils/json_writer.py | 6 ++-- .../utils/merge.py | 0 .../utils/schema_tree.py | 18 +++++----- .../utils/schema_version_bump.py | 4 +-- .../utils/validators.py | 2 +- tests/coordinate_systems.py | 2 +- tests/test_acquisition.py | 10 +++--- tests/test_acquisition_configs.py | 4 +-- tests/test_aind_generic.py | 2 +- tests/test_base.py | 18 +++++----- tests/test_bump_schema_versions.py | 24 ++++++------- tests/test_compatibility_check.py | 8 ++--- tests/test_composability_merge.py | 10 +++--- tests/test_configs.py | 4 +-- tests/test_coordinates.py | 2 +- tests/test_data_description.py | 8 ++--- tests/test_device.py | 4 +-- tests/test_examples.py | 2 +- tests/test_geometry.py | 2 +- tests/test_identifiers.py | 2 +- tests/test_imaging.py | 14 ++++---- tests/test_inheritance.py | 14 ++++---- tests/test_inst_acq_compatibility.py | 2 +- tests/test_instrument.py | 16 ++++----- tests/test_json_writer.py | 2 +- tests/test_measurements.py | 2 +- tests/test_metadata.py | 32 ++++++++--------- tests/test_model.py | 2 +- tests/test_procedures.py | 18 +++++----- tests/test_processing.py | 4 +-- tests/test_quality_control.py | 2 +- tests/test_stimulus.py | 2 +- tests/test_subject.py | 4 +-- tests/test_subjects.py | 2 +- tests/test_utils_merge.py | 14 ++++---- tests/test_utils_validators.py | 24 ++++++------- tests/test_wrappers.py | 2 +- 151 files changed, 491 insertions(+), 491 deletions(-) rename src/{aind_data_schema => biodata_schema}/__init__.py (100%) rename src/{aind_data_schema => biodata_schema}/base.py (99%) rename src/{aind_data_schema => biodata_schema}/components/__init__.py (100%) rename src/{aind_data_schema => biodata_schema}/components/configs.py (98%) rename src/{aind_data_schema => biodata_schema}/components/connections.py (94%) rename src/{aind_data_schema => biodata_schema}/components/coordinates.py (98%) rename src/{aind_data_schema => biodata_schema}/components/devices.py (98%) rename src/{aind_data_schema => biodata_schema}/components/geometry.py (91%) rename src/{aind_data_schema => biodata_schema}/components/identifiers.py (98%) rename src/{aind_data_schema => biodata_schema}/components/injection_procedures.py (95%) rename src/{aind_data_schema => biodata_schema}/components/measurements.py (93%) rename src/{aind_data_schema => biodata_schema}/components/reagent.py (98%) rename src/{aind_data_schema => biodata_schema}/components/specimen_procedures.py (96%) rename src/{aind_data_schema => biodata_schema}/components/stimulus.py (98%) rename src/{aind_data_schema => biodata_schema}/components/subject_procedures.py (94%) rename src/{aind_data_schema => biodata_schema}/components/subjects.py (97%) rename src/{aind_data_schema => biodata_schema}/components/surgery_procedures.py (95%) rename src/{aind_data_schema => biodata_schema}/components/wrappers.py (100%) rename src/{aind_data_schema => biodata_schema}/core/__init__.py (100%) rename src/{aind_data_schema => biodata_schema}/core/acquisition.py (97%) rename src/{aind_data_schema => biodata_schema}/core/data_description.py (97%) rename src/{aind_data_schema => biodata_schema}/core/instrument.py (95%) rename src/{aind_data_schema => biodata_schema}/core/metadata.py (95%) rename src/{aind_data_schema => biodata_schema}/core/model.py (91%) rename src/{aind_data_schema => biodata_schema}/core/procedures.py (90%) rename src/{aind_data_schema => biodata_schema}/core/processing.py (96%) rename src/{aind_data_schema => biodata_schema}/core/quality_control.py (97%) rename src/{aind_data_schema => biodata_schema}/core/subject.py (78%) rename src/{aind_data_schema => biodata_schema}/utils/__init__.py (100%) rename src/{aind_data_schema => biodata_schema}/utils/compatibility_check.py (97%) rename src/{aind_data_schema => biodata_schema}/utils/docs/doc_generator.py (97%) rename src/{aind_data_schema => biodata_schema}/utils/docs/model_generator.py (95%) rename src/{aind_data_schema => biodata_schema}/utils/docs/registries_generator.py (98%) rename src/{aind_data_schema => biodata_schema}/utils/docs/utils.py (92%) rename src/{aind_data_schema => biodata_schema}/utils/examples_generator.py (100%) rename src/{aind_data_schema => biodata_schema}/utils/exceptions.py (100%) rename src/{aind_data_schema => biodata_schema}/utils/inheritance.py (98%) rename src/{aind_data_schema => biodata_schema}/utils/json_writer.py (94%) rename src/{aind_data_schema => biodata_schema}/utils/merge.py (100%) rename src/{aind_data_schema => biodata_schema}/utils/schema_tree.py (95%) rename src/{aind_data_schema => biodata_schema}/utils/schema_version_bump.py (98%) rename src/{aind_data_schema => biodata_schema}/utils/validators.py (99%) diff --git a/.github/workflows/publish_dev.yml b/.github/workflows/publish_dev.yml index 8118b4411..3783d6c7c 100644 --- a/.github/workflows/publish_dev.yml +++ b/.github/workflows/publish_dev.yml @@ -33,5 +33,5 @@ jobs: - name: Create and upload schemas run: | uv sync --locked - uv run python -m aind_data_schema.utils.json_writer --output $TEMP_DIR --attach-version + uv run python -m biodata_schema.utils.json_writer --output $TEMP_DIR --attach-version uvx --from awscli aws s3 sync $TEMP_DIR s3://${AWS_DATA_SCHEMA_BUCKET}/$S3_PREFIX diff --git a/.github/workflows/run_dev_tests.yml b/.github/workflows/run_dev_tests.yml index 63602dd88..85e19e4aa 100644 --- a/.github/workflows/run_dev_tests.yml +++ b/.github/workflows/run_dev_tests.yml @@ -38,4 +38,4 @@ jobs: - name: Install dependencies run: uv sync --locked --group dev --group docs - name: Run tests and coverage - run: uv run pytest --cov=aind_data_schema --cov=tests --cov-report=term-missing --cov-fail-under=100 + run: uv run pytest --cov=biodata_schema --cov=tests --cov-report=term-missing --cov-fail-under=100 diff --git a/.github/workflows/run_main_tests.yml b/.github/workflows/run_main_tests.yml index 3461d6487..cbcad3ef0 100644 --- a/.github/workflows/run_main_tests.yml +++ b/.github/workflows/run_main_tests.yml @@ -40,7 +40,7 @@ jobs: - name: Install dependencies run: uv sync --locked --group dev --group docs - name: Run tests and coverage - run: uv run pytest --cov=aind_data_schema --cov=tests --cov-report=term-missing --cov-fail-under=100 + run: uv run pytest --cov=biodata_schema --cov=tests --cov-report=term-missing --cov-fail-under=100 verify_version: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/tag_and_publish_main.yml b/.github/workflows/tag_and_publish_main.yml index 51158a0f1..a2ff7c8eb 100644 --- a/.github/workflows/tag_and_publish_main.yml +++ b/.github/workflows/tag_and_publish_main.yml @@ -66,5 +66,5 @@ jobs: - name: Create and upload schemas run: | uv sync --locked - uv run python -m aind_data_schema.utils.json_writer --output $TEMP_DIR --attach-version + uv run python -m biodata_schema.utils.json_writer --output $TEMP_DIR --attach-version uvx --from awscli aws s3 sync $TEMP_DIR s3://${AWS_DATA_SCHEMA_BUCKET}/$S3_PREFIX diff --git a/.github/workflows/update_dev_docs.yml b/.github/workflows/update_dev_docs.yml index b1572a36b..33e99abce 100644 --- a/.github/workflows/update_dev_docs.yml +++ b/.github/workflows/update_dev_docs.yml @@ -21,9 +21,9 @@ jobs: run: uv sync --locked --group dev --group docs - name: Generate docs run: | - uv run python src/aind_data_schema/utils/docs/model_generator.py - uv run python src/aind_data_schema/utils/docs/registries_generator.py - uv run python src/aind_data_schema/utils/docs/doc_generator.py + uv run python src/biodata_schema/utils/docs/model_generator.py + uv run python src/biodata_schema/utils/docs/registries_generator.py + uv run python src/biodata_schema/utils/docs/doc_generator.py uv run sphinx-build -b html docs/source/ docs/build/html - name: Commit changes uses: EndBug/add-and-commit@v9 diff --git a/.github/workflows/update_docs.yml b/.github/workflows/update_docs.yml index 4aeea547c..2a1f82c60 100644 --- a/.github/workflows/update_docs.yml +++ b/.github/workflows/update_docs.yml @@ -22,12 +22,12 @@ jobs: run: uv sync --locked --group dev - name: Bump schema versions run: | - uv run python -m aind_data_schema.utils.schema_version_bump + uv run python -m biodata_schema.utils.schema_version_bump echo "Finished schema version bump" - name: Update schemas run: | rm -rf $OUTPUT_DIR - uv run python -m aind_data_schema.utils.json_writer --output $OUTPUT_DIR + uv run python -m biodata_schema.utils.json_writer --output $OUTPUT_DIR - name: Create example schemas run: | cd examples diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9594db405..fff4608b9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -39,9 +39,9 @@ Documentation is automatically built when you open a PR into the biodata-schema To generate the source files for the documentation and model class links, run: ```bash -uv run python src/aind_data_schema/utils/docs/model_generator.py -uv run python src/aind_data_schema/utils/docs/registries_generator.py -uv run python src/aind_data_schema/utils/docs/doc_generator.py +uv run python src/biodata_schema/utils/docs/model_generator.py +uv run python src/biodata_schema/utils/docs/registries_generator.py +uv run python src/biodata_schema/utils/docs/doc_generator.py ``` The front page embeds an interactive React Flow diagram of the `Metadata` schema (`diagram-app/`). Build its JS/CSS bundle once before building the docs (it's git-ignored and only needs rebuilding when `diagram-app/` changes): @@ -73,7 +73,7 @@ Testing is required to open a PR in this repository to ensure robustness and rel - Please test your changes using pytest and coverage: ```bash - uv run pytest --cov=aind_data_schema --cov=tests --cov-report=term-missing + uv run pytest --cov=biodata_schema --cov=tests --cov-report=term-missing ``` To open the coverage report in a browser, you can run @@ -157,7 +157,7 @@ When you are ready to open a pull request, please link any relevant issues and r ## Release - From dev, create a branch called release-vX.Y.Z -- Manually increment the version number in the aind_data_schema/__init__.py file to match +- Manually increment the version number in the biodata_schema/__init__.py file to match - Manually increment the major/minor/patch versions of the core files as needed - Push the branch and open a PR into main - After this push, any last minute changes to the release-vX.Y.Z will have to done to via a PR diff --git a/diagram-app/src/types.ts b/diagram-app/src/types.ts index 3aa2f32ae..9441f5cb8 100644 --- a/diagram-app/src/types.ts +++ b/diagram-app/src/types.ts @@ -1,4 +1,4 @@ -/** Mirrors the JSON produced by aind_data_schema.utils.schema_tree.generate_schema_diagram_data */ +/** Mirrors the JSON produced by biodata_schema.utils.schema_tree.generate_schema_diagram_data */ export interface FieldLink { /** Model key to drill into in-app, or null if this type isn't a local model (e.g. an enum). */ diff --git a/diagram-app/vite.config.ts b/diagram-app/vite.config.ts index 4fc65d68f..009559284 100644 --- a/diagram-app/vite.config.ts +++ b/diagram-app/vite.config.ts @@ -5,7 +5,7 @@ import { dirname, resolve } from "node:path"; import { existsSync, readFileSync } from "node:fs"; const root = dirname(fileURLToPath(import.meta.url)); -// The JSON is generated by `aind_data_schema.utils.schema_tree` at Sphinx +// The JSON is generated by `biodata_schema.utils.schema_tree` at Sphinx // build time, into the same directory this app's bundle is built into. const SCHEMA_JSON = resolve(root, "../docs/source/_static/schema-diagram/schema_diagram.json"); @@ -20,7 +20,7 @@ function schemaJsonDevPlugin(): Plugin { if (!existsSync(SCHEMA_JSON)) { res.statusCode = 404; return res.end( - "schema_diagram.json not found — run `python -m aind_data_schema.utils.schema_tree` " + + "schema_diagram.json not found — run `python -m biodata_schema.utils.schema_tree` " + "or the diagram data generator to produce it first.", ); } diff --git a/docs/base/core/acquisition.md b/docs/base/core/acquisition.md index a1298bcf2..8437e130c 100644 --- a/docs/base/core/acquisition.md +++ b/docs/base/core/acquisition.md @@ -1,6 +1,6 @@ # Acquisition -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/acquisition.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/acquisition.py) An acquisition is single episode of data collection that creates one data asset. diff --git a/docs/base/core/data_description.md b/docs/base/core/data_description.md index 4014ae1c9..602e7b3ad 100644 --- a/docs/base/core/data_description.md +++ b/docs/base/core/data_description.md @@ -1,6 +1,6 @@ # Data description -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/data_description.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/data_description.py) The `data_description.json` file tracks administrative information about a data asset, including affiliated researchers/organizations, projects, data modalities, dates of collection, and more. diff --git a/docs/base/core/instrument.md b/docs/base/core/instrument.md index 2cb706a57..a4448d807 100644 --- a/docs/base/core/instrument.md +++ b/docs/base/core/instrument.md @@ -1,6 +1,6 @@ # Instrument -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/instrument.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/instrument.py) The `instrument.json` collects the components, mostly hardware devices, used to collect data. In general, the instrument schema describes the static state of the data acquisition hardware across sessions. The [Acquisition](acquisition.md) is used to describe the configuration of components for a specific session. diff --git a/docs/base/core/metadata.md b/docs/base/core/metadata.md index f40124fec..564284691 100644 --- a/docs/base/core/metadata.md +++ b/docs/base/core/metadata.md @@ -1,5 +1,5 @@ # Metadata -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/metadata.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/metadata.py) The `metadata.json` gathers together the other metadata files and adds information about where the data asset is stored. diff --git a/docs/base/core/model.md b/docs/base/core/model.md index d24a27bd3..1a85668f0 100644 --- a/docs/base/core/model.md +++ b/docs/base/core/model.md @@ -1,6 +1,6 @@ # Model -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/model.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/model.py) The Model metadata schema is an extension of the Processing schema tailored to model weights and other data and code artifacts underlying machine learning models - these may be trained on one dataset and evaluated on others, and may be intended to undergo further training iteratively in future versions. diff --git a/docs/base/core/procedures.md b/docs/base/core/procedures.md index 25bd479ed..8e4fac08c 100644 --- a/docs/base/core/procedures.md +++ b/docs/base/core/procedures.md @@ -1,6 +1,6 @@ # Procedures -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/procedures.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/procedures.py) The `procedures.json` file contains anything done to the subject or specimen prior to data collection. This can include surgeries, injections, tissue processing, sectioning, immunolabeling, etc. The procedures metadata also contains implanted devices and their configurations, for example for chronic insertions. diff --git a/docs/base/core/processing.md b/docs/base/core/processing.md index 14471b43d..70f73318b 100644 --- a/docs/base/core/processing.md +++ b/docs/base/core/processing.md @@ -1,6 +1,6 @@ # Processing -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/processing.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/processing.py) The `processing.json` file captures the data processing and analysis steps that have been carried out – mostly for derived data assets. This tracks what code was used for each step, when it was run, what the input and outputs where, what parameters were set. This includes things like spike sorting, image alignment, cell segmentation. It also includes manual annotation, quality control, and data analysis. diff --git a/docs/base/core/quality_control.md b/docs/base/core/quality_control.md index 37db03382..0301dc047 100644 --- a/docs/base/core/quality_control.md +++ b/docs/base/core/quality_control.md @@ -1,12 +1,12 @@ # Quality control -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/quality_control.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/quality_control.py) Quality control is a collection of **metrics** evaluated on a data asset. [QCMetric](#qcmetric) objects should be generated during pipelines: from raw data, during processing, and during analysis by researchers. -Every [QCMetric](#qcmetric) has a `aind_data_schema.quality_control.State` which takes the value of the metric and compares it to some rule. Metrics can only pass or fail. Metrics that require manual evaluation are set to pending. +Every [QCMetric](#qcmetric) has a `biodata_schema.quality_control.State` which takes the value of the metric and compares it to some rule. Metrics can only pass or fail. Metrics that require manual evaluation are set to pending. ## Details diff --git a/docs/base/core/subject.md b/docs/base/core/subject.md index 941b165e3..f8f08a033 100644 --- a/docs/base/core/subject.md +++ b/docs/base/core/subject.md @@ -1,6 +1,6 @@ # Subject -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/subject.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/subject.py) The `subject.json` file describes the subject from which data was obtained. diff --git a/docs/source/_static/coordinate_system_builder.html b/docs/source/_static/coordinate_system_builder.html index 15cd27047..22e992023 100644 --- a/docs/source/_static/coordinate_system_builder.html +++ b/docs/source/_static/coordinate_system_builder.html @@ -867,7 +867,7 @@

At-rest orientation (in instrument CS)

} }).join('\n'); - const code = `from aind_data_schema.components.coordinates import ( + const code = `from biodata_schema.components.coordinates import ( Axis, AxisName, CoordinateSystem, Direction, Handedness, Origin, ReferenceCoordinateSystem, Rotation, RotationDirection, Scale, SizeUnit, Translation, diff --git a/docs/source/acquisition.md b/docs/source/acquisition.md index bd9af60fd..6e98ae999 100644 --- a/docs/source/acquisition.md +++ b/docs/source/acquisition.md @@ -1,6 +1,6 @@ # Acquisition -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/acquisition.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/acquisition.py) An acquisition is single episode of data collection that creates one data asset. diff --git a/docs/source/components.rst b/docs/source/components.rst index f905a3cd7..73903e7e8 100644 --- a/docs/source/components.rst +++ b/docs/source/components.rst @@ -3,7 +3,7 @@ Components Components are models that are used to build up each of the core files. These include configurations of devices, models representing coordinate systems, identifiers for people and code, etc. Groups of components are organized together. -`Source code `_ +`Source code `_ .. toctree:: :maxdepth: 2 diff --git a/docs/source/components/configs.md b/docs/source/components/configs.md index d77abb33e..2bf1b84f7 100644 --- a/docs/source/components/configs.md +++ b/docs/source/components/configs.md @@ -149,7 +149,7 @@ Configuration of an imaging instrument | Field | Type | Title (Description) | |-------|------|-------------| -| `channels` | `List[typing.Annotated[aind_data_schema.components.configs.Channel, FieldInfo(annotation=NoneType, required=True, discriminator='object_type')]]` | | +| `channels` | `List[typing.Annotated[biodata_schema.components.configs.Channel, FieldInfo(annotation=NoneType, required=True, discriminator='object_type')]]` | | | `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Coordinate system (Required for ImageSPIM objects and when the imaging coordinate system differs from the Acquisition.coordinate_system) | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Local coordinate system (Required for ImageSPIM objects and when the imaging coordinate system differs from the Acquisition.global_coordinate_system) | | `images` | List[[PlanarImage](#planarimage) or [PlanarImageStack](#planarimagestack) or [ImageSPIM](#imagespim)] | Images | diff --git a/docs/source/components/stimulus.md b/docs/source/components/stimulus.md index b98ea9312..a3f12d6f3 100644 --- a/docs/source/components/stimulus.md +++ b/docs/source/components/stimulus.md @@ -31,7 +31,7 @@ Types of bandpass filters for auditory stim ### OlfactometerChannelConfig -**DEPRECATED**: Use OlfactometerConfig in aind_data_schema.components.configs +**DEPRECATED**: Use OlfactometerConfig in biodata_schema.components.configs Description of olfactometer channel configurations @@ -46,7 +46,7 @@ Description of olfactometer channel configurations ### OlfactoryStimulation -**DEPRECATED**: Use StimulusEpoch.stimulus_name and OlfactometerConfig in aind_data_schema.components.configs +**DEPRECATED**: Use StimulusEpoch.stimulus_name and OlfactometerConfig in biodata_schema.components.configs Description of a olfactory stimulus diff --git a/docs/source/conf.py b/docs/source/conf.py index b8b3ed492..19afe55b5 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -9,7 +9,7 @@ from os.path import abspath, dirname from pathlib import Path -from aind_data_schema import __version__ as package_version +from biodata_schema import __version__ as package_version INSTITUTE_NAME = "Allen Institute for Neural Dynamics" @@ -58,7 +58,7 @@ def _write_schema_diagram_json(): - from aind_data_schema.utils.schema_tree import write_schema_diagram_json + from biodata_schema.utils.schema_tree import write_schema_diagram_json write_schema_diagram_json(Path(dirname(this_file_path)) / "_static" / "schema-diagram" / "schema_diagram.json") diff --git a/docs/source/coordinate_systems.md b/docs/source/coordinate_systems.md index 2cae7a500..0cc9b049a 100644 --- a/docs/source/coordinate_systems.md +++ b/docs/source/coordinate_systems.md @@ -7,7 +7,7 @@ Unlike many parts of the metadata schema where fields are just floats or strings 1. Each [Instrument](instrument.md), [Acquisition](acquisition.md), and [Procedures](procedures.md) has its own `.coordinate_system` field. In most assets, the coordinate system is the same in all three files. 2. Any transform (i.e. a [Translation](components/coordinates.md#translation), [Rotation](components/coordinates.md#rotation), or [Scale](components/coordinates.md#scale)) defined for a device or configuration of a device **must be defined in it's core file's coordinate system**. To help you avoid mistakes, transform fields are paired with a `.coordinate_system_name` field and the coordinate system name must match the name of the coordinate system defined in the core file. -The top-level coordinate systems in the instrument, acquisition, and procedures are generally defined in *in vivo* space, usually relative to an origin on an animal's skull. Often when targeting coordinates in the brain we plan our experiments in a **standardized atlas** like the mouse common coordinate framework. When you encounter a field that that requires an atlas transform (i.e. a point or vector in an atlas), you'll see that an [Atlas](components/coordinates.md#atlas) will have to be defined alongside that transform. An Atlas library is available in `aind_data_schema.components.coordinates.AtlasLibrary` for your convenience. +The top-level coordinate systems in the instrument, acquisition, and procedures are generally defined in *in vivo* space, usually relative to an origin on an animal's skull. Often when targeting coordinates in the brain we plan our experiments in a **standardized atlas** like the mouse common coordinate framework. When you encounter a field that that requires an atlas transform (i.e. a point or vector in an atlas), you'll see that an [Atlas](components/coordinates.md#atlas) will have to be defined alongside that transform. An Atlas library is available in `biodata_schema.components.coordinates.AtlasLibrary` for your convenience. ## CoordinateSystem @@ -61,7 +61,7 @@ Note that in general, the process by which you perform an insertion should be re We know that allowing complete flexibility with coordinate systems will be a source of confusion. With that in mind, we encourage everybody to use the `CoordinateSystemLibrary` class, which comes with a pre-defined set of standard coordinate systems. For example, you can import the `BREGMA_ARI` coordinate system and then re-use it as follows: ```{code} python -from aind_data_schema.components.coordinates import CoordinateSystemLibrary +from biodata_schema.components.coordinates import CoordinateSystemLibrary ... diff --git a/docs/source/data_description.md b/docs/source/data_description.md index 60cd59176..ac7e3ffc8 100644 --- a/docs/source/data_description.md +++ b/docs/source/data_description.md @@ -1,6 +1,6 @@ # Data description -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/data_description.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/data_description.py) The `data_description.json` file tracks administrative information about a data asset, including affiliated researchers/organizations, projects, data modalities, dates of collection, and more. diff --git a/docs/source/example_workflow/example_workflow.md b/docs/source/example_workflow/example_workflow.md index 7a5a22144..6182c16c6 100644 --- a/docs/source/example_workflow/example_workflow.md +++ b/docs/source/example_workflow/example_workflow.md @@ -59,9 +59,9 @@ First, we'll set up the Python environment and define some shared variables. ### How did we know which `biodata-schema` classes to import? -Our general recommendation for metadata is to navigate the documentation starting from the core class you are working on. So for the data description you would go to that page: [DataDescription](../data_description.md). The import for any object can be read from the URL of the page, core classes are found in the core subfolder `from aind_data_schema.core import DataDescription`. +Our general recommendation for metadata is to navigate the documentation starting from the core class you are working on. So for the data description you would go to that page: [DataDescription](../data_description.md). The import for any object can be read from the URL of the page, core classes are found in the core subfolder `from biodata_schema.core import DataDescription`. -One of the objects you'll need to build is going to be the [Person](../components/identifiers.md#person). From the [DataDescription](../data_description.md) page you can click-through (we recommend you ctrl+click or command+click to open the link in a new tab) to the [Person](../components/identifiers.md#person) page. Again read the URL to know where to import the file, in this case we're in a subfolder components in the file identifiers `from aind_data_schema.components.identifiers import Person`. After importing the class and populating it in your Python code you can close the extra tab. +One of the objects you'll need to build is going to be the [Person](../components/identifiers.md#person). From the [DataDescription](../data_description.md) page you can click-through (we recommend you ctrl+click or command+click to open the link in a new tab) to the [Person](../components/identifiers.md#person) page. Again read the URL to know where to import the file, in this case we're in a subfolder components in the file identifiers `from biodata_schema.components.identifiers import Person`. After importing the class and populating it in your Python code you can close the extra tab. Let's move on to build the actual data description now. @@ -105,7 +105,7 @@ This is the point at which we need to also discuss the [coordinate systems](../c For most mouse experiments like the one here, the coordinate system used had the origin at Bregma and the axes pointing anterior, right, and inferior (or ventral), plus a depth coordinate. To make your life easier you can import this coordinate system from the library so that you don't have to worry about constructing it yourself. ``` -from aind_data_schema.coordinates.components import CoordinateSystemLibrary +from biodata_schema.coordinates.components import CoordinateSystemLibrary coordinate_system = CoordinateSystemLibrary.BREGMA_ARID ``` diff --git a/docs/source/example_workflow/example_workflow.py b/docs/source/example_workflow/example_workflow.py index b276cff21..a711ada65 100644 --- a/docs/source/example_workflow/example_workflow.py +++ b/docs/source/example_workflow/example_workflow.py @@ -11,14 +11,14 @@ from biodata_models.species import Strain from biodata_models.units import VolumeUnit -from aind_data_schema.components.coordinates import CoordinateSystemLibrary, Rotation, Translation -from aind_data_schema.components.identifiers import Person -from aind_data_schema.components.injection_procedures import InjectionDynamics, InjectionProfile, ViralMaterial -from aind_data_schema.components.subject_procedures import BrainInjection, Perfusion -from aind_data_schema.components.subjects import BreedingInfo, HomeCageEnrichment, Housing, MouseSubject, Sex, Species -from aind_data_schema.core.data_description import DataDescription, Funding -from aind_data_schema.core.procedures import Procedures, Surgery -from aind_data_schema.core.subject import Subject +from biodata_schema.components.coordinates import CoordinateSystemLibrary, Rotation, Translation +from biodata_schema.components.identifiers import Person +from biodata_schema.components.injection_procedures import InjectionDynamics, InjectionProfile, ViralMaterial +from biodata_schema.components.subject_procedures import BrainInjection, Perfusion +from biodata_schema.components.subjects import BreedingInfo, HomeCageEnrichment, Housing, MouseSubject, Sex, Species +from biodata_schema.core.data_description import DataDescription, Funding +from biodata_schema.core.procedures import Procedures, Surgery +from biodata_schema.core.subject import Subject sessions_df = pd.read_excel("example_workflow.xlsx", sheet_name="sessions") mice_df = pd.read_excel("example_workflow.xlsx", sheet_name="mice") diff --git a/docs/source/inheritance.md b/docs/source/inheritance.md index e453fd492..89bcaf66f 100644 --- a/docs/source/inheritance.md +++ b/docs/source/inheritance.md @@ -32,10 +32,10 @@ For assets created during analysis that aggregate across multiple acquisitions o ```python from datetime import datetime, timezone -from aind_data_schema.core.metadata import Metadata -from aind_data_schema.core.processing import DataProcess, Processing, ProcessName, ProcessStage -from aind_data_schema.core.quality_control import QCMetric, QCStatus, QualityControl, Stage, Status -from aind_data_schema.components.identifiers import Code +from biodata_schema.core.metadata import Metadata +from biodata_schema.core.processing import DataProcess, Processing, ProcessName, ProcessStage +from biodata_schema.core.quality_control import QCMetric, QCStatus, QualityControl, Stage, Status +from biodata_schema.components.identifiers import Code from biodata_models.modalities import Modality # Load and validate source metadata (e.g. from a JSON file) diff --git a/docs/source/instrument.md b/docs/source/instrument.md index 22904a213..5f93a7187 100644 --- a/docs/source/instrument.md +++ b/docs/source/instrument.md @@ -1,6 +1,6 @@ # Instrument -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/instrument.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/instrument.py) The `instrument.json` collects the components, mostly hardware devices, used to collect data. In general, the instrument schema describes the static state of the data acquisition hardware across sessions. The [Acquisition](acquisition.md) is used to describe the configuration of components for a specific session. diff --git a/docs/source/metadata.md b/docs/source/metadata.md index fe7126cd0..64a071d27 100644 --- a/docs/source/metadata.md +++ b/docs/source/metadata.md @@ -1,6 +1,6 @@ # Metadata -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/metadata.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/metadata.py) The `metadata.json` gathers together the other metadata files and adds information about where the data asset is stored. diff --git a/docs/source/model.md b/docs/source/model.md index 243ab1483..af0103207 100644 --- a/docs/source/model.md +++ b/docs/source/model.md @@ -1,6 +1,6 @@ # Model -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/model.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/model.py) The Model metadata schema is an extension of the Processing schema tailored to model weights and other data and code artifacts underlying machine learning models - these may be trained on one dataset and evaluated on others, and may be intended to undergo further training iteratively in future versions. diff --git a/docs/source/procedures.md b/docs/source/procedures.md index 5ad66bf30..86e843f33 100644 --- a/docs/source/procedures.md +++ b/docs/source/procedures.md @@ -1,6 +1,6 @@ # Procedures -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/procedures.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/procedures.py) The `procedures.json` file contains anything done to the subject or specimen prior to data collection. This can include surgeries, injections, tissue processing, sectioning, immunolabeling, etc. The procedures metadata also contains implanted devices and their configurations, for example for chronic insertions. diff --git a/docs/source/processing.md b/docs/source/processing.md index 430e3380e..1d94eeb4a 100644 --- a/docs/source/processing.md +++ b/docs/source/processing.md @@ -1,6 +1,6 @@ # Processing -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/processing.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/processing.py) The `processing.json` file captures the data processing and analysis steps that have been carried out – mostly for derived data assets. This tracks what code was used for each step, when it was run, what the input and outputs where, what parameters were set. This includes things like spike sorting, image alignment, cell segmentation. It also includes manual annotation, quality control, and data analysis. diff --git a/docs/source/quality_control.md b/docs/source/quality_control.md index 2985d44a3..80ffb9b99 100644 --- a/docs/source/quality_control.md +++ b/docs/source/quality_control.md @@ -1,12 +1,12 @@ # Quality control -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/quality_control.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/quality_control.py) Quality control is a collection of **metrics** evaluated on a data asset. [QCMetric](#qcmetric) objects should be generated during pipelines: from raw data, during processing, and during analysis by researchers. -Every [QCMetric](#qcmetric) has a `aind_data_schema.quality_control.State` which takes the value of the metric and compares it to some rule. Metrics can only pass or fail. Metrics that require manual evaluation are set to pending. +Every [QCMetric](#qcmetric) has a `biodata_schema.quality_control.State` which takes the value of the metric and compares it to some rule. Metrics can only pass or fail. Metrics that require manual evaluation are set to pending. ## Details diff --git a/docs/source/subject.md b/docs/source/subject.md index 8176dd5d0..916ab632c 100644 --- a/docs/source/subject.md +++ b/docs/source/subject.md @@ -1,6 +1,6 @@ # Subject -[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/aind_data_schema/core/subject.py) +[Link to code](https://github.com/AllenNeuralDynamics/biodata-schema/blob/dev/src/biodata_schema/core/subject.py) The `subject.json` file describes the subject from which data was obtained. diff --git a/docs/source/validation.md b/docs/source/validation.md index 76a594d4a..3ef258815 100644 --- a/docs/source/validation.md +++ b/docs/source/validation.md @@ -15,7 +15,7 @@ The following consistency rules are enforced: Construct it as follows: ```python -from aind_data_schema.utils.compatibility_check import InstrumentAcquisitionCompatibility +from biodata_schema.utils.compatibility_check import InstrumentAcquisitionCompatibility # Construct your Instrument and Acquisition objects diff --git a/examples/aibs_smartspim_instrument.py b/examples/aibs_smartspim_instrument.py index 5c55d63c3..75319048d 100644 --- a/examples/aibs_smartspim_instrument.py +++ b/examples/aibs_smartspim_instrument.py @@ -8,9 +8,9 @@ from biodata_models.organizations import Organization from biodata_models.units import SizeUnit -from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import Axis, CoordinateSystem -from aind_data_schema.components.devices import ( +from biodata_schema.components.connections import Connection +from biodata_schema.components.coordinates import Axis, CoordinateSystem +from biodata_schema.components.devices import ( AdditionalImagingDevice, Detector, Device, @@ -21,7 +21,7 @@ Objective, ScanningStage, ) -from aind_data_schema.core.instrument import Instrument +from biodata_schema.core.instrument import Instrument SIPE_MONITOR_RTF = CoordinateSystem( name="SIPE_MONITOR_RTF", diff --git a/examples/aibs_smartspim_procedures.py b/examples/aibs_smartspim_procedures.py index 4868b68a9..b1226b5cd 100644 --- a/examples/aibs_smartspim_procedures.py +++ b/examples/aibs_smartspim_procedures.py @@ -7,10 +7,10 @@ from biodata_models.organizations import Organization from biodata_models.units import SizeUnit -from aind_data_schema.components.coordinates import Axis, CoordinateSystem -from aind_data_schema.components.reagent import Reagent -from aind_data_schema.components.subject_procedures import Perfusion -from aind_data_schema.core import procedures +from biodata_schema.components.coordinates import Axis, CoordinateSystem +from biodata_schema.components.reagent import Reagent +from biodata_schema.components.subject_procedures import Perfusion +from biodata_schema.core import procedures BREGMA_ARI = CoordinateSystem( name="BREGMA_ARI", diff --git a/examples/aind_smartspim_instrument.py b/examples/aind_smartspim_instrument.py index 1c9d62bf0..d85de82c1 100644 --- a/examples/aind_smartspim_instrument.py +++ b/examples/aind_smartspim_instrument.py @@ -8,16 +8,16 @@ from biodata_models.organizations import Organization from biodata_models.units import SizeUnit -from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import Axis, CoordinateSystem -from aind_data_schema.components.devices import ( +from biodata_schema.components.connections import Connection +from biodata_schema.components.coordinates import Axis, CoordinateSystem +from biodata_schema.components.devices import ( Device, Filter, Laser, MotorizedStage, ScanningStage, ) -from aind_data_schema.core.instrument import ( +from biodata_schema.core.instrument import ( Detector, Instrument, Microscope, diff --git a/examples/barseq_acquisition.py b/examples/barseq_acquisition.py index e3e8a1d0f..35c4cb7c5 100644 --- a/examples/barseq_acquisition.py +++ b/examples/barseq_acquisition.py @@ -12,7 +12,7 @@ from biodata_models.modalities import Modality -from aind_data_schema.core.acquisition import Acquisition, ExternalDataStream +from biodata_schema.core.acquisition import Acquisition, ExternalDataStream acquisition = Acquisition( subject_id="123456", diff --git a/examples/barseq_instrument.py b/examples/barseq_instrument.py index ede886b0a..bde915346 100644 --- a/examples/barseq_instrument.py +++ b/examples/barseq_instrument.py @@ -8,8 +8,8 @@ from biodata_models.organizations import Organization from biodata_models.units import SizeUnit -from aind_data_schema.components.coordinates import Axis, CoordinateSystem -from aind_data_schema.components.devices import ( +from biodata_schema.components.coordinates import Axis, CoordinateSystem +from biodata_schema.components.devices import ( BinMode, Camera, CameraChroma, @@ -22,7 +22,7 @@ Microscope, Objective, ) -from aind_data_schema.core.instrument import Instrument +from biodata_schema.core.instrument import Instrument IMAGE_XYZ = CoordinateSystem( name="IMAGE_XYZ", diff --git a/examples/bergamo_ophys_acquisition.py b/examples/bergamo_ophys_acquisition.py index d00131312..56526bdcb 100644 --- a/examples/bergamo_ophys_acquisition.py +++ b/examples/bergamo_ophys_acquisition.py @@ -10,7 +10,7 @@ from biodata_models.stimulus_modality import StimulusModality from biodata_models.units import FrequencyUnit, SizeUnit -from aind_data_schema.components.configs import ( +from biodata_schema.components.configs import ( Channel, DetectorConfig, ImagingConfig, @@ -19,10 +19,10 @@ Plane, SamplingStrategy, ) -from aind_data_schema.components.coordinates import Axis, CoordinateSystem, Scale, Translation -from aind_data_schema.components.identifiers import Code -from aind_data_schema.components.stimulus import PhotoStimulation, PhotoStimulationGroup -from aind_data_schema.core.acquisition import ( +from biodata_schema.components.coordinates import Axis, CoordinateSystem, Scale, Translation +from biodata_schema.components.identifiers import Code +from biodata_schema.components.stimulus import PhotoStimulation, PhotoStimulationGroup +from biodata_schema.core.acquisition import ( Acquisition, AcquisitionSubjectDetails, DataStream, diff --git a/examples/data_description.py b/examples/data_description.py index 4873d20dc..a06388d91 100644 --- a/examples/data_description.py +++ b/examples/data_description.py @@ -7,8 +7,8 @@ from biodata_models.modalities import Modality from biodata_models.organizations import Organization -from aind_data_schema.components.identifiers import Person -from aind_data_schema.core.data_description import DataDescription, Funding +from biodata_schema.components.identifiers import Person +from biodata_schema.core.data_description import DataDescription, Funding d = DataDescription( modalities=[Modality.ECEPHYS, Modality.BEHAVIOR_VIDEOS], diff --git a/examples/ephys_acquisition.py b/examples/ephys_acquisition.py index 97d2e594d..90c9d193a 100644 --- a/examples/ephys_acquisition.py +++ b/examples/ephys_acquisition.py @@ -10,12 +10,12 @@ from biodata_models.stimulus_modality import StimulusModality from biodata_models.units import SizeUnit -from aind_data_schema.components.configs import ( +from biodata_schema.components.configs import ( EphysAssemblyConfig, ManipulatorConfig, ProbeConfig, ) -from aind_data_schema.components.coordinates import ( +from biodata_schema.components.coordinates import ( AtlasCoordinate, AtlasLibrary, Axis, @@ -23,9 +23,9 @@ Rotation, Translation, ) -from aind_data_schema.components.identifiers import Code, Software -from aind_data_schema.components.stimulus import VisualStimulation -from aind_data_schema.core.acquisition import ( +from biodata_schema.components.identifiers import Code, Software +from biodata_schema.components.stimulus import VisualStimulation +from biodata_schema.core.acquisition import ( Acquisition, AcquisitionSubjectDetails, DataStream, diff --git a/examples/ephys_instrument.py b/examples/ephys_instrument.py index 3e127637f..7d1178cc5 100644 --- a/examples/ephys_instrument.py +++ b/examples/ephys_instrument.py @@ -10,9 +10,9 @@ from biodata_models.organizations import Organization from biodata_models.units import FrequencyUnit, PowerUnit, SizeUnit -from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import Affine, Axis, CoordinateSystem, Translation -from aind_data_schema.components.devices import ( +from biodata_schema.components.connections import Connection +from biodata_schema.components.coordinates import Affine, Axis, CoordinateSystem, Translation +from biodata_schema.components.devices import ( Camera, CameraAssembly, Computer, @@ -32,8 +32,8 @@ NeuropixelsBasestation, ProbePort, ) -from aind_data_schema.components.measurements import Calibration -from aind_data_schema.core.instrument import Instrument +from biodata_schema.components.measurements import Calibration +from biodata_schema.core.instrument import Instrument BREGMA_ARI = CoordinateSystem( name="BREGMA_ARI", diff --git a/examples/exaspim_acquisition.py b/examples/exaspim_acquisition.py index 3ec9e985f..55a61374b 100644 --- a/examples/exaspim_acquisition.py +++ b/examples/exaspim_acquisition.py @@ -11,7 +11,7 @@ from biodata_models.registries import Registry from biodata_models.units import PowerUnit, SizeUnit -from aind_data_schema.components.configs import ( +from biodata_schema.components.configs import ( Channel, DetectorConfig, DeviceConfig, @@ -21,11 +21,11 @@ LaserConfig, SampleChamberConfig, ) -from aind_data_schema.components.coordinates import Axis, CoordinateSystem, Scale, Translation -from aind_data_schema.components.measurements import Calibration, Maintenance -from aind_data_schema.components.reagent import Reagent -from aind_data_schema.components.wrappers import AssetPath -from aind_data_schema.core.acquisition import Acquisition, DataStream +from biodata_schema.components.coordinates import Axis, CoordinateSystem, Scale, Translation +from biodata_schema.components.measurements import Calibration, Maintenance +from biodata_schema.components.reagent import Reagent +from biodata_schema.components.wrappers import AssetPath +from biodata_schema.core.acquisition import Acquisition, DataStream SPIM_RPI = CoordinateSystem( name="SPIM_RPI", diff --git a/examples/exaspim_instrument.py b/examples/exaspim_instrument.py index eb392cf56..991f464be 100644 --- a/examples/exaspim_instrument.py +++ b/examples/exaspim_instrument.py @@ -8,9 +8,9 @@ from biodata_models.organizations import Organization from biodata_models.units import FrequencyUnit, SizeUnit -from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import Axis, CoordinateSystem -from aind_data_schema.components.devices import ( +from biodata_schema.components.connections import Connection +from biodata_schema.components.coordinates import Axis, CoordinateSystem +from biodata_schema.components.devices import ( AdditionalImagingDevice, Computer, DAQChannel, @@ -23,7 +23,7 @@ Objective, ScanningStage, ) -from aind_data_schema.core.instrument import Instrument +from biodata_schema.core.instrument import Instrument SPIM_RPI = CoordinateSystem( name="SPIM_RPI", diff --git a/examples/exaspim_quality_control.py b/examples/exaspim_quality_control.py index f85f52027..2a5449e3b 100644 --- a/examples/exaspim_quality_control.py +++ b/examples/exaspim_quality_control.py @@ -6,7 +6,7 @@ from biodata_models.brain_atlas import CCFv3 from biodata_models.modalities import Modality -from aind_data_schema.core.quality_control import QCMetric, QCStatus, QualityControl, Stage, Status +from biodata_schema.core.quality_control import QCMetric, QCStatus, QualityControl, Stage, Status metrics = [ # N001 metrics diff --git a/examples/fip_behavior_instrument.py b/examples/fip_behavior_instrument.py index d7d08c60d..2e4038b91 100644 --- a/examples/fip_behavior_instrument.py +++ b/examples/fip_behavior_instrument.py @@ -10,9 +10,9 @@ from biodata_models.modalities import Modality from biodata_models.units import FrequencyUnit, PowerUnit, SizeUnit -from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import Axis, CoordinateSystem -from aind_data_schema.components.devices import ( +from biodata_schema.components.connections import Connection +from biodata_schema.components.coordinates import Axis, CoordinateSystem +from biodata_schema.components.devices import ( Camera, CameraAssembly, Computer, @@ -34,9 +34,9 @@ Organization, Tube, ) -from aind_data_schema.components.identifiers import Software -from aind_data_schema.components.measurements import Calibration -from aind_data_schema.core.instrument import Instrument +from biodata_schema.components.identifiers import Software +from biodata_schema.components.measurements import Calibration +from biodata_schema.core.instrument import Instrument BREGMA_ARI = CoordinateSystem( name="BREGMA_ARI", diff --git a/examples/fip_ophys_acquisition.py b/examples/fip_ophys_acquisition.py index 65d3e4ac0..2c6ca7bfe 100644 --- a/examples/fip_ophys_acquisition.py +++ b/examples/fip_ophys_acquisition.py @@ -9,7 +9,7 @@ from biodata_models.stimulus_modality import StimulusModality from biodata_models.units import FrequencyUnit, PowerUnit, SizeUnit, TimeUnit, VolumeUnit -from aind_data_schema.components.configs import ( +from biodata_schema.components.configs import ( Channel, DetectorConfig, DeviceConfig, @@ -18,9 +18,9 @@ SpeakerConfig, TriggerType, ) -from aind_data_schema.components.connections import Connection -from aind_data_schema.components.identifiers import Code -from aind_data_schema.core.acquisition import ( +from biodata_schema.components.connections import Connection +from biodata_schema.components.identifiers import Code +from biodata_schema.core.acquisition import ( Acquisition, AcquisitionSubjectDetails, DataStream, diff --git a/examples/fip_ophys_instrument.py b/examples/fip_ophys_instrument.py index 43106504f..a7ebe0f78 100644 --- a/examples/fip_ophys_instrument.py +++ b/examples/fip_ophys_instrument.py @@ -7,13 +7,13 @@ from biodata_models.modalities import Modality from biodata_models.units import FrequencyUnit, PowerUnit, SizeUnit -import aind_data_schema.components.devices as d -import aind_data_schema.core.instrument as r -from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import Axis, CoordinateSystem -from aind_data_schema.components.devices import Computer -from aind_data_schema.components.identifiers import Software -from aind_data_schema.components.measurements import Calibration +import biodata_schema.components.devices as d +import biodata_schema.core.instrument as r +from biodata_schema.components.connections import Connection +from biodata_schema.components.coordinates import Axis, CoordinateSystem +from biodata_schema.components.devices import Computer +from biodata_schema.components.identifiers import Software +from biodata_schema.components.measurements import Calibration BREGMA_ARI = CoordinateSystem( name="BREGMA_ARI", diff --git a/examples/isi_instrument.py b/examples/isi_instrument.py index 3065f9fd5..3802ff951 100644 --- a/examples/isi_instrument.py +++ b/examples/isi_instrument.py @@ -26,8 +26,8 @@ from biodata_models.organizations import Organization from biodata_models.units import SizeUnit -from aind_data_schema.components.coordinates import Axis, CoordinateSystem -from aind_data_schema.components.devices import ( +from biodata_schema.components.coordinates import Axis, CoordinateSystem +from biodata_schema.components.devices import ( Camera, CameraAssembly, Computer, @@ -39,7 +39,7 @@ Monitor, MotorizedStage, ) -from aind_data_schema.core.instrument import Instrument +from biodata_schema.core.instrument import Instrument BREGMA_ARI = CoordinateSystem( name="BREGMA_ARI", diff --git a/examples/model.py b/examples/model.py index d4cf73865..f63306538 100644 --- a/examples/model.py +++ b/examples/model.py @@ -5,9 +5,9 @@ from biodata_models.system_architecture import ModelArchitecture -from aind_data_schema.components.identifiers import Code, DataAsset, Software -from aind_data_schema.core.model import Model, ModelEvaluation, ModelTraining, PerformanceMetric -from aind_data_schema.core.processing import ProcessStage +from biodata_schema.components.identifiers import Code, DataAsset, Software +from biodata_schema.core.model import Model, ModelEvaluation, ModelTraining, PerformanceMetric +from biodata_schema.core.processing import ProcessStage now = datetime.datetime.now() diff --git a/examples/mri_acquisition.py b/examples/mri_acquisition.py index 16ff7c196..5eb5651a5 100644 --- a/examples/mri_acquisition.py +++ b/examples/mri_acquisition.py @@ -9,10 +9,10 @@ from biodata_models.modalities import Modality from biodata_models.units import MagneticFieldUnit, SizeUnit, TimeUnit -from aind_data_schema.components.configs import MRAcquisitionType, MRIScan, PulseSequenceType, SubjectPosition -from aind_data_schema.components.coordinates import Affine, Axis, CoordinateSystem, Scale, Translation -from aind_data_schema.components.devices import Scanner -from aind_data_schema.core.acquisition import ( +from biodata_schema.components.configs import MRAcquisitionType, MRIScan, PulseSequenceType, SubjectPosition +from biodata_schema.components.coordinates import Affine, Axis, CoordinateSystem, Scale, Translation +from biodata_schema.components.devices import Scanner +from biodata_schema.core.acquisition import ( Acquisition, AcquisitionSubjectDetails, DataStream, diff --git a/examples/multiplane_ophys_acquisition.py b/examples/multiplane_ophys_acquisition.py index ac63ecbac..19b28d1da 100644 --- a/examples/multiplane_ophys_acquisition.py +++ b/examples/multiplane_ophys_acquisition.py @@ -10,7 +10,7 @@ from biodata_models.stimulus_modality import StimulusModality from biodata_models.units import FrequencyUnit, PowerUnit, SizeUnit, VolumeUnit -from aind_data_schema.components.configs import ( +from biodata_schema.components.configs import ( Channel, CoupledPlane, DetectorConfig, @@ -20,9 +20,9 @@ SamplingStrategy, TriggerType, ) -from aind_data_schema.components.coordinates import Axis, CoordinateSystem, Scale, Translation -from aind_data_schema.components.identifiers import Code, Software -from aind_data_schema.core.acquisition import ( +from biodata_schema.components.coordinates import Axis, CoordinateSystem, Scale, Translation +from biodata_schema.components.identifiers import Code, Software +from biodata_schema.core.acquisition import ( Acquisition, AcquisitionSubjectDetails, DataStream, diff --git a/examples/multiplane_ophys_instrument.py b/examples/multiplane_ophys_instrument.py index fcbf4c529..9725b9703 100644 --- a/examples/multiplane_ophys_instrument.py +++ b/examples/multiplane_ophys_instrument.py @@ -9,9 +9,9 @@ from biodata_models.organizations import Organization from biodata_models.units import FrequencyUnit, SizeUnit -from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import Affine, Axis, CoordinateSystem, Translation -from aind_data_schema.components.devices import ( +from biodata_schema.components.connections import Connection +from biodata_schema.components.coordinates import Affine, Axis, CoordinateSystem, Translation +from biodata_schema.components.devices import ( BinMode, Camera, CameraAssembly, @@ -30,8 +30,8 @@ Objective, PockelsCell, ) -from aind_data_schema.components.identifiers import Software -from aind_data_schema.core.instrument import Instrument +from biodata_schema.components.identifiers import Software +from biodata_schema.core.instrument import Instrument BREGMA_ARI = CoordinateSystem( name="BREGMA_ARI", diff --git a/examples/ophys_acquisition.py b/examples/ophys_acquisition.py index 9ad7acd62..1976f1a8b 100644 --- a/examples/ophys_acquisition.py +++ b/examples/ophys_acquisition.py @@ -6,9 +6,9 @@ from biodata_models.modalities import Modality -from aind_data_schema.components.configs import Channel, DetectorConfig, LaserConfig, PatchCordConfig -from aind_data_schema.components.connections import Connection -from aind_data_schema.core.acquisition import ( +from biodata_schema.components.configs import Channel, DetectorConfig, LaserConfig, PatchCordConfig +from biodata_schema.components.connections import Connection +from biodata_schema.core.acquisition import ( Acquisition, AcquisitionSubjectDetails, DataStream, diff --git a/examples/ophys_procedures.py b/examples/ophys_procedures.py index 094371b97..54ac25766 100644 --- a/examples/ophys_procedures.py +++ b/examples/ophys_procedures.py @@ -12,19 +12,19 @@ from biodata_models.species import Species from biodata_models.units import SizeUnit, VolumeUnit -from aind_data_schema.components.configs import ProbeConfig -from aind_data_schema.components.coordinates import Axis, CoordinateSystem, Translation -from aind_data_schema.components.devices import FiberProbe -from aind_data_schema.components.injection_procedures import InjectionDynamics, InjectionProfile, ViralMaterial -from aind_data_schema.components.reagent import FluorescentStain, Fluorophore, ProbeReagent, ProteinProbe -from aind_data_schema.components.surgery_procedures import ( +from biodata_schema.components.configs import ProbeConfig +from biodata_schema.components.coordinates import Axis, CoordinateSystem, Translation +from biodata_schema.components.devices import FiberProbe +from biodata_schema.components.injection_procedures import InjectionDynamics, InjectionProfile, ViralMaterial +from biodata_schema.components.reagent import FluorescentStain, Fluorophore, ProbeReagent, ProteinProbe +from biodata_schema.components.surgery_procedures import ( Anaesthetic, BrainInjection, Headframe, Perfusion, ProbeImplant, ) -from aind_data_schema.core.procedures import ( +from biodata_schema.core.procedures import ( Procedures, SpecimenProcedure, Surgery, diff --git a/examples/procedures.py b/examples/procedures.py index 9cc55e566..a7488fc99 100644 --- a/examples/procedures.py +++ b/examples/procedures.py @@ -7,16 +7,16 @@ from biodata_models.coordinates import AxisName, Direction, Origin from biodata_models.units import SizeUnit, VolumeUnit -from aind_data_schema.components.configs import ProbeConfig -from aind_data_schema.components.coordinates import Axis, CoordinateSystem, Rotation, Translation -from aind_data_schema.components.devices import EphysProbe -from aind_data_schema.components.injection_procedures import ( +from biodata_schema.components.configs import ProbeConfig +from biodata_schema.components.coordinates import Axis, CoordinateSystem, Rotation, Translation +from biodata_schema.components.devices import EphysProbe +from biodata_schema.components.injection_procedures import ( InjectionDynamics, InjectionProfile, TarsVirusIdentifiers, ViralMaterial, ) -from aind_data_schema.components.surgery_procedures import ( +from biodata_schema.components.surgery_procedures import ( Anaesthetic, BrainInjection, Craniotomy, @@ -24,7 +24,7 @@ Perfusion, ProbeImplant, ) -from aind_data_schema.core.procedures import ( +from biodata_schema.core.procedures import ( Procedures, Surgery, ) diff --git a/examples/processing.py b/examples/processing.py index 23263827b..b480f9c28 100644 --- a/examples/processing.py +++ b/examples/processing.py @@ -6,8 +6,8 @@ from biodata_models.system_architecture import CPUArchitecture, OperatingSystem from biodata_models.units import MemoryUnit -from aind_data_schema.components.identifiers import Code, DataAsset -from aind_data_schema.core.processing import ( +from biodata_schema.components.identifiers import Code, DataAsset +from biodata_schema.core.processing import ( DataProcess, Processing, ProcessName, diff --git a/examples/quality_control.py b/examples/quality_control.py index e7d18c235..65e0bd435 100644 --- a/examples/quality_control.py +++ b/examples/quality_control.py @@ -5,7 +5,7 @@ from biodata_models.modalities import Modality -from aind_data_schema.core.quality_control import QCMetric, QCStatus, QualityControl, Stage, Status +from biodata_schema.core.quality_control import QCMetric, QCStatus, QualityControl, Stage, Status t = datetime(2022, 11, 22, 0, 0, 0, tzinfo=timezone.utc) diff --git a/examples/slap2_acquisition.py b/examples/slap2_acquisition.py index 90b3e743d..e5ff656e2 100644 --- a/examples/slap2_acquisition.py +++ b/examples/slap2_acquisition.py @@ -10,7 +10,7 @@ from biodata_models.stimulus_modality import StimulusModality from biodata_models.units import FrequencyUnit, PowerUnit, SizeUnit, TimeUnit -from aind_data_schema.components.configs import ( +from biodata_schema.components.configs import ( Channel, DetectorConfig, DeviceConfig, @@ -21,15 +21,15 @@ Slap2Plane, TriggerType, ) -from aind_data_schema.components.coordinates import ( +from biodata_schema.components.coordinates import ( Axis, CoordinateSystem, Origin, Scale, Translation, ) -from aind_data_schema.components.identifiers import Code -from aind_data_schema.core.acquisition import ( +from biodata_schema.components.identifiers import Code +from biodata_schema.core.acquisition import ( Acquisition, DataStream, StimulusEpoch, diff --git a/examples/slap2_instrument.py b/examples/slap2_instrument.py index a10ccc73b..ee56d2808 100644 --- a/examples/slap2_instrument.py +++ b/examples/slap2_instrument.py @@ -10,9 +10,9 @@ from biodata_models.organizations import Organization from biodata_models.units import SizeUnit, SpeedUnit -from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import Axis, CoordinateSystem -from aind_data_schema.components.devices import ( +from biodata_schema.components.connections import Connection +from biodata_schema.components.coordinates import Axis, CoordinateSystem +from biodata_schema.components.devices import ( Camera, CameraAssembly, Computer, @@ -35,7 +35,7 @@ PockelsCell, PolygonalScanner, ) -from aind_data_schema.core.instrument import Instrument +from biodata_schema.core.instrument import Instrument BREGMA_ARI = CoordinateSystem( name="BREGMA_ARI", diff --git a/examples/slap2_structure_acquisition.py b/examples/slap2_structure_acquisition.py index bf09f63ab..880da92b7 100644 --- a/examples/slap2_structure_acquisition.py +++ b/examples/slap2_structure_acquisition.py @@ -9,7 +9,7 @@ from biodata_models.slap2_acquisition_type import Slap2AcquisitionType from biodata_models.units import FrequencyUnit, PowerUnit, SizeUnit -from aind_data_schema.components.configs import ( +from biodata_schema.components.configs import ( Channel, DetectorConfig, DeviceConfig, @@ -21,14 +21,14 @@ Slap2Plane, TriggerType, ) -from aind_data_schema.components.coordinates import ( +from biodata_schema.components.coordinates import ( Axis, CoordinateSystem, Origin, Scale, Translation, ) -from aind_data_schema.core.acquisition import ( +from biodata_schema.core.acquisition import ( Acquisition, DataStream, ) diff --git a/examples/subject.py b/examples/subject.py index 9d247b993..47ca5b88a 100644 --- a/examples/subject.py +++ b/examples/subject.py @@ -6,8 +6,8 @@ from biodata_models.organizations import Organization from biodata_models.species import Species, Strain -from aind_data_schema.components.subjects import BreedingInfo, Housing, MouseSubject, Sex -from aind_data_schema.core.subject import Subject +from biodata_schema.components.subjects import BreedingInfo, Housing, MouseSubject, Sex +from biodata_schema.core.subject import Subject # If a timezone isn't specified, the timezone of the computer running this # script will be used as default diff --git a/examples/thermistor_procedures.py b/examples/thermistor_procedures.py index 47f923260..f15583d0f 100644 --- a/examples/thermistor_procedures.py +++ b/examples/thermistor_procedures.py @@ -7,10 +7,10 @@ from biodata_models.organizations import Organization from biodata_models.units import SizeUnit -from aind_data_schema.components.coordinates import Axis, CoordinateSystem, Translation -from aind_data_schema.components.devices import Device -from aind_data_schema.components.surgery_procedures import Anaesthetic, DeviceImplant -from aind_data_schema.core.procedures import Procedures, Surgery +from biodata_schema.components.coordinates import Axis, CoordinateSystem, Translation +from biodata_schema.components.devices import Device +from biodata_schema.components.surgery_procedures import Anaesthetic, DeviceImplant +from biodata_schema.core.procedures import Procedures, Surgery thermistor_wire = Device( name="Thermistor wire", manufacturer=Organization.TE_CONNECTIVITY, model="GAG22K7MCD419", notes="" diff --git a/pyproject.toml b/pyproject.toml index 6aedfb7e6..fa2bbadec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,17 +45,17 @@ docs = [ where = ["src"] [tool.setuptools.dynamic] -version = {attr = "aind_data_schema.__version__"} +version = {attr = "biodata_schema.__version__"} readme = {file = ["README.md"]} [tool.coverage.run] omit = [ "*__init__*", - "*/aind_data_schema/visualizations/*", + "*/biodata_schema/visualizations/*", "*/tests/test_diagram_builder.py", - "*/aind_data_schema/utils/schema_tree.py" + "*/biodata_schema/utils/schema_tree.py" ] -source = ["aind_data_schema", "tests"] +source = ["biodata_schema", "tests"] [tool.coverage.report] exclude_lines = ["if __name__ == .__main__.:", "pragma: no cover"] diff --git a/schemas/acquisition_schema.json b/schemas/acquisition_schema.json index 215055a75..82fa57518 100644 --- a/schemas/acquisition_schema.json +++ b/schemas/acquisition_schema.json @@ -12553,8 +12553,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/acquisition.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/acquisition.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/acquisition.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/acquisition.py", "title": "Describedby", "type": "string" }, diff --git a/schemas/data_description_schema.json b/schemas/data_description_schema.json index b1818c3c0..0d28704ca 100644 --- a/schemas/data_description_schema.json +++ b/schemas/data_description_schema.json @@ -6418,8 +6418,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/data_description.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/data_description.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/data_description.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/data_description.py", "title": "Describedby", "type": "string" }, diff --git a/schemas/instrument_schema.json b/schemas/instrument_schema.json index 919f6e545..deb8ac268 100644 --- a/schemas/instrument_schema.json +++ b/schemas/instrument_schema.json @@ -32786,8 +32786,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/instrument.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/instrument.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/instrument.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/instrument.py", "title": "Describedby", "type": "string" }, diff --git a/schemas/metadata_schema.json b/schemas/metadata_schema.json index b38b904cc..2e5d5cadd 100644 --- a/schemas/metadata_schema.json +++ b/schemas/metadata_schema.json @@ -11,8 +11,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/acquisition.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/acquisition.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/acquisition.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/acquisition.py", "title": "Describedby", "type": "string" }, @@ -8289,8 +8289,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/data_description.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/data_description.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/data_description.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/data_description.py", "title": "Describedby", "type": "string" }, @@ -20912,8 +20912,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/instrument.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/instrument.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/instrument.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/instrument.py", "title": "Describedby", "type": "string" }, @@ -26670,8 +26670,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/model.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/model.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/model.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/model.py", "title": "Describedby", "type": "string" }, @@ -37245,8 +37245,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/procedures.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/procedures.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/procedures.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/procedures.py", "title": "Describedby", "type": "string" }, @@ -37415,8 +37415,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/processing.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/processing.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/processing.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/processing.py", "title": "Describedby", "type": "string" }, @@ -37845,8 +37845,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/quality_control.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/quality_control.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/quality_control.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/quality_control.py", "title": "Describedby", "type": "string" }, @@ -41705,8 +41705,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/subject.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/subject.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/subject.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/subject.py", "title": "Describedby", "type": "string" }, @@ -51568,8 +51568,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/metadata.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/metadata.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/metadata.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/metadata.py", "title": "Describedby", "type": "string" }, diff --git a/schemas/model_schema.json b/schemas/model_schema.json index de2070140..1b9f33868 100644 --- a/schemas/model_schema.json +++ b/schemas/model_schema.json @@ -1005,8 +1005,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/model.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/model.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/model.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/model.py", "title": "Describedby", "type": "string" }, diff --git a/schemas/procedures_schema.json b/schemas/procedures_schema.json index d460536f1..e71579142 100644 --- a/schemas/procedures_schema.json +++ b/schemas/procedures_schema.json @@ -16726,8 +16726,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/procedures.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/procedures.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/procedures.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/procedures.py", "title": "Describedby", "type": "string" }, diff --git a/schemas/processing_schema.json b/schemas/processing_schema.json index 938288ea0..bdbb4da41 100644 --- a/schemas/processing_schema.json +++ b/schemas/processing_schema.json @@ -769,8 +769,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/processing.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/processing.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/processing.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/processing.py", "title": "Describedby", "type": "string" }, diff --git a/schemas/quality_control_schema.json b/schemas/quality_control_schema.json index 33067abde..671a9bf33 100644 --- a/schemas/quality_control_schema.json +++ b/schemas/quality_control_schema.json @@ -893,8 +893,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/quality_control.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/quality_control.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/quality_control.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/quality_control.py", "title": "Describedby", "type": "string" }, diff --git a/schemas/subject_schema.json b/schemas/subject_schema.json index f7457c1ec..e7e492307 100644 --- a/schemas/subject_schema.json +++ b/schemas/subject_schema.json @@ -8636,8 +8636,8 @@ "type": "string" }, "describedBy": { - "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/subject.py", - "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/aind_data_schema/core/subject.py", + "const": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/subject.py", + "default": "https://raw.githubusercontent.com/AllenNeuralDynamics/biodata-schema/main/src/biodata_schema/core/subject.py", "title": "Describedby", "type": "string" }, diff --git a/src/aind_data_schema/__init__.py b/src/biodata_schema/__init__.py similarity index 100% rename from src/aind_data_schema/__init__.py rename to src/biodata_schema/__init__.py diff --git a/src/aind_data_schema/base.py b/src/biodata_schema/base.py similarity index 99% rename from src/aind_data_schema/base.py rename to src/biodata_schema/base.py index 278955b96..7eefbaeaf 100644 --- a/src/aind_data_schema/base.py +++ b/src/biodata_schema/base.py @@ -23,7 +23,7 @@ ) from pydantic.functional_validators import WrapValidator -from aind_data_schema.utils.validators import recursive_check_paths, recursive_coord_system_check +from biodata_schema.utils.validators import recursive_check_paths, recursive_coord_system_check logger = logging.getLogger(__name__) diff --git a/src/aind_data_schema/components/__init__.py b/src/biodata_schema/components/__init__.py similarity index 100% rename from src/aind_data_schema/components/__init__.py rename to src/biodata_schema/components/__init__.py diff --git a/src/aind_data_schema/components/configs.py b/src/biodata_schema/components/configs.py similarity index 98% rename from src/aind_data_schema/components/configs.py rename to src/biodata_schema/components/configs.py index 27fe074e0..ef8b18c23 100644 --- a/src/aind_data_schema/components/configs.py +++ b/src/biodata_schema/components/configs.py @@ -23,24 +23,24 @@ from pydantic import Field, field_validator, model_validator from pydantic_core.core_schema import ValidationInfo -from aind_data_schema.base import ( +from biodata_schema.base import ( AwareDatetimeWithDefault, DataModel, Discriminated, DiscriminatedList, GenericModel, ) -from aind_data_schema.components.coordinates import ( +from biodata_schema.components.coordinates import ( TRANSFORM_TYPES, AtlasCoordinate, CoordinateSystem, Scale, Translation, ) -from aind_data_schema.components.devices import DevicePosition -from aind_data_schema.components.geometry import Rectangle -from aind_data_schema.components.identifiers import Code -from aind_data_schema.components.wrappers import AssetPath +from biodata_schema.components.devices import DevicePosition +from biodata_schema.components.geometry import Rectangle +from biodata_schema.components.identifiers import Code +from biodata_schema.components.wrappers import AssetPath class PowerFunction(str, Enum): diff --git a/src/aind_data_schema/components/connections.py b/src/biodata_schema/components/connections.py similarity index 94% rename from src/aind_data_schema/components/connections.py rename to src/biodata_schema/components/connections.py index a9f171e45..579b41567 100644 --- a/src/aind_data_schema/components/connections.py +++ b/src/biodata_schema/components/connections.py @@ -4,7 +4,7 @@ from pydantic import Field -from aind_data_schema.base import DataModel +from biodata_schema.base import DataModel class Connection(DataModel): diff --git a/src/aind_data_schema/components/coordinates.py b/src/biodata_schema/components/coordinates.py similarity index 98% rename from src/aind_data_schema/components/coordinates.py rename to src/biodata_schema/components/coordinates.py index 1cdf440d9..d4b2757dc 100644 --- a/src/aind_data_schema/components/coordinates.py +++ b/src/biodata_schema/components/coordinates.py @@ -9,8 +9,8 @@ from biodata_models.units import AngleUnit, SizeUnit from pydantic import Field, field_validator -from aind_data_schema.base import DataModel, DiscriminatedList -from aind_data_schema.components.wrappers import AssetPath +from biodata_schema.base import DataModel, DiscriminatedList +from biodata_schema.components.wrappers import AssetPath class ReferenceCoordinateSystem(str, Enum): diff --git a/src/aind_data_schema/components/devices.py b/src/biodata_schema/components/devices.py similarity index 98% rename from src/aind_data_schema/components/devices.py rename to src/biodata_schema/components/devices.py index 071cf3b34..4898ab667 100644 --- a/src/aind_data_schema/components/devices.py +++ b/src/biodata_schema/components/devices.py @@ -41,10 +41,10 @@ ) from pydantic import Field, ValidationInfo, field_validator, model_validator -from aind_data_schema.base import DataModel, Discriminated, GenericModel -from aind_data_schema.components.coordinates import TRANSFORM_TYPES, AxisName, CoordinateSystem -from aind_data_schema.components.geometry import Circle, Rectangle -from aind_data_schema.components.identifiers import Software +from biodata_schema.base import DataModel, Discriminated, GenericModel +from biodata_schema.components.coordinates import TRANSFORM_TYPES, AxisName, CoordinateSystem +from biodata_schema.components.geometry import Circle, Rectangle +from biodata_schema.components.identifiers import Software logger = logging.getLogger(__name__) diff --git a/src/aind_data_schema/components/geometry.py b/src/biodata_schema/components/geometry.py similarity index 91% rename from src/aind_data_schema/components/geometry.py rename to src/biodata_schema/components/geometry.py index b929bcc4b..1d016cb3e 100644 --- a/src/aind_data_schema/components/geometry.py +++ b/src/biodata_schema/components/geometry.py @@ -3,7 +3,7 @@ from biodata_models.units import SizeUnit from pydantic import Field -from aind_data_schema.base import DataModel +from biodata_schema.base import DataModel class Rectangle(DataModel): diff --git a/src/aind_data_schema/components/identifiers.py b/src/biodata_schema/components/identifiers.py similarity index 98% rename from src/aind_data_schema/components/identifiers.py rename to src/biodata_schema/components/identifiers.py index e69a91d5c..fb1bec980 100644 --- a/src/aind_data_schema/components/identifiers.py +++ b/src/biodata_schema/components/identifiers.py @@ -8,7 +8,7 @@ from biodata_models.registries import Registry from pydantic import BaseModel, Field, StringConstraints, model_validator -from aind_data_schema.base import DataModel, DiscriminatedList, GenericModel +from biodata_schema.base import DataModel, DiscriminatedList, GenericModel class Database(str, Enum): diff --git a/src/aind_data_schema/components/injection_procedures.py b/src/biodata_schema/components/injection_procedures.py similarity index 95% rename from src/aind_data_schema/components/injection_procedures.py rename to src/biodata_schema/components/injection_procedures.py index 56ca6dd08..083e14b09 100644 --- a/src/aind_data_schema/components/injection_procedures.py +++ b/src/biodata_schema/components/injection_procedures.py @@ -10,9 +10,9 @@ from biodata_models.units import CurrentUnit, TimeUnit, VolumeUnit from pydantic import Field, model_validator -from aind_data_schema.base import DataModel, DiscriminatedList -from aind_data_schema.components.identifiers import ProtocolMixin -from aind_data_schema.components.reagent import Reagent +from biodata_schema.base import DataModel, DiscriminatedList +from biodata_schema.components.identifiers import ProtocolMixin +from biodata_schema.components.reagent import Reagent class VirusPrepType(str, Enum): diff --git a/src/aind_data_schema/components/measurements.py b/src/biodata_schema/components/measurements.py similarity index 93% rename from src/aind_data_schema/components/measurements.py rename to src/biodata_schema/components/measurements.py index 9e6edb3a7..804d7bda1 100644 --- a/src/aind_data_schema/components/measurements.py +++ b/src/biodata_schema/components/measurements.py @@ -6,11 +6,11 @@ from biodata_models.units import UNITS, PowerUnit, TimeUnit, VoltageUnit, VolumeUnit from pydantic import model_validator -from aind_data_schema.base import AwareDatetimeWithDefault, DataModel, Discriminated, Field, GenericModel -from aind_data_schema.components.configs import DeviceConfig -from aind_data_schema.components.identifiers import ProtocolMixin -from aind_data_schema.components.reagent import Reagent -from aind_data_schema.utils.validators import TimeValidation +from biodata_schema.base import AwareDatetimeWithDefault, DataModel, Discriminated, Field, GenericModel +from biodata_schema.components.configs import DeviceConfig +from biodata_schema.components.identifiers import ProtocolMixin +from biodata_schema.components.reagent import Reagent +from biodata_schema.utils.validators import TimeValidation class FitType(Enum): diff --git a/src/aind_data_schema/components/reagent.py b/src/biodata_schema/components/reagent.py similarity index 98% rename from src/aind_data_schema/components/reagent.py rename to src/biodata_schema/components/reagent.py index 44e847da4..c08c57740 100644 --- a/src/aind_data_schema/components/reagent.py +++ b/src/biodata_schema/components/reagent.py @@ -10,7 +10,7 @@ from biodata_models.units import MassUnit, SizeUnit from pydantic import Field -from aind_data_schema.base import DataModel, Discriminated +from biodata_schema.base import DataModel, Discriminated class Fluorophore(DataModel): diff --git a/src/aind_data_schema/components/specimen_procedures.py b/src/biodata_schema/components/specimen_procedures.py similarity index 96% rename from src/aind_data_schema/components/specimen_procedures.py rename to src/biodata_schema/components/specimen_procedures.py index 9280ad516..e9159c541 100644 --- a/src/aind_data_schema/components/specimen_procedures.py +++ b/src/biodata_schema/components/specimen_procedures.py @@ -10,14 +10,14 @@ from biodata_models.units import SizeUnit from pydantic import Field, model_validator -from aind_data_schema.base import ( +from biodata_schema.base import ( AwareDatetimeWithDefault, DataModel, DiscriminatedList, ) -from aind_data_schema.components.coordinates import Atlas, CoordinateSystem, Translation -from aind_data_schema.components.identifiers import ProtocolListMixin -from aind_data_schema.components.reagent import ( +from biodata_schema.components.coordinates import Atlas, CoordinateSystem, Translation +from biodata_schema.components.identifiers import ProtocolListMixin +from biodata_schema.components.reagent import ( FluorescentReagent, FluorescentStain, GeneProbeSet, @@ -25,7 +25,7 @@ Reagent, Solution, ) -from aind_data_schema.utils.exceptions import OneOfError +from biodata_schema.utils.exceptions import OneOfError class SectionOrientation(str, Enum): diff --git a/src/aind_data_schema/components/stimulus.py b/src/biodata_schema/components/stimulus.py similarity index 98% rename from src/aind_data_schema/components/stimulus.py rename to src/biodata_schema/components/stimulus.py index c16bfe855..c651a9131 100644 --- a/src/aind_data_schema/components/stimulus.py +++ b/src/biodata_schema/components/stimulus.py @@ -7,7 +7,7 @@ from biodata_models.units import FrequencyUnit, PowerUnit, TimeUnit from pydantic import Field, model_validator -from aind_data_schema.base import DataModel, GenericModel +from biodata_schema.base import DataModel, GenericModel class PulseShape(str, Enum): diff --git a/src/aind_data_schema/components/subject_procedures.py b/src/biodata_schema/components/subject_procedures.py similarity index 94% rename from src/aind_data_schema/components/subject_procedures.py rename to src/biodata_schema/components/subject_procedures.py index 30eba62af..4d4db4197 100644 --- a/src/aind_data_schema/components/subject_procedures.py +++ b/src/biodata_schema/components/subject_procedures.py @@ -7,11 +7,11 @@ from biodata_models.units import MassUnit, UnitlessUnit, VolumeUnit from pydantic import Field -from aind_data_schema.base import DataModel, DiscriminatedList -from aind_data_schema.components.coordinates import CoordinateSystem, Translation -from aind_data_schema.components.identifiers import Code, ProtocolMixin -from aind_data_schema.components.injection_procedures import Injection -from aind_data_schema.components.surgery_procedures import ( +from biodata_schema.base import DataModel, DiscriminatedList +from biodata_schema.components.coordinates import CoordinateSystem, Translation +from biodata_schema.components.identifiers import Code, ProtocolMixin +from biodata_schema.components.injection_procedures import Injection +from biodata_schema.components.surgery_procedures import ( Anaesthetic, BrainInjection, CatheterImplant, diff --git a/src/aind_data_schema/components/subjects.py b/src/biodata_schema/components/subjects.py similarity index 97% rename from src/aind_data_schema/components/subjects.py rename to src/biodata_schema/components/subjects.py index 2565bd9d3..82002a828 100644 --- a/src/aind_data_schema/components/subjects.py +++ b/src/biodata_schema/components/subjects.py @@ -11,9 +11,9 @@ from pydantic import Field, field_validator, model_validator from pydantic_core.core_schema import ValidationInfo -from aind_data_schema.base import DataModel -from aind_data_schema.components.devices import Device -from aind_data_schema.utils.validators import TimeValidation +from biodata_schema.base import DataModel +from biodata_schema.components.devices import Device +from biodata_schema.utils.validators import TimeValidation class Sex(str, Enum): diff --git a/src/aind_data_schema/components/surgery_procedures.py b/src/biodata_schema/components/surgery_procedures.py similarity index 95% rename from src/aind_data_schema/components/surgery_procedures.py rename to src/biodata_schema/components/surgery_procedures.py index 818a4da11..36d9fb0a0 100644 --- a/src/aind_data_schema/components/surgery_procedures.py +++ b/src/biodata_schema/components/surgery_procedures.py @@ -10,10 +10,10 @@ from biodata_models.units import SizeUnit, TimeUnit, VolumeUnit from pydantic import Field, field_validator, model_validator -from aind_data_schema.base import AwareDatetimeWithDefault, DataModel -from aind_data_schema.components.configs import CatheterConfig, ProbeConfig -from aind_data_schema.components.coordinates import TRANSFORM_TYPES, Translation -from aind_data_schema.components.devices import ( +from biodata_schema.base import AwareDatetimeWithDefault, DataModel +from biodata_schema.components.configs import CatheterConfig, ProbeConfig +from biodata_schema.components.coordinates import TRANSFORM_TYPES, Translation +from biodata_schema.components.devices import ( Catheter, Device, DevicePosition, @@ -21,8 +21,8 @@ FiberProbe, MyomatrixArray, ) -from aind_data_schema.components.identifiers import ProtocolMixin -from aind_data_schema.components.injection_procedures import Injection +from biodata_schema.components.identifiers import ProtocolMixin +from biodata_schema.components.injection_procedures import Injection class ProtectiveMaterial(str, Enum): diff --git a/src/aind_data_schema/components/wrappers.py b/src/biodata_schema/components/wrappers.py similarity index 100% rename from src/aind_data_schema/components/wrappers.py rename to src/biodata_schema/components/wrappers.py diff --git a/src/aind_data_schema/core/__init__.py b/src/biodata_schema/core/__init__.py similarity index 100% rename from src/aind_data_schema/core/__init__.py rename to src/biodata_schema/core/__init__.py diff --git a/src/aind_data_schema/core/acquisition.py b/src/biodata_schema/core/acquisition.py similarity index 97% rename from src/aind_data_schema/core/acquisition.py rename to src/biodata_schema/core/acquisition.py index 61f53291d..6d4e8cffe 100644 --- a/src/aind_data_schema/core/acquisition.py +++ b/src/biodata_schema/core/acquisition.py @@ -13,14 +13,14 @@ from pydantic import Field, SkipValidation, field_validator, model_validator from pydantic_extra_types.timezone_name import TimeZoneName -from aind_data_schema.base import ( +from biodata_schema.base import ( AwareDatetimeWithDefault, DataCoreModel, DataModel, DiscriminatedList, GenericModel, ) -from aind_data_schema.components.configs import ( +from biodata_schema.components.configs import ( AirPuffConfig, CatheterConfig, DetectorConfig, @@ -41,21 +41,21 @@ SampleChamberConfig, SpeakerConfig, ) -from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import CoordinateSystem -from aind_data_schema.components.identifiers import Code, ProtocolListMixin -from aind_data_schema.components.measurements import CALIBRATIONS, Maintenance -from aind_data_schema.components.reagent import Reagent -from aind_data_schema.components.subject_procedures import BrainInjection, Injection -from aind_data_schema.components.surgery_procedures import Anaesthetic -from aind_data_schema.utils.merge import ( +from biodata_schema.components.connections import Connection +from biodata_schema.components.coordinates import CoordinateSystem +from biodata_schema.components.identifiers import Code, ProtocolListMixin +from biodata_schema.components.measurements import CALIBRATIONS, Maintenance +from biodata_schema.components.reagent import Reagent +from biodata_schema.components.subject_procedures import BrainInjection, Injection +from biodata_schema.components.surgery_procedures import Anaesthetic +from biodata_schema.utils.merge import ( merge_coordinate_systems, merge_notes, merge_optional_list, merge_str_alphabetical, remove_duplicates, ) -from aind_data_schema.utils.validators import ( +from biodata_schema.utils.validators import ( TimeValidation, extract_timezone_from_datetime, subject_specimen_id_compatibility, @@ -376,7 +376,7 @@ class Acquisition(ProtocolListMixin, DataCoreModel): while the StimulusEpoch represents all stimuli being presented.""" # Meta metadata - _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/acquisition.py" + _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/acquisition.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") diff --git a/src/aind_data_schema/core/data_description.py b/src/biodata_schema/core/data_description.py similarity index 97% rename from src/aind_data_schema/core/data_description.py rename to src/biodata_schema/core/data_description.py index a9dcc3756..fbe1e1e8e 100644 --- a/src/aind_data_schema/core/data_description.py +++ b/src/biodata_schema/core/data_description.py @@ -15,8 +15,8 @@ from biodata_models.organizations import Organization from pydantic import Field, SkipValidation, model_validator -from aind_data_schema.base import AwareDatetimeWithDefault, DataCoreModel, DataModel -from aind_data_schema.components.identifiers import Person +from biodata_schema.base import AwareDatetimeWithDefault, DataCoreModel, DataModel +from biodata_schema.components.identifiers import Person class Funding(DataModel): @@ -32,7 +32,7 @@ class Funding(DataModel): class DataDescription(DataCoreModel): """Description of a logical collection of data files""" - _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/data_description.py" + _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/data_description.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") license: License = Field(default=License.CC_BY_40, title="License") diff --git a/src/aind_data_schema/core/instrument.py b/src/biodata_schema/core/instrument.py similarity index 95% rename from src/aind_data_schema/core/instrument.py rename to src/biodata_schema/core/instrument.py index e45ac8a99..047591514 100644 --- a/src/aind_data_schema/core/instrument.py +++ b/src/biodata_schema/core/instrument.py @@ -7,10 +7,10 @@ from biodata_models.modalities import Modality from pydantic import Field, SkipValidation, field_validator, model_validator -from aind_data_schema.base import DataCoreModel, DiscriminatedList -from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import CoordinateSystem -from aind_data_schema.components.devices import ( +from biodata_schema.base import DataCoreModel, DiscriminatedList +from biodata_schema.components.connections import Connection +from biodata_schema.components.coordinates import CoordinateSystem +from biodata_schema.components.devices import ( AdditionalImagingDevice, AirPuffDevice, Arena, @@ -53,10 +53,10 @@ Tube, Wheel, ) -from aind_data_schema.components.identifiers import Software -from aind_data_schema.components.measurements import CALIBRATIONS -from aind_data_schema.utils.merge import merge_notes, merge_optional_list, merge_str_alphabetical -from aind_data_schema.utils.validators import recursive_get_all_names, recursive_get_named_objects +from biodata_schema.components.identifiers import Software +from biodata_schema.components.measurements import CALIBRATIONS +from biodata_schema.utils.merge import merge_notes, merge_optional_list, merge_str_alphabetical +from biodata_schema.utils.validators import recursive_get_all_names, recursive_get_named_objects logger = logging.getLogger(__name__) @@ -76,7 +76,7 @@ class Instrument(DataCoreModel): """Description of an instrument""" # metametadata - _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/instrument.py" + _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/instrument.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") diff --git a/src/aind_data_schema/core/metadata.py b/src/biodata_schema/core/metadata.py similarity index 95% rename from src/aind_data_schema/core/metadata.py rename to src/biodata_schema/core/metadata.py index dcd586c9f..874acf470 100644 --- a/src/aind_data_schema/core/metadata.py +++ b/src/biodata_schema/core/metadata.py @@ -19,20 +19,20 @@ model_validator, ) -from aind_data_schema.base import DataCoreModel -from aind_data_schema.components.identifiers import DatabaseIdentifiers -from aind_data_schema.components.subject_procedures import TrainingProtocol -from aind_data_schema.components.subjects import CalibrationObject -from aind_data_schema.core.acquisition import Acquisition, DataStream, ExternalDataStream -from aind_data_schema.core.data_description import DataDescription -from aind_data_schema.core.instrument import Instrument -from aind_data_schema.core.model import Model -from aind_data_schema.core.procedures import Injection, Procedures, Surgery -from aind_data_schema.core.processing import Processing -from aind_data_schema.core.quality_control import QualityControl -from aind_data_schema.core.subject import Subject -from aind_data_schema.utils.compatibility_check import InstrumentAcquisitionCompatibility -from aind_data_schema.utils.validators import recursive_time_validation_check, validate_creation_time_after_midnight +from biodata_schema.base import DataCoreModel +from biodata_schema.components.identifiers import DatabaseIdentifiers +from biodata_schema.components.subject_procedures import TrainingProtocol +from biodata_schema.components.subjects import CalibrationObject +from biodata_schema.core.acquisition import Acquisition, DataStream, ExternalDataStream +from biodata_schema.core.data_description import DataDescription +from biodata_schema.core.instrument import Instrument +from biodata_schema.core.model import Model +from biodata_schema.core.procedures import Injection, Procedures, Surgery +from biodata_schema.core.processing import Processing +from biodata_schema.core.quality_control import QualityControl +from biodata_schema.core.subject import Subject +from biodata_schema.utils.compatibility_check import InstrumentAcquisitionCompatibility +from biodata_schema.utils.validators import recursive_time_validation_check, validate_creation_time_after_midnight logger = logging.getLogger(__name__) @@ -72,7 +72,7 @@ class Metadata(DataCoreModel): # default _FILE_EXTENSION = PrivateAttr(default=".nd.json") - _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/metadata.py" + _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/metadata.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") name: str = Field( @@ -455,7 +455,7 @@ def from_metadata( Metadata A new Metadata object for the derived asset. """ - from aind_data_schema.utils.inheritance import ( + from biodata_schema.utils.inheritance import ( _accumulate_processing, _accumulate_quality_control, _inherit_instrument_and_acquisition, diff --git a/src/aind_data_schema/core/model.py b/src/biodata_schema/core/model.py similarity index 91% rename from src/aind_data_schema/core/model.py rename to src/biodata_schema/core/model.py index f661d3c16..3cbd6761c 100644 --- a/src/aind_data_schema/core/model.py +++ b/src/biodata_schema/core/model.py @@ -5,9 +5,9 @@ from biodata_models.system_architecture import ModelArchitecture from pydantic import Field -from aind_data_schema.base import DataCoreModel, DataModel, DiscriminatedList, GenericModel -from aind_data_schema.components.identifiers import Code, Software -from aind_data_schema.core.processing import DataProcess, ProcessName +from biodata_schema.base import DataCoreModel, DataModel, DiscriminatedList, GenericModel +from biodata_schema.components.identifiers import Code, Software +from biodata_schema.core.processing import DataProcess, ProcessName class PerformanceMetric(DataModel): @@ -48,7 +48,7 @@ class ModelPretraining(DataModel): class Model(DataCoreModel): """Description of a machine learning model including architecture, training, and evaluation details""" - _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/model.py" + _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/model.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) schema_version: Literal["3.0.0"] = Field(default="3.0.0") diff --git a/src/aind_data_schema/core/procedures.py b/src/biodata_schema/core/procedures.py similarity index 90% rename from src/aind_data_schema/core/procedures.py rename to src/biodata_schema/core/procedures.py index af493b28d..fe3df584f 100644 --- a/src/aind_data_schema/core/procedures.py +++ b/src/biodata_schema/core/procedures.py @@ -4,25 +4,25 @@ from pydantic import Field, SkipValidation, model_validator -from aind_data_schema.base import DataCoreModel, DiscriminatedList -from aind_data_schema.components.coordinates import CoordinateSystem -from aind_data_schema.components.injection_procedures import Injection -from aind_data_schema.components.specimen_procedures import SpecimenProcedure -from aind_data_schema.components.subject_procedures import ( +from biodata_schema.base import DataCoreModel, DiscriminatedList +from biodata_schema.components.coordinates import CoordinateSystem +from biodata_schema.components.injection_procedures import Injection +from biodata_schema.components.specimen_procedures import SpecimenProcedure +from biodata_schema.components.subject_procedures import ( GenericSubjectProcedure, NonSurgicalInjection, Surgery, TrainingProtocol, WaterRestriction, ) -from aind_data_schema.utils.merge import merge_coordinate_systems, merge_notes -from aind_data_schema.utils.validators import subject_specimen_id_compatibility +from biodata_schema.utils.merge import merge_coordinate_systems, merge_notes +from biodata_schema.utils.validators import subject_specimen_id_compatibility class Procedures(DataCoreModel): """Description of all procedures performed on a subject, including surgeries, injections, and tissue processing""" - _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/procedures.py" + _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/procedures.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") diff --git a/src/aind_data_schema/core/processing.py b/src/biodata_schema/core/processing.py similarity index 96% rename from src/aind_data_schema/core/processing.py rename to src/biodata_schema/core/processing.py index 45388583c..337a03dd4 100644 --- a/src/aind_data_schema/core/processing.py +++ b/src/biodata_schema/core/processing.py @@ -9,11 +9,11 @@ from biodata_models.units import MemoryUnit, UnitlessUnit from pydantic import Field, SkipValidation, model_validator -from aind_data_schema.base import AwareDatetimeWithDefault, DataCoreModel, DataModel, GenericModel -from aind_data_schema.components.identifiers import Code, DataAsset # noqa: F401 -from aind_data_schema.components.wrappers import AssetPath -from aind_data_schema.utils.merge import merge_notes, merge_optional_list, merge_process_graph -from aind_data_schema.utils.validators import TimeValidation +from biodata_schema.base import AwareDatetimeWithDefault, DataCoreModel, DataModel, GenericModel +from biodata_schema.components.identifiers import Code, DataAsset # noqa: F401 +from biodata_schema.components.wrappers import AssetPath +from biodata_schema.utils.merge import merge_notes, merge_optional_list, merge_process_graph +from biodata_schema.utils.validators import TimeValidation class ProcessStage(str, Enum): @@ -97,7 +97,7 @@ def fill_default_name(self) -> "DataProcess": class Processing(DataCoreModel): """Description of all processes run on data""" - _DESCRIBED_BY_URL: str = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/processing.py" + _DESCRIBED_BY_URL: str = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/processing.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") diff --git a/src/aind_data_schema/core/quality_control.py b/src/biodata_schema/core/quality_control.py similarity index 97% rename from src/aind_data_schema/core/quality_control.py rename to src/biodata_schema/core/quality_control.py index f2897eaa6..a661021b2 100644 --- a/src/aind_data_schema/core/quality_control.py +++ b/src/biodata_schema/core/quality_control.py @@ -7,8 +7,8 @@ from biodata_models.modalities import Modality from pydantic import Field, SkipValidation, model_validator -from aind_data_schema.base import AwareDatetimeWithDefault, DataCoreModel, DataModel, DiscriminatedList -from aind_data_schema.utils.merge import merge_notes, merge_optional_list, merge_str_tuple_lists, remove_duplicates +from biodata_schema.base import AwareDatetimeWithDefault, DataCoreModel, DataModel, DiscriminatedList +from biodata_schema.utils.merge import merge_notes, merge_optional_list, merge_str_tuple_lists, remove_duplicates class Status(str, Enum): @@ -103,7 +103,7 @@ class CurationMetric(QCMetric): class QualityControl(DataCoreModel): """Collection of quality control metrics evaluated on a data asset to determine pass/fail status""" - _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/quality_control.py" + _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/quality_control.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") metrics: DiscriminatedList[QCMetric | CurationMetric] = Field(..., title="Evaluations") diff --git a/src/aind_data_schema/core/subject.py b/src/biodata_schema/core/subject.py similarity index 78% rename from src/aind_data_schema/core/subject.py rename to src/biodata_schema/core/subject.py index ecc37e6fe..faf520a21 100644 --- a/src/aind_data_schema/core/subject.py +++ b/src/biodata_schema/core/subject.py @@ -4,14 +4,14 @@ from pydantic import Field, SkipValidation -from aind_data_schema.base import DataCoreModel, Discriminated -from aind_data_schema.components.subjects import CalibrationObject, HumanSubject, MouseSubject, NonHumanPrimateSubject +from biodata_schema.base import DataCoreModel, Discriminated +from biodata_schema.components.subjects import CalibrationObject, HumanSubject, MouseSubject, NonHumanPrimateSubject class Subject(DataCoreModel): """Description of a subject of data collection""" - _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "aind_data_schema/core/subject.py" + _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/subject.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) schema_version: SkipValidation[Literal["3.0.0"]] = Field(default="3.0.0") subject_id: str = Field( diff --git a/src/aind_data_schema/utils/__init__.py b/src/biodata_schema/utils/__init__.py similarity index 100% rename from src/aind_data_schema/utils/__init__.py rename to src/biodata_schema/utils/__init__.py diff --git a/src/aind_data_schema/utils/compatibility_check.py b/src/biodata_schema/utils/compatibility_check.py similarity index 97% rename from src/aind_data_schema/utils/compatibility_check.py rename to src/biodata_schema/utils/compatibility_check.py index f48fc5d24..db1e89917 100644 --- a/src/aind_data_schema/utils/compatibility_check.py +++ b/src/biodata_schema/utils/compatibility_check.py @@ -3,8 +3,8 @@ import logging from typing import Optional -from aind_data_schema.core.acquisition import Acquisition -from aind_data_schema.core.instrument import Instrument +from biodata_schema.core.acquisition import Acquisition +from biodata_schema.core.instrument import Instrument logger = logging.getLogger(__name__) diff --git a/src/aind_data_schema/utils/docs/doc_generator.py b/src/biodata_schema/utils/docs/doc_generator.py similarity index 97% rename from src/aind_data_schema/utils/docs/doc_generator.py rename to src/biodata_schema/utils/docs/doc_generator.py index e6f4711c4..599349bf3 100644 --- a/src/aind_data_schema/utils/docs/doc_generator.py +++ b/src/biodata_schema/utils/docs/doc_generator.py @@ -6,7 +6,7 @@ import json import os -from aind_data_schema.core.metadata import CORE_FILES +from biodata_schema.core.metadata import CORE_FILES def process_core_file(core_file): @@ -21,7 +21,7 @@ def process_core_file(core_file): base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "..", "..")) base_file_path = os.path.join(base_dir, "docs", "base", "core", f"{core_file}.md") output_file_path = os.path.join(base_dir, "docs", "source", f"{core_file}.md") - model_docs_dir = os.path.join(base_dir, "docs", "base", "models", "aind_data_schema", "core", core_file) + model_docs_dir = os.path.join(base_dir, "docs", "base", "models", "biodata_schema", "core", core_file) # Check if files exist if not os.path.exists(base_file_path): @@ -104,7 +104,7 @@ def process_components(component_folder, output_rel_path): # Define paths base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "..", "..")) component_docs_dir = os.path.join( - base_dir, "docs", "base", "models", "aind_data_schema", "components", component_folder + base_dir, "docs", "base", "models", "biodata_schema", "components", component_folder ) output_dir = os.path.join(base_dir, output_rel_path) output_file_path = os.path.join(output_dir, f"{component_folder}.md") @@ -169,7 +169,7 @@ def generate_all_component_documentation(): Generate documentation for all component folders. """ base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "..", "..")) - components_dir = os.path.join(base_dir, "docs", "base", "models", "aind_data_schema", "components") + components_dir = os.path.join(base_dir, "docs", "base", "models", "biodata_schema", "components") if not os.path.exists(components_dir): print(f"Warning: Components directory not found: {components_dir}") diff --git a/src/aind_data_schema/utils/docs/model_generator.py b/src/biodata_schema/utils/docs/model_generator.py similarity index 95% rename from src/aind_data_schema/utils/docs/model_generator.py rename to src/biodata_schema/utils/docs/model_generator.py index 9d2a52d7c..7f5810232 100644 --- a/src/aind_data_schema/utils/docs/model_generator.py +++ b/src/biodata_schema/utils/docs/model_generator.py @@ -10,8 +10,8 @@ from pydantic import BaseModel -from aind_data_schema.base import DataModel, _GenericModel -from aind_data_schema.utils.docs.utils import generate_enum_table +from biodata_schema.base import DataModel, _GenericModel +from biodata_schema.utils.docs.utils import generate_enum_table special_cases = { "pydantic.types.AwareDatetime": "datetime (timezone-aware)", @@ -21,9 +21,9 @@ "biodata_models.harp_types": ("[HarpDeviceType](biodata_models/harp_types.md#harpdevicetype)"), "biodata_models.species._C57Bl_6J": "[Strain](biodata_models/species.md#strain)", "biodata_models.species._Callithrix_Jacchus": "[Species](biodata_models/species.md#species)", - "aind_data_schema.core.quality_control.QCMetric": "{QCMetric} or {CurationMetric}", - "aind_data_schema.components.wrappers.AssetPath": "AssetPath", - "aind_data_schema.base._GenericModel": "dict", + "biodata_schema.core.quality_control.QCMetric": "{QCMetric} or {CurationMetric}", + "biodata_schema.components.wrappers.AssetPath": "AssetPath", + "biodata_schema.base._GenericModel": "dict", "biodata_models.mouse_anatomy.MouseAnatomyModel": ( "[MouseAnatomyModel](biodata_models/external.md#mouseanatomymodel)" ), @@ -72,8 +72,8 @@ def check_for_union(value: str) -> str: """Extract class names from complex strings and replace pipe symbols with 'or'. Examples: - Input: "List[typing.Annotated[aind_data_schema.components.measurements.Calibration | - aind_data_schema.components.measurements.LiquidCalibration, FieldInfo(...)]]" + Input: "List[typing.Annotated[biodata_schema.components.measurements.Calibration | + biodata_schema.components.measurements.LiquidCalibration, FieldInfo(...)]]" Output: "List[{Calibration} or {LiquidCalibration}]" Input: "List[float | str]" @@ -332,7 +332,7 @@ def process_data_model(attr, rel_dir_path, doc_folder, model_link_map): doc_rel_path = rel_dir_path.replace(os.sep, "/") link = f"[{attr.__name__}]({doc_rel_path}.md#{attr.__name__.lower()})" - link = link.replace("aind_data_schema/core/", "").replace("aind_data_schema/", "") + link = link.replace("biodata_schema/core/", "").replace("biodata_schema/", "") model_link_map[f"{{{attr.__name__}}}"] = link @@ -349,7 +349,7 @@ def process_enum(attr, rel_dir_path, doc_folder, model_link_map): doc_rel_path = rel_dir_path.replace(os.sep, "/") link = f"[{attr.__name__}]({doc_rel_path}.md#{attr.__name__.lower()})" - link = link.replace("aind_data_schema/core/", "").replace("aind_data_schema/", "") + link = link.replace("biodata_schema/core/", "").replace("biodata_schema/", "") model_link_map[f"{{{attr.__name__}}}"] = link diff --git a/src/aind_data_schema/utils/docs/registries_generator.py b/src/biodata_schema/utils/docs/registries_generator.py similarity index 98% rename from src/aind_data_schema/utils/docs/registries_generator.py rename to src/biodata_schema/utils/docs/registries_generator.py index ec734849a..2cde57457 100644 --- a/src/aind_data_schema/utils/docs/registries_generator.py +++ b/src/biodata_schema/utils/docs/registries_generator.py @@ -81,7 +81,7 @@ VolumeUnit, ) -from aind_data_schema.utils.docs.utils import generate_enum_table, save_model_info, update_model_links +from biodata_schema.utils.docs.utils import generate_enum_table, save_model_info, update_model_links # Special case classes that should be processed as model schemas even if they don't contain model instances MODEL_SCHEMA_CLASSES = [ @@ -172,7 +172,7 @@ "ORCID": "[ORCID](biodata_models/registries.md#registry)", "ROR": "[ROR](biodata_models/registries.md#registry)", "RID": "[RID](biodata_models/registries.md#registry)", - "aind_data_schema.components.wrappers.AssetPath": "AssetPath", + "biodata_schema.components.wrappers.AssetPath": "AssetPath", } diff --git a/src/aind_data_schema/utils/docs/utils.py b/src/biodata_schema/utils/docs/utils.py similarity index 92% rename from src/aind_data_schema/utils/docs/utils.py rename to src/biodata_schema/utils/docs/utils.py index 8f38c0a23..d0294abf2 100644 --- a/src/aind_data_schema/utils/docs/utils.py +++ b/src/biodata_schema/utils/docs/utils.py @@ -42,8 +42,8 @@ def save_model_info( # Create the link format: "[ClassName](path/to/directory#ClassName)" link = f"[{model_name}]({doc_rel_path}.md#{model_name.lower()})" - # Strip out "aind_data_schema/" and "aind_data_schema/core/" from the links - link = link.replace("aind_data_schema/core/", "").replace("aind_data_schema/", "") + # Strip out "biodata_schema/" and "biodata_schema/core/" from the links + link = link.replace("biodata_schema/core/", "").replace("biodata_schema/", "") # Add to our mapping dictionary using the format "{ClassName}" as the key model_link_map[f"{{{model_name}}}"] = link diff --git a/src/aind_data_schema/utils/examples_generator.py b/src/biodata_schema/utils/examples_generator.py similarity index 100% rename from src/aind_data_schema/utils/examples_generator.py rename to src/biodata_schema/utils/examples_generator.py diff --git a/src/aind_data_schema/utils/exceptions.py b/src/biodata_schema/utils/exceptions.py similarity index 100% rename from src/aind_data_schema/utils/exceptions.py rename to src/biodata_schema/utils/exceptions.py diff --git a/src/aind_data_schema/utils/inheritance.py b/src/biodata_schema/utils/inheritance.py similarity index 98% rename from src/aind_data_schema/utils/inheritance.py rename to src/biodata_schema/utils/inheritance.py index ee2fbf437..9740a0bc5 100644 --- a/src/aind_data_schema/utils/inheritance.py +++ b/src/biodata_schema/utils/inheritance.py @@ -7,9 +7,9 @@ from biodata_models.data_name_patterns import DataLevel, DataRegex, datetime_to_name_string from pydantic_core import PydanticUndefined -from aind_data_schema.core.data_description import DataDescription -from aind_data_schema.core.processing import Processing -from aind_data_schema.core.quality_control import QualityControl +from biodata_schema.core.data_description import DataDescription +from biodata_schema.core.processing import Processing +from biodata_schema.core.quality_control import QualityControl def _get_or_default(data_description: DataDescription, field_name: str, kwargs: dict) -> Any: diff --git a/src/aind_data_schema/utils/json_writer.py b/src/biodata_schema/utils/json_writer.py similarity index 94% rename from src/aind_data_schema/utils/json_writer.py rename to src/biodata_schema/utils/json_writer.py index eb0205eb3..f68bd307e 100644 --- a/src/aind_data_schema/utils/json_writer.py +++ b/src/biodata_schema/utils/json_writer.py @@ -8,13 +8,13 @@ from pathlib import Path from typing import Iterator -from aind_data_schema import core -from aind_data_schema.base import DataCoreModel +from biodata_schema import core +from biodata_schema.base import DataCoreModel # Import all modules in core package for mod in core.__loader__.get_resource_reader().contents(): if "__" not in mod and mod.endswith(".py"): - importlib.import_module(f"aind_data_schema.core.{mod.replace('.py', '')}") + importlib.import_module(f"biodata_schema.core.{mod.replace('.py', '')}") class SchemaWriter: diff --git a/src/aind_data_schema/utils/merge.py b/src/biodata_schema/utils/merge.py similarity index 100% rename from src/aind_data_schema/utils/merge.py rename to src/biodata_schema/utils/merge.py diff --git a/src/aind_data_schema/utils/schema_tree.py b/src/biodata_schema/utils/schema_tree.py similarity index 95% rename from src/aind_data_schema/utils/schema_tree.py rename to src/biodata_schema/utils/schema_tree.py index e6093e5a6..0abe308e8 100644 --- a/src/aind_data_schema/utils/schema_tree.py +++ b/src/biodata_schema/utils/schema_tree.py @@ -6,12 +6,12 @@ import typing from typing import Annotated, Union, get_args, get_origin -from aind_data_schema import core -from aind_data_schema.base import DataCoreModel, _GenericModel +from biodata_schema import core +from biodata_schema.base import DataCoreModel, _GenericModel for _mod in core.__loader__.get_resource_reader().contents(): if "__" not in _mod and _mod.endswith(".py"): - importlib.import_module(f"aind_data_schema.core.{_mod.replace('.py', '')}") + importlib.import_module(f"biodata_schema.core.{_mod.replace('.py', '')}") _SKIP_FIELDS = {"object_type", "describedBy", "schema_version"} @@ -100,7 +100,7 @@ def _extract_expandable_types(annotation) -> list: isinstance(annotation, type) and annotation is not _GenericModel and issubclass(annotation, BaseModel) - and annotation.__module__.startswith("aind_data_schema.") + and annotation.__module__.startswith("biodata_schema.") ): return [annotation] @@ -109,7 +109,7 @@ def _extract_expandable_types(annotation) -> list: def _extract_named_types(annotation) -> list: """Return every named class (model or enum) embedded in an annotation, from either - aind_data_schema or biodata_models, for documentation-link purposes. + biodata_schema or biodata_models, for documentation-link purposes. Broader than :func:`_extract_expandable_types`: it also picks up enums and registry classes from biodata_models, which have their own docs page but @@ -141,7 +141,7 @@ def _extract_named_types(annotation) -> list: and (issubclass(annotation, BaseModel) or issubclass(annotation, enum.Enum)) ): module = annotation.__module__ - if module.startswith("aind_data_schema.") or module.startswith("biodata_models."): + if module.startswith("biodata_schema.") or module.startswith("biodata_models."): return [annotation] return [] @@ -246,15 +246,15 @@ def _model_key(model_cls) -> str: def _doc_url(model_cls) -> str: """The docs page + anchor for a model class, matching the layout produced by - ``aind_data_schema.utils.docs.model_generator`` (core files get a top-level page, + ``biodata_schema.utils.docs.model_generator`` (core files get a top-level page, everything else gets a page per module under its top-level package folder). """ module = model_cls.__module__ - for prefix in ("aind_data_schema.", "biodata_models."): + for prefix in ("biodata_schema.", "biodata_models."): prefix_len = len(prefix) if module.startswith(prefix): parts = module[prefix_len:].split(".") - if prefix == "aind_data_schema." and parts[0] == "core": + if prefix == "biodata_schema." and parts[0] == "core": doc_path = parts[1] elif prefix == "biodata_models.": doc_path = "biodata_models/" + parts[0] diff --git a/src/aind_data_schema/utils/schema_version_bump.py b/src/biodata_schema/utils/schema_version_bump.py similarity index 98% rename from src/aind_data_schema/utils/schema_version_bump.py rename to src/biodata_schema/utils/schema_version_bump.py index dff713564..b1ab011a6 100644 --- a/src/aind_data_schema/utils/schema_version_bump.py +++ b/src/biodata_schema/utils/schema_version_bump.py @@ -8,8 +8,8 @@ import dictdiffer import semver -from aind_data_schema.base import DataCoreModel -from aind_data_schema.utils.json_writer import SchemaWriter +from biodata_schema.base import DataCoreModel +from biodata_schema.utils.json_writer import SchemaWriter CURRENT_DIR = Path(os.path.dirname(os.path.realpath(__file__))) ROOT_DIR = CURRENT_DIR.parents[2] diff --git a/src/aind_data_schema/utils/validators.py b/src/biodata_schema/utils/validators.py similarity index 99% rename from src/aind_data_schema/utils/validators.py rename to src/biodata_schema/utils/validators.py index e85c6d118..74433f995 100644 --- a/src/aind_data_schema/utils/validators.py +++ b/src/biodata_schema/utils/validators.py @@ -8,7 +8,7 @@ from pydantic_extra_types.timezone_name import TimeZoneName -from aind_data_schema.components.wrappers import AssetPath +from biodata_schema.components.wrappers import AssetPath logger = logging.getLogger(__name__) diff --git a/tests/coordinate_systems.py b/tests/coordinate_systems.py index 031f34622..5a1df4890 100644 --- a/tests/coordinate_systems.py +++ b/tests/coordinate_systems.py @@ -7,7 +7,7 @@ from biodata_models.coordinates import AxisName, Direction, Origin from biodata_models.units import SizeUnit -from aind_data_schema.components.coordinates import Axis, CoordinateSystem +from biodata_schema.components.coordinates import Axis, CoordinateSystem BREGMA_ARI = CoordinateSystem( name="BREGMA_ARI", diff --git a/tests/test_acquisition.py b/tests/test_acquisition.py index b8f69c25d..8d6ae7bdb 100644 --- a/tests/test_acquisition.py +++ b/tests/test_acquisition.py @@ -11,7 +11,7 @@ from biodata_models.modalities import Modality from pydantic import ValidationError -from aind_data_schema.components.configs import ( +from biodata_schema.components.configs import ( DeviceConfig, EphysAssemblyConfig, ImagingConfig, @@ -21,9 +21,9 @@ MRIScan, SampleChamberConfig, ) -from aind_data_schema.components.connections import Connection -from aind_data_schema.components.coordinates import Translation -from aind_data_schema.core.acquisition import ( +from biodata_schema.components.connections import Connection +from biodata_schema.components.coordinates import Translation +from biodata_schema.core.acquisition import ( NON_IANA_TIMEZONES, Acquisition, AcquisitionSubjectDetails, @@ -320,7 +320,7 @@ def test_all_device_config_subclasses_covered(self): # pragma: no cover """ # Import the calibration and maintenance base classes to exclude them - from aind_data_schema.components.measurements import Calibration, Maintenance + from biodata_schema.components.measurements import Calibration, Maintenance # Get all subclasses of DeviceConfig using introspection def get_all_subclasses(cls): diff --git a/tests/test_acquisition_configs.py b/tests/test_acquisition_configs.py index 059c04a0c..584628dc1 100644 --- a/tests/test_acquisition_configs.py +++ b/tests/test_acquisition_configs.py @@ -7,7 +7,7 @@ from biodata_models.units import AngleUnit, FrequencyUnit, SizeUnit, TimeUnit, VolumeUnit from pydantic import ValidationError -from aind_data_schema.components.configs import ( +from biodata_schema.components.configs import ( Channel, DetectorConfig, ImageSPIM, @@ -24,7 +24,7 @@ SubjectPosition, Valence, ) -from aind_data_schema.components.coordinates import Affine, Translation +from biodata_schema.components.coordinates import Affine, Translation from tests.coordinate_systems import SPIM_IJK diff --git a/tests/test_aind_generic.py b/tests/test_aind_generic.py index 96aa4d399..9a11edf08 100644 --- a/tests/test_aind_generic.py +++ b/tests/test_aind_generic.py @@ -2,7 +2,7 @@ from pydantic import Field -from aind_data_schema.base import DataModel, GenericModel +from biodata_schema.base import DataModel, GenericModel class GenericContainer(DataModel): diff --git a/tests/test_base.py b/tests/test_base.py index ea8df3220..671a98e1a 100644 --- a/tests/test_base.py +++ b/tests/test_base.py @@ -11,7 +11,7 @@ from biodata_models.brain_atlas import BrainStructureModel from pydantic import Field, SkipValidation, ValidationError, create_model -from aind_data_schema.base import ( +from biodata_schema.base import ( MAX_FILE_SIZE, AwareDatetimeWithDefault, DataCoreModel, @@ -19,7 +19,7 @@ GenericModel, is_dict_corrupt, ) -from aind_data_schema.core.subject import Subject +from biodata_schema.core.subject import Subject class TestBase: @@ -32,7 +32,7 @@ def test_described_by(self): assert s.describedBy == ( "https://raw.githubusercontent.com/AllenNeuralDynamics/" - "biodata-schema/main/src/aind_data_schema/core/subject.py" + "biodata-schema/main/src/biodata_schema/core/subject.py" ) @patch("pathlib.Path.open", new_callable=mock_open) @@ -201,7 +201,7 @@ class TestCoreModel(DataCoreModel): TestCoreModel(**v2_from_v1.model_dump()) @patch("pathlib.Path.open", new_callable=mock_open) - @patch("aind_data_schema.base.logger") + @patch("biodata_schema.base.logger") def test_write_standard_file_size_warning(self, mock_logger: MagicMock, mock_open: MagicMock): """Tests that a warning is logged if the file size exceeds MAX_FILE_SIZE""" @@ -288,7 +288,7 @@ class ChildModel(TestModel): assert ChildModel.default_filename() == "test_model.json" @patch("pathlib.Path.open", new_callable=mock_open) - @patch("aind_data_schema.utils.validators.recursive_check_paths") + @patch("biodata_schema.utils.validators.recursive_check_paths") def test_write_standard_file(self, mock_recursive_check_paths: MagicMock, mock_open: MagicMock): """Tests write_standard_file method""" @@ -306,8 +306,8 @@ class TestModel(DataCoreModel): mock_open.assert_called_once_with("w") @patch("pathlib.Path.open", new_callable=mock_open) - @patch("aind_data_schema.base.logger") - @patch("aind_data_schema.utils.validators.recursive_check_paths") + @patch("biodata_schema.base.logger") + @patch("biodata_schema.utils.validators.recursive_check_paths") def test_write_standard_file_size_warning( self, mock_recursive_check_paths: MagicMock, mock_logger: MagicMock, mock_open: MagicMock ): @@ -329,7 +329,7 @@ class TestModel(DataCoreModel): ) @patch("pathlib.Path.open", new_callable=mock_open) - @patch("aind_data_schema.utils.validators.recursive_check_paths") + @patch("biodata_schema.utils.validators.recursive_check_paths") def test_write_standard_file_string_output_directory( self, mock_recursive_check_paths: MagicMock, mock_open: MagicMock ): @@ -346,7 +346,7 @@ class TestModel(DataCoreModel): mock_open.assert_called_once_with("w") @patch("pathlib.Path.open", new_callable=mock_open) - @patch("aind_data_schema.utils.validators.recursive_check_paths") + @patch("biodata_schema.utils.validators.recursive_check_paths") def test_write_standard_file_no_output_directory(self, mock_recursive_check_paths: MagicMock, mock_open: MagicMock): """Tests write_standard_file with no output_directory (defaults to cwd)""" diff --git a/tests/test_bump_schema_versions.py b/tests/test_bump_schema_versions.py index d44e0d443..f2282e154 100644 --- a/tests/test_bump_schema_versions.py +++ b/tests/test_bump_schema_versions.py @@ -6,11 +6,11 @@ import pytest from semver import Version -from aind_data_schema.core.acquisition import Acquisition -from aind_data_schema.core.instrument import Instrument -from aind_data_schema.core.subject import Subject -from aind_data_schema.utils.json_writer import SchemaWriter -from aind_data_schema.utils.schema_version_bump import SchemaVersionHandler +from biodata_schema.core.acquisition import Acquisition +from biodata_schema.core.instrument import Instrument +from biodata_schema.core.subject import Subject +from biodata_schema.utils.json_writer import SchemaWriter +from biodata_schema.utils.schema_version_bump import SchemaVersionHandler class TestSchemaVersion: @@ -40,7 +40,7 @@ def test_get_list_of_models_that_changed(self, mock_exists: MagicMock, mock_json assert Acquisition in models_that_changed assert Subject in models_that_changed - @patch("aind_data_schema.utils.schema_version_bump.SchemaVersionHandler._get_schema_json") + @patch("biodata_schema.utils.schema_version_bump.SchemaVersionHandler._get_schema_json") def test_get_list_of_incremented_versions(self, mock_get_schema: MagicMock): """Tests get_list_of_incremented_versions method""" @@ -106,7 +106,7 @@ def test_get_schema_json_file_not_found(self, mock_exists: MagicMock): with pytest.raises(FileNotFoundError): handler._get_schema_json(model) - @patch("aind_data_schema.utils.schema_version_bump.SchemaVersionHandler._get_schema_json") + @patch("biodata_schema.utils.schema_version_bump.SchemaVersionHandler._get_schema_json") def test_get_incremented_versions_map_exception(self, mock_get_schema: MagicMock): """Test that missing schema_version field raises an error""" handler = SchemaVersionHandler(json_schemas_location=Path(".")) @@ -116,7 +116,7 @@ def test_get_incremented_versions_map_exception(self, mock_get_schema: MagicMock with pytest.raises(ValueError): handler._get_incremented_versions_map([Subject]) - @patch("aind_data_schema.utils.schema_version_bump.SchemaVersionHandler._get_schema_json") + @patch("biodata_schema.utils.schema_version_bump.SchemaVersionHandler._get_schema_json") def test_get_incremented_versions_map_skip(self, mock_get_schema: MagicMock): """Test that missing schema_version field raises an error""" handler = SchemaVersionHandler(json_schemas_location=Path(".")) @@ -126,7 +126,7 @@ def test_get_incremented_versions_map_skip(self, mock_get_schema: MagicMock): empty_map = handler._get_incremented_versions_map([Subject]) assert empty_map == {} - @patch("aind_data_schema.utils.schema_version_bump.SchemaVersionHandler._write_new_file") + @patch("biodata_schema.utils.schema_version_bump.SchemaVersionHandler._write_new_file") def test_update_files(self, mock_write: MagicMock): """Tests the update_files method""" handler = SchemaVersionHandler(json_schemas_location=Path(".")) @@ -157,9 +157,9 @@ def test_update_files(self, mock_write: MagicMock): assert expected_line_change1 in str(mock_write_args1[0]) assert "acquisition.py" in str(mock_write_args1[1]) - @patch("aind_data_schema.utils.schema_version_bump.SchemaVersionHandler._get_schema_json") - @patch("aind_data_schema.utils.schema_version_bump.SchemaVersionHandler._get_list_of_models_that_changed") - @patch("aind_data_schema.utils.schema_version_bump.SchemaVersionHandler._update_files") + @patch("biodata_schema.utils.schema_version_bump.SchemaVersionHandler._get_schema_json") + @patch("biodata_schema.utils.schema_version_bump.SchemaVersionHandler._get_list_of_models_that_changed") + @patch("biodata_schema.utils.schema_version_bump.SchemaVersionHandler._update_files") def test_run_job( self, mock_update_files: MagicMock, mock_get_list_of_models: MagicMock, mock_get_schema: MagicMock ): diff --git a/tests/test_compatibility_check.py b/tests/test_compatibility_check.py index 1d1f8aa5b..144287bbc 100644 --- a/tests/test_compatibility_check.py +++ b/tests/test_compatibility_check.py @@ -4,10 +4,10 @@ import pytest -from aind_data_schema.components.devices import Device -from aind_data_schema.core.acquisition import Acquisition, StimulusEpoch -from aind_data_schema.core.instrument import Instrument -from aind_data_schema.utils.compatibility_check import InstrumentAcquisitionCompatibility +from biodata_schema.components.devices import Device +from biodata_schema.core.acquisition import Acquisition, StimulusEpoch +from biodata_schema.core.instrument import Instrument +from biodata_schema.utils.compatibility_check import InstrumentAcquisitionCompatibility from examples.exaspim_acquisition import acq from examples.exaspim_instrument import inst diff --git a/tests/test_composability_merge.py b/tests/test_composability_merge.py index f76cacdb3..c4dce40bc 100644 --- a/tests/test_composability_merge.py +++ b/tests/test_composability_merge.py @@ -6,11 +6,11 @@ import pytest from biodata_models.modalities import Modality -from aind_data_schema.components.identifiers import Code -from aind_data_schema.core.acquisition import AcquisitionSubjectDetails -from aind_data_schema.core.procedures import Procedures -from aind_data_schema.core.processing import DataProcess, Processing, ProcessName, ProcessStage -from aind_data_schema.core.quality_control import QCMetric, QCStatus, QualityControl, Stage, Status +from biodata_schema.components.identifiers import Code +from biodata_schema.core.acquisition import AcquisitionSubjectDetails +from biodata_schema.core.procedures import Procedures +from biodata_schema.core.processing import DataProcess, Processing, ProcessName, ProcessStage +from biodata_schema.core.quality_control import QCMetric, QCStatus, QualityControl, Stage, Status from examples.exaspim_acquisition import acq from examples.procedures import p, t, t2 diff --git a/tests/test_configs.py b/tests/test_configs.py index f8e4aa00b..db86f078c 100644 --- a/tests/test_configs.py +++ b/tests/test_configs.py @@ -5,8 +5,8 @@ from biodata_models.units import PowerUnit, SizeUnit from pydantic import ValidationError -from aind_data_schema.components.configs import CoupledPlane, ImagingConfig, PlanarImage, Plane -from aind_data_schema.components.coordinates import Scale, Translation +from biodata_schema.components.configs import CoupledPlane, ImagingConfig, PlanarImage, Plane +from biodata_schema.components.coordinates import Scale, Translation from examples.bergamo_ophys_acquisition import a as bergamo_acquisition from examples.exaspim_acquisition import acq as exaspim_acquisition diff --git a/tests/test_coordinates.py b/tests/test_coordinates.py index f54691f82..79371eaf3 100644 --- a/tests/test_coordinates.py +++ b/tests/test_coordinates.py @@ -4,7 +4,7 @@ from biodata_models.atlas import AtlasName from biodata_models.units import SizeUnit -from aind_data_schema.components.coordinates import ( +from biodata_schema.components.coordinates import ( Atlas, Axis, AxisName, diff --git a/tests/test_data_description.py b/tests/test_data_description.py index ed2723a98..4d13dc721 100644 --- a/tests/test_data_description.py +++ b/tests/test_data_description.py @@ -10,9 +10,9 @@ from biodata_models.organizations import Organization from pydantic import ValidationError -from aind_data_schema.components.identifiers import Person -from aind_data_schema.core.data_description import DataDescription, Funding, build_data_name -from aind_data_schema.utils.inheritance import ( +from biodata_schema.components.identifiers import Person +from biodata_schema.core.data_description import DataDescription, Funding, build_data_name +from biodata_schema.utils.inheritance import ( derive_data_description, derive_data_description_from_derived, derive_data_description_from_raw, @@ -56,7 +56,7 @@ def test_build_name(self): name = build_data_name("project", dt) assert name == "project_2022-10-12_23-23-11" - @patch("aind_data_schema.core.data_description.build_data_name") + @patch("biodata_schema.core.data_description.build_data_name") def test_build_name_validation_error(self, mock_build_data_name: MagicMock): """Test build_data_name function to trigger validation error""" mock_build_data_name.return_value = "invalid" diff --git a/tests/test_device.py b/tests/test_device.py index 6b49afc00..bd4e9e6a9 100644 --- a/tests/test_device.py +++ b/tests/test_device.py @@ -7,8 +7,8 @@ from biodata_models.units import UnitlessUnit from pydantic import ValidationError -from aind_data_schema.components.coordinates import Translation -from aind_data_schema.components.devices import ( +from biodata_schema.components.coordinates import Translation +from biodata_schema.components.devices import ( AdditionalImagingDevice, DataInterface, Detector, diff --git a/tests/test_examples.py b/tests/test_examples.py index 665e04c0d..8623dd0de 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -5,7 +5,7 @@ import pytest -from aind_data_schema.utils.examples_generator import ExamplesGenerator +from biodata_schema.utils.examples_generator import ExamplesGenerator EXAMPLES_DIR = Path(__file__).parents[1] / "examples" diff --git a/tests/test_geometry.py b/tests/test_geometry.py index 888304462..cac0f2b31 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -2,7 +2,7 @@ from biodata_models.units import SizeUnit -from aind_data_schema.components.geometry import Circle, Rectangle +from biodata_schema.components.geometry import Circle, Rectangle class TestRectangle: diff --git a/tests/test_identifiers.py b/tests/test_identifiers.py index 35ceed39d..7d069365b 100644 --- a/tests/test_identifiers.py +++ b/tests/test_identifiers.py @@ -3,7 +3,7 @@ import pytest from pydantic import ValidationError -from aind_data_schema.components.identifiers import Code, DataAsset, Person +from biodata_schema.components.identifiers import Code, DataAsset, Person class TestExperimenter: diff --git a/tests/test_imaging.py b/tests/test_imaging.py index fa56007b2..b7043eea8 100644 --- a/tests/test_imaging.py +++ b/tests/test_imaging.py @@ -7,13 +7,13 @@ from biodata_models.organizations import Organization from pydantic import ValidationError -from aind_data_schema.components.configs import Image -from aind_data_schema.components.coordinates import Affine, Rotation, Scale, Translation -from aind_data_schema.components.devices import Laser, Objective, ScanningStage -from aind_data_schema.components.identifiers import Code -from aind_data_schema.core.acquisition import Acquisition -from aind_data_schema.core.instrument import Instrument -from aind_data_schema.core.processing import DataProcess, ProcessName, ProcessStage +from biodata_schema.components.configs import Image +from biodata_schema.components.coordinates import Affine, Rotation, Scale, Translation +from biodata_schema.components.devices import Laser, Objective, ScanningStage +from biodata_schema.components.identifiers import Code +from biodata_schema.core.acquisition import Acquisition +from biodata_schema.core.instrument import Instrument +from biodata_schema.core.processing import DataProcess, ProcessName, ProcessStage from examples.exaspim_acquisition import acq from tests.coordinate_systems import BREGMA_ARI diff --git a/tests/test_inheritance.py b/tests/test_inheritance.py index 225543f32..337a23e45 100644 --- a/tests/test_inheritance.py +++ b/tests/test_inheritance.py @@ -7,13 +7,13 @@ from biodata_models.modalities import Modality from biodata_models.organizations import Organization -from aind_data_schema.components.identifiers import Code, Person -from aind_data_schema.core.data_description import DataDescription, Funding -from aind_data_schema.core.metadata import Metadata -from aind_data_schema.core.processing import DataProcess, Processing, ProcessName, ProcessStage -from aind_data_schema.core.quality_control import QCMetric, QCStatus, QualityControl, Stage, Status -from aind_data_schema.core.subject import Subject -from aind_data_schema.utils.inheritance import ( +from biodata_schema.components.identifiers import Code, Person +from biodata_schema.core.data_description import DataDescription, Funding +from biodata_schema.core.metadata import Metadata +from biodata_schema.core.processing import DataProcess, Processing, ProcessName, ProcessStage +from biodata_schema.core.quality_control import QCMetric, QCStatus, QualityControl, Stage, Status +from biodata_schema.core.subject import Subject +from biodata_schema.utils.inheritance import ( _accumulate_processing, _accumulate_quality_control, _get_root_asset_name, diff --git a/tests/test_inst_acq_compatibility.py b/tests/test_inst_acq_compatibility.py index ea6f93485..c3308cb90 100644 --- a/tests/test_inst_acq_compatibility.py +++ b/tests/test_inst_acq_compatibility.py @@ -2,7 +2,7 @@ import pytest -from aind_data_schema.utils.compatibility_check import InstrumentAcquisitionCompatibility +from biodata_schema.utils.compatibility_check import InstrumentAcquisitionCompatibility from examples.ephys_acquisition import acquisition as ephys_acquisition from examples.ephys_instrument import inst as ephys_instrument from examples.exaspim_acquisition import acq as exaspim_acquisition diff --git a/tests/test_instrument.py b/tests/test_instrument.py index 353ab7281..742f213c1 100644 --- a/tests/test_instrument.py +++ b/tests/test_instrument.py @@ -12,8 +12,8 @@ from biodata_models.units import FrequencyUnit, PowerUnit from pydantic import ValidationError -from aind_data_schema.components.connections import Connection -from aind_data_schema.components.devices import ( +from biodata_schema.components.connections import Connection +from biodata_schema.components.devices import ( Camera, CameraAssembly, CameraTarget, @@ -41,9 +41,9 @@ OlfactometerChannelType, ScanningStage, ) -from aind_data_schema.components.identifiers import Software -from aind_data_schema.components.measurements import Calibration -from aind_data_schema.core.instrument import ( +from biodata_schema.components.identifiers import Software +from biodata_schema.components.measurements import Calibration +from biodata_schema.core.instrument import ( DEVICES_REQUIRED, Instrument, ) @@ -712,7 +712,7 @@ def test_duplicate_non_harp_device_components(self): components=[Computer(name="Computer1")], ) - with patch("aind_data_schema.core.instrument.logger") as mock_logger: + with patch("biodata_schema.core.instrument.logger") as mock_logger: combined = inst1 + inst2 mock_logger.error.assert_called_once() error_call_args = mock_logger.error.call_args[0][0] @@ -747,7 +747,7 @@ def test_duplicate_harp_clock_generator_devices(self): components=[harp_clock_gen.model_copy(deep=True)], ) - with patch("aind_data_schema.core.instrument.logger") as mock_logger: + with patch("biodata_schema.core.instrument.logger") as mock_logger: combined = inst1 + inst2 mock_logger.info.assert_called_once() info_call_args = mock_logger.info.call_args[0][0] @@ -813,7 +813,7 @@ def test_duplicate_non_harp_device_with_clock_generator_attribute(self): ], ) - with patch("aind_data_schema.core.instrument.logger") as mock_logger: + with patch("biodata_schema.core.instrument.logger") as mock_logger: combined = inst1 + inst2 mock_logger.error.assert_called_once() error_call_args = mock_logger.error.call_args[0][0] diff --git a/tests/test_json_writer.py b/tests/test_json_writer.py index 459e6a62c..a22c4f1b3 100644 --- a/tests/test_json_writer.py +++ b/tests/test_json_writer.py @@ -5,7 +5,7 @@ from pathlib import Path from unittest.mock import MagicMock, call, mock_open, patch -from aind_data_schema.utils.json_writer import SchemaWriter +from biodata_schema.utils.json_writer import SchemaWriter class TestSchemaWriter: diff --git a/tests/test_measurements.py b/tests/test_measurements.py index 89e108f05..347ddf3ff 100644 --- a/tests/test_measurements.py +++ b/tests/test_measurements.py @@ -3,7 +3,7 @@ import pytest from pydantic import ValidationError -from aind_data_schema.components.measurements import CalibrationFit, FitType +from biodata_schema.components.measurements import CalibrationFit, FitType class TestCalibrationFit: diff --git a/tests/test_metadata.py b/tests/test_metadata.py index 7cd74b79f..a8ee15358 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -13,19 +13,19 @@ from biodata_models.species import Strain from pydantic import ValidationError -from aind_data_schema.components.connections import Connection -from aind_data_schema.components.devices import EphysAssembly, EphysProbe, Laser, Manipulator -from aind_data_schema.components.identifiers import Code, Database, Person -from aind_data_schema.components.subject_procedures import TrainingProtocol -from aind_data_schema.components.subjects import BreedingInfo, CalibrationObject, Housing, MouseSubject, Sex, Species -from aind_data_schema.components.surgery_procedures import BrainInjection -from aind_data_schema.core.acquisition import Acquisition, AcquisitionSubjectDetails, DataStream, StimulusEpoch -from aind_data_schema.core.data_description import DataDescription, Funding -from aind_data_schema.core.instrument import Instrument -from aind_data_schema.core.metadata import Metadata, create_metadata_json -from aind_data_schema.core.procedures import Procedures, Surgery -from aind_data_schema.core.processing import DataProcess, Processing, ProcessName, ProcessStage -from aind_data_schema.core.subject import Subject +from biodata_schema.components.connections import Connection +from biodata_schema.components.devices import EphysAssembly, EphysProbe, Laser, Manipulator +from biodata_schema.components.identifiers import Code, Database, Person +from biodata_schema.components.subject_procedures import TrainingProtocol +from biodata_schema.components.subjects import BreedingInfo, CalibrationObject, Housing, MouseSubject, Sex, Species +from biodata_schema.components.surgery_procedures import BrainInjection +from biodata_schema.core.acquisition import Acquisition, AcquisitionSubjectDetails, DataStream, StimulusEpoch +from biodata_schema.core.data_description import DataDescription, Funding +from biodata_schema.core.instrument import Instrument +from biodata_schema.core.metadata import Metadata, create_metadata_json +from biodata_schema.core.procedures import Procedures, Surgery +from biodata_schema.core.processing import DataProcess, Processing, ProcessName, ProcessStage +from biodata_schema.core.subject import Subject from examples.aibs_smartspim_instrument import inst as spim_inst from examples.barseq_acquisition import acquisition as barseq_acquisition from examples.data_description import d as data_description @@ -952,7 +952,7 @@ class TestWriteStandardFiles: """Tests for Metadata.write_standard_files""" @patch.object(Path, "open", autospec=True) - @patch("aind_data_schema.utils.validators.recursive_check_paths") + @patch("biodata_schema.utils.validators.recursive_check_paths") def test_writes_each_present_core_file(self, mock_rcp, mock_open_fn): """write_standard_files calls write_standard_file for each non-None core field""" m = Metadata.model_construct( @@ -973,7 +973,7 @@ def test_writes_each_present_core_file(self, mock_rcp, mock_open_fn): assert 4 == mock_open_fn.call_count @patch.object(Path, "open", autospec=True) - @patch("aind_data_schema.utils.validators.recursive_check_paths") + @patch("biodata_schema.utils.validators.recursive_check_paths") def test_skips_none_fields(self, mock_rcp, mock_open_fn): """Fields that are None produce no file writes""" m = Metadata.model_construct( @@ -988,7 +988,7 @@ def test_skips_none_fields(self, mock_rcp, mock_open_fn): assert "processing.json" in opened_files @patch.object(Path, "open", autospec=True) - @patch("aind_data_schema.utils.validators.recursive_check_paths") + @patch("biodata_schema.utils.validators.recursive_check_paths") def test_output_directory_forwarded(self, mock_rcp, mock_open_fn): """output_directory is forwarded to each write_standard_file call""" m = Metadata.model_construct( diff --git a/tests/test_model.py b/tests/test_model.py index 532a0aa0e..e75abb42e 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -3,7 +3,7 @@ import pydantic import pytest -from aind_data_schema.core.model import Model +from biodata_schema.core.model import Model from examples.model import m diff --git a/tests/test_procedures.py b/tests/test_procedures.py index 4d1c4655f..bdb6c4946 100644 --- a/tests/test_procedures.py +++ b/tests/test_procedures.py @@ -12,17 +12,17 @@ from biodata_models.units import ConcentrationUnit, CurrentUnit, SizeUnit, TimeUnit, VolumeUnit from pydantic import ValidationError -from aind_data_schema.components.configs import CatheterConfig -from aind_data_schema.components.coordinates import Origin, Translation -from aind_data_schema.components.devices import Catheter, Device -from aind_data_schema.components.injection_procedures import ( +from biodata_schema.components.configs import CatheterConfig +from biodata_schema.components.coordinates import Origin, Translation +from biodata_schema.components.devices import Catheter, Device +from biodata_schema.components.injection_procedures import ( InjectionDynamics, InjectionProfile, NonViralMaterial, TarsVirusIdentifiers, ViralMaterial, ) -from aind_data_schema.components.specimen_procedures import ( +from biodata_schema.components.specimen_procedures import ( HCRSeries, PlanarSection, PlanarSectioning, @@ -31,10 +31,10 @@ SectionOrientation, SpecimenProcedure, ) -from aind_data_schema.components.subject_procedures import BrainInjection, Injection, Surgery -from aind_data_schema.components.surgery_procedures import CatheterImplant, Craniotomy, CraniotomyType -from aind_data_schema.core.procedures import Procedures -from aind_data_schema.utils.exceptions import OneOfError +from biodata_schema.components.subject_procedures import BrainInjection, Injection, Surgery +from biodata_schema.components.surgery_procedures import CatheterImplant, Craniotomy, CraniotomyType +from biodata_schema.core.procedures import Procedures +from biodata_schema.utils.exceptions import OneOfError from tests.coordinate_systems import BREGMA_ARI, BREGMA_ARID diff --git a/tests/test_processing.py b/tests/test_processing.py index 96967060e..fe12f9f47 100644 --- a/tests/test_processing.py +++ b/tests/test_processing.py @@ -7,8 +7,8 @@ from biodata_models.system_architecture import CPUArchitecture, OperatingSystem from biodata_models.units import MemoryUnit -from aind_data_schema.components.identifiers import Code, DataAsset -from aind_data_schema.core.processing import ( +from biodata_schema.components.identifiers import Code, DataAsset +from biodata_schema.core.processing import ( DataProcess, Processing, ProcessName, diff --git a/tests/test_quality_control.py b/tests/test_quality_control.py index e3307ca5b..1bdfd9027 100644 --- a/tests/test_quality_control.py +++ b/tests/test_quality_control.py @@ -6,7 +6,7 @@ from biodata_models.modalities import Modality from pydantic import ValidationError -from aind_data_schema.core.quality_control import ( +from biodata_schema.core.quality_control import ( QCMetric, QCStatus, QualityControl, diff --git a/tests/test_stimulus.py b/tests/test_stimulus.py index 18d32351a..8dc6d71cb 100644 --- a/tests/test_stimulus.py +++ b/tests/test_stimulus.py @@ -1,6 +1,6 @@ """Test components.stimulus""" -from aind_data_schema.components.stimulus import AuditoryStimulation +from biodata_schema.components.stimulus import AuditoryStimulation class TestStimulus: diff --git a/tests/test_subject.py b/tests/test_subject.py index bd4d38023..77a11679b 100644 --- a/tests/test_subject.py +++ b/tests/test_subject.py @@ -9,8 +9,8 @@ from biodata_models.registries import Registry from biodata_models.species import Species, Strain -from aind_data_schema.components.subjects import BreedingInfo, Housing, LightCycle, MouseSubject -from aind_data_schema.core.subject import Subject +from biodata_schema.components.subjects import BreedingInfo, Housing, LightCycle, MouseSubject +from biodata_schema.core.subject import Subject class TestSubject: diff --git a/tests/test_subjects.py b/tests/test_subjects.py index ecc99bed4..6b189eada 100644 --- a/tests/test_subjects.py +++ b/tests/test_subjects.py @@ -8,7 +8,7 @@ from biodata_models.registries import Registry from biodata_models.species import Species, Strain -from aind_data_schema.components.subjects import ( +from biodata_schema.components.subjects import ( BreedingInfo, CalibrationObject, Housing, diff --git a/tests/test_utils_merge.py b/tests/test_utils_merge.py index a131f287a..e400c26b1 100644 --- a/tests/test_utils_merge.py +++ b/tests/test_utils_merge.py @@ -4,7 +4,7 @@ import pytest -from aind_data_schema.utils.merge import ( +from biodata_schema.utils.merge import ( merge_coordinate_systems, merge_notes, merge_optional_list, @@ -128,19 +128,19 @@ class TestRemoveDuplicates: def test_empty_list(self): """Test with empty list""" - from aind_data_schema.utils.merge import remove_duplicates + from biodata_schema.utils.merge import remove_duplicates assert remove_duplicates([]) == [] def test_no_duplicates(self): """Test with list that has no duplicates""" - from aind_data_schema.utils.merge import remove_duplicates + from biodata_schema.utils.merge import remove_duplicates assert remove_duplicates([1, 2, 3, 4]) == [1, 2, 3, 4] def test_with_duplicates(self, caplog): """Test with list that has duplicates""" - from aind_data_schema.utils.merge import remove_duplicates + from biodata_schema.utils.merge import remove_duplicates with caplog.at_level("INFO"): assert remove_duplicates([1, 2, 2, 3, 3, 4]) == [1, 2, 3, 4] @@ -149,19 +149,19 @@ def test_with_duplicates(self, caplog): def test_preserves_order(self): """Test that order is preserved when removing duplicates""" - from aind_data_schema.utils.merge import remove_duplicates + from biodata_schema.utils.merge import remove_duplicates assert remove_duplicates([3, 1, 2, 1, 3, 4]) == [3, 1, 2, 4] def test_string_duplicates(self): """Test with string duplicates""" - from aind_data_schema.utils.merge import remove_duplicates + from biodata_schema.utils.merge import remove_duplicates assert remove_duplicates(["a", "b", "a", "c", "b"]) == ["a", "b", "c"] def test_all_duplicates(self): """Test with all elements being duplicates""" - from aind_data_schema.utils.merge import remove_duplicates + from biodata_schema.utils.merge import remove_duplicates assert remove_duplicates([1, 1, 1, 1]) == [1] diff --git a/tests/test_utils_validators.py b/tests/test_utils_validators.py index bca2c07bb..dfe4dd1ef 100644 --- a/tests/test_utils_validators.py +++ b/tests/test_utils_validators.py @@ -10,10 +10,10 @@ from pydantic import BaseModel from pydantic_extra_types.timezone_name import TimeZoneName -from aind_data_schema.base import AwareDatetimeWithDefault, DataModel -from aind_data_schema.components.coordinates import Rotation, Scale, Translation -from aind_data_schema.components.wrappers import AssetPath -from aind_data_schema.utils.validators import ( +from biodata_schema.base import AwareDatetimeWithDefault, DataModel +from biodata_schema.components.coordinates import Rotation, Scale, Translation +from biodata_schema.components.wrappers import AssetPath +from biodata_schema.utils.validators import ( TimeValidation, _convert_to_comparable, _recurse_helper, @@ -408,7 +408,7 @@ class TestRecursiveCheckPaths: """Tests for recursive_check_paths function""" @patch("pathlib.Path.exists") - @patch("aind_data_schema.utils.validators.logger") + @patch("biodata_schema.utils.validators.logger") def test_path_exists(self, mock_warning: MagicMock, mock_exists: MagicMock): """Test when the path exists""" mock_exists.return_value = True @@ -419,7 +419,7 @@ def test_path_exists(self, mock_warning: MagicMock, mock_exists: MagicMock): mock_warning.warning.assert_not_called() @patch("pathlib.Path.exists") - @patch("aind_data_schema.utils.validators.logger") + @patch("biodata_schema.utils.validators.logger") def test_path_does_not_exist(self, mock_warning: MagicMock, mock_exists: MagicMock): """Test when the path does not exist""" mock_exists.return_value = False @@ -431,7 +431,7 @@ def test_path_does_not_exist(self, mock_warning: MagicMock, mock_exists: MagicMo ) @patch("pathlib.Path.exists") - @patch("aind_data_schema.utils.validators.logger") + @patch("biodata_schema.utils.validators.logger") def test_nested_paths_in_list(self, mock_warning: MagicMock, mock_exists: MagicMock): """Test nested paths in a list""" mock_exists.side_effect = [True, False] @@ -443,7 +443,7 @@ def test_nested_paths_in_list(self, mock_warning: MagicMock, mock_exists: MagicM ) @patch("pathlib.Path.exists") - @patch("aind_data_schema.utils.validators.logger") + @patch("biodata_schema.utils.validators.logger") def test_nested_paths_in_dict(self, mock_warning: MagicMock, mock_exists: MagicMock): """Test nested paths in a dictionary""" mock_exists.side_effect = [False, True] @@ -455,7 +455,7 @@ def test_nested_paths_in_dict(self, mock_warning: MagicMock, mock_exists: MagicM ) @patch("pathlib.Path.exists") - @patch("aind_data_schema.utils.validators.logger") + @patch("biodata_schema.utils.validators.logger") def test_nested_paths_in_object(self, mock_warning: MagicMock, mock_exists: MagicMock): """Test nested paths in a custom object""" @@ -476,7 +476,7 @@ def __init__(self, path1, path2): ) @patch("pathlib.Path.exists") - @patch("aind_data_schema.utils.validators.logger") + @patch("biodata_schema.utils.validators.logger") def test_no_paths(self, mock_warning: MagicMock, mock_exists: MagicMock): """Test when no paths are present""" data = {"key": "value", "list": [1, 2, 3]} @@ -485,7 +485,7 @@ def test_no_paths(self, mock_warning: MagicMock, mock_exists: MagicMock): @patch("pathlib.Path.is_absolute") @patch("pathlib.Path.exists") - @patch("aind_data_schema.utils.validators.logger") + @patch("biodata_schema.utils.validators.logger") def test_absolute_path_raises(self, mock_warning: MagicMock, mock_is_absolute: MagicMock, mock_exists: MagicMock): """Test when the path is absolute""" mock_is_absolute.return_value = True @@ -497,7 +497,7 @@ def test_absolute_path_raises(self, mock_warning: MagicMock, mock_is_absolute: M @patch("pathlib.Path.is_absolute", return_value=False) @patch("pathlib.Path.exists", returns_value=True) - @patch("aind_data_schema.utils.validators.logger") + @patch("biodata_schema.utils.validators.logger") def test_relative_path_no_warning( self, mock_warning: MagicMock, mock_is_absolute: MagicMock, mock_exists: MagicMock ): diff --git a/tests/test_wrappers.py b/tests/test_wrappers.py index 643160443..21b20f33a 100644 --- a/tests/test_wrappers.py +++ b/tests/test_wrappers.py @@ -2,7 +2,7 @@ from pathlib import Path, PureWindowsPath -from aind_data_schema.components.wrappers import AssetPath +from biodata_schema.components.wrappers import AssetPath class TestAssetPath: From 54fd36afcbb4e81967b923ce4214d7ef60f9f633 Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Fri, 11 Sep 2026 15:05:29 -0700 Subject: [PATCH 17/38] chore: expand allowed pydantic versions --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fa2bbadec..8ff4d455a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ dynamic = ["version"] dependencies = [ 'biodata-models>=1.0.1,<2', - 'pydantic>=2.7, <2.12', + 'pydantic>=2.7, <3', 'pydantic-extra-types', 'tzdata', ] From 4cc03069d57892abb4a46b4bf0a7edcf65430a0e Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Fri, 11 Sep 2026 15:09:54 -0700 Subject: [PATCH 18/38] chore: bump lockfile --- uv.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uv.lock b/uv.lock index ff8236b7e..7c51bc1ad 100644 --- a/uv.lock +++ b/uv.lock @@ -133,7 +133,7 @@ docs = [ [package.metadata] requires-dist = [ { name = "biodata-models", specifier = ">=1.0.1,<2" }, - { name = "pydantic", specifier = ">=2.7,<2.12" }, + { name = "pydantic", specifier = ">=2.7,<3" }, { name = "pydantic-extra-types" }, { name = "tzdata" }, ] From c5fc9faa4886bddcced998adc88f9213243a791d Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Fri, 11 Sep 2026 15:30:17 -0700 Subject: [PATCH 19/38] fix: typo --- src/biodata_schema/components/reagent.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/biodata_schema/components/reagent.py b/src/biodata_schema/components/reagent.py index c08c57740..31e7ecd8f 100644 --- a/src/biodata_schema/components/reagent.py +++ b/src/biodata_schema/components/reagent.py @@ -95,7 +95,7 @@ class FluorescentStain(Reagent): class FluorescentReagent(Reagent): """Description of an inherently fluorescent marker. Note this class will change name in v3.0""" - stain_type: StainType = Field(..., type="Stain type") + stain_type: StainType = Field(..., title="Stain type") excitation_wavelength: int = Field(..., title="Excitation wavelength (nm)") emission_wavelength: int = Field(..., title="Emission wavelength (nm)") wavelength_unit: SizeUnit = Field(default=SizeUnit.NM, title="Excitation wavelength unit") From 78e810b251d559845b94c2ca57e49858baf0376b Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Fri, 11 Sep 2026 15:30:29 -0700 Subject: [PATCH 20/38] chore: repair a validator that caused unnecessary warnings --- src/biodata_schema/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/biodata_schema/base.py b/src/biodata_schema/base.py index 7eefbaeaf..0a2389e68 100644 --- a/src/biodata_schema/base.py +++ b/src/biodata_schema/base.py @@ -157,7 +157,7 @@ def unit_validator(self): if any of variable_* are set """ # Accumulate a dictionary mapping variable : unit/unit_value - values = self.model_dump().items() + values = self.__dict__.items() for unit_name, unit_value in values: if "_unit" in unit_name and not unit_value: var_name = unit_name.rsplit("_unit", 1)[0] From a8ee281fb58bde32a6d5e834ee35900b77d43908 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 11 Sep 2026 22:31:11 +0000 Subject: [PATCH 21/38] bump schema version [skip actions] --- schemas/metadata_schema.json | 10 +++++----- schemas/procedures_schema.json | 6 +++--- src/biodata_schema/core/metadata.py | 2 +- src/biodata_schema/core/procedures.py | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/schemas/metadata_schema.json b/schemas/metadata_schema.json index b816f25c3..5d846ece0 100644 --- a/schemas/metadata_schema.json +++ b/schemas/metadata_schema.json @@ -16636,7 +16636,7 @@ }, "stain_type": { "$ref": "#/$defs/StainType", - "type": "Stain type" + "title": "Stain type" }, "excitation_wavelength": { "title": "Excitation wavelength (nm)", @@ -37277,8 +37277,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.2", + "default": "3.0.2", "title": "Schema Version", "type": "string" }, @@ -51699,8 +51699,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.2", + "default": "3.0.2", "title": "Schema Version", "type": "string" }, diff --git a/schemas/procedures_schema.json b/schemas/procedures_schema.json index ebe871479..113d2a0e3 100644 --- a/schemas/procedures_schema.json +++ b/schemas/procedures_schema.json @@ -4737,7 +4737,7 @@ }, "stain_type": { "$ref": "#/$defs/StainType", - "type": "Stain type" + "title": "Stain type" }, "excitation_wavelength": { "title": "Excitation wavelength (nm)", @@ -16833,8 +16833,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.2", + "default": "3.0.2", "title": "Schema Version", "type": "string" }, diff --git a/src/biodata_schema/core/metadata.py b/src/biodata_schema/core/metadata.py index 17e9a1bca..345db71b9 100644 --- a/src/biodata_schema/core/metadata.py +++ b/src/biodata_schema/core/metadata.py @@ -74,7 +74,7 @@ class Metadata(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/metadata.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") + schema_version: SkipValidation[Literal["3.0.2"]] = Field(default="3.0.2") name: str = Field( ..., description="Name of the data asset.", diff --git a/src/biodata_schema/core/procedures.py b/src/biodata_schema/core/procedures.py index 3c119fdf3..ffbb29467 100644 --- a/src/biodata_schema/core/procedures.py +++ b/src/biodata_schema/core/procedures.py @@ -25,7 +25,7 @@ class Procedures(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/procedures.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") + schema_version: SkipValidation[Literal["3.0.2"]] = Field(default="3.0.2") subject_id: str = Field( ..., description="Unique identifier for the subject of data acquisition", From 846fb9ed9b2a90c18d80059bf82fa7306a42b805 Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Sat, 12 Sep 2026 09:02:01 -0700 Subject: [PATCH 22/38] fix: repair a bug so that only Device/Assembly names are checked for duplicates --- V3-MIGRATION-GUIDE.md | 6 +++-- src/biodata_schema/components/devices.py | 28 +++++++++++------------- src/biodata_schema/core/instrument.py | 14 ++++++------ tests/test_instrument.py | 24 ++++++++++++++++++++ 4 files changed, 48 insertions(+), 24 deletions(-) diff --git a/V3-MIGRATION-GUIDE.md b/V3-MIGRATION-GUIDE.md index b075855e0..7fcbda38f 100644 --- a/V3-MIGRATION-GUIDE.md +++ b/V3-MIGRATION-GUIDE.md @@ -307,8 +307,10 @@ Give unique names to: You can reference one shared object from multiple places. The validator compares object values before it reports a duplicate name. -The validator skips `Software` names. You can reuse a package across devices, and a software -name can match a device name. For example, this remains valid: +The validator only checks names on `Device` and `Assembly` objects and their subclasses. +Names on coordinate systems, software, and other non-device/non-assembly objects are +ignored. You can reuse a package across devices, and a software name can match a device +name. For example, this remains valid: ```python Software(name="Bonsai", version="2.5") diff --git a/src/biodata_schema/components/devices.py b/src/biodata_schema/components/devices.py index 4898ab667..5debf02d2 100644 --- a/src/biodata_schema/components/devices.py +++ b/src/biodata_schema/components/devices.py @@ -72,6 +72,12 @@ class CatheterDesign(str, Enum): NA = "N/A" +class Assembly(DataModel): + """Base class for named assemblies""" + + name: str = Field(..., title="Assembly name") + + class Device(DataModel): """Generic device""" @@ -273,10 +279,9 @@ def validate_other(cls, value: Optional[str], info: ValidationInfo) -> Optional[ return value -class CameraAssembly(DevicePosition): +class CameraAssembly(DevicePosition, Assembly): """Named assembly of a camera and lens (and optionally a filter)""" - name: str = Field(..., title="Camera assembly name") target: CameraTarget = Field(..., title="Camera target") camera: Camera = Field(..., title="Camera") lens: Lens = Field(..., title="Lens") @@ -375,11 +380,9 @@ class Lamp(Device): temperature_unit: Optional[TemperatureUnit] = Field(default=None, title="Temperature unit") -class LightAssembly(DataModel): +class LightAssembly(Assembly): """Named assembly of a light source and lens""" - # required fields - name: str = Field(..., title="Light assembly name") light: Discriminated[Laser | LightEmittingDiode | Lamp] lens: Lens = Field(..., title="Lens") @@ -433,10 +436,9 @@ class FiberPatchCord(Device): photobleaching_date: Optional[date] = Field(default=None, title="Photobleaching date") -class LaserAssembly(DataModel): +class LaserAssembly(Assembly): """Named assembly combining a manipulator, lasers, collimator, and fibers""" - name: str = Field(..., title="Laser assembly name") manipulator: Manipulator = Field(..., title="Manipulator") lasers: List[Laser] = Field(..., title="Lasers connected to this module") collimator: Device = Field(..., title="Collimator") @@ -450,10 +452,9 @@ class EphysProbe(Device): headstage: Optional[Device] = Field(default=None, title="Headstage for this probe") -class EphysAssembly(DataModel): +class EphysAssembly(Assembly): """Named assembly for combining a manipulator and extracellular ephys probes""" - name: str = Field(..., title="Ephys assembly name") manipulator: Manipulator = Field(..., title="Manipulator") probes: List[EphysProbe] = Field(..., title="Probes that are held by this module") @@ -470,18 +471,16 @@ class FiberProbe(Device): length_unit: SizeUnit = Field(default=SizeUnit.MM, title="Length unit") -class FiberAssembly(DataModel): +class FiberAssembly(Assembly): """Module for inserted fiber photometry recording""" - name: str = Field(..., title="Fiber assembly name") manipulator: Manipulator = Field(..., title="Manipulator") fibers: List[FiberProbe] = Field(..., title="Probes that are held by this module") -class PatchClampEphysAssembly(DataModel): +class PatchClampEphysAssembly(Assembly): """Assembly combining a manipulator and headstage used for Patch clamp ephys""" - name: str = Field(..., title="Patch clamp Assembly Name") manipulator: Manipulator = Field(..., title="Manipulator") headstage: Device = Field(..., title="Headstage") @@ -624,10 +623,9 @@ class LickSpout(Device): lick_sensor_type: Optional[LickSensorType] = Field(default=None, title="Lick sensor type") -class LickSpoutAssembly(DataModel): +class LickSpoutAssembly(Assembly): """Description of multiple lick spouts, possibly mounted on a stage""" - name: str = Field(..., title="Lick spout assembly name") lick_spouts: List[LickSpout] = Field(..., title="Water spouts") motorized_stage: Optional[MotorizedStage] = Field(default=None, title="Motorized stage") diff --git a/src/biodata_schema/core/instrument.py b/src/biodata_schema/core/instrument.py index 58db22b9d..823ff9908 100644 --- a/src/biodata_schema/core/instrument.py +++ b/src/biodata_schema/core/instrument.py @@ -14,6 +14,7 @@ AdditionalImagingDevice, AirPuffDevice, Arena, + Assembly, Camera, CameraAssembly, CameraTarget, @@ -53,7 +54,6 @@ Tube, Wheel, ) -from biodata_schema.components.identifiers import Software from biodata_schema.components.measurements import CALIBRATIONS from biodata_schema.utils.merge import merge_notes, merge_optional_list, merge_str_alphabetical from biodata_schema.utils.validators import recursive_get_all_names, recursive_get_named_objects @@ -203,7 +203,7 @@ def validate_cameras_other(self): @model_validator(mode="after") def validate_unique_component_names(self): - """Raise if a device name is used more than once + """Raise if a Device or Assembly name is used more than once Component names are how connections and configurations refer to devices, so a repeated name is ambiguous. Two things are rejected: two top-level components @@ -211,21 +211,21 @@ def validate_unique_component_names(self): A single shared object referenced from more than one place is not a collision, so objects are compared by value first. - ``Software`` names are exempt entirely: software is a descriptor rather than an - addressable device, and the same package is routinely recorded on several - devices at once. + Only ``Device`` and ``Assembly`` instances and their subclasses are + addressable components. Names on other model types, such as software and + coordinate systems, are not considered. """ top_level = [ component.name for component in self.components - if getattr(component, "name", None) and not isinstance(component, Software) + if isinstance(component, (Device, Assembly)) and getattr(component, "name", None) ] duplicates = {name for name in top_level if top_level.count(name) > 1} by_name = {} for component in self.components: for name, obj in recursive_get_named_objects(component): - if isinstance(obj, Software): + if not isinstance(obj, (Device, Assembly)): continue distinct = by_name.setdefault(name, []) if not any(obj == other for other in distinct): diff --git a/tests/test_instrument.py b/tests/test_instrument.py index 742f213c1..ab96331fa 100644 --- a/tests/test_instrument.py +++ b/tests/test_instrument.py @@ -13,6 +13,7 @@ from pydantic import ValidationError from biodata_schema.components.connections import Connection +from biodata_schema.components.coordinates import CoordinateSystem from biodata_schema.components.devices import ( Camera, CameraAssembly, @@ -888,6 +889,29 @@ def _camera(name): ) assert inst.validate_unique_component_names() is inst + def test_coordinate_system_names_ignored(self): + """Names on coordinate systems are not component collisions""" + inst = Instrument.model_construct( + instrument_id=ephys_instrument.instrument_id, + modification_date=ephys_instrument.modification_date, + modalities=ephys_instrument.modalities, + global_coordinate_system=ephys_instrument.global_coordinate_system, + components=[ + CameraAssembly.model_construct( + name="Camera assembly one", + local_coordinate_system=CoordinateSystem.model_construct(name="Shared coordinate system"), + ), + CameraAssembly.model_construct( + name="Camera assembly two", + local_coordinate_system=CoordinateSystem.model_construct(name="Shared coordinate system"), + ), + ], + connections=[], + calibrations=[], + ) + + assert inst.validate_unique_component_names() is inst + def test_distinct_objects_sharing_a_name_rejected(self): """Two different devices with the same name are still a collision""" inst = Instrument.model_construct( From 91a45b535028bb7314f9e7afa34676a598c8b428 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 12 Sep 2026 16:02:57 +0000 Subject: [PATCH 23/38] bump schema version [skip actions] --- schemas/instrument_schema.json | 24 +++++++++++------------ schemas/metadata_schema.json | 28 +++++++++++++-------------- src/biodata_schema/core/instrument.py | 2 +- src/biodata_schema/core/metadata.py | 2 +- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/schemas/instrument_schema.json b/schemas/instrument_schema.json index bfc90dc22..0f3c427b0 100644 --- a/schemas/instrument_schema.json +++ b/schemas/instrument_schema.json @@ -3079,6 +3079,10 @@ "title": "Object Type", "type": "string" }, + "name": { + "title": "Assembly name", + "type": "string" + }, "relative_position": { "items": { "$ref": "#/$defs/AnatomicalRelative" @@ -3136,10 +3140,6 @@ "description": "Position and orientation of the device in the instrument global coordinate system", "title": "Local to global transform" }, - "name": { - "title": "Camera assembly name", - "type": "string" - }, "target": { "$ref": "#/$defs/CameraTarget", "title": "Camera target" @@ -3164,8 +3164,8 @@ } }, "required": [ - "relative_position", "name", + "relative_position", "target", "camera", "lens" @@ -8191,7 +8191,7 @@ "type": "string" }, "name": { - "title": "Ephys assembly name", + "title": "Assembly name", "type": "string" }, "manipulator": { @@ -8845,7 +8845,7 @@ "type": "string" }, "name": { - "title": "Fiber assembly name", + "title": "Assembly name", "type": "string" }, "manipulator": { @@ -13031,7 +13031,7 @@ "type": "string" }, "name": { - "title": "Laser assembly name", + "title": "Assembly name", "type": "string" }, "manipulator": { @@ -14320,7 +14320,7 @@ "type": "string" }, "name": { - "title": "Lick spout assembly name", + "title": "Assembly name", "type": "string" }, "lick_spouts": { @@ -20442,7 +20442,7 @@ "type": "string" }, "name": { - "title": "Patch clamp Assembly Name", + "title": "Assembly name", "type": "string" }, "manipulator": { @@ -32793,8 +32793,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.2", + "default": "3.0.2", "title": "Schema Version", "type": "string" }, diff --git a/schemas/metadata_schema.json b/schemas/metadata_schema.json index 5d846ece0..619b57e82 100644 --- a/schemas/metadata_schema.json +++ b/schemas/metadata_schema.json @@ -4568,6 +4568,10 @@ "title": "Object Type", "type": "string" }, + "name": { + "title": "Assembly name", + "type": "string" + }, "relative_position": { "items": { "$ref": "#/$defs/AnatomicalRelative" @@ -4625,10 +4629,6 @@ "description": "Position and orientation of the device in the instrument global coordinate system", "title": "Local to global transform" }, - "name": { - "title": "Camera assembly name", - "type": "string" - }, "target": { "$ref": "#/$defs/CameraTarget", "title": "Camera target" @@ -4653,8 +4653,8 @@ } }, "required": [ - "relative_position", "name", + "relative_position", "target", "camera", "lens" @@ -13189,7 +13189,7 @@ "type": "string" }, "name": { - "title": "Ephys assembly name", + "title": "Assembly name", "type": "string" }, "manipulator": { @@ -14033,7 +14033,7 @@ "type": "string" }, "name": { - "title": "Fiber assembly name", + "title": "Assembly name", "type": "string" }, "manipulator": { @@ -20919,8 +20919,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.2", + "default": "3.0.2", "title": "Schema Version", "type": "string" }, @@ -22624,7 +22624,7 @@ "type": "string" }, "name": { - "title": "Laser assembly name", + "title": "Assembly name", "type": "string" }, "manipulator": { @@ -23991,7 +23991,7 @@ "type": "string" }, "name": { - "title": "Lick spout assembly name", + "title": "Assembly name", "type": "string" }, "lick_spouts": { @@ -34332,7 +34332,7 @@ "type": "string" }, "name": { - "title": "Patch clamp Assembly Name", + "title": "Assembly name", "type": "string" }, "manipulator": { @@ -51699,8 +51699,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.2", - "default": "3.0.2", + "const": "3.0.3", + "default": "3.0.3", "title": "Schema Version", "type": "string" }, diff --git a/src/biodata_schema/core/instrument.py b/src/biodata_schema/core/instrument.py index 823ff9908..c2272b6b3 100644 --- a/src/biodata_schema/core/instrument.py +++ b/src/biodata_schema/core/instrument.py @@ -78,7 +78,7 @@ class Instrument(DataCoreModel): # metametadata _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/instrument.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") + schema_version: SkipValidation[Literal["3.0.2"]] = Field(default="3.0.2") # instrument definition location: Optional[str] = Field(default=None, title="Location", description="Location of the instrument") diff --git a/src/biodata_schema/core/metadata.py b/src/biodata_schema/core/metadata.py index 345db71b9..291f04d5e 100644 --- a/src/biodata_schema/core/metadata.py +++ b/src/biodata_schema/core/metadata.py @@ -74,7 +74,7 @@ class Metadata(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/metadata.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.2"]] = Field(default="3.0.2") + schema_version: SkipValidation[Literal["3.0.3"]] = Field(default="3.0.3") name: str = Field( ..., description="Name of the data asset.", From 736d9968e236b977baef79e90298043f25ce4733 Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Sat, 12 Sep 2026 09:13:09 -0700 Subject: [PATCH 24/38] chore: use matrix resolution to find min/max of packages --- .github/workflows/run_dev_tests.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/run_dev_tests.yml b/.github/workflows/run_dev_tests.yml index 85e19e4aa..6e5abec41 100644 --- a/.github/workflows/run_dev_tests.yml +++ b/.github/workflows/run_dev_tests.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [ '3.11' ] + python-version: [ '3.12' ] steps: - uses: actions/checkout@v3 - name: Install uv @@ -29,6 +29,7 @@ jobs: strategy: matrix: python-version: [ '3.10', '3.11', '3.12', '3.13' ] + resolution: [ 'lowest-direct', 'highest' ] steps: - uses: actions/checkout@v3 - name: Install uv @@ -36,6 +37,6 @@ jobs: with: python-version: ${{ matrix.python-version }} - name: Install dependencies - run: uv sync --locked --group dev --group docs + run: uv sync --group dev --group docs --resolution ${{ matrix.resolution }} - name: Run tests and coverage run: uv run pytest --cov=biodata_schema --cov=tests --cov-report=term-missing --cov-fail-under=100 From f0782986874f7b7b0617d1fcf08e8ffedef6b240 Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Sat, 12 Sep 2026 09:23:38 -0700 Subject: [PATCH 25/38] docs: update docs --- .readthedocs.yaml | 16 +-- docs/source/acquisition.md | 1 - docs/source/biodata_models/devices.md | 1 + docs/source/biodata_models/organizations.md | 125 +++++++++--------- docs/source/biodata_models/reagent.md | 1 + docs/source/biodata_models/species.md | 31 +++-- docs/source/components/configs.md | 6 - docs/source/components/devices.md | 38 +++--- docs/source/components/identifiers.md | 2 +- docs/source/components/reagent.md | 2 +- docs/source/components/specimen_procedures.md | 7 - docs/source/components/stimulus.md | 28 ---- docs/source/components/subject_procedures.md | 1 - docs/source/components/subjects.md | 1 - docs/source/components/surgery_procedures.md | 1 - docs/source/instrument.md | 1 - docs/source/model.md | 4 +- docs/source/procedures.md | 1 - docs/source/processing.md | 2 +- 19 files changed, 115 insertions(+), 154 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index f672bdae3..ec58f06b9 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -1,23 +1,23 @@ version: 2 build: - os: ubuntu-22.04 + os: ubuntu-24.04 tools: python: "3.13" nodejs: "20" jobs: - # Build the interactive React Flow schema diagram bundle into - # docs/source/_static/ before Sphinx runs (the bundle is git-ignored and - # regenerated here; the JSON it fetches is generated by conf.py). + # Build the interactive React Flow schema diagram before Sphinx runs. pre_build: - npm --prefix diagram-app ci - npm --prefix diagram-app run build - pre_install: - - python -m pip install uv - - uv sync --locked --group dev --group docs python: - install: [] + install: + - method: uv + command: sync + groups: + - dev + - docs sphinx: # Path to your Sphinx configuration file. diff --git a/docs/source/acquisition.md b/docs/source/acquisition.md index 6e98ae999..289aa666c 100644 --- a/docs/source/acquisition.md +++ b/docs/source/acquisition.md @@ -87,7 +87,6 @@ while the StimulusEpoch represents all stimuli being presented. | `instrument_id` | `Optional[str]` | Instrument ID (Should match the Instrument.instrument_id. Required when instrument metadata is available.) | | `acquisition_type` | `str` | Acquisition type (Descriptive string detailing the type of acquisition, should be consistent across similar acquisitions for the same experiment.) | | `notes` | `Optional[str]` | Notes | -| `coordinate_system` | Optional[[CoordinateSystem](components/coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use global_coordinate_system instead. Coordinate system (Origin and axis definitions for determining the configured position of devices during acquisition. Required when coordinates are provided within the Acquisition) | | `global_coordinate_system` | Optional[[CoordinateSystem](components/coordinates.md#coordinatesystem)] | Global coordinate system (Origin and axis definitions for determining the configured position of devices during acquisition. Required when coordinates are provided within the Acquisition) | | `calibrations` | List[[Calibration](components/measurements.md#calibration) or [VolumeCalibration](components/measurements.md#volumecalibration) or [PowerCalibration](components/measurements.md#powercalibration)] | Calibrations (List of calibration measurements taken prior to acquisition.) | | `maintenance` | List[[Maintenance](components/measurements.md#maintenance)] | Maintenance (List of maintenance on instrument prior to acquisition.) | diff --git a/docs/source/biodata_models/devices.md b/docs/source/biodata_models/devices.md index e93c4e762..4724eaa2d 100644 --- a/docs/source/biodata_models/devices.md +++ b/docs/source/biodata_models/devices.md @@ -213,6 +213,7 @@ Probe model name |------|-------| | `MI_ULED_PROBE` | `Michigan uLED Probe (Version 1)` | | `MP_PHOTONIC_V1` | `MPI Photonic Probe (Version 1)` | +| `MP_PHOTONIC_V2` | `MPI Photonic Probe (Version 2)` | | `NP_OPTO_DEMONSTRATOR` | `Neuropixels Opto (Demonstrator)` | | `NP_UHD_FIXED` | `Neuropixels UHD (Fixed)` | | `NP_UHD_SWITCHABLE` | `Neuropixels UHD (Switchable)` | diff --git a/docs/source/biodata_models/organizations.md b/docs/source/biodata_models/organizations.md index 7a5e7a8b6..6f1e1d1f2 100644 --- a/docs/source/biodata_models/organizations.md +++ b/docs/source/biodata_models/organizations.md @@ -9,127 +9,130 @@ Organization | Name | name | abbreviation | registry | registry_identifier | |------|------|------|------|------| | `AA_OPTO_ELECTRONIC` | `AA Opto Electronic` | `None` | `None` | `None` | -| `ABCAM` | `Abcam` | `None` | `Research Organization Registry (ROR)` | `02e1wjw63` | -| `ADDGENE` | `Addgene` | `None` | `Research Organization Registry (ROR)` | `01nn1pw54` | -| `AI` | `Allen Institute` | `AI` | `Research Organization Registry (ROR)` | `03cpe7c52` | -| `AIBS` | `Allen Institute for Brain Science` | `AIBS` | `Research Organization Registry (ROR)` | `00dcv1019` | +| `ABCAM` | `Abcam` | `None` | `Registry.ROR` | `02e1wjw63` | +| `ADDGENE` | `Addgene` | `None` | `Registry.ROR` | `01nn1pw54` | +| `AI` | `Allen Institute` | `AI` | `Registry.ROR` | `03cpe7c52` | +| `AIBS` | `Allen Institute for Brain Science` | `AIBS` | `Registry.ROR` | `00dcv1019` | | `AILIPU` | `Ailipu Technology Co` | `Ailipu` | `None` | `None` | -| `AIND` | `Allen Institute for Neural Dynamics` | `AIND` | `Research Organization Registry (ROR)` | `04szwah67` | -| `AMS_OSRAM` | `ams OSRAM` | `None` | `Research Organization Registry (ROR)` | `045d0h266` | +| `AIND` | `Allen Institute for Neural Dynamics` | `AIND` | `Registry.ROR` | `04szwah67` | +| `AMS_OSRAM` | `ams OSRAM` | `None` | `Registry.ROR` | `045d0h266` | +| `ANTIBODIES_INC` | `Antibodies Inc` | `None` | `None` | `None` | | `ARDUINO` | `Arduino` | `None` | `None` | `None` | | `ARECONT_VISION_COSTAR` | `Arecont Vision Costar` | `None` | `None` | `None` | | `ASI` | `Applied Scientific Instrumentation` | `ASI` | `None` | `None` | -| `ASUS` | `ASUS` | `None` | `Research Organization Registry (ROR)` | `00bxkz165` | +| `ASUS` | `ASUS` | `None` | `Registry.ROR` | `00bxkz165` | | `BASLER` | `Basler` | `None` | `None` | `None` | -| `BCM` | `Baylor College of Medicine` | `BCM` | `Research Organization Registry (ROR)` | `02pttbw34` | -| `BROADCOM` | `Broadcom` | `None` | `Research Organization Registry (ROR)` | `035gt5s03` | -| `BRUKER` | `Bruker` | `None` | `Research Organization Registry (ROR)` | `04r739x86` | -| `BU` | `Boston University` | `BU` | `Research Organization Registry (ROR)` | `05qwgg493` | -| `CAJAL` | `Cajal Neuroscience` | `Cajal` | `Research Organization Registry (ROR)` | `05pdc0q70` | +| `BCM` | `Baylor College of Medicine` | `BCM` | `Registry.ROR` | `02pttbw34` | +| `BROADCOM` | `Broadcom` | `None` | `Registry.ROR` | `035gt5s03` | +| `BRUKER` | `Bruker` | `None` | `Registry.ROR` | `04r739x86` | +| `BU` | `Boston University` | `BU` | `Registry.ROR` | `05qwgg493` | +| `CAJAL` | `Cajal Neuroscience` | `Cajal` | `Registry.ROR` | `05pdc0q70` | | `CAMBRIDGE_TECHNOLOGY` | `Cambridge Technology` | `None` | `None` | `None` | -| `CARL_ZEISS` | `Carl Zeiss` | `None` | `Research Organization Registry (ROR)` | `01xk5xs43` | -| `CHAMPALIMAUD` | `Champalimaud Foundation` | `Champalimaud` | `Research Organization Registry (ROR)` | `03g001n57` | +| `CARL_ZEISS` | `Carl Zeiss` | `None` | `Registry.ROR` | `01xk5xs43` | +| `CHAMPALIMAUD` | `Champalimaud Foundation` | `Champalimaud` | `Registry.ROR` | `03g001n57` | | `CHROMA` | `Chroma` | `None` | `None` | `None` | -| `COHERENT_SCIENTIFIC` | `Coherent Scientific` | `None` | `Research Organization Registry (ROR)` | `031tysd23` | -| `COLUMBIA` | `Columbia University` | `Columbia` | `Research Organization Registry (ROR)` | `00hj8s172` | +| `COHERENT_SCIENTIFIC` | `Coherent Scientific` | `None` | `Registry.ROR` | `031tysd23` | +| `COLUMBIA` | `Columbia University` | `Columbia` | `Registry.ROR` | `00hj8s172` | | `COMPUTAR` | `Computar` | `None` | `None` | `None` | | `CONOPTICS` | `Conoptics` | `None` | `None` | `None` | | `CRESTOPTICS` | `CrestOptics` | `None` | `None` | `None` | -| `CRL` | `Charles River Laboratories` | `CRL` | `Research Organization Registry (ROR)` | `03ndmsg87` | +| `CRL` | `Charles River Laboratories` | `CRL` | `Registry.ROR` | `03ndmsg87` | | `CUSTOM` | `Custom` | `None` | `None` | `None` | -| `CZI` | `Chan Zuckerberg Initiative` | `CZI` | `Research Organization Registry (ROR)` | `02qenvm24` | +| `CZI` | `Chan Zuckerberg Initiative` | `CZI` | `Registry.ROR` | `02qenvm24` | | `DIGIKEY` | `DigiKey` | `None` | `None` | `None` | | `DODOTRONIC` | `Dodotronic` | `None` | `None` | `None` | -| `DORIC` | `Doric` | `None` | `Research Organization Registry (ROR)` | `059n53q30` | +| `DORIC` | `Doric` | `None` | `Registry.ROR` | `059n53q30` | | `EALING` | `Ealing` | `None` | `None` | `None` | -| `EDMUND_OPTICS` | `Edmund Optics` | `None` | `Research Organization Registry (ROR)` | `01j1gwp17` | -| `EMORY` | `Emory University` | `Emory` | `Research Organization Registry (ROR)` | `03czfpz43` | +| `EDMUND_OPTICS` | `Edmund Optics` | `None` | `Registry.ROR` | `01j1gwp17` | +| `EMORY` | `Emory University` | `Emory` | `Registry.ROR` | `03czfpz43` | | `EURESYS` | `Euresys` | `None` | `None` | `None` | -| `EXCELITAS_TECHNOLOGIES` | `Excelitas Technologies` | `None` | `Research Organization Registry (ROR)` | `01tpbbf75` | -| `FLIR` | `Teledyne FLIR` | `FLIR` | `Research Organization Registry (ROR)` | `01j1gwp17` | +| `EXCELITAS_TECHNOLOGIES` | `Excelitas Technologies` | `None` | `Registry.ROR` | `01tpbbf75` | +| `FLIR` | `Teledyne FLIR` | `FLIR` | `Registry.ROR` | `01j1gwp17` | | `FUJINON` | `Fujinon` | `None` | `None` | `None` | -| `HAMAMATSU` | `Hamamatsu` | `None` | `Research Organization Registry (ROR)` | `03natb733` | +| `HAMAMATSU` | `Hamamatsu` | `None` | `Registry.ROR` | `03natb733` | | `HAMILTON` | `Hamilton` | `None` | `None` | `None` | -| `HUST` | `Huazhong University of Science and Technology` | `HUST` | `Research Organization Registry (ROR)` | `00p991c53` | -| `IDT` | `Integrated DNA Technologies` | `IDT` | `Research Organization Registry (ROR)` | `009jvpf03` | -| `IMEC` | `Interuniversity Microelectronics Center` | `IMEC` | `Research Organization Registry (ROR)` | `02kcbn207` | +| `HUST` | `Huazhong University of Science and Technology` | `HUST` | `Registry.ROR` | `00p991c53` | +| `IDT` | `Integrated DNA Technologies` | `IDT` | `Registry.ROR` | `009jvpf03` | +| `IMEC` | `Interuniversity Microelectronics Center` | `IMEC` | `Registry.ROR` | `02kcbn207` | | `INFINITY_PHOTO_OPTICAL` | `Infinity Photo-Optical` | `None` | `None` | `None` | -| `INVITROGEN` | `Invitrogen` | `None` | `Research Organization Registry (ROR)` | `03x1ewr52` | +| `INVITROGEN` | `Invitrogen` | `None` | `Registry.ROR` | `03x1ewr52` | | `IR_ROBOT_CO` | `IR Robot Co` | `None` | `None` | `None` | | `ISL` | `ISL Products International` | `ISL` | `None` | `None` | | `ITEM` | `Item` | `None` | `None` | `None` | -| `JANELIA` | `Janelia Research Campus` | `Janelia` | `Research Organization Registry (ROR)` | `013sk6x84` | -| `JAX` | `Jackson Laboratory` | `JAX` | `Research Organization Registry (ROR)` | `021sy4w91` | -| `JENOPTIK` | `Jenoptik` | `None` | `Research Organization Registry (ROR)` | `05g7t5c49` | -| `JHU` | `Johns Hopkins University` | `JHU` | `Research Organization Registry (ROR)` | `00za53h95` | +| `JANELIA` | `Janelia Research Campus` | `Janelia` | `Registry.ROR` | `013sk6x84` | +| `JAX` | `Jackson Laboratory` | `JAX` | `Registry.ROR` | `021sy4w91` | +| `JENOPTIK` | `Jenoptik` | `None` | `Registry.ROR` | `05g7t5c49` | +| `JHU` | `Johns Hopkins University` | `JHU` | `Registry.ROR` | `00za53h95` | | `JULABO` | `Julabo` | `None` | `None` | `None` | -| `KENT_SCIENTIFIC_CORPORATION` | `Kent Scientific Corporation` | `None` | `Research Organization Registry (ROR)` | `03xkj6a08` | -| `KOWA` | `Kowa` | `None` | `Research Organization Registry (ROR)` | `03zbwg482` | +| `KENT_SCIENTIFIC_CORPORATION` | `Kent Scientific Corporation` | `None` | `Registry.ROR` | `03xkj6a08` | +| `KOWA` | `Kowa` | `None` | `Registry.ROR` | `03zbwg482` | | `LASOS` | `LASOS Lasertechnik` | `LASOS` | `None` | `None` | | `LEICA` | `Leica` | `None` | `None` | `None` | -| `LG` | `LG` | `None` | `Research Organization Registry (ROR)` | `02b948n83` | +| `LG` | `LG` | `None` | `Registry.ROR` | `02b948n83` | | `LIFECANVAS` | `LifeCanvas` | `None` | `None` | `None` | | `LUMENCOR` | `Lumencor` | `None` | `None` | `None` | | `LUMEN_DYNAMICS` | `Lumen Dynamics` | `None` | `None` | `None` | -| `MBF` | `MBF Bioscience` | `MBF` | `Research Organization Registry (ROR)` | `02zynam48` | -| `MEADOWLARK_OPTICS` | `Meadowlark Optics` | `None` | `Research Organization Registry (ROR)` | `00n8qbq54` | -| `MIBR` | `McGovern Institute for Brain Research` | `MIBR` | `Research Organization Registry (ROR)` | `05ymca674` | +| `MBF` | `MBF Bioscience` | `MBF` | `Registry.ROR` | `02zynam48` | +| `MEADOWLARK_OPTICS` | `Meadowlark Optics` | `None` | `Registry.ROR` | `00n8qbq54` | +| `MIBR` | `McGovern Institute for Brain Research` | `MIBR` | `Registry.ROR` | `05ymca674` | | `MIDOPT` | `Midwest Optical Systems, Inc.` | `MidOpt` | `None` | `None` | -| `MIT` | `Massachusetts Institute of Technology` | `MIT` | `Research Organization Registry (ROR)` | `042nb2s44` | +| `MIT` | `Massachusetts Institute of Technology` | `MIT` | `Registry.ROR` | `042nb2s44` | | `MITUTUYO` | `Mitutuyo` | `None` | `None` | `None` | | `MIT_BCS` | `MIT Department of Brain and Cognitive Sciences` | `MIT-BCS` | `None` | `None` | -| `MJFF` | `Michael J. Fox Foundation for Parkinson's Research` | `MJFF` | `Research Organization Registry (ROR)` | `03arq3225` | -| `MKS_NEWPORT` | `MKS Newport` | `None` | `Research Organization Registry (ROR)` | `00k17f049` | +| `MJFF` | `Michael J. Fox Foundation for Parkinson's Research` | `MJFF` | `Registry.ROR` | `03arq3225` | +| `MKS_NEWPORT` | `MKS Newport` | `None` | `Registry.ROR` | `00k17f049` | | `MOLECULAR_INSTRUMENTS` | `Molecular Instruments` | `None` | `None` | `None` | | `MPI` | `MPI` | `MPI` | `None` | `None` | -| `NATIONAL_INSTRUMENTS` | `National Instruments` | `None` | `Research Organization Registry (ROR)` | `026exqw73` | +| `NATIONAL_INSTRUMENTS` | `National Instruments` | `None` | `Registry.ROR` | `026exqw73` | | `NAVITAR` | `Navitar` | `None` | `None` | `None` | -| `NCCIH` | `National Center for Complementary and Integrative Health` | `NCCIH` | `Research Organization Registry (ROR)` | `00190t495` | +| `NCCIH` | `National Center for Complementary and Integrative Health` | `NCCIH` | `Registry.ROR` | `00190t495` | | `NEURALYNX` | `NeuraLynx` | `None` | `None` | `None` | | `NEUROPHOTOMETRICS` | `Neurophotometrics` | `None` | `None` | `None` | | `NEW_SCALE_TECHNOLOGIES` | `New Scale Technologies` | `None` | `None` | `None` | -| `NIKON` | `Nikon` | `None` | `Research Organization Registry (ROR)` | `0280y9h11` | -| `NIMH` | `National Institute of Mental Health` | `NIMH` | `Research Organization Registry (ROR)` | `04xeg9z08` | -| `NINDS` | `National Institute of Neurological Disorders and Stroke` | `NINDS` | `Research Organization Registry (ROR)` | `01s5ya894` | +| `NIKON` | `Nikon` | `None` | `Registry.ROR` | `0280y9h11` | +| `NIMH` | `National Institute of Mental Health` | `NIMH` | `Registry.ROR` | `04xeg9z08` | +| `NINDS` | `National Institute of Neurological Disorders and Stroke` | `NINDS` | `Registry.ROR` | `01s5ya894` | | `NRESEARCH_INC` | `NResearch Inc` | `None` | `None` | `None` | -| `NYU` | `New York University` | `NYU` | `Research Organization Registry (ROR)` | `0190ak572` | -| `OEPS` | `Open Ephys Production Site` | `OEPS` | `Research Organization Registry (ROR)` | `007rkz355` | -| `OLYMPUS` | `Olympus` | `None` | `Research Organization Registry (ROR)` | `02vcdte90` | +| `NYU` | `New York University` | `NYU` | `Registry.ROR` | `0190ak572` | +| `OEPS` | `Open Ephys Production Site` | `OEPS` | `Registry.ROR` | `007rkz355` | +| `OLYMPUS` | `Olympus` | `None` | `Registry.ROR` | `02vcdte90` | | `OPTOTUNE` | `Optotune` | `None` | `None` | `None` | | `OTHER` | `Other` | `None` | `None` | `None` | -| `OXFORD_INSTRUMENTS` | `Oxford Instruments` | `None` | `Research Organization Registry (ROR)` | `01age2z78` | +| `OXFORD_INSTRUMENTS` | `Oxford Instruments` | `None` | `Registry.ROR` | `01age2z78` | | `OXXIUS` | `Oxxius` | `None` | `None` | `None` | | `PLACID_INDUSTRIES` | `Placid Industries` | `None` | `None` | `None` | | `PRIZMATIX` | `Prizmatix` | `None` | `None` | `None` | | `QUANTIFI` | `Quantifi` | `None` | `None` | `None` | | `RASPBERRY_PI` | `Raspberry Pi` | `None` | `None` | `None` | +| `ROCKLAND` | `Rockland Immunochemicals` | `ROCKLAND` | `Registry.ROR` | `02z2r2t61` | | `SAME_SKY` | `Same Sky` | `None` | `None` | `None` | | `SCHNEIDER_KREUZNACH` | `Schneider-Kreuznach` | `None` | `None` | `None` | -| `SCIENTIFICA` | `Scientifica` | `None` | `Research Organization Registry (ROR)` | `00z72df47` | +| `SCIENTIFICA` | `Scientifica` | `None` | `Registry.ROR` | `00z72df47` | | `SECOND_ORDER_EFFECTS` | `Second Order Effects` | `None` | `None` | `None` | | `SEMROCK` | `Semrock` | `None` | `None` | `None` | | `SICGEN` | `SICGEN` | `None` | `None` | `None` | | `SIGMA_ALDRICH` | `Sigma-Aldrich` | `None` | `None` | `None` | -| `SIMONS_FOUNDATION` | `Simons Foundation` | `None` | `Research Organization Registry (ROR)` | `01cmst727` | -| `SPECTRA_PHYSICS` | `Spectra-Physics` | `None` | `Research Organization Registry (ROR)` | `02ad9kp97` | +| `SIMONS_FOUNDATION` | `Simons Foundation` | `None` | `Registry.ROR` | `01cmst727` | +| `SPECTRA_PHYSICS` | `Spectra-Physics` | `None` | `Registry.ROR` | `02ad9kp97` | | `SPINNAKER` | `Spinnaker` | `None` | `None` | `None` | -| `STANFORD_UNIVERSITY` | `Stanford University` | `None` | `Research Organization Registry (ROR)` | `00f54p054` | +| `STANFORD_UNIVERSITY` | `Stanford University` | `None` | `Registry.ROR` | `00f54p054` | +| `SYNAPTIC_SYSTEMS` | `Synaptic Systems` | `None` | `None` | `None` | | `TAMRON` | `Tamron` | `None` | `None` | `None` | | `TELEDYNE_VISION_SOLUTIONS` | `Teledyne Vision Solutions` | `None` | `None` | `None` | -| `TE_CONNECTIVITY` | `TE Connectivity` | `None` | `Research Organization Registry (ROR)` | `034frgp20` | -| `THERMO_FISHER_SCIENTIFIC` | `Thermo Fisher Scientific` | `None` | `Research Organization Registry (ROR)` | `03x1ewr52` | +| `TE_CONNECTIVITY` | `TE Connectivity` | `None` | `Registry.ROR` | `034frgp20` | +| `THERMO_FISHER_SCIENTIFIC` | `Thermo Fisher Scientific` | `None` | `Registry.ROR` | `03x1ewr52` | | `THE_IMAGING_SOURCE` | `The Imaging Source` | `None` | `None` | `None` | | `THE_LEE_COMPANY` | `The Lee Company` | `None` | `None` | `None` | -| `THORLABS` | `Thorlabs` | `None` | `Research Organization Registry (ROR)` | `04gsnvb07` | +| `THORLABS` | `Thorlabs` | `None` | `Registry.ROR` | `04gsnvb07` | | `TMC` | `Technical Manufacturing Corporation` | `TMC` | `None` | `None` | | `TRANSDUCER_TECHNIQUES` | `Transducer Techniques` | `None` | `None` | `None` | -| `TWCF` | `Templeton World Charity Foundation` | `TWCF` | `Research Organization Registry (ROR)` | `00x0z1472` | +| `TWCF` | `Templeton World Charity Foundation` | `TWCF` | `Registry.ROR` | `00x0z1472` | | `TYMPHANY` | `Tymphany` | `None` | `None` | `None` | -| `UCSD` | `University of California, San Diego` | `UCSD` | `Research Organization Registry (ROR)` | `0168r3w48` | +| `UCSD` | `University of California, San Diego` | `UCSD` | `Registry.ROR` | `0168r3w48` | | `UNKNOWN` | `Unknown` | `UNKNOWN` | `None` | `None` | -| `UPENN` | `University of Pennsylvania` | `UPENN` | `Research Organization Registry (ROR)` | `00b30xv10` | +| `UPENN` | `University of Pennsylvania` | `UPENN` | `Registry.ROR` | `00b30xv10` | | `VIEWORKS` | `Vieworks` | `None` | `None` | `None` | | `VORTRAN` | `Vortran` | `None` | `None` | `None` | -| `WPI` | `World Precision Intstruments` | `WPI` | `Research Organization Registry (ROR)` | `03st5df34` | +| `WPI` | `World Precision Intstruments` | `WPI` | `Registry.ROR` | `03st5df34` | diff --git a/docs/source/biodata_models/reagent.md b/docs/source/biodata_models/reagent.md index 9f5e14a60..54bf8a720 100644 --- a/docs/source/biodata_models/reagent.md +++ b/docs/source/biodata_models/reagent.md @@ -11,6 +11,7 @@ Fluorophores types | `ALEXA` | `Alexa Fluor` | | `ATTO` | `Atto` | | `CF` | `CF` | +| `CORALITE` | `CoraLite` | | `CYANINE` | `Cyanine` | | `DYLIGHT` | `DyLight` | diff --git a/docs/source/biodata_models/species.md b/docs/source/biodata_models/species.md index b2de0504a..4644d9589 100644 --- a/docs/source/biodata_models/species.md +++ b/docs/source/biodata_models/species.md @@ -8,18 +8,21 @@ Species | Name | name | common_name | registry | registry_identifier | |------|------|------|------|------| -| `ALPACA` | `Vicuna pacos` | `Alpaca` | `National Center for Biotechnology Information (NCBI)` | `NCBI:txid30538` | -| `CHICKEN` | `Gallus gallus` | `Chicken` | `National Center for Biotechnology Information (NCBI)` | `NCBI:txid9031` | -| `COMMON_MARMOSET` | `Callithrix jacchus` | `Common marmoset` | `National Center for Biotechnology Information (NCBI)` | `NCBI:txid9483` | -| `DONKEY` | `Equus asinus` | `Donkey` | `National Center for Biotechnology Information (NCBI)` | `NCBI:txid9793` | -| `EUROPEAN_RABBIT` | `Oryctolagus cuniculus` | `European rabbit` | `National Center for Biotechnology Information (NCBI)` | `NCBI:txid9986` | -| `GOAT` | `Carpa hircus` | `Goat` | `National Center for Biotechnology Information (NCBI)` | `NCBI:txid9925` | -| `GUINEA_PIG` | `Cavia porcellus` | `Guinea pig` | `National Center for Biotechnology Information (NCBI)` | `NCBI:txid10141` | -| `HOUSE_MOUSE` | `Mus musculus` | `House mouse` | `National Center for Biotechnology Information (NCBI)` | `NCBI:txid10090` | -| `HUMAN` | `Homo sapiens` | `Human` | `National Center for Biotechnology Information (NCBI)` | `NCBI:txid9606` | -| `LLAMA` | `Lama glama` | `Llama` | `National Center for Biotechnology Information (NCBI)` | `NCBI:txid9844` | -| `NORWAY_RAT` | `Rattus norvegicus` | `Norway rat` | `National Center for Biotechnology Information (NCBI)` | `NCBI:txid10116` | -| `RHESUS_MACAQUE` | `Macaca mulatta` | `Rhesus macaque` | `National Center for Biotechnology Information (NCBI)` | `NCBI:txid9544` | +| `ALPACA` | `Vicuna pacos` | `Alpaca` | `Registry.NCBI` | `NCBI:txid30538` | +| `CHICKEN` | `Gallus gallus` | `Chicken` | `Registry.NCBI` | `NCBI:txid9031` | +| `COMMON_MARMOSET` | `Callithrix jacchus` | `Common marmoset` | `Registry.NCBI` | `NCBI:txid9483` | +| `COMMON_SQUIRREL_MONKEY` | `Saimiri sciureus` | `Common squirrel monkey` | `Registry.NCBI` | `NCBI:txid9521` | +| `CRAB_EATING_MACAQUE` | `Macaca fascicularis` | `Crab-eating macaque` | `Registry.NCBI` | `NCBI:txid9541` | +| `DONKEY` | `Equus asinus` | `Donkey` | `Registry.NCBI` | `NCBI:txid9793` | +| `EUROPEAN_RABBIT` | `Oryctolagus cuniculus` | `European rabbit` | `Registry.NCBI` | `NCBI:txid9986` | +| `GOAT` | `Carpa hircus` | `Goat` | `Registry.NCBI` | `NCBI:txid9925` | +| `GUINEA_PIG` | `Cavia porcellus` | `Guinea pig` | `Registry.NCBI` | `NCBI:txid10141` | +| `HOUSE_MOUSE` | `Mus musculus` | `House mouse` | `Registry.NCBI` | `NCBI:txid10090` | +| `HUMAN` | `Homo sapiens` | `Human` | `Registry.NCBI` | `NCBI:txid9606` | +| `LLAMA` | `Lama glama` | `Llama` | `Registry.NCBI` | `NCBI:txid9844` | +| `NORWAY_RAT` | `Rattus norvegicus` | `Norway rat` | `Registry.NCBI` | `NCBI:txid10116` | +| `PIG_TAILED_MACAQUE` | `Macaca nemestrina` | `Pig-tailed macaque` | `Registry.NCBI` | `NCBI:txid9545` | +| `RHESUS_MACAQUE` | `Macaca mulatta` | `Rhesus macaque` | `Registry.NCBI` | `NCBI:txid9544` | ### Strain @@ -28,8 +31,8 @@ Strain | Name | name | species | registry | registry_identifier | |------|------|------|------|------| -| `BALB_C` | `BALB/c` | `Mus musculus` | `Mouse Genome Informatics (MGI)` | `MGI:2159737` | -| `C57BL_6J` | `C57BL/6J` | `Mus musculus` | `Mouse Genome Informatics (MGI)` | `MGI:3028467` | +| `BALB_C` | `BALB/c` | `Mus musculus` | `Registry.MGI` | `MGI:2159737` | +| `C57BL_6J` | `C57BL/6J` | `Mus musculus` | `Registry.MGI` | `MGI:3028467` | | `UNKNOWN` | `Unknown` | `Mus musculus` | `None` | `None` | diff --git a/docs/source/components/configs.md b/docs/source/components/configs.md index 2bf1b84f7..61d15983e 100644 --- a/docs/source/components/configs.md +++ b/docs/source/components/configs.md @@ -10,7 +10,6 @@ Air puff device configuration |-------|------|-------------| | `valence` | [Valence](#valence) | Valence | | `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Initial relative position | -| `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Entry coordinate, depth, and rotation in the Acquisition.global_coordinate_system) | | `pressure` | `Optional[float]` | Pressure | @@ -150,7 +149,6 @@ Configuration of an imaging instrument | Field | Type | Title (Description) | |-------|------|-------------| | `channels` | `List[typing.Annotated[biodata_schema.components.configs.Channel, FieldInfo(annotation=NoneType, required=True, discriminator='object_type')]]` | | -| `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Coordinate system (Required for ImageSPIM objects and when the imaging coordinate system differs from the Acquisition.coordinate_system) | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Local coordinate system (Required for ImageSPIM objects and when the imaging coordinate system differs from the Acquisition.global_coordinate_system) | | `images` | List[[PlanarImage](#planarimage) or [PlanarImageStack](#planarimagestack) or [ImageSPIM](#imagespim)] | Images | | `sampling_strategy` | Optional[[SamplingStrategy](#samplingstrategy)] | Sampling strategy | @@ -213,7 +211,6 @@ Lick spout acquisition information | `volume` | `float` | Volume | | `volume_unit` | [VolumeUnit](../biodata_models/units.md#volumeunit) | Volume unit | | `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Initial relative position | -| `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Entry coordinate, depth, and rotation in the Acquisition.global_coordinate_system) | | `notes` | `Optional[str]` | Notes | @@ -255,7 +252,6 @@ Configuration for a camera used in a New Scale modular insertion system | `module` | [MISModuleConfig](#mismoduleconfig) | Module | | `device_name` | `str` | Device name (Must match a device defined in the instrument.json) | | `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Relative position | -| `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Position and orientation of the device in the instrument global coordinate system) | @@ -315,7 +311,6 @@ Configuration of a manipulator | Field | Type | Title (Description) | |-------|------|-------------| -| `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | [CoordinateSystem](coordinates.md#coordinatesystem) | Device local coordinate system | | `local_axis_positions` | [Translation](coordinates.md#translation) | Local axis positions | | `device_name` | `str` | Device name (Must match a device defined in the instrument.json) | @@ -441,7 +436,6 @@ Configuration for a device inserted into a brain | `primary_targeted_structure` | [BrainAtlas](../biodata_models/brain_atlas.md#ccfv3) | Targeted structure | | `other_targeted_structure` | Optional[List[[BrainAtlas](../biodata_models/brain_atlas.md#ccfv3)]] | Other targeted structure | | `atlas_coordinate` | Optional[[AtlasCoordinate](coordinates.md#atlascoordinate)] | Target coordinate in Acquisition.atlas | -| `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system (Device coordinate system, defines un-rotated probe's orientation relative to the Acquisition.coordinate_system) | | `local_coordinate_system` | [CoordinateSystem](coordinates.md#coordinatesystem) | Device local coordinate system (Device coordinate system, defines un-rotated probe's orientation relative to the Acquisition.global_coordinate_system) | | `transform` | List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)] | Local to global transform (Entry coordinate, depth, and rotation in the Acquisition.global_coordinate_system) | | `dye` | `Optional[str]` | Dye | diff --git a/docs/source/components/devices.md b/docs/source/components/devices.md index 9b62e0e72..1e78ff309 100644 --- a/docs/source/components/devices.md +++ b/docs/source/components/devices.md @@ -39,9 +39,7 @@ Description of an arena | Field | Type | Title (Description) | |-------|------|-------------| -| `size` | [Scale](coordinates.md#scale) | **[DEPRECATED]** Use shape. 3D Size | -| `size_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | **[DEPRECATED]** Use shape. Size unit | -| `shape` | Optional[[Rectangle](geometry.md#rectangle) or [Circle](geometry.md#circle)] | Shape of the arena | +| `shape` | [Rectangle](geometry.md#rectangle) or [Circle](geometry.md#circle) | Shape of the arena | | `objects_in_arena` | List[[Device](#device)] | Objects in arena | | `name` | `str` | Device name | | `serial_number` | `Optional[str]` | Serial number | @@ -51,6 +49,15 @@ Description of an arena | `notes` | `Optional[str]` | Notes | +### Assembly + +Base class for named assemblies + +| Field | Type | Title (Description) | +|-------|------|-------------| +| `name` | `str` | Assembly name | + + ### Camera Camera Detector @@ -97,15 +104,14 @@ Named assembly of a camera and lens (and optionally a filter) | Field | Type | Title (Description) | |-------|------|-------------| -| `name` | `str` | Camera assembly name | | `target` | [CameraTarget](../biodata_models/devices.md#cameratarget) | Camera target | | `camera` | [Camera](#camera) | Camera | | `lens` | [Lens](#lens) | Lens | | `filter` | Optional[[Filter](#filter)] | Filter | | `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Relative position | -| `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Position and orientation of the device in the instrument global coordinate system) | +| `name` | `str` | Assembly name | ### Catheter @@ -181,7 +187,6 @@ Named input or output channel on a DAQ device | `channel_name` | `str` | DAQ channel name | | `channel_type` | [DaqChannelType](../biodata_models/devices.md#daqchanneltype) | DAQ channel type | | `port` | `Optional[int]` | DAQ port | -| `channel_index` | `Optional[int]` | **[DEPRECATED]** Use DAQChannel.port instead. DAQ channel index | | `sample_rate` | `Optional[decimal.Decimal]` | DAQ channel sample rate (Hz) | | `sample_rate_unit` | Optional[[FrequencyUnit](../biodata_models/units.md#frequencyunit)] | Sample rate unit | | `event_based_sampling` | `Optional[bool]` | Set to true if DAQ channel is sampled at irregular intervals | @@ -266,7 +271,6 @@ Position class for devices | Field | Type | Title (Description) | |-------|------|-------------| | `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Relative position | -| `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Position and orientation of the device in the instrument global coordinate system) | @@ -322,9 +326,7 @@ Description of an enclosure | Field | Type | Title (Description) | |-------|------|-------------| -| `size` | [Scale](coordinates.md#scale) | **[DEPRECATED]** Use shape. Size | -| `size_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | **[DEPRECATED]** Use shape. Size unit | -| `shape` | Optional[[Rectangle](geometry.md#rectangle) or [Circle](geometry.md#circle)] | Shape of the enclosure | +| `shape` | [Rectangle](geometry.md#rectangle) or [Circle](geometry.md#circle) | Shape of the enclosure | | `internal_material` | `Optional[str]` | Internal material | | `external_material` | `str` | External material | | `grounded` | `bool` | Grounded | @@ -344,9 +346,9 @@ Named assembly for combining a manipulator and extracellular ephys probes | Field | Type | Title (Description) | |-------|------|-------------| -| `name` | `str` | Ephys assembly name | | `manipulator` | [Manipulator](#manipulator) | Manipulator | | `probes` | List[[EphysProbe](#ephysprobe)] | Probes that are held by this module | +| `name` | `str` | Assembly name | ### EphysProbe @@ -371,9 +373,9 @@ Module for inserted fiber photometry recording | Field | Type | Title (Description) | |-------|------|-------------| -| `name` | `str` | Fiber assembly name | | `manipulator` | [Manipulator](#manipulator) | Manipulator | | `fibers` | List[[FiberProbe](#fiberprobe)] | Probes that are held by this module | +| `name` | `str` | Assembly name | ### FiberPatchCord @@ -499,11 +501,11 @@ Named assembly combining a manipulator, lasers, collimator, and fibers | Field | Type | Title (Description) | |-------|------|-------------| -| `name` | `str` | Laser assembly name | | `manipulator` | [Manipulator](#manipulator) | Manipulator | | `lasers` | List[[Laser](#laser)] | Lasers connected to this module | | `collimator` | [Device](#device) | Collimator | | `fiber` | [FiberPatchCord](#fiberpatchcord) | Fiber patch | +| `name` | `str` | Assembly name | ### Lens @@ -545,9 +547,9 @@ Description of multiple lick spouts, possibly mounted on a stage | Field | Type | Title (Description) | |-------|------|-------------| -| `name` | `str` | Lick spout assembly name | | `lick_spouts` | List[[LickSpout](#lickspout)] | Water spouts | | `motorized_stage` | Optional[[MotorizedStage](#motorizedstage)] | Motorized stage | +| `name` | `str` | Assembly name | ### LightAssembly @@ -556,10 +558,10 @@ Named assembly of a light source and lens | Field | Type | Title (Description) | |-------|------|-------------| -| `name` | `str` | Light assembly name | | `light` | [Laser](#laser) or [LightEmittingDiode](#lightemittingdiode) or [Lamp](#lamp) | | | `lens` | [Lens](#lens) | Lens | | `filter` | Optional[[Filter](#filter)] | Filter | +| `name` | `str` | Assembly name | ### LightEmittingDiode @@ -631,7 +633,6 @@ Description of visual display for visual stimuli | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | | `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Relative position | -| `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Position and orientation of the device in the instrument global coordinate system) | @@ -782,7 +783,7 @@ Multichannel electrophysiology DAQ | Field | Type | Title (Description) | |-------|------|-------------| | `ports` | List[[ProbePort](#probeport)] | Acquisition board ports | -| `data_interface` | `"USB"` | | +| `data_interface` | `"DataInterface.USB"` | | | `manufacturer` | [Organization](../biodata_models/organizations.md#organization) | | | `channels` | List[[DAQChannel](#daqchannel)] | DAQ channels | | `firmware_version` | `Optional[str]` | Firmware version | @@ -800,9 +801,9 @@ Assembly combining a manipulator and headstage used for Patch clamp ephys | Field | Type | Title (Description) | |-------|------|-------------| -| `name` | `str` | Patch clamp Assembly Name | | `manipulator` | [Manipulator](#manipulator) | Manipulator | | `headstage` | [Device](#device) | Headstage | +| `name` | `str` | Assembly name | ### PockelsCell @@ -900,7 +901,6 @@ Description of a speaker for auditory stimuli | `additional_settings` | `Optional[dict]` | Additional parameters | | `notes` | `Optional[str]` | Notes | | `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Relative position | -| `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Position and orientation of the device in the instrument global coordinate system) | diff --git a/docs/source/components/identifiers.md b/docs/source/components/identifiers.md index 120d0002a..c86f6d974 100644 --- a/docs/source/components/identifiers.md +++ b/docs/source/components/identifiers.md @@ -13,7 +13,7 @@ Code or script identifier | `version` | `Optional[str]` | Code version | | `commit_hash` | `Optional[str]` | Commit hash (Commit hash of the code.) | | `container` | Optional[[Container](#container)] | Container | -| `run_script` | `Optional[pathlib.Path]` | Run script (Path to run script) | +| `run_script` | `Optional[pathlib._local.Path]` | Run script (Path to run script) | | `language` | `Optional[str]` | Programming language (Programming language used) | | `language_version` | `Optional[str]` | Programming language version | | `input_data` | Optional[List[[DataAsset](#dataasset) or [CombinedData](#combineddata)]] | Input data (Input data used in the code or script) | diff --git a/docs/source/components/reagent.md b/docs/source/components/reagent.md index ce61c0a6f..181d7ddac 100644 --- a/docs/source/components/reagent.md +++ b/docs/source/components/reagent.md @@ -8,7 +8,7 @@ Description of an inherently fluorescent marker. Note this class will change nam | Field | Type | Title (Description) | |-------|------|-------------| -| `stain_type` | [StainType](../biodata_models/reagent.md#staintype) | | +| `stain_type` | [StainType](../biodata_models/reagent.md#staintype) | Stain type | | `excitation_wavelength` | `int` | Excitation wavelength (nm) | | `emission_wavelength` | `int` | Emission wavelength (nm) | | `wavelength_unit` | [SizeUnit](../biodata_models/units.md#sizeunit) | Excitation wavelength unit | diff --git a/docs/source/components/specimen_procedures.md b/docs/source/components/specimen_procedures.md index d145d1997..598f3a011 100644 --- a/docs/source/components/specimen_procedures.md +++ b/docs/source/components/specimen_procedures.md @@ -52,7 +52,6 @@ Description of a sectioning procedure performed on the coronal, sagittal, or tra | Field | Type | Title (Description) | |-------|------|-------------| -| `coordinate_system` | [CoordinateSystem](coordinates.md#coordinatesystem) or [Atlas](coordinates.md#atlas) or NoneType | **[DEPRECATED]** Deprecated: use global_coordinate_system instead. Sectioning coordinate system (Only required if different from the Procedures.coordinate_system) | | `global_coordinate_system` | [CoordinateSystem](coordinates.md#coordinatesystem) or [Atlas](coordinates.md#atlas) or NoneType | Sectioning global coordinate system (Only required if different from the Procedures.global_coordinate_system) | | `sections` | List[[Section](#section) or [PlanarSection](#planarsection)] | Planar sections (Use PlanarSection for new implementations) | | `section_orientation` | [SectionOrientation](#sectionorientation) | Sectioning orientation | @@ -67,12 +66,6 @@ Description of a single section of brain tissue. Slices should use PlanarSection | `output_specimen_id` | `str` | Specimen ID (Output IDs should generally follow the format {input_specimen_id}_###) | | `targeted_structure` | Optional[[BrainAtlas](../biodata_models/brain_atlas.md#ccfv3)] | Targeted structure | | `includes_surrounding_tissue` | `Optional[bool]` | Includes surrounding tissue (Whether the section includes additional tissue surrounding the targeted structure.) | -| `coordinate_system_name` | `Optional[str]` | **[DEPRECATED]** Use PlanarSection instead. Coordinate system name | -| `start_coordinate` | Optional[[Translation](coordinates.md#translation)] | **[DEPRECATED]** Use PlanarSection instead. Start coordinate | -| `end_coordinate` | Optional[[Translation](coordinates.md#translation)] | **[DEPRECATED]** Use PlanarSection instead. End coordinate | -| `thickness` | `Optional[float]` | **[DEPRECATED]** Use PlanarSection instead. Slice thickness | -| `thickness_unit` | Optional[[SizeUnit](../biodata_models/units.md#sizeunit)] | **[DEPRECATED]** Use PlanarSection instead. Slice thickness unit | -| `partial_slice` | Optional[List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)]] | **[DEPRECATED]** Use PlanarSection instead. Partial slice (If sectioning does not include the entire slice, indicate which part of the slice is retained.) | ### SectionOrientation diff --git a/docs/source/components/stimulus.md b/docs/source/components/stimulus.md index a3f12d6f3..49cd499a1 100644 --- a/docs/source/components/stimulus.md +++ b/docs/source/components/stimulus.md @@ -29,34 +29,6 @@ Types of bandpass filters for auditory stim | `OTHER` | `Other` | -### OlfactometerChannelConfig - -**DEPRECATED**: Use OlfactometerConfig in biodata_schema.components.configs - -Description of olfactometer channel configurations - -| Field | Type | Title (Description) | -|-------|------|-------------| -| `channel_index` | `int` | Channel index | -| `odorant` | `str` | Odorant | -| `odorant_dilution` | `decimal.Decimal` | Odorant dilution | -| `odorant_dilution_unit` | [ConcentrationUnit](../biodata_models/units.md#concentrationunit) | Dilution unit | -| `notes` | `Optional[str]` | Notes | - - -### OlfactoryStimulation - -**DEPRECATED**: Use StimulusEpoch.stimulus_name and OlfactometerConfig in biodata_schema.components.configs - -Description of a olfactory stimulus - -| Field | Type | Title (Description) | -|-------|------|-------------| -| `stimulus_name` | `str` | Stimulus name | -| `channels` | Optional[List[[OlfactometerChannelConfig](#olfactometerchannelconfig)]] | **[DEPRECATED]** Use OlfactometerConfig instead. Channels | -| `notes` | `Optional[str]` | **[DEPRECATED]** Use OlfactometerConfig instead. Notes | - - ### OptoStimulation Description of opto stimulation parameters diff --git a/docs/source/components/subject_procedures.md b/docs/source/components/subject_procedures.md index 9084e56dd..61a285411 100644 --- a/docs/source/components/subject_procedures.md +++ b/docs/source/components/subject_procedures.md @@ -61,7 +61,6 @@ Description of subject procedures performed at one time | `weight_unit` | [MassUnit](../biodata_models/units.md#massunit) | Weight unit | | `anaesthesia` | Optional[[Anaesthetic](surgery_procedures.md#anaesthetic)] | Anaesthesia | | `workstation_id` | `Optional[str]` | Workstation ID | -| `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use global_coordinate_system instead. Surgery coordinate system (Only required when the Surgery.coordinate_system is different from the Procedures.coordinate_system) | | `global_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Surgery global coordinate system (Only required when the Surgery.global_coordinate_system is different from the Procedures.global_coordinate_system) | | `measured_coordinates` | Optional[Dict[[Origin](../biodata_models/coordinates.md#origin), [Translation](coordinates.md#translation)]] | Measured coordinates (Coordinates measured during the procedure, for example Bregma and Lambda) | | `procedures` | List[[CatheterImplant](surgery_procedures.md#catheterimplant) or [Craniotomy](surgery_procedures.md#craniotomy) or [DeviceImplant](surgery_procedures.md#deviceimplant) or [ProbeImplant](surgery_procedures.md#probeimplant) or [Headframe](surgery_procedures.md#headframe) or [BrainInjection](surgery_procedures.md#braininjection) or [Injection](injection_procedures.md#injection) or [MyomatrixInsertion](surgery_procedures.md#myomatrixinsertion) or [GenericSurgeryProcedure](surgery_procedures.md#genericsurgeryprocedure) or [Perfusion](surgery_procedures.md#perfusion) or [SampleCollection](surgery_procedures.md#samplecollection)] | Procedures | diff --git a/docs/source/components/subjects.md b/docs/source/components/subjects.md index 118f46d24..cc800045b 100644 --- a/docs/source/components/subjects.md +++ b/docs/source/components/subjects.md @@ -8,7 +8,6 @@ Description of breeding info for subject | Field | Type | Title (Description) | |-------|------|-------------| -| `breeding_group` | `Optional[str]` | **[DEPRECATED]** Field will be removed in future releases. Breeding Group | | `maternal_id` | `str` | Maternal specimen ID | | `maternal_genotype` | `str` | Maternal genotype | | `paternal_id` | `str` | Paternal specimen ID | diff --git a/docs/source/components/surgery_procedures.md b/docs/source/components/surgery_procedures.md index 04a4889a3..329e7c5e8 100644 --- a/docs/source/components/surgery_procedures.md +++ b/docs/source/components/surgery_procedures.md @@ -79,7 +79,6 @@ Description of a generic device implant procedure | `implanted_device` | [Device](devices.md#device) | Implanted device | | `protocol_id` | `Optional[str]` | Protocol ID (DOI for protocols.io) | | `relative_position` | List[[AnatomicalRelative](../biodata_models/coordinates.md#anatomicalrelative)] | Relative position | -| `coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use local_coordinate_system instead. Device coordinate system | | `local_coordinate_system` | Optional[[CoordinateSystem](coordinates.md#coordinatesystem)] | Device local coordinate system | | `transform` | Optional[List[[Translation](coordinates.md#translation) or [Rotation](coordinates.md#rotation) or [Scale](coordinates.md#scale) or [Affine](coordinates.md#affine)]] | Local to global transform (Position and orientation of the device in the instrument global coordinate system) | diff --git a/docs/source/instrument.md b/docs/source/instrument.md index 5f93a7187..f08c14771 100644 --- a/docs/source/instrument.md +++ b/docs/source/instrument.md @@ -60,7 +60,6 @@ Description of an instrument | `modification_date` | `datetime.date` | Date of modification (Date of the last change to the instrument, hardware addition/removal, calibration, etc.) | | `modalities` | List[[Modality](biodata_models/modalities.md#modality)] | Modalities (List of all possible modalities that the instrument is capable of acquiring) | | `calibrations` | Optional[List[[Calibration](components/measurements.md#calibration) or [VolumeCalibration](components/measurements.md#volumecalibration) or [PowerCalibration](components/measurements.md#powercalibration)]] | Calibrations (List of calibration measurements takend during instrument setup and maintenance) | -| `coordinate_system` | Optional[[CoordinateSystem](components/coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use global_coordinate_system instead. Coordinate system (Origin and axis definitions for determining the position of the instrument's components) | | `global_coordinate_system` | [CoordinateSystem](components/coordinates.md#coordinatesystem) | Global coordinate system (Origin and axis definitions for determining the position of the instrument's components) | | `temperature_control` | `Optional[bool]` | Temperature control (Does the instrument maintain a constant temperature?) | | `notes` | `Optional[str]` | Notes | diff --git a/docs/source/model.md b/docs/source/model.md index af0103207..7637f393d 100644 --- a/docs/source/model.md +++ b/docs/source/model.md @@ -37,7 +37,7 @@ Description of model evaluation |-------|------|-------------| | `process_type` | [ProcessName](biodata_models/process_names.md#processname) | | | `performance` | List[[PerformanceMetric](model.md#performancemetric)] | Evaluation performance | -| `name` | `str` | Name (('Unique name of the processing step.', ' If not provided, the type will be used as the name.')) | +| `name` | `str` | Name (Unique name of the processing step. If not provided, the type will be used as the name.) | | `stage` | [ProcessStage](processing.md#processstage) | Processing stage | | `code` | [Code](components/identifiers.md#code) | Code (Code used for processing) | | `experimenters` | `List[str]` | Experimenters (People responsible for processing) | @@ -69,7 +69,7 @@ Description of model training | `train_performance` | List[[PerformanceMetric](model.md#performancemetric)] | Training performance (Performance on training set) | | `test_performance` | Optional[List[[PerformanceMetric](model.md#performancemetric)]] | Test performance (Performance on test data, evaluated during training) | | `test_evaluation_method` | `Optional[str]` | Test evaluation method (Approach to cross-validation or Train/test splitting) | -| `name` | `str` | Name (('Unique name of the processing step.', ' If not provided, the type will be used as the name.')) | +| `name` | `str` | Name (Unique name of the processing step. If not provided, the type will be used as the name.) | | `stage` | [ProcessStage](processing.md#processstage) | Processing stage | | `code` | [Code](components/identifiers.md#code) | Code (Code used for processing) | | `experimenters` | `List[str]` | Experimenters (People responsible for processing) | diff --git a/docs/source/procedures.md b/docs/source/procedures.md index 86e843f33..abd0b7a85 100644 --- a/docs/source/procedures.md +++ b/docs/source/procedures.md @@ -29,6 +29,5 @@ Description of all procedures performed on a subject, including surgeries, injec | `subject_id` | `str` | Subject ID (Unique identifier for the subject of data acquisition) | | `subject_procedures` | List[[Surgery](components/subject_procedures.md#surgery) or [Injection](components/injection_procedures.md#injection) or [NonSurgicalInjection](components/subject_procedures.md#nonsurgicalinjection) or [TrainingProtocol](components/subject_procedures.md#trainingprotocol) or [WaterRestriction](components/subject_procedures.md#waterrestriction) or [GenericSubjectProcedure](components/subject_procedures.md#genericsubjectprocedure)] | Subject Procedures (Procedures performed on a live subject) | | `specimen_procedures` | List[[SpecimenProcedure](components/specimen_procedures.md#specimenprocedure)] | Specimen Procedures (Procedures performed on tissue extracted after perfusion) | -| `coordinate_system` | Optional[[CoordinateSystem](components/coordinates.md#coordinatesystem)] | **[DEPRECATED]** Deprecated: use global_coordinate_system instead. Coordinate System (Origin and axis definitions for determining the configured position of devices implanted during procedures. Required when coordinates are provided within the Procedures) | | `global_coordinate_system` | Optional[[CoordinateSystem](components/coordinates.md#coordinatesystem)] | Global Coordinate System (Origin and axis definitions for determining the configured position of devices implanted during procedures. Required when coordinates are provided within the Procedures) | | `notes` | `Optional[str]` | Notes | diff --git a/docs/source/processing.md b/docs/source/processing.md index 1d94eeb4a..0901917fa 100644 --- a/docs/source/processing.md +++ b/docs/source/processing.md @@ -36,7 +36,7 @@ Description of a single processing step | Field | Type | Title (Description) | |-------|------|-------------| | `process_type` | [ProcessName](biodata_models/process_names.md#processname) | Process type | -| `name` | `str` | Name (('Unique name of the processing step.', ' If not provided, the type will be used as the name.')) | +| `name` | `str` | Name (Unique name of the processing step. If not provided, the type will be used as the name.) | | `stage` | [ProcessStage](processing.md#processstage) | Processing stage | | `code` | [Code](components/identifiers.md#code) | Code (Code used for processing) | | `experimenters` | `List[str]` | Experimenters (People responsible for processing) | From 0383a901623667faf4ae9a1ef7d47609ab69f2c1 Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Sat, 12 Sep 2026 15:26:00 -0700 Subject: [PATCH 26/38] fix: ensure Species.HUMAN works properly for HumanSubject --- src/biodata_schema/components/subjects.py | 6 +++--- tests/test_subjects.py | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/biodata_schema/components/subjects.py b/src/biodata_schema/components/subjects.py index 82002a828..749ca46a1 100644 --- a/src/biodata_schema/components/subjects.py +++ b/src/biodata_schema/components/subjects.py @@ -7,7 +7,7 @@ from biodata_models.organizations import Organization from biodata_models.pid_names import PIDName -from biodata_models.species import Species, SpeciesModel, Strain +from biodata_models.species import Species, Strain from pydantic import Field, field_validator, model_validator from pydantic_core.core_schema import ValidationInfo @@ -141,7 +141,7 @@ def validate_species_strain(self): class HumanSubject(DataModel): """Description of a human subject""" - species: SpeciesModel = Field(default=Species.HUMAN, title="Species") + species: Species.ONE_OF = Field(default=Species.HUMAN, title="Species") sex: Sex = Field(..., title="Sex") year_of_birth: int = Field(..., title="Year of birth") source: Organization.ONE_OF = Field( @@ -150,7 +150,7 @@ class HumanSubject(DataModel): title="Source", ) - @field_validator("species", mode="before") + @field_validator("species", mode="after") def validate_species_is_human(cls, v): """Ensure species is always human for HumanSubject""" if v != Species.HUMAN: diff --git a/tests/test_subjects.py b/tests/test_subjects.py index 6b189eada..d21db829e 100644 --- a/tests/test_subjects.py +++ b/tests/test_subjects.py @@ -94,6 +94,18 @@ def test_validate_species_is_human_success(self): assert subject.year_of_birth == 1990 assert subject.source == Organization.AI + def test_validate_species_is_human_from_dict(self): + """Test the species validator with a serialized human species""" + + subject = HumanSubject( + sex=Sex.FEMALE, + species=Species.HUMAN.model_dump(), + year_of_birth=1990, + source=Organization.AI, + ) + + assert subject.species == Species.HUMAN + class TestNonHumanPrimateSubject: """Test the non-human primate subject model""" From 157a272b2c50ad34de101ae2b30ec838f1fb3ca3 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 12 Sep 2026 22:26:53 +0000 Subject: [PATCH 27/38] bump schema version [skip actions] --- schemas/metadata_schema.json | 104 +++++++++++++++++++--------- schemas/subject_schema.json | 100 +++++++++++++++++--------- src/biodata_schema/core/metadata.py | 2 +- src/biodata_schema/core/subject.py | 2 +- 4 files changed, 142 insertions(+), 66 deletions(-) diff --git a/schemas/metadata_schema.json b/schemas/metadata_schema.json index 619b57e82..e6ff0551a 100644 --- a/schemas/metadata_schema.json +++ b/schemas/metadata_schema.json @@ -19823,13 +19823,79 @@ "type": "string" }, "species": { - "$ref": "#/$defs/SpeciesModel", "default": { "name": "Homo sapiens", "common_name": "Human", "registry": "National Center for Biotechnology Information (NCBI)", "registry_identifier": "NCBI:txid9606" }, + "discriminator": { + "mapping": { + "Callithrix jacchus": "#/$defs/_Callithrix_Jacchus", + "Carpa hircus": "#/$defs/_Carpa_Hircus", + "Cavia porcellus": "#/$defs/_Cavia_Porcellus", + "Equus asinus": "#/$defs/_Equus_Asinus", + "Gallus gallus": "#/$defs/_Gallus_Gallus", + "Homo sapiens": "#/$defs/_Homo_Sapiens", + "Lama glama": "#/$defs/_Lama_Glama", + "Macaca fascicularis": "#/$defs/_Macaca_Fascicularis", + "Macaca mulatta": "#/$defs/_Macaca_Mulatta", + "Macaca nemestrina": "#/$defs/_Macaca_Nemestrina", + "Mus musculus": "#/$defs/_Mus_Musculus", + "Oryctolagus cuniculus": "#/$defs/_Oryctolagus_Cuniculus", + "Rattus norvegicus": "#/$defs/_Rattus_Norvegicus", + "Saimiri sciureus": "#/$defs/_Saimiri_Sciureus", + "Vicuna pacos": "#/$defs/_Vicuna_Pacos" + }, + "propertyName": "name" + }, + "oneOf": [ + { + "$ref": "#/$defs/_Callithrix_Jacchus" + }, + { + "$ref": "#/$defs/_Carpa_Hircus" + }, + { + "$ref": "#/$defs/_Cavia_Porcellus" + }, + { + "$ref": "#/$defs/_Equus_Asinus" + }, + { + "$ref": "#/$defs/_Gallus_Gallus" + }, + { + "$ref": "#/$defs/_Homo_Sapiens" + }, + { + "$ref": "#/$defs/_Lama_Glama" + }, + { + "$ref": "#/$defs/_Macaca_Fascicularis" + }, + { + "$ref": "#/$defs/_Macaca_Mulatta" + }, + { + "$ref": "#/$defs/_Macaca_Nemestrina" + }, + { + "$ref": "#/$defs/_Mus_Musculus" + }, + { + "$ref": "#/$defs/_Oryctolagus_Cuniculus" + }, + { + "$ref": "#/$defs/_Rattus_Norvegicus" + }, + { + "$ref": "#/$defs/_Saimiri_Sciureus" + }, + { + "$ref": "#/$defs/_Vicuna_Pacos" + } + ], "title": "Species" }, "sex": { @@ -41297,34 +41363,6 @@ "title": "SpeakerConfig", "type": "object" }, - "SpeciesModel": { - "description": "Base model for species", - "properties": { - "name": { - "title": "Name", - "type": "string" - }, - "common_name": { - "title": "Common Name", - "type": "string" - }, - "registry": { - "$ref": "#/$defs/Registry" - }, - "registry_identifier": { - "title": "Registry Identifier", - "type": "string" - } - }, - "required": [ - "name", - "common_name", - "registry", - "registry_identifier" - ], - "title": "SpeciesModel", - "type": "object" - }, "SpecimenProcedure": { "additionalProperties": false, "description": "Description of surgical or other procedure performed on a specimen", @@ -41749,8 +41787,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.2", + "default": "3.0.2", "title": "Schema Version", "type": "string" }, @@ -51699,8 +51737,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.3", - "default": "3.0.3", + "const": "3.0.4", + "default": "3.0.4", "title": "Schema Version", "type": "string" }, diff --git a/schemas/subject_schema.json b/schemas/subject_schema.json index 0b9bc92cc..e16f0ab22 100644 --- a/schemas/subject_schema.json +++ b/schemas/subject_schema.json @@ -764,13 +764,79 @@ "type": "string" }, "species": { - "$ref": "#/$defs/SpeciesModel", "default": { "name": "Homo sapiens", "common_name": "Human", "registry": "National Center for Biotechnology Information (NCBI)", "registry_identifier": "NCBI:txid9606" }, + "discriminator": { + "mapping": { + "Callithrix jacchus": "#/$defs/_Callithrix_Jacchus", + "Carpa hircus": "#/$defs/_Carpa_Hircus", + "Cavia porcellus": "#/$defs/_Cavia_Porcellus", + "Equus asinus": "#/$defs/_Equus_Asinus", + "Gallus gallus": "#/$defs/_Gallus_Gallus", + "Homo sapiens": "#/$defs/_Homo_Sapiens", + "Lama glama": "#/$defs/_Lama_Glama", + "Macaca fascicularis": "#/$defs/_Macaca_Fascicularis", + "Macaca mulatta": "#/$defs/_Macaca_Mulatta", + "Macaca nemestrina": "#/$defs/_Macaca_Nemestrina", + "Mus musculus": "#/$defs/_Mus_Musculus", + "Oryctolagus cuniculus": "#/$defs/_Oryctolagus_Cuniculus", + "Rattus norvegicus": "#/$defs/_Rattus_Norvegicus", + "Saimiri sciureus": "#/$defs/_Saimiri_Sciureus", + "Vicuna pacos": "#/$defs/_Vicuna_Pacos" + }, + "propertyName": "name" + }, + "oneOf": [ + { + "$ref": "#/$defs/_Callithrix_Jacchus" + }, + { + "$ref": "#/$defs/_Carpa_Hircus" + }, + { + "$ref": "#/$defs/_Cavia_Porcellus" + }, + { + "$ref": "#/$defs/_Equus_Asinus" + }, + { + "$ref": "#/$defs/_Gallus_Gallus" + }, + { + "$ref": "#/$defs/_Homo_Sapiens" + }, + { + "$ref": "#/$defs/_Lama_Glama" + }, + { + "$ref": "#/$defs/_Macaca_Fascicularis" + }, + { + "$ref": "#/$defs/_Macaca_Mulatta" + }, + { + "$ref": "#/$defs/_Macaca_Nemestrina" + }, + { + "$ref": "#/$defs/_Mus_Musculus" + }, + { + "$ref": "#/$defs/_Oryctolagus_Cuniculus" + }, + { + "$ref": "#/$defs/_Rattus_Norvegicus" + }, + { + "$ref": "#/$defs/_Saimiri_Sciureus" + }, + { + "$ref": "#/$defs/_Vicuna_Pacos" + } + ], "title": "Species" }, "sex": { @@ -2779,34 +2845,6 @@ "title": "Sex", "type": "string" }, - "SpeciesModel": { - "description": "Base model for species", - "properties": { - "name": { - "title": "Name", - "type": "string" - }, - "common_name": { - "title": "Common Name", - "type": "string" - }, - "registry": { - "$ref": "#/$defs/Registry" - }, - "registry_identifier": { - "title": "Registry Identifier", - "type": "string" - } - }, - "required": [ - "name", - "common_name", - "registry", - "registry_identifier" - ], - "title": "SpeciesModel", - "type": "object" - }, "WellnessReport": { "additionalProperties": false, "description": "Wellness report on animal health", @@ -8753,8 +8791,8 @@ "type": "string" }, "schema_version": { - "const": "3.0.1", - "default": "3.0.1", + "const": "3.0.2", + "default": "3.0.2", "title": "Schema Version", "type": "string" }, diff --git a/src/biodata_schema/core/metadata.py b/src/biodata_schema/core/metadata.py index 291f04d5e..0be3b4167 100644 --- a/src/biodata_schema/core/metadata.py +++ b/src/biodata_schema/core/metadata.py @@ -74,7 +74,7 @@ class Metadata(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/metadata.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.3"]] = Field(default="3.0.3") + schema_version: SkipValidation[Literal["3.0.4"]] = Field(default="3.0.4") name: str = Field( ..., description="Name of the data asset.", diff --git a/src/biodata_schema/core/subject.py b/src/biodata_schema/core/subject.py index cde3c500b..028f36cee 100644 --- a/src/biodata_schema/core/subject.py +++ b/src/biodata_schema/core/subject.py @@ -13,7 +13,7 @@ class Subject(DataCoreModel): _DESCRIBED_BY_URL = DataCoreModel._DESCRIBED_BY_BASE_URL.default + "biodata_schema/core/subject.py" describedBy: str = Field(default=_DESCRIBED_BY_URL, json_schema_extra={"const": _DESCRIBED_BY_URL}) - schema_version: SkipValidation[Literal["3.0.1"]] = Field(default="3.0.1") + schema_version: SkipValidation[Literal["3.0.2"]] = Field(default="3.0.2") subject_id: str = Field( ..., description="Unique identifier for the subject of data acquisition", From 8c4d46e75695626b1193d811ac39fc2f55e2da99 Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Tue, 15 Sep 2026 10:25:51 -0700 Subject: [PATCH 28/38] docs: clean up coordinate systems page docs --- .../_static/coordinate_system_builder.html | 373 +++++++++++++----- docs/source/coordinate_systems.md | 125 +++--- 2 files changed, 332 insertions(+), 166 deletions(-) diff --git a/docs/source/_static/coordinate_system_builder.html b/docs/source/_static/coordinate_system_builder.html index 22e992023..506bf0813 100644 --- a/docs/source/_static/coordinate_system_builder.html +++ b/docs/source/_static/coordinate_system_builder.html @@ -25,6 +25,7 @@ h2 { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: #888; margin-bottom: 6px; } .section { border: 1px solid #e0e0e0; border-radius: 6px; flex-shrink: 0; } + .section[hidden] { display: none; } .section-header { padding: 8px 10px; background: #fafafa; border-bottom: 1px solid #e0e0e0; font-weight: 600; font-size: 12px; color: #444; @@ -100,6 +101,32 @@ padding: 8px 10px; border-radius: 4px; line-height: 2.0; border: 1px solid #ddd; max-width: 240px; } + #mode-nav { + position: absolute; right: 18px; bottom: 18px; + display: flex; align-items: center; gap: 8px; + padding: 7px 8px; background: rgba(255,255,255,.94); + border: 1px solid #d8d8d8; border-radius: 6px; + box-shadow: 0 2px 8px rgba(0,0,0,.08); + } + #mode-nav[hidden] { display: none; } + .mode-nav-btn { + width: 30px; height: 30px; padding: 0; + border: 1px solid #cfcfcf; border-radius: 4px; + background: #fff; color: #333; cursor: pointer; + font-size: 18px; line-height: 1; + } + .mode-nav-btn:hover:not(:disabled) { background: #f0f0f0; } + .mode-nav-btn:disabled { color: #bbb; cursor: default; } + #mode-nav-copy { min-width: 150px; text-align: center; } + #mode-nav-title { display: block; font-size: 11px; font-weight: 700; color: #444; } + #mode-nav-detail { display: block; font-size: 10px; color: #888; } + body.global-single-mode #sidebar { width: 430px; min-width: 380px; padding: 18px; gap: 16px; } + body.global-single-mode #global-section .section-header { padding: 11px 14px; font-size: 13px; } + body.global-single-mode #global-section .section-body { padding: 14px; gap: 10px; } + body.global-single-mode #global-section .field-label { width: 140px; font-size: 13px; } + body.global-single-mode #global-section select, + body.global-single-mode #global-section input[type=text] { padding: 6px 8px; font-size: 13px; } + body.global-single-mode #export-code { min-height: 180px; } @@ -107,17 +134,17 @@