From 7194bcfa2f5fe8dd09835ea1d5e3d69c04838871 Mon Sep 17 00:00:00 2001
From: bruno-f-cruz <7049351+bruno-f-cruz@users.noreply.github.com>
Date: Tue, 27 Jan 2026 11:21:55 -0800
Subject: [PATCH 01/31] Update against aind-behavior-services
---
docs/conf.py | 4 +-
examples/task_mcm.py | 2 +-
examples/task_patch_foraging.py | 12 +-
examples/test_single_site_patch.py | 6 +-
pyproject.toml | 9 +-
.../launcher.py => scripts/aind.py | 42 +-
scripts/launcher.ps1 | 2 +-
src/aind_behavior_vr_foraging/cli.py | 4 -
.../data_contract/v0_5_0.py | 21 +-
.../data_contract/v0_6_0.py | 4 +-
.../data_mappers/_rig.py | 26 +-
.../data_mappers/_session.py | 31 +-
.../data_mappers/_utils.py | 25 +-
src/aind_behavior_vr_foraging/regenerate.py | 14 +-
src/aind_behavior_vr_foraging/rig.py | 65 +-
src/aind_behavior_vr_foraging/task_logic.py | 58 +-
tests/test_bonsai.py | 12 +-
uv.lock | 989 +++++++++---------
18 files changed, 692 insertions(+), 634 deletions(-)
rename src/aind_behavior_vr_foraging/launcher.py => scripts/aind.py (88%)
diff --git a/docs/conf.py b/docs/conf.py
index 323ce512..1071ef14 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -3,6 +3,8 @@
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
+from typing import Type
+
import erdantic as erd
from pydantic import BaseModel
@@ -81,7 +83,7 @@ def linkcode_resolve(domain, info):
_static_path = "_static"
-def export_model_diagram(model: BaseModel, root: str = _static_path) -> None:
+def export_model_diagram(model: Type[BaseModel], root: str = _static_path) -> None:
diagram = erd.create(model)
diagram.draw(f"{root}/{model.__name__}.svg")
diff --git a/examples/task_mcm.py b/examples/task_mcm.py
index 9de7adb5..5664c1b8 100644
--- a/examples/task_mcm.py
+++ b/examples/task_mcm.py
@@ -1,7 +1,7 @@
import os
from typing import cast
-import aind_behavior_services.task_logic.distributions as distributions
+import aind_behavior_services.task.distributions as distributions
import numpy as np
from aind_behavior_curriculum import Stage, TrainerState
from scipy.linalg import expm
diff --git a/examples/task_patch_foraging.py b/examples/task_patch_foraging.py
index 70582382..283dd389 100644
--- a/examples/task_patch_foraging.py
+++ b/examples/task_patch_foraging.py
@@ -1,13 +1,9 @@
import os
-import aind_behavior_services.task_logic.distributions as distributions
+import aind_behavior_services.task.distributions as distributions
from aind_behavior_curriculum import Stage, TrainerState
-import aind_behavior_vr_foraging.task_logic as vr_task_logic
-from aind_behavior_vr_foraging.task_logic import (
- AindVrForagingTaskLogic,
- AindVrForagingTaskParameters,
-)
+import aind_behavior_vr_foraging.task as vr_task_logic
def NumericalUpdaterParametersHelper(initial_value, increment, decrement, minimum, maximum):
@@ -157,8 +153,8 @@ def PostPatchVirtualSiteGeneratorHelper(contrast: float = 1, friction: float = 0
first_state_occupancy=[1, 0], transition_matrix=[[1, 0], [0, 1]], patches=[patch1, patch2]
)
-task_logic = AindVrForagingTaskLogic(
- task_parameters=AindVrForagingTaskParameters(
+task_logic = vr_task_logic.AindVrForagingTaskLogic(
+ task_parameters=vr_task_logic.AindVrForagingTaskParameters(
rng_seed=42,
updaters=updaters,
environment=vr_task_logic.BlockStructure(
diff --git a/examples/test_single_site_patch.py b/examples/test_single_site_patch.py
index 032d9751..32ef8890 100644
--- a/examples/test_single_site_patch.py
+++ b/examples/test_single_site_patch.py
@@ -1,11 +1,11 @@
import os
from typing import Optional
-import aind_behavior_services.task_logic.distributions as distributions
+import aind_behavior_services.task.distributions as distributions
from aind_behavior_curriculum import Stage, TrainerState
-import aind_behavior_vr_foraging.task_logic as vr_task_logic
-from aind_behavior_vr_foraging.task_logic import (
+import aind_behavior_vr_foraging.task as vr_task_logic
+from aind_behavior_vr_foraging.task import (
AindVrForagingTaskLogic,
AindVrForagingTaskParameters,
)
diff --git a/pyproject.toml b/pyproject.toml
index 98b45eb4..91c216ad 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,7 +16,7 @@ version = "0.6.5"
readme = {file = "README.md", content-type = "text/markdown"}
dependencies = [
- "aind_behavior_services>=0.12, <0.13",
+ "aind_behavior_services@git+https://github.com/AllenNeuralDynamics/Aind.Behavior.Services@refactor-class-names",
"pydantic-settings"
]
@@ -31,10 +31,9 @@ Changelog = "https://github.com/AllenNeuralDynamics/Aind.Behavior.VrForaging/rel
data = ["contraqctor>=0.5.3, <0.6.0"]
launcher = [
- "aind-clabe[aind-services]>=0.9.1",
- "aind-data-schema>=2.2",
+ "aind-clabe[aind-services]@git+https://github.com/AllenNeuralDynamics/clabe@refactor-against-aind-behavior-services-breaking",
+ "aind-data-schema>=2.4",
"aind_behavior_vr_foraging[data]",
- "aind-watchdog-service==0.1.6.dev8"
]
[dependency-groups]
@@ -42,6 +41,8 @@ launcher = [
dev = [
"aind_behavior_vr_foraging[launcher]",
"aind_behavior_vr_foraging[data]",
+ "aind-data-schema@git+https://github.com/AllenNeuralDynamics/aind-data-schema@dev",
+ "aind-data-schema-models@git+https://github.com/AllenNeuralDynamics/aind-data-schema-models@main",
"ruff",
"codespell",
]
diff --git a/src/aind_behavior_vr_foraging/launcher.py b/scripts/aind.py
similarity index 88%
rename from src/aind_behavior_vr_foraging/launcher.py
rename to scripts/aind.py
index d56f80c2..43f8ab31 100644
--- a/src/aind_behavior_vr_foraging/launcher.py
+++ b/scripts/aind.py
@@ -2,9 +2,10 @@
from pathlib import Path
from typing import Any, cast
-from aind_behavior_services.calibration.aind_manipulator import ManipulatorPosition
-from aind_behavior_services.session import AindBehaviorSessionModel
+from aind_behavior_services.rig.aind_manipulator import ManipulatorPosition
+from aind_behavior_services.session import Session
from aind_behavior_services.utils import utcnow
+from aind_behavior_vr_foraging.task import AindVrForagingTaskLogic
from clabe import resource_monitor
from clabe.apps import (
AindBehaviorServicesBonsaiApp,
@@ -13,7 +14,7 @@
CurriculumSuggestion,
)
from clabe.data_transfer.aind_watchdog import WatchdogDataTransferService, WatchdogSettings
-from clabe.launcher import Launcher, LauncherCliArgs
+from clabe.launcher import Launcher, LauncherCliArgs, experiment
from clabe.pickers import ByAnimalModifier, DefaultBehaviorPickerSettings
from clabe.pickers.dataverse import DataversePicker
from contraqctor.contract.json import SoftwareEvents
@@ -22,39 +23,38 @@
from aind_behavior_vr_foraging import data_contract
from aind_behavior_vr_foraging.data_mappers import DataMapperCli
from aind_behavior_vr_foraging.rig import AindVrForagingRig
-from aind_behavior_vr_foraging.task_logic import AindVrForagingTaskLogic
logger = logging.getLogger(__name__)
-async def experiment(launcher: Launcher) -> None:
- monitor = resource_monitor.ResourceMonitor(
- constrains=[
- resource_monitor.available_storage_constraint_factory(launcher.settings.data_dir, 2e11),
- ]
- )
-
- # Validate resources
- monitor.run()
-
+@experiment()
+async def aind_experiment_protocol(launcher: Launcher) -> None:
# Start experiment setup
picker = DataversePicker(launcher=launcher, settings=DefaultBehaviorPickerSettings())
# Pick and register session
- session = picker.pick_session(AindBehaviorSessionModel)
- launcher.register_session(session)
+ session = picker.pick_session(Session)
# Fetch the task settings
trainer_state, task_logic = picker.pick_trainer_state(AindVrForagingTaskLogic)
- input_trainer_state_path = launcher.save_temp_model(trainer_state)
# Fetch rig settings
rig = picker.pick_rig(AindVrForagingRig)
+ launcher.register_session(session, rig.data_directory)
+
+ resource_monitor.ResourceMonitor(
+ constrains=[
+ resource_monitor.available_storage_constraint_factory(rig.data_directory, 2e11),
+ ]
+ ).run()
+
+ input_trainer_state_path = launcher.save_temp_model(trainer_state)
+
# Post-fetching modifications
manipulator_modifier = ByAnimalManipulatorModifier(
- subject_db_path=picker.subject_dir / picker.session.subject,
- model_path="manipulator.calibration.input.initial_position",
+ subject_db_path=picker.subject_dir / session.subject,
+ model_path="manipulator.calibration.initial_position",
model_name="manipulator_init.json",
launcher=launcher,
)
@@ -114,7 +114,7 @@ async def experiment(launcher: Launcher) -> None:
from contraqctor.qc.reporters import HtmlReporter
- from .data_qc.data_qc import make_qc_runner
+ from ..src.aind_behavior_vr_foraging.data_qc.data_qc import make_qc_runner
vr_dataset = data_contract.dataset(launcher.session_directory)
runner = make_qc_runner(vr_dataset)
@@ -173,7 +173,7 @@ def _process_before_dump(self) -> ManipulatorPosition:
class ClabeCli(LauncherCliArgs):
def cli_cmd(self):
launcher = Launcher(settings=self)
- launcher.run_experiment(experiment)
+ launcher.run_experiment(aind_experiment_protocol)
return None
diff --git a/scripts/launcher.ps1 b/scripts/launcher.ps1
index ce04aba0..a36181aa 100644
--- a/scripts/launcher.ps1
+++ b/scripts/launcher.ps1
@@ -1,3 +1,3 @@
$scriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location -Path (Split-Path -Parent $scriptPath)
-&uv run vr-foraging clabe
+&uv run clabe run ./scripts/aind.py @args
diff --git a/src/aind_behavior_vr_foraging/cli.py b/src/aind_behavior_vr_foraging/cli.py
index 5aac0b35..c4487cdd 100644
--- a/src/aind_behavior_vr_foraging/cli.py
+++ b/src/aind_behavior_vr_foraging/cli.py
@@ -6,7 +6,6 @@
from aind_behavior_vr_foraging import __semver__, regenerate
from aind_behavior_vr_foraging.data_mappers import DataMapperCli
from aind_behavior_vr_foraging.data_qc import DataQcCli
-from aind_behavior_vr_foraging.launcher import ClabeCli
class VersionCli(RootModel):
@@ -32,9 +31,6 @@ class VrForagingCli(BaseSettings, cli_prog_name="vr-foraging", cli_kebab_case=Tr
regenerate: CliSubCommand[DslRegenerateCli] = Field(
description="Regenerate the vr-foraging dsl dependencies.",
)
- clabe: CliSubCommand[ClabeCli] = Field(
- description="Run the Clabe CLI.",
- )
def cli_cmd(self):
return CliApp().run_subcommand(self)
diff --git a/src/aind_behavior_vr_foraging/data_contract/v0_5_0.py b/src/aind_behavior_vr_foraging/data_contract/v0_5_0.py
index 4a3c1af5..cdb8a8d0 100644
--- a/src/aind_behavior_vr_foraging/data_contract/v0_5_0.py
+++ b/src/aind_behavior_vr_foraging/data_contract/v0_5_0.py
@@ -1,6 +1,5 @@
from pathlib import Path
-from aind_behavior_services.session import AindBehaviorSessionModel
from contraqctor.contract import Dataset, DataStreamCollection
from contraqctor.contract.camera import Camera
from contraqctor.contract.csv import Csv
@@ -8,13 +7,10 @@
DeviceYmlByFile,
HarpDevice,
)
-from contraqctor.contract.json import PydanticModel, SoftwareEvents
+from contraqctor.contract.json import Json, SoftwareEvents
from contraqctor.contract.mux import MapFromPaths
from contraqctor.contract.text import Text
-from aind_behavior_vr_foraging.rig import AindVrForagingRig
-from aind_behavior_vr_foraging.task_logic import AindVrForagingTaskLogic
-
def dataset(
root_path: Path,
@@ -378,24 +374,21 @@ def dataset(
name="InputSchemas",
description="Configuration files for the behavior rig, task_logic and session.",
data_streams=[
- PydanticModel(
+ Json(
name="Rig",
- reader_params=PydanticModel.make_params(
- model=AindVrForagingRig,
+ reader_params=Json.make_params(
path=root_path / "behavior/Logs/rig_input.json",
),
),
- PydanticModel(
+ Json(
name="TaskLogic",
- reader_params=PydanticModel.make_params(
- model=AindVrForagingTaskLogic,
+ reader_params=Json.make_params(
path=root_path / "behavior/Logs/tasklogic_input.json",
),
),
- PydanticModel(
+ Json(
name="Session",
- reader_params=PydanticModel.make_params(
- model=AindBehaviorSessionModel,
+ reader_params=Json.make_params(
path=root_path / "behavior/Logs/session_input.json",
),
),
diff --git a/src/aind_behavior_vr_foraging/data_contract/v0_6_0.py b/src/aind_behavior_vr_foraging/data_contract/v0_6_0.py
index 35e7087f..aa996792 100644
--- a/src/aind_behavior_vr_foraging/data_contract/v0_6_0.py
+++ b/src/aind_behavior_vr_foraging/data_contract/v0_6_0.py
@@ -1,6 +1,6 @@
from pathlib import Path
-from aind_behavior_services.session import AindBehaviorSessionModel
+from aind_behavior_services.session import Session
from contraqctor.contract import Dataset, DataStreamCollection
from contraqctor.contract.camera import Camera
from contraqctor.contract.csv import Csv
@@ -423,7 +423,7 @@ def dataset(
PydanticModel(
name="Session",
reader_params=PydanticModel.make_params(
- model=AindBehaviorSessionModel,
+ model=Session,
path=root_path / "behavior/Logs/session_output.json",
),
),
diff --git a/src/aind_behavior_vr_foraging/data_mappers/_rig.py b/src/aind_behavior_vr_foraging/data_mappers/_rig.py
index 39567466..3d5872a6 100644
--- a/src/aind_behavior_vr_foraging/data_mappers/_rig.py
+++ b/src/aind_behavior_vr_foraging/data_mappers/_rig.py
@@ -6,8 +6,8 @@
from pathlib import Path
from typing import Optional, cast
-import aind_behavior_services.rig as AbsRig
-from aind_behavior_services import calibration as AbsCalibration
+from aind_behavior_services.common import Vector3
+from aind_behavior_services.rig import cameras, olfactometer, visual_stimulation
from aind_behavior_services.utils import model_from_json_file
from aind_data_schema.base import GenericModel
from aind_data_schema.components import connections, coordinates, devices, measurements
@@ -328,18 +328,18 @@ def _get_harp_clock_generate_node(rig: AindVrForagingRig, components: list[devic
def _get_wheel(
rig: AindVrForagingRig, encoder: devices.Device, magnetic_brake: devices.Device, torque_sensor: devices.Device
) -> devices.Wheel:
- if rig.harp_treadmill.calibration is None or rig.harp_treadmill.calibration.output is None:
+ if rig.harp_treadmill.calibration is None:
raise ValueError("Treadmill calibration is not set.")
return devices.Wheel(
name=TrackedDevices.WHEEL,
manufacturer=devices.Organization.AIND,
- radius=Decimal(str(rig.harp_treadmill.calibration.output.wheel_diameter)) / 2,
+ radius=Decimal(str(rig.harp_treadmill.calibration.wheel_diameter)) / 2,
width=Decimal("3.5"),
size_unit=units.SizeUnit.CM,
encoder=encoder,
magnetic_brake=magnetic_brake,
torque_sensor=torque_sensor,
- pulse_per_revolution=rig.harp_treadmill.calibration.output.pulses_per_revolution,
+ pulse_per_revolution=rig.harp_treadmill.calibration.pulses_per_revolution,
notes="https://tinyurl.com/AI-RunningWheel",
)
@@ -447,11 +447,11 @@ def _get_monitors(rig: AindVrForagingRig) -> list[devices.Monitor]:
],
}
- def distance_from_vector(vector: AbsRig.visual_stimulation.Vector3):
+ def distance_from_vector(vector: Vector3):
return (vector.x**2 + vector.y**2 + vector.z**2) ** 0.5
def _get_monitors(display_name: str):
- display = cast(AbsRig.visual_stimulation.DisplayCalibration, getattr(rig.screen.calibration, display_name))
+ display = cast(visual_stimulation.DisplayCalibration, getattr(rig.screen.calibration, display_name))
return devices.Monitor(
name=f"{str(TrackedDevices.SCREEN)}_{display_name}",
manufacturer=devices.Organization.LG,
@@ -524,7 +524,7 @@ def _get_lickspout_assembly(
@staticmethod
def _get_olfactometer(rig: AindVrForagingRig) -> devices.Olfactometer:
olf_calibration = rig.harp_olfactometer.calibration
- if olf_calibration is None or (calibration := olf_calibration.input) is None:
+ if olf_calibration is None:
raise ValueError("Olfactometer calibration is not set.")
return devices.Olfactometer(
@@ -532,7 +532,7 @@ def _get_olfactometer(rig: AindVrForagingRig) -> devices.Olfactometer:
harp_device_type=devices.HarpDeviceType.OLFACTOMETER,
manufacturer=devices.Organization.CHAMPALIMAUD,
is_clock_generator=False,
- channels=list(map(_get_olfactometer_channel, calibration.channel_config.values())),
+ channels=list(map(_get_olfactometer_channel, olf_calibration.channel_config.values())),
)
@staticmethod
@@ -654,7 +654,7 @@ class _PartialCameraAssembly:
}
-def _get_camera(name: str, camera: AbsRig.cameras.SpinnakerCamera, fps: float) -> devices.Camera:
+def _get_camera(name: str, camera: cameras.SpinnakerCamera, fps: float) -> devices.Camera:
return devices.Camera(
name=name,
manufacturer=devices.Organization.FLIR,
@@ -694,11 +694,11 @@ def _get_camera_assembly(camera: devices.Camera) -> devices.CameraAssembly:
def _get_olfactometer_channel(
- ch: AbsCalibration.olfactometer.OlfactometerChannelConfig,
+ ch: olfactometer.OlfactometerChannelConfig,
) -> devices.OlfactometerChannel:
ch_type_to_ch_type = {
- AbsCalibration.olfactometer.OlfactometerChannelType.CARRIER: devices.OlfactometerChannelType.CARRIER,
- AbsCalibration.olfactometer.OlfactometerChannelType.ODOR: devices.OlfactometerChannelType.ODOR,
+ olfactometer.OlfactometerChannelType.CARRIER: devices.OlfactometerChannelType.CARRIER,
+ olfactometer.OlfactometerChannelType.ODOR: devices.OlfactometerChannelType.ODOR,
}
return devices.OlfactometerChannel(
channel_index=ch.channel_index,
diff --git a/src/aind_behavior_vr_foraging/data_mappers/_session.py b/src/aind_behavior_vr_foraging/data_mappers/_session.py
index 6e45f01d..4432aeb9 100644
--- a/src/aind_behavior_vr_foraging/data_mappers/_session.py
+++ b/src/aind_behavior_vr_foraging/data_mappers/_session.py
@@ -8,7 +8,8 @@
import aind_behavior_services.rig as AbsRig
import git
import pydantic
-from aind_behavior_services.session import AindBehaviorSessionModel
+from aind_behavior_services.rig import cameras, visual_stimulation
+from aind_behavior_services.session import Session
from aind_behavior_services.utils import get_fields_of_type, model_from_json_file, utcnow
from aind_data_schema.components import configs
from aind_data_schema.core import acquisition
@@ -41,9 +42,9 @@ def __init__(
self._session_end_time = session_end_time
abs_schemas_path = Path(self._data_path) / "Behavior" / "Logs"
- self.session_model = model_from_json_file(abs_schemas_path / "session_input.json", AindBehaviorSessionModel)
+ self.session_model = model_from_json_file(abs_schemas_path / "session_input.json", Session)
self.rig_model = model_from_json_file(abs_schemas_path / "rig_input.json", AindVrForagingRig)
- self.task_logic_model = model_from_json_file(abs_schemas_path / "tasklogic_input.json", AindVrForagingTaskLogic)
+ self.task_model = model_from_json_file(abs_schemas_path / "task_input.json", AindVrForagingTaskLogic)
if curriculum_suggestion is not None:
if isinstance(curriculum_suggestion, CurriculumSuggestion):
@@ -116,7 +117,7 @@ def _map(self) -> acquisition.Acquisition:
acquisition_end_time=utcnow(),
acquisition_start_time=self.session_model.date,
experimenters=self.session_model.experimenter,
- acquisition_type=self.session_model.experiment or self.task_logic_model.name,
+ acquisition_type=self.session_model.experiment or self.task_model.name,
coordinate_system=None,
data_streams=self._get_data_streams(),
calibrations=self._get_calibrations(),
@@ -138,12 +139,12 @@ def _get_calibrations(self) -> List[acquisition.CALIBRATIONS]:
@staticmethod
def _include_device(device: AbsRig.Device) -> bool:
- if isinstance(device, AbsRig.visual_stimulation.Screen):
+ if isinstance(device, visual_stimulation.ScreenAssembly):
return False
- if isinstance(device, AbsRig.cameras.CameraController):
+ if isinstance(device, cameras.CameraController):
return False
- if isinstance(device, get_args(AbsRig.cameras.CameraTypes)):
- return cast(AbsRig.cameras.CameraTypes, device).video_writer is not None
+ if isinstance(device, get_args(cameras.CameraTypes)):
+ return cast(cameras.CameraTypes, device).video_writer is not None
return True
def _get_data_streams(self) -> List[acquisition.DataStream]:
@@ -255,7 +256,7 @@ def _get_stimulus_epochs(self) -> List[acquisition.StimulusEpoch]:
stimulus_start_time=self.session_model.date,
stimulus_end_time=self.session_end_time,
configurations=stimulus_epoch_configurations,
- stimulus_name=self.session_model.experiment or self.task_logic_model.name,
+ stimulus_name=self.session_model.experiment or self.task_model.name,
stimulus_modalities=stimulus_modalities,
performance_metrics=performance_metrics,
curriculum_status=curriculum_status,
@@ -264,7 +265,7 @@ def _get_stimulus_epochs(self) -> List[acquisition.StimulusEpoch]:
return stimulus_epochs
def _get_cameras_config(self) -> List[acquisition.DetectorConfig]:
- def _map_camera(name: str, camera: AbsRig.cameras.CameraTypes) -> acquisition.DetectorConfig:
+ def _map_camera(name: str, camera: cameras.CameraTypes) -> acquisition.DetectorConfig:
assert camera.video_writer is not None, "Camera does not have a video writer configured."
return acquisition.DetectorConfig(
device_name=name,
@@ -274,25 +275,25 @@ def _map_camera(name: str, camera: AbsRig.cameras.CameraTypes) -> acquisition.De
compression=_map_compression(camera.video_writer),
)
- def _map_compression(compression: AbsRig.cameras.VideoWriter) -> acquisition.Code:
+ def _map_compression(compression: cameras.VideoWriter) -> acquisition.Code:
if compression is None:
raise ValueError("Camera does not have a video writer configured.")
- if isinstance(compression, AbsRig.cameras.VideoWriterFfmpeg):
+ if isinstance(compression, cameras.VideoWriterFfmpeg):
return acquisition.Code(
url="https://ffmpeg.org/",
name="FFMPEG",
parameters=acquisition.GenericModel.model_validate(compression.model_dump()),
)
- elif isinstance(compression, AbsRig.cameras.VideoWriterOpenCv):
+ elif isinstance(compression, cameras.VideoWriterOpenCv):
bonsai = self._get_bonsai_as_code()
bonsai.parameters = acquisition.GenericModel.model_validate(compression.model_dump())
return bonsai
else:
raise ValueError("Camera does not have a valid video writer configured.")
- cameras = data_mapper_helpers.get_cameras(self.rig_model, exclude_without_video_writer=True)
+ _cameras = data_mapper_helpers.get_cameras(self.rig_model, exclude_without_video_writer=True)
- return list(map(_map_camera, cameras.keys(), cameras.values()))
+ return list(map(_map_camera, _cameras.keys(), _cameras.values()))
def _get_bonsai_as_code(self) -> acquisition.Code:
bonsai_folder = Path(self.bonsai_app.executable).parent
diff --git a/src/aind_behavior_vr_foraging/data_mappers/_utils.py b/src/aind_behavior_vr_foraging/data_mappers/_utils.py
index 60a713aa..529ae335 100644
--- a/src/aind_behavior_vr_foraging/data_mappers/_utils.py
+++ b/src/aind_behavior_vr_foraging/data_mappers/_utils.py
@@ -1,8 +1,8 @@
import enum
import logging
-from typing import List, Optional, Type, TypeVar, Union
+from typing import List, Type, TypeVar, Union
-import aind_behavior_services.calibration as AbsCalibration
+import aind_behavior_services.rig.water_valve as water_valve
import pydantic
from aind_behavior_services.utils import get_fields_of_type, utcnow
from aind_data_schema.components import coordinates, measurements
@@ -32,31 +32,26 @@ def coerce_to_aind_data_schema(value: Union[pydantic.BaseModel, dict], target_ty
def _get_water_calibration(rig_model: AindVrForagingRig) -> List[measurements.VolumeCalibration]:
def _mapper(
- device_name: Optional[str], water_calibration: AbsCalibration.water_valve.WaterValveCalibration
+ device_name: str, water_calibration: water_valve.WaterValveCalibration
) -> measurements.VolumeCalibration:
- device_name = device_name or water_calibration.device_name
if device_name is None:
raise ValueError("Device name is not set.")
- c = water_calibration.output
- if c is None:
- c = water_calibration.input.calibrate_output()
- c.interval_average = c.interval_average or {}
+ interval_average = water_calibration.interval_average if water_calibration.interval_average else {}
return measurements.VolumeCalibration(
device_name=device_name,
calibration_date=water_calibration.date if water_calibration.date else utcnow(),
- notes=water_calibration.notes,
- input=list(c.interval_average.keys()),
- output=list(c.interval_average.values()),
+ input=list(interval_average.keys()),
+ output=list(interval_average.values()),
input_unit=units.TimeUnit.S,
output_unit=units.VolumeUnit.ML,
fit=measurements.CalibrationFit(
fit_type=measurements.FitType.LINEAR,
- fit_parameters=acquisition.GenericModel.model_validate(c.model_dump()),
+ fit_parameters=acquisition.GenericModel.model_validate(water_calibration.model_dump()),
),
)
- water_calibration = get_fields_of_type(rig_model, AbsCalibration.water_valve.WaterValveCalibration)
+ water_calibration = get_fields_of_type(rig_model, water_valve.WaterValveCalibration)
return (
list(map(lambda tup: _mapper(TrackedDevices.WATER_VALVE_SOLENOID, tup[1]), water_calibration))
if len(water_calibration) > 0
@@ -68,11 +63,11 @@ def _get_treadmill_brake_calibration(rig_model: AindVrForagingRig) -> List[measu
treadmill = rig_model.harp_treadmill
if treadmill.calibration is None:
raise ValueError("Treadmill calibration is not set.")
- calibration = treadmill.calibration.output.brake_lookup_calibration
+ calibration = treadmill.calibration.brake_lookup_calibration
calibration_ads = measurements.Calibration(
device_name=TrackedDevices.MAGNETIC_BRAKE,
calibration_date=treadmill.calibration.date if treadmill.calibration.date else utcnow(),
- description=type(treadmill.calibration.output).model_fields["brake_lookup_calibration"].description
+ description=type(treadmill.calibration).model_fields["brake_lookup_calibration"].description
or "brake calibration",
input=[pair[0] for pair in calibration],
input_unit=units.MassUnit.G, # torque in gram-force cm
diff --git a/src/aind_behavior_vr_foraging/regenerate.py b/src/aind_behavior_vr_foraging/regenerate.py
index e3ee8cb2..5dbaac59 100644
--- a/src/aind_behavior_vr_foraging/regenerate.py
+++ b/src/aind_behavior_vr_foraging/regenerate.py
@@ -2,11 +2,11 @@
from typing import Union
import pydantic
-from aind_behavior_services.session import AindBehaviorSessionModel
-from aind_behavior_services.utils import BonsaiSgenSerializers, convert_pydantic_to_bonsai
+from aind_behavior_services.schema import BonsaiSgenSerializers, convert_pydantic_to_bonsai
+from aind_behavior_services.session import Session
import aind_behavior_vr_foraging.rig
-import aind_behavior_vr_foraging.task_logic
+import aind_behavior_vr_foraging.task
SCHEMA_ROOT = Path("./src/DataSchemas/")
EXTENSIONS_ROOT = Path("./src/Extensions/")
@@ -15,11 +15,11 @@
def main():
models = [
- aind_behavior_vr_foraging.task_logic.AindVrForagingTaskLogic,
+ aind_behavior_vr_foraging.task.AindVrForagingTaskLogic,
aind_behavior_vr_foraging.rig.AindVrForagingRig,
- AindBehaviorSessionModel,
- aind_behavior_vr_foraging.task_logic.VirtualSite,
- aind_behavior_vr_foraging.task_logic.VisualCorridor,
+ Session,
+ aind_behavior_vr_foraging.task.VirtualSite,
+ aind_behavior_vr_foraging.task.VisualCorridor,
]
model = pydantic.RootModel[Union[tuple(models)]]
diff --git a/src/aind_behavior_vr_foraging/rig.py b/src/aind_behavior_vr_foraging/rig.py
index 92e53498..c1b11635 100644
--- a/src/aind_behavior_vr_foraging/rig.py
+++ b/src/aind_behavior_vr_foraging/rig.py
@@ -1,61 +1,50 @@
-# Import core types
-from __future__ import annotations
-
-# Import core types
from typing import Literal, Optional
-import aind_behavior_services.calibration.aind_manipulator as man
-import aind_behavior_services.calibration.olfactometer as oc
-import aind_behavior_services.calibration.treadmill as treadmill
-import aind_behavior_services.calibration.water_valve as wvc
import aind_behavior_services.rig as rig
+import aind_behavior_services.rig.cameras as cameras
+import aind_behavior_services.rig.harp as harp
+import aind_behavior_services.rig.olfactometer as oc
+import aind_behavior_services.rig.treadmill as treadmill
+import aind_behavior_services.rig.visual_stimulation as visual_stimulation
+import aind_behavior_services.rig.water_valve as wvc
+from aind_behavior_services.rig import aind_manipulator as man
from pydantic import BaseModel, Field
from aind_behavior_vr_foraging import __semver__
-class AindManipulatorAdditionalSettings(BaseModel):
- """Additional settings for the manipulator device"""
+class AindManipulatorDevice(man.AindManipulator):
+ """Appends a task specific configuration to the base manipulator model."""
spout_axis: man.Axis = Field(default=man.Axis.Y1, description="Spout axis")
-class AindManipulatorDevice(man.AindManipulatorDevice):
- """Overrides the default settings for the manipulator device by spec'ing additional_settings field"""
-
- additional_settings: AindManipulatorAdditionalSettings = Field(
- default=AindManipulatorAdditionalSettings(), description="Additional settings"
- )
-
-
class RigCalibration(BaseModel):
- """Container class for calibration models. In a future release these will be moved to the respective devices"""
+ """Container class for calibration models."""
- water_valve: wvc.WaterValveCalibration = Field(..., description="Water valve calibration")
+ water_valve: wvc.WaterValveCalibration = Field(description="Water valve calibration")
-class AindVrForagingRig(rig.AindBehaviorRigModel):
+class AindVrForagingRig(rig.Rig):
version: Literal[__semver__] = __semver__
- triggered_camera_controller: rig.cameras.CameraController[rig.cameras.SpinnakerCamera] = Field(
- ..., description="Required camera controller to triggered cameras."
+ triggered_camera_controller: cameras.CameraController[cameras.SpinnakerCamera] = Field(
+ description="Required camera controller to triggered cameras."
)
- monitoring_camera_controller: Optional[rig.cameras.CameraController[rig.cameras.WebCamera]] = Field(
+ monitoring_camera_controller: Optional[cameras.CameraController[cameras.WebCamera]] = Field(
default=None, description="Optional camera controller for monitoring cameras."
)
- harp_behavior: rig.harp.HarpBehavior = Field(..., description="Harp behavior")
- harp_olfactometer: oc.Olfactometer = Field(..., description="Harp olfactometer")
- harp_lickometer: rig.harp.HarpLicketySplit = Field(..., description="Harp lickometer")
- harp_clock_generator: rig.harp.HarpWhiteRabbit = Field(..., description="Harp clock generator")
- harp_analog_input: Optional[rig.harp.HarpAnalogInput] = Field(default=None, description="Harp analog input")
- harp_treadmill: treadmill.Treadmill = Field(..., description="Harp treadmill")
- harp_sniff_detector: Optional[rig.harp.HarpSniffDetector] = Field(
- default=None, description="Sniff detector settings"
- )
- harp_environment_sensor: Optional[rig.harp.HarpEnvironmentSensor] = Field(
+ harp_behavior: harp.HarpBehavior = Field(description="Harp behavior")
+ harp_olfactometer: oc.Olfactometer = Field(description="Harp olfactometer")
+ harp_lickometer: harp.HarpLicketySplit = Field(description="Harp lickometer")
+ harp_clock_generator: harp.HarpWhiteRabbit = Field(description="Harp clock generator")
+ harp_analog_input: Optional[harp.HarpAnalogInput] = Field(default=None, description="Harp analog input")
+ harp_treadmill: treadmill.Treadmill = Field(description="Harp treadmill")
+ harp_sniff_detector: Optional[harp.HarpSniffDetector] = Field(default=None, description="Sniff detector settings")
+ harp_environment_sensor: Optional[harp.HarpEnvironmentSensor] = Field(
default=None, description="Environment sensor"
)
- manipulator: AindManipulatorDevice = Field(..., description="Manipulator")
- screen: rig.visual_stimulation.Screen = Field(
- default=rig.visual_stimulation.Screen(), description="Screen settings"
+ manipulator: AindManipulatorDevice = Field(description="Manipulator")
+ screen: visual_stimulation.ScreenAssembly = Field(
+ default=visual_stimulation.ScreenAssembly(), description="Screen settings", validate_default=True
)
- calibration: RigCalibration = Field(..., description="Calibration models")
+ calibration: RigCalibration = Field(description="Calibration models")
diff --git a/src/aind_behavior_vr_foraging/task_logic.py b/src/aind_behavior_vr_foraging/task_logic.py
index 89a652af..8c577152 100644
--- a/src/aind_behavior_vr_foraging/task_logic.py
+++ b/src/aind_behavior_vr_foraging/task_logic.py
@@ -1,9 +1,9 @@
import logging
from enum import Enum
-from typing import TYPE_CHECKING, Annotated, Any, Dict, List, Literal, Optional, Self, Union
+from typing import TYPE_CHECKING, Annotated, Any, Dict, List, Literal, Optional, Self, Union, cast
-import aind_behavior_services.task_logic.distributions as distributions
-from aind_behavior_services.task_logic import AindBehaviorTaskLogicModel, TaskParameters
+import aind_behavior_services.task.distributions as distributions
+from aind_behavior_services.task import Task, TaskParameters
from pydantic import BaseModel, Field, NonNegativeFloat, field_validator, model_validator
from typing_extensions import TypeAliasType
@@ -331,7 +331,12 @@ class CtcmFunction(_PatchUpdateFunction):
function_type: Literal["CtcmFunction"] = "CtcmFunction"
transition_matrix: List[List[NonNegativeFloat]] = Field(description="Transition matrix between states")
- rho: float = Field(description="The underlying value goverining the stochastic process")
+ rho: float = Field(description="The underlying value governing the stochastic process")
+ dt: Literal[0.1] = Field(default=0.1, description="Sampling time step (s)")
+ rate: Optional[float] = Field(
+ default=None,
+ description="Rate of the replenishment used to generate the matrix. This value is used for metadata keep sake only",
+ )
minimum: float = Field(default=1, description="Maximum value after update")
maximum: float = Field(default=0, description="Minimum value after update")
@@ -349,6 +354,49 @@ def validate_transition_matrix(cls, value):
col /= row_sum
return value
+ @classmethod
+ def from_replenishment_rate(
+ cls, n_states: int, replenishment_rate: float, rho: float, dt: Optional[float] = 0.1
+ ) -> "CtcmFunction":
+ """
+ Computes the replenishment transition probability matrix for each patch
+ Parameters
+ -----------
+ n_states: int
+ number reward states per patch.
+ replenishment_rate: float
+ replenishment rate.
+ rho: float
+ The underlying value governing the stochastic process
+ dt: float
+ experiment time step
+
+
+ Returns
+ -------
+ CtcmFunction
+ Instance of CtcmFunction with computed transition matrix.
+ """
+ import numpy as np
+ from scipy.linalg import expm
+
+ if dt is None:
+ dt = cls.model_fields["dt"].default
+ q = np.zeros((n_states, n_states))
+ np.fill_diagonal(q, -replenishment_rate)
+ np.fill_diagonal(q[:, 1:], replenishment_rate)
+ q[-1, -1] = 0
+
+ p_t = expm(q * dt)
+ assert p_t.ndim == 2
+ transition_matrix = cast(list[list[float]], p_t.tolist())
+ return cls(
+ transition_matrix=transition_matrix,
+ rho=rho,
+ dt=dt,
+ rate=replenishment_rate,
+ )
+
if TYPE_CHECKING:
PatchUpdateFunction = Union[
@@ -1042,7 +1090,7 @@ class AindVrForagingTaskParameters(TaskParameters):
operation_control: OperationControl = Field(description="Control of the operation")
-class AindVrForagingTaskLogic(AindBehaviorTaskLogicModel):
+class AindVrForagingTaskLogic(Task):
"""
Main task logic model for the AIND VR Foraging task.
diff --git a/tests/test_bonsai.py b/tests/test_bonsai.py
index 7c743d35..5935af0e 100644
--- a/tests/test_bonsai.py
+++ b/tests/test_bonsai.py
@@ -4,20 +4,20 @@
import unittest
import warnings
from pathlib import Path
-from typing import Generic, List, Optional, TypeVar, Union
+from typing import Generic, List, Optional, Type, TypeVar, Union
-from aind_behavior_services.session import AindBehaviorSessionModel
+from aind_behavior_services.session import Session
from aind_behavior_services.utils import run_bonsai_process
+from aind_behavior_vr_foraging.task import AindVrForagingTaskLogic
from pydantic import ValidationError
from aind_behavior_vr_foraging.rig import AindVrForagingRig
-from aind_behavior_vr_foraging.task_logic import AindVrForagingTaskLogic
sys.path.append(".")
from examples import rig, session, task_patch_foraging # isort:skip # pylint: disable=wrong-import-position
from tests import JSON_ROOT # isort:skip # pylint: disable=wrong-import-position
-TModel = TypeVar("TModel", bound=Union[AindVrForagingRig, AindVrForagingTaskLogic, AindBehaviorSessionModel])
+TModel = TypeVar("TModel", bound=Union[AindVrForagingRig, AindVrForagingTaskLogic, Session])
@unittest.skipUnless(platform.system() == "Windows", "Bonsai tests only run on Windows")
@@ -28,7 +28,7 @@ def test_deserialization(self):
task_patch_foraging.main("./local/{schema}.json")
models_to_test = [
- TestModel(bonsai_property="SessionPath", json_root=JSON_ROOT, model=AindBehaviorSessionModel),
+ TestModel(bonsai_property="SessionPath", json_root=JSON_ROOT, model=Session),
TestModel(bonsai_property="RigPath", json_root=JSON_ROOT, model=AindVrForagingRig),
TestModel(bonsai_property="TaskLogicPath", json_root=JSON_ROOT, model=AindVrForagingTaskLogic),
]
@@ -59,7 +59,7 @@ def test_deserialization(self):
class TestModel(Generic[TModel]):
- def __init__(self, bonsai_property: str, json_root: Path, model: TModel):
+ def __init__(self, bonsai_property: str, json_root: Path, model: Type[TModel]):
self.bonsai_property: str = bonsai_property
self.json_path: Path = json_root / f"{model.__name__}.json"
if not os.path.exists(self.json_path):
diff --git a/uv.lock b/uv.lock
index 7f54b476..740a7310 100644
--- a/uv.lock
+++ b/uv.lock
@@ -2,15 +2,15 @@ version = 1
revision = 3
requires-python = ">=3.11"
resolution-markers = [
- "python_full_version >= '3.14' and sys_platform == 'darwin'",
- "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'darwin'",
- "python_full_version >= '3.14' and platform_machine == 'aarch64' and sys_platform == 'linux'",
- "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'aarch64' and sys_platform == 'linux'",
- "(python_full_version >= '3.14' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'linux')",
- "(python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'darwin' and sys_platform != 'linux')",
- "python_full_version < '3.12' and sys_platform == 'darwin'",
- "python_full_version < '3.12' and platform_machine == 'aarch64' and sys_platform == 'linux'",
- "(python_full_version < '3.12' and platform_machine != 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.12' and sys_platform != 'darwin' and sys_platform != 'linux')",
+ "python_full_version >= '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version < '3.12' and sys_platform == 'win32'",
+ "python_full_version < '3.12' and sys_platform == 'emscripten'",
+ "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'",
]
[[package]]
@@ -41,8 +41,8 @@ wheels = [
[[package]]
name = "aind-behavior-services"
-version = "0.12.5"
-source = { registry = "https://pypi.org/simple" }
+version = "0.13.0rc2"
+source = { git = "https://github.com/AllenNeuralDynamics/Aind.Behavior.Services?rev=refactor-class-names#0e3d08a4162afc5d0118dc5c1eb589e983b83c44" }
dependencies = [
{ name = "aind-behavior-curriculum" },
{ name = "gitpython" },
@@ -50,10 +50,6 @@ dependencies = [
{ name = "pydantic" },
{ name = "semver" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/c6/01/6c71f219f5078d7ec3b0507724c2b63ec0af3c8571024053daa469d32e77/aind_behavior_services-0.12.5.tar.gz", hash = "sha256:ebcb1f56852265b988a777b22eeb1a9e4952c4cc7328b0e8c749844593372ccd", size = 27423, upload-time = "2025-11-06T19:06:26.875Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/89/3c/3d28d25645df3502f1a708483623e3a225c1f195adf2cef5e1727a7cf8b9/aind_behavior_services-0.12.5-py3-none-any.whl", hash = "sha256:fd6d3b60d07fd5bc31ecade227c68f97122e9591e78919098e06fe72b6e1d679", size = 38243, upload-time = "2025-11-06T19:06:25.67Z" },
-]
[[package]]
name = "aind-behavior-vr-foraging"
@@ -71,13 +67,14 @@ data = [
launcher = [
{ name = "aind-clabe", extra = ["aind-services"] },
{ name = "aind-data-schema" },
- { name = "aind-watchdog-service" },
{ name = "contraqctor" },
]
[package.dev-dependencies]
dev = [
{ name = "aind-behavior-vr-foraging", extra = ["data", "launcher"] },
+ { name = "aind-data-schema" },
+ { name = "aind-data-schema-models" },
{ name = "codespell" },
{ name = "ruff" },
]
@@ -86,18 +83,18 @@ docs = [
{ name = "autodoc-pydantic", extra = ["erdantic"] },
{ name = "furo" },
{ name = "myst-parser" },
- { name = "sphinx" },
+ { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
+ { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
{ name = "sphinx-jinja" },
{ name = "sphinx-jsonschema" },
]
[package.metadata]
requires-dist = [
- { name = "aind-behavior-services", specifier = ">=0.12,<0.13" },
+ { name = "aind-behavior-services", git = "https://github.com/AllenNeuralDynamics/Aind.Behavior.Services?rev=refactor-class-names" },
{ name = "aind-behavior-vr-foraging", extras = ["data"], marker = "extra == 'launcher'" },
- { name = "aind-clabe", extras = ["aind-services"], marker = "extra == 'launcher'", specifier = ">=0.9.1" },
- { name = "aind-data-schema", marker = "extra == 'launcher'", specifier = ">=2.2" },
- { name = "aind-watchdog-service", marker = "extra == 'launcher'", specifier = "==0.1.6.dev8" },
+ { name = "aind-clabe", extras = ["aind-services"], marker = "extra == 'launcher'", git = "https://github.com/AllenNeuralDynamics/clabe?rev=refactor-against-aind-behavior-services-breaking" },
+ { name = "aind-data-schema", marker = "extra == 'launcher'", specifier = ">=2.4" },
{ name = "contraqctor", marker = "extra == 'data'", specifier = ">=0.5.3,<0.6.0" },
{ name = "pydantic-settings" },
]
@@ -107,6 +104,8 @@ provides-extras = ["data", "launcher"]
dev = [
{ name = "aind-behavior-vr-foraging", extras = ["data"] },
{ name = "aind-behavior-vr-foraging", extras = ["launcher"] },
+ { name = "aind-data-schema", git = "https://github.com/AllenNeuralDynamics/aind-data-schema?rev=dev" },
+ { name = "aind-data-schema-models", git = "https://github.com/AllenNeuralDynamics/aind-data-schema-models?rev=main" },
{ name = "codespell" },
{ name = "ruff" },
]
@@ -122,8 +121,8 @@ docs = [
[[package]]
name = "aind-clabe"
-version = "0.9.1"
-source = { registry = "https://pypi.org/simple" }
+version = "0.10.0rc7"
+source = { git = "https://github.com/AllenNeuralDynamics/clabe?rev=refactor-against-aind-behavior-services-breaking#c4f6e7c14960981fbaee30b7818f08e0e1f6930c" }
dependencies = [
{ name = "aind-behavior-services" },
{ name = "gitpython" },
@@ -134,10 +133,6 @@ dependencies = [
{ name = "rich" },
{ name = "semver" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/8c/ab/7f27c98f4f2bf7062548b4d076ae2ec9d00f7e77640a1573f7a896c44835/aind_clabe-0.9.1.tar.gz", hash = "sha256:c6ae4fb781e5b27af044ffcbd413d7c5532e3a272595b74266ab280d86a90217", size = 66521, upload-time = "2025-12-11T23:04:33.544Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/ab/87/95a2e9d73c7421bdf37c4d67aa0ebd66d455a6d81cb63acc70053334b162/aind_clabe-0.9.1-py3-none-any.whl", hash = "sha256:d7197635c842acafaf83ad4a6eb686a387a85c9ee51d96e2c200857dc635f95d", size = 88869, upload-time = "2025-12-11T23:04:32.451Z" },
-]
[package.optional-dependencies]
aind-services = [
@@ -156,35 +151,26 @@ aind-services = [
[[package]]
name = "aind-data-schema"
-version = "2.2.0"
-source = { registry = "https://pypi.org/simple" }
+version = "2.4.0"
+source = { git = "https://github.com/AllenNeuralDynamics/aind-data-schema?rev=dev#58069c82bd294184d7fd1e49ef2fa810272a0779" }
dependencies = [
{ name = "aind-data-schema-models" },
{ name = "pydantic" },
- { name = "semver" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/80/1e/9e17fb42209ce92a95c4b3e5cafc399fc742255261fc21ddcc3195083d66/aind_data_schema-2.2.0.tar.gz", hash = "sha256:26e749d9b227378cd001dc4b1eff0f1cd0c626147484ddf89cdf18ed7c0c110c", size = 865576, upload-time = "2025-11-25T22:34:47.543Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/83/e5/904b07d0d0dbac1900026d7cc53d63f280abe495f856c2d5251706c0ff21/aind_data_schema-2.2.0-py3-none-any.whl", hash = "sha256:1416a3c527651078a93251160cfe7d6a0b5cc6f52dbbdc799b19b378f1243138", size = 87890, upload-time = "2025-11-25T22:34:46.171Z" },
]
[[package]]
name = "aind-data-schema-models"
-version = "4.6.2"
-source = { registry = "https://pypi.org/simple" }
+version = "5.2.2"
+source = { git = "https://github.com/AllenNeuralDynamics/aind-data-schema-models?rev=main#8bf1da4cde1561bcdb683d9ee15130fd0296c4aa" }
dependencies = [
{ name = "importlib-resources" },
{ name = "pydantic" },
{ name = "requests" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/b6/c2/7c18782963b33c22e4e05c17e143c38d6d3c8d44fd56c0395141b453ea17/aind_data_schema_models-4.6.2.tar.gz", hash = "sha256:8b3b6bfbfe985b0d1d329f04a57c6d2db9fe18acb5b43e162a3db24dc6df0d7c", size = 338337, upload-time = "2025-12-05T18:45:03.06Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/45/b2/c904fc2a5a27d7320eeffbdd6b1371cff46fb7cf9d531634d363863bc209/aind_data_schema_models-4.6.2-py3-none-any.whl", hash = "sha256:13d0f60dba66adb5aa296dca3baea0ee9cbb38df00b77412f5c7d924c76efa95", size = 307108, upload-time = "2025-12-05T18:45:01.729Z" },
-]
[[package]]
name = "aind-data-transfer-service"
-version = "1.23.0"
+version = "2.0.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aind-data-schema-models" },
@@ -192,22 +178,22 @@ dependencies = [
{ name = "pydantic" },
{ name = "pydantic-settings" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/84/8e/903f431572c7fe7c98c170fd928110a2212f496274050daa01815bd01fc1/aind_data_transfer_service-1.23.0.tar.gz", hash = "sha256:eb462c642ac9a05576f9f8057a010012afd252e040feef688559a3646982f603", size = 38579, upload-time = "2025-12-09T00:25:50.425Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/cd/03/60306855616b701cac67c01f552a26a7ebe211fc0168f355520ce14a69da/aind_data_transfer_service-2.0.2.tar.gz", hash = "sha256:753063c1c626ff263f8299a5a7448efa74ce535559d3ad3a80fa812ecd653889", size = 36889, upload-time = "2026-01-27T00:23:56.012Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/8c/9d/1d242e2d1fb2ecc198ab8000fc22ddf7ce29927a9b6b6ccdf02baf4a1bd3/aind_data_transfer_service-1.23.0-py3-none-any.whl", hash = "sha256:a77abb077970c26f196b8eeb4b70e984163679095a4c412889d25917791ed60e", size = 24009, upload-time = "2025-12-09T00:25:49.263Z" },
+ { url = "https://files.pythonhosted.org/packages/25/90/e77fff58677299129b685d0a76c7127fa08b18b19d83d057d954eb56b809/aind_data_transfer_service-2.0.2-py3-none-any.whl", hash = "sha256:6771732fc94eeec08792a48fb81a03d6970375f9553b786290b7aecb5cebb32f", size = 23061, upload-time = "2026-01-27T00:23:55.032Z" },
]
[[package]]
name = "aind-watchdog-service"
-version = "0.1.6.dev8"
+version = "0.1.6"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aind-data-transfer-service" },
{ name = "pyyaml" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/ce/7a/133583e96793c98b46ed06e7e591b7364bdb96a557b5a647dee4294961c3/aind_watchdog_service-0.1.6.dev8.tar.gz", hash = "sha256:5636372fba8504ab3679678319183a39361c655593d3f6d5c919ca41ace7f8ab", size = 392177, upload-time = "2025-11-25T17:20:21.887Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/15/4a/d42d8bc518260b195c5702146af3c5cf4e391ddd61abfe85dc7d48c90eaf/aind_watchdog_service-0.1.6.tar.gz", hash = "sha256:1b1679e37696bf269e646cf943f2a8255f7aaaacc779de0cce61abc3570dc169", size = 390289, upload-time = "2026-01-22T01:54:30.006Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/b8/cd/3607a1b5bfa8af2cc33f5b44a56c16337a09571d6ee29fbb61fef75d3cd7/aind_watchdog_service-0.1.6.dev8-py3-none-any.whl", hash = "sha256:8f15baf43a2ced64384075d7d3eb88a2a8f96460db020dbd38353a1ee4a2fb4c", size = 48580, upload-time = "2025-11-25T17:20:20.575Z" },
+ { url = "https://files.pythonhosted.org/packages/29/1a/8bcc17159e4eef205f4463d2422a66ad685b31717b6416a2b40d60ec0177/aind_watchdog_service-0.1.6-py3-none-any.whl", hash = "sha256:69571b4e50719c6cec38d7d901cdffdcdca296039ebebce8971ef4aef849dee9", size = 47801, upload-time = "2026-01-22T01:54:28.827Z" },
]
[[package]]
@@ -278,7 +264,8 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pydantic" },
{ name = "pydantic-settings" },
- { name = "sphinx" },
+ { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
+ { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/7b/df/87120e2195f08d760bc5cf8a31cfa2381a6887517aa89453b23f1ae3354f/autodoc_pydantic-2.2.0-py3-none-any.whl", hash = "sha256:8c6a36fbf6ed2700ea9c6d21ea76ad541b621fbdf16b5a80ee04673548af4d95", size = 34001, upload-time = "2024-04-27T10:57:00.542Z" },
@@ -313,11 +300,11 @@ wheels = [
[[package]]
name = "certifi"
-version = "2025.11.12"
+version = "2026.1.4"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/a2/8c/58f469717fa48465e4a50c014a0400602d3c437d7c0c468e17ada824da3a/certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316", size = 160538, upload-time = "2025-11-12T02:54:51.517Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268, upload-time = "2026-01-04T02:42:41.825Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" },
+ { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" },
]
[[package]]
@@ -690,11 +677,11 @@ wheels = [
[[package]]
name = "docutils"
-version = "0.21.2"
+version = "0.22.4"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444, upload-time = "2024-04-23T18:57:18.24Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/ae/b6/03bb70946330e88ffec97aefd3ea75ba575cb2e762061e0e62a213befee8/docutils-0.22.4.tar.gz", hash = "sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968", size = 2291750, upload-time = "2025-12-18T19:00:26.443Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408, upload-time = "2024-04-23T18:57:14.835Z" },
+ { url = "https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de", size = 633196, upload-time = "2025-12-18T19:00:18.077Z" },
]
[[package]]
@@ -730,67 +717,68 @@ wheels = [
[[package]]
name = "fonttools"
-version = "4.61.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/33/f9/0e84d593c0e12244150280a630999835a64f2852276161b62a0f98318de0/fonttools-4.61.0.tar.gz", hash = "sha256:ec520a1f0c7758d7a858a00f090c1745f6cde6a7c5e76fb70ea4044a15f712e7", size = 3561884, upload-time = "2025-11-28T17:05:49.491Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/fd/be/5aa89cdddf2863d8afbdc19eb8ec5d8d35d40eeeb8e6cf52c5ff1c2dbd33/fonttools-4.61.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a32a16951cbf113d38f1dd8551b277b6e06e0f6f776fece0f99f746d739e1be3", size = 2847553, upload-time = "2025-11-28T17:04:30.539Z" },
- { url = "https://files.pythonhosted.org/packages/0d/3e/6ff643b07cead1236a534f51291ae2981721cf419135af5b740c002a66dd/fonttools-4.61.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:328a9c227984bebaf69f3ac9062265f8f6acc7ddf2e4e344c63358579af0aa3d", size = 2388298, upload-time = "2025-11-28T17:04:32.161Z" },
- { url = "https://files.pythonhosted.org/packages/c3/15/fca8dfbe7b482e6f240b1aad0ed7c6e2e75e7a28efa3d3a03b570617b5e5/fonttools-4.61.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f0bafc8a3b3749c69cc610e5aa3da832d39c2a37a68f03d18ec9a02ecaac04a", size = 5054133, upload-time = "2025-11-28T17:04:34.035Z" },
- { url = "https://files.pythonhosted.org/packages/6a/a2/821c61c691b21fd09e07528a9a499cc2b075ac83ddb644aa16c9875a64bc/fonttools-4.61.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b5ca59b7417d149cf24e4c1933c9f44b2957424fc03536f132346d5242e0ebe5", size = 5031410, upload-time = "2025-11-28T17:04:36.141Z" },
- { url = "https://files.pythonhosted.org/packages/e8/f6/8b16339e93d03c732c8a23edefe3061b17a5f9107ddc47a3215ecd054cac/fonttools-4.61.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:df8cbce85cf482eb01f4551edca978c719f099c623277bda8332e5dbe7dba09d", size = 5030005, upload-time = "2025-11-28T17:04:38.314Z" },
- { url = "https://files.pythonhosted.org/packages/ac/eb/d4e150427bdaa147755239c931bbce829a88149ade5bfd8a327afe565567/fonttools-4.61.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7fb5b84f48a6a733ca3d7f41aa9551908ccabe8669ffe79586560abcc00a9cfd", size = 5154026, upload-time = "2025-11-28T17:04:40.34Z" },
- { url = "https://files.pythonhosted.org/packages/7f/5f/3dd00ce0dba6759943c707b1830af8c0bcf6f8f1a9fe46cb82e7ac2aaa74/fonttools-4.61.0-cp311-cp311-win32.whl", hash = "sha256:787ef9dfd1ea9fe49573c272412ae5f479d78e671981819538143bec65863865", size = 2276035, upload-time = "2025-11-28T17:04:42.59Z" },
- { url = "https://files.pythonhosted.org/packages/4e/44/798c472f096ddf12955eddb98f4f7c906e7497695d04ce073ddf7161d134/fonttools-4.61.0-cp311-cp311-win_amd64.whl", hash = "sha256:14fafda386377b6131d9e448af42d0926bad47e038de0e5ba1d58c25d621f028", size = 2327290, upload-time = "2025-11-28T17:04:44.57Z" },
- { url = "https://files.pythonhosted.org/packages/00/5d/19e5939f773c7cb05480fe2e881d63870b63ee2b4bdb9a77d55b1d36c7b9/fonttools-4.61.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e24a1565c4e57111ec7f4915f8981ecbb61adf66a55f378fdc00e206059fcfef", size = 2846930, upload-time = "2025-11-28T17:04:46.639Z" },
- { url = "https://files.pythonhosted.org/packages/25/b2/0658faf66f705293bd7e739a4f038302d188d424926be9c59bdad945664b/fonttools-4.61.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e2bfacb5351303cae9f072ccf3fc6ecb437a6f359c0606bae4b1ab6715201d87", size = 2383016, upload-time = "2025-11-28T17:04:48.525Z" },
- { url = "https://files.pythonhosted.org/packages/29/a3/1fa90b95b690f0d7541f48850adc40e9019374d896c1b8148d15012b2458/fonttools-4.61.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0bdcf2e29d65c26299cc3d502f4612365e8b90a939f46cd92d037b6cb7bb544a", size = 4949425, upload-time = "2025-11-28T17:04:50.482Z" },
- { url = "https://files.pythonhosted.org/packages/af/00/acf18c00f6c501bd6e05ee930f926186f8a8e268265407065688820f1c94/fonttools-4.61.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e6cd0d9051b8ddaf7385f99dd82ec2a058e2b46cf1f1961e68e1ff20fcbb61af", size = 4999632, upload-time = "2025-11-28T17:04:52.508Z" },
- { url = "https://files.pythonhosted.org/packages/5f/e0/19a2b86e54109b1d2ee8743c96a1d297238ae03243897bc5345c0365f34d/fonttools-4.61.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e074bc07c31406f45c418e17c1722e83560f181d122c412fa9e815df0ff74810", size = 4939438, upload-time = "2025-11-28T17:04:54.437Z" },
- { url = "https://files.pythonhosted.org/packages/04/35/7b57a5f57d46286360355eff8d6b88c64ab6331107f37a273a71c803798d/fonttools-4.61.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5a9b78da5d5faa17e63b2404b77feeae105c1b7e75f26020ab7a27b76e02039f", size = 5088960, upload-time = "2025-11-28T17:04:56.348Z" },
- { url = "https://files.pythonhosted.org/packages/3e/0e/6c5023eb2e0fe5d1ababc7e221e44acd3ff668781489cc1937a6f83d620a/fonttools-4.61.0-cp312-cp312-win32.whl", hash = "sha256:9821ed77bb676736b88fa87a737c97b6af06e8109667e625a4f00158540ce044", size = 2264404, upload-time = "2025-11-28T17:04:58.149Z" },
- { url = "https://files.pythonhosted.org/packages/36/0b/63273128c7c5df19b1e4cd92e0a1e6ea5bb74a400c4905054c96ad60a675/fonttools-4.61.0-cp312-cp312-win_amd64.whl", hash = "sha256:0011d640afa61053bc6590f9a3394bd222de7cfde19346588beabac374e9d8ac", size = 2314427, upload-time = "2025-11-28T17:04:59.812Z" },
- { url = "https://files.pythonhosted.org/packages/17/45/334f0d7f181e5473cfb757e1b60f4e60e7fc64f28d406e5d364a952718c0/fonttools-4.61.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba774b8cbd8754f54b8eb58124e8bd45f736b2743325ab1a5229698942b9b433", size = 2841801, upload-time = "2025-11-28T17:05:01.621Z" },
- { url = "https://files.pythonhosted.org/packages/cc/63/97b9c78e1f79bc741d4efe6e51f13872d8edb2b36e1b9fb2bab0d4491bb7/fonttools-4.61.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c84b430616ed73ce46e9cafd0bf0800e366a3e02fb7e1ad7c1e214dbe3862b1f", size = 2379024, upload-time = "2025-11-28T17:05:03.668Z" },
- { url = "https://files.pythonhosted.org/packages/4e/80/c87bc524a90dbeb2a390eea23eae448286983da59b7e02c67fa0ca96a8c5/fonttools-4.61.0-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b2b734d8391afe3c682320840c8191de9bd24e7eb85768dd4dc06ed1b63dbb1b", size = 4923706, upload-time = "2025-11-28T17:05:05.494Z" },
- { url = "https://files.pythonhosted.org/packages/6d/f6/a3b0374811a1de8c3f9207ec88f61ad1bb96f938ed89babae26c065c2e46/fonttools-4.61.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5c5fff72bf31b0e558ed085e4fd7ed96eb85881404ecc39ed2a779e7cf724eb", size = 4979751, upload-time = "2025-11-28T17:05:07.665Z" },
- { url = "https://files.pythonhosted.org/packages/a5/3b/30f63b4308b449091573285f9d27619563a84f399946bca3eadc9554afbe/fonttools-4.61.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:14a290c5c93fcab76b7f451e6a4b7721b712d90b3b5ed6908f1abcf794e90d6d", size = 4921113, upload-time = "2025-11-28T17:05:09.551Z" },
- { url = "https://files.pythonhosted.org/packages/41/6c/58e6e9b7d9d8bf2d7010bd7bb493060b39b02a12d1cda64a8bfb116ce760/fonttools-4.61.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:13e3e20a5463bfeb77b3557d04b30bd6a96a6bb5c15c7b2e7908903e69d437a0", size = 5063183, upload-time = "2025-11-28T17:05:11.677Z" },
- { url = "https://files.pythonhosted.org/packages/3f/e3/52c790ab2b07492df059947a1fd7778e105aac5848c0473029a4d20481a2/fonttools-4.61.0-cp313-cp313-win32.whl", hash = "sha256:6781e7a4bb010be1cd69a29927b0305c86b843395f2613bdabe115f7d6ea7f34", size = 2263159, upload-time = "2025-11-28T17:05:13.292Z" },
- { url = "https://files.pythonhosted.org/packages/e9/1f/116013b200fbeba871046554d5d2a45fefa69a05c40e9cdfd0d4fff53edc/fonttools-4.61.0-cp313-cp313-win_amd64.whl", hash = "sha256:c53b47834ae41e8e4829171cc44fec0fdf125545a15f6da41776b926b9645a9a", size = 2313530, upload-time = "2025-11-28T17:05:14.848Z" },
- { url = "https://files.pythonhosted.org/packages/d3/99/59b1e25987787cb714aa9457cee4c9301b7c2153f0b673e2b8679d37669d/fonttools-4.61.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:96dfc9bc1f2302224e48e6ee37e656eddbab810b724b52e9d9c13a57a6abad01", size = 2841429, upload-time = "2025-11-28T17:05:16.671Z" },
- { url = "https://files.pythonhosted.org/packages/2b/b2/4c1911d4332c8a144bb3b44416e274ccca0e297157c971ea1b3fbb855590/fonttools-4.61.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3b2065d94e5d63aafc2591c8b6ccbdb511001d9619f1bca8ad39b745ebeb5efa", size = 2378987, upload-time = "2025-11-28T17:05:18.69Z" },
- { url = "https://files.pythonhosted.org/packages/24/b0/f442e90fde5d2af2ae0cb54008ab6411edc557ee33b824e13e1d04925ac9/fonttools-4.61.0-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e0d87e81e4d869549585ba0beb3f033718501c1095004f5e6aef598d13ebc216", size = 4873270, upload-time = "2025-11-28T17:05:20.625Z" },
- { url = "https://files.pythonhosted.org/packages/bb/04/f5d5990e33053c8a59b90b1d7e10ad9b97a73f42c745304da0e709635fab/fonttools-4.61.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1cfa2eb9bae650e58f0e8ad53c49d19a844d6034d6b259f30f197238abc1ccee", size = 4968270, upload-time = "2025-11-28T17:05:22.515Z" },
- { url = "https://files.pythonhosted.org/packages/94/9f/2091402e0d27c9c8c4bab5de0e5cd146d9609a2d7d1c666bbb75c0011c1a/fonttools-4.61.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4238120002e68296d55e091411c09eab94e111c8ce64716d17df53fd0eb3bb3d", size = 4919799, upload-time = "2025-11-28T17:05:24.437Z" },
- { url = "https://files.pythonhosted.org/packages/a8/72/86adab22fde710b829f8ffbc8f264df01928e5b7a8f6177fa29979ebf256/fonttools-4.61.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b6ceac262cc62bec01b3bb59abccf41b24ef6580869e306a4e88b7e56bb4bdda", size = 5030966, upload-time = "2025-11-28T17:05:26.115Z" },
- { url = "https://files.pythonhosted.org/packages/e8/a7/7c8e31b003349e845b853f5e0a67b95ff6b052fa4f5224f8b72624f5ac69/fonttools-4.61.0-cp314-cp314-win32.whl", hash = "sha256:adbb4ecee1a779469a77377bbe490565effe8fce6fb2e6f95f064de58f8bac85", size = 2267243, upload-time = "2025-11-28T17:05:27.807Z" },
- { url = "https://files.pythonhosted.org/packages/20/ee/f434fe7749360497c52b7dcbcfdbccdaab0a71c59f19d572576066717122/fonttools-4.61.0-cp314-cp314-win_amd64.whl", hash = "sha256:02bdf8e04d1a70476564b8640380f04bb4ac74edc1fc71f1bacb840b3e398ee9", size = 2318822, upload-time = "2025-11-28T17:05:29.882Z" },
- { url = "https://files.pythonhosted.org/packages/33/b3/c16255320255e5c1863ca2b2599bb61a46e2f566db0bbb9948615a8fe692/fonttools-4.61.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:627216062d90ab0d98215176d8b9562c4dd5b61271d35f130bcd30f6a8aaa33a", size = 2924917, upload-time = "2025-11-28T17:05:31.46Z" },
- { url = "https://files.pythonhosted.org/packages/e2/b8/08067ae21de705a817777c02ef36ab0b953cbe91d8adf134f9c2da75ed6d/fonttools-4.61.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7b446623c9cd5f14a59493818eaa80255eec2468c27d2c01b56e05357c263195", size = 2413576, upload-time = "2025-11-28T17:05:33.343Z" },
- { url = "https://files.pythonhosted.org/packages/42/f1/96ff43f92addce2356780fdc203f2966206f3d22ea20e242c27826fd7442/fonttools-4.61.0-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:70e2a0c0182ee75e493ef33061bfebf140ea57e035481d2f95aa03b66c7a0e05", size = 4877447, upload-time = "2025-11-28T17:05:35.278Z" },
- { url = "https://files.pythonhosted.org/packages/d0/1e/a3d8e51ed9ccfd7385e239ae374b78d258a0fb82d82cab99160a014a45d1/fonttools-4.61.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9064b0f55b947e929ac669af5311ab1f26f750214db6dd9a0c97e091e918f486", size = 5095681, upload-time = "2025-11-28T17:05:37.142Z" },
- { url = "https://files.pythonhosted.org/packages/eb/f6/d256bd6c1065c146a0bdddf1c62f542e08ae5b3405dbf3fcc52be272f674/fonttools-4.61.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2cb5e45a824ce14b90510024d0d39dae51bd4fbb54c42a9334ea8c8cf4d95cbe", size = 4974140, upload-time = "2025-11-28T17:05:39.5Z" },
- { url = "https://files.pythonhosted.org/packages/5d/0c/96633eb4b26f138cc48561c6e0c44b4ea48acea56b20b507d6b14f8e80ce/fonttools-4.61.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6e5ca8c62efdec7972dfdfd454415c4db49b89aeaefaaacada432f3b7eea9866", size = 5001741, upload-time = "2025-11-28T17:05:41.424Z" },
- { url = "https://files.pythonhosted.org/packages/6f/9a/3b536bad3be4f26186f296e749ff17bad3e6d57232c104d752d24b2e265b/fonttools-4.61.0-cp314-cp314t-win32.whl", hash = "sha256:63c7125d31abe3e61d7bb917329b5543c5b3448db95f24081a13aaf064360fc8", size = 2330707, upload-time = "2025-11-28T17:05:43.548Z" },
- { url = "https://files.pythonhosted.org/packages/18/ea/e6b9ac610451ee9f04477c311ad126de971f6112cb579fa391d2a8edb00b/fonttools-4.61.0-cp314-cp314t-win_amd64.whl", hash = "sha256:67d841aa272be5500de7f447c40d1d8452783af33b4c3599899319f6ef9ad3c1", size = 2395950, upload-time = "2025-11-28T17:05:45.638Z" },
- { url = "https://files.pythonhosted.org/packages/0c/14/634f7daea5ffe6a5f7a0322ba8e1a0e23c9257b80aa91458107896d1dfc7/fonttools-4.61.0-py3-none-any.whl", hash = "sha256:276f14c560e6f98d24ef7f5f44438e55ff5a67f78fa85236b218462c9f5d0635", size = 1144485, upload-time = "2025-11-28T17:05:47.573Z" },
+version = "4.61.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ec/ca/cf17b88a8df95691275a3d77dc0a5ad9907f328ae53acbe6795da1b2f5ed/fonttools-4.61.1.tar.gz", hash = "sha256:6675329885c44657f826ef01d9e4fb33b9158e9d93c537d84ad8399539bc6f69", size = 3565756, upload-time = "2025-12-12T17:31:24.246Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/69/12/bf9f4eaa2fad039356cc627587e30ed008c03f1cebd3034376b5ee8d1d44/fonttools-4.61.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c6604b735bb12fef8e0efd5578c9fb5d3d8532d5001ea13a19cddf295673ee09", size = 2852213, upload-time = "2025-12-12T17:29:46.675Z" },
+ { url = "https://files.pythonhosted.org/packages/ac/49/4138d1acb6261499bedde1c07f8c2605d1d8f9d77a151e5507fd3ef084b6/fonttools-4.61.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5ce02f38a754f207f2f06557523cd39a06438ba3aafc0639c477ac409fc64e37", size = 2401689, upload-time = "2025-12-12T17:29:48.769Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/fe/e6ce0fe20a40e03aef906af60aa87668696f9e4802fa283627d0b5ed777f/fonttools-4.61.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77efb033d8d7ff233385f30c62c7c79271c8885d5c9657d967ede124671bbdfb", size = 5058809, upload-time = "2025-12-12T17:29:51.701Z" },
+ { url = "https://files.pythonhosted.org/packages/79/61/1ca198af22f7dd22c17ab86e9024ed3c06299cfdb08170640e9996d501a0/fonttools-4.61.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:75c1a6dfac6abd407634420c93864a1e274ebc1c7531346d9254c0d8f6ca00f9", size = 5036039, upload-time = "2025-12-12T17:29:53.659Z" },
+ { url = "https://files.pythonhosted.org/packages/99/cc/fa1801e408586b5fce4da9f5455af8d770f4fc57391cd5da7256bb364d38/fonttools-4.61.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0de30bfe7745c0d1ffa2b0b7048fb7123ad0d71107e10ee090fa0b16b9452e87", size = 5034714, upload-time = "2025-12-12T17:29:55.592Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/aa/b7aeafe65adb1b0a925f8f25725e09f078c635bc22754f3fecb7456955b0/fonttools-4.61.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:58b0ee0ab5b1fc9921eccfe11d1435added19d6494dde14e323f25ad2bc30c56", size = 5158648, upload-time = "2025-12-12T17:29:57.861Z" },
+ { url = "https://files.pythonhosted.org/packages/99/f9/08ea7a38663328881384c6e7777bbefc46fd7d282adfd87a7d2b84ec9d50/fonttools-4.61.1-cp311-cp311-win32.whl", hash = "sha256:f79b168428351d11e10c5aeb61a74e1851ec221081299f4cf56036a95431c43a", size = 2280681, upload-time = "2025-12-12T17:29:59.943Z" },
+ { url = "https://files.pythonhosted.org/packages/07/ad/37dd1ae5fa6e01612a1fbb954f0927681f282925a86e86198ccd7b15d515/fonttools-4.61.1-cp311-cp311-win_amd64.whl", hash = "sha256:fe2efccb324948a11dd09d22136fe2ac8a97d6c1347cf0b58a911dcd529f66b7", size = 2331951, upload-time = "2025-12-12T17:30:02.254Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/16/7decaa24a1bd3a70c607b2e29f0adc6159f36a7e40eaba59846414765fd4/fonttools-4.61.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f3cb4a569029b9f291f88aafc927dd53683757e640081ca8c412781ea144565e", size = 2851593, upload-time = "2025-12-12T17:30:04.225Z" },
+ { url = "https://files.pythonhosted.org/packages/94/98/3c4cb97c64713a8cf499b3245c3bf9a2b8fd16a3e375feff2aed78f96259/fonttools-4.61.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41a7170d042e8c0024703ed13b71893519a1a6d6e18e933e3ec7507a2c26a4b2", size = 2400231, upload-time = "2025-12-12T17:30:06.47Z" },
+ { url = "https://files.pythonhosted.org/packages/b7/37/82dbef0f6342eb01f54bca073ac1498433d6ce71e50c3c3282b655733b31/fonttools-4.61.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10d88e55330e092940584774ee5e8a6971b01fc2f4d3466a1d6c158230880796", size = 4954103, upload-time = "2025-12-12T17:30:08.432Z" },
+ { url = "https://files.pythonhosted.org/packages/6c/44/f3aeac0fa98e7ad527f479e161aca6c3a1e47bb6996b053d45226fe37bf2/fonttools-4.61.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:15acc09befd16a0fb8a8f62bc147e1a82817542d72184acca9ce6e0aeda9fa6d", size = 5004295, upload-time = "2025-12-12T17:30:10.56Z" },
+ { url = "https://files.pythonhosted.org/packages/14/e8/7424ced75473983b964d09f6747fa09f054a6d656f60e9ac9324cf40c743/fonttools-4.61.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e6bcdf33aec38d16508ce61fd81838f24c83c90a1d1b8c68982857038673d6b8", size = 4944109, upload-time = "2025-12-12T17:30:12.874Z" },
+ { url = "https://files.pythonhosted.org/packages/c8/8b/6391b257fa3d0b553d73e778f953a2f0154292a7a7a085e2374b111e5410/fonttools-4.61.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5fade934607a523614726119164ff621e8c30e8fa1ffffbbd358662056ba69f0", size = 5093598, upload-time = "2025-12-12T17:30:15.79Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/71/fd2ea96cdc512d92da5678a1c98c267ddd4d8c5130b76d0f7a80f9a9fde8/fonttools-4.61.1-cp312-cp312-win32.whl", hash = "sha256:75da8f28eff26defba42c52986de97b22106cb8f26515b7c22443ebc9c2d3261", size = 2269060, upload-time = "2025-12-12T17:30:18.058Z" },
+ { url = "https://files.pythonhosted.org/packages/80/3b/a3e81b71aed5a688e89dfe0e2694b26b78c7d7f39a5ffd8a7d75f54a12a8/fonttools-4.61.1-cp312-cp312-win_amd64.whl", hash = "sha256:497c31ce314219888c0e2fce5ad9178ca83fe5230b01a5006726cdf3ac9f24d9", size = 2319078, upload-time = "2025-12-12T17:30:22.862Z" },
+ { url = "https://files.pythonhosted.org/packages/4b/cf/00ba28b0990982530addb8dc3e9e6f2fa9cb5c20df2abdda7baa755e8fe1/fonttools-4.61.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c56c488ab471628ff3bfa80964372fc13504ece601e0d97a78ee74126b2045c", size = 2846454, upload-time = "2025-12-12T17:30:24.938Z" },
+ { url = "https://files.pythonhosted.org/packages/5a/ca/468c9a8446a2103ae645d14fee3f610567b7042aba85031c1c65e3ef7471/fonttools-4.61.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc492779501fa723b04d0ab1f5be046797fee17d27700476edc7ee9ae535a61e", size = 2398191, upload-time = "2025-12-12T17:30:27.343Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/4b/d67eedaed19def5967fade3297fed8161b25ba94699efc124b14fb68cdbc/fonttools-4.61.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:64102ca87e84261419c3747a0d20f396eb024bdbeb04c2bfb37e2891f5fadcb5", size = 4928410, upload-time = "2025-12-12T17:30:29.771Z" },
+ { url = "https://files.pythonhosted.org/packages/b0/8d/6fb3494dfe61a46258cd93d979cf4725ded4eb46c2a4ca35e4490d84daea/fonttools-4.61.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c1b526c8d3f615a7b1867f38a9410849c8f4aef078535742198e942fba0e9bd", size = 4984460, upload-time = "2025-12-12T17:30:32.073Z" },
+ { url = "https://files.pythonhosted.org/packages/f7/f1/a47f1d30b3dc00d75e7af762652d4cbc3dff5c2697a0dbd5203c81afd9c3/fonttools-4.61.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:41ed4b5ec103bd306bb68f81dc166e77409e5209443e5773cb4ed837bcc9b0d3", size = 4925800, upload-time = "2025-12-12T17:30:34.339Z" },
+ { url = "https://files.pythonhosted.org/packages/a7/01/e6ae64a0981076e8a66906fab01539799546181e32a37a0257b77e4aa88b/fonttools-4.61.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b501c862d4901792adaec7c25b1ecc749e2662543f68bb194c42ba18d6eec98d", size = 5067859, upload-time = "2025-12-12T17:30:36.593Z" },
+ { url = "https://files.pythonhosted.org/packages/73/aa/28e40b8d6809a9b5075350a86779163f074d2b617c15d22343fce81918db/fonttools-4.61.1-cp313-cp313-win32.whl", hash = "sha256:4d7092bb38c53bbc78e9255a59158b150bcdc115a1e3b3ce0b5f267dc35dd63c", size = 2267821, upload-time = "2025-12-12T17:30:38.478Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/59/453c06d1d83dc0951b69ef692d6b9f1846680342927df54e9a1ca91c6f90/fonttools-4.61.1-cp313-cp313-win_amd64.whl", hash = "sha256:21e7c8d76f62ab13c9472ccf74515ca5b9a761d1bde3265152a6dc58700d895b", size = 2318169, upload-time = "2025-12-12T17:30:40.951Z" },
+ { url = "https://files.pythonhosted.org/packages/32/8f/4e7bf82c0cbb738d3c2206c920ca34ca74ef9dabde779030145d28665104/fonttools-4.61.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fff4f534200a04b4a36e7ae3cb74493afe807b517a09e99cb4faa89a34ed6ecd", size = 2846094, upload-time = "2025-12-12T17:30:43.511Z" },
+ { url = "https://files.pythonhosted.org/packages/71/09/d44e45d0a4f3a651f23a1e9d42de43bc643cce2971b19e784cc67d823676/fonttools-4.61.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d9203500f7c63545b4ce3799319fe4d9feb1a1b89b28d3cb5abd11b9dd64147e", size = 2396589, upload-time = "2025-12-12T17:30:45.681Z" },
+ { url = "https://files.pythonhosted.org/packages/89/18/58c64cafcf8eb677a99ef593121f719e6dcbdb7d1c594ae5a10d4997ca8a/fonttools-4.61.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fa646ecec9528bef693415c79a86e733c70a4965dd938e9a226b0fc64c9d2e6c", size = 4877892, upload-time = "2025-12-12T17:30:47.709Z" },
+ { url = "https://files.pythonhosted.org/packages/8a/ec/9e6b38c7ba1e09eb51db849d5450f4c05b7e78481f662c3b79dbde6f3d04/fonttools-4.61.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:11f35ad7805edba3aac1a3710d104592df59f4b957e30108ae0ba6c10b11dd75", size = 4972884, upload-time = "2025-12-12T17:30:49.656Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/87/b5339da8e0256734ba0dbbf5b6cdebb1dd79b01dc8c270989b7bcd465541/fonttools-4.61.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b931ae8f62db78861b0ff1ac017851764602288575d65b8e8ff1963fed419063", size = 4924405, upload-time = "2025-12-12T17:30:51.735Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/47/e3409f1e1e69c073a3a6fd8cb886eb18c0bae0ee13db2c8d5e7f8495e8b7/fonttools-4.61.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b148b56f5de675ee16d45e769e69f87623a4944f7443850bf9a9376e628a89d2", size = 5035553, upload-time = "2025-12-12T17:30:54.823Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/b6/1f6600161b1073a984294c6c031e1a56ebf95b6164249eecf30012bb2e38/fonttools-4.61.1-cp314-cp314-win32.whl", hash = "sha256:9b666a475a65f4e839d3d10473fad6d47e0a9db14a2f4a224029c5bfde58ad2c", size = 2271915, upload-time = "2025-12-12T17:30:57.913Z" },
+ { url = "https://files.pythonhosted.org/packages/52/7b/91e7b01e37cc8eb0e1f770d08305b3655e4f002fc160fb82b3390eabacf5/fonttools-4.61.1-cp314-cp314-win_amd64.whl", hash = "sha256:4f5686e1fe5fce75d82d93c47a438a25bf0d1319d2843a926f741140b2b16e0c", size = 2323487, upload-time = "2025-12-12T17:30:59.804Z" },
+ { url = "https://files.pythonhosted.org/packages/39/5c/908ad78e46c61c3e3ed70c3b58ff82ab48437faf84ec84f109592cabbd9f/fonttools-4.61.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:e76ce097e3c57c4bcb67c5aa24a0ecdbd9f74ea9219997a707a4061fbe2707aa", size = 2929571, upload-time = "2025-12-12T17:31:02.574Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/41/975804132c6dea64cdbfbaa59f3518a21c137a10cccf962805b301ac6ab2/fonttools-4.61.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9cfef3ab326780c04d6646f68d4b4742aae222e8b8ea1d627c74e38afcbc9d91", size = 2435317, upload-time = "2025-12-12T17:31:04.974Z" },
+ { url = "https://files.pythonhosted.org/packages/b0/5a/aef2a0a8daf1ebaae4cfd83f84186d4a72ee08fd6a8451289fcd03ffa8a4/fonttools-4.61.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a75c301f96db737e1c5ed5fd7d77d9c34466de16095a266509e13da09751bd19", size = 4882124, upload-time = "2025-12-12T17:31:07.456Z" },
+ { url = "https://files.pythonhosted.org/packages/80/33/d6db3485b645b81cea538c9d1c9219d5805f0877fda18777add4671c5240/fonttools-4.61.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:91669ccac46bbc1d09e9273546181919064e8df73488ea087dcac3e2968df9ba", size = 5100391, upload-time = "2025-12-12T17:31:09.732Z" },
+ { url = "https://files.pythonhosted.org/packages/6c/d6/675ba631454043c75fcf76f0ca5463eac8eb0666ea1d7badae5fea001155/fonttools-4.61.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c33ab3ca9d3ccd581d58e989d67554e42d8d4ded94ab3ade3508455fe70e65f7", size = 4978800, upload-time = "2025-12-12T17:31:11.681Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/33/d3ec753d547a8d2bdaedd390d4a814e8d5b45a093d558f025c6b990b554c/fonttools-4.61.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:664c5a68ec406f6b1547946683008576ef8b38275608e1cee6c061828171c118", size = 5006426, upload-time = "2025-12-12T17:31:13.764Z" },
+ { url = "https://files.pythonhosted.org/packages/b4/40/cc11f378b561a67bea850ab50063366a0d1dd3f6d0a30ce0f874b0ad5664/fonttools-4.61.1-cp314-cp314t-win32.whl", hash = "sha256:aed04cabe26f30c1647ef0e8fbb207516fd40fe9472e9439695f5c6998e60ac5", size = 2335377, upload-time = "2025-12-12T17:31:16.49Z" },
+ { url = "https://files.pythonhosted.org/packages/e4/ff/c9a2b66b39f8628531ea58b320d66d951267c98c6a38684daa8f50fb02f8/fonttools-4.61.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2180f14c141d2f0f3da43f3a81bc8aa4684860f6b0e6f9e165a4831f24e6a23b", size = 2400613, upload-time = "2025-12-12T17:31:18.769Z" },
+ { url = "https://files.pythonhosted.org/packages/c7/4e/ce75a57ff3aebf6fc1f4e9d508b8e5810618a33d900ad6c19eb30b290b97/fonttools-4.61.1-py3-none-any.whl", hash = "sha256:17d2bf5d541add43822bcf0c43d7d847b160c9bb01d15d5007d84e2217aaa371", size = 1148996, upload-time = "2025-12-12T17:31:21.03Z" },
]
[[package]]
name = "furo"
-version = "2025.9.25"
+version = "2025.12.19"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "accessible-pygments" },
{ name = "beautifulsoup4" },
{ name = "pygments" },
- { name = "sphinx" },
+ { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
+ { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
{ name = "sphinx-basic-ng" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/4e/29/ff3b83a1ffce74676043ab3e7540d398e0b1ce7660917a00d7c4958b93da/furo-2025.9.25.tar.gz", hash = "sha256:3eac05582768fdbbc2bdfa1cdbcdd5d33cfc8b4bd2051729ff4e026a1d7e0a98", size = 1662007, upload-time = "2025-09-25T21:37:19.221Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/ec/20/5f5ad4da6a5a27c80f2ed2ee9aee3f9e36c66e56e21c00fde467b2f8f88f/furo-2025.12.19.tar.gz", hash = "sha256:188d1f942037d8b37cd3985b955839fea62baa1730087dc29d157677c857e2a7", size = 1661473, upload-time = "2025-12-19T17:34:40.889Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/ba/69/964b55f389c289e16ba2a5dfe587c3c462aac09e24123f09ddf703889584/furo-2025.9.25-py3-none-any.whl", hash = "sha256:2937f68e823b8e37b410c972c371bc2b1d88026709534927158e0cb3fac95afe", size = 340409, upload-time = "2025-09-25T21:37:17.244Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl", hash = "sha256:bb0ead5309f9500130665a26bee87693c41ce4dbdff864dbfb6b0dae4673d24f", size = 339262, upload-time = "2025-12-19T17:34:38.905Z" },
]
[[package]]
@@ -807,14 +795,14 @@ wheels = [
[[package]]
name = "gitpython"
-version = "3.1.45"
+version = "3.1.46"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "gitdb" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/9a/c8/dd58967d119baab745caec2f9d853297cec1989ec1d63f677d3880632b88/gitpython-3.1.45.tar.gz", hash = "sha256:85b0ee964ceddf211c41b9f27a49086010a190fd8132a24e21f362a4b36a791c", size = 215076, upload-time = "2025-07-24T03:45:54.871Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/df/b5/59d16470a1f0dfe8c793f9ef56fd3826093fc52b3bd96d6b9d6c26c7e27b/gitpython-3.1.46.tar.gz", hash = "sha256:400124c7d0ef4ea03f7310ac2fbf7151e09ff97f2a3288d64a440c584a29c37f", size = 215371, upload-time = "2026-01-01T15:37:32.073Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/01/61/d4b89fec821f72385526e1b9d9a3a0385dda4a72b206d28049e2c7cd39b8/gitpython-3.1.45-py3-none-any.whl", hash = "sha256:8908cb2e02fb3b93b7eb0f2827125cb699869470432cc885f019b8fd0fccff77", size = 208168, upload-time = "2025-07-24T03:45:52.517Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl", hash = "sha256:79812ed143d9d25b6d176a10bb511de0f9c67b1fa641d82097b0ab90398a2058", size = 208620, upload-time = "2026-01-01T15:37:30.574Z" },
]
[[package]]
@@ -1084,14 +1072,14 @@ wheels = [
[[package]]
name = "markdown-it-py"
-version = "3.0.0"
+version = "4.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "mdurl" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" },
+ { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" },
]
[[package]]
@@ -1272,9 +1260,9 @@ name = "msal"
version = "1.34.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "cryptography", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
- { name = "pyjwt", extra = ["crypto"], marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
- { name = "requests", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
+ { name = "cryptography" },
+ { name = "pyjwt", extra = ["crypto"] },
+ { name = "requests" },
]
sdist = { url = "https://files.pythonhosted.org/packages/cf/0e/c857c46d653e104019a84f22d4494f2119b4fe9f896c92b4b864b3b045cc/msal-1.34.0.tar.gz", hash = "sha256:76ba83b716ea5a6d75b0279c0ac353a0e05b820ca1f6682c0eb7f45190c43c2f", size = 153961, upload-time = "2025-09-22T23:05:48.989Z" }
wheels = [
@@ -1283,7 +1271,7 @@ wheels = [
[[package]]
name = "myst-parser"
-version = "4.0.1"
+version = "5.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "docutils" },
@@ -1291,259 +1279,265 @@ dependencies = [
{ name = "markdown-it-py" },
{ name = "mdit-py-plugins" },
{ name = "pyyaml" },
- { name = "sphinx" },
+ { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
+ { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/66/a5/9626ba4f73555b3735ad86247a8077d4603aa8628537687c839ab08bfe44/myst_parser-4.0.1.tar.gz", hash = "sha256:5cfea715e4f3574138aecbf7d54132296bfd72bb614d31168f48c477a830a7c4", size = 93985, upload-time = "2025-02-12T10:53:03.833Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/33/fa/7b45eef11b7971f0beb29d27b7bfe0d747d063aa29e170d9edd004733c8a/myst_parser-5.0.0.tar.gz", hash = "sha256:f6f231452c56e8baa662cc352c548158f6a16fcbd6e3800fc594978002b94f3a", size = 98535, upload-time = "2026-01-15T09:08:18.036Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/5f/df/76d0321c3797b54b60fef9ec3bd6f4cfd124b9e422182156a1dd418722cf/myst_parser-4.0.1-py3-none-any.whl", hash = "sha256:9134e88959ec3b5780aedf8a99680ea242869d012e8821db3126d427edc9c95d", size = 84579, upload-time = "2025-02-12T10:53:02.078Z" },
+ { 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.3.5"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size = 20584950, upload-time = "2025-11-16T22:52:42.067Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/43/77/84dd1d2e34d7e2792a236ba180b5e8fcc1e3e414e761ce0253f63d7f572e/numpy-2.3.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10", size = 17034641, upload-time = "2025-11-16T22:49:19.336Z" },
- { url = "https://files.pythonhosted.org/packages/2a/ea/25e26fa5837106cde46ae7d0b667e20f69cbbc0efd64cba8221411ab26ae/numpy-2.3.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218", size = 12528324, upload-time = "2025-11-16T22:49:22.582Z" },
- { url = "https://files.pythonhosted.org/packages/4d/1a/e85f0eea4cf03d6a0228f5c0256b53f2df4bc794706e7df019fc622e47f1/numpy-2.3.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d", size = 5356872, upload-time = "2025-11-16T22:49:25.408Z" },
- { url = "https://files.pythonhosted.org/packages/5c/bb/35ef04afd567f4c989c2060cde39211e4ac5357155c1833bcd1166055c61/numpy-2.3.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5", size = 6893148, upload-time = "2025-11-16T22:49:27.549Z" },
- { url = "https://files.pythonhosted.org/packages/f2/2b/05bbeb06e2dff5eab512dfc678b1cc5ee94d8ac5956a0885c64b6b26252b/numpy-2.3.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7", size = 14557282, upload-time = "2025-11-16T22:49:30.964Z" },
- { url = "https://files.pythonhosted.org/packages/65/fb/2b23769462b34398d9326081fad5655198fcf18966fcb1f1e49db44fbf31/numpy-2.3.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4", size = 16897903, upload-time = "2025-11-16T22:49:34.191Z" },
- { url = "https://files.pythonhosted.org/packages/ac/14/085f4cf05fc3f1e8aa95e85404e984ffca9b2275a5dc2b1aae18a67538b8/numpy-2.3.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e", size = 16341672, upload-time = "2025-11-16T22:49:37.2Z" },
- { url = "https://files.pythonhosted.org/packages/6f/3b/1f73994904142b2aa290449b3bb99772477b5fd94d787093e4f24f5af763/numpy-2.3.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748", size = 18838896, upload-time = "2025-11-16T22:49:39.727Z" },
- { url = "https://files.pythonhosted.org/packages/cd/b9/cf6649b2124f288309ffc353070792caf42ad69047dcc60da85ee85fea58/numpy-2.3.5-cp311-cp311-win32.whl", hash = "sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c", size = 6563608, upload-time = "2025-11-16T22:49:42.079Z" },
- { url = "https://files.pythonhosted.org/packages/aa/44/9fe81ae1dcc29c531843852e2874080dc441338574ccc4306b39e2ff6e59/numpy-2.3.5-cp311-cp311-win_amd64.whl", hash = "sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c", size = 13078442, upload-time = "2025-11-16T22:49:43.99Z" },
- { url = "https://files.pythonhosted.org/packages/6d/a7/f99a41553d2da82a20a2f22e93c94f928e4490bb447c9ff3c4ff230581d3/numpy-2.3.5-cp311-cp311-win_arm64.whl", hash = "sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa", size = 10458555, upload-time = "2025-11-16T22:49:47.092Z" },
- { url = "https://files.pythonhosted.org/packages/44/37/e669fe6cbb2b96c62f6bbedc6a81c0f3b7362f6a59230b23caa673a85721/numpy-2.3.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e", size = 16733873, upload-time = "2025-11-16T22:49:49.84Z" },
- { url = "https://files.pythonhosted.org/packages/c5/65/df0db6c097892c9380851ab9e44b52d4f7ba576b833996e0080181c0c439/numpy-2.3.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769", size = 12259838, upload-time = "2025-11-16T22:49:52.863Z" },
- { url = "https://files.pythonhosted.org/packages/5b/e1/1ee06e70eb2136797abe847d386e7c0e830b67ad1d43f364dd04fa50d338/numpy-2.3.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5", size = 5088378, upload-time = "2025-11-16T22:49:55.055Z" },
- { url = "https://files.pythonhosted.org/packages/6d/9c/1ca85fb86708724275103b81ec4cf1ac1d08f465368acfc8da7ab545bdae/numpy-2.3.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4", size = 6628559, upload-time = "2025-11-16T22:49:57.371Z" },
- { url = "https://files.pythonhosted.org/packages/74/78/fcd41e5a0ce4f3f7b003da85825acddae6d7ecb60cf25194741b036ca7d6/numpy-2.3.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d", size = 14250702, upload-time = "2025-11-16T22:49:59.632Z" },
- { url = "https://files.pythonhosted.org/packages/b6/23/2a1b231b8ff672b4c450dac27164a8b2ca7d9b7144f9c02d2396518352eb/numpy-2.3.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28", size = 16606086, upload-time = "2025-11-16T22:50:02.127Z" },
- { url = "https://files.pythonhosted.org/packages/a0/c5/5ad26fbfbe2012e190cc7d5003e4d874b88bb18861d0829edc140a713021/numpy-2.3.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b", size = 16025985, upload-time = "2025-11-16T22:50:04.536Z" },
- { url = "https://files.pythonhosted.org/packages/d2/fa/dd48e225c46c819288148d9d060b047fd2a6fb1eb37eae25112ee4cb4453/numpy-2.3.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c", size = 18542976, upload-time = "2025-11-16T22:50:07.557Z" },
- { url = "https://files.pythonhosted.org/packages/05/79/ccbd23a75862d95af03d28b5c6901a1b7da4803181513d52f3b86ed9446e/numpy-2.3.5-cp312-cp312-win32.whl", hash = "sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952", size = 6285274, upload-time = "2025-11-16T22:50:10.746Z" },
- { url = "https://files.pythonhosted.org/packages/2d/57/8aeaf160312f7f489dea47ab61e430b5cb051f59a98ae68b7133ce8fa06a/numpy-2.3.5-cp312-cp312-win_amd64.whl", hash = "sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa", size = 12782922, upload-time = "2025-11-16T22:50:12.811Z" },
- { url = "https://files.pythonhosted.org/packages/78/a6/aae5cc2ca78c45e64b9ef22f089141d661516856cf7c8a54ba434576900d/numpy-2.3.5-cp312-cp312-win_arm64.whl", hash = "sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013", size = 10194667, upload-time = "2025-11-16T22:50:16.16Z" },
- { url = "https://files.pythonhosted.org/packages/db/69/9cde09f36da4b5a505341180a3f2e6fadc352fd4d2b7096ce9778db83f1a/numpy-2.3.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff", size = 16728251, upload-time = "2025-11-16T22:50:19.013Z" },
- { url = "https://files.pythonhosted.org/packages/79/fb/f505c95ceddd7027347b067689db71ca80bd5ecc926f913f1a23e65cf09b/numpy-2.3.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188", size = 12254652, upload-time = "2025-11-16T22:50:21.487Z" },
- { url = "https://files.pythonhosted.org/packages/78/da/8c7738060ca9c31b30e9301ee0cf6c5ffdbf889d9593285a1cead337f9a5/numpy-2.3.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0", size = 5083172, upload-time = "2025-11-16T22:50:24.562Z" },
- { url = "https://files.pythonhosted.org/packages/a4/b4/ee5bb2537fb9430fd2ef30a616c3672b991a4129bb1c7dcc42aa0abbe5d7/numpy-2.3.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903", size = 6622990, upload-time = "2025-11-16T22:50:26.47Z" },
- { url = "https://files.pythonhosted.org/packages/95/03/dc0723a013c7d7c19de5ef29e932c3081df1c14ba582b8b86b5de9db7f0f/numpy-2.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d", size = 14248902, upload-time = "2025-11-16T22:50:28.861Z" },
- { url = "https://files.pythonhosted.org/packages/f5/10/ca162f45a102738958dcec8023062dad0cbc17d1ab99d68c4e4a6c45fb2b/numpy-2.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017", size = 16597430, upload-time = "2025-11-16T22:50:31.56Z" },
- { url = "https://files.pythonhosted.org/packages/2a/51/c1e29be863588db58175175f057286900b4b3327a1351e706d5e0f8dd679/numpy-2.3.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf", size = 16024551, upload-time = "2025-11-16T22:50:34.242Z" },
- { url = "https://files.pythonhosted.org/packages/83/68/8236589d4dbb87253d28259d04d9b814ec0ecce7cb1c7fed29729f4c3a78/numpy-2.3.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce", size = 18533275, upload-time = "2025-11-16T22:50:37.651Z" },
- { url = "https://files.pythonhosted.org/packages/40/56/2932d75b6f13465239e3b7b7e511be27f1b8161ca2510854f0b6e521c395/numpy-2.3.5-cp313-cp313-win32.whl", hash = "sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e", size = 6277637, upload-time = "2025-11-16T22:50:40.11Z" },
- { url = "https://files.pythonhosted.org/packages/0c/88/e2eaa6cffb115b85ed7c7c87775cb8bcf0816816bc98ca8dbfa2ee33fe6e/numpy-2.3.5-cp313-cp313-win_amd64.whl", hash = "sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b", size = 12779090, upload-time = "2025-11-16T22:50:42.503Z" },
- { url = "https://files.pythonhosted.org/packages/8f/88/3f41e13a44ebd4034ee17baa384acac29ba6a4fcc2aca95f6f08ca0447d1/numpy-2.3.5-cp313-cp313-win_arm64.whl", hash = "sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae", size = 10194710, upload-time = "2025-11-16T22:50:44.971Z" },
- { url = "https://files.pythonhosted.org/packages/13/cb/71744144e13389d577f867f745b7df2d8489463654a918eea2eeb166dfc9/numpy-2.3.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd", size = 16827292, upload-time = "2025-11-16T22:50:47.715Z" },
- { url = "https://files.pythonhosted.org/packages/71/80/ba9dc6f2a4398e7f42b708a7fdc841bb638d353be255655498edbf9a15a8/numpy-2.3.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f", size = 12378897, upload-time = "2025-11-16T22:50:51.327Z" },
- { url = "https://files.pythonhosted.org/packages/2e/6d/db2151b9f64264bcceccd51741aa39b50150de9b602d98ecfe7e0c4bff39/numpy-2.3.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a", size = 5207391, upload-time = "2025-11-16T22:50:54.542Z" },
- { url = "https://files.pythonhosted.org/packages/80/ae/429bacace5ccad48a14c4ae5332f6aa8ab9f69524193511d60ccdfdc65fa/numpy-2.3.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139", size = 6721275, upload-time = "2025-11-16T22:50:56.794Z" },
- { url = "https://files.pythonhosted.org/packages/74/5b/1919abf32d8722646a38cd527bc3771eb229a32724ee6ba340ead9b92249/numpy-2.3.5-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e", size = 14306855, upload-time = "2025-11-16T22:50:59.208Z" },
- { url = "https://files.pythonhosted.org/packages/a5/87/6831980559434973bebc30cd9c1f21e541a0f2b0c280d43d3afd909b66d0/numpy-2.3.5-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9", size = 16657359, upload-time = "2025-11-16T22:51:01.991Z" },
- { url = "https://files.pythonhosted.org/packages/dd/91/c797f544491ee99fd00495f12ebb7802c440c1915811d72ac5b4479a3356/numpy-2.3.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946", size = 16093374, upload-time = "2025-11-16T22:51:05.291Z" },
- { url = "https://files.pythonhosted.org/packages/74/a6/54da03253afcbe7a72785ec4da9c69fb7a17710141ff9ac5fcb2e32dbe64/numpy-2.3.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1", size = 18594587, upload-time = "2025-11-16T22:51:08.585Z" },
- { url = "https://files.pythonhosted.org/packages/80/e9/aff53abbdd41b0ecca94285f325aff42357c6b5abc482a3fcb4994290b18/numpy-2.3.5-cp313-cp313t-win32.whl", hash = "sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3", size = 6405940, upload-time = "2025-11-16T22:51:11.541Z" },
- { url = "https://files.pythonhosted.org/packages/d5/81/50613fec9d4de5480de18d4f8ef59ad7e344d497edbef3cfd80f24f98461/numpy-2.3.5-cp313-cp313t-win_amd64.whl", hash = "sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234", size = 12920341, upload-time = "2025-11-16T22:51:14.312Z" },
- { url = "https://files.pythonhosted.org/packages/bb/ab/08fd63b9a74303947f34f0bd7c5903b9c5532c2d287bead5bdf4c556c486/numpy-2.3.5-cp313-cp313t-win_arm64.whl", hash = "sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7", size = 10262507, upload-time = "2025-11-16T22:51:16.846Z" },
- { url = "https://files.pythonhosted.org/packages/ba/97/1a914559c19e32d6b2e233cf9a6a114e67c856d35b1d6babca571a3e880f/numpy-2.3.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82", size = 16735706, upload-time = "2025-11-16T22:51:19.558Z" },
- { url = "https://files.pythonhosted.org/packages/57/d4/51233b1c1b13ecd796311216ae417796b88b0616cfd8a33ae4536330748a/numpy-2.3.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0", size = 12264507, upload-time = "2025-11-16T22:51:22.492Z" },
- { url = "https://files.pythonhosted.org/packages/45/98/2fe46c5c2675b8306d0b4a3ec3494273e93e1226a490f766e84298576956/numpy-2.3.5-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63", size = 5093049, upload-time = "2025-11-16T22:51:25.171Z" },
- { url = "https://files.pythonhosted.org/packages/ce/0e/0698378989bb0ac5f1660c81c78ab1fe5476c1a521ca9ee9d0710ce54099/numpy-2.3.5-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9", size = 6626603, upload-time = "2025-11-16T22:51:27Z" },
- { url = "https://files.pythonhosted.org/packages/5e/a6/9ca0eecc489640615642a6cbc0ca9e10df70df38c4d43f5a928ff18d8827/numpy-2.3.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b", size = 14262696, upload-time = "2025-11-16T22:51:29.402Z" },
- { url = "https://files.pythonhosted.org/packages/c8/f6/07ec185b90ec9d7217a00eeeed7383b73d7e709dae2a9a021b051542a708/numpy-2.3.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520", size = 16597350, upload-time = "2025-11-16T22:51:32.167Z" },
- { url = "https://files.pythonhosted.org/packages/75/37/164071d1dde6a1a84c9b8e5b414fa127981bad47adf3a6b7e23917e52190/numpy-2.3.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c", size = 16040190, upload-time = "2025-11-16T22:51:35.403Z" },
- { url = "https://files.pythonhosted.org/packages/08/3c/f18b82a406b04859eb026d204e4e1773eb41c5be58410f41ffa511d114ae/numpy-2.3.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8", size = 18536749, upload-time = "2025-11-16T22:51:39.698Z" },
- { url = "https://files.pythonhosted.org/packages/40/79/f82f572bf44cf0023a2fe8588768e23e1592585020d638999f15158609e1/numpy-2.3.5-cp314-cp314-win32.whl", hash = "sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248", size = 6335432, upload-time = "2025-11-16T22:51:42.476Z" },
- { url = "https://files.pythonhosted.org/packages/a3/2e/235b4d96619931192c91660805e5e49242389742a7a82c27665021db690c/numpy-2.3.5-cp314-cp314-win_amd64.whl", hash = "sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e", size = 12919388, upload-time = "2025-11-16T22:51:45.275Z" },
- { url = "https://files.pythonhosted.org/packages/07/2b/29fd75ce45d22a39c61aad74f3d718e7ab67ccf839ca8b60866054eb15f8/numpy-2.3.5-cp314-cp314-win_arm64.whl", hash = "sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2", size = 10476651, upload-time = "2025-11-16T22:51:47.749Z" },
- { url = "https://files.pythonhosted.org/packages/17/e1/f6a721234ebd4d87084cfa68d081bcba2f5cfe1974f7de4e0e8b9b2a2ba1/numpy-2.3.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41", size = 16834503, upload-time = "2025-11-16T22:51:50.443Z" },
- { url = "https://files.pythonhosted.org/packages/5c/1c/baf7ffdc3af9c356e1c135e57ab7cf8d247931b9554f55c467efe2c69eff/numpy-2.3.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad", size = 12381612, upload-time = "2025-11-16T22:51:53.609Z" },
- { url = "https://files.pythonhosted.org/packages/74/91/f7f0295151407ddc9ba34e699013c32c3c91944f9b35fcf9281163dc1468/numpy-2.3.5-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39", size = 5210042, upload-time = "2025-11-16T22:51:56.213Z" },
- { url = "https://files.pythonhosted.org/packages/2e/3b/78aebf345104ec50dd50a4d06ddeb46a9ff5261c33bcc58b1c4f12f85ec2/numpy-2.3.5-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20", size = 6724502, upload-time = "2025-11-16T22:51:58.584Z" },
- { url = "https://files.pythonhosted.org/packages/02/c6/7c34b528740512e57ef1b7c8337ab0b4f0bddf34c723b8996c675bc2bc91/numpy-2.3.5-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52", size = 14308962, upload-time = "2025-11-16T22:52:01.698Z" },
- { url = "https://files.pythonhosted.org/packages/80/35/09d433c5262bc32d725bafc619e095b6a6651caf94027a03da624146f655/numpy-2.3.5-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b", size = 16655054, upload-time = "2025-11-16T22:52:04.267Z" },
- { url = "https://files.pythonhosted.org/packages/7a/ab/6a7b259703c09a88804fa2430b43d6457b692378f6b74b356155283566ac/numpy-2.3.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3", size = 16091613, upload-time = "2025-11-16T22:52:08.651Z" },
- { url = "https://files.pythonhosted.org/packages/c2/88/330da2071e8771e60d1038166ff9d73f29da37b01ec3eb43cb1427464e10/numpy-2.3.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227", size = 18591147, upload-time = "2025-11-16T22:52:11.453Z" },
- { url = "https://files.pythonhosted.org/packages/51/41/851c4b4082402d9ea860c3626db5d5df47164a712cb23b54be028b184c1c/numpy-2.3.5-cp314-cp314t-win32.whl", hash = "sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5", size = 6479806, upload-time = "2025-11-16T22:52:14.641Z" },
- { url = "https://files.pythonhosted.org/packages/90/30/d48bde1dfd93332fa557cff1972fbc039e055a52021fbef4c2c4b1eefd17/numpy-2.3.5-cp314-cp314t-win_amd64.whl", hash = "sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf", size = 13105760, upload-time = "2025-11-16T22:52:17.975Z" },
- { url = "https://files.pythonhosted.org/packages/2d/fd/4b5eb0b3e888d86aee4d198c23acec7d214baaf17ea93c1adec94c9518b9/numpy-2.3.5-cp314-cp314t-win_arm64.whl", hash = "sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42", size = 10545459, upload-time = "2025-11-16T22:52:20.55Z" },
- { url = "https://files.pythonhosted.org/packages/c6/65/f9dea8e109371ade9c782b4e4756a82edf9d3366bca495d84d79859a0b79/numpy-2.3.5-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310", size = 16910689, upload-time = "2025-11-16T22:52:23.247Z" },
- { url = "https://files.pythonhosted.org/packages/00/4f/edb00032a8fb92ec0a679d3830368355da91a69cab6f3e9c21b64d0bb986/numpy-2.3.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c", size = 12457053, upload-time = "2025-11-16T22:52:26.367Z" },
- { url = "https://files.pythonhosted.org/packages/16/a4/e8a53b5abd500a63836a29ebe145fc1ab1f2eefe1cfe59276020373ae0aa/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18", size = 5285635, upload-time = "2025-11-16T22:52:29.266Z" },
- { url = "https://files.pythonhosted.org/packages/a3/2f/37eeb9014d9c8b3e9c55bc599c68263ca44fdbc12a93e45a21d1d56df737/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff", size = 6801770, upload-time = "2025-11-16T22:52:31.421Z" },
- { url = "https://files.pythonhosted.org/packages/7d/e4/68d2f474df2cb671b2b6c2986a02e520671295647dad82484cde80ca427b/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb", size = 14391768, upload-time = "2025-11-16T22:52:33.593Z" },
- { url = "https://files.pythonhosted.org/packages/b8/50/94ccd8a2b141cb50651fddd4f6a48874acb3c91c8f0842b08a6afc4b0b21/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7", size = 16729263, upload-time = "2025-11-16T22:52:36.369Z" },
- { url = "https://files.pythonhosted.org/packages/2d/ee/346fa473e666fe14c52fcdd19ec2424157290a032d4c41f98127bfb31ac7/numpy-2.3.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425", size = 12967213, upload-time = "2025-11-16T22:52:39.38Z" },
+version = "2.4.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/24/62/ae72ff66c0f1fd959925b4c11f8c2dea61f47f6acaea75a08512cdfe3fed/numpy-2.4.1.tar.gz", hash = "sha256:a1ceafc5042451a858231588a104093474c6a5c57dcc724841f5c888d237d690", size = 20721320, upload-time = "2026-01-10T06:44:59.619Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a5/34/2b1bc18424f3ad9af577f6ce23600319968a70575bd7db31ce66731bbef9/numpy-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0cce2a669e3c8ba02ee563c7835f92c153cf02edff1ae05e1823f1dde21b16a5", size = 16944563, upload-time = "2026-01-10T06:42:14.615Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/57/26e5f97d075aef3794045a6ca9eada6a4ed70eb9a40e7a4a93f9ac80d704/numpy-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:899d2c18024984814ac7e83f8f49d8e8180e2fbe1b2e252f2e7f1d06bea92425", size = 12645658, upload-time = "2026-01-10T06:42:17.298Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/ba/80fc0b1e3cb2fd5c6143f00f42eb67762aa043eaa05ca924ecc3222a7849/numpy-2.4.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:09aa8a87e45b55a1c2c205d42e2808849ece5c484b2aab11fecabec3841cafba", size = 5474132, upload-time = "2026-01-10T06:42:19.637Z" },
+ { url = "https://files.pythonhosted.org/packages/40/ae/0a5b9a397f0e865ec171187c78d9b57e5588afc439a04ba9cab1ebb2c945/numpy-2.4.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:edee228f76ee2dab4579fad6f51f6a305de09d444280109e0f75df247ff21501", size = 6804159, upload-time = "2026-01-10T06:42:21.44Z" },
+ { url = "https://files.pythonhosted.org/packages/86/9c/841c15e691c7085caa6fd162f063eff494099c8327aeccd509d1ab1e36ab/numpy-2.4.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a92f227dbcdc9e4c3e193add1a189a9909947d4f8504c576f4a732fd0b54240a", size = 14708058, upload-time = "2026-01-10T06:42:23.546Z" },
+ { url = "https://files.pythonhosted.org/packages/5d/9d/7862db06743f489e6a502a3b93136d73aea27d97b2cf91504f70a27501d6/numpy-2.4.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:538bf4ec353709c765ff75ae616c34d3c3dca1a68312727e8f2676ea644f8509", size = 16651501, upload-time = "2026-01-10T06:42:25.909Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/9c/6fc34ebcbd4015c6e5f0c0ce38264010ce8a546cb6beacb457b84a75dfc8/numpy-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ac08c63cb7779b85e9d5318e6c3518b424bc1f364ac4cb2c6136f12e5ff2dccc", size = 16492627, upload-time = "2026-01-10T06:42:28.938Z" },
+ { url = "https://files.pythonhosted.org/packages/aa/63/2494a8597502dacda439f61b3c0db4da59928150e62be0e99395c3ad23c5/numpy-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4f9c360ecef085e5841c539a9a12b883dff005fbd7ce46722f5e9cef52634d82", size = 18585052, upload-time = "2026-01-10T06:42:31.312Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/93/098e1162ae7522fc9b618d6272b77404c4656c72432ecee3abc029aa3de0/numpy-2.4.1-cp311-cp311-win32.whl", hash = "sha256:0f118ce6b972080ba0758c6087c3617b5ba243d806268623dc34216d69099ba0", size = 6236575, upload-time = "2026-01-10T06:42:33.872Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/de/f5e79650d23d9e12f38a7bc6b03ea0835b9575494f8ec94c11c6e773b1b1/numpy-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:18e14c4d09d55eef39a6ab5b08406e84bc6869c1e34eef45564804f90b7e0574", size = 12604479, upload-time = "2026-01-10T06:42:35.778Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/65/e1097a7047cff12ce3369bd003811516b20ba1078dbdec135e1cd7c16c56/numpy-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:6461de5113088b399d655d45c3897fa188766415d0f568f175ab071c8873bd73", size = 10578325, upload-time = "2026-01-10T06:42:38.518Z" },
+ { url = "https://files.pythonhosted.org/packages/78/7f/ec53e32bf10c813604edf07a3682616bd931d026fcde7b6d13195dfb684a/numpy-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d3703409aac693fa82c0aee023a1ae06a6e9d065dba10f5e8e80f642f1e9d0a2", size = 16656888, upload-time = "2026-01-10T06:42:40.913Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/e0/1f9585d7dae8f14864e948fd7fa86c6cb72dee2676ca2748e63b1c5acfe0/numpy-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7211b95ca365519d3596a1d8688a95874cc94219d417504d9ecb2df99fa7bfa8", size = 12373956, upload-time = "2026-01-10T06:42:43.091Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/43/9762e88909ff2326f5e7536fa8cb3c49fb03a7d92705f23e6e7f553d9cb3/numpy-2.4.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5adf01965456a664fc727ed69cc71848f28d063217c63e1a0e200a118d5eec9a", size = 5202567, upload-time = "2026-01-10T06:42:45.107Z" },
+ { url = "https://files.pythonhosted.org/packages/4b/ee/34b7930eb61e79feb4478800a4b95b46566969d837546aa7c034c742ef98/numpy-2.4.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:26f0bcd9c79a00e339565b303badc74d3ea2bd6d52191eeca5f95936cad107d0", size = 6549459, upload-time = "2026-01-10T06:42:48.152Z" },
+ { url = "https://files.pythonhosted.org/packages/79/e3/5f115fae982565771be994867c89bcd8d7208dbfe9469185497d70de5ddf/numpy-2.4.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0093e85df2960d7e4049664b26afc58b03236e967fb942354deef3208857a04c", size = 14404859, upload-time = "2026-01-10T06:42:49.947Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/7d/9c8a781c88933725445a859cac5d01b5871588a15969ee6aeb618ba99eee/numpy-2.4.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ad270f438cbdd402c364980317fb6b117d9ec5e226fff5b4148dd9aa9fc6e02", size = 16371419, upload-time = "2026-01-10T06:42:52.409Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/d2/8aa084818554543f17cf4162c42f162acbd3bb42688aefdba6628a859f77/numpy-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:297c72b1b98100c2e8f873d5d35fb551fce7040ade83d67dd51d38c8d42a2162", size = 16182131, upload-time = "2026-01-10T06:42:54.694Z" },
+ { url = "https://files.pythonhosted.org/packages/60/db/0425216684297c58a8df35f3284ef56ec4a043e6d283f8a59c53562caf1b/numpy-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cf6470d91d34bf669f61d515499859fa7a4c2f7c36434afb70e82df7217933f9", size = 18295342, upload-time = "2026-01-10T06:42:56.991Z" },
+ { url = "https://files.pythonhosted.org/packages/31/4c/14cb9d86240bd8c386c881bafbe43f001284b7cce3bc01623ac9475da163/numpy-2.4.1-cp312-cp312-win32.whl", hash = "sha256:b6bcf39112e956594b3331316d90c90c90fb961e39696bda97b89462f5f3943f", size = 5959015, upload-time = "2026-01-10T06:42:59.631Z" },
+ { url = "https://files.pythonhosted.org/packages/51/cf/52a703dbeb0c65807540d29699fef5fda073434ff61846a564d5c296420f/numpy-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:e1a27bb1b2dee45a2a53f5ca6ff2d1a7f135287883a1689e930d44d1ff296c87", size = 12310730, upload-time = "2026-01-10T06:43:01.627Z" },
+ { url = "https://files.pythonhosted.org/packages/69/80/a828b2d0ade5e74a9fe0f4e0a17c30fdc26232ad2bc8c9f8b3197cf7cf18/numpy-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:0e6e8f9d9ecf95399982019c01223dc130542960a12edfa8edd1122dfa66a8a8", size = 10312166, upload-time = "2026-01-10T06:43:03.673Z" },
+ { url = "https://files.pythonhosted.org/packages/04/68/732d4b7811c00775f3bd522a21e8dd5a23f77eb11acdeb663e4a4ebf0ef4/numpy-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d797454e37570cfd61143b73b8debd623c3c0952959adb817dd310a483d58a1b", size = 16652495, upload-time = "2026-01-10T06:43:06.283Z" },
+ { url = "https://files.pythonhosted.org/packages/20/ca/857722353421a27f1465652b2c66813eeeccea9d76d5f7b74b99f298e60e/numpy-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82c55962006156aeef1629b953fd359064aa47e4d82cfc8e67f0918f7da3344f", size = 12368657, upload-time = "2026-01-10T06:43:09.094Z" },
+ { url = "https://files.pythonhosted.org/packages/81/0d/2377c917513449cc6240031a79d30eb9a163d32a91e79e0da47c43f2c0c8/numpy-2.4.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:71abbea030f2cfc3092a0ff9f8c8fdefdc5e0bf7d9d9c99663538bb0ecdac0b9", size = 5197256, upload-time = "2026-01-10T06:43:13.634Z" },
+ { url = "https://files.pythonhosted.org/packages/17/39/569452228de3f5de9064ac75137082c6214be1f5c532016549a7923ab4b5/numpy-2.4.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5b55aa56165b17aaf15520beb9cbd33c9039810e0d9643dd4379e44294c7303e", size = 6545212, upload-time = "2026-01-10T06:43:15.661Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/a4/77333f4d1e4dac4395385482557aeecf4826e6ff517e32ca48e1dafbe42a/numpy-2.4.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0faba4a331195bfa96f93dd9dfaa10b2c7aa8cda3a02b7fd635e588fe821bf5", size = 14402871, upload-time = "2026-01-10T06:43:17.324Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/87/d341e519956273b39d8d47969dd1eaa1af740615394fe67d06f1efa68773/numpy-2.4.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e3087f53e2b4428766b54932644d148613c5a595150533ae7f00dab2f319a8", size = 16359305, upload-time = "2026-01-10T06:43:19.376Z" },
+ { url = "https://files.pythonhosted.org/packages/32/91/789132c6666288eaa20ae8066bb99eba1939362e8f1a534949a215246e97/numpy-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:49e792ec351315e16da54b543db06ca8a86985ab682602d90c60ef4ff4db2a9c", size = 16181909, upload-time = "2026-01-10T06:43:21.808Z" },
+ { url = "https://files.pythonhosted.org/packages/cf/b8/090b8bd27b82a844bb22ff8fdf7935cb1980b48d6e439ae116f53cdc2143/numpy-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79e9e06c4c2379db47f3f6fc7a8652e7498251789bf8ff5bd43bf478ef314ca2", size = 18284380, upload-time = "2026-01-10T06:43:23.957Z" },
+ { url = "https://files.pythonhosted.org/packages/67/78/722b62bd31842ff029412271556a1a27a98f45359dea78b1548a3a9996aa/numpy-2.4.1-cp313-cp313-win32.whl", hash = "sha256:3d1a100e48cb266090a031397863ff8a30050ceefd798f686ff92c67a486753d", size = 5957089, upload-time = "2026-01-10T06:43:27.535Z" },
+ { url = "https://files.pythonhosted.org/packages/da/a6/cf32198b0b6e18d4fbfa9a21a992a7fca535b9bb2b0cdd217d4a3445b5ca/numpy-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:92a0e65272fd60bfa0d9278e0484c2f52fe03b97aedc02b357f33fe752c52ffb", size = 12307230, upload-time = "2026-01-10T06:43:29.298Z" },
+ { url = "https://files.pythonhosted.org/packages/44/6c/534d692bfb7d0afe30611320c5fb713659dcb5104d7cc182aff2aea092f5/numpy-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:20d4649c773f66cc2fc36f663e091f57c3b7655f936a4c681b4250855d1da8f5", size = 10313125, upload-time = "2026-01-10T06:43:31.782Z" },
+ { url = "https://files.pythonhosted.org/packages/da/a1/354583ac5c4caa566de6ddfbc42744409b515039e085fab6e0ff942e0df5/numpy-2.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f93bc6892fe7b0663e5ffa83b61aab510aacffd58c16e012bb9352d489d90cb7", size = 12496156, upload-time = "2026-01-10T06:43:34.237Z" },
+ { url = "https://files.pythonhosted.org/packages/51/b0/42807c6e8cce58c00127b1dc24d365305189991f2a7917aa694a109c8d7d/numpy-2.4.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:178de8f87948163d98a4c9ab5bee4ce6519ca918926ec8df195af582de28544d", size = 5324663, upload-time = "2026-01-10T06:43:36.211Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/55/7a621694010d92375ed82f312b2f28017694ed784775269115323e37f5e2/numpy-2.4.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:98b35775e03ab7f868908b524fc0a84d38932d8daf7b7e1c3c3a1b6c7a2c9f15", size = 6645224, upload-time = "2026-01-10T06:43:37.884Z" },
+ { url = "https://files.pythonhosted.org/packages/50/96/9fa8635ed9d7c847d87e30c834f7109fac5e88549d79ef3324ab5c20919f/numpy-2.4.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:941c2a93313d030f219f3a71fd3d91a728b82979a5e8034eb2e60d394a2b83f9", size = 14462352, upload-time = "2026-01-10T06:43:39.479Z" },
+ { url = "https://files.pythonhosted.org/packages/03/d1/8cf62d8bb2062da4fb82dd5d49e47c923f9c0738032f054e0a75342faba7/numpy-2.4.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:529050522e983e00a6c1c6b67411083630de8b57f65e853d7b03d9281b8694d2", size = 16407279, upload-time = "2026-01-10T06:43:41.93Z" },
+ { url = "https://files.pythonhosted.org/packages/86/1c/95c86e17c6b0b31ce6ef219da00f71113b220bcb14938c8d9a05cee0ff53/numpy-2.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2302dc0224c1cbc49bb94f7064f3f923a971bfae45c33870dcbff63a2a550505", size = 16248316, upload-time = "2026-01-10T06:43:44.121Z" },
+ { url = "https://files.pythonhosted.org/packages/30/b4/e7f5ff8697274c9d0fa82398b6a372a27e5cef069b37df6355ccb1f1db1a/numpy-2.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9171a42fcad32dcf3fa86f0a4faa5e9f8facefdb276f54b8b390d90447cff4e2", size = 18329884, upload-time = "2026-01-10T06:43:46.613Z" },
+ { url = "https://files.pythonhosted.org/packages/37/a4/b073f3e9d77f9aec8debe8ca7f9f6a09e888ad1ba7488f0c3b36a94c03ac/numpy-2.4.1-cp313-cp313t-win32.whl", hash = "sha256:382ad67d99ef49024f11d1ce5dcb5ad8432446e4246a4b014418ba3a1175a1f4", size = 6081138, upload-time = "2026-01-10T06:43:48.854Z" },
+ { url = "https://files.pythonhosted.org/packages/16/16/af42337b53844e67752a092481ab869c0523bc95c4e5c98e4dac4e9581ac/numpy-2.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:62fea415f83ad8fdb6c20840578e5fbaf5ddd65e0ec6c3c47eda0f69da172510", size = 12447478, upload-time = "2026-01-10T06:43:50.476Z" },
+ { url = "https://files.pythonhosted.org/packages/6c/f8/fa85b2eac68ec631d0b631abc448552cb17d39afd17ec53dcbcc3537681a/numpy-2.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a7870e8c5fc11aef57d6fea4b4085e537a3a60ad2cdd14322ed531fdca68d261", size = 10382981, upload-time = "2026-01-10T06:43:52.575Z" },
+ { url = "https://files.pythonhosted.org/packages/1b/a7/ef08d25698e0e4b4efbad8d55251d20fe2a15f6d9aa7c9b30cd03c165e6f/numpy-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3869ea1ee1a1edc16c29bbe3a2f2a4e515cc3a44d43903ad41e0cacdbaf733dc", size = 16652046, upload-time = "2026-01-10T06:43:54.797Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/39/e378b3e3ca13477e5ac70293ec027c438d1927f18637e396fe90b1addd72/numpy-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e867df947d427cdd7a60e3e271729090b0f0df80f5f10ab7dd436f40811699c3", size = 12378858, upload-time = "2026-01-10T06:43:57.099Z" },
+ { url = "https://files.pythonhosted.org/packages/c3/74/7ec6154f0006910ed1fdbb7591cf4432307033102b8a22041599935f8969/numpy-2.4.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:e3bd2cb07841166420d2fa7146c96ce00cb3410664cbc1a6be028e456c4ee220", size = 5207417, upload-time = "2026-01-10T06:43:59.037Z" },
+ { url = "https://files.pythonhosted.org/packages/f7/b7/053ac11820d84e42f8feea5cb81cc4fcd1091499b45b1ed8c7415b1bf831/numpy-2.4.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:f0a90aba7d521e6954670550e561a4cb925713bd944445dbe9e729b71f6cabee", size = 6542643, upload-time = "2026-01-10T06:44:01.852Z" },
+ { url = "https://files.pythonhosted.org/packages/c0/c4/2e7908915c0e32ca636b92e4e4a3bdec4cb1e7eb0f8aedf1ed3c68a0d8cd/numpy-2.4.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d558123217a83b2d1ba316b986e9248a1ed1971ad495963d555ccd75dcb1556", size = 14418963, upload-time = "2026-01-10T06:44:04.047Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/c0/3ed5083d94e7ffd7c404e54619c088e11f2e1939a9544f5397f4adb1b8ba/numpy-2.4.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f44de05659b67d20499cbc96d49f2650769afcb398b79b324bb6e297bfe3844", size = 16363811, upload-time = "2026-01-10T06:44:06.207Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/68/42b66f1852bf525050a67315a4fb94586ab7e9eaa541b1bef530fab0c5dd/numpy-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:69e7419c9012c4aaf695109564e3387f1259f001b4326dfa55907b098af082d3", size = 16197643, upload-time = "2026-01-10T06:44:08.33Z" },
+ { url = "https://files.pythonhosted.org/packages/d2/40/e8714fc933d85f82c6bfc7b998a0649ad9769a32f3494ba86598aaf18a48/numpy-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2ffd257026eb1b34352e749d7cc1678b5eeec3e329ad8c9965a797e08ccba205", size = 18289601, upload-time = "2026-01-10T06:44:10.841Z" },
+ { url = "https://files.pythonhosted.org/packages/80/9a/0d44b468cad50315127e884802351723daca7cf1c98d102929468c81d439/numpy-2.4.1-cp314-cp314-win32.whl", hash = "sha256:727c6c3275ddefa0dc078524a85e064c057b4f4e71ca5ca29a19163c607be745", size = 6005722, upload-time = "2026-01-10T06:44:13.332Z" },
+ { url = "https://files.pythonhosted.org/packages/7e/bb/c6513edcce5a831810e2dddc0d3452ce84d208af92405a0c2e58fd8e7881/numpy-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:7d5d7999df434a038d75a748275cd6c0094b0ecdb0837342b332a82defc4dc4d", size = 12438590, upload-time = "2026-01-10T06:44:15.006Z" },
+ { url = "https://files.pythonhosted.org/packages/e9/da/a598d5cb260780cf4d255102deba35c1d072dc028c4547832f45dd3323a8/numpy-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:ce9ce141a505053b3c7bce3216071f3bf5c182b8b28930f14cd24d43932cd2df", size = 10596180, upload-time = "2026-01-10T06:44:17.386Z" },
+ { url = "https://files.pythonhosted.org/packages/de/bc/ea3f2c96fcb382311827231f911723aeff596364eb6e1b6d1d91128aa29b/numpy-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4e53170557d37ae404bf8d542ca5b7c629d6efa1117dac6a83e394142ea0a43f", size = 12498774, upload-time = "2026-01-10T06:44:19.467Z" },
+ { url = "https://files.pythonhosted.org/packages/aa/ab/ef9d939fe4a812648c7a712610b2ca6140b0853c5efea361301006c02ae5/numpy-2.4.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:a73044b752f5d34d4232f25f18160a1cc418ea4507f5f11e299d8ac36875f8a0", size = 5327274, upload-time = "2026-01-10T06:44:23.189Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/31/d381368e2a95c3b08b8cf7faac6004849e960f4a042d920337f71cef0cae/numpy-2.4.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:fb1461c99de4d040666ca0444057b06541e5642f800b71c56e6ea92d6a853a0c", size = 6648306, upload-time = "2026-01-10T06:44:25.012Z" },
+ { url = "https://files.pythonhosted.org/packages/c8/e5/0989b44ade47430be6323d05c23207636d67d7362a1796ccbccac6773dd2/numpy-2.4.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423797bdab2eeefbe608d7c1ec7b2b4fd3c58d51460f1ee26c7500a1d9c9ee93", size = 14464653, upload-time = "2026-01-10T06:44:26.706Z" },
+ { url = "https://files.pythonhosted.org/packages/10/a7/cfbe475c35371cae1358e61f20c5f075badc18c4797ab4354140e1d283cf/numpy-2.4.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:52b5f61bdb323b566b528899cc7db2ba5d1015bda7ea811a8bcf3c89c331fa42", size = 16405144, upload-time = "2026-01-10T06:44:29.378Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/a3/0c63fe66b534888fa5177cc7cef061541064dbe2b4b60dcc60ffaf0d2157/numpy-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42d7dd5fa36d16d52a84f821eb96031836fd405ee6955dd732f2023724d0aa01", size = 16247425, upload-time = "2026-01-10T06:44:31.721Z" },
+ { url = "https://files.pythonhosted.org/packages/6b/2b/55d980cfa2c93bd40ff4c290bf824d792bd41d2fe3487b07707559071760/numpy-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7b6b5e28bbd47b7532698e5db2fe1db693d84b58c254e4389d99a27bb9b8f6b", size = 18330053, upload-time = "2026-01-10T06:44:34.617Z" },
+ { url = "https://files.pythonhosted.org/packages/23/12/8b5fc6b9c487a09a7957188e0943c9ff08432c65e34567cabc1623b03a51/numpy-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:5de60946f14ebe15e713a6f22850c2372fa72f4ff9a432ab44aa90edcadaa65a", size = 6152482, upload-time = "2026-01-10T06:44:36.798Z" },
+ { url = "https://files.pythonhosted.org/packages/00/a5/9f8ca5856b8940492fc24fbe13c1bc34d65ddf4079097cf9e53164d094e1/numpy-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:8f085da926c0d491ffff3096f91078cc97ea67e7e6b65e490bc8dcda65663be2", size = 12627117, upload-time = "2026-01-10T06:44:38.828Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/0d/eca3d962f9eef265f01a8e0d20085c6dd1f443cbffc11b6dede81fd82356/numpy-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:6436cffb4f2bf26c974344439439c95e152c9a527013f26b3577be6c2ca64295", size = 10667121, upload-time = "2026-01-10T06:44:41.644Z" },
+ { url = "https://files.pythonhosted.org/packages/1e/48/d86f97919e79314a1cdee4c832178763e6e98e623e123d0bada19e92c15a/numpy-2.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8ad35f20be147a204e28b6a0575fbf3540c5e5f802634d4258d55b1ff5facce1", size = 16822202, upload-time = "2026-01-10T06:44:43.738Z" },
+ { url = "https://files.pythonhosted.org/packages/51/e9/1e62a7f77e0f37dcfb0ad6a9744e65df00242b6ea37dfafb55debcbf5b55/numpy-2.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8097529164c0f3e32bb89412a0905d9100bf434d9692d9fc275e18dcf53c9344", size = 12569985, upload-time = "2026-01-10T06:44:45.945Z" },
+ { url = "https://files.pythonhosted.org/packages/c7/7e/914d54f0c801342306fdcdce3e994a56476f1b818c46c47fc21ae968088c/numpy-2.4.1-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:ea66d2b41ca4a1630aae5507ee0a71647d3124d1741980138aa8f28f44dac36e", size = 5398484, upload-time = "2026-01-10T06:44:48.012Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/d8/9570b68584e293a33474e7b5a77ca404f1dcc655e40050a600dee81d27fb/numpy-2.4.1-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:d3f8f0df9f4b8be57b3bf74a1d087fec68f927a2fab68231fdb442bf2c12e426", size = 6713216, upload-time = "2026-01-10T06:44:49.725Z" },
+ { url = "https://files.pythonhosted.org/packages/33/9b/9dd6e2db8d49eb24f86acaaa5258e5f4c8ed38209a4ee9de2d1a0ca25045/numpy-2.4.1-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2023ef86243690c2791fd6353e5b4848eedaa88ca8a2d129f462049f6d484696", size = 14538937, upload-time = "2026-01-10T06:44:51.498Z" },
+ { url = "https://files.pythonhosted.org/packages/53/87/d5bd995b0f798a37105b876350d346eea5838bd8f77ea3d7a48392f3812b/numpy-2.4.1-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8361ea4220d763e54cff2fbe7d8c93526b744f7cd9ddab47afeff7e14e8503be", size = 16479830, upload-time = "2026-01-10T06:44:53.931Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/c7/b801bf98514b6ae6475e941ac05c58e6411dd863ea92916bfd6d510b08c1/numpy-2.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:4f1b68ff47680c2925f8063402a693ede215f0257f02596b1318ecdfb1d79e33", size = 12492579, upload-time = "2026-01-10T06:44:57.094Z" },
]
[[package]]
name = "opencv-python"
-version = "4.11.0.86"
+version = "4.13.0.90"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "numpy" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/17/06/68c27a523103dad5837dc5b87e71285280c4f098c60e4fe8a8db6486ab09/opencv-python-4.11.0.86.tar.gz", hash = "sha256:03d60ccae62304860d232272e4a4fda93c39d595780cb40b161b310244b736a4", size = 95171956, upload-time = "2025-01-16T13:52:24.737Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/05/4d/53b30a2a3ac1f75f65a59eb29cf2ee7207ce64867db47036ad61743d5a23/opencv_python-4.11.0.86-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:432f67c223f1dc2824f5e73cdfcd9db0efc8710647d4e813012195dc9122a52a", size = 37326322, upload-time = "2025-01-16T13:52:25.887Z" },
- { url = "https://files.pythonhosted.org/packages/3b/84/0a67490741867eacdfa37bc18df96e08a9d579583b419010d7f3da8ff503/opencv_python-4.11.0.86-cp37-abi3-macosx_13_0_x86_64.whl", hash = "sha256:9d05ef13d23fe97f575153558653e2d6e87103995d54e6a35db3f282fe1f9c66", size = 56723197, upload-time = "2025-01-16T13:55:21.222Z" },
- { url = "https://files.pythonhosted.org/packages/f3/bd/29c126788da65c1fb2b5fb621b7fed0ed5f9122aa22a0868c5e2c15c6d23/opencv_python-4.11.0.86-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b92ae2c8852208817e6776ba1ea0d6b1e0a1b5431e971a2a0ddd2a8cc398202", size = 42230439, upload-time = "2025-01-16T13:51:35.822Z" },
- { url = "https://files.pythonhosted.org/packages/2c/8b/90eb44a40476fa0e71e05a0283947cfd74a5d36121a11d926ad6f3193cc4/opencv_python-4.11.0.86-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b02611523803495003bd87362db3e1d2a0454a6a63025dc6658a9830570aa0d", size = 62986597, upload-time = "2025-01-16T13:52:08.836Z" },
- { url = "https://files.pythonhosted.org/packages/fb/d7/1d5941a9dde095468b288d989ff6539dd69cd429dbf1b9e839013d21b6f0/opencv_python-4.11.0.86-cp37-abi3-win32.whl", hash = "sha256:810549cb2a4aedaa84ad9a1c92fbfdfc14090e2749cedf2c1589ad8359aa169b", size = 29384337, upload-time = "2025-01-16T13:52:13.549Z" },
- { url = "https://files.pythonhosted.org/packages/a4/7d/f1c30a92854540bf789e9cd5dde7ef49bbe63f855b85a2e6b3db8135c591/opencv_python-4.11.0.86-cp37-abi3-win_amd64.whl", hash = "sha256:085ad9b77c18853ea66283e98affefe2de8cc4c1f43eda4c100cf9b2721142ec", size = 39488044, upload-time = "2025-01-16T13:52:21.928Z" },
+ { url = "https://files.pythonhosted.org/packages/77/d7/133d5756aef78090f4d8dd4895793aed24942dec6064a15375cfac9175fc/opencv_python-4.13.0.90-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:58803f8b05b51d8a785e2306d83b44173b32536f980342f3bc76d8c122b5938d", size = 46020278, upload-time = "2026-01-18T08:57:42.539Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/65/3b8cdbe13fa2436695d00e1d8c1ddf5edb4050a93436f34ed867233d1960/opencv_python-4.13.0.90-cp37-abi3-macosx_14_0_x86_64.whl", hash = "sha256:a5354e8b161409fce7710ba4c1cfe88b7bb460d97f705dc4e714a1636616f87d", size = 32568376, upload-time = "2026-01-18T08:58:47.19Z" },
+ { url = "https://files.pythonhosted.org/packages/34/ff/e4d7c165e678563f49505d3d2811fcc16011e929cd00bc4b0070c7ee82b0/opencv_python-4.13.0.90-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d557cbf0c7818081c9acf56585b68e781af4f00638971f75eaa3de70904a6314", size = 47685110, upload-time = "2026-01-18T08:59:58.045Z" },
+ { url = "https://files.pythonhosted.org/packages/cf/02/d9b73dbce28712204e85ae4c1e179505e9a771f95b33743a97e170caedde/opencv_python-4.13.0.90-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9911581e37b24169e4842069ff01d6645ea2bc4af7e10a022d9ebe340fd035ec", size = 70460479, upload-time = "2026-01-18T09:01:16.377Z" },
+ { url = "https://files.pythonhosted.org/packages/fc/1c/87fa71968beb71481ed359e21772061ceff7c9b45a61b3e7daa71e5b0b66/opencv_python-4.13.0.90-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1150b8f1947761b848bbfa9c96ceba8877743ffef157c08a04af6f7717ddd709", size = 46707819, upload-time = "2026-01-18T09:02:48.049Z" },
+ { url = "https://files.pythonhosted.org/packages/af/16/915a94e5b537c328fa3e96b769c7d4eed3b67d1be978e0af658a3d3faed8/opencv_python-4.13.0.90-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:d6716f16149b04eea52f953b8ca983d60dd9cd4872c1fd5113f6e2fcebb90e93", size = 72926629, upload-time = "2026-01-18T09:04:29.23Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/84/9c63c84be013943dd4c5fff36157f1ec0ec894b69a2fc3026fd4e3c9280a/opencv_python-4.13.0.90-cp37-abi3-win32.whl", hash = "sha256:458a00f2ba47a877eca385be3e7bcc45e6d30a4361d107ce73c1800f516dab09", size = 30932151, upload-time = "2026-01-18T09:05:22.181Z" },
+ { url = "https://files.pythonhosted.org/packages/13/de/291cbb17f44242ed6bfd3450fc2535d6bd298115c0ccd6f01cd51d4a11d7/opencv_python-4.13.0.90-cp37-abi3-win_amd64.whl", hash = "sha256:526bde4c33a86808a751e2bb57bf4921beb49794621810971926c472897f6433", size = 40211706, upload-time = "2026-01-18T09:06:06.749Z" },
]
[[package]]
name = "packaging"
-version = "25.0"
+version = "26.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" },
+ { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" },
]
[[package]]
name = "pandas"
-version = "2.3.3"
+version = "3.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "numpy" },
{ name = "python-dateutil" },
- { name = "pytz" },
- { name = "tzdata" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790, upload-time = "2025-09-29T23:18:30.065Z" },
- { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831, upload-time = "2025-09-29T23:38:56.071Z" },
- { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267, upload-time = "2025-09-29T23:18:41.627Z" },
- { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281, upload-time = "2025-09-29T23:18:56.834Z" },
- { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453, upload-time = "2025-09-29T23:19:09.247Z" },
- { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361, upload-time = "2025-09-29T23:19:25.342Z" },
- { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702, upload-time = "2025-09-29T23:19:38.296Z" },
- { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" },
- { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" },
- { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" },
- { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" },
- { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" },
- { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" },
- { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" },
- { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" },
- { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" },
- { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" },
- { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" },
- { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" },
- { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" },
- { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" },
- { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" },
- { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" },
- { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" },
- { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" },
- { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" },
- { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" },
- { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" },
- { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" },
- { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" },
- { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" },
- { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" },
- { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" },
- { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" },
- { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" },
- { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" },
- { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" },
- { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" },
- { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" },
- { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" },
+ { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/de/da/b1dc0481ab8d55d0f46e343cfe67d4551a0e14fcee52bd38ca1bd73258d8/pandas-3.0.0.tar.gz", hash = "sha256:0facf7e87d38f721f0af46fe70d97373a37701b1c09f7ed7aeeb292ade5c050f", size = 4633005, upload-time = "2026-01-21T15:52:04.726Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/46/1e/b184654a856e75e975a6ee95d6577b51c271cd92cb2b020c9378f53e0032/pandas-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d64ce01eb9cdca96a15266aa679ae50212ec52757c79204dbc7701a222401850", size = 10313247, upload-time = "2026-01-21T15:50:15.775Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/5e/e04a547ad0f0183bf151fd7c7a477468e3b85ff2ad231c566389e6cc9587/pandas-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:613e13426069793aa1ec53bdcc3b86e8d32071daea138bbcf4fa959c9cdaa2e2", size = 9913131, upload-time = "2026-01-21T15:50:18.611Z" },
+ { url = "https://files.pythonhosted.org/packages/a2/93/bb77bfa9fc2aba9f7204db807d5d3fb69832ed2854c60ba91b4c65ba9219/pandas-3.0.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0192fee1f1a8e743b464a6607858ee4b071deb0b118eb143d71c2a1d170996d5", size = 10741925, upload-time = "2026-01-21T15:50:21.058Z" },
+ { url = "https://files.pythonhosted.org/packages/62/fb/89319812eb1d714bfc04b7f177895caeba8ab4a37ef6712db75ed786e2e0/pandas-3.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0b853319dec8d5e0c8b875374c078ef17f2269986a78168d9bd57e49bf650ae", size = 11245979, upload-time = "2026-01-21T15:50:23.413Z" },
+ { url = "https://files.pythonhosted.org/packages/a9/63/684120486f541fc88da3862ed31165b3b3e12b6a1c7b93be4597bc84e26c/pandas-3.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:707a9a877a876c326ae2cb640fbdc4ef63b0a7b9e2ef55c6df9942dcee8e2af9", size = 11756337, upload-time = "2026-01-21T15:50:25.932Z" },
+ { url = "https://files.pythonhosted.org/packages/39/92/7eb0ad232312b59aec61550c3c81ad0743898d10af5df7f80bc5e5065416/pandas-3.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:afd0aa3d0b5cda6e0b8ffc10dbcca3b09ef3cbcd3fe2b27364f85fdc04e1989d", size = 12325517, upload-time = "2026-01-21T15:50:27.952Z" },
+ { url = "https://files.pythonhosted.org/packages/51/27/bf9436dd0a4fc3130acec0828951c7ef96a0631969613a9a35744baf27f6/pandas-3.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:113b4cca2614ff7e5b9fee9b6f066618fe73c5a83e99d721ffc41217b2bf57dd", size = 9881576, upload-time = "2026-01-21T15:50:30.149Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/2b/c618b871fce0159fd107516336e82891b404e3f340821853c2fc28c7830f/pandas-3.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c14837eba8e99a8da1527c0280bba29b0eb842f64aa94982c5e21227966e164b", size = 9140807, upload-time = "2026-01-21T15:50:32.308Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/38/db33686f4b5fa64d7af40d96361f6a4615b8c6c8f1b3d334eee46ae6160e/pandas-3.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9803b31f5039b3c3b10cc858c5e40054adb4b29b4d81cb2fd789f4121c8efbcd", size = 10334013, upload-time = "2026-01-21T15:50:34.771Z" },
+ { url = "https://files.pythonhosted.org/packages/a5/7b/9254310594e9774906bacdd4e732415e1f86ab7dbb4b377ef9ede58cd8ec/pandas-3.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:14c2a4099cd38a1d18ff108168ea417909b2dea3bd1ebff2ccf28ddb6a74d740", size = 9874154, upload-time = "2026-01-21T15:50:36.67Z" },
+ { url = "https://files.pythonhosted.org/packages/63/d4/726c5a67a13bc66643e66d2e9ff115cead482a44fc56991d0c4014f15aaf/pandas-3.0.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d257699b9a9960e6125686098d5714ac59d05222bef7a5e6af7a7fd87c650801", size = 10384433, upload-time = "2026-01-21T15:50:39.132Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/2e/9211f09bedb04f9832122942de8b051804b31a39cfbad199a819bb88d9f3/pandas-3.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:69780c98f286076dcafca38d8b8eee1676adf220199c0a39f0ecbf976b68151a", size = 10864519, upload-time = "2026-01-21T15:50:41.043Z" },
+ { url = "https://files.pythonhosted.org/packages/00/8d/50858522cdc46ac88b9afdc3015e298959a70a08cd21e008a44e9520180c/pandas-3.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4a66384f017240f3858a4c8a7cf21b0591c3ac885cddb7758a589f0f71e87ebb", size = 11394124, upload-time = "2026-01-21T15:50:43.377Z" },
+ { url = "https://files.pythonhosted.org/packages/86/3f/83b2577db02503cd93d8e95b0f794ad9d4be0ba7cb6c8bcdcac964a34a42/pandas-3.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be8c515c9bc33989d97b89db66ea0cececb0f6e3c2a87fcc8b69443a6923e95f", size = 11920444, upload-time = "2026-01-21T15:50:45.932Z" },
+ { url = "https://files.pythonhosted.org/packages/64/2d/4f8a2f192ed12c90a0aab47f5557ece0e56b0370c49de9454a09de7381b2/pandas-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:a453aad8c4f4e9f166436994a33884442ea62aa8b27d007311e87521b97246e1", size = 9730970, upload-time = "2026-01-21T15:50:47.962Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/64/ff571be435cf1e643ca98d0945d76732c0b4e9c37191a89c8550b105eed1/pandas-3.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:da768007b5a33057f6d9053563d6b74dd6d029c337d93c6d0d22a763a5c2ecc0", size = 9041950, upload-time = "2026-01-21T15:50:50.422Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/fa/7f0ac4ca8877c57537aaff2a842f8760e630d8e824b730eb2e859ffe96ca/pandas-3.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b78d646249b9a2bc191040988c7bb524c92fa8534fb0898a0741d7e6f2ffafa6", size = 10307129, upload-time = "2026-01-21T15:50:52.877Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/11/28a221815dcea4c0c9414dfc845e34a84a6a7dabc6da3194498ed5ba4361/pandas-3.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bc9cba7b355cb4162442a88ce495e01cb605f17ac1e27d6596ac963504e0305f", size = 9850201, upload-time = "2026-01-21T15:50:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/da/53bbc8c5363b7e5bd10f9ae59ab250fc7a382ea6ba08e4d06d8694370354/pandas-3.0.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c9a1a149aed3b6c9bf246033ff91e1b02d529546c5d6fb6b74a28fea0cf4c70", size = 10354031, upload-time = "2026-01-21T15:50:57.463Z" },
+ { url = "https://files.pythonhosted.org/packages/f7/a3/51e02ebc2a14974170d51e2410dfdab58870ea9bcd37cda15bd553d24dc4/pandas-3.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95683af6175d884ee89471842acfca29172a85031fccdabc35e50c0984470a0e", size = 10861165, upload-time = "2026-01-21T15:50:59.32Z" },
+ { url = "https://files.pythonhosted.org/packages/a5/fe/05a51e3cac11d161472b8297bd41723ea98013384dd6d76d115ce3482f9b/pandas-3.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1fbbb5a7288719e36b76b4f18d46ede46e7f916b6c8d9915b756b0a6c3f792b3", size = 11359359, upload-time = "2026-01-21T15:51:02.014Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/56/ba620583225f9b85a4d3e69c01df3e3870659cc525f67929b60e9f21dcd1/pandas-3.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e8b9808590fa364416b49b2a35c1f4cf2785a6c156935879e57f826df22038e", size = 11912907, upload-time = "2026-01-21T15:51:05.175Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/8c/c6638d9f67e45e07656b3826405c5cc5f57f6fd07c8b2572ade328c86e22/pandas-3.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:98212a38a709feb90ae658cb6227ea3657c22ba8157d4b8f913cd4c950de5e7e", size = 9732138, upload-time = "2026-01-21T15:51:07.569Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/bf/bd1335c3bf1770b6d8fed2799993b11c4971af93bb1b729b9ebbc02ca2ec/pandas-3.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:177d9df10b3f43b70307a149d7ec49a1229a653f907aa60a48f1877d0e6be3be", size = 9033568, upload-time = "2026-01-21T15:51:09.484Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/c6/f5e2171914d5e29b9171d495344097d54e3ffe41d2d85d8115baba4dc483/pandas-3.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2713810ad3806767b89ad3b7b69ba153e1c6ff6d9c20f9c2140379b2a98b6c98", size = 10741936, upload-time = "2026-01-21T15:51:11.693Z" },
+ { url = "https://files.pythonhosted.org/packages/51/88/9a0164f99510a1acb9f548691f022c756c2314aad0d8330a24616c14c462/pandas-3.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:15d59f885ee5011daf8335dff47dcb8a912a27b4ad7826dc6cbe809fd145d327", size = 10393884, upload-time = "2026-01-21T15:51:14.197Z" },
+ { url = "https://files.pythonhosted.org/packages/e0/53/b34d78084d88d8ae2b848591229da8826d1e65aacf00b3abe34023467648/pandas-3.0.0-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:24e6547fb64d2c92665dd2adbfa4e85fa4fd70a9c070e7cfb03b629a0bbab5eb", size = 10310740, upload-time = "2026-01-21T15:51:16.093Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/d3/bee792e7c3d6930b74468d990604325701412e55d7aaf47460a22311d1a5/pandas-3.0.0-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:48ee04b90e2505c693d3f8e8f524dab8cb8aaf7ddcab52c92afa535e717c4812", size = 10700014, upload-time = "2026-01-21T15:51:18.818Z" },
+ { url = "https://files.pythonhosted.org/packages/55/db/2570bc40fb13aaed1cbc3fbd725c3a60ee162477982123c3adc8971e7ac1/pandas-3.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66f72fb172959af42a459e27a8d8d2c7e311ff4c1f7db6deb3b643dbc382ae08", size = 11323737, upload-time = "2026-01-21T15:51:20.784Z" },
+ { url = "https://files.pythonhosted.org/packages/bc/2e/297ac7f21c8181b62a4cccebad0a70caf679adf3ae5e83cb676194c8acc3/pandas-3.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4a4a400ca18230976724a5066f20878af785f36c6756e498e94c2a5e5d57779c", size = 11771558, upload-time = "2026-01-21T15:51:22.977Z" },
+ { url = "https://files.pythonhosted.org/packages/0a/46/e1c6876d71c14332be70239acce9ad435975a80541086e5ffba2f249bcf6/pandas-3.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:940eebffe55528074341a5a36515f3e4c5e25e958ebbc764c9502cfc35ba3faa", size = 10473771, upload-time = "2026-01-21T15:51:25.285Z" },
+ { url = "https://files.pythonhosted.org/packages/c0/db/0270ad9d13c344b7a36fa77f5f8344a46501abf413803e885d22864d10bf/pandas-3.0.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:597c08fb9fef0edf1e4fa2f9828dd27f3d78f9b8c9b4a748d435ffc55732310b", size = 10312075, upload-time = "2026-01-21T15:51:28.5Z" },
+ { url = "https://files.pythonhosted.org/packages/09/9f/c176f5e9717f7c91becfe0f55a52ae445d3f7326b4a2cf355978c51b7913/pandas-3.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:447b2d68ac5edcbf94655fe909113a6dba6ef09ad7f9f60c80477825b6c489fe", size = 9900213, upload-time = "2026-01-21T15:51:30.955Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/e7/63ad4cc10b257b143e0a5ebb04304ad806b4e1a61c5da25f55896d2ca0f4/pandas-3.0.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:debb95c77ff3ed3ba0d9aa20c3a2f19165cc7956362f9873fce1ba0a53819d70", size = 10428768, upload-time = "2026-01-21T15:51:33.018Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/0e/4e4c2d8210f20149fd2248ef3fff26623604922bd564d915f935a06dd63d/pandas-3.0.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fedabf175e7cd82b69b74c30adbaa616de301291a5231138d7242596fc296a8d", size = 10882954, upload-time = "2026-01-21T15:51:35.287Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/60/c9de8ac906ba1f4d2250f8a951abe5135b404227a55858a75ad26f84db47/pandas-3.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:412d1a89aab46889f3033a386912efcdfa0f1131c5705ff5b668dda88305e986", size = 11430293, upload-time = "2026-01-21T15:51:37.57Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/69/806e6637c70920e5787a6d6896fd707f8134c2c55cd761e7249a97b7dc5a/pandas-3.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e979d22316f9350c516479dd3a92252be2937a9531ed3a26ec324198a99cdd49", size = 11952452, upload-time = "2026-01-21T15:51:39.618Z" },
+ { url = "https://files.pythonhosted.org/packages/cb/de/918621e46af55164c400ab0ef389c9d969ab85a43d59ad1207d4ddbe30a5/pandas-3.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:083b11415b9970b6e7888800c43c82e81a06cd6b06755d84804444f0007d6bb7", size = 9851081, upload-time = "2026-01-21T15:51:41.758Z" },
+ { url = "https://files.pythonhosted.org/packages/91/a1/3562a18dd0bd8c73344bfa26ff90c53c72f827df119d6d6b1dacc84d13e3/pandas-3.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:5db1e62cb99e739fa78a28047e861b256d17f88463c76b8dafc7c1338086dca8", size = 9174610, upload-time = "2026-01-21T15:51:44.312Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/26/430d91257eaf366f1737d7a1c158677caaf6267f338ec74e3a1ec444111c/pandas-3.0.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:697b8f7d346c68274b1b93a170a70974cdc7d7354429894d5927c1effdcccd73", size = 10761999, upload-time = "2026-01-21T15:51:46.899Z" },
+ { url = "https://files.pythonhosted.org/packages/ec/1a/954eb47736c2b7f7fe6a9d56b0cb6987773c00faa3c6451a43db4beb3254/pandas-3.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8cb3120f0d9467ed95e77f67a75e030b67545bcfa08964e349252d674171def2", size = 10410279, upload-time = "2026-01-21T15:51:48.89Z" },
+ { url = "https://files.pythonhosted.org/packages/20/fc/b96f3a5a28b250cd1b366eb0108df2501c0f38314a00847242abab71bb3a/pandas-3.0.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33fd3e6baa72899746b820c31e4b9688c8e1b7864d7aec2de7ab5035c285277a", size = 10330198, upload-time = "2026-01-21T15:51:51.015Z" },
+ { url = "https://files.pythonhosted.org/packages/90/b3/d0e2952f103b4fbef1ef22d0c2e314e74fc9064b51cee30890b5e3286ee6/pandas-3.0.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8942e333dc67ceda1095227ad0febb05a3b36535e520154085db632c40ad084", size = 10728513, upload-time = "2026-01-21T15:51:53.387Z" },
+ { url = "https://files.pythonhosted.org/packages/76/81/832894f286df828993dc5fd61c63b231b0fb73377e99f6c6c369174cf97e/pandas-3.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:783ac35c4d0fe0effdb0d67161859078618b1b6587a1af15928137525217a721", size = 11345550, upload-time = "2026-01-21T15:51:55.329Z" },
+ { url = "https://files.pythonhosted.org/packages/34/a0/ed160a00fb4f37d806406bc0a79a8b62fe67f29d00950f8d16203ff3409b/pandas-3.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:125eb901e233f155b268bbef9abd9afb5819db74f0e677e89a61b246228c71ac", size = 11799386, upload-time = "2026-01-21T15:51:57.457Z" },
+ { url = "https://files.pythonhosted.org/packages/36/c8/2ac00d7255252c5e3cf61b35ca92ca25704b0188f7454ca4aec08a33cece/pandas-3.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b86d113b6c109df3ce0ad5abbc259fe86a1bd4adfd4a31a89da42f84f65509bb", size = 10873041, upload-time = "2026-01-21T15:52:00.034Z" },
+ { url = "https://files.pythonhosted.org/packages/e6/3f/a80ac00acbc6b35166b42850e98a4f466e2c0d9c64054161ba9620f95680/pandas-3.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:1c39eab3ad38f2d7a249095f0a3d8f8c22cc0f847e98ccf5bbe732b272e2d9fa", size = 9441003, upload-time = "2026-01-21T15:52:02.281Z" },
]
[[package]]
name = "pillow"
-version = "12.0.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/cace85a1b0c9775a9f8f5d5423c8261c858760e2466c79b2dd184638b056/pillow-12.0.0.tar.gz", hash = "sha256:87d4f8125c9988bfbed67af47dd7a953e2fc7b0cc1e7800ec6d2080d490bb353", size = 47008828, upload-time = "2025-10-15T18:24:14.008Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/0e/5a/a2f6773b64edb921a756eb0729068acad9fc5208a53f4a349396e9436721/pillow-12.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0fd00cac9c03256c8b2ff58f162ebcd2587ad3e1f2e397eab718c47e24d231cc", size = 5289798, upload-time = "2025-10-15T18:21:47.763Z" },
- { url = "https://files.pythonhosted.org/packages/2e/05/069b1f8a2e4b5a37493da6c5868531c3f77b85e716ad7a590ef87d58730d/pillow-12.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3475b96f5908b3b16c47533daaa87380c491357d197564e0ba34ae75c0f3257", size = 4650589, upload-time = "2025-10-15T18:21:49.515Z" },
- { url = "https://files.pythonhosted.org/packages/61/e3/2c820d6e9a36432503ead175ae294f96861b07600a7156154a086ba7111a/pillow-12.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:110486b79f2d112cf6add83b28b627e369219388f64ef2f960fef9ebaf54c642", size = 6230472, upload-time = "2025-10-15T18:21:51.052Z" },
- { url = "https://files.pythonhosted.org/packages/4f/89/63427f51c64209c5e23d4d52071c8d0f21024d3a8a487737caaf614a5795/pillow-12.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5269cc1caeedb67e6f7269a42014f381f45e2e7cd42d834ede3c703a1d915fe3", size = 8033887, upload-time = "2025-10-15T18:21:52.604Z" },
- { url = "https://files.pythonhosted.org/packages/f6/1b/c9711318d4901093c15840f268ad649459cd81984c9ec9887756cca049a5/pillow-12.0.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa5129de4e174daccbc59d0a3b6d20eaf24417d59851c07ebb37aeb02947987c", size = 6343964, upload-time = "2025-10-15T18:21:54.619Z" },
- { url = "https://files.pythonhosted.org/packages/41/1e/db9470f2d030b4995083044cd8738cdd1bf773106819f6d8ba12597d5352/pillow-12.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bee2a6db3a7242ea309aa7ee8e2780726fed67ff4e5b40169f2c940e7eb09227", size = 7034756, upload-time = "2025-10-15T18:21:56.151Z" },
- { url = "https://files.pythonhosted.org/packages/cc/b0/6177a8bdd5ee4ed87cba2de5a3cc1db55ffbbec6176784ce5bb75aa96798/pillow-12.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:90387104ee8400a7b4598253b4c406f8958f59fcf983a6cea2b50d59f7d63d0b", size = 6458075, upload-time = "2025-10-15T18:21:57.759Z" },
- { url = "https://files.pythonhosted.org/packages/bc/5e/61537aa6fa977922c6a03253a0e727e6e4a72381a80d63ad8eec350684f2/pillow-12.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bc91a56697869546d1b8f0a3ff35224557ae7f881050e99f615e0119bf934b4e", size = 7125955, upload-time = "2025-10-15T18:21:59.372Z" },
- { url = "https://files.pythonhosted.org/packages/1f/3d/d5033539344ee3cbd9a4d69e12e63ca3a44a739eb2d4c8da350a3d38edd7/pillow-12.0.0-cp311-cp311-win32.whl", hash = "sha256:27f95b12453d165099c84f8a8bfdfd46b9e4bda9e0e4b65f0635430027f55739", size = 6298440, upload-time = "2025-10-15T18:22:00.982Z" },
- { url = "https://files.pythonhosted.org/packages/4d/42/aaca386de5cc8bd8a0254516957c1f265e3521c91515b16e286c662854c4/pillow-12.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:b583dc9070312190192631373c6c8ed277254aa6e6084b74bdd0a6d3b221608e", size = 6999256, upload-time = "2025-10-15T18:22:02.617Z" },
- { url = "https://files.pythonhosted.org/packages/ba/f1/9197c9c2d5708b785f631a6dfbfa8eb3fb9672837cb92ae9af812c13b4ed/pillow-12.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:759de84a33be3b178a64c8ba28ad5c135900359e85fb662bc6e403ad4407791d", size = 2436025, upload-time = "2025-10-15T18:22:04.598Z" },
- { url = "https://files.pythonhosted.org/packages/2c/90/4fcce2c22caf044e660a198d740e7fbc14395619e3cb1abad12192c0826c/pillow-12.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:53561a4ddc36facb432fae7a9d8afbfaf94795414f5cdc5fc52f28c1dca90371", size = 5249377, upload-time = "2025-10-15T18:22:05.993Z" },
- { url = "https://files.pythonhosted.org/packages/fd/e0/ed960067543d080691d47d6938ebccbf3976a931c9567ab2fbfab983a5dd/pillow-12.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:71db6b4c1653045dacc1585c1b0d184004f0d7e694c7b34ac165ca70c0838082", size = 4650343, upload-time = "2025-10-15T18:22:07.718Z" },
- { url = "https://files.pythonhosted.org/packages/e7/a1/f81fdeddcb99c044bf7d6faa47e12850f13cee0849537a7d27eeab5534d4/pillow-12.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2fa5f0b6716fc88f11380b88b31fe591a06c6315e955c096c35715788b339e3f", size = 6232981, upload-time = "2025-10-15T18:22:09.287Z" },
- { url = "https://files.pythonhosted.org/packages/88/e1/9098d3ce341a8750b55b0e00c03f1630d6178f38ac191c81c97a3b047b44/pillow-12.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:82240051c6ca513c616f7f9da06e871f61bfd7805f566275841af15015b8f98d", size = 8041399, upload-time = "2025-10-15T18:22:10.872Z" },
- { url = "https://files.pythonhosted.org/packages/a7/62/a22e8d3b602ae8cc01446d0c57a54e982737f44b6f2e1e019a925143771d/pillow-12.0.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55f818bd74fe2f11d4d7cbc65880a843c4075e0ac7226bc1a23261dbea531953", size = 6347740, upload-time = "2025-10-15T18:22:12.769Z" },
- { url = "https://files.pythonhosted.org/packages/4f/87/424511bdcd02c8d7acf9f65caa09f291a519b16bd83c3fb3374b3d4ae951/pillow-12.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b87843e225e74576437fd5b6a4c2205d422754f84a06942cfaf1dc32243e45a8", size = 7040201, upload-time = "2025-10-15T18:22:14.813Z" },
- { url = "https://files.pythonhosted.org/packages/dc/4d/435c8ac688c54d11755aedfdd9f29c9eeddf68d150fe42d1d3dbd2365149/pillow-12.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c607c90ba67533e1b2355b821fef6764d1dd2cbe26b8c1005ae84f7aea25ff79", size = 6462334, upload-time = "2025-10-15T18:22:16.375Z" },
- { url = "https://files.pythonhosted.org/packages/2b/f2/ad34167a8059a59b8ad10bc5c72d4d9b35acc6b7c0877af8ac885b5f2044/pillow-12.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:21f241bdd5080a15bc86d3466a9f6074a9c2c2b314100dd896ac81ee6db2f1ba", size = 7134162, upload-time = "2025-10-15T18:22:17.996Z" },
- { url = "https://files.pythonhosted.org/packages/0c/b1/a7391df6adacf0a5c2cf6ac1cf1fcc1369e7d439d28f637a847f8803beb3/pillow-12.0.0-cp312-cp312-win32.whl", hash = "sha256:dd333073e0cacdc3089525c7df7d39b211bcdf31fc2824e49d01c6b6187b07d0", size = 6298769, upload-time = "2025-10-15T18:22:19.923Z" },
- { url = "https://files.pythonhosted.org/packages/a2/0b/d87733741526541c909bbf159e338dcace4f982daac6e5a8d6be225ca32d/pillow-12.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:9fe611163f6303d1619bbcb653540a4d60f9e55e622d60a3108be0d5b441017a", size = 7001107, upload-time = "2025-10-15T18:22:21.644Z" },
- { url = "https://files.pythonhosted.org/packages/bc/96/aaa61ce33cc98421fb6088af2a03be4157b1e7e0e87087c888e2370a7f45/pillow-12.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:7dfb439562f234f7d57b1ac6bc8fe7f838a4bd49c79230e0f6a1da93e82f1fad", size = 2436012, upload-time = "2025-10-15T18:22:23.621Z" },
- { url = "https://files.pythonhosted.org/packages/62/f2/de993bb2d21b33a98d031ecf6a978e4b61da207bef02f7b43093774c480d/pillow-12.0.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0869154a2d0546545cde61d1789a6524319fc1897d9ee31218eae7a60ccc5643", size = 4045493, upload-time = "2025-10-15T18:22:25.758Z" },
- { url = "https://files.pythonhosted.org/packages/0e/b6/bc8d0c4c9f6f111a783d045310945deb769b806d7574764234ffd50bc5ea/pillow-12.0.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a7921c5a6d31b3d756ec980f2f47c0cfdbce0fc48c22a39347a895f41f4a6ea4", size = 4120461, upload-time = "2025-10-15T18:22:27.286Z" },
- { url = "https://files.pythonhosted.org/packages/5d/57/d60d343709366a353dc56adb4ee1e7d8a2cc34e3fbc22905f4167cfec119/pillow-12.0.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:1ee80a59f6ce048ae13cda1abf7fbd2a34ab9ee7d401c46be3ca685d1999a399", size = 3576912, upload-time = "2025-10-15T18:22:28.751Z" },
- { url = "https://files.pythonhosted.org/packages/a4/a4/a0a31467e3f83b94d37568294b01d22b43ae3c5d85f2811769b9c66389dd/pillow-12.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c50f36a62a22d350c96e49ad02d0da41dbd17ddc2e29750dbdba4323f85eb4a5", size = 5249132, upload-time = "2025-10-15T18:22:30.641Z" },
- { url = "https://files.pythonhosted.org/packages/83/06/48eab21dd561de2914242711434c0c0eb992ed08ff3f6107a5f44527f5e9/pillow-12.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5193fde9a5f23c331ea26d0cf171fbf67e3f247585f50c08b3e205c7aeb4589b", size = 4650099, upload-time = "2025-10-15T18:22:32.73Z" },
- { url = "https://files.pythonhosted.org/packages/fc/bd/69ed99fd46a8dba7c1887156d3572fe4484e3f031405fcc5a92e31c04035/pillow-12.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bde737cff1a975b70652b62d626f7785e0480918dece11e8fef3c0cf057351c3", size = 6230808, upload-time = "2025-10-15T18:22:34.337Z" },
- { url = "https://files.pythonhosted.org/packages/ea/94/8fad659bcdbf86ed70099cb60ae40be6acca434bbc8c4c0d4ef356d7e0de/pillow-12.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a6597ff2b61d121172f5844b53f21467f7082f5fb385a9a29c01414463f93b07", size = 8037804, upload-time = "2025-10-15T18:22:36.402Z" },
- { url = "https://files.pythonhosted.org/packages/20/39/c685d05c06deecfd4e2d1950e9a908aa2ca8bc4e6c3b12d93b9cafbd7837/pillow-12.0.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b817e7035ea7f6b942c13aa03bb554fc44fea70838ea21f8eb31c638326584e", size = 6345553, upload-time = "2025-10-15T18:22:38.066Z" },
- { url = "https://files.pythonhosted.org/packages/38/57/755dbd06530a27a5ed74f8cb0a7a44a21722ebf318edbe67ddbd7fb28f88/pillow-12.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f4f1231b7dec408e8670264ce63e9c71409d9583dd21d32c163e25213ee2a344", size = 7037729, upload-time = "2025-10-15T18:22:39.769Z" },
- { url = "https://files.pythonhosted.org/packages/ca/b6/7e94f4c41d238615674d06ed677c14883103dce1c52e4af16f000338cfd7/pillow-12.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e51b71417049ad6ab14c49608b4a24d8fb3fe605e5dfabfe523b58064dc3d27", size = 6459789, upload-time = "2025-10-15T18:22:41.437Z" },
- { url = "https://files.pythonhosted.org/packages/9c/14/4448bb0b5e0f22dd865290536d20ec8a23b64e2d04280b89139f09a36bb6/pillow-12.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d120c38a42c234dc9a8c5de7ceaaf899cf33561956acb4941653f8bdc657aa79", size = 7130917, upload-time = "2025-10-15T18:22:43.152Z" },
- { url = "https://files.pythonhosted.org/packages/dd/ca/16c6926cc1c015845745d5c16c9358e24282f1e588237a4c36d2b30f182f/pillow-12.0.0-cp313-cp313-win32.whl", hash = "sha256:4cc6b3b2efff105c6a1656cfe59da4fdde2cda9af1c5e0b58529b24525d0a098", size = 6302391, upload-time = "2025-10-15T18:22:44.753Z" },
- { url = "https://files.pythonhosted.org/packages/6d/2a/dd43dcfd6dae9b6a49ee28a8eedb98c7d5ff2de94a5d834565164667b97b/pillow-12.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:4cf7fed4b4580601c4345ceb5d4cbf5a980d030fd5ad07c4d2ec589f95f09905", size = 7007477, upload-time = "2025-10-15T18:22:46.838Z" },
- { url = "https://files.pythonhosted.org/packages/77/f0/72ea067f4b5ae5ead653053212af05ce3705807906ba3f3e8f58ddf617e6/pillow-12.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:9f0b04c6b8584c2c193babcccc908b38ed29524b29dd464bc8801bf10d746a3a", size = 2435918, upload-time = "2025-10-15T18:22:48.399Z" },
- { url = "https://files.pythonhosted.org/packages/f5/5e/9046b423735c21f0487ea6cb5b10f89ea8f8dfbe32576fe052b5ba9d4e5b/pillow-12.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7fa22993bac7b77b78cae22bad1e2a987ddf0d9015c63358032f84a53f23cdc3", size = 5251406, upload-time = "2025-10-15T18:22:49.905Z" },
- { url = "https://files.pythonhosted.org/packages/12/66/982ceebcdb13c97270ef7a56c3969635b4ee7cd45227fa707c94719229c5/pillow-12.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f135c702ac42262573fe9714dfe99c944b4ba307af5eb507abef1667e2cbbced", size = 4653218, upload-time = "2025-10-15T18:22:51.587Z" },
- { url = "https://files.pythonhosted.org/packages/16/b3/81e625524688c31859450119bf12674619429cab3119eec0e30a7a1029cb/pillow-12.0.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c85de1136429c524e55cfa4e033b4a7940ac5c8ee4d9401cc2d1bf48154bbc7b", size = 6266564, upload-time = "2025-10-15T18:22:53.215Z" },
- { url = "https://files.pythonhosted.org/packages/98/59/dfb38f2a41240d2408096e1a76c671d0a105a4a8471b1871c6902719450c/pillow-12.0.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:38df9b4bfd3db902c9c2bd369bcacaf9d935b2fff73709429d95cc41554f7b3d", size = 8069260, upload-time = "2025-10-15T18:22:54.933Z" },
- { url = "https://files.pythonhosted.org/packages/dc/3d/378dbea5cd1874b94c312425ca77b0f47776c78e0df2df751b820c8c1d6c/pillow-12.0.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d87ef5795da03d742bf49439f9ca4d027cde49c82c5371ba52464aee266699a", size = 6379248, upload-time = "2025-10-15T18:22:56.605Z" },
- { url = "https://files.pythonhosted.org/packages/84/b0/d525ef47d71590f1621510327acec75ae58c721dc071b17d8d652ca494d8/pillow-12.0.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aff9e4d82d082ff9513bdd6acd4f5bd359f5b2c870907d2b0a9c5e10d40c88fe", size = 7066043, upload-time = "2025-10-15T18:22:58.53Z" },
- { url = "https://files.pythonhosted.org/packages/61/2c/aced60e9cf9d0cde341d54bf7932c9ffc33ddb4a1595798b3a5150c7ec4e/pillow-12.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:8d8ca2b210ada074d57fcee40c30446c9562e542fc46aedc19baf758a93532ee", size = 6490915, upload-time = "2025-10-15T18:23:00.582Z" },
- { url = "https://files.pythonhosted.org/packages/ef/26/69dcb9b91f4e59f8f34b2332a4a0a951b44f547c4ed39d3e4dcfcff48f89/pillow-12.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:99a7f72fb6249302aa62245680754862a44179b545ded638cf1fef59befb57ef", size = 7157998, upload-time = "2025-10-15T18:23:02.627Z" },
- { url = "https://files.pythonhosted.org/packages/61/2b/726235842220ca95fa441ddf55dd2382b52ab5b8d9c0596fe6b3f23dafe8/pillow-12.0.0-cp313-cp313t-win32.whl", hash = "sha256:4078242472387600b2ce8d93ade8899c12bf33fa89e55ec89fe126e9d6d5d9e9", size = 6306201, upload-time = "2025-10-15T18:23:04.709Z" },
- { url = "https://files.pythonhosted.org/packages/c0/3d/2afaf4e840b2df71344ababf2f8edd75a705ce500e5dc1e7227808312ae1/pillow-12.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2c54c1a783d6d60595d3514f0efe9b37c8808746a66920315bfd34a938d7994b", size = 7013165, upload-time = "2025-10-15T18:23:06.46Z" },
- { url = "https://files.pythonhosted.org/packages/6f/75/3fa09aa5cf6ed04bee3fa575798ddf1ce0bace8edb47249c798077a81f7f/pillow-12.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:26d9f7d2b604cd23aba3e9faf795787456ac25634d82cd060556998e39c6fa47", size = 2437834, upload-time = "2025-10-15T18:23:08.194Z" },
- { url = "https://files.pythonhosted.org/packages/54/2a/9a8c6ba2c2c07b71bec92cf63e03370ca5e5f5c5b119b742bcc0cde3f9c5/pillow-12.0.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:beeae3f27f62308f1ddbcfb0690bf44b10732f2ef43758f169d5e9303165d3f9", size = 4045531, upload-time = "2025-10-15T18:23:10.121Z" },
- { url = "https://files.pythonhosted.org/packages/84/54/836fdbf1bfb3d66a59f0189ff0b9f5f666cee09c6188309300df04ad71fa/pillow-12.0.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d4827615da15cd59784ce39d3388275ec093ae3ee8d7f0c089b76fa87af756c2", size = 4120554, upload-time = "2025-10-15T18:23:12.14Z" },
- { url = "https://files.pythonhosted.org/packages/0d/cd/16aec9f0da4793e98e6b54778a5fbce4f375c6646fe662e80600b8797379/pillow-12.0.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:3e42edad50b6909089750e65c91aa09aaf1e0a71310d383f11321b27c224ed8a", size = 3576812, upload-time = "2025-10-15T18:23:13.962Z" },
- { url = "https://files.pythonhosted.org/packages/f6/b7/13957fda356dc46339298b351cae0d327704986337c3c69bb54628c88155/pillow-12.0.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e5d8efac84c9afcb40914ab49ba063d94f5dbdf5066db4482c66a992f47a3a3b", size = 5252689, upload-time = "2025-10-15T18:23:15.562Z" },
- { url = "https://files.pythonhosted.org/packages/fc/f5/eae31a306341d8f331f43edb2e9122c7661b975433de5e447939ae61c5da/pillow-12.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:266cd5f2b63ff316d5a1bba46268e603c9caf5606d44f38c2873c380950576ad", size = 4650186, upload-time = "2025-10-15T18:23:17.379Z" },
- { url = "https://files.pythonhosted.org/packages/86/62/2a88339aa40c4c77e79108facbd307d6091e2c0eb5b8d3cf4977cfca2fe6/pillow-12.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58eea5ebe51504057dd95c5b77d21700b77615ab0243d8152793dc00eb4faf01", size = 6230308, upload-time = "2025-10-15T18:23:18.971Z" },
- { url = "https://files.pythonhosted.org/packages/c7/33/5425a8992bcb32d1cb9fa3dd39a89e613d09a22f2c8083b7bf43c455f760/pillow-12.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f13711b1a5ba512d647a0e4ba79280d3a9a045aaf7e0cc6fbe96b91d4cdf6b0c", size = 8039222, upload-time = "2025-10-15T18:23:20.909Z" },
- { url = "https://files.pythonhosted.org/packages/d8/61/3f5d3b35c5728f37953d3eec5b5f3e77111949523bd2dd7f31a851e50690/pillow-12.0.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6846bd2d116ff42cba6b646edf5bf61d37e5cbd256425fa089fee4ff5c07a99e", size = 6346657, upload-time = "2025-10-15T18:23:23.077Z" },
- { url = "https://files.pythonhosted.org/packages/3a/be/ee90a3d79271227e0f0a33c453531efd6ed14b2e708596ba5dd9be948da3/pillow-12.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c98fa880d695de164b4135a52fd2e9cd7b7c90a9d8ac5e9e443a24a95ef9248e", size = 7038482, upload-time = "2025-10-15T18:23:25.005Z" },
- { url = "https://files.pythonhosted.org/packages/44/34/a16b6a4d1ad727de390e9bd9f19f5f669e079e5826ec0f329010ddea492f/pillow-12.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa3ed2a29a9e9d2d488b4da81dcb54720ac3104a20bf0bd273f1e4648aff5af9", size = 6461416, upload-time = "2025-10-15T18:23:27.009Z" },
- { url = "https://files.pythonhosted.org/packages/b6/39/1aa5850d2ade7d7ba9f54e4e4c17077244ff7a2d9e25998c38a29749eb3f/pillow-12.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d034140032870024e6b9892c692fe2968493790dd57208b2c37e3fb35f6df3ab", size = 7131584, upload-time = "2025-10-15T18:23:29.752Z" },
- { url = "https://files.pythonhosted.org/packages/bf/db/4fae862f8fad0167073a7733973bfa955f47e2cac3dc3e3e6257d10fab4a/pillow-12.0.0-cp314-cp314-win32.whl", hash = "sha256:1b1b133e6e16105f524a8dec491e0586d072948ce15c9b914e41cdadd209052b", size = 6400621, upload-time = "2025-10-15T18:23:32.06Z" },
- { url = "https://files.pythonhosted.org/packages/2b/24/b350c31543fb0107ab2599464d7e28e6f856027aadda995022e695313d94/pillow-12.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:8dc232e39d409036af549c86f24aed8273a40ffa459981146829a324e0848b4b", size = 7142916, upload-time = "2025-10-15T18:23:34.71Z" },
- { url = "https://files.pythonhosted.org/packages/0f/9b/0ba5a6fd9351793996ef7487c4fdbde8d3f5f75dbedc093bb598648fddf0/pillow-12.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:d52610d51e265a51518692045e372a4c363056130d922a7351429ac9f27e70b0", size = 2523836, upload-time = "2025-10-15T18:23:36.967Z" },
- { url = "https://files.pythonhosted.org/packages/f5/7a/ceee0840aebc579af529b523d530840338ecf63992395842e54edc805987/pillow-12.0.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:1979f4566bb96c1e50a62d9831e2ea2d1211761e5662afc545fa766f996632f6", size = 5255092, upload-time = "2025-10-15T18:23:38.573Z" },
- { url = "https://files.pythonhosted.org/packages/44/76/20776057b4bfd1aef4eeca992ebde0f53a4dce874f3ae693d0ec90a4f79b/pillow-12.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b2e4b27a6e15b04832fe9bf292b94b5ca156016bbc1ea9c2c20098a0320d6cf6", size = 4653158, upload-time = "2025-10-15T18:23:40.238Z" },
- { url = "https://files.pythonhosted.org/packages/82/3f/d9ff92ace07be8836b4e7e87e6a4c7a8318d47c2f1463ffcf121fc57d9cb/pillow-12.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fb3096c30df99fd01c7bf8e544f392103d0795b9f98ba71a8054bcbf56b255f1", size = 6267882, upload-time = "2025-10-15T18:23:42.434Z" },
- { url = "https://files.pythonhosted.org/packages/9f/7a/4f7ff87f00d3ad33ba21af78bfcd2f032107710baf8280e3722ceec28cda/pillow-12.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7438839e9e053ef79f7112c881cef684013855016f928b168b81ed5835f3e75e", size = 8071001, upload-time = "2025-10-15T18:23:44.29Z" },
- { url = "https://files.pythonhosted.org/packages/75/87/fcea108944a52dad8cca0715ae6247e271eb80459364a98518f1e4f480c1/pillow-12.0.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d5c411a8eaa2299322b647cd932586b1427367fd3184ffbb8f7a219ea2041ca", size = 6380146, upload-time = "2025-10-15T18:23:46.065Z" },
- { url = "https://files.pythonhosted.org/packages/91/52/0d31b5e571ef5fd111d2978b84603fce26aba1b6092f28e941cb46570745/pillow-12.0.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7e091d464ac59d2c7ad8e7e08105eaf9dafbc3883fd7265ffccc2baad6ac925", size = 7067344, upload-time = "2025-10-15T18:23:47.898Z" },
- { url = "https://files.pythonhosted.org/packages/7b/f4/2dd3d721f875f928d48e83bb30a434dee75a2531bca839bb996bb0aa5a91/pillow-12.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:792a2c0be4dcc18af9d4a2dfd8a11a17d5e25274a1062b0ec1c2d79c76f3e7f8", size = 6491864, upload-time = "2025-10-15T18:23:49.607Z" },
- { url = "https://files.pythonhosted.org/packages/30/4b/667dfcf3d61fc309ba5a15b141845cece5915e39b99c1ceab0f34bf1d124/pillow-12.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:afbefa430092f71a9593a99ab6a4e7538bc9eabbf7bf94f91510d3503943edc4", size = 7158911, upload-time = "2025-10-15T18:23:51.351Z" },
- { url = "https://files.pythonhosted.org/packages/a2/2f/16cabcc6426c32218ace36bf0d55955e813f2958afddbf1d391849fee9d1/pillow-12.0.0-cp314-cp314t-win32.whl", hash = "sha256:3830c769decf88f1289680a59d4f4c46c72573446352e2befec9a8512104fa52", size = 6408045, upload-time = "2025-10-15T18:23:53.177Z" },
- { url = "https://files.pythonhosted.org/packages/35/73/e29aa0c9c666cf787628d3f0dcf379f4791fba79f4936d02f8b37165bdf8/pillow-12.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:905b0365b210c73afb0ebe9101a32572152dfd1c144c7e28968a331b9217b94a", size = 7148282, upload-time = "2025-10-15T18:23:55.316Z" },
- { url = "https://files.pythonhosted.org/packages/c1/70/6b41bdcddf541b437bbb9f47f94d2db5d9ddef6c37ccab8c9107743748a4/pillow-12.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:99353a06902c2e43b43e8ff74ee65a7d90307d82370604746738a1e0661ccca7", size = 2525630, upload-time = "2025-10-15T18:23:57.149Z" },
- { url = "https://files.pythonhosted.org/packages/1d/b3/582327e6c9f86d037b63beebe981425d6811104cb443e8193824ef1a2f27/pillow-12.0.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b22bd8c974942477156be55a768f7aa37c46904c175be4e158b6a86e3a6b7ca8", size = 5215068, upload-time = "2025-10-15T18:23:59.594Z" },
- { url = "https://files.pythonhosted.org/packages/fd/d6/67748211d119f3b6540baf90f92fae73ae51d5217b171b0e8b5f7e5d558f/pillow-12.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:805ebf596939e48dbb2e4922a1d3852cfc25c38160751ce02da93058b48d252a", size = 4614994, upload-time = "2025-10-15T18:24:01.669Z" },
- { url = "https://files.pythonhosted.org/packages/2d/e1/f8281e5d844c41872b273b9f2c34a4bf64ca08905668c8ae730eedc7c9fa/pillow-12.0.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cae81479f77420d217def5f54b5b9d279804d17e982e0f2fa19b1d1e14ab5197", size = 5246639, upload-time = "2025-10-15T18:24:03.403Z" },
- { url = "https://files.pythonhosted.org/packages/94/5a/0d8ab8ffe8a102ff5df60d0de5af309015163bf710c7bb3e8311dd3b3ad0/pillow-12.0.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeaefa96c768fc66818730b952a862235d68825c178f1b3ffd4efd7ad2edcb7c", size = 6986839, upload-time = "2025-10-15T18:24:05.344Z" },
- { url = "https://files.pythonhosted.org/packages/20/2e/3434380e8110b76cd9eb00a363c484b050f949b4bbe84ba770bb8508a02c/pillow-12.0.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09f2d0abef9e4e2f349305a4f8cc784a8a6c2f58a8c4892eea13b10a943bd26e", size = 5313505, upload-time = "2025-10-15T18:24:07.137Z" },
- { url = "https://files.pythonhosted.org/packages/57/ca/5a9d38900d9d74785141d6580950fe705de68af735ff6e727cb911b64740/pillow-12.0.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bdee52571a343d721fb2eb3b090a82d959ff37fc631e3f70422e0c2e029f3e76", size = 5963654, upload-time = "2025-10-15T18:24:09.579Z" },
- { url = "https://files.pythonhosted.org/packages/95/7e/f896623c3c635a90537ac093c6a618ebe1a90d87206e42309cb5d98a1b9e/pillow-12.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:b290fd8aa38422444d4b50d579de197557f182ef1068b75f5aa8558638b8d0a5", size = 6997850, upload-time = "2025-10-15T18:24:11.495Z" },
+version = "12.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d0/02/d52c733a2452ef1ffcc123b68e6606d07276b0e358db70eabad7e40042b7/pillow-12.1.0.tar.gz", hash = "sha256:5c5ae0a06e9ea030ab786b0251b32c7e4ce10e58d983c0d5c56029455180b5b9", size = 46977283, upload-time = "2026-01-02T09:13:29.892Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/43/c4/bf8328039de6cc22182c3ef007a2abfbbdab153661c0a9aa78af8d706391/pillow-12.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:a83e0850cb8f5ac975291ebfc4170ba481f41a28065277f7f735c202cd8e0af3", size = 5304057, upload-time = "2026-01-02T09:10:46.627Z" },
+ { url = "https://files.pythonhosted.org/packages/43/06/7264c0597e676104cc22ca73ee48f752767cd4b1fe084662620b17e10120/pillow-12.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b6e53e82ec2db0717eabb276aa56cf4e500c9a7cec2c2e189b55c24f65a3e8c0", size = 4657811, upload-time = "2026-01-02T09:10:49.548Z" },
+ { url = "https://files.pythonhosted.org/packages/72/64/f9189e44474610daf83da31145fa56710b627b5c4c0b9c235e34058f6b31/pillow-12.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:40a8e3b9e8773876d6e30daed22f016509e3987bab61b3b7fe309d7019a87451", size = 6232243, upload-time = "2026-01-02T09:10:51.62Z" },
+ { url = "https://files.pythonhosted.org/packages/ef/30/0df458009be6a4caca4ca2c52975e6275c387d4e5c95544e34138b41dc86/pillow-12.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:800429ac32c9b72909c671aaf17ecd13110f823ddb7db4dfef412a5587c2c24e", size = 8037872, upload-time = "2026-01-02T09:10:53.446Z" },
+ { url = "https://files.pythonhosted.org/packages/e4/86/95845d4eda4f4f9557e25381d70876aa213560243ac1a6d619c46caaedd9/pillow-12.1.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b022eaaf709541b391ee069f0022ee5b36c709df71986e3f7be312e46f42c84", size = 6345398, upload-time = "2026-01-02T09:10:55.426Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/1f/8e66ab9be3aaf1435bc03edd1ebdf58ffcd17f7349c1d970cafe87af27d9/pillow-12.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f345e7bc9d7f368887c712aa5054558bad44d2a301ddf9248599f4161abc7c0", size = 7034667, upload-time = "2026-01-02T09:10:57.11Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/f6/683b83cb9b1db1fb52b87951b1c0b99bdcfceaa75febf11406c19f82cb5e/pillow-12.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d70347c8a5b7ccd803ec0c85c8709f036e6348f1e6a5bf048ecd9c64d3550b8b", size = 6458743, upload-time = "2026-01-02T09:10:59.331Z" },
+ { url = "https://files.pythonhosted.org/packages/9a/7d/de833d63622538c1d58ce5395e7c6cb7e7dce80decdd8bde4a484e095d9f/pillow-12.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1fcc52d86ce7a34fd17cb04e87cfdb164648a3662a6f20565910a99653d66c18", size = 7159342, upload-time = "2026-01-02T09:11:01.82Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/40/50d86571c9e5868c42b81fe7da0c76ca26373f3b95a8dd675425f4a92ec1/pillow-12.1.0-cp311-cp311-win32.whl", hash = "sha256:3ffaa2f0659e2f740473bcf03c702c39a8d4b2b7ffc629052028764324842c64", size = 6328655, upload-time = "2026-01-02T09:11:04.556Z" },
+ { url = "https://files.pythonhosted.org/packages/6c/af/b1d7e301c4cd26cd45d4af884d9ee9b6fab893b0ad2450d4746d74a6968c/pillow-12.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:806f3987ffe10e867bab0ddad45df1148a2b98221798457fa097ad85d6e8bc75", size = 7031469, upload-time = "2026-01-02T09:11:06.538Z" },
+ { url = "https://files.pythonhosted.org/packages/48/36/d5716586d887fb2a810a4a61518a327a1e21c8b7134c89283af272efe84b/pillow-12.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:9f5fefaca968e700ad1a4a9de98bf0869a94e397fe3524c4c9450c1445252304", size = 2452515, upload-time = "2026-01-02T09:11:08.226Z" },
+ { url = "https://files.pythonhosted.org/packages/20/31/dc53fe21a2f2996e1b7d92bf671cdb157079385183ef7c1ae08b485db510/pillow-12.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a332ac4ccb84b6dde65dbace8431f3af08874bf9770719d32a635c4ef411b18b", size = 5262642, upload-time = "2026-01-02T09:11:10.138Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/c1/10e45ac9cc79419cedf5121b42dcca5a50ad2b601fa080f58c22fb27626e/pillow-12.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:907bfa8a9cb790748a9aa4513e37c88c59660da3bcfffbd24a7d9e6abf224551", size = 4657464, upload-time = "2026-01-02T09:11:12.319Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/26/7b82c0ab7ef40ebede7a97c72d473bda5950f609f8e0c77b04af574a0ddb/pillow-12.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:efdc140e7b63b8f739d09a99033aa430accce485ff78e6d311973a67b6bf3208", size = 6234878, upload-time = "2026-01-02T09:11:14.096Z" },
+ { url = "https://files.pythonhosted.org/packages/76/25/27abc9792615b5e886ca9411ba6637b675f1b77af3104710ac7353fe5605/pillow-12.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bef9768cab184e7ae6e559c032e95ba8d07b3023c289f79a2bd36e8bf85605a5", size = 8044868, upload-time = "2026-01-02T09:11:15.903Z" },
+ { url = "https://files.pythonhosted.org/packages/0a/ea/f200a4c36d836100e7bc738fc48cd963d3ba6372ebc8298a889e0cfc3359/pillow-12.1.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:742aea052cf5ab5034a53c3846165bc3ce88d7c38e954120db0ab867ca242661", size = 6349468, upload-time = "2026-01-02T09:11:17.631Z" },
+ { url = "https://files.pythonhosted.org/packages/11/8f/48d0b77ab2200374c66d344459b8958c86693be99526450e7aee714e03e4/pillow-12.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a6dfc2af5b082b635af6e08e0d1f9f1c4e04d17d4e2ca0ef96131e85eda6eb17", size = 7041518, upload-time = "2026-01-02T09:11:19.389Z" },
+ { url = "https://files.pythonhosted.org/packages/1d/23/c281182eb986b5d31f0a76d2a2c8cd41722d6fb8ed07521e802f9bba52de/pillow-12.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:609e89d9f90b581c8d16358c9087df76024cf058fa693dd3e1e1620823f39670", size = 6462829, upload-time = "2026-01-02T09:11:21.28Z" },
+ { url = "https://files.pythonhosted.org/packages/25/ef/7018273e0faac099d7b00982abdcc39142ae6f3bd9ceb06de09779c4a9d6/pillow-12.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:43b4899cfd091a9693a1278c4982f3e50f7fb7cff5153b05174b4afc9593b616", size = 7166756, upload-time = "2026-01-02T09:11:23.559Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/c8/993d4b7ab2e341fe02ceef9576afcf5830cdec640be2ac5bee1820d693d4/pillow-12.1.0-cp312-cp312-win32.whl", hash = "sha256:aa0c9cc0b82b14766a99fbe6084409972266e82f459821cd26997a488a7261a7", size = 6328770, upload-time = "2026-01-02T09:11:25.661Z" },
+ { url = "https://files.pythonhosted.org/packages/a7/87/90b358775a3f02765d87655237229ba64a997b87efa8ccaca7dd3e36e7a7/pillow-12.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:d70534cea9e7966169ad29a903b99fc507e932069a881d0965a1a84bb57f6c6d", size = 7033406, upload-time = "2026-01-02T09:11:27.474Z" },
+ { url = "https://files.pythonhosted.org/packages/5d/cf/881b457eccacac9e5b2ddd97d5071fb6d668307c57cbf4e3b5278e06e536/pillow-12.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:65b80c1ee7e14a87d6a068dd3b0aea268ffcabfe0498d38661b00c5b4b22e74c", size = 2452612, upload-time = "2026-01-02T09:11:29.309Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/c7/2530a4aa28248623e9d7f27316b42e27c32ec410f695929696f2e0e4a778/pillow-12.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7b5dd7cbae20285cdb597b10eb5a2c13aa9de6cde9bb64a3c1317427b1db1ae1", size = 4062543, upload-time = "2026-01-02T09:11:31.566Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/1f/40b8eae823dc1519b87d53c30ed9ef085506b05281d313031755c1705f73/pillow-12.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:29a4cef9cb672363926f0470afc516dbf7305a14d8c54f7abbb5c199cd8f8179", size = 4138373, upload-time = "2026-01-02T09:11:33.367Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/77/6fa60634cf06e52139fd0e89e5bbf055e8166c691c42fb162818b7fda31d/pillow-12.1.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:681088909d7e8fa9e31b9799aaa59ba5234c58e5e4f1951b4c4d1082a2e980e0", size = 3601241, upload-time = "2026-01-02T09:11:35.011Z" },
+ { url = "https://files.pythonhosted.org/packages/4f/bf/28ab865de622e14b747f0cd7877510848252d950e43002e224fb1c9ababf/pillow-12.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:983976c2ab753166dc66d36af6e8ec15bb511e4a25856e2227e5f7e00a160587", size = 5262410, upload-time = "2026-01-02T09:11:36.682Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/34/583420a1b55e715937a85bd48c5c0991598247a1fd2eb5423188e765ea02/pillow-12.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:db44d5c160a90df2d24a24760bbd37607d53da0b34fb546c4c232af7192298ac", size = 4657312, upload-time = "2026-01-02T09:11:38.535Z" },
+ { url = "https://files.pythonhosted.org/packages/1d/fd/f5a0896839762885b3376ff04878f86ab2b097c2f9a9cdccf4eda8ba8dc0/pillow-12.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6b7a9d1db5dad90e2991645874f708e87d9a3c370c243c2d7684d28f7e133e6b", size = 6232605, upload-time = "2026-01-02T09:11:40.602Z" },
+ { url = "https://files.pythonhosted.org/packages/98/aa/938a09d127ac1e70e6ed467bd03834350b33ef646b31edb7452d5de43792/pillow-12.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6258f3260986990ba2fa8a874f8b6e808cf5abb51a94015ca3dc3c68aa4f30ea", size = 8041617, upload-time = "2026-01-02T09:11:42.721Z" },
+ { url = "https://files.pythonhosted.org/packages/17/e8/538b24cb426ac0186e03f80f78bc8dc7246c667f58b540bdd57c71c9f79d/pillow-12.1.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e115c15e3bc727b1ca3e641a909f77f8ca72a64fff150f666fcc85e57701c26c", size = 6346509, upload-time = "2026-01-02T09:11:44.955Z" },
+ { url = "https://files.pythonhosted.org/packages/01/9a/632e58ec89a32738cabfd9ec418f0e9898a2b4719afc581f07c04a05e3c9/pillow-12.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6741e6f3074a35e47c77b23a4e4f2d90db3ed905cb1c5e6e0d49bff2045632bc", size = 7038117, upload-time = "2026-01-02T09:11:46.736Z" },
+ { url = "https://files.pythonhosted.org/packages/c7/a2/d40308cf86eada842ca1f3ffa45d0ca0df7e4ab33c83f81e73f5eaed136d/pillow-12.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:935b9d1aed48fcfb3f838caac506f38e29621b44ccc4f8a64d575cb1b2a88644", size = 6460151, upload-time = "2026-01-02T09:11:48.625Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/88/f5b058ad6453a085c5266660a1417bdad590199da1b32fb4efcff9d33b05/pillow-12.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5fee4c04aad8932da9f8f710af2c1a15a83582cfb884152a9caa79d4efcdbf9c", size = 7164534, upload-time = "2026-01-02T09:11:50.445Z" },
+ { url = "https://files.pythonhosted.org/packages/19/ce/c17334caea1db789163b5d855a5735e47995b0b5dc8745e9a3605d5f24c0/pillow-12.1.0-cp313-cp313-win32.whl", hash = "sha256:a786bf667724d84aa29b5db1c61b7bfdde380202aaca12c3461afd6b71743171", size = 6332551, upload-time = "2026-01-02T09:11:52.234Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/07/74a9d941fa45c90a0d9465098fe1ec85de3e2afbdc15cc4766622d516056/pillow-12.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:461f9dfdafa394c59cd6d818bdfdbab4028b83b02caadaff0ffd433faf4c9a7a", size = 7040087, upload-time = "2026-01-02T09:11:54.822Z" },
+ { url = "https://files.pythonhosted.org/packages/88/09/c99950c075a0e9053d8e880595926302575bc742b1b47fe1bbcc8d388d50/pillow-12.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:9212d6b86917a2300669511ed094a9406888362e085f2431a7da985a6b124f45", size = 2452470, upload-time = "2026-01-02T09:11:56.522Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/ba/970b7d85ba01f348dee4d65412476321d40ee04dcb51cd3735b9dc94eb58/pillow-12.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:00162e9ca6d22b7c3ee8e61faa3c3253cd19b6a37f126cad04f2f88b306f557d", size = 5264816, upload-time = "2026-01-02T09:11:58.227Z" },
+ { url = "https://files.pythonhosted.org/packages/10/60/650f2fb55fdba7a510d836202aa52f0baac633e50ab1cf18415d332188fb/pillow-12.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7d6daa89a00b58c37cb1747ec9fb7ac3bc5ffd5949f5888657dfddde6d1312e0", size = 4660472, upload-time = "2026-01-02T09:12:00.798Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/c0/5273a99478956a099d533c4f46cbaa19fd69d606624f4334b85e50987a08/pillow-12.1.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e2479c7f02f9d505682dc47df8c0ea1fc5e264c4d1629a5d63fe3e2334b89554", size = 6268974, upload-time = "2026-01-02T09:12:02.572Z" },
+ { url = "https://files.pythonhosted.org/packages/b4/26/0bf714bc2e73d5267887d47931d53c4ceeceea6978148ed2ab2a4e6463c4/pillow-12.1.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f188d580bd870cda1e15183790d1cc2fa78f666e76077d103edf048eed9c356e", size = 8073070, upload-time = "2026-01-02T09:12:04.75Z" },
+ { url = "https://files.pythonhosted.org/packages/43/cf/1ea826200de111a9d65724c54f927f3111dc5ae297f294b370a670c17786/pillow-12.1.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0fde7ec5538ab5095cc02df38ee99b0443ff0e1c847a045554cf5f9af1f4aa82", size = 6380176, upload-time = "2026-01-02T09:12:06.626Z" },
+ { url = "https://files.pythonhosted.org/packages/03/e0/7938dd2b2013373fd85d96e0f38d62b7a5a262af21ac274250c7ca7847c9/pillow-12.1.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ed07dca4a8464bada6139ab38f5382f83e5f111698caf3191cb8dbf27d908b4", size = 7067061, upload-time = "2026-01-02T09:12:08.624Z" },
+ { url = "https://files.pythonhosted.org/packages/86/ad/a2aa97d37272a929a98437a8c0ac37b3cf012f4f8721e1bd5154699b2518/pillow-12.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f45bd71d1fa5e5749587613037b172e0b3b23159d1c00ef2fc920da6f470e6f0", size = 6491824, upload-time = "2026-01-02T09:12:10.488Z" },
+ { url = "https://files.pythonhosted.org/packages/a4/44/80e46611b288d51b115826f136fb3465653c28f491068a72d3da49b54cd4/pillow-12.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:277518bf4fe74aa91489e1b20577473b19ee70fb97c374aa50830b279f25841b", size = 7190911, upload-time = "2026-01-02T09:12:12.772Z" },
+ { url = "https://files.pythonhosted.org/packages/86/77/eacc62356b4cf81abe99ff9dbc7402750044aed02cfd6a503f7c6fc11f3e/pillow-12.1.0-cp313-cp313t-win32.whl", hash = "sha256:7315f9137087c4e0ee73a761b163fc9aa3b19f5f606a7fc08d83fd3e4379af65", size = 6336445, upload-time = "2026-01-02T09:12:14.775Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/3c/57d81d0b74d218706dafccb87a87ea44262c43eef98eb3b164fd000e0491/pillow-12.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:0ddedfaa8b5f0b4ffbc2fa87b556dc59f6bb4ecb14a53b33f9189713ae8053c0", size = 7045354, upload-time = "2026-01-02T09:12:16.599Z" },
+ { url = "https://files.pythonhosted.org/packages/ac/82/8b9b97bba2e3576a340f93b044a3a3a09841170ab4c1eb0d5c93469fd32f/pillow-12.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:80941e6d573197a0c28f394753de529bb436b1ca990ed6e765cf42426abc39f8", size = 2454547, upload-time = "2026-01-02T09:12:18.704Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/87/bdf971d8bbcf80a348cc3bacfcb239f5882100fe80534b0ce67a784181d8/pillow-12.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:5cb7bc1966d031aec37ddb9dcf15c2da5b2e9f7cc3ca7c54473a20a927e1eb91", size = 4062533, upload-time = "2026-01-02T09:12:20.791Z" },
+ { url = "https://files.pythonhosted.org/packages/ff/4f/5eb37a681c68d605eb7034c004875c81f86ec9ef51f5be4a63eadd58859a/pillow-12.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:97e9993d5ed946aba26baf9c1e8cf18adbab584b99f452ee72f7ee8acb882796", size = 4138546, upload-time = "2026-01-02T09:12:23.664Z" },
+ { url = "https://files.pythonhosted.org/packages/11/6d/19a95acb2edbace40dcd582d077b991646b7083c41b98da4ed7555b59733/pillow-12.1.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:414b9a78e14ffeb98128863314e62c3f24b8a86081066625700b7985b3f529bd", size = 3601163, upload-time = "2026-01-02T09:12:26.338Z" },
+ { url = "https://files.pythonhosted.org/packages/fc/36/2b8138e51cb42e4cc39c3297713455548be855a50558c3ac2beebdc251dd/pillow-12.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e6bdb408f7c9dd2a5ff2b14a3b0bb6d4deb29fb9961e6eb3ae2031ae9a5cec13", size = 5266086, upload-time = "2026-01-02T09:12:28.782Z" },
+ { url = "https://files.pythonhosted.org/packages/53/4b/649056e4d22e1caa90816bf99cef0884aed607ed38075bd75f091a607a38/pillow-12.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3413c2ae377550f5487991d444428f1a8ae92784aac79caa8b1e3b89b175f77e", size = 4657344, upload-time = "2026-01-02T09:12:31.117Z" },
+ { url = "https://files.pythonhosted.org/packages/6c/6b/c5742cea0f1ade0cd61485dc3d81f05261fc2276f537fbdc00802de56779/pillow-12.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e5dcbe95016e88437ecf33544ba5db21ef1b8dd6e1b434a2cb2a3d605299e643", size = 6232114, upload-time = "2026-01-02T09:12:32.936Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/8f/9f521268ce22d63991601aafd3d48d5ff7280a246a1ef62d626d67b44064/pillow-12.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d0a7735df32ccbcc98b98a1ac785cc4b19b580be1bdf0aeb5c03223220ea09d5", size = 8042708, upload-time = "2026-01-02T09:12:34.78Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/eb/257f38542893f021502a1bbe0c2e883c90b5cff26cc33b1584a841a06d30/pillow-12.1.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c27407a2d1b96774cbc4a7594129cc027339fd800cd081e44497722ea1179de", size = 6347762, upload-time = "2026-01-02T09:12:36.748Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/5a/8ba375025701c09b309e8d5163c5a4ce0102fa86bbf8800eb0d7ac87bc51/pillow-12.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15c794d74303828eaa957ff8070846d0efe8c630901a1c753fdc63850e19ecd9", size = 7039265, upload-time = "2026-01-02T09:12:39.082Z" },
+ { url = "https://files.pythonhosted.org/packages/cf/dc/cf5e4cdb3db533f539e88a7bbf9f190c64ab8a08a9bc7a4ccf55067872e4/pillow-12.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c990547452ee2800d8506c4150280757f88532f3de2a58e3022e9b179107862a", size = 6462341, upload-time = "2026-01-02T09:12:40.946Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/47/0291a25ac9550677e22eda48510cfc4fa4b2ef0396448b7fbdc0a6946309/pillow-12.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b63e13dd27da389ed9475b3d28510f0f954bca0041e8e551b2a4eb1eab56a39a", size = 7165395, upload-time = "2026-01-02T09:12:42.706Z" },
+ { url = "https://files.pythonhosted.org/packages/4f/4c/e005a59393ec4d9416be06e6b45820403bb946a778e39ecec62f5b2b991e/pillow-12.1.0-cp314-cp314-win32.whl", hash = "sha256:1a949604f73eb07a8adab38c4fe50791f9919344398bdc8ac6b307f755fc7030", size = 6431413, upload-time = "2026-01-02T09:12:44.944Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/af/f23697f587ac5f9095d67e31b81c95c0249cd461a9798a061ed6709b09b5/pillow-12.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:4f9f6a650743f0ddee5593ac9e954ba1bdbc5e150bc066586d4f26127853ab94", size = 7176779, upload-time = "2026-01-02T09:12:46.727Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/36/6a51abf8599232f3e9afbd16d52829376a68909fe14efe29084445db4b73/pillow-12.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:808b99604f7873c800c4840f55ff389936ef1948e4e87645eaf3fccbc8477ac4", size = 2543105, upload-time = "2026-01-02T09:12:49.243Z" },
+ { url = "https://files.pythonhosted.org/packages/82/54/2e1dd20c8749ff225080d6ba465a0cab4387f5db0d1c5fb1439e2d99923f/pillow-12.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:bc11908616c8a283cf7d664f77411a5ed2a02009b0097ff8abbba5e79128ccf2", size = 5268571, upload-time = "2026-01-02T09:12:51.11Z" },
+ { url = "https://files.pythonhosted.org/packages/57/61/571163a5ef86ec0cf30d265ac2a70ae6fc9e28413d1dc94fa37fae6bda89/pillow-12.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:896866d2d436563fa2a43a9d72f417874f16b5545955c54a64941e87c1376c61", size = 4660426, upload-time = "2026-01-02T09:12:52.865Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/e1/53ee5163f794aef1bf84243f755ee6897a92c708505350dd1923f4afec48/pillow-12.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8e178e3e99d3c0ea8fc64b88447f7cac8ccf058af422a6cedc690d0eadd98c51", size = 6269908, upload-time = "2026-01-02T09:12:54.884Z" },
+ { url = "https://files.pythonhosted.org/packages/bc/0b/b4b4106ff0ee1afa1dc599fde6ab230417f800279745124f6c50bcffed8e/pillow-12.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:079af2fb0c599c2ec144ba2c02766d1b55498e373b3ac64687e43849fbbef5bc", size = 8074733, upload-time = "2026-01-02T09:12:56.802Z" },
+ { url = "https://files.pythonhosted.org/packages/19/9f/80b411cbac4a732439e629a26ad3ef11907a8c7fc5377b7602f04f6fe4e7/pillow-12.1.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdec5e43377761c5dbca620efb69a77f6855c5a379e32ac5b158f54c84212b14", size = 6381431, upload-time = "2026-01-02T09:12:58.823Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/b7/d65c45db463b66ecb6abc17c6ba6917a911202a07662247e1355ce1789e7/pillow-12.1.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:565c986f4b45c020f5421a4cea13ef294dde9509a8577f29b2fc5edc7587fff8", size = 7068529, upload-time = "2026-01-02T09:13:00.885Z" },
+ { url = "https://files.pythonhosted.org/packages/50/96/dfd4cd726b4a45ae6e3c669fc9e49deb2241312605d33aba50499e9d9bd1/pillow-12.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:43aca0a55ce1eefc0aefa6253661cb54571857b1a7b2964bd8a1e3ef4b729924", size = 6492981, upload-time = "2026-01-02T09:13:03.314Z" },
+ { url = "https://files.pythonhosted.org/packages/4d/1c/b5dc52cf713ae46033359c5ca920444f18a6359ce1020dd3e9c553ea5bc6/pillow-12.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0deedf2ea233722476b3a81e8cdfbad786f7adbed5d848469fa59fe52396e4ef", size = 7191878, upload-time = "2026-01-02T09:13:05.276Z" },
+ { url = "https://files.pythonhosted.org/packages/53/26/c4188248bd5edaf543864fe4834aebe9c9cb4968b6f573ce014cc42d0720/pillow-12.1.0-cp314-cp314t-win32.whl", hash = "sha256:b17fbdbe01c196e7e159aacb889e091f28e61020a8abeac07b68079b6e626988", size = 6438703, upload-time = "2026-01-02T09:13:07.491Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/0e/69ed296de8ea05cb03ee139cee600f424ca166e632567b2d66727f08c7ed/pillow-12.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27b9baecb428899db6c0de572d6d305cfaf38ca1596b5c0542a5182e3e74e8c6", size = 7182927, upload-time = "2026-01-02T09:13:09.841Z" },
+ { url = "https://files.pythonhosted.org/packages/fc/f5/68334c015eed9b5cff77814258717dec591ded209ab5b6fb70e2ae873d1d/pillow-12.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:f61333d817698bdcdd0f9d7793e365ac3d2a21c1f1eb02b32ad6aefb8d8ea831", size = 2545104, upload-time = "2026-01-02T09:13:12.068Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/bc/224b1d98cffd7164b14707c91aac83c07b047fbd8f58eba4066a3e53746a/pillow-12.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ca94b6aac0d7af2a10ba08c0f888b3d5114439b6b3ef39968378723622fed377", size = 5228605, upload-time = "2026-01-02T09:13:14.084Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/ca/49ca7769c4550107de049ed85208240ba0f330b3f2e316f24534795702ce/pillow-12.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:351889afef0f485b84078ea40fe33727a0492b9af3904661b0abbafee0355b72", size = 4622245, upload-time = "2026-01-02T09:13:15.964Z" },
+ { url = "https://files.pythonhosted.org/packages/73/48/fac807ce82e5955bcc2718642b94b1bd22a82a6d452aea31cbb678cddf12/pillow-12.1.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bb0984b30e973f7e2884362b7d23d0a348c7143ee559f38ef3eaab640144204c", size = 5247593, upload-time = "2026-01-02T09:13:17.913Z" },
+ { url = "https://files.pythonhosted.org/packages/d2/95/3e0742fe358c4664aed4fd05d5f5373dcdad0b27af52aa0972568541e3f4/pillow-12.1.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:84cabc7095dd535ca934d57e9ce2a72ffd216e435a84acb06b2277b1de2689bd", size = 6989008, upload-time = "2026-01-02T09:13:20.083Z" },
+ { url = "https://files.pythonhosted.org/packages/5a/74/fe2ac378e4e202e56d50540d92e1ef4ff34ed687f3c60f6a121bcf99437e/pillow-12.1.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53d8b764726d3af1a138dd353116f774e3862ec7e3794e0c8781e30db0f35dfc", size = 5313824, upload-time = "2026-01-02T09:13:22.405Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/77/2a60dee1adee4e2655ac328dd05c02a955c1cd683b9f1b82ec3feb44727c/pillow-12.1.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5da841d81b1a05ef940a8567da92decaa15bc4d7dedb540a8c219ad83d91808a", size = 5963278, upload-time = "2026-01-02T09:13:24.706Z" },
+ { url = "https://files.pythonhosted.org/packages/2d/71/64e9b1c7f04ae0027f788a248e6297d7fcc29571371fe7d45495a78172c0/pillow-12.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:75af0b4c229ac519b155028fa1be632d812a519abba9b46b20e50c6caa184f19", size = 7029809, upload-time = "2026-01-02T09:13:26.541Z" },
]
[[package]]
@@ -1560,20 +1554,20 @@ wheels = [
[[package]]
name = "pyasn1"
-version = "0.6.1"
+version = "0.6.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/ba/e9/01f1a64245b89f039897cb0130016d79f77d52669aae6ee7b159a6c4c018/pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034", size = 145322, upload-time = "2024-09-10T22:41:42.55Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/fe/b6/6e630dff89739fcd427e3f72b3d905ce0acb85a45d4ec3e2678718a3487f/pyasn1-0.6.2.tar.gz", hash = "sha256:9b59a2b25ba7e4f8197db7686c09fb33e658b98339fadb826e9512629017833b", size = 146586, upload-time = "2026-01-16T18:04:18.534Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629", size = 83135, upload-time = "2024-09-11T16:00:36.122Z" },
+ { url = "https://files.pythonhosted.org/packages/44/b5/a96872e5184f354da9c84ae119971a0a4c221fe9b27a4d94bd43f2596727/pyasn1-0.6.2-py3-none-any.whl", hash = "sha256:1eb26d860996a18e9b6ed05e7aae0e9fc21619fcee6af91cca9bad4fbea224bf", size = 83371, upload-time = "2026-01-16T18:04:17.174Z" },
]
[[package]]
name = "pycparser"
-version = "2.23"
+version = "3.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" },
]
[[package]]
@@ -1770,7 +1764,7 @@ wheels = [
[package.optional-dependencies]
crypto = [
- { name = "cryptography", marker = "(platform_machine != 'aarch64' and sys_platform == 'linux') or (sys_platform != 'darwin' and sys_platform != 'linux')" },
+ { name = "cryptography" },
]
[[package]]
@@ -1800,11 +1794,11 @@ wheels = [
[[package]]
name = "pyparsing"
-version = "3.2.5"
+version = "3.3.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/f2/a5/181488fc2b9d093e3972d2a472855aae8a03f000592dbfce716a512b3359/pyparsing-3.2.5.tar.gz", hash = "sha256:2df8d5b7b2802ef88e8d016a2eb9c7aeaa923529cd251ed0fe4608275d4105b6", size = 1099274, upload-time = "2025-09-21T04:11:06.277Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl", hash = "sha256:e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e", size = 113890, upload-time = "2025-09-21T04:11:04.117Z" },
+ { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" },
]
[[package]]
@@ -1921,36 +1915,36 @@ wheels = [
[[package]]
name = "rich"
-version = "14.2.0"
+version = "14.3.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "markdown-it-py" },
{ name = "pygments" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/fb/d2/8920e102050a0de7bfabeb4c4614a49248cf8d5d7a8d01885fbb24dc767a/rich-14.2.0.tar.gz", hash = "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4", size = 219990, upload-time = "2025-10-09T14:16:53.064Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/a1/84/4831f881aa6ff3c976f6d6809b58cdfa350593ffc0dc3c58f5f6586780fb/rich-14.3.1.tar.gz", hash = "sha256:b8c5f568a3a749f9290ec6bddedf835cec33696bfc1e48bcfecb276c7386e4b8", size = 230125, upload-time = "2026-01-24T21:40:44.847Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd", size = 243393, upload-time = "2025-10-09T14:16:51.245Z" },
+ { url = "https://files.pythonhosted.org/packages/87/2a/a1810c8627b9ec8c57ec5ec325d306701ae7be50235e8fd81266e002a3cc/rich-14.3.1-py3-none-any.whl", hash = "sha256:da750b1aebbff0b372557426fb3f35ba56de8ef954b3190315eb64076d6fb54e", size = 309952, upload-time = "2026-01-24T21:40:42.969Z" },
]
[[package]]
-name = "roman-numerals-py"
-version = "3.1.0"
+name = "roman-numerals"
+version = "4.1.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/30/76/48fd56d17c5bdbdf65609abbc67288728a98ed4c02919428d4f52d23b24b/roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d", size = 9017, upload-time = "2025-02-22T07:34:54.333Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/ae/f9/41dc953bbeb056c17d5f7a519f50fdf010bd0553be2d630bc69d1e022703/roman_numerals-4.1.0.tar.gz", hash = "sha256:1af8b147eb1405d5839e78aeb93131690495fe9da5c91856cb33ad55a7f1e5b2", size = 9077, upload-time = "2025-12-17T18:25:34.381Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/53/97/d2cbbaa10c9b826af0e10fdf836e1bf344d9f0abb873ebc34d1f49642d3f/roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c", size = 7742, upload-time = "2025-02-22T07:34:52.422Z" },
+ { url = "https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl", hash = "sha256:647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7", size = 7676, upload-time = "2025-12-17T18:25:33.098Z" },
]
[[package]]
name = "ruamel-yaml"
-version = "0.18.16"
+version = "0.18.17"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "ruamel-yaml-clib", marker = "python_full_version < '3.14' and platform_python_implementation == 'CPython'" },
+ { name = "ruamel-yaml-clib", marker = "python_full_version < '3.15' and platform_python_implementation == 'CPython'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/9f/c7/ee630b29e04a672ecfc9b63227c87fd7a37eb67c1bf30fe95376437f897c/ruamel.yaml-0.18.16.tar.gz", hash = "sha256:a6e587512f3c998b2225d68aa1f35111c29fad14aed561a26e73fab729ec5e5a", size = 147269, upload-time = "2025-10-22T17:54:02.346Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/3a/2b/7a1f1ebcd6b3f14febdc003e658778d81e76b40df2267904ee6b13f0c5c6/ruamel_yaml-0.18.17.tar.gz", hash = "sha256:9091cd6e2d93a3a4b157ddb8fabf348c3de7f1fb1381346d985b6b247dcd8d3c", size = 149602, upload-time = "2025-12-17T20:02:55.757Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl", hash = "sha256:048f26d64245bae57a4f9ef6feb5b552a386830ef7a826f235ffb804c59efbba", size = 119858, upload-time = "2025-10-22T17:53:59.012Z" },
+ { url = "https://files.pythonhosted.org/packages/af/fe/b6045c782f1fd1ae317d2a6ca1884857ce5c20f59befe6ab25a8603c43a7/ruamel_yaml-0.18.17-py3-none-any.whl", hash = "sha256:9c8ba9eb3e793efdf924b60d521820869d5bf0cb9c6f1b82d82de8295e290b9d", size = 121594, upload-time = "2025-12-17T20:02:07.657Z" },
]
[[package]]
@@ -2003,99 +1997,99 @@ wheels = [
[[package]]
name = "ruff"
-version = "0.14.9"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/f6/1b/ab712a9d5044435be8e9a2beb17cbfa4c241aa9b5e4413febac2a8b79ef2/ruff-0.14.9.tar.gz", hash = "sha256:35f85b25dd586381c0cc053f48826109384c81c00ad7ef1bd977bfcc28119d5b", size = 5809165, upload-time = "2025-12-11T21:39:47.381Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/b8/1c/d1b1bba22cffec02351c78ab9ed4f7d7391876e12720298448b29b7229c1/ruff-0.14.9-py3-none-linux_armv6l.whl", hash = "sha256:f1ec5de1ce150ca6e43691f4a9ef5c04574ad9ca35c8b3b0e18877314aba7e75", size = 13576541, upload-time = "2025-12-11T21:39:14.806Z" },
- { url = "https://files.pythonhosted.org/packages/94/ab/ffe580e6ea1fca67f6337b0af59fc7e683344a43642d2d55d251ff83ceae/ruff-0.14.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ed9d7417a299fc6030b4f26333bf1117ed82a61ea91238558c0268c14e00d0c2", size = 13779363, upload-time = "2025-12-11T21:39:20.29Z" },
- { url = "https://files.pythonhosted.org/packages/7d/f8/2be49047f929d6965401855461e697ab185e1a6a683d914c5c19c7962d9e/ruff-0.14.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d5dc3473c3f0e4a1008d0ef1d75cee24a48e254c8bed3a7afdd2b4392657ed2c", size = 12925292, upload-time = "2025-12-11T21:39:38.757Z" },
- { url = "https://files.pythonhosted.org/packages/9e/e9/08840ff5127916bb989c86f18924fd568938b06f58b60e206176f327c0fe/ruff-0.14.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84bf7c698fc8f3cb8278830fb6b5a47f9bcc1ed8cb4f689b9dd02698fa840697", size = 13362894, upload-time = "2025-12-11T21:39:02.524Z" },
- { url = "https://files.pythonhosted.org/packages/31/1c/5b4e8e7750613ef43390bb58658eaf1d862c0cc3352d139cd718a2cea164/ruff-0.14.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa733093d1f9d88a5d98988d8834ef5d6f9828d03743bf5e338bf980a19fce27", size = 13311482, upload-time = "2025-12-11T21:39:17.51Z" },
- { url = "https://files.pythonhosted.org/packages/5b/3a/459dce7a8cb35ba1ea3e9c88f19077667a7977234f3b5ab197fad240b404/ruff-0.14.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a1cfb04eda979b20c8c19550c8b5f498df64ff8da151283311ce3199e8b3648", size = 14016100, upload-time = "2025-12-11T21:39:41.948Z" },
- { url = "https://files.pythonhosted.org/packages/a6/31/f064f4ec32524f9956a0890fc6a944e5cf06c63c554e39957d208c0ffc45/ruff-0.14.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1e5cb521e5ccf0008bd74d5595a4580313844a42b9103b7388eca5a12c970743", size = 15477729, upload-time = "2025-12-11T21:39:23.279Z" },
- { url = "https://files.pythonhosted.org/packages/7a/6d/f364252aad36ccd443494bc5f02e41bf677f964b58902a17c0b16c53d890/ruff-0.14.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd429a8926be6bba4befa8cdcf3f4dd2591c413ea5066b1e99155ed245ae42bb", size = 15122386, upload-time = "2025-12-11T21:39:33.125Z" },
- { url = "https://files.pythonhosted.org/packages/20/02/e848787912d16209aba2799a4d5a1775660b6a3d0ab3944a4ccc13e64a02/ruff-0.14.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab208c1b7a492e37caeaf290b1378148f75e13c2225af5d44628b95fd7834273", size = 14497124, upload-time = "2025-12-11T21:38:59.33Z" },
- { url = "https://files.pythonhosted.org/packages/f3/51/0489a6a5595b7760b5dbac0dd82852b510326e7d88d51dbffcd2e07e3ff3/ruff-0.14.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72034534e5b11e8a593f517b2f2f2b273eb68a30978c6a2d40473ad0aaa4cb4a", size = 14195343, upload-time = "2025-12-11T21:39:44.866Z" },
- { url = "https://files.pythonhosted.org/packages/f6/53/3bb8d2fa73e4c2f80acc65213ee0830fa0c49c6479313f7a68a00f39e208/ruff-0.14.9-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:712ff04f44663f1b90a1195f51525836e3413c8a773574a7b7775554269c30ed", size = 14346425, upload-time = "2025-12-11T21:39:05.927Z" },
- { url = "https://files.pythonhosted.org/packages/ad/04/bdb1d0ab876372da3e983896481760867fc84f969c5c09d428e8f01b557f/ruff-0.14.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a111fee1db6f1d5d5810245295527cda1d367c5aa8f42e0fca9a78ede9b4498b", size = 13258768, upload-time = "2025-12-11T21:39:08.691Z" },
- { url = "https://files.pythonhosted.org/packages/40/d9/8bf8e1e41a311afd2abc8ad12be1b6c6c8b925506d9069b67bb5e9a04af3/ruff-0.14.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8769efc71558fecc25eb295ddec7d1030d41a51e9dcf127cbd63ec517f22d567", size = 13326939, upload-time = "2025-12-11T21:39:53.842Z" },
- { url = "https://files.pythonhosted.org/packages/f4/56/a213fa9edb6dd849f1cfbc236206ead10913693c72a67fb7ddc1833bf95d/ruff-0.14.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:347e3bf16197e8a2de17940cd75fd6491e25c0aa7edf7d61aa03f146a1aa885a", size = 13578888, upload-time = "2025-12-11T21:39:35.988Z" },
- { url = "https://files.pythonhosted.org/packages/33/09/6a4a67ffa4abae6bf44c972a4521337ffce9cbc7808faadede754ef7a79c/ruff-0.14.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7715d14e5bccf5b660f54516558aa94781d3eb0838f8e706fb60e3ff6eff03a8", size = 14314473, upload-time = "2025-12-11T21:39:50.78Z" },
- { url = "https://files.pythonhosted.org/packages/12/0d/15cc82da5d83f27a3c6b04f3a232d61bc8c50d38a6cd8da79228e5f8b8d6/ruff-0.14.9-py3-none-win32.whl", hash = "sha256:df0937f30aaabe83da172adaf8937003ff28172f59ca9f17883b4213783df197", size = 13202651, upload-time = "2025-12-11T21:39:26.628Z" },
- { url = "https://files.pythonhosted.org/packages/32/f7/c78b060388eefe0304d9d42e68fab8cffd049128ec466456cef9b8d4f06f/ruff-0.14.9-py3-none-win_amd64.whl", hash = "sha256:c0b53a10e61df15a42ed711ec0bda0c582039cf6c754c49c020084c55b5b0bc2", size = 14702079, upload-time = "2025-12-11T21:39:11.954Z" },
- { url = "https://files.pythonhosted.org/packages/26/09/7a9520315decd2334afa65ed258fed438f070e31f05a2e43dd480a5e5911/ruff-0.14.9-py3-none-win_arm64.whl", hash = "sha256:8e821c366517a074046d92f0e9213ed1c13dbc5b37a7fc20b07f79b64d62cc84", size = 13744730, upload-time = "2025-12-11T21:39:29.659Z" },
+version = "0.14.14"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/2e/06/f71e3a86b2df0dfa2d2f72195941cd09b44f87711cb7fa5193732cb9a5fc/ruff-0.14.14.tar.gz", hash = "sha256:2d0f819c9a90205f3a867dbbd0be083bee9912e170fd7d9704cc8ae45824896b", size = 4515732, upload-time = "2026-01-22T22:30:17.527Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d2/89/20a12e97bc6b9f9f68343952da08a8099c57237aef953a56b82711d55edd/ruff-0.14.14-py3-none-linux_armv6l.whl", hash = "sha256:7cfe36b56e8489dee8fbc777c61959f60ec0f1f11817e8f2415f429552846aed", size = 10467650, upload-time = "2026-01-22T22:30:08.578Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/b1/c5de3fd2d5a831fcae21beda5e3589c0ba67eec8202e992388e4b17a6040/ruff-0.14.14-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6006a0082336e7920b9573ef8a7f52eec837add1265cc74e04ea8a4368cd704c", size = 10883245, upload-time = "2026-01-22T22:30:04.155Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/7c/3c1db59a10e7490f8f6f8559d1db8636cbb13dccebf18686f4e3c9d7c772/ruff-0.14.14-py3-none-macosx_11_0_arm64.whl", hash = "sha256:026c1d25996818f0bf498636686199d9bd0d9d6341c9c2c3b62e2a0198b758de", size = 10231273, upload-time = "2026-01-22T22:30:34.642Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/6e/5e0e0d9674be0f8581d1f5e0f0a04761203affce3232c1a1189d0e3b4dad/ruff-0.14.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f666445819d31210b71e0a6d1c01e24447a20b85458eea25a25fe8142210ae0e", size = 10585753, upload-time = "2026-01-22T22:30:31.781Z" },
+ { url = "https://files.pythonhosted.org/packages/23/09/754ab09f46ff1884d422dc26d59ba18b4e5d355be147721bb2518aa2a014/ruff-0.14.14-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c0f18b922c6d2ff9a5e6c3ee16259adc513ca775bcf82c67ebab7cbd9da5bc8", size = 10286052, upload-time = "2026-01-22T22:30:24.827Z" },
+ { url = "https://files.pythonhosted.org/packages/c8/cc/e71f88dd2a12afb5f50733851729d6b571a7c3a35bfdb16c3035132675a0/ruff-0.14.14-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1629e67489c2dea43e8658c3dba659edbfd87361624b4040d1df04c9740ae906", size = 11043637, upload-time = "2026-01-22T22:30:13.239Z" },
+ { url = "https://files.pythonhosted.org/packages/67/b2/397245026352494497dac935d7f00f1468c03a23a0c5db6ad8fc49ca3fb2/ruff-0.14.14-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:27493a2131ea0f899057d49d303e4292b2cae2bb57253c1ed1f256fbcd1da480", size = 12194761, upload-time = "2026-01-22T22:30:22.542Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/06/06ef271459f778323112c51b7587ce85230785cd64e91772034ddb88f200/ruff-0.14.14-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01ff589aab3f5b539e35db38425da31a57521efd1e4ad1ae08fc34dbe30bd7df", size = 12005701, upload-time = "2026-01-22T22:30:20.499Z" },
+ { url = "https://files.pythonhosted.org/packages/41/d6/99364514541cf811ccc5ac44362f88df66373e9fec1b9d1c4cc830593fe7/ruff-0.14.14-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cc12d74eef0f29f51775f5b755913eb523546b88e2d733e1d701fe65144e89b", size = 11282455, upload-time = "2026-01-22T22:29:59.679Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/71/37daa46f89475f8582b7762ecd2722492df26421714a33e72ccc9a84d7a5/ruff-0.14.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb8481604b7a9e75eff53772496201690ce2687067e038b3cc31aaf16aa0b974", size = 11215882, upload-time = "2026-01-22T22:29:57.032Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/10/a31f86169ec91c0705e618443ee74ede0bdd94da0a57b28e72db68b2dbac/ruff-0.14.14-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:14649acb1cf7b5d2d283ebd2f58d56b75836ed8c6f329664fa91cdea19e76e66", size = 11180549, upload-time = "2026-01-22T22:30:27.175Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/1e/c723f20536b5163adf79bdd10c5f093414293cdf567eed9bdb7b83940f3f/ruff-0.14.14-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8058d2145566510790eab4e2fad186002e288dec5e0d343a92fe7b0bc1b3e13", size = 10543416, upload-time = "2026-01-22T22:30:01.964Z" },
+ { url = "https://files.pythonhosted.org/packages/3e/34/8a84cea7e42c2d94ba5bde1d7a4fae164d6318f13f933d92da6d7c2041ff/ruff-0.14.14-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e651e977a79e4c758eb807f0481d673a67ffe53cfa92209781dfa3a996cf8412", size = 10285491, upload-time = "2026-01-22T22:30:29.51Z" },
+ { url = "https://files.pythonhosted.org/packages/55/ef/b7c5ea0be82518906c978e365e56a77f8de7678c8bb6651ccfbdc178c29f/ruff-0.14.14-py3-none-musllinux_1_2_i686.whl", hash = "sha256:cc8b22da8d9d6fdd844a68ae937e2a0adf9b16514e9a97cc60355e2d4b219fc3", size = 10733525, upload-time = "2026-01-22T22:30:06.499Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/5b/aaf1dfbcc53a2811f6cc0a1759de24e4b03e02ba8762daabd9b6bd8c59e3/ruff-0.14.14-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:16bc890fb4cc9781bb05beb5ab4cd51be9e7cb376bf1dd3580512b24eb3fda2b", size = 11315626, upload-time = "2026-01-22T22:30:36.848Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/aa/9f89c719c467dfaf8ad799b9bae0df494513fb21d31a6059cb5870e57e74/ruff-0.14.14-py3-none-win32.whl", hash = "sha256:b530c191970b143375b6a68e6f743800b2b786bbcf03a7965b06c4bf04568167", size = 10502442, upload-time = "2026-01-22T22:30:38.93Z" },
+ { url = "https://files.pythonhosted.org/packages/87/44/90fa543014c45560cae1fffc63ea059fb3575ee6e1cb654562197e5d16fb/ruff-0.14.14-py3-none-win_amd64.whl", hash = "sha256:3dde1435e6b6fe5b66506c1dff67a421d0b7f6488d466f651c07f4cab3bf20fd", size = 11630486, upload-time = "2026-01-22T22:30:10.852Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/6a/40fee331a52339926a92e17ae748827270b288a35ef4a15c9c8f2ec54715/ruff-0.14.14-py3-none-win_arm64.whl", hash = "sha256:56e6981a98b13a32236a72a8da421d7839221fa308b223b9283312312e5ac76c", size = 10920448, upload-time = "2026-01-22T22:30:15.417Z" },
]
[[package]]
name = "scipy"
-version = "1.16.3"
+version = "1.17.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "numpy" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/0a/ca/d8ace4f98322d01abcd52d381134344bf7b431eba7ed8b42bdea5a3c2ac9/scipy-1.16.3.tar.gz", hash = "sha256:01e87659402762f43bd2fee13370553a17ada367d42e7487800bf2916535aecb", size = 30597883, upload-time = "2025-10-28T17:38:54.068Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/9b/5f/6f37d7439de1455ce9c5a556b8d1db0979f03a796c030bafdf08d35b7bf9/scipy-1.16.3-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:40be6cf99e68b6c4321e9f8782e7d5ff8265af28ef2cd56e9c9b2638fa08ad97", size = 36630881, upload-time = "2025-10-28T17:31:47.104Z" },
- { url = "https://files.pythonhosted.org/packages/7c/89/d70e9f628749b7e4db2aa4cd89735502ff3f08f7b9b27d2e799485987cd9/scipy-1.16.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:8be1ca9170fcb6223cc7c27f4305d680ded114a1567c0bd2bfcbf947d1b17511", size = 28941012, upload-time = "2025-10-28T17:31:53.411Z" },
- { url = "https://files.pythonhosted.org/packages/a8/a8/0e7a9a6872a923505dbdf6bb93451edcac120363131c19013044a1e7cb0c/scipy-1.16.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:bea0a62734d20d67608660f69dcda23e7f90fb4ca20974ab80b6ed40df87a005", size = 20931935, upload-time = "2025-10-28T17:31:57.361Z" },
- { url = "https://files.pythonhosted.org/packages/bd/c7/020fb72bd79ad798e4dbe53938543ecb96b3a9ac3fe274b7189e23e27353/scipy-1.16.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:2a207a6ce9c24f1951241f4693ede2d393f59c07abc159b2cb2be980820e01fb", size = 23534466, upload-time = "2025-10-28T17:32:01.875Z" },
- { url = "https://files.pythonhosted.org/packages/be/a0/668c4609ce6dbf2f948e167836ccaf897f95fb63fa231c87da7558a374cd/scipy-1.16.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:532fb5ad6a87e9e9cd9c959b106b73145a03f04c7d57ea3e6f6bb60b86ab0876", size = 33593618, upload-time = "2025-10-28T17:32:06.902Z" },
- { url = "https://files.pythonhosted.org/packages/ca/6e/8942461cf2636cdae083e3eb72622a7fbbfa5cf559c7d13ab250a5dbdc01/scipy-1.16.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0151a0749efeaaab78711c78422d413c583b8cdd2011a3c1d6c794938ee9fdb2", size = 35899798, upload-time = "2025-10-28T17:32:12.665Z" },
- { url = "https://files.pythonhosted.org/packages/79/e8/d0f33590364cdbd67f28ce79368b373889faa4ee959588beddf6daef9abe/scipy-1.16.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b7180967113560cca57418a7bc719e30366b47959dd845a93206fbed693c867e", size = 36226154, upload-time = "2025-10-28T17:32:17.961Z" },
- { url = "https://files.pythonhosted.org/packages/39/c1/1903de608c0c924a1749c590064e65810f8046e437aba6be365abc4f7557/scipy-1.16.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:deb3841c925eeddb6afc1e4e4a45e418d19ec7b87c5df177695224078e8ec733", size = 38878540, upload-time = "2025-10-28T17:32:23.907Z" },
- { url = "https://files.pythonhosted.org/packages/f1/d0/22ec7036ba0b0a35bccb7f25ab407382ed34af0b111475eb301c16f8a2e5/scipy-1.16.3-cp311-cp311-win_amd64.whl", hash = "sha256:53c3844d527213631e886621df5695d35e4f6a75f620dca412bcd292f6b87d78", size = 38722107, upload-time = "2025-10-28T17:32:29.921Z" },
- { url = "https://files.pythonhosted.org/packages/7b/60/8a00e5a524bb3bf8898db1650d350f50e6cffb9d7a491c561dc9826c7515/scipy-1.16.3-cp311-cp311-win_arm64.whl", hash = "sha256:9452781bd879b14b6f055b26643703551320aa8d79ae064a71df55c00286a184", size = 25506272, upload-time = "2025-10-28T17:32:34.577Z" },
- { url = "https://files.pythonhosted.org/packages/40/41/5bf55c3f386b1643812f3a5674edf74b26184378ef0f3e7c7a09a7e2ca7f/scipy-1.16.3-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:81fc5827606858cf71446a5e98715ba0e11f0dbc83d71c7409d05486592a45d6", size = 36659043, upload-time = "2025-10-28T17:32:40.285Z" },
- { url = "https://files.pythonhosted.org/packages/1e/0f/65582071948cfc45d43e9870bf7ca5f0e0684e165d7c9ef4e50d783073eb/scipy-1.16.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:c97176013d404c7346bf57874eaac5187d969293bf40497140b0a2b2b7482e07", size = 28898986, upload-time = "2025-10-28T17:32:45.325Z" },
- { url = "https://files.pythonhosted.org/packages/96/5e/36bf3f0ac298187d1ceadde9051177d6a4fe4d507e8f59067dc9dd39e650/scipy-1.16.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2b71d93c8a9936046866acebc915e2af2e292b883ed6e2cbe5c34beb094b82d9", size = 20889814, upload-time = "2025-10-28T17:32:49.277Z" },
- { url = "https://files.pythonhosted.org/packages/80/35/178d9d0c35394d5d5211bbff7ac4f2986c5488b59506fef9e1de13ea28d3/scipy-1.16.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3d4a07a8e785d80289dfe66b7c27d8634a773020742ec7187b85ccc4b0e7b686", size = 23565795, upload-time = "2025-10-28T17:32:53.337Z" },
- { url = "https://files.pythonhosted.org/packages/fa/46/d1146ff536d034d02f83c8afc3c4bab2eddb634624d6529a8512f3afc9da/scipy-1.16.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0553371015692a898e1aa858fed67a3576c34edefa6b7ebdb4e9dde49ce5c203", size = 33349476, upload-time = "2025-10-28T17:32:58.353Z" },
- { url = "https://files.pythonhosted.org/packages/79/2e/415119c9ab3e62249e18c2b082c07aff907a273741b3f8160414b0e9193c/scipy-1.16.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:72d1717fd3b5e6ec747327ce9bda32d5463f472c9dce9f54499e81fbd50245a1", size = 35676692, upload-time = "2025-10-28T17:33:03.88Z" },
- { url = "https://files.pythonhosted.org/packages/27/82/df26e44da78bf8d2aeaf7566082260cfa15955a5a6e96e6a29935b64132f/scipy-1.16.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1fb2472e72e24d1530debe6ae078db70fb1605350c88a3d14bc401d6306dbffe", size = 36019345, upload-time = "2025-10-28T17:33:09.773Z" },
- { url = "https://files.pythonhosted.org/packages/82/31/006cbb4b648ba379a95c87262c2855cd0d09453e500937f78b30f02fa1cd/scipy-1.16.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c5192722cffe15f9329a3948c4b1db789fbb1f05c97899187dcf009b283aea70", size = 38678975, upload-time = "2025-10-28T17:33:15.809Z" },
- { url = "https://files.pythonhosted.org/packages/c2/7f/acbd28c97e990b421af7d6d6cd416358c9c293fc958b8529e0bd5d2a2a19/scipy-1.16.3-cp312-cp312-win_amd64.whl", hash = "sha256:56edc65510d1331dae01ef9b658d428e33ed48b4f77b1d51caf479a0253f96dc", size = 38555926, upload-time = "2025-10-28T17:33:21.388Z" },
- { url = "https://files.pythonhosted.org/packages/ce/69/c5c7807fd007dad4f48e0a5f2153038dc96e8725d3345b9ee31b2b7bed46/scipy-1.16.3-cp312-cp312-win_arm64.whl", hash = "sha256:a8a26c78ef223d3e30920ef759e25625a0ecdd0d60e5a8818b7513c3e5384cf2", size = 25463014, upload-time = "2025-10-28T17:33:25.975Z" },
- { url = "https://files.pythonhosted.org/packages/72/f1/57e8327ab1508272029e27eeef34f2302ffc156b69e7e233e906c2a5c379/scipy-1.16.3-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:d2ec56337675e61b312179a1ad124f5f570c00f920cc75e1000025451b88241c", size = 36617856, upload-time = "2025-10-28T17:33:31.375Z" },
- { url = "https://files.pythonhosted.org/packages/44/13/7e63cfba8a7452eb756306aa2fd9b37a29a323b672b964b4fdeded9a3f21/scipy-1.16.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:16b8bc35a4cc24db80a0ec836a9286d0e31b2503cb2fd7ff7fb0e0374a97081d", size = 28874306, upload-time = "2025-10-28T17:33:36.516Z" },
- { url = "https://files.pythonhosted.org/packages/15/65/3a9400efd0228a176e6ec3454b1fa998fbbb5a8defa1672c3f65706987db/scipy-1.16.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:5803c5fadd29de0cf27fa08ccbfe7a9e5d741bf63e4ab1085437266f12460ff9", size = 20865371, upload-time = "2025-10-28T17:33:42.094Z" },
- { url = "https://files.pythonhosted.org/packages/33/d7/eda09adf009a9fb81827194d4dd02d2e4bc752cef16737cc4ef065234031/scipy-1.16.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:b81c27fc41954319a943d43b20e07c40bdcd3ff7cf013f4fb86286faefe546c4", size = 23524877, upload-time = "2025-10-28T17:33:48.483Z" },
- { url = "https://files.pythonhosted.org/packages/7d/6b/3f911e1ebc364cb81320223a3422aab7d26c9c7973109a9cd0f27c64c6c0/scipy-1.16.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0c3b4dd3d9b08dbce0f3440032c52e9e2ab9f96ade2d3943313dfe51a7056959", size = 33342103, upload-time = "2025-10-28T17:33:56.495Z" },
- { url = "https://files.pythonhosted.org/packages/21/f6/4bfb5695d8941e5c570a04d9fcd0d36bce7511b7d78e6e75c8f9791f82d0/scipy-1.16.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7dc1360c06535ea6116a2220f760ae572db9f661aba2d88074fe30ec2aa1ff88", size = 35697297, upload-time = "2025-10-28T17:34:04.722Z" },
- { url = "https://files.pythonhosted.org/packages/04/e1/6496dadbc80d8d896ff72511ecfe2316b50313bfc3ebf07a3f580f08bd8c/scipy-1.16.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:663b8d66a8748051c3ee9c96465fb417509315b99c71550fda2591d7dd634234", size = 36021756, upload-time = "2025-10-28T17:34:13.482Z" },
- { url = "https://files.pythonhosted.org/packages/fe/bd/a8c7799e0136b987bda3e1b23d155bcb31aec68a4a472554df5f0937eef7/scipy-1.16.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eab43fae33a0c39006a88096cd7b4f4ef545ea0447d250d5ac18202d40b6611d", size = 38696566, upload-time = "2025-10-28T17:34:22.384Z" },
- { url = "https://files.pythonhosted.org/packages/cd/01/1204382461fcbfeb05b6161b594f4007e78b6eba9b375382f79153172b4d/scipy-1.16.3-cp313-cp313-win_amd64.whl", hash = "sha256:062246acacbe9f8210de8e751b16fc37458213f124bef161a5a02c7a39284304", size = 38529877, upload-time = "2025-10-28T17:35:51.076Z" },
- { url = "https://files.pythonhosted.org/packages/7f/14/9d9fbcaa1260a94f4bb5b64ba9213ceb5d03cd88841fe9fd1ffd47a45b73/scipy-1.16.3-cp313-cp313-win_arm64.whl", hash = "sha256:50a3dbf286dbc7d84f176f9a1574c705f277cb6565069f88f60db9eafdbe3ee2", size = 25455366, upload-time = "2025-10-28T17:35:59.014Z" },
- { url = "https://files.pythonhosted.org/packages/e2/a3/9ec205bd49f42d45d77f1730dbad9ccf146244c1647605cf834b3a8c4f36/scipy-1.16.3-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:fb4b29f4cf8cc5a8d628bc8d8e26d12d7278cd1f219f22698a378c3d67db5e4b", size = 37027931, upload-time = "2025-10-28T17:34:31.451Z" },
- { url = "https://files.pythonhosted.org/packages/25/06/ca9fd1f3a4589cbd825b1447e5db3a8ebb969c1eaf22c8579bd286f51b6d/scipy-1.16.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:8d09d72dc92742988b0e7750bddb8060b0c7079606c0d24a8cc8e9c9c11f9079", size = 29400081, upload-time = "2025-10-28T17:34:39.087Z" },
- { url = "https://files.pythonhosted.org/packages/6a/56/933e68210d92657d93fb0e381683bc0e53a965048d7358ff5fbf9e6a1b17/scipy-1.16.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:03192a35e661470197556de24e7cb1330d84b35b94ead65c46ad6f16f6b28f2a", size = 21391244, upload-time = "2025-10-28T17:34:45.234Z" },
- { url = "https://files.pythonhosted.org/packages/a8/7e/779845db03dc1418e215726329674b40576879b91814568757ff0014ad65/scipy-1.16.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:57d01cb6f85e34f0946b33caa66e892aae072b64b034183f3d87c4025802a119", size = 23929753, upload-time = "2025-10-28T17:34:51.793Z" },
- { url = "https://files.pythonhosted.org/packages/4c/4b/f756cf8161d5365dcdef9e5f460ab226c068211030a175d2fc7f3f41ca64/scipy-1.16.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:96491a6a54e995f00a28a3c3badfff58fd093bf26cd5fb34a2188c8c756a3a2c", size = 33496912, upload-time = "2025-10-28T17:34:59.8Z" },
- { url = "https://files.pythonhosted.org/packages/09/b5/222b1e49a58668f23839ca1542a6322bb095ab8d6590d4f71723869a6c2c/scipy-1.16.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cd13e354df9938598af2be05822c323e97132d5e6306b83a3b4ee6724c6e522e", size = 35802371, upload-time = "2025-10-28T17:35:08.173Z" },
- { url = "https://files.pythonhosted.org/packages/c1/8d/5964ef68bb31829bde27611f8c9deeac13764589fe74a75390242b64ca44/scipy-1.16.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:63d3cdacb8a824a295191a723ee5e4ea7768ca5ca5f2838532d9f2e2b3ce2135", size = 36190477, upload-time = "2025-10-28T17:35:16.7Z" },
- { url = "https://files.pythonhosted.org/packages/ab/f2/b31d75cb9b5fa4dd39a0a931ee9b33e7f6f36f23be5ef560bf72e0f92f32/scipy-1.16.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e7efa2681ea410b10dde31a52b18b0154d66f2485328830e45fdf183af5aefc6", size = 38796678, upload-time = "2025-10-28T17:35:26.354Z" },
- { url = "https://files.pythonhosted.org/packages/b4/1e/b3723d8ff64ab548c38d87055483714fefe6ee20e0189b62352b5e015bb1/scipy-1.16.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2d1ae2cf0c350e7705168ff2429962a89ad90c2d49d1dd300686d8b2a5af22fc", size = 38640178, upload-time = "2025-10-28T17:35:35.304Z" },
- { url = "https://files.pythonhosted.org/packages/8e/f3/d854ff38789aca9b0cc23008d607ced9de4f7ab14fa1ca4329f86b3758ca/scipy-1.16.3-cp313-cp313t-win_arm64.whl", hash = "sha256:0c623a54f7b79dd88ef56da19bc2873afec9673a48f3b85b18e4d402bdd29a5a", size = 25803246, upload-time = "2025-10-28T17:35:42.155Z" },
- { url = "https://files.pythonhosted.org/packages/99/f6/99b10fd70f2d864c1e29a28bbcaa0c6340f9d8518396542d9ea3b4aaae15/scipy-1.16.3-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:875555ce62743e1d54f06cdf22c1e0bc47b91130ac40fe5d783b6dfa114beeb6", size = 36606469, upload-time = "2025-10-28T17:36:08.741Z" },
- { url = "https://files.pythonhosted.org/packages/4d/74/043b54f2319f48ea940dd025779fa28ee360e6b95acb7cd188fad4391c6b/scipy-1.16.3-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:bb61878c18a470021fb515a843dc7a76961a8daceaaaa8bad1332f1bf4b54657", size = 28872043, upload-time = "2025-10-28T17:36:16.599Z" },
- { url = "https://files.pythonhosted.org/packages/4d/e1/24b7e50cc1c4ee6ffbcb1f27fe9f4c8b40e7911675f6d2d20955f41c6348/scipy-1.16.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:f2622206f5559784fa5c4b53a950c3c7c1cf3e84ca1b9c4b6c03f062f289ca26", size = 20862952, upload-time = "2025-10-28T17:36:22.966Z" },
- { url = "https://files.pythonhosted.org/packages/dd/3a/3e8c01a4d742b730df368e063787c6808597ccb38636ed821d10b39ca51b/scipy-1.16.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7f68154688c515cdb541a31ef8eb66d8cd1050605be9dcd74199cbd22ac739bc", size = 23508512, upload-time = "2025-10-28T17:36:29.731Z" },
- { url = "https://files.pythonhosted.org/packages/1f/60/c45a12b98ad591536bfe5330cb3cfe1850d7570259303563b1721564d458/scipy-1.16.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8b3c820ddb80029fe9f43d61b81d8b488d3ef8ca010d15122b152db77dc94c22", size = 33413639, upload-time = "2025-10-28T17:36:37.982Z" },
- { url = "https://files.pythonhosted.org/packages/71/bc/35957d88645476307e4839712642896689df442f3e53b0fa016ecf8a3357/scipy-1.16.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d3837938ae715fc0fe3c39c0202de3a8853aff22ca66781ddc2ade7554b7e2cc", size = 35704729, upload-time = "2025-10-28T17:36:46.547Z" },
- { url = "https://files.pythonhosted.org/packages/3b/15/89105e659041b1ca11c386e9995aefacd513a78493656e57789f9d9eab61/scipy-1.16.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:aadd23f98f9cb069b3bd64ddc900c4d277778242e961751f77a8cb5c4b946fb0", size = 36086251, upload-time = "2025-10-28T17:36:55.161Z" },
- { url = "https://files.pythonhosted.org/packages/1a/87/c0ea673ac9c6cc50b3da2196d860273bc7389aa69b64efa8493bdd25b093/scipy-1.16.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b7c5f1bda1354d6a19bc6af73a649f8285ca63ac6b52e64e658a5a11d4d69800", size = 38716681, upload-time = "2025-10-28T17:37:04.1Z" },
- { url = "https://files.pythonhosted.org/packages/91/06/837893227b043fb9b0d13e4bd7586982d8136cb249ffb3492930dab905b8/scipy-1.16.3-cp314-cp314-win_amd64.whl", hash = "sha256:e5d42a9472e7579e473879a1990327830493a7047506d58d73fc429b84c1d49d", size = 39358423, upload-time = "2025-10-28T17:38:20.005Z" },
- { url = "https://files.pythonhosted.org/packages/95/03/28bce0355e4d34a7c034727505a02d19548549e190bedd13a721e35380b7/scipy-1.16.3-cp314-cp314-win_arm64.whl", hash = "sha256:6020470b9d00245926f2d5bb93b119ca0340f0d564eb6fbaad843eaebf9d690f", size = 26135027, upload-time = "2025-10-28T17:38:24.966Z" },
- { url = "https://files.pythonhosted.org/packages/b2/6f/69f1e2b682efe9de8fe9f91040f0cd32f13cfccba690512ba4c582b0bc29/scipy-1.16.3-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:e1d27cbcb4602680a49d787d90664fa4974063ac9d4134813332a8c53dbe667c", size = 37028379, upload-time = "2025-10-28T17:37:14.061Z" },
- { url = "https://files.pythonhosted.org/packages/7c/2d/e826f31624a5ebbab1cd93d30fd74349914753076ed0593e1d56a98c4fb4/scipy-1.16.3-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:9b9c9c07b6d56a35777a1b4cc8966118fb16cfd8daf6743867d17d36cfad2d40", size = 29400052, upload-time = "2025-10-28T17:37:21.709Z" },
- { url = "https://files.pythonhosted.org/packages/69/27/d24feb80155f41fd1f156bf144e7e049b4e2b9dd06261a242905e3bc7a03/scipy-1.16.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:3a4c460301fb2cffb7f88528f30b3127742cff583603aa7dc964a52c463b385d", size = 21391183, upload-time = "2025-10-28T17:37:29.559Z" },
- { url = "https://files.pythonhosted.org/packages/f8/d3/1b229e433074c5738a24277eca520a2319aac7465eea7310ea6ae0e98ae2/scipy-1.16.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:f667a4542cc8917af1db06366d3f78a5c8e83badd56409f94d1eac8d8d9133fa", size = 23930174, upload-time = "2025-10-28T17:37:36.306Z" },
- { url = "https://files.pythonhosted.org/packages/16/9d/d9e148b0ec680c0f042581a2be79a28a7ab66c0c4946697f9e7553ead337/scipy-1.16.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f379b54b77a597aa7ee5e697df0d66903e41b9c85a6dd7946159e356319158e8", size = 33497852, upload-time = "2025-10-28T17:37:42.228Z" },
- { url = "https://files.pythonhosted.org/packages/2f/22/4e5f7561e4f98b7bea63cf3fd7934bff1e3182e9f1626b089a679914d5c8/scipy-1.16.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4aff59800a3b7f786b70bfd6ab551001cb553244988d7d6b8299cb1ea653b353", size = 35798595, upload-time = "2025-10-28T17:37:48.102Z" },
- { url = "https://files.pythonhosted.org/packages/83/42/6644d714c179429fc7196857866f219fef25238319b650bb32dde7bf7a48/scipy-1.16.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:da7763f55885045036fabcebd80144b757d3db06ab0861415d1c3b7c69042146", size = 36186269, upload-time = "2025-10-28T17:37:53.72Z" },
- { url = "https://files.pythonhosted.org/packages/ac/70/64b4d7ca92f9cf2e6fc6aaa2eecf80bb9b6b985043a9583f32f8177ea122/scipy-1.16.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ffa6eea95283b2b8079b821dc11f50a17d0571c92b43e2b5b12764dc5f9b285d", size = 38802779, upload-time = "2025-10-28T17:37:59.393Z" },
- { url = "https://files.pythonhosted.org/packages/61/82/8d0e39f62764cce5ffd5284131e109f07cf8955aef9ab8ed4e3aa5e30539/scipy-1.16.3-cp314-cp314t-win_amd64.whl", hash = "sha256:d9f48cafc7ce94cf9b15c6bffdc443a81a27bf7075cf2dcd5c8b40f85d10c4e7", size = 39471128, upload-time = "2025-10-28T17:38:05.259Z" },
- { url = "https://files.pythonhosted.org/packages/64/47/a494741db7280eae6dc033510c319e34d42dd41b7ac0c7ead39354d1a2b5/scipy-1.16.3-cp314-cp314t-win_arm64.whl", hash = "sha256:21d9d6b197227a12dcbf9633320a4e34c6b0e51c57268df255a0942983bac562", size = 26464127, upload-time = "2025-10-28T17:38:11.34Z" },
+sdist = { url = "https://files.pythonhosted.org/packages/56/3e/9cca699f3486ce6bc12ff46dc2031f1ec8eb9ccc9a320fdaf925f1417426/scipy-1.17.0.tar.gz", hash = "sha256:2591060c8e648d8b96439e111ac41fd8342fdeff1876be2e19dea3fe8930454e", size = 30396830, upload-time = "2026-01-10T21:34:23.009Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1e/4b/c89c131aa87cad2b77a54eb0fb94d633a842420fa7e919dc2f922037c3d8/scipy-1.17.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:2abd71643797bd8a106dff97894ff7869eeeb0af0f7a5ce02e4227c6a2e9d6fd", size = 31381316, upload-time = "2026-01-10T21:24:33.42Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/5f/a6b38f79a07d74989224d5f11b55267714707582908a5f1ae854cf9a9b84/scipy-1.17.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:ef28d815f4d2686503e5f4f00edc387ae58dfd7a2f42e348bb53359538f01558", size = 27966760, upload-time = "2026-01-10T21:24:38.911Z" },
+ { url = "https://files.pythonhosted.org/packages/c1/20/095ad24e031ee8ed3c5975954d816b8e7e2abd731e04f8be573de8740885/scipy-1.17.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:272a9f16d6bb4667e8b50d25d71eddcc2158a214df1b566319298de0939d2ab7", size = 20138701, upload-time = "2026-01-10T21:24:43.249Z" },
+ { url = "https://files.pythonhosted.org/packages/89/11/4aad2b3858d0337756f3323f8960755704e530b27eb2a94386c970c32cbe/scipy-1.17.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:7204fddcbec2fe6598f1c5fdf027e9f259106d05202a959a9f1aecf036adc9f6", size = 22480574, upload-time = "2026-01-10T21:24:47.266Z" },
+ { url = "https://files.pythonhosted.org/packages/85/bd/f5af70c28c6da2227e510875cadf64879855193a687fb19951f0f44cfd6b/scipy-1.17.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fc02c37a5639ee67d8fb646ffded6d793c06c5622d36b35cfa8fe5ececb8f042", size = 32862414, upload-time = "2026-01-10T21:24:52.566Z" },
+ { url = "https://files.pythonhosted.org/packages/ef/df/df1457c4df3826e908879fe3d76bc5b6e60aae45f4ee42539512438cfd5d/scipy-1.17.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dac97a27520d66c12a34fd90a4fe65f43766c18c0d6e1c0a80f114d2260080e4", size = 35112380, upload-time = "2026-01-10T21:24:58.433Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/bb/88e2c16bd1dd4de19d80d7c5e238387182993c2fb13b4b8111e3927ad422/scipy-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ebb7446a39b3ae0fe8f416a9a3fdc6fba3f11c634f680f16a239c5187bc487c0", size = 34922676, upload-time = "2026-01-10T21:25:04.287Z" },
+ { url = "https://files.pythonhosted.org/packages/02/ba/5120242cc735f71fc002cff0303d536af4405eb265f7c60742851e7ccfe9/scipy-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:474da16199f6af66601a01546144922ce402cb17362e07d82f5a6cf8f963e449", size = 37507599, upload-time = "2026-01-10T21:25:09.851Z" },
+ { url = "https://files.pythonhosted.org/packages/52/c8/08629657ac6c0da198487ce8cd3de78e02cfde42b7f34117d56a3fe249dc/scipy-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:255c0da161bd7b32a6c898e7891509e8a9289f0b1c6c7d96142ee0d2b114c2ea", size = 36380284, upload-time = "2026-01-10T21:25:15.632Z" },
+ { url = "https://files.pythonhosted.org/packages/6c/4a/465f96d42c6f33ad324a40049dfd63269891db9324aa66c4a1c108c6f994/scipy-1.17.0-cp311-cp311-win_arm64.whl", hash = "sha256:85b0ac3ad17fa3be50abd7e69d583d98792d7edc08367e01445a1e2076005379", size = 24370427, upload-time = "2026-01-10T21:25:20.514Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/11/7241a63e73ba5a516f1930ac8d5b44cbbfabd35ac73a2d08ca206df007c4/scipy-1.17.0-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:0d5018a57c24cb1dd828bcf51d7b10e65986d549f52ef5adb6b4d1ded3e32a57", size = 31364580, upload-time = "2026-01-10T21:25:25.717Z" },
+ { url = "https://files.pythonhosted.org/packages/ed/1d/5057f812d4f6adc91a20a2d6f2ebcdb517fdbc87ae3acc5633c9b97c8ba5/scipy-1.17.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:88c22af9e5d5a4f9e027e26772cc7b5922fab8bcc839edb3ae33de404feebd9e", size = 27969012, upload-time = "2026-01-10T21:25:30.921Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/21/f6ec556c1e3b6ec4e088da667d9987bb77cc3ab3026511f427dc8451187d/scipy-1.17.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:f3cd947f20fe17013d401b64e857c6b2da83cae567adbb75b9dcba865abc66d8", size = 20140691, upload-time = "2026-01-10T21:25:34.802Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/fe/5e5ad04784964ba964a96f16c8d4676aa1b51357199014dce58ab7ec5670/scipy-1.17.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e8c0b331c2c1f531eb51f1b4fc9ba709521a712cce58f1aa627bc007421a5306", size = 22463015, upload-time = "2026-01-10T21:25:39.277Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/69/7c347e857224fcaf32a34a05183b9d8a7aca25f8f2d10b8a698b8388561a/scipy-1.17.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5194c445d0a1c7a6c1a4a4681b6b7c71baad98ff66d96b949097e7513c9d6742", size = 32724197, upload-time = "2026-01-10T21:25:44.084Z" },
+ { url = "https://files.pythonhosted.org/packages/d1/fe/66d73b76d378ba8cc2fe605920c0c75092e3a65ae746e1e767d9d020a75a/scipy-1.17.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9eeb9b5f5997f75507814ed9d298ab23f62cf79f5a3ef90031b1ee2506abdb5b", size = 35009148, upload-time = "2026-01-10T21:25:50.591Z" },
+ { url = "https://files.pythonhosted.org/packages/af/07/07dec27d9dc41c18d8c43c69e9e413431d20c53a0339c388bcf72f353c4b/scipy-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:40052543f7bbe921df4408f46003d6f01c6af109b9e2c8a66dd1cf6cf57f7d5d", size = 34798766, upload-time = "2026-01-10T21:25:59.41Z" },
+ { url = "https://files.pythonhosted.org/packages/81/61/0470810c8a093cdacd4ba7504b8a218fd49ca070d79eca23a615f5d9a0b0/scipy-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0cf46c8013fec9d3694dc572f0b54100c28405d55d3e2cb15e2895b25057996e", size = 37405953, upload-time = "2026-01-10T21:26:07.75Z" },
+ { url = "https://files.pythonhosted.org/packages/92/ce/672ed546f96d5d41ae78c4b9b02006cedd0b3d6f2bf5bb76ea455c320c28/scipy-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:0937a0b0d8d593a198cededd4c439a0ea216a3f36653901ea1f3e4be949056f8", size = 36328121, upload-time = "2026-01-10T21:26:16.509Z" },
+ { url = "https://files.pythonhosted.org/packages/9d/21/38165845392cae67b61843a52c6455d47d0cc2a40dd495c89f4362944654/scipy-1.17.0-cp312-cp312-win_arm64.whl", hash = "sha256:f603d8a5518c7426414d1d8f82e253e454471de682ce5e39c29adb0df1efb86b", size = 24314368, upload-time = "2026-01-10T21:26:23.087Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/51/3468fdfd49387ddefee1636f5cf6d03ce603b75205bf439bbf0e62069bfd/scipy-1.17.0-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:65ec32f3d32dfc48c72df4291345dae4f048749bc8d5203ee0a3f347f96c5ce6", size = 31344101, upload-time = "2026-01-10T21:26:30.25Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/9a/9406aec58268d437636069419e6977af953d1e246df941d42d3720b7277b/scipy-1.17.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:1f9586a58039d7229ce77b52f8472c972448cded5736eaf102d5658bbac4c269", size = 27950385, upload-time = "2026-01-10T21:26:36.801Z" },
+ { url = "https://files.pythonhosted.org/packages/4f/98/e7342709e17afdfd1b26b56ae499ef4939b45a23a00e471dfb5375eea205/scipy-1.17.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9fad7d3578c877d606b1150135c2639e9de9cecd3705caa37b66862977cc3e72", size = 20122115, upload-time = "2026-01-10T21:26:42.107Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/0e/9eeeb5357a64fd157cbe0302c213517c541cc16b8486d82de251f3c68ede/scipy-1.17.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:423ca1f6584fc03936972b5f7c06961670dbba9f234e71676a7c7ccf938a0d61", size = 22442402, upload-time = "2026-01-10T21:26:48.029Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/10/be13397a0e434f98e0c79552b2b584ae5bb1c8b2be95db421533bbca5369/scipy-1.17.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fe508b5690e9eaaa9467fc047f833af58f1152ae51a0d0aed67aa5801f4dd7d6", size = 32696338, upload-time = "2026-01-10T21:26:55.521Z" },
+ { url = "https://files.pythonhosted.org/packages/63/1e/12fbf2a3bb240161651c94bb5cdd0eae5d4e8cc6eaeceb74ab07b12a753d/scipy-1.17.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6680f2dfd4f6182e7d6db161344537da644d1cf85cf293f015c60a17ecf08752", size = 34977201, upload-time = "2026-01-10T21:27:03.501Z" },
+ { url = "https://files.pythonhosted.org/packages/19/5b/1a63923e23ccd20bd32156d7dd708af5bbde410daa993aa2500c847ab2d2/scipy-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:eec3842ec9ac9de5917899b277428886042a93db0b227ebbe3a333b64ec7643d", size = 34777384, upload-time = "2026-01-10T21:27:11.423Z" },
+ { url = "https://files.pythonhosted.org/packages/39/22/b5da95d74edcf81e540e467202a988c50fef41bd2011f46e05f72ba07df6/scipy-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d7425fcafbc09a03731e1bc05581f5fad988e48c6a861f441b7ab729a49a55ea", size = 37379586, upload-time = "2026-01-10T21:27:20.171Z" },
+ { url = "https://files.pythonhosted.org/packages/b9/b6/8ac583d6da79e7b9e520579f03007cb006f063642afd6b2eeb16b890bf93/scipy-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:87b411e42b425b84777718cc41516b8a7e0795abfa8e8e1d573bf0ef014f0812", size = 36287211, upload-time = "2026-01-10T21:28:43.122Z" },
+ { url = "https://files.pythonhosted.org/packages/55/fb/7db19e0b3e52f882b420417644ec81dd57eeef1bd1705b6f689d8ff93541/scipy-1.17.0-cp313-cp313-win_arm64.whl", hash = "sha256:357ca001c6e37601066092e7c89cca2f1ce74e2a520ca78d063a6d2201101df2", size = 24312646, upload-time = "2026-01-10T21:28:49.893Z" },
+ { url = "https://files.pythonhosted.org/packages/20/b6/7feaa252c21cc7aff335c6c55e1b90ab3e3306da3f048109b8b639b94648/scipy-1.17.0-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:ec0827aa4d36cb79ff1b81de898e948a51ac0b9b1c43e4a372c0508c38c0f9a3", size = 31693194, upload-time = "2026-01-10T21:27:27.454Z" },
+ { url = "https://files.pythonhosted.org/packages/76/bb/bbb392005abce039fb7e672cb78ac7d158700e826b0515cab6b5b60c26fb/scipy-1.17.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:819fc26862b4b3c73a60d486dbb919202f3d6d98c87cf20c223511429f2d1a97", size = 28365415, upload-time = "2026-01-10T21:27:34.26Z" },
+ { url = "https://files.pythonhosted.org/packages/37/da/9d33196ecc99fba16a409c691ed464a3a283ac454a34a13a3a57c0d66f3a/scipy-1.17.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:363ad4ae2853d88ebcde3ae6ec46ccca903ea9835ee8ba543f12f575e7b07e4e", size = 20537232, upload-time = "2026-01-10T21:27:40.306Z" },
+ { url = "https://files.pythonhosted.org/packages/56/9d/f4b184f6ddb28e9a5caea36a6f98e8ecd2a524f9127354087ce780885d83/scipy-1.17.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:979c3a0ff8e5ba254d45d59ebd38cde48fce4f10b5125c680c7a4bfe177aab07", size = 22791051, upload-time = "2026-01-10T21:27:46.539Z" },
+ { url = "https://files.pythonhosted.org/packages/9b/9d/025cccdd738a72140efc582b1641d0dd4caf2e86c3fb127568dc80444e6e/scipy-1.17.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:130d12926ae34399d157de777472bf82e9061c60cc081372b3118edacafe1d00", size = 32815098, upload-time = "2026-01-10T21:27:54.389Z" },
+ { url = "https://files.pythonhosted.org/packages/48/5f/09b879619f8bca15ce392bfc1894bd9c54377e01d1b3f2f3b595a1b4d945/scipy-1.17.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e886000eb4919eae3a44f035e63f0fd8b651234117e8f6f29bad1cd26e7bc45", size = 35031342, upload-time = "2026-01-10T21:28:03.012Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/9a/f0f0a9f0aa079d2f106555b984ff0fbb11a837df280f04f71f056ea9c6e4/scipy-1.17.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:13c4096ac6bc31d706018f06a49abe0485f96499deb82066b94d19b02f664209", size = 34893199, upload-time = "2026-01-10T21:28:10.832Z" },
+ { url = "https://files.pythonhosted.org/packages/90/b8/4f0f5cf0c5ea4d7548424e6533e6b17d164f34a6e2fb2e43ffebb6697b06/scipy-1.17.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cacbaddd91fcffde703934897c5cd2c7cb0371fac195d383f4e1f1c5d3f3bd04", size = 37438061, upload-time = "2026-01-10T21:28:19.684Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/cc/2bd59140ed3b2fa2882fb15da0a9cb1b5a6443d67cfd0d98d4cec83a57ec/scipy-1.17.0-cp313-cp313t-win_amd64.whl", hash = "sha256:edce1a1cf66298cccdc48a1bdf8fb10a3bf58e8b58d6c3883dd1530e103f87c0", size = 36328593, upload-time = "2026-01-10T21:28:28.007Z" },
+ { url = "https://files.pythonhosted.org/packages/13/1b/c87cc44a0d2c7aaf0f003aef2904c3d097b422a96c7e7c07f5efd9073c1b/scipy-1.17.0-cp313-cp313t-win_arm64.whl", hash = "sha256:30509da9dbec1c2ed8f168b8d8aa853bc6723fede1dbc23c7d43a56f5ab72a67", size = 24625083, upload-time = "2026-01-10T21:28:35.188Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/2d/51006cd369b8e7879e1c630999a19d1fbf6f8b5ed3e33374f29dc87e53b3/scipy-1.17.0-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:c17514d11b78be8f7e6331b983a65a7f5ca1fd037b95e27b280921fe5606286a", size = 31346803, upload-time = "2026-01-10T21:28:57.24Z" },
+ { url = "https://files.pythonhosted.org/packages/d6/2e/2349458c3ce445f53a6c93d4386b1c4c5c0c540917304c01222ff95ff317/scipy-1.17.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:4e00562e519c09da34c31685f6acc3aa384d4d50604db0f245c14e1b4488bfa2", size = 27967182, upload-time = "2026-01-10T21:29:04.107Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/7c/df525fbfa77b878d1cfe625249529514dc02f4fd5f45f0f6295676a76528/scipy-1.17.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:f7df7941d71314e60a481e02d5ebcb3f0185b8d799c70d03d8258f6c80f3d467", size = 20139125, upload-time = "2026-01-10T21:29:10.179Z" },
+ { url = "https://files.pythonhosted.org/packages/33/11/fcf9d43a7ed1234d31765ec643b0515a85a30b58eddccc5d5a4d12b5f194/scipy-1.17.0-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:aabf057c632798832f071a8dde013c2e26284043934f53b00489f1773b33527e", size = 22443554, upload-time = "2026-01-10T21:29:15.888Z" },
+ { url = "https://files.pythonhosted.org/packages/80/5c/ea5d239cda2dd3d31399424967a24d556cf409fbea7b5b21412b0fd0a44f/scipy-1.17.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a38c3337e00be6fd8a95b4ed66b5d988bac4ec888fd922c2ea9fe5fb1603dd67", size = 32757834, upload-time = "2026-01-10T21:29:23.406Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/7e/8c917cc573310e5dc91cbeead76f1b600d3fb17cf0969db02c9cf92e3cfa/scipy-1.17.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00fb5f8ec8398ad90215008d8b6009c9db9fa924fd4c7d6be307c6f945f9cd73", size = 34995775, upload-time = "2026-01-10T21:29:31.915Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/43/176c0c3c07b3f7df324e7cdd933d3e2c4898ca202b090bd5ba122f9fe270/scipy-1.17.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f2a4942b0f5f7c23c7cd641a0ca1955e2ae83dedcff537e3a0259096635e186b", size = 34841240, upload-time = "2026-01-10T21:29:39.995Z" },
+ { url = "https://files.pythonhosted.org/packages/44/8c/d1f5f4b491160592e7f084d997de53a8e896a3ac01cd07e59f43ca222744/scipy-1.17.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf133ced83889583156566d2bdf7a07ff89228fe0c0cb727f777de92092ec6b", size = 37394463, upload-time = "2026-01-10T21:29:48.723Z" },
+ { url = "https://files.pythonhosted.org/packages/9f/ec/42a6657f8d2d087e750e9a5dde0b481fd135657f09eaf1cf5688bb23c338/scipy-1.17.0-cp314-cp314-win_amd64.whl", hash = "sha256:3625c631a7acd7cfd929e4e31d2582cf00f42fcf06011f59281271746d77e061", size = 37053015, upload-time = "2026-01-10T21:30:51.418Z" },
+ { url = "https://files.pythonhosted.org/packages/27/58/6b89a6afd132787d89a362d443a7bddd511b8f41336a1ae47f9e4f000dc4/scipy-1.17.0-cp314-cp314-win_arm64.whl", hash = "sha256:9244608d27eafe02b20558523ba57f15c689357c85bdcfe920b1828750aa26eb", size = 24951312, upload-time = "2026-01-10T21:30:56.771Z" },
+ { url = "https://files.pythonhosted.org/packages/e9/01/f58916b9d9ae0112b86d7c3b10b9e685625ce6e8248df139d0fcb17f7397/scipy-1.17.0-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:2b531f57e09c946f56ad0b4a3b2abee778789097871fc541e267d2eca081cff1", size = 31706502, upload-time = "2026-01-10T21:29:56.326Z" },
+ { url = "https://files.pythonhosted.org/packages/59/8e/2912a87f94a7d1f8b38aabc0faf74b82d3b6c9e22be991c49979f0eceed8/scipy-1.17.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:13e861634a2c480bd237deb69333ac79ea1941b94568d4b0efa5db5e263d4fd1", size = 28380854, upload-time = "2026-01-10T21:30:01.554Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/1c/874137a52dddab7d5d595c1887089a2125d27d0601fce8c0026a24a92a0b/scipy-1.17.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:eb2651271135154aa24f6481cbae5cc8af1f0dd46e6533fb7b56aa9727b6a232", size = 20552752, upload-time = "2026-01-10T21:30:05.93Z" },
+ { url = "https://files.pythonhosted.org/packages/3f/f0/7518d171cb735f6400f4576cf70f756d5b419a07fe1867da34e2c2c9c11b/scipy-1.17.0-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:c5e8647f60679790c2f5c76be17e2e9247dc6b98ad0d3b065861e082c56e078d", size = 22803972, upload-time = "2026-01-10T21:30:10.651Z" },
+ { url = "https://files.pythonhosted.org/packages/7c/74/3498563a2c619e8a3ebb4d75457486c249b19b5b04a30600dfd9af06bea5/scipy-1.17.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5fb10d17e649e1446410895639f3385fd2bf4c3c7dfc9bea937bddcbc3d7b9ba", size = 32829770, upload-time = "2026-01-10T21:30:16.359Z" },
+ { url = "https://files.pythonhosted.org/packages/48/d1/7b50cedd8c6c9d6f706b4b36fa8544d829c712a75e370f763b318e9638c1/scipy-1.17.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8547e7c57f932e7354a2319fab613981cde910631979f74c9b542bb167a8b9db", size = 35051093, upload-time = "2026-01-10T21:30:22.987Z" },
+ { url = "https://files.pythonhosted.org/packages/e2/82/a2d684dfddb87ba1b3ea325df7c3293496ee9accb3a19abe9429bce94755/scipy-1.17.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33af70d040e8af9d5e7a38b5ed3b772adddd281e3062ff23fec49e49681c38cf", size = 34909905, upload-time = "2026-01-10T21:30:28.704Z" },
+ { url = "https://files.pythonhosted.org/packages/ef/5e/e565bd73991d42023eb82bb99e51c5b3d9e2c588ca9d4b3e2cc1d3ca62a6/scipy-1.17.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f9eb55bb97d00f8b7ab95cb64f873eb0bf54d9446264d9f3609130381233483f", size = 37457743, upload-time = "2026-01-10T21:30:34.819Z" },
+ { url = "https://files.pythonhosted.org/packages/58/a8/a66a75c3d8f1fb2b83f66007d6455a06a6f6cf5618c3dc35bc9b69dd096e/scipy-1.17.0-cp314-cp314t-win_amd64.whl", hash = "sha256:1ff269abf702f6c7e67a4b7aad981d42871a11b9dd83c58d2d2ea624efbd1088", size = 37098574, upload-time = "2026-01-10T21:30:40.782Z" },
+ { url = "https://files.pythonhosted.org/packages/56/a5/df8f46ef7da168f1bc52cd86e09a9de5c6f19cc1da04454d51b7d4f43408/scipy-1.17.0-cp314-cp314t-win_arm64.whl", hash = "sha256:031121914e295d9791319a1875444d55079885bbae5bdc9c5e0f2ee5f09d34ff", size = 25246266, upload-time = "2026-01-10T21:30:45.923Z" },
]
[[package]]
@@ -2168,39 +2162,80 @@ wheels = [
[[package]]
name = "soupsieve"
-version = "2.8"
+version = "2.8.3"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/6d/e6/21ccce3262dd4889aa3332e5a119a3491a95e8f60939870a3a035aabac0d/soupsieve-2.8.tar.gz", hash = "sha256:e2dd4a40a628cb5f28f6d4b0db8800b8f581b65bb380b97de22ba5ca8d72572f", size = 103472, upload-time = "2025-08-27T15:39:51.78Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/7b/ae/2d9c981590ed9999a0d91755b47fc74f74de286b0f5cee14c9269041e6c4/soupsieve-2.8.3.tar.gz", hash = "sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349", size = 118627, upload-time = "2026-01-20T04:27:02.457Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/14/a0/bb38d3b76b8cae341dad93a2dd83ab7462e6dbcdd84d43f54ee60a8dc167/soupsieve-2.8-py3-none-any.whl", hash = "sha256:0cc76456a30e20f5d7f2e14a98a4ae2ee4e5abdc7c5ea0aafe795f344bc7984c", size = 36679, upload-time = "2025-08-27T15:39:50.179Z" },
+ { url = "https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95", size = 37016, upload-time = "2026-01-20T04:27:01.012Z" },
]
[[package]]
name = "sphinx"
-version = "8.2.3"
+version = "9.0.4"
source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.12' and sys_platform == 'win32'",
+ "python_full_version < '3.12' and sys_platform == 'emscripten'",
+ "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+]
dependencies = [
- { name = "alabaster" },
- { name = "babel" },
- { name = "colorama", marker = "sys_platform == 'win32'" },
- { name = "docutils" },
- { name = "imagesize" },
- { name = "jinja2" },
- { name = "packaging" },
- { name = "pygments" },
- { name = "requests" },
- { name = "roman-numerals-py" },
- { name = "snowballstemmer" },
- { name = "sphinxcontrib-applehelp" },
- { name = "sphinxcontrib-devhelp" },
- { name = "sphinxcontrib-htmlhelp" },
- { name = "sphinxcontrib-jsmath" },
- { name = "sphinxcontrib-qthelp" },
- { name = "sphinxcontrib-serializinghtml" },
+ { name = "alabaster", marker = "python_full_version < '3.12'" },
+ { name = "babel", marker = "python_full_version < '3.12'" },
+ { name = "colorama", marker = "python_full_version < '3.12' and sys_platform == 'win32'" },
+ { name = "docutils", marker = "python_full_version < '3.12'" },
+ { name = "imagesize", marker = "python_full_version < '3.12'" },
+ { name = "jinja2", marker = "python_full_version < '3.12'" },
+ { name = "packaging", marker = "python_full_version < '3.12'" },
+ { name = "pygments", marker = "python_full_version < '3.12'" },
+ { name = "requests", marker = "python_full_version < '3.12'" },
+ { name = "roman-numerals", marker = "python_full_version < '3.12'" },
+ { name = "snowballstemmer", marker = "python_full_version < '3.12'" },
+ { name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.12'" },
+ { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.12'" },
+ { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.12'" },
+ { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.12'" },
+ { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.12'" },
+ { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.12'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/42/50/a8c6ccc36d5eacdfd7913ddccd15a9cee03ecafc5ee2bc40e1f168d85022/sphinx-9.0.4.tar.gz", hash = "sha256:594ef59d042972abbc581d8baa577404abe4e6c3b04ef61bd7fc2acbd51f3fa3", size = 8710502, upload-time = "2025-12-04T07:45:27.343Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl", hash = "sha256:5bebc595a5e943ea248b99c13814c1c5e10b3ece718976824ffa7959ff95fffb", size = 3917713, upload-time = "2025-12-04T07:45:24.944Z" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876, upload-time = "2025-03-02T22:31:59.658Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/31/53/136e9eca6e0b9dc0e1962e2c908fbea2e5ac000c2a2fbd9a35797958c48b/sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3", size = 3589741, upload-time = "2025-03-02T22:31:56.836Z" },
+
+[[package]]
+name = "sphinx"
+version = "9.1.0"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
+]
+dependencies = [
+ { name = "alabaster", marker = "python_full_version >= '3.12'" },
+ { name = "babel", marker = "python_full_version >= '3.12'" },
+ { name = "colorama", marker = "python_full_version >= '3.12' and sys_platform == 'win32'" },
+ { name = "docutils", marker = "python_full_version >= '3.12'" },
+ { name = "imagesize", marker = "python_full_version >= '3.12'" },
+ { name = "jinja2", marker = "python_full_version >= '3.12'" },
+ { name = "packaging", marker = "python_full_version >= '3.12'" },
+ { name = "pygments", marker = "python_full_version >= '3.12'" },
+ { name = "requests", marker = "python_full_version >= '3.12'" },
+ { name = "roman-numerals", marker = "python_full_version >= '3.12'" },
+ { name = "snowballstemmer", marker = "python_full_version >= '3.12'" },
+ { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.12'" },
+ { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.12'" },
+ { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.12'" },
+ { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.12'" },
+ { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.12'" },
+ { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.12'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/cd/bd/f08eb0f4eed5c83f1ba2a3bd18f7745a2b1525fad70660a1c00224ec468a/sphinx-9.1.0.tar.gz", hash = "sha256:7741722357dd75f8190766926071fed3bdc211c74dd2d7d4df5404da95930ddb", size = 8718324, upload-time = "2025-12-31T15:09:27.646Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/73/f7/b1884cb3188ab181fc81fa00c266699dab600f927a964df02ec3d5d1916a/sphinx-9.1.0-py3-none-any.whl", hash = "sha256:c84fdd4e782504495fe4f2c0b3413d6c2bf388589bb352d439b2a3bb99991978", size = 3921742, upload-time = "2025-12-31T15:09:25.561Z" },
]
[[package]]
@@ -2208,7 +2243,8 @@ name = "sphinx-basic-ng"
version = "1.0.0b2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "sphinx" },
+ { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
+ { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/98/0b/a866924ded68efec7a1759587a4e478aec7559d8165fac8b2ad1c0e774d6/sphinx_basic_ng-1.0.0b2.tar.gz", hash = "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9", size = 20736, upload-time = "2023-07-08T18:40:54.166Z" }
wheels = [
@@ -2222,7 +2258,8 @@ source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "docutils" },
{ name = "jinja2" },
- { name = "sphinx" },
+ { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
+ { name = "sphinx", version = "9.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ea/90/7cf0e91aadcb5b3ff4796acbaf2c7887a55434df360914af9fc067c753c1/sphinx-jinja-2.0.2.tar.gz", hash = "sha256:c6232b59a894139770be1dc6d0b00a379e4288ce78157904e1f8473dea3e0718", size = 4587, upload-time = "2022-07-05T11:57:49.579Z" }
wheels = [
@@ -2306,7 +2343,7 @@ wheels = [
[[package]]
name = "typer"
-version = "0.20.0"
+version = "0.21.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "click" },
@@ -2314,9 +2351,9 @@ dependencies = [
{ name = "shellingham" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/8f/28/7c85c8032b91dbe79725b6f17d2fffc595dff06a35c7a30a37bef73a1ab4/typer-0.20.0.tar.gz", hash = "sha256:1aaf6494031793e4876fb0bacfa6a912b551cf43c1e63c800df8b1a866720c37", size = 106492, upload-time = "2025-10-20T17:03:49.445Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/36/bf/8825b5929afd84d0dabd606c67cd57b8388cb3ec385f7ef19c5cc2202069/typer-0.21.1.tar.gz", hash = "sha256:ea835607cd752343b6b2b7ce676893e5a0324082268b48f27aa058bdb7d2145d", size = 110371, upload-time = "2026-01-06T11:21:10.989Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/78/64/7713ffe4b5983314e9d436a90d5bd4f63b6054e2aca783a3cfc44cb95bbf/typer-0.20.0-py3-none-any.whl", hash = "sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a", size = 47028, upload-time = "2025-10-20T17:03:47.617Z" },
+ { url = "https://files.pythonhosted.org/packages/a0/1d/d9257dd49ff2ca23ea5f132edf1281a0c4f9de8a762b9ae399b670a59235/typer-0.21.1-py3-none-any.whl", hash = "sha256:7985e89081c636b88d172c2ee0cfe33c253160994d47bdfdc302defd7d1f1d01", size = 47381, upload-time = "2026-01-06T11:21:09.824Z" },
]
[[package]]
@@ -2342,29 +2379,29 @@ wheels = [
[[package]]
name = "tzdata"
-version = "2025.2"
+version = "2025.3"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload-time = "2025-03-23T13:54:43.652Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772, upload-time = "2025-12-13T17:45:35.667Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload-time = "2025-03-23T13:54:41.845Z" },
+ { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521, upload-time = "2025-12-13T17:45:33.889Z" },
]
[[package]]
name = "urllib3"
-version = "2.6.2"
+version = "2.6.3"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/1e/24/a2a2ed9addd907787d7aa0355ba36a6cadf1768b934c652ea78acbd59dcd/urllib3-2.6.2.tar.gz", hash = "sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797", size = 432930, upload-time = "2025-12-11T15:56:40.252Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/6d/b9/4095b668ea3678bf6a0af005527f39de12fb026516fb3df17495a733b7f8/urllib3-2.6.2-py3-none-any.whl", hash = "sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd", size = 131182, upload-time = "2025-12-11T15:56:38.584Z" },
+ { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" },
]
[[package]]
name = "wcwidth"
-version = "0.2.14"
+version = "0.5.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/24/30/6b0809f4510673dc723187aeaf24c7f5459922d01e2f794277a3dfb90345/wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605", size = 102293, upload-time = "2025-09-22T16:29:53.023Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/64/6e/62daec357285b927e82263a81f3b4c1790215bc77c42530ce4a69d501a43/wcwidth-0.5.0.tar.gz", hash = "sha256:f89c103c949a693bf563377b2153082bf58e309919dfb7f27b04d862a0089333", size = 246585, upload-time = "2026-01-27T01:31:44.942Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1", size = 37286, upload-time = "2025-09-22T16:29:51.641Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/3e/45583b67c2ff08ad5a582d316fcb2f11d6cf0a50c7707ac09d212d25bc98/wcwidth-0.5.0-py3-none-any.whl", hash = "sha256:1efe1361b83b0ff7877b81ba57c8562c99cf812158b778988ce17ec061095695", size = 93772, upload-time = "2026-01-27T01:31:43.432Z" },
]
[[package]]
From fc0b038ced203a9a431051574c0cb015909b29dc Mon Sep 17 00:00:00 2001
From: bruno-f-cruz <7049351+bruno-f-cruz@users.noreply.github.com>
Date: Sat, 14 Feb 2026 10:54:29 -0800
Subject: [PATCH 02/31] Add annotations to the contract
---
src/aind_behavior_vr_foraging/data_contract/v0_6_0.py | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/aind_behavior_vr_foraging/data_contract/v0_6_0.py b/src/aind_behavior_vr_foraging/data_contract/v0_6_0.py
index aa996792..a6da7fb2 100644
--- a/src/aind_behavior_vr_foraging/data_contract/v0_6_0.py
+++ b/src/aind_behavior_vr_foraging/data_contract/v0_6_0.py
@@ -344,6 +344,13 @@ def dataset(
root_path / "behavior/SoftwareEvents/PatchStateAtReward.json"
),
),
+ SoftwareEvents(
+ name="Annotations",
+ description="An event emitted whenever an annotation is made during the session.",
+ reader_params=SoftwareEvents.make_params(
+ root_path / "behavior/Annotations/Annotations.json"
+ ),
+ ),
],
),
DataStreamCollection(
From 2ec20e2d1f51ce90a7c001076c0cba2147be675f Mon Sep 17 00:00:00 2001
From: bruno-f-cruz <7049351+bruno-f-cruz@users.noreply.github.com>
Date: Sat, 14 Feb 2026 11:00:46 -0800
Subject: [PATCH 03/31] Surface annotations in QC
---
.../data_qc/data_qc.py | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/src/aind_behavior_vr_foraging/data_qc/data_qc.py b/src/aind_behavior_vr_foraging/data_qc/data_qc.py
index 8a58d716..f21f9d3f 100644
--- a/src/aind_behavior_vr_foraging/data_qc/data_qc.py
+++ b/src/aind_behavior_vr_foraging/data_qc/data_qc.py
@@ -28,6 +28,23 @@ def test_end_session_exists(self):
else:
return self.pass_test(None, "EndSession event exists with data.")
+ def test_has_annotations(self):
+ """Check that the session has annotations and surfaces them in the context if they exist."""
+ annotations = self.dataset["Behavior"]["Logs"]["Annotations"]
+ if not annotations.has_data:
+ return self.pass_test(
+ None, "No annotations found. This may be expected if no manual annotations were made."
+ )
+
+ annotations_made = t.cast(pd.DataFrame, annotations.data)
+ if annotations_made.empty:
+ return self.pass_test(
+ None, "No annotations found. This may be expected if no manual annotations were made."
+ )
+
+ data = annotations_made["data"].to_dict() # this will be a series of strings
+ return self.warn_test(None, "Annotations found", context=data)
+
class Rendering(qc.Suite):
def __init__(self, render_sync_state: contract.csv.Csv, photodiode_events: pd.Series, expected_fps: float):
From 2d1adce035065fb59b22aaeea2f5dba5c615d38d Mon Sep 17 00:00:00 2001
From: bruno-f-cruz <7049351+bruno-f-cruz@users.noreply.github.com>
Date: Sat, 14 Feb 2026 11:03:03 -0800
Subject: [PATCH 04/31] Linting
---
examples/task_patch_foraging.py | 3 +--
examples/test_single_site_patch.py | 3 +--
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/examples/task_patch_foraging.py b/examples/task_patch_foraging.py
index 283dd389..7198a72e 100644
--- a/examples/task_patch_foraging.py
+++ b/examples/task_patch_foraging.py
@@ -1,9 +1,8 @@
import os
import aind_behavior_services.task.distributions as distributions
-from aind_behavior_curriculum import Stage, TrainerState
-
import aind_behavior_vr_foraging.task as vr_task_logic
+from aind_behavior_curriculum import Stage, TrainerState
def NumericalUpdaterParametersHelper(initial_value, increment, decrement, minimum, maximum):
diff --git a/examples/test_single_site_patch.py b/examples/test_single_site_patch.py
index 32ef8890..233f3116 100644
--- a/examples/test_single_site_patch.py
+++ b/examples/test_single_site_patch.py
@@ -2,9 +2,8 @@
from typing import Optional
import aind_behavior_services.task.distributions as distributions
-from aind_behavior_curriculum import Stage, TrainerState
-
import aind_behavior_vr_foraging.task as vr_task_logic
+from aind_behavior_curriculum import Stage, TrainerState
from aind_behavior_vr_foraging.task import (
AindVrForagingTaskLogic,
AindVrForagingTaskParameters,
From 3fde85c2ae8802a50f9a5597933158e15a2d1d4b Mon Sep 17 00:00:00 2001
From: bruno-f-cruz <7049351+bruno-f-cruz@users.noreply.github.com>
Date: Sat, 14 Feb 2026 12:07:29 -0800
Subject: [PATCH 05/31] Update references to aind-behavior-services 0.13
release
---
examples/rig.py | 144 +-
examples/session.py | 6 +-
examples/task_patch_foraging.py | 3 +-
examples/test_single_site_patch.py | 5 +-
pyproject.toml | 6 +-
scripts/aind.py | 2 +-
.../aind_behavior_vr_foraging.json | 1247 ++---
.../AindBehaviorVrForaging.Generated.cs | 4428 ++++++-----------
.../data_mappers/_session.py | 2 +-
src/aind_behavior_vr_foraging/regenerate.py | 8 +-
src/main.bonsai | 109 +-
src/test_deserialization.bonsai | 26 +-
tests/test_bonsai.py | 2 +-
uv.lock | 565 ++-
14 files changed, 2373 insertions(+), 4180 deletions(-)
diff --git a/examples/rig.py b/examples/rig.py
index b55ccf99..33ab84d1 100644
--- a/examples/rig.py
+++ b/examples/rig.py
@@ -1,41 +1,31 @@
import datetime
import os
-import aind_behavior_services.rig as rig
-from aind_behavior_services.calibration.aind_manipulator import (
+from aind_behavior_services.rig import cameras, visual_stimulation
+from aind_behavior_services.rig.aind_manipulator import (
AindManipulatorCalibration,
- AindManipulatorCalibrationInput,
- AindManipulatorCalibrationOutput,
Axis,
AxisConfiguration,
ManipulatorPosition,
)
-from aind_behavior_services.calibration.olfactometer import (
+from aind_behavior_services.rig.harp import (
+ HarpBehavior,
+ HarpLicketySplit,
+ HarpSniffDetector,
+ HarpWhiteRabbit,
+)
+from aind_behavior_services.rig.olfactometer import (
Olfactometer,
OlfactometerCalibration,
- OlfactometerCalibrationInput,
- OlfactometerCalibrationOutput,
OlfactometerChannel,
OlfactometerChannelConfig,
OlfactometerChannelType,
)
-from aind_behavior_services.calibration.treadmill import (
+from aind_behavior_services.rig.treadmill import (
Treadmill,
TreadmillCalibration,
- TreadmillCalibrationInput,
- TreadmillCalibrationOutput,
-)
-from aind_behavior_services.calibration.water_valve import (
- Measurement,
- WaterValveCalibration,
- WaterValveCalibrationInput,
-)
-from aind_behavior_services.rig.harp import (
- HarpBehavior,
- HarpLicketySplit,
- HarpSniffDetector,
- HarpWhiteRabbit,
)
+from aind_behavior_services.rig.water_valve import Measurement, calibrate_water_valves
from aind_behavior_vr_foraging.rig import (
AindManipulatorDevice,
@@ -44,85 +34,78 @@
)
manipulator_calibration = AindManipulatorCalibration(
- output=AindManipulatorCalibrationOutput(),
- input=AindManipulatorCalibrationInput(
- full_step_to_mm=(ManipulatorPosition(x=0.010, y1=0.010, y2=0.010, z=0.010)),
- axis_configuration=[
- AxisConfiguration(axis=Axis.Y1, min_limit=-0.01, max_limit=25),
- AxisConfiguration(axis=Axis.Y2, min_limit=-0.01, max_limit=25),
- AxisConfiguration(axis=Axis.X, min_limit=-0.01, max_limit=25),
- AxisConfiguration(axis=Axis.Z, min_limit=-0.01, max_limit=25),
- ],
- homing_order=[Axis.Y1, Axis.Y2, Axis.X, Axis.Z],
- initial_position=ManipulatorPosition(y1=0, y2=0, x=0, z=0),
- ),
+ full_step_to_mm=(ManipulatorPosition(x=0.010, y1=0.010, y2=0.010, z=0.010)),
+ axis_configuration=[
+ AxisConfiguration(axis=Axis.Y1, min_limit=-0.01, max_limit=25),
+ AxisConfiguration(axis=Axis.Y2, min_limit=-0.01, max_limit=25),
+ AxisConfiguration(axis=Axis.X, min_limit=-0.01, max_limit=25),
+ AxisConfiguration(axis=Axis.Z, min_limit=-0.01, max_limit=25),
+ ],
+ homing_order=[Axis.Y1, Axis.Y2, Axis.X, Axis.Z],
+ initial_position=ManipulatorPosition(y1=0, y2=0, x=0, z=0),
)
olfactometer_calibration = OlfactometerCalibration(
- output=OlfactometerCalibrationOutput(),
date=datetime.datetime.now(),
- input=OlfactometerCalibrationInput(
- channel_config={
- OlfactometerChannel.Channel0: OlfactometerChannelConfig(
- channel_index=OlfactometerChannel.Channel0,
- channel_type=OlfactometerChannelType.ODOR,
- flow_rate_capacity=100,
- flow_rate=100,
- odorant="Amyl Acetate",
- odorant_dilution=1.5,
- ),
- OlfactometerChannel.Channel1: OlfactometerChannelConfig(
- channel_index=OlfactometerChannel.Channel1,
- channel_type=OlfactometerChannelType.ODOR,
- flow_rate_capacity=100,
- flow_rate=100,
- odorant="Banana",
- odorant_dilution=1.5,
- ),
- OlfactometerChannel.Channel2: OlfactometerChannelConfig(
- channel_index=OlfactometerChannel.Channel2,
- channel_type=OlfactometerChannelType.ODOR,
- flow_rate_capacity=100,
- flow_rate=100,
- odorant="Apple",
- odorant_dilution=1.5,
- ),
- OlfactometerChannel.Channel3: OlfactometerChannelConfig(
- channel_index=OlfactometerChannel.Channel3,
- channel_type=OlfactometerChannelType.CARRIER,
- flow_rate_capacity=1000,
- ),
- }
- ),
+ channel_config={
+ OlfactometerChannel.Channel0: OlfactometerChannelConfig(
+ channel_index=OlfactometerChannel.Channel0,
+ channel_type=OlfactometerChannelType.ODOR,
+ flow_rate_capacity=100,
+ flow_rate=100,
+ odorant="Amyl Acetate",
+ odorant_dilution=1.5,
+ ),
+ OlfactometerChannel.Channel1: OlfactometerChannelConfig(
+ channel_index=OlfactometerChannel.Channel1,
+ channel_type=OlfactometerChannelType.ODOR,
+ flow_rate_capacity=100,
+ flow_rate=100,
+ odorant="Banana",
+ odorant_dilution=1.5,
+ ),
+ OlfactometerChannel.Channel2: OlfactometerChannelConfig(
+ channel_index=OlfactometerChannel.Channel2,
+ channel_type=OlfactometerChannelType.ODOR,
+ flow_rate_capacity=100,
+ flow_rate=100,
+ odorant="Apple",
+ odorant_dilution=1.5,
+ ),
+ OlfactometerChannel.Channel3: OlfactometerChannelConfig(
+ channel_index=OlfactometerChannel.Channel3,
+ channel_type=OlfactometerChannelType.CARRIER,
+ flow_rate_capacity=1000,
+ ),
+ },
)
-water_valve_input = WaterValveCalibrationInput(
+water_valve_calibration = calibrate_water_valves(
measurements=[
Measurement(valve_open_interval=0.2, valve_open_time=0.01, water_weight=[0.6, 0.6], repeat_count=200),
Measurement(valve_open_interval=0.2, valve_open_time=0.02, water_weight=[1.2, 1.2], repeat_count=200),
]
)
-water_valve_calibration = WaterValveCalibration(
- input=water_valve_input, output=water_valve_input.calibrate_output(), date=datetime.datetime.now()
-)
-video_writer = rig.cameras.VideoWriterFfmpeg(frame_rate=120, container_extension="mp4")
+video_writer = cameras.VideoWriterFfmpeg(frame_rate=120, container_extension="mp4")
rig = AindVrForagingRig(
+ data_directory=r"C:/data",
+ computer_name="TestRigComputer",
rig_name="test_rig",
- triggered_camera_controller=rig.cameras.CameraController[rig.cameras.SpinnakerCamera](
+ triggered_camera_controller=cameras.CameraController[cameras.SpinnakerCamera](
frame_rate=120,
cameras={
- "FaceCamera": rig.cameras.SpinnakerCamera(
+ "FaceCamera": cameras.SpinnakerCamera(
serial_number="SerialNumber", binning=1, exposure=5000, gain=0, video_writer=video_writer
),
- "SideCamera": rig.cameras.SpinnakerCamera(
+ "SideCamera": cameras.SpinnakerCamera(
serial_number="SerialNumber", binning=1, exposure=5000, gain=0, video_writer=video_writer
),
},
),
- monitoring_camera_controller=rig.cameras.CameraController[rig.cameras.WebCamera](
- cameras={"WebCam0": rig.cameras.WebCamera(index=0)}
+ monitoring_camera_controller=cameras.CameraController[cameras.WebCamera](
+ cameras={"WebCam0": cameras.WebCamera(index=0)}
),
harp_behavior=HarpBehavior(port_name="COM3"),
harp_olfactometer=Olfactometer(port_name="COM4", calibration=olfactometer_calibration),
@@ -133,14 +116,11 @@
harp_treadmill=Treadmill(
port_name="COM8",
calibration=TreadmillCalibration(
- input=TreadmillCalibrationInput(),
- output=TreadmillCalibrationOutput(
- wheel_diameter=15, pulses_per_revolution=28800, brake_lookup_calibration=[[0, 0], [1, 65535]]
- ),
+ wheel_diameter=15, pulses_per_revolution=28800, brake_lookup_calibration=[[0, 0], [1, 65535]]
),
),
manipulator=AindManipulatorDevice(port_name="COM9", calibration=manipulator_calibration),
- screen=rig.visual_stimulation.Screen(display_index=1),
+ screen=visual_stimulation.ScreenAssembly(display_index=1),
calibration=RigCalibration(water_valve=water_valve_calibration),
)
diff --git a/examples/session.py b/examples/session.py
index 3fed0bf1..d8e9c512 100644
--- a/examples/session.py
+++ b/examples/session.py
@@ -1,15 +1,13 @@
import datetime
import os
-from aind_behavior_services.session import AindBehaviorSessionModel
+from aind_behavior_services.session import Session
-session = AindBehaviorSessionModel(
+session = Session(
date=datetime.datetime.now(tz=datetime.timezone.utc),
experiment="AindVrForaging",
- root_path="c://",
subject="test",
notes="test session",
- experiment_version="0.1.0",
allow_dirty_repo=True,
skip_hardware_validation=False,
experimenter=["Foo", "Bar"],
diff --git a/examples/task_patch_foraging.py b/examples/task_patch_foraging.py
index 7198a72e..25d0c0d9 100644
--- a/examples/task_patch_foraging.py
+++ b/examples/task_patch_foraging.py
@@ -1,9 +1,10 @@
import os
import aind_behavior_services.task.distributions as distributions
-import aind_behavior_vr_foraging.task as vr_task_logic
from aind_behavior_curriculum import Stage, TrainerState
+import aind_behavior_vr_foraging.task_logic as vr_task_logic
+
def NumericalUpdaterParametersHelper(initial_value, increment, decrement, minimum, maximum):
return vr_task_logic.NumericalUpdaterParameters(
diff --git a/examples/test_single_site_patch.py b/examples/test_single_site_patch.py
index 233f3116..ce424ccd 100644
--- a/examples/test_single_site_patch.py
+++ b/examples/test_single_site_patch.py
@@ -2,9 +2,10 @@
from typing import Optional
import aind_behavior_services.task.distributions as distributions
-import aind_behavior_vr_foraging.task as vr_task_logic
from aind_behavior_curriculum import Stage, TrainerState
-from aind_behavior_vr_foraging.task import (
+
+import aind_behavior_vr_foraging.task_logic as vr_task_logic
+from aind_behavior_vr_foraging.task_logic import (
AindVrForagingTaskLogic,
AindVrForagingTaskParameters,
)
diff --git a/pyproject.toml b/pyproject.toml
index 91c216ad..92755008 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -12,11 +12,11 @@ classifiers = [
"Programming Language :: Python :: 3.11",
"Operating System :: Microsoft :: Windows",
]
-version = "0.6.5"
+version = "0.7.0rc0"
readme = {file = "README.md", content-type = "text/markdown"}
dependencies = [
- "aind_behavior_services@git+https://github.com/AllenNeuralDynamics/Aind.Behavior.Services@refactor-class-names",
+ "aind_behavior_services>=0.13",
"pydantic-settings"
]
@@ -31,7 +31,7 @@ Changelog = "https://github.com/AllenNeuralDynamics/Aind.Behavior.VrForaging/rel
data = ["contraqctor>=0.5.3, <0.6.0"]
launcher = [
- "aind-clabe[aind-services]@git+https://github.com/AllenNeuralDynamics/clabe@refactor-against-aind-behavior-services-breaking",
+ "aind-clabe[aind-services]>=0.9",
"aind-data-schema>=2.4",
"aind_behavior_vr_foraging[data]",
]
diff --git a/scripts/aind.py b/scripts/aind.py
index 43f8ab31..4315aba1 100644
--- a/scripts/aind.py
+++ b/scripts/aind.py
@@ -5,7 +5,6 @@
from aind_behavior_services.rig.aind_manipulator import ManipulatorPosition
from aind_behavior_services.session import Session
from aind_behavior_services.utils import utcnow
-from aind_behavior_vr_foraging.task import AindVrForagingTaskLogic
from clabe import resource_monitor
from clabe.apps import (
AindBehaviorServicesBonsaiApp,
@@ -23,6 +22,7 @@
from aind_behavior_vr_foraging import data_contract
from aind_behavior_vr_foraging.data_mappers import DataMapperCli
from aind_behavior_vr_foraging.rig import AindVrForagingRig
+from aind_behavior_vr_foraging.task_logic import AindVrForagingTaskLogic
logger = logging.getLogger(__name__)
diff --git a/src/DataSchemas/aind_behavior_vr_foraging.json b/src/DataSchemas/aind_behavior_vr_foraging.json
index 6c214c71..365cb979 100644
--- a/src/DataSchemas/aind_behavior_vr_foraging.json
+++ b/src/DataSchemas/aind_behavior_vr_foraging.json
@@ -1,193 +1,14 @@
{
"$defs": {
- "AindBehaviorSessionModel": {
- "properties": {
- "aind_behavior_services_pkg_version": {
- "default": "0.12.5",
- "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
- "title": "aind_behavior_services package version",
- "type": "string"
- },
- "version": {
- "const": "0.12.5",
- "default": "0.12.5",
- "title": "Version",
- "type": "string"
- },
- "experiment": {
- "default": null,
- "description": "Name of the experiment",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Experiment"
- },
- "experimenter": {
- "default": [],
- "description": "Name of the experimenter",
- "items": {
- "type": "string"
- },
- "title": "Experimenter",
- "type": "array"
- },
- "date": {
- "description": "Date of the experiment",
- "format": "date-time",
- "title": "Date",
- "type": "string"
- },
- "root_path": {
- "description": "Root path where data will be logged",
- "title": "Root Path",
- "type": "string"
- },
- "session_name": {
- "default": null,
- "description": "Name of the session. This will be used to create a folder in the root path. If not provided, it will be generated using subject and date.",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Session Name"
- },
- "subject": {
- "description": "Name of the subject",
- "title": "Subject",
- "type": "string"
- },
- "experiment_version": {
- "default": "",
- "deprecated": true,
- "description": "Version of the experiment",
- "title": "Experiment Version",
- "type": "string"
- },
- "notes": {
- "default": null,
- "description": "Notes about the experiment",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Notes"
- },
- "commit_hash": {
- "default": null,
- "description": "Commit hash of the repository",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Commit Hash"
- },
- "allow_dirty_repo": {
- "default": false,
- "description": "Allow running from a dirty repository",
- "title": "Allow Dirty Repo",
- "type": "boolean"
- },
- "skip_hardware_validation": {
- "default": false,
- "description": "Skip hardware validation",
- "title": "Skip Hardware Validation",
- "type": "boolean"
- }
- },
- "required": [
- "root_path",
- "subject"
- ],
- "title": "AindBehaviorSessionModel",
- "type": "object"
- },
- "AindManipulatorAdditionalSettings": {
- "description": "Additional settings for the manipulator device",
- "properties": {
- "spout_axis": {
- "$ref": "#/$defs/Axis",
- "default": 2,
- "description": "Spout axis"
- }
- },
- "title": "AindManipulatorAdditionalSettings",
- "type": "object"
- },
"AindManipulatorCalibration": {
- "description": "Aind manipulator calibration class",
+ "description": "AindManipulator calibration class",
"properties": {
- "device_name": {
- "default": "AindManipulator",
- "description": "Must match a device name in rig/instrument",
- "title": "Device name",
- "type": "string"
- },
- "input": {
- "$ref": "#/$defs/AindManipulatorCalibrationInput",
- "title": "Input of the calibration"
- },
- "output": {
- "$ref": "#/$defs/AindManipulatorCalibrationOutput",
- "title": "Output of the calibration."
- },
- "date": {
- "default": null,
- "oneOf": [
- {
- "format": "date-time",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Date"
- },
"description": {
- "const": "Calibration of the load cells system",
- "default": "Calibration of the load cells system",
+ "const": "AindManipulator calibration and settings",
+ "default": "AindManipulator calibration and settings",
"title": "Description",
"type": "string"
},
- "notes": {
- "default": null,
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Notes"
- }
- },
- "required": [
- "input",
- "output"
- ],
- "title": "AindManipulatorCalibration",
- "type": "object"
- },
- "AindManipulatorCalibrationInput": {
- "properties": {
"full_step_to_mm": {
"$ref": "#/$defs/ManipulatorPosition",
"default": {
@@ -270,16 +91,11 @@
}
}
},
- "title": "AindManipulatorCalibrationInput",
- "type": "object"
- },
- "AindManipulatorCalibrationOutput": {
- "properties": {},
- "title": "AindManipulatorCalibrationOutput",
+ "title": "AindManipulatorCalibration",
"type": "object"
},
"AindManipulatorDevice": {
- "description": "Overrides the default settings for the manipulator device by spec'ing additional_settings field",
+ "description": "Appends a task specific configuration to the base manipulator model.",
"properties": {
"device_type": {
"const": "StepperDriver",
@@ -287,37 +103,72 @@
"title": "Device Type",
"type": "string"
},
- "device_name": {
- "default": null,
- "description": "Device name",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Device Name"
- },
- "additional_settings": {
- "$ref": "#/$defs/AindManipulatorAdditionalSettings",
- "default": {
- "spout_axis": 2
- },
- "description": "Additional settings"
- },
"calibration": {
- "default": null,
- "oneOf": [
- {
- "$ref": "#/$defs/AindManipulatorCalibration"
- },
- {
- "type": "null"
+ "$ref": "#/$defs/AindManipulatorCalibration",
+ "default": {
+ "description": "AindManipulator calibration and settings",
+ "full_step_to_mm": {
+ "x": 0.01,
+ "y1": 0.01,
+ "y2": 0.01,
+ "z": 0.01
+ },
+ "axis_configuration": [
+ {
+ "axis": 2,
+ "max_limit": 25.0,
+ "maximum_step_interval": 2000,
+ "microstep_resolution": 0,
+ "min_limit": -0.01,
+ "motor_operation_mode": 0,
+ "step_acceleration_interval": 100,
+ "step_interval": 100
+ },
+ {
+ "axis": 3,
+ "max_limit": 25.0,
+ "maximum_step_interval": 2000,
+ "microstep_resolution": 0,
+ "min_limit": -0.01,
+ "motor_operation_mode": 0,
+ "step_acceleration_interval": 100,
+ "step_interval": 100
+ },
+ {
+ "axis": 1,
+ "max_limit": 25.0,
+ "maximum_step_interval": 2000,
+ "microstep_resolution": 0,
+ "min_limit": -0.01,
+ "motor_operation_mode": 0,
+ "step_acceleration_interval": 100,
+ "step_interval": 100
+ },
+ {
+ "axis": 4,
+ "max_limit": 25.0,
+ "maximum_step_interval": 2000,
+ "microstep_resolution": 0,
+ "min_limit": -0.01,
+ "motor_operation_mode": 0,
+ "step_acceleration_interval": 100,
+ "step_interval": 100
+ }
+ ],
+ "homing_order": [
+ 2,
+ 3,
+ 1,
+ 4
+ ],
+ "initial_position": {
+ "x": 0.0,
+ "y1": 0.0,
+ "y2": 0.0,
+ "z": 0.0
}
- ],
- "title": "Calibration of the manipulator"
+ },
+ "description": "Calibration for the device."
},
"who_am_i": {
"const": 1130,
@@ -342,6 +193,11 @@
"description": "Device port name",
"title": "Port Name",
"type": "string"
+ },
+ "spout_axis": {
+ "$ref": "#/$defs/Axis",
+ "default": 2,
+ "description": "Spout axis"
}
},
"required": [
@@ -353,14 +209,14 @@
"AindVrForagingRig": {
"properties": {
"aind_behavior_services_pkg_version": {
- "default": "0.12.5",
+ "default": "0.13.0",
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
"title": "aind_behavior_services package version",
"type": "string"
},
"version": {
- "const": "0.6.5",
- "default": "0.6.5",
+ "const": "0.7.0-rc0",
+ "default": "0.7.0-rc0",
"title": "Version",
"type": "string"
},
@@ -374,6 +230,12 @@
"title": "Rig Name",
"type": "string"
},
+ "data_directory": {
+ "description": "Directory where data will be saved to",
+ "format": "path",
+ "title": "Data Directory",
+ "type": "string"
+ },
"triggered_camera_controller": {
"$ref": "#/$defs/CameraController_SpinnakerCamera_",
"description": "Required camera controller to triggered cameras."
@@ -451,11 +313,9 @@
"description": "Manipulator"
},
"screen": {
- "$ref": "#/$defs/Screen",
+ "$ref": "#/$defs/ScreenAssembly",
"default": {
- "device_type": "Screen",
- "device_name": "Screen",
- "additional_settings": null,
+ "device_type": "ScreenAssembly",
"calibration": {
"center": {
"extrinsics": {
@@ -533,7 +393,9 @@
}
},
"required": [
+ "computer_name",
"rig_name",
+ "data_directory",
"triggered_camera_controller",
"harp_behavior",
"harp_olfactometer",
@@ -568,8 +430,8 @@
"description": "Parameters of the task logic"
},
"version": {
- "const": "0.6.5",
- "default": "0.6.5",
+ "const": "0.7.0-rc0",
+ "default": "0.7.0-rc0",
"title": "Version",
"type": "string"
},
@@ -611,7 +473,7 @@
"title": "Rng Seed"
},
"aind_behavior_services_pkg_version": {
- "default": "0.12.5",
+ "default": "0.13.0",
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
"title": "aind_behavior_services package version",
"type": "string"
@@ -1082,34 +944,9 @@
"title": "Device Type",
"type": "string"
},
- "device_name": {
- "default": null,
- "description": "Device name",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Device Name"
- },
- "additional_settings": {
- "default": null,
- "description": "Additional settings",
- "oneOf": [
- {
- "$ref": "#/$defs/BaseModel"
- },
- {
- "type": "null"
- }
- ]
- },
"calibration": {
"default": null,
- "description": "Calibration",
+ "description": "Calibration for the device.",
"oneOf": [
{
"$ref": "#/$defs/BaseModel"
@@ -1156,34 +993,9 @@
"title": "Device Type",
"type": "string"
},
- "device_name": {
- "default": null,
- "description": "Device name",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Device Name"
- },
- "additional_settings": {
- "default": null,
- "description": "Additional settings",
- "oneOf": [
- {
- "$ref": "#/$defs/BaseModel"
- },
- {
- "type": "null"
- }
- ]
- },
"calibration": {
"default": null,
- "description": "Calibration",
+ "description": "Calibration for the device.",
"oneOf": [
{
"$ref": "#/$defs/BaseModel"
@@ -1364,10 +1176,30 @@
"type": "array"
},
"rho": {
- "description": "The underlying value goverining the stochastic process",
+ "description": "The underlying value governing the stochastic process",
"title": "Rho",
"type": "number"
},
+ "dt": {
+ "const": 0.1,
+ "default": 0.1,
+ "description": "Sampling time step (s)",
+ "title": "Dt",
+ "type": "number"
+ },
+ "rate": {
+ "default": null,
+ "description": "Rate of the replenishment used to generate the matrix. This value is used for metadata keep sake only",
+ "oneOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Rate"
+ },
"minimum": {
"default": 1,
"description": "Maximum value after update",
@@ -1389,6 +1221,7 @@
"type": "object"
},
"DisplayCalibration": {
+ "description": "Represents the calibration parameters of a display.",
"properties": {
"intrinsics": {
"$ref": "#/$defs/DisplayIntrinsics",
@@ -1421,9 +1254,10 @@
"type": "object"
},
"DisplayExtrinsics": {
+ "description": "Represents the extrinsic parameters of a display.",
"properties": {
"rotation": {
- "$ref": "#/$defs/aind_behavior_services__rig__visual_stimulation__Vector3",
+ "$ref": "#/$defs/aind_behavior_services__common__Vector3",
"default": {
"x": 0.0,
"y": 0.0,
@@ -1432,7 +1266,7 @@
"description": "Rotation vector (radians)"
},
"translation": {
- "$ref": "#/$defs/aind_behavior_services__rig__visual_stimulation__Vector3",
+ "$ref": "#/$defs/aind_behavior_services__common__Vector3",
"default": {
"x": 0.0,
"y": 1.309016,
@@ -1445,6 +1279,7 @@
"type": "object"
},
"DisplayIntrinsics": {
+ "description": "Represents the intrinsic parameters of a display.",
"properties": {
"frame_width": {
"default": 1920,
@@ -1478,84 +1313,6 @@
"title": "DisplayIntrinsics",
"type": "object"
},
- "DisplaysCalibration": {
- "properties": {
- "left": {
- "$ref": "#/$defs/DisplayCalibration",
- "default": {
- "intrinsics": {
- "display_height": 15.0,
- "display_width": 20.0,
- "frame_height": 1080,
- "frame_width": 1920
- },
- "extrinsics": {
- "rotation": {
- "x": 0.0,
- "y": 1.0472,
- "z": 0.0
- },
- "translation": {
- "x": -16.6917756,
- "y": 1.309016,
- "z": -3.575264
- }
- }
- },
- "description": "Left display calibration"
- },
- "center": {
- "$ref": "#/$defs/DisplayCalibration",
- "default": {
- "intrinsics": {
- "display_height": 15.0,
- "display_width": 20.0,
- "frame_height": 1080,
- "frame_width": 1920
- },
- "extrinsics": {
- "rotation": {
- "x": 0.0,
- "y": 0.0,
- "z": 0.0
- },
- "translation": {
- "x": 0.0,
- "y": 1.309016,
- "z": -13.27
- }
- }
- },
- "description": "Center display calibration"
- },
- "right": {
- "$ref": "#/$defs/DisplayCalibration",
- "default": {
- "intrinsics": {
- "display_height": 15.0,
- "display_width": 20.0,
- "frame_height": 1080,
- "frame_width": 1920
- },
- "extrinsics": {
- "rotation": {
- "x": 0.0,
- "y": -1.0472,
- "z": 0.0
- },
- "translation": {
- "x": 16.6917756,
- "y": 1.309016,
- "z": -3.575264
- }
- }
- },
- "description": "Right display calibration"
- }
- },
- "title": "DisplaysCalibration",
- "type": "object"
- },
"Distribution": {
"description": "Available distributions",
"discriminator": {
@@ -1803,34 +1560,9 @@
"title": "Device Type",
"type": "string"
},
- "device_name": {
- "default": null,
- "description": "Device name",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Device Name"
- },
- "additional_settings": {
- "default": null,
- "description": "Additional settings",
- "oneOf": [
- {
- "$ref": "#/$defs/BaseModel"
- },
- {
- "type": "null"
- }
- ]
- },
"calibration": {
"default": null,
- "description": "Calibration",
+ "description": "Calibration for the device.",
"oneOf": [
{
"$ref": "#/$defs/BaseModel"
@@ -1879,34 +1611,9 @@
"title": "Device Type",
"type": "string"
},
- "device_name": {
- "default": null,
- "description": "Device name",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Device Name"
- },
- "additional_settings": {
- "default": null,
- "description": "Additional settings",
- "oneOf": [
- {
- "$ref": "#/$defs/BaseModel"
- },
- {
- "type": "null"
- }
- ]
- },
"calibration": {
"default": null,
- "description": "Calibration",
+ "description": "Calibration for the device.",
"oneOf": [
{
"$ref": "#/$defs/BaseModel"
@@ -1955,34 +1662,9 @@
"title": "Device Type",
"type": "string"
},
- "device_name": {
- "default": null,
- "description": "Device name",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Device Name"
- },
- "additional_settings": {
- "default": null,
- "description": "Additional settings",
- "oneOf": [
- {
- "$ref": "#/$defs/BaseModel"
- },
- {
- "type": "null"
- }
- ]
- },
"calibration": {
"default": null,
- "description": "Calibration",
+ "description": "Calibration for the device.",
"oneOf": [
{
"$ref": "#/$defs/BaseModel"
@@ -2031,34 +1713,9 @@
"title": "Device Type",
"type": "string"
},
- "device_name": {
- "default": null,
- "description": "Device name",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Device Name"
- },
- "additional_settings": {
- "default": null,
- "description": "Additional settings",
- "oneOf": [
- {
- "$ref": "#/$defs/BaseModel"
- },
- {
- "type": "null"
- }
- ]
- },
"calibration": {
"default": null,
- "description": "Calibration",
+ "description": "Calibration for the device.",
"oneOf": [
{
"$ref": "#/$defs/BaseModel"
@@ -2107,34 +1764,9 @@
"title": "Device Type",
"type": "string"
},
- "device_name": {
- "default": null,
- "description": "Device name",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Device Name"
- },
- "additional_settings": {
- "default": null,
- "description": "Additional settings",
- "oneOf": [
- {
- "$ref": "#/$defs/BaseModel"
- },
- {
- "type": "null"
- }
- ]
- },
"calibration": {
"default": null,
- "description": "Calibration",
+ "description": "Calibration for the device.",
"oneOf": [
{
"$ref": "#/$defs/BaseModel"
@@ -2183,34 +1815,9 @@
"title": "Device Type",
"type": "string"
},
- "device_name": {
- "default": null,
- "description": "Device name",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Device Name"
- },
- "additional_settings": {
- "default": null,
- "description": "Additional settings",
- "oneOf": [
- {
- "$ref": "#/$defs/BaseModel"
- },
- {
- "type": "null"
- }
- ]
- },
"calibration": {
"default": null,
- "description": "Calibration",
+ "description": "Calibration for the device.",
"oneOf": [
{
"$ref": "#/$defs/BaseModel"
@@ -2367,6 +1974,7 @@
"type": "object"
},
"ManipulatorPosition": {
+ "description": "Represents a position in the manipulator coordinate system",
"properties": {
"x": {
"title": "X coordinate",
@@ -2436,6 +2044,7 @@
"type": "object"
},
"MicrostepResolution": {
+ "description": "Microstep resolution available",
"enum": [
0,
1,
@@ -2452,6 +2061,7 @@
]
},
"MotorOperationMode": {
+ "description": "Motor operation mode",
"enum": [
0,
1
@@ -2710,6 +2320,7 @@
"type": "object"
},
"Olfactometer": {
+ "description": "A calibrated olfactometer device",
"properties": {
"device_type": {
"const": "Olfactometer",
@@ -2717,41 +2328,12 @@
"title": "Device Type",
"type": "string"
},
- "device_name": {
- "default": null,
- "description": "Device name",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Device Name"
- },
- "additional_settings": {
- "default": null,
- "description": "Additional settings",
- "oneOf": [
- {
- "$ref": "#/$defs/BaseModel"
- },
- {
- "type": "null"
- }
- ]
- },
"calibration": {
- "default": null,
- "oneOf": [
- {
- "$ref": "#/$defs/OlfactometerCalibration"
- },
- {
- "type": "null"
- }
- ],
+ "$ref": "#/$defs/OlfactometerCalibration",
+ "default": {
+ "date": "2026-02-14T19:48:12.752548Z",
+ "channel_config": {}
+ },
"title": "Calibration of the olfactometer"
},
"who_am_i": {
@@ -2786,63 +2368,14 @@
"type": "object"
},
"OlfactometerCalibration": {
- "description": "Olfactometer calibration class",
+ "description": "Olfactometer device configuration model",
"properties": {
- "device_name": {
- "default": "Olfactometer",
- "description": "Name of the device being calibrated",
- "title": "Device name",
- "type": "string"
- },
- "input": {
- "$ref": "#/$defs/OlfactometerCalibrationInput",
- "title": "Input of the calibration"
- },
- "output": {
- "$ref": "#/$defs/OlfactometerCalibrationOutput",
- "title": "Output of the calibration"
- },
"date": {
- "default": null,
- "oneOf": [
- {
- "format": "date-time",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Date"
- },
- "description": {
- "const": "Calibration of the harp olfactometer device",
- "default": "Calibration of the harp olfactometer device",
- "title": "Description",
+ "description": "Date of the calibration",
+ "format": "date-time",
+ "title": "Date",
"type": "string"
},
- "notes": {
- "default": null,
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Notes"
- }
- },
- "required": [
- "input",
- "output"
- ],
- "title": "OlfactometerCalibration",
- "type": "object"
- },
- "OlfactometerCalibrationInput": {
- "properties": {
"channel_config": {
"additionalProperties": {
"$ref": "#/$defs/OlfactometerChannelConfig"
@@ -2856,12 +2389,7 @@
"type": "object"
}
},
- "title": "OlfactometerCalibrationInput",
- "type": "object"
- },
- "OlfactometerCalibrationOutput": {
- "properties": {},
- "title": "OlfactometerCalibrationOutput",
+ "title": "OlfactometerCalibration",
"type": "object"
},
"OlfactometerChannel": {
@@ -2882,15 +2410,16 @@
]
},
"OlfactometerChannelConfig": {
+ "description": "Configuration for a single olfactometer channel",
"properties": {
"channel_index": {
- "title": "Channel index",
+ "title": "Odor channel index",
"type": "integer"
},
"channel_type": {
"$ref": "#/$defs/OlfactometerChannelType",
"default": "Odor",
- "title": "Channel type"
+ "title": "Olfactometer channel type"
},
"flow_rate_capacity": {
"default": 100,
@@ -2939,7 +2468,7 @@
"type": "object"
},
"OlfactometerChannelType": {
- "description": "Channel type",
+ "description": "Olfactometer channel type",
"enum": [
"Odor",
"Carrier"
@@ -3895,6 +3424,7 @@
"type": "object"
},
"Rect": {
+ "description": "Represents a rectangle defined by its top-left corner, width, and height.",
"properties": {
"x": {
"default": 0,
@@ -4056,7 +3586,7 @@
"type": "object"
},
"RigCalibration": {
- "description": "Container class for calibration models. In a future release these will be moved to the respective devices",
+ "description": "Container class for calibration models.",
"properties": {
"water_valve": {
"$ref": "#/$defs/WaterValveCalibration",
@@ -4140,42 +3670,17 @@
"title": "ScalingParameters",
"type": "object"
},
- "Screen": {
+ "ScreenAssembly": {
+ "description": "Represents a screen assembly (left, center and right screens) and respective configuration.",
"properties": {
"device_type": {
- "const": "Screen",
- "default": "Screen",
- "description": "Device type",
+ "const": "ScreenAssembly",
+ "default": "ScreenAssembly",
"title": "Device Type",
"type": "string"
},
- "device_name": {
- "default": null,
- "description": "Device name",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Device Name"
- },
- "additional_settings": {
- "default": null,
- "description": "Additional settings",
- "oneOf": [
- {
- "$ref": "#/$defs/BaseModel"
- },
- {
- "type": "null"
- }
- ]
- },
"calibration": {
- "$ref": "#/$defs/DisplaysCalibration",
+ "$ref": "#/$defs/ScreenAssemblyCalibration",
"default": {
"left": {
"extrinsics": {
@@ -4238,7 +3743,7 @@
}
}
},
- "description": "Screen calibration"
+ "description": "Screen assembly calibration"
},
"display_index": {
"default": 1,
@@ -4281,7 +3786,191 @@
"type": "number"
}
},
- "title": "Screen",
+ "title": "ScreenAssembly",
+ "type": "object"
+ },
+ "ScreenAssemblyCalibration": {
+ "description": "Represents the calibration parameters for a screen assembly with three displays.",
+ "properties": {
+ "left": {
+ "$ref": "#/$defs/DisplayCalibration",
+ "default": {
+ "intrinsics": {
+ "display_height": 15.0,
+ "display_width": 20.0,
+ "frame_height": 1080,
+ "frame_width": 1920
+ },
+ "extrinsics": {
+ "rotation": {
+ "x": 0.0,
+ "y": 1.0472,
+ "z": 0.0
+ },
+ "translation": {
+ "x": -16.6917756,
+ "y": 1.309016,
+ "z": -3.575264
+ }
+ }
+ },
+ "description": "Left display calibration"
+ },
+ "center": {
+ "$ref": "#/$defs/DisplayCalibration",
+ "default": {
+ "intrinsics": {
+ "display_height": 15.0,
+ "display_width": 20.0,
+ "frame_height": 1080,
+ "frame_width": 1920
+ },
+ "extrinsics": {
+ "rotation": {
+ "x": 0.0,
+ "y": 0.0,
+ "z": 0.0
+ },
+ "translation": {
+ "x": 0.0,
+ "y": 1.309016,
+ "z": -13.27
+ }
+ }
+ },
+ "description": "Center display calibration"
+ },
+ "right": {
+ "$ref": "#/$defs/DisplayCalibration",
+ "default": {
+ "intrinsics": {
+ "display_height": 15.0,
+ "display_width": 20.0,
+ "frame_height": 1080,
+ "frame_width": 1920
+ },
+ "extrinsics": {
+ "rotation": {
+ "x": 0.0,
+ "y": -1.0472,
+ "z": 0.0
+ },
+ "translation": {
+ "x": 16.6917756,
+ "y": 1.309016,
+ "z": -3.575264
+ }
+ }
+ },
+ "description": "Right display calibration"
+ }
+ },
+ "title": "ScreenAssemblyCalibration",
+ "type": "object"
+ },
+ "Session": {
+ "properties": {
+ "aind_behavior_services_pkg_version": {
+ "default": "0.13.0",
+ "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
+ "title": "aind_behavior_services package version",
+ "type": "string"
+ },
+ "version": {
+ "const": "0.13.0",
+ "default": "0.13.0",
+ "title": "Version",
+ "type": "string"
+ },
+ "experiment": {
+ "default": null,
+ "description": "Name of the experiment",
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Experiment"
+ },
+ "experimenter": {
+ "default": [],
+ "description": "Name of the experimenter",
+ "items": {
+ "type": "string"
+ },
+ "title": "Experimenter",
+ "type": "array"
+ },
+ "date": {
+ "description": "Date of the experiment",
+ "format": "date-time",
+ "title": "Date",
+ "type": "string"
+ },
+ "session_name": {
+ "default": null,
+ "description": "Name of the session. This will be used to create a folder in the root path. If not provided, it will be generated using subject and date.",
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Session Name"
+ },
+ "subject": {
+ "description": "Name of the subject",
+ "title": "Subject",
+ "type": "string"
+ },
+ "notes": {
+ "default": null,
+ "description": "Notes about the experiment",
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Notes"
+ },
+ "commit_hash": {
+ "default": null,
+ "description": "Commit hash of the repository",
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Commit Hash"
+ },
+ "allow_dirty_repo": {
+ "default": false,
+ "description": "Allow running from a dirty repository",
+ "title": "Allow Dirty Repo",
+ "type": "boolean"
+ },
+ "skip_hardware_validation": {
+ "default": false,
+ "description": "Skip hardware validation",
+ "title": "Skip Hardware Validation",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "subject"
+ ],
+ "title": "Session",
"type": "object"
},
"SetValueFunction": {
@@ -4324,42 +4013,17 @@
"type": "object"
},
"SpinnakerCamera": {
+ "description": "Spinnaker camera device configuration.",
"properties": {
"device_type": {
"const": "SpinnakerCamera",
"default": "SpinnakerCamera",
- "description": "Device type",
"title": "Device Type",
"type": "string"
},
- "device_name": {
- "default": null,
- "description": "Device name",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Device Name"
- },
- "additional_settings": {
- "default": null,
- "description": "Additional settings",
- "oneOf": [
- {
- "$ref": "#/$defs/BaseModel"
- },
- {
- "type": "null"
- }
- ]
- },
"calibration": {
"default": null,
- "description": "Calibration",
+ "description": "Calibration for the device.",
"oneOf": [
{
"$ref": "#/$defs/BaseModel"
@@ -4473,6 +4137,7 @@
"type": "object"
},
"SpinnakerCameraAdcBitDepth": {
+ "description": "ADC bit depth options for Spinnaker cameras.",
"enum": [
0,
1,
@@ -4487,6 +4152,7 @@
]
},
"SpinnakerCameraPixelFormat": {
+ "description": "Pixel format options for Spinnaker cameras.",
"enum": [
0,
1,
@@ -4804,6 +4470,7 @@
"type": "object"
},
"Treadmill": {
+ "description": "A calibrated treadmill device",
"properties": {
"device_type": {
"const": "Treadmill",
@@ -4811,41 +4478,24 @@
"title": "Device Type",
"type": "string"
},
- "device_name": {
- "default": null,
- "description": "Device name",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Device Name"
- },
- "additional_settings": {
- "default": null,
- "description": "Additional settings",
- "oneOf": [
- {
- "$ref": "#/$defs/BaseModel"
- },
- {
- "type": "null"
- }
- ]
- },
"calibration": {
- "default": null,
- "oneOf": [
- {
- "$ref": "#/$defs/TreadmillCalibration"
- },
- {
- "type": "null"
- }
- ],
+ "$ref": "#/$defs/TreadmillCalibration",
+ "default": {
+ "date": "2026-02-14T19:48:12.755298Z",
+ "wheel_diameter": 15.0,
+ "pulses_per_revolution": 28800,
+ "invert_direction": false,
+ "brake_lookup_calibration": [
+ [
+ 0.0,
+ 0.0
+ ],
+ [
+ 1.0,
+ 65535.0
+ ]
+ ]
+ },
"title": "Calibration of the treadmill"
},
"who_am_i": {
@@ -4882,66 +4532,12 @@
"TreadmillCalibration": {
"description": "Treadmill calibration class",
"properties": {
- "device_name": {
- "default": "Treadmill",
- "description": "Must match a device name in rig/instrument",
- "title": "Device name",
- "type": "string"
- },
- "input": {
- "$ref": "#/$defs/TreadmillCalibrationInput",
- "title": "Input of the calibration"
- },
- "output": {
- "$ref": "#/$defs/TreadmillCalibrationOutput",
- "title": "Output of the calibration."
- },
"date": {
- "default": null,
- "oneOf": [
- {
- "format": "date-time",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Date"
- },
- "description": {
- "const": "Calibration of the treadmill system",
- "default": "Calibration of the treadmill system",
- "title": "Description",
+ "description": "Date of the calibration",
+ "format": "date-time",
+ "title": "Date",
"type": "string"
},
- "notes": {
- "default": null,
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Notes"
- }
- },
- "required": [
- "input",
- "output"
- ],
- "title": "TreadmillCalibration",
- "type": "object"
- },
- "TreadmillCalibrationInput": {
- "properties": {},
- "title": "TreadmillCalibrationInput",
- "type": "object"
- },
- "TreadmillCalibrationOutput": {
- "properties": {
"wheel_diameter": {
"default": 15,
"description": "Wheel diameter",
@@ -4963,6 +4559,16 @@
"type": "boolean"
},
"brake_lookup_calibration": {
+ "default": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 1,
+ 65535
+ ]
+ ],
"description": "Brake lookup calibration. Each pair of values define (input [torque], output [brake set-point U16])",
"items": {
"items": {
@@ -4977,10 +4583,7 @@
"type": "array"
}
},
- "required": [
- "brake_lookup_calibration"
- ],
- "title": "TreadmillCalibrationOutput",
+ "title": "TreadmillCalibration",
"type": "object"
},
"TreadmillSpecification": {
@@ -5130,6 +4733,7 @@
]
},
"VideoWriterFfmpeg": {
+ "description": "FFMPEG video writer configuration.",
"properties": {
"video_writer_type": {
"const": "FFMPEG",
@@ -5167,6 +4771,7 @@
"type": "object"
},
"VideoWriterOpenCv": {
+ "description": "OpenCV video writer configuration.",
"properties": {
"video_writer_type": {
"const": "OPENCV",
@@ -5428,63 +5033,14 @@
"type": "object"
},
"WaterValveCalibration": {
- "description": "Water valve calibration class",
+ "description": "Represents a water valve calibration.",
"properties": {
- "device_name": {
- "default": "WaterValve",
- "description": "Name of the device being calibrated",
- "title": "Device name",
- "type": "string"
- },
- "input": {
- "$ref": "#/$defs/WaterValveCalibrationInput",
- "title": "Input of the calibration"
- },
- "output": {
- "$ref": "#/$defs/WaterValveCalibrationOutput",
- "title": "Output of the calibration."
- },
"date": {
- "default": null,
- "oneOf": [
- {
- "format": "date-time",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Date"
- },
- "description": {
- "const": "Calibration of the water valve delivery system",
- "default": "Calibration of the water valve delivery system",
- "title": "Description",
+ "description": "Date of the calibration",
+ "format": "date-time",
+ "title": "Date",
"type": "string"
},
- "notes": {
- "default": null,
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Notes"
- }
- },
- "required": [
- "input",
- "output"
- ],
- "title": "WaterValveCalibration",
- "type": "object"
- },
- "WaterValveCalibrationInput": {
- "properties": {
"measurements": {
"default": [],
"description": "List of measurements",
@@ -5493,14 +5049,7 @@
},
"title": "Measurements",
"type": "array"
- }
- },
- "title": "WaterValveCalibrationInput",
- "type": "object"
- },
- "WaterValveCalibrationOutput": {
- "description": "Output for water valve calibration class",
- "properties": {
+ },
"interval_average": {
"default": null,
"description": "Dictionary keyed by measured valve interval and corresponding average single event volume.",
@@ -5566,46 +5115,21 @@
"slope",
"offset"
],
- "title": "WaterValveCalibrationOutput",
+ "title": "WaterValveCalibration",
"type": "object"
},
"WebCamera": {
+ "description": "Web camera device configuration.",
"properties": {
"device_type": {
"const": "WebCamera",
"default": "WebCamera",
- "description": "Device type",
"title": "Device Type",
"type": "string"
},
- "device_name": {
- "default": null,
- "description": "Device name",
- "oneOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "title": "Device Name"
- },
- "additional_settings": {
- "default": null,
- "description": "Additional settings",
- "oneOf": [
- {
- "$ref": "#/$defs/BaseModel"
- },
- {
- "type": "null"
- }
- ]
- },
"calibration": {
"default": null,
- "description": "Calibration",
+ "description": "Calibration for the device.",
"oneOf": [
{
"$ref": "#/$defs/BaseModel"
@@ -5638,23 +5162,24 @@
"title": "WebCamera",
"type": "object"
},
- "aind_behavior_services__rig__visual_stimulation__Vector3": {
+ "aind_behavior_services__common__Vector3": {
+ "description": "Represents a 3D vector with float coordinates.",
"properties": {
"x": {
"default": 0,
- "description": "X coordinate of the point",
+ "description": "X coordinate of the vector",
"title": "X",
"type": "number"
},
"y": {
"default": 0,
- "description": "Y coordinate of the point",
+ "description": "Y coordinate of the vector",
"title": "Y",
"type": "number"
},
"z": {
"default": 0,
- "description": "Z coordinate of the point",
+ "description": "Z coordinate of the vector",
"title": "Z",
"type": "number"
}
diff --git a/src/Extensions/AindBehaviorVrForaging.Generated.cs b/src/Extensions/AindBehaviorVrForaging.Generated.cs
index 924972de..ab075c46 100644
--- a/src/Extensions/AindBehaviorVrForaging.Generated.cs
+++ b/src/Extensions/AindBehaviorVrForaging.Generated.cs
@@ -9,873 +9,285 @@ namespace AindVrForagingDataSchema
{
#pragma warning disable // Disable all warnings
+ ///
+ /// AindManipulator calibration class
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("AindManipulator calibration class")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class AindBehaviorSessionModel
+ public partial class AindManipulatorCalibration
{
- private string _aindBehaviorServicesPkgVersion;
-
- private string _version;
-
- private string _experiment;
-
- private System.Collections.Generic.List _experimenter;
-
- private System.DateTimeOffset _date;
-
- private string _rootPath;
-
- private string _sessionName;
-
- private string _subject;
-
- private string _experimentVersion;
+ private string _description;
- private string _notes;
+ private ManipulatorPosition _fullStepToMm;
- private string _commitHash;
+ private System.Collections.Generic.List _axisConfiguration;
- private bool _allowDirtyRepo;
+ private System.Collections.Generic.List _homingOrder;
- private bool _skipHardwareValidation;
+ private ManipulatorPosition _initialPosition;
- public AindBehaviorSessionModel()
+ public AindManipulatorCalibration()
{
- _aindBehaviorServicesPkgVersion = "0.12.5";
- _version = "0.12.5";
- _experimenter = new System.Collections.Generic.List();
- _experimentVersion = "";
- _allowDirtyRepo = false;
- _skipHardwareValidation = false;
+ _description = "AindManipulator calibration and settings";
+ _fullStepToMm = new ManipulatorPosition();
+ _axisConfiguration = new System.Collections.Generic.List();
+ _homingOrder = new System.Collections.Generic.List();
+ _initialPosition = new ManipulatorPosition();
}
- protected AindBehaviorSessionModel(AindBehaviorSessionModel other)
+ protected AindManipulatorCalibration(AindManipulatorCalibration other)
{
- _aindBehaviorServicesPkgVersion = other._aindBehaviorServicesPkgVersion;
- _version = other._version;
- _experiment = other._experiment;
- _experimenter = other._experimenter;
- _date = other._date;
- _rootPath = other._rootPath;
- _sessionName = other._sessionName;
- _subject = other._subject;
- _experimentVersion = other._experimentVersion;
- _notes = other._notes;
- _commitHash = other._commitHash;
- _allowDirtyRepo = other._allowDirtyRepo;
- _skipHardwareValidation = other._skipHardwareValidation;
+ _description = other._description;
+ _fullStepToMm = other._fullStepToMm;
+ _axisConfiguration = other._axisConfiguration;
+ _homingOrder = other._homingOrder;
+ _initialPosition = other._initialPosition;
}
- [Newtonsoft.Json.JsonPropertyAttribute("aind_behavior_services_pkg_version")]
- public string AindBehaviorServicesPkgVersion
+ [Newtonsoft.Json.JsonPropertyAttribute("description")]
+ public string Description
{
get
{
- return _aindBehaviorServicesPkgVersion;
+ return _description;
}
set
{
- _aindBehaviorServicesPkgVersion = value;
+ _description = value;
}
}
- [Newtonsoft.Json.JsonPropertyAttribute("version")]
- public string Version
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("full_step_to_mm")]
+ public ManipulatorPosition FullStepToMm
{
get
{
- return _version;
+ return _fullStepToMm;
}
set
{
- _version = value;
+ _fullStepToMm = value;
}
}
- ///
- /// Name of the experiment
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("experiment")]
- [System.ComponentModel.DescriptionAttribute("Name of the experiment")]
- public string Experiment
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("axis_configuration")]
+ public System.Collections.Generic.List AxisConfiguration
{
get
{
- return _experiment;
+ return _axisConfiguration;
}
set
{
- _experiment = value;
+ _axisConfiguration = value;
}
}
- ///
- /// Name of the experimenter
- ///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("experimenter")]
- [System.ComponentModel.DescriptionAttribute("Name of the experimenter")]
- public System.Collections.Generic.List Experimenter
+ [Newtonsoft.Json.JsonPropertyAttribute("homing_order")]
+ public System.Collections.Generic.List HomingOrder
{
get
{
- return _experimenter;
+ return _homingOrder;
}
set
{
- _experimenter = value;
+ _homingOrder = value;
}
}
- ///
- /// Date of the experiment
- ///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("date")]
- [System.ComponentModel.DescriptionAttribute("Date of the experiment")]
- public System.DateTimeOffset Date
+ [Newtonsoft.Json.JsonPropertyAttribute("initial_position")]
+ public ManipulatorPosition InitialPosition
{
get
{
- return _date;
+ return _initialPosition;
}
set
{
- _date = value;
+ _initialPosition = value;
}
}
- ///
- /// Root path where data will be logged
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("root_path", Required=Newtonsoft.Json.Required.Always)]
- [System.ComponentModel.DescriptionAttribute("Root path where data will be logged")]
- public string RootPath
+ public System.IObservable Generate()
{
- get
- {
- return _rootPath;
- }
- set
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new AindManipulatorCalibration(this)));
+ }
+
+ public System.IObservable Generate(System.IObservable source)
+ {
+ return System.Reactive.Linq.Observable.Select(source, _ => new AindManipulatorCalibration(this));
+ }
+
+ protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
+ {
+ stringBuilder.Append("Description = " + _description + ", ");
+ stringBuilder.Append("FullStepToMm = " + _fullStepToMm + ", ");
+ stringBuilder.Append("AxisConfiguration = " + _axisConfiguration + ", ");
+ stringBuilder.Append("HomingOrder = " + _homingOrder + ", ");
+ stringBuilder.Append("InitialPosition = " + _initialPosition);
+ return true;
+ }
+
+ public override string ToString()
+ {
+ System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
+ stringBuilder.Append(GetType().Name);
+ stringBuilder.Append(" { ");
+ if (PrintMembers(stringBuilder))
{
- _rootPath = value;
+ stringBuilder.Append(" ");
}
+ stringBuilder.Append("}");
+ return stringBuilder.ToString();
}
+ }
+
+
+ ///
+ /// Appends a task specific configuration to the base manipulator model.
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("Appends a task specific configuration to the base manipulator model.")]
+ [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
+ [Bonsai.CombinatorAttribute(MethodName="Generate")]
+ public partial class AindManipulatorDevice
+ {
- ///
- /// Name of the session. This will be used to create a folder in the root path. If not provided, it will be generated using subject and date.
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("session_name")]
- [System.ComponentModel.DescriptionAttribute("Name of the session. This will be used to create a folder in the root path. If no" +
- "t provided, it will be generated using subject and date.")]
- public string SessionName
+ private string _deviceType;
+
+ private AindManipulatorCalibration _calibration;
+
+ private int _whoAmI;
+
+ private string _serialNumber;
+
+ private string _portName;
+
+ private Axis _spoutAxis;
+
+ public AindManipulatorDevice()
+ {
+ _deviceType = "StepperDriver";
+ _calibration = new AindManipulatorCalibration();
+ _whoAmI = 1130;
+ _spoutAxis = AindVrForagingDataSchema.Axis.Y1;
+ }
+
+ protected AindManipulatorDevice(AindManipulatorDevice other)
+ {
+ _deviceType = other._deviceType;
+ _calibration = other._calibration;
+ _whoAmI = other._whoAmI;
+ _serialNumber = other._serialNumber;
+ _portName = other._portName;
+ _spoutAxis = other._spoutAxis;
+ }
+
+ [Newtonsoft.Json.JsonPropertyAttribute("device_type")]
+ public string DeviceType
{
get
{
- return _sessionName;
+ return _deviceType;
}
set
{
- _sessionName = value;
+ _deviceType = value;
}
}
///
- /// Name of the subject
+ /// Calibration for the device.
///
- [Newtonsoft.Json.JsonPropertyAttribute("subject", Required=Newtonsoft.Json.Required.Always)]
- [System.ComponentModel.DescriptionAttribute("Name of the subject")]
- public string Subject
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("calibration")]
+ [System.ComponentModel.DescriptionAttribute("Calibration for the device.")]
+ public AindManipulatorCalibration Calibration
{
get
{
- return _subject;
+ return _calibration;
}
set
{
- _subject = value;
+ _calibration = value;
}
}
- ///
- /// Version of the experiment
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("experiment_version")]
- [System.ComponentModel.DescriptionAttribute("Version of the experiment")]
- public string ExperimentVersion
+ [Newtonsoft.Json.JsonPropertyAttribute("who_am_i")]
+ public int WhoAmI
{
get
{
- return _experimentVersion;
+ return _whoAmI;
}
set
{
- _experimentVersion = value;
+ _whoAmI = value;
}
}
///
- /// Notes about the experiment
+ /// Device serial number
///
- [Newtonsoft.Json.JsonPropertyAttribute("notes")]
- [System.ComponentModel.DescriptionAttribute("Notes about the experiment")]
- public string Notes
+ [Newtonsoft.Json.JsonPropertyAttribute("serial_number")]
+ [System.ComponentModel.DescriptionAttribute("Device serial number")]
+ public string SerialNumber
{
get
{
- return _notes;
+ return _serialNumber;
}
set
{
- _notes = value;
+ _serialNumber = value;
}
}
///
- /// Commit hash of the repository
+ /// Device port name
///
- [Newtonsoft.Json.JsonPropertyAttribute("commit_hash")]
- [System.ComponentModel.DescriptionAttribute("Commit hash of the repository")]
- public string CommitHash
+ [Newtonsoft.Json.JsonPropertyAttribute("port_name", Required=Newtonsoft.Json.Required.Always)]
+ [System.ComponentModel.DescriptionAttribute("Device port name")]
+ public string PortName
{
get
{
- return _commitHash;
+ return _portName;
}
set
{
- _commitHash = value;
+ _portName = value;
}
}
///
- /// Allow running from a dirty repository
+ /// Spout axis
///
- [Newtonsoft.Json.JsonPropertyAttribute("allow_dirty_repo")]
- [System.ComponentModel.DescriptionAttribute("Allow running from a dirty repository")]
- public bool AllowDirtyRepo
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("spout_axis")]
+ [System.ComponentModel.DescriptionAttribute("Spout axis")]
+ public Axis SpoutAxis
{
get
{
- return _allowDirtyRepo;
+ return _spoutAxis;
}
set
{
- _allowDirtyRepo = value;
+ _spoutAxis = value;
}
}
- ///
- /// Skip hardware validation
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("skip_hardware_validation")]
- [System.ComponentModel.DescriptionAttribute("Skip hardware validation")]
- public bool SkipHardwareValidation
- {
- get
- {
- return _skipHardwareValidation;
- }
- set
- {
- _skipHardwareValidation = value;
- }
- }
-
- public System.IObservable Generate()
- {
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new AindBehaviorSessionModel(this)));
- }
-
- public System.IObservable Generate(System.IObservable source)
- {
- return System.Reactive.Linq.Observable.Select(source, _ => new AindBehaviorSessionModel(this));
- }
-
- protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
- {
- stringBuilder.Append("AindBehaviorServicesPkgVersion = " + _aindBehaviorServicesPkgVersion + ", ");
- stringBuilder.Append("Version = " + _version + ", ");
- stringBuilder.Append("Experiment = " + _experiment + ", ");
- stringBuilder.Append("Experimenter = " + _experimenter + ", ");
- stringBuilder.Append("Date = " + _date + ", ");
- stringBuilder.Append("RootPath = " + _rootPath + ", ");
- stringBuilder.Append("SessionName = " + _sessionName + ", ");
- stringBuilder.Append("Subject = " + _subject + ", ");
- stringBuilder.Append("ExperimentVersion = " + _experimentVersion + ", ");
- stringBuilder.Append("Notes = " + _notes + ", ");
- stringBuilder.Append("CommitHash = " + _commitHash + ", ");
- stringBuilder.Append("AllowDirtyRepo = " + _allowDirtyRepo + ", ");
- stringBuilder.Append("SkipHardwareValidation = " + _skipHardwareValidation);
- return true;
- }
-
- public override string ToString()
- {
- System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
- stringBuilder.Append(GetType().Name);
- stringBuilder.Append(" { ");
- if (PrintMembers(stringBuilder))
- {
- stringBuilder.Append(" ");
- }
- stringBuilder.Append("}");
- return stringBuilder.ToString();
- }
- }
-
-
- ///
- /// Additional settings for the manipulator device
- ///
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute("Additional settings for the manipulator device")]
- [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
- [Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class AindManipulatorAdditionalSettings
- {
-
- private Axis _spoutAxis;
-
- public AindManipulatorAdditionalSettings()
- {
- _spoutAxis = AindVrForagingDataSchema.Axis.Y1;
- }
-
- protected AindManipulatorAdditionalSettings(AindManipulatorAdditionalSettings other)
- {
- _spoutAxis = other._spoutAxis;
- }
-
- ///
- /// Spout axis
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("spout_axis")]
- [System.ComponentModel.DescriptionAttribute("Spout axis")]
- public Axis SpoutAxis
- {
- get
- {
- return _spoutAxis;
- }
- set
- {
- _spoutAxis = value;
- }
- }
-
- public System.IObservable Generate()
- {
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new AindManipulatorAdditionalSettings(this)));
- }
-
- public System.IObservable Generate(System.IObservable source)
- {
- return System.Reactive.Linq.Observable.Select(source, _ => new AindManipulatorAdditionalSettings(this));
- }
-
- protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
- {
- stringBuilder.Append("SpoutAxis = " + _spoutAxis);
- return true;
- }
-
- public override string ToString()
- {
- System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
- stringBuilder.Append(GetType().Name);
- stringBuilder.Append(" { ");
- if (PrintMembers(stringBuilder))
- {
- stringBuilder.Append(" ");
- }
- stringBuilder.Append("}");
- return stringBuilder.ToString();
- }
- }
-
-
- ///
- /// Aind manipulator calibration class
- ///
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute("Aind manipulator calibration class")]
- [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
- [Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class AindManipulatorCalibration
- {
-
- private string _deviceName;
-
- private AindManipulatorCalibrationInput _input;
-
- private AindManipulatorCalibrationOutput _output;
-
- private System.DateTimeOffset? _date;
-
- private string _description;
-
- private string _notes;
-
- public AindManipulatorCalibration()
- {
- _deviceName = "AindManipulator";
- _input = new AindManipulatorCalibrationInput();
- _output = new AindManipulatorCalibrationOutput();
- _description = "Calibration of the load cells system";
- }
-
- protected AindManipulatorCalibration(AindManipulatorCalibration other)
- {
- _deviceName = other._deviceName;
- _input = other._input;
- _output = other._output;
- _date = other._date;
- _description = other._description;
- _notes = other._notes;
- }
-
- ///
- /// Must match a device name in rig/instrument
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Must match a device name in rig/instrument")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
- }
-
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("input", Required=Newtonsoft.Json.Required.Always)]
- public AindManipulatorCalibrationInput Input
- {
- get
- {
- return _input;
- }
- set
- {
- _input = value;
- }
- }
-
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("output", Required=Newtonsoft.Json.Required.Always)]
- public AindManipulatorCalibrationOutput Output
- {
- get
- {
- return _output;
- }
- set
- {
- _output = value;
- }
- }
-
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("date")]
- public System.DateTimeOffset? Date
- {
- get
- {
- return _date;
- }
- set
- {
- _date = value;
- }
- }
-
- [Newtonsoft.Json.JsonPropertyAttribute("description")]
- public string Description
- {
- get
- {
- return _description;
- }
- set
- {
- _description = value;
- }
- }
-
- [Newtonsoft.Json.JsonPropertyAttribute("notes")]
- public string Notes
- {
- get
- {
- return _notes;
- }
- set
- {
- _notes = value;
- }
- }
-
- public System.IObservable Generate()
- {
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new AindManipulatorCalibration(this)));
- }
-
- public System.IObservable Generate(System.IObservable source)
- {
- return System.Reactive.Linq.Observable.Select(source, _ => new AindManipulatorCalibration(this));
- }
-
- protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
- {
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("Input = " + _input + ", ");
- stringBuilder.Append("Output = " + _output + ", ");
- stringBuilder.Append("Date = " + _date + ", ");
- stringBuilder.Append("Description = " + _description + ", ");
- stringBuilder.Append("Notes = " + _notes);
- return true;
- }
-
- public override string ToString()
- {
- System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
- stringBuilder.Append(GetType().Name);
- stringBuilder.Append(" { ");
- if (PrintMembers(stringBuilder))
- {
- stringBuilder.Append(" ");
- }
- stringBuilder.Append("}");
- return stringBuilder.ToString();
- }
- }
-
-
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
- [Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class AindManipulatorCalibrationInput
- {
-
- private ManipulatorPosition _fullStepToMm;
-
- private System.Collections.Generic.List _axisConfiguration;
-
- private System.Collections.Generic.List _homingOrder;
-
- private ManipulatorPosition _initialPosition;
-
- public AindManipulatorCalibrationInput()
- {
- _fullStepToMm = new ManipulatorPosition();
- _axisConfiguration = new System.Collections.Generic.List();
- _homingOrder = new System.Collections.Generic.List();
- _initialPosition = new ManipulatorPosition();
- }
-
- protected AindManipulatorCalibrationInput(AindManipulatorCalibrationInput other)
- {
- _fullStepToMm = other._fullStepToMm;
- _axisConfiguration = other._axisConfiguration;
- _homingOrder = other._homingOrder;
- _initialPosition = other._initialPosition;
- }
-
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("full_step_to_mm")]
- public ManipulatorPosition FullStepToMm
- {
- get
- {
- return _fullStepToMm;
- }
- set
- {
- _fullStepToMm = value;
- }
- }
-
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("axis_configuration")]
- public System.Collections.Generic.List AxisConfiguration
- {
- get
- {
- return _axisConfiguration;
- }
- set
- {
- _axisConfiguration = value;
- }
- }
-
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("homing_order")]
- public System.Collections.Generic.List HomingOrder
- {
- get
- {
- return _homingOrder;
- }
- set
- {
- _homingOrder = value;
- }
- }
-
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("initial_position")]
- public ManipulatorPosition InitialPosition
- {
- get
- {
- return _initialPosition;
- }
- set
- {
- _initialPosition = value;
- }
- }
-
- public System.IObservable Generate()
- {
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new AindManipulatorCalibrationInput(this)));
- }
-
- public System.IObservable Generate(System.IObservable source)
- {
- return System.Reactive.Linq.Observable.Select(source, _ => new AindManipulatorCalibrationInput(this));
- }
-
- protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
- {
- stringBuilder.Append("FullStepToMm = " + _fullStepToMm + ", ");
- stringBuilder.Append("AxisConfiguration = " + _axisConfiguration + ", ");
- stringBuilder.Append("HomingOrder = " + _homingOrder + ", ");
- stringBuilder.Append("InitialPosition = " + _initialPosition);
- return true;
- }
-
- public override string ToString()
- {
- System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
- stringBuilder.Append(GetType().Name);
- stringBuilder.Append(" { ");
- if (PrintMembers(stringBuilder))
- {
- stringBuilder.Append(" ");
- }
- stringBuilder.Append("}");
- return stringBuilder.ToString();
- }
- }
-
-
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
- [Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class AindManipulatorCalibrationOutput
- {
-
- public AindManipulatorCalibrationOutput()
- {
- }
-
- protected AindManipulatorCalibrationOutput(AindManipulatorCalibrationOutput other)
- {
- }
-
- public System.IObservable Generate()
- {
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new AindManipulatorCalibrationOutput(this)));
- }
-
- public System.IObservable Generate(System.IObservable source)
- {
- return System.Reactive.Linq.Observable.Select(source, _ => new AindManipulatorCalibrationOutput(this));
- }
-
- protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
- {
- return false;
- }
-
- public override string ToString()
- {
- System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
- stringBuilder.Append(GetType().Name);
- stringBuilder.Append(" { ");
- if (PrintMembers(stringBuilder))
- {
- stringBuilder.Append(" ");
- }
- stringBuilder.Append("}");
- return stringBuilder.ToString();
- }
- }
-
-
- ///
- /// Overrides the default settings for the manipulator device by spec'ing additional_settings field
- ///
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute("Overrides the default settings for the manipulator device by spec\'ing additional_" +
- "settings field")]
- [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
- [Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class AindManipulatorDevice
- {
-
- private string _deviceType;
-
- private string _deviceName;
-
- private AindManipulatorAdditionalSettings _additionalSettings;
-
- private AindManipulatorCalibration _calibration;
-
- private int _whoAmI;
-
- private string _serialNumber;
-
- private string _portName;
-
- public AindManipulatorDevice()
- {
- _deviceType = "StepperDriver";
- _additionalSettings = new AindManipulatorAdditionalSettings();
- _whoAmI = 1130;
- }
-
- protected AindManipulatorDevice(AindManipulatorDevice other)
- {
- _deviceType = other._deviceType;
- _deviceName = other._deviceName;
- _additionalSettings = other._additionalSettings;
- _calibration = other._calibration;
- _whoAmI = other._whoAmI;
- _serialNumber = other._serialNumber;
- _portName = other._portName;
- }
-
- [Newtonsoft.Json.JsonPropertyAttribute("device_type")]
- public string DeviceType
- {
- get
- {
- return _deviceType;
- }
- set
- {
- _deviceType = value;
- }
- }
-
- ///
- /// Device name
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Device name")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
- }
-
- ///
- /// Additional settings
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("additional_settings")]
- [System.ComponentModel.DescriptionAttribute("Additional settings")]
- public AindManipulatorAdditionalSettings AdditionalSettings
- {
- get
- {
- return _additionalSettings;
- }
- set
- {
- _additionalSettings = value;
- }
- }
-
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("calibration")]
- public AindManipulatorCalibration Calibration
- {
- get
- {
- return _calibration;
- }
- set
- {
- _calibration = value;
- }
- }
-
- [Newtonsoft.Json.JsonPropertyAttribute("who_am_i")]
- public int WhoAmI
- {
- get
- {
- return _whoAmI;
- }
- set
- {
- _whoAmI = value;
- }
- }
-
- ///
- /// Device serial number
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("serial_number")]
- [System.ComponentModel.DescriptionAttribute("Device serial number")]
- public string SerialNumber
- {
- get
- {
- return _serialNumber;
- }
- set
- {
- _serialNumber = value;
- }
- }
-
- ///
- /// Device port name
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("port_name", Required=Newtonsoft.Json.Required.Always)]
- [System.ComponentModel.DescriptionAttribute("Device port name")]
- public string PortName
- {
- get
- {
- return _portName;
- }
- set
- {
- _portName = value;
- }
- }
-
- public System.IObservable Generate()
+ public System.IObservable Generate()
{
return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new AindManipulatorDevice(this)));
}
@@ -888,12 +300,11 @@ public System.IObservable Generate(System.IObser
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
stringBuilder.Append("DeviceType = " + _deviceType + ", ");
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("AdditionalSettings = " + _additionalSettings + ", ");
stringBuilder.Append("Calibration = " + _calibration + ", ");
stringBuilder.Append("WhoAmI = " + _whoAmI + ", ");
stringBuilder.Append("SerialNumber = " + _serialNumber + ", ");
- stringBuilder.Append("PortName = " + _portName);
+ stringBuilder.Append("PortName = " + _portName + ", ");
+ stringBuilder.Append("SpoutAxis = " + _spoutAxis);
return true;
}
@@ -926,6 +337,8 @@ public partial class AindVrForagingRig
private string _rigName;
+ private string _dataDirectory;
+
private CameraControllerSpinnakerCamera _triggeredCameraController;
private CameraControllerWebCamera _monitoringCameraController;
@@ -948,14 +361,14 @@ public partial class AindVrForagingRig
private AindManipulatorDevice _manipulator;
- private Screen _screen;
+ private ScreenAssembly _screen;
private RigCalibration _calibration;
public AindVrForagingRig()
{
- _aindBehaviorServicesPkgVersion = "0.12.5";
- _version = "0.6.5";
+ _aindBehaviorServicesPkgVersion = "0.13.0";
+ _version = "0.7.0-rc0";
_triggeredCameraController = new CameraControllerSpinnakerCamera();
_harpBehavior = new HarpBehavior();
_harpOlfactometer = new Olfactometer();
@@ -963,7 +376,7 @@ public AindVrForagingRig()
_harpClockGenerator = new HarpWhiteRabbit();
_harpTreadmill = new Treadmill();
_manipulator = new AindManipulatorDevice();
- _screen = new Screen();
+ _screen = new ScreenAssembly();
_calibration = new RigCalibration();
}
@@ -973,6 +386,7 @@ protected AindVrForagingRig(AindVrForagingRig other)
_version = other._version;
_computerName = other._computerName;
_rigName = other._rigName;
+ _dataDirectory = other._dataDirectory;
_triggeredCameraController = other._triggeredCameraController;
_monitoringCameraController = other._monitoringCameraController;
_harpBehavior = other._harpBehavior;
@@ -1017,7 +431,7 @@ public string Version
///
/// Computer name
///
- [Newtonsoft.Json.JsonPropertyAttribute("computer_name")]
+ [Newtonsoft.Json.JsonPropertyAttribute("computer_name", Required=Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DescriptionAttribute("Computer name")]
public string ComputerName
{
@@ -1048,6 +462,23 @@ public string RigName
}
}
+ ///
+ /// Directory where data will be saved to
+ ///
+ [Newtonsoft.Json.JsonPropertyAttribute("data_directory", Required=Newtonsoft.Json.Required.Always)]
+ [System.ComponentModel.DescriptionAttribute("Directory where data will be saved to")]
+ public string DataDirectory
+ {
+ get
+ {
+ return _dataDirectory;
+ }
+ set
+ {
+ _dataDirectory = value;
+ }
+ }
+
///
/// Required camera controller to triggered cameras.
///
@@ -1252,7 +683,7 @@ public AindManipulatorDevice Manipulator
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("screen")]
[System.ComponentModel.DescriptionAttribute("Screen settings")]
- public Screen Screen
+ public ScreenAssembly Screen
{
get
{
@@ -1298,6 +729,7 @@ protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
stringBuilder.Append("Version = " + _version + ", ");
stringBuilder.Append("ComputerName = " + _computerName + ", ");
stringBuilder.Append("RigName = " + _rigName + ", ");
+ stringBuilder.Append("DataDirectory = " + _dataDirectory + ", ");
stringBuilder.Append("TriggeredCameraController = " + _triggeredCameraController + ", ");
stringBuilder.Append("MonitoringCameraController = " + _monitoringCameraController + ", ");
stringBuilder.Append("HarpBehavior = " + _harpBehavior + ", ");
@@ -1362,7 +794,7 @@ public AindVrForagingTaskLogic()
_name = "AindVrForaging";
_description = "";
_taskParameters = new AindVrForagingTaskParameters();
- _version = "0.6.5";
+ _version = "0.7.0-rc0";
}
protected AindVrForagingTaskLogic(AindVrForagingTaskLogic other)
@@ -1521,7 +953,7 @@ public partial class AindVrForagingTaskParameters
public AindVrForagingTaskParameters()
{
- _aindBehaviorServicesPkgVersion = "0.12.5";
+ _aindBehaviorServicesPkgVersion = "0.13.0";
_environment = new BlockStructure();
_operationControl = new OperationControl();
}
@@ -3063,10 +2495,6 @@ public partial class CameraControllerSpinnakerCamera
private string _deviceType;
- private string _deviceName;
-
- private BaseModel _additionalSettings;
-
private BaseModel _calibration;
private System.Collections.Generic.Dictionary _cameras;
@@ -3082,8 +2510,6 @@ public CameraControllerSpinnakerCamera()
protected CameraControllerSpinnakerCamera(CameraControllerSpinnakerCamera other)
{
_deviceType = other._deviceType;
- _deviceName = other._deviceName;
- _additionalSettings = other._additionalSettings;
_calibration = other._calibration;
_cameras = other._cameras;
_frameRate = other._frameRate;
@@ -3103,46 +2529,11 @@ public string DeviceType
}
///
- /// Device name
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Device name")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
- }
-
- ///
- /// Additional settings
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("additional_settings")]
- [System.ComponentModel.DescriptionAttribute("Additional settings")]
- public BaseModel AdditionalSettings
- {
- get
- {
- return _additionalSettings;
- }
- set
- {
- _additionalSettings = value;
- }
- }
-
- ///
- /// Calibration
+ /// Calibration for the device.
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("calibration")]
- [System.ComponentModel.DescriptionAttribute("Calibration")]
+ [System.ComponentModel.DescriptionAttribute("Calibration for the device.")]
public BaseModel Calibration
{
get
@@ -3204,8 +2595,6 @@ public System.IObservable Generate(Sys
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
stringBuilder.Append("DeviceType = " + _deviceType + ", ");
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("AdditionalSettings = " + _additionalSettings + ", ");
stringBuilder.Append("Calibration = " + _calibration + ", ");
stringBuilder.Append("Cameras = " + _cameras + ", ");
stringBuilder.Append("FrameRate = " + _frameRate);
@@ -3235,10 +2624,6 @@ public partial class CameraControllerWebCamera
private string _deviceType;
- private string _deviceName;
-
- private BaseModel _additionalSettings;
-
private BaseModel _calibration;
private System.Collections.Generic.Dictionary _cameras;
@@ -3254,67 +2639,30 @@ public CameraControllerWebCamera()
protected CameraControllerWebCamera(CameraControllerWebCamera other)
{
_deviceType = other._deviceType;
- _deviceName = other._deviceName;
- _additionalSettings = other._additionalSettings;
_calibration = other._calibration;
_cameras = other._cameras;
- _frameRate = other._frameRate;
- }
-
- [Newtonsoft.Json.JsonPropertyAttribute("device_type")]
- public string DeviceType
- {
- get
- {
- return _deviceType;
- }
- set
- {
- _deviceType = value;
- }
- }
-
- ///
- /// Device name
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Device name")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
+ _frameRate = other._frameRate;
}
- ///
- /// Additional settings
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("additional_settings")]
- [System.ComponentModel.DescriptionAttribute("Additional settings")]
- public BaseModel AdditionalSettings
+ [Newtonsoft.Json.JsonPropertyAttribute("device_type")]
+ public string DeviceType
{
get
{
- return _additionalSettings;
+ return _deviceType;
}
set
{
- _additionalSettings = value;
+ _deviceType = value;
}
}
///
- /// Calibration
+ /// Calibration for the device.
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("calibration")]
- [System.ComponentModel.DescriptionAttribute("Calibration")]
+ [System.ComponentModel.DescriptionAttribute("Calibration for the device.")]
public BaseModel Calibration
{
get
@@ -3376,8 +2724,6 @@ public System.IObservable Generate(System.IO
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
stringBuilder.Append("DeviceType = " + _deviceType + ", ");
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("AdditionalSettings = " + _additionalSettings + ", ");
stringBuilder.Append("Calibration = " + _calibration + ", ");
stringBuilder.Append("Cameras = " + _cameras + ", ");
stringBuilder.Append("FrameRate = " + _frameRate);
@@ -3741,6 +3087,10 @@ public partial class CtcmFunction : PatchUpdateFunction
private double _rho;
+ private double _dt;
+
+ private double? _rate;
+
private double _minimum;
private double _maximum;
@@ -3748,6 +3098,7 @@ public partial class CtcmFunction : PatchUpdateFunction
public CtcmFunction()
{
_transitionMatrix = new System.Collections.Generic.List>();
+ _dt = 0.1D;
_minimum = 1D;
_maximum = 0D;
}
@@ -3757,6 +3108,8 @@ protected CtcmFunction(CtcmFunction other) :
{
_transitionMatrix = other._transitionMatrix;
_rho = other._rho;
+ _dt = other._dt;
+ _rate = other._rate;
_minimum = other._minimum;
_maximum = other._maximum;
}
@@ -3780,10 +3133,10 @@ public System.Collections.Generic.List>
}
///
- /// The underlying value goverining the stochastic process
+ /// The underlying value governing the stochastic process
///
[Newtonsoft.Json.JsonPropertyAttribute("rho", Required=Newtonsoft.Json.Required.Always)]
- [System.ComponentModel.DescriptionAttribute("The underlying value goverining the stochastic process")]
+ [System.ComponentModel.DescriptionAttribute("The underlying value governing the stochastic process")]
public double Rho
{
get
@@ -3796,6 +3149,42 @@ public double Rho
}
}
+ ///
+ /// Sampling time step (s)
+ ///
+ [Newtonsoft.Json.JsonPropertyAttribute("dt")]
+ [System.ComponentModel.DescriptionAttribute("Sampling time step (s)")]
+ public double Dt
+ {
+ get
+ {
+ return _dt;
+ }
+ set
+ {
+ _dt = value;
+ }
+ }
+
+ ///
+ /// Rate of the replenishment used to generate the matrix. This value is used for metadata keep sake only
+ ///
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("rate")]
+ [System.ComponentModel.DescriptionAttribute("Rate of the replenishment used to generate the matrix. This value is used for met" +
+ "adata keep sake only")]
+ public double? Rate
+ {
+ get
+ {
+ return _rate;
+ }
+ set
+ {
+ _rate = value;
+ }
+ }
+
///
/// Maximum value after update
///
@@ -3848,6 +3237,8 @@ protected override bool PrintMembers(System.Text.StringBuilder stringBuilder)
}
stringBuilder.Append("TransitionMatrix = " + _transitionMatrix + ", ");
stringBuilder.Append("Rho = " + _rho + ", ");
+ stringBuilder.Append("Dt = " + _dt + ", ");
+ stringBuilder.Append("Rate = " + _rate + ", ");
stringBuilder.Append("Minimum = " + _minimum + ", ");
stringBuilder.Append("Maximum = " + _maximum);
return true;
@@ -3855,7 +3246,11 @@ protected override bool PrintMembers(System.Text.StringBuilder stringBuilder)
}
+ ///
+ /// Represents the calibration parameters of a display.
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("Represents the calibration parameters of a display.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
public partial class DisplayCalibration
@@ -3945,20 +3340,24 @@ public override string ToString()
}
+ ///
+ /// Represents the extrinsic parameters of a display.
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("Represents the extrinsic parameters of a display.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
public partial class DisplayExtrinsics
{
- private AindBehaviorServicesRigVisualStimulationVector3 _rotation;
+ private AindBehaviorServicesCommonVector3 _rotation;
- private AindBehaviorServicesRigVisualStimulationVector3 _translation;
+ private AindBehaviorServicesCommonVector3 _translation;
public DisplayExtrinsics()
{
- _rotation = new AindBehaviorServicesRigVisualStimulationVector3();
- _translation = new AindBehaviorServicesRigVisualStimulationVector3();
+ _rotation = new AindBehaviorServicesCommonVector3();
+ _translation = new AindBehaviorServicesCommonVector3();
}
protected DisplayExtrinsics(DisplayExtrinsics other)
@@ -3973,7 +3372,7 @@ protected DisplayExtrinsics(DisplayExtrinsics other)
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("rotation")]
[System.ComponentModel.DescriptionAttribute("Rotation vector (radians)")]
- public AindBehaviorServicesRigVisualStimulationVector3 Rotation
+ public AindBehaviorServicesCommonVector3 Rotation
{
get
{
@@ -3991,7 +3390,7 @@ public AindBehaviorServicesRigVisualStimulationVector3 Rotation
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("translation")]
[System.ComponentModel.DescriptionAttribute("Translation (in cm)")]
- public AindBehaviorServicesRigVisualStimulationVector3 Translation
+ public AindBehaviorServicesCommonVector3 Translation
{
get
{
@@ -4035,7 +3434,11 @@ public override string ToString()
}
+ ///
+ /// Represents the intrinsic parameters of a display.
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("Represents the intrinsic parameters of a display.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
public partial class DisplayIntrinsics
@@ -4167,119 +3570,6 @@ public override string ToString()
}
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
- [Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class DisplaysCalibration
- {
-
- private DisplayCalibration _left;
-
- private DisplayCalibration _center;
-
- private DisplayCalibration _right;
-
- public DisplaysCalibration()
- {
- _left = new DisplayCalibration();
- _center = new DisplayCalibration();
- _right = new DisplayCalibration();
- }
-
- protected DisplaysCalibration(DisplaysCalibration other)
- {
- _left = other._left;
- _center = other._center;
- _right = other._right;
- }
-
- ///
- /// Left display calibration
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("left")]
- [System.ComponentModel.DescriptionAttribute("Left display calibration")]
- public DisplayCalibration Left
- {
- get
- {
- return _left;
- }
- set
- {
- _left = value;
- }
- }
-
- ///
- /// Center display calibration
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("center")]
- [System.ComponentModel.DescriptionAttribute("Center display calibration")]
- public DisplayCalibration Center
- {
- get
- {
- return _center;
- }
- set
- {
- _center = value;
- }
- }
-
- ///
- /// Right display calibration
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("right")]
- [System.ComponentModel.DescriptionAttribute("Right display calibration")]
- public DisplayCalibration Right
- {
- get
- {
- return _right;
- }
- set
- {
- _right = value;
- }
- }
-
- public System.IObservable Generate()
- {
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new DisplaysCalibration(this)));
- }
-
- public System.IObservable Generate(System.IObservable source)
- {
- return System.Reactive.Linq.Observable.Select(source, _ => new DisplaysCalibration(this));
- }
-
- protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
- {
- stringBuilder.Append("Left = " + _left + ", ");
- stringBuilder.Append("Center = " + _center + ", ");
- stringBuilder.Append("Right = " + _right);
- return true;
- }
-
- public override string ToString()
- {
- System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
- stringBuilder.Append(GetType().Name);
- stringBuilder.Append(" { ");
- if (PrintMembers(stringBuilder))
- {
- stringBuilder.Append(" ");
- }
- stringBuilder.Append("}");
- return stringBuilder.ToString();
- }
- }
-
-
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
[Newtonsoft.Json.JsonConverter(typeof(JsonInheritanceConverter), "family")]
[JsonInheritanceAttribute("Scalar", typeof(Scalar))]
@@ -4894,10 +4184,6 @@ public partial class HarpAnalogInput
private string _deviceType;
- private string _deviceName;
-
- private BaseModel _additionalSettings;
-
private BaseModel _calibration;
private int _whoAmI;
@@ -4915,8 +4201,6 @@ public HarpAnalogInput()
protected HarpAnalogInput(HarpAnalogInput other)
{
_deviceType = other._deviceType;
- _deviceName = other._deviceName;
- _additionalSettings = other._additionalSettings;
_calibration = other._calibration;
_whoAmI = other._whoAmI;
_serialNumber = other._serialNumber;
@@ -4937,46 +4221,11 @@ public string DeviceType
}
///
- /// Device name
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Device name")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
- }
-
- ///
- /// Additional settings
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("additional_settings")]
- [System.ComponentModel.DescriptionAttribute("Additional settings")]
- public BaseModel AdditionalSettings
- {
- get
- {
- return _additionalSettings;
- }
- set
- {
- _additionalSettings = value;
- }
- }
-
- ///
- /// Calibration
+ /// Calibration for the device.
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("calibration")]
- [System.ComponentModel.DescriptionAttribute("Calibration")]
+ [System.ComponentModel.DescriptionAttribute("Calibration for the device.")]
public BaseModel Calibration
{
get
@@ -5049,8 +4298,6 @@ public System.IObservable Generate(System.IObservable<
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
stringBuilder.Append("DeviceType = " + _deviceType + ", ");
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("AdditionalSettings = " + _additionalSettings + ", ");
stringBuilder.Append("Calibration = " + _calibration + ", ");
stringBuilder.Append("WhoAmI = " + _whoAmI + ", ");
stringBuilder.Append("SerialNumber = " + _serialNumber + ", ");
@@ -5081,10 +4328,6 @@ public partial class HarpBehavior
private string _deviceType;
- private string _deviceName;
-
- private BaseModel _additionalSettings;
-
private BaseModel _calibration;
private int _whoAmI;
@@ -5102,8 +4345,6 @@ public HarpBehavior()
protected HarpBehavior(HarpBehavior other)
{
_deviceType = other._deviceType;
- _deviceName = other._deviceName;
- _additionalSettings = other._additionalSettings;
_calibration = other._calibration;
_whoAmI = other._whoAmI;
_serialNumber = other._serialNumber;
@@ -5124,46 +4365,11 @@ public string DeviceType
}
///
- /// Device name
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Device name")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
- }
-
- ///
- /// Additional settings
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("additional_settings")]
- [System.ComponentModel.DescriptionAttribute("Additional settings")]
- public BaseModel AdditionalSettings
- {
- get
- {
- return _additionalSettings;
- }
- set
- {
- _additionalSettings = value;
- }
- }
-
- ///
- /// Calibration
+ /// Calibration for the device.
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("calibration")]
- [System.ComponentModel.DescriptionAttribute("Calibration")]
+ [System.ComponentModel.DescriptionAttribute("Calibration for the device.")]
public BaseModel Calibration
{
get
@@ -5236,8 +4442,6 @@ public System.IObservable Generate(System.IObservable
- /// Device name
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Device name")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
- }
-
- ///
- /// Additional settings
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("additional_settings")]
- [System.ComponentModel.DescriptionAttribute("Additional settings")]
- public BaseModel AdditionalSettings
- {
- get
- {
- return _additionalSettings;
- }
- set
- {
- _additionalSettings = value;
- }
- }
-
- ///
- /// Calibration
+ /// Calibration for the device.
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("calibration")]
- [System.ComponentModel.DescriptionAttribute("Calibration")]
+ [System.ComponentModel.DescriptionAttribute("Calibration for the device.")]
public BaseModel Calibration
{
get
@@ -5423,8 +4586,6 @@ public System.IObservable Generate(System.IObser
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
stringBuilder.Append("DeviceType = " + _deviceType + ", ");
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("AdditionalSettings = " + _additionalSettings + ", ");
stringBuilder.Append("Calibration = " + _calibration + ", ");
stringBuilder.Append("WhoAmI = " + _whoAmI + ", ");
stringBuilder.Append("SerialNumber = " + _serialNumber + ", ");
@@ -5455,10 +4616,6 @@ public partial class HarpLicketySplit
private string _deviceType;
- private string _deviceName;
-
- private BaseModel _additionalSettings;
-
private BaseModel _calibration;
private int _whoAmI;
@@ -5474,70 +4631,33 @@ public HarpLicketySplit()
}
protected HarpLicketySplit(HarpLicketySplit other)
- {
- _deviceType = other._deviceType;
- _deviceName = other._deviceName;
- _additionalSettings = other._additionalSettings;
- _calibration = other._calibration;
- _whoAmI = other._whoAmI;
- _serialNumber = other._serialNumber;
- _portName = other._portName;
- }
-
- [Newtonsoft.Json.JsonPropertyAttribute("device_type")]
- public string DeviceType
- {
- get
- {
- return _deviceType;
- }
- set
- {
- _deviceType = value;
- }
- }
-
- ///
- /// Device name
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Device name")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
+ {
+ _deviceType = other._deviceType;
+ _calibration = other._calibration;
+ _whoAmI = other._whoAmI;
+ _serialNumber = other._serialNumber;
+ _portName = other._portName;
}
- ///
- /// Additional settings
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("additional_settings")]
- [System.ComponentModel.DescriptionAttribute("Additional settings")]
- public BaseModel AdditionalSettings
+ [Newtonsoft.Json.JsonPropertyAttribute("device_type")]
+ public string DeviceType
{
get
{
- return _additionalSettings;
+ return _deviceType;
}
set
{
- _additionalSettings = value;
+ _deviceType = value;
}
}
///
- /// Calibration
+ /// Calibration for the device.
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("calibration")]
- [System.ComponentModel.DescriptionAttribute("Calibration")]
+ [System.ComponentModel.DescriptionAttribute("Calibration for the device.")]
public BaseModel Calibration
{
get
@@ -5610,8 +4730,6 @@ public System.IObservable Generate(System.IObservable
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
stringBuilder.Append("DeviceType = " + _deviceType + ", ");
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("AdditionalSettings = " + _additionalSettings + ", ");
stringBuilder.Append("Calibration = " + _calibration + ", ");
stringBuilder.Append("WhoAmI = " + _whoAmI + ", ");
stringBuilder.Append("SerialNumber = " + _serialNumber + ", ");
@@ -5642,10 +4760,6 @@ public partial class HarpSniffDetector
private string _deviceType;
- private string _deviceName;
-
- private BaseModel _additionalSettings;
-
private BaseModel _calibration;
private int _whoAmI;
@@ -5663,8 +4777,6 @@ public HarpSniffDetector()
protected HarpSniffDetector(HarpSniffDetector other)
{
_deviceType = other._deviceType;
- _deviceName = other._deviceName;
- _additionalSettings = other._additionalSettings;
_calibration = other._calibration;
_whoAmI = other._whoAmI;
_serialNumber = other._serialNumber;
@@ -5685,46 +4797,11 @@ public string DeviceType
}
///
- /// Device name
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Device name")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
- }
-
- ///
- /// Additional settings
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("additional_settings")]
- [System.ComponentModel.DescriptionAttribute("Additional settings")]
- public BaseModel AdditionalSettings
- {
- get
- {
- return _additionalSettings;
- }
- set
- {
- _additionalSettings = value;
- }
- }
-
- ///
- /// Calibration
+ /// Calibration for the device.
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("calibration")]
- [System.ComponentModel.DescriptionAttribute("Calibration")]
+ [System.ComponentModel.DescriptionAttribute("Calibration for the device.")]
public BaseModel Calibration
{
get
@@ -5797,8 +4874,6 @@ public System.IObservable Generate(System.IObservabl
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
stringBuilder.Append("DeviceType = " + _deviceType + ", ");
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("AdditionalSettings = " + _additionalSettings + ", ");
stringBuilder.Append("Calibration = " + _calibration + ", ");
stringBuilder.Append("WhoAmI = " + _whoAmI + ", ");
stringBuilder.Append("SerialNumber = " + _serialNumber + ", ");
@@ -5829,10 +4904,6 @@ public partial class HarpWhiteRabbit
private string _deviceType;
- private string _deviceName;
-
- private BaseModel _additionalSettings;
-
private BaseModel _calibration;
private int _whoAmI;
@@ -5853,8 +4924,6 @@ public HarpWhiteRabbit()
protected HarpWhiteRabbit(HarpWhiteRabbit other)
{
_deviceType = other._deviceType;
- _deviceName = other._deviceName;
- _additionalSettings = other._additionalSettings;
_calibration = other._calibration;
_whoAmI = other._whoAmI;
_serialNumber = other._serialNumber;
@@ -5876,46 +4945,11 @@ public string DeviceType
}
///
- /// Device name
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Device name")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
- }
-
- ///
- /// Additional settings
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("additional_settings")]
- [System.ComponentModel.DescriptionAttribute("Additional settings")]
- public BaseModel AdditionalSettings
- {
- get
- {
- return _additionalSettings;
- }
- set
- {
- _additionalSettings = value;
- }
- }
-
- ///
- /// Calibration
+ /// Calibration for the device.
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("calibration")]
- [System.ComponentModel.DescriptionAttribute("Calibration")]
+ [System.ComponentModel.DescriptionAttribute("Calibration for the device.")]
public BaseModel Calibration
{
get
@@ -6006,8 +5040,6 @@ public System.IObservable Generate(System.IObservable<
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
stringBuilder.Append("DeviceType = " + _deviceType + ", ");
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("AdditionalSettings = " + _additionalSettings + ", ");
stringBuilder.Append("Calibration = " + _calibration + ", ");
stringBuilder.Append("WhoAmI = " + _whoAmI + ", ");
stringBuilder.Append("SerialNumber = " + _serialNumber + ", ");
@@ -6352,7 +5384,11 @@ protected override bool PrintMembers(System.Text.StringBuilder stringBuilder)
}
+ ///
+ /// Represents a position in the manipulator coordinate system
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("Represents a position in the manipulator coordinate system")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
public partial class ManipulatorPosition
@@ -6598,6 +5634,9 @@ public override string ToString()
}
+ ///
+ /// Microstep resolution available
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
public enum MicrostepResolution
{
@@ -6616,6 +5655,9 @@ public enum MicrostepResolution
}
+ ///
+ /// Motor operation mode
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
public enum MotorOperationMode
{
@@ -7546,7 +6588,11 @@ public override string ToString()
}
+ ///
+ /// A calibrated olfactometer device
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("A calibrated olfactometer device")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
public partial class Olfactometer
@@ -7554,10 +6600,6 @@ public partial class Olfactometer
private string _deviceType;
- private string _deviceName;
-
- private BaseModel _additionalSettings;
-
private OlfactometerCalibration _calibration;
private int _whoAmI;
@@ -7569,14 +6611,13 @@ public partial class Olfactometer
public Olfactometer()
{
_deviceType = "Olfactometer";
+ _calibration = new OlfactometerCalibration();
_whoAmI = 1140;
}
protected Olfactometer(Olfactometer other)
{
_deviceType = other._deviceType;
- _deviceName = other._deviceName;
- _additionalSettings = other._additionalSettings;
_calibration = other._calibration;
_whoAmI = other._whoAmI;
_serialNumber = other._serialNumber;
@@ -7596,41 +6637,6 @@ public string DeviceType
}
}
- ///
- /// Device name
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Device name")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
- }
-
- ///
- /// Additional settings
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("additional_settings")]
- [System.ComponentModel.DescriptionAttribute("Additional settings")]
- public BaseModel AdditionalSettings
- {
- get
- {
- return _additionalSettings;
- }
- set
- {
- _additionalSettings = value;
- }
- }
-
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("calibration")]
public OlfactometerCalibration Calibration
@@ -7705,8 +6711,6 @@ public System.IObservable Generate(System.IObservable
- /// Olfactometer calibration class
+ /// Olfactometer device configuration model
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute("Olfactometer calibration class")]
+ [System.ComponentModel.DescriptionAttribute("Olfactometer device configuration model")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
public partial class OlfactometerCalibration
{
- private string _deviceName;
-
- private OlfactometerCalibrationInput _input;
-
- private OlfactometerCalibrationOutput _output;
-
- private System.DateTimeOffset? _date;
-
- private string _description;
+ private System.DateTimeOffset _date;
- private string _notes;
+ private System.Collections.Generic.Dictionary _channelConfig;
public OlfactometerCalibration()
{
- _deviceName = "Olfactometer";
- _input = new OlfactometerCalibrationInput();
- _output = new OlfactometerCalibrationOutput();
- _description = "Calibration of the harp olfactometer device";
+ _channelConfig = new System.Collections.Generic.Dictionary();
}
protected OlfactometerCalibration(OlfactometerCalibration other)
{
- _deviceName = other._deviceName;
- _input = other._input;
- _output = other._output;
_date = other._date;
- _description = other._description;
- _notes = other._notes;
+ _channelConfig = other._channelConfig;
}
///
- /// Name of the device being calibrated
+ /// Date of the calibration
///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Name of the device being calibrated")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
- }
-
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("input", Required=Newtonsoft.Json.Required.Always)]
- public OlfactometerCalibrationInput Input
- {
- get
- {
- return _input;
- }
- set
- {
- _input = value;
- }
- }
-
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("output", Required=Newtonsoft.Json.Required.Always)]
- public OlfactometerCalibrationOutput Output
- {
- get
- {
- return _output;
- }
- set
- {
- _output = value;
- }
- }
-
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("date")]
- public System.DateTimeOffset? Date
+ [System.ComponentModel.DescriptionAttribute("Date of the calibration")]
+ public System.DateTimeOffset Date
{
get
{
@@ -7828,86 +6776,6 @@ public System.DateTimeOffset? Date
}
}
- [Newtonsoft.Json.JsonPropertyAttribute("description")]
- public string Description
- {
- get
- {
- return _description;
- }
- set
- {
- _description = value;
- }
- }
-
- [Newtonsoft.Json.JsonPropertyAttribute("notes")]
- public string Notes
- {
- get
- {
- return _notes;
- }
- set
- {
- _notes = value;
- }
- }
-
- public System.IObservable Generate()
- {
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new OlfactometerCalibration(this)));
- }
-
- public System.IObservable Generate(System.IObservable source)
- {
- return System.Reactive.Linq.Observable.Select(source, _ => new OlfactometerCalibration(this));
- }
-
- protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
- {
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("Input = " + _input + ", ");
- stringBuilder.Append("Output = " + _output + ", ");
- stringBuilder.Append("Date = " + _date + ", ");
- stringBuilder.Append("Description = " + _description + ", ");
- stringBuilder.Append("Notes = " + _notes);
- return true;
- }
-
- public override string ToString()
- {
- System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
- stringBuilder.Append(GetType().Name);
- stringBuilder.Append(" { ");
- if (PrintMembers(stringBuilder))
- {
- stringBuilder.Append(" ");
- }
- stringBuilder.Append("}");
- return stringBuilder.ToString();
- }
- }
-
-
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
- [Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class OlfactometerCalibrationInput
- {
-
- private System.Collections.Generic.Dictionary _channelConfig;
-
- public OlfactometerCalibrationInput()
- {
- _channelConfig = new System.Collections.Generic.Dictionary();
- }
-
- protected OlfactometerCalibrationInput(OlfactometerCalibrationInput other)
- {
- _channelConfig = other._channelConfig;
- }
-
///
/// Configuration of olfactometer channels
///
@@ -7917,73 +6785,30 @@ protected OlfactometerCalibrationInput(OlfactometerCalibrationInput other)
public System.Collections.Generic.Dictionary ChannelConfig
{
get
- {
- return _channelConfig;
- }
- set
- {
- _channelConfig = value;
- }
- }
-
- public System.IObservable Generate()
- {
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new OlfactometerCalibrationInput(this)));
- }
-
- public System.IObservable Generate(System.IObservable source)
- {
- return System.Reactive.Linq.Observable.Select(source, _ => new OlfactometerCalibrationInput(this));
- }
-
- protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
- {
- stringBuilder.Append("ChannelConfig = " + _channelConfig);
- return true;
- }
-
- public override string ToString()
- {
- System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
- stringBuilder.Append(GetType().Name);
- stringBuilder.Append(" { ");
- if (PrintMembers(stringBuilder))
- {
- stringBuilder.Append(" ");
- }
- stringBuilder.Append("}");
- return stringBuilder.ToString();
- }
- }
-
-
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
- [Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class OlfactometerCalibrationOutput
- {
-
- public OlfactometerCalibrationOutput()
- {
- }
-
- protected OlfactometerCalibrationOutput(OlfactometerCalibrationOutput other)
- {
+ {
+ return _channelConfig;
+ }
+ set
+ {
+ _channelConfig = value;
+ }
}
- public System.IObservable Generate()
+ public System.IObservable Generate()
{
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new OlfactometerCalibrationOutput(this)));
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new OlfactometerCalibration(this)));
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate(System.IObservable source)
{
- return System.Reactive.Linq.Observable.Select(source, _ => new OlfactometerCalibrationOutput(this));
+ return System.Reactive.Linq.Observable.Select(source, _ => new OlfactometerCalibration(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
- return false;
+ stringBuilder.Append("Date = " + _date + ", ");
+ stringBuilder.Append("ChannelConfig = " + _channelConfig);
+ return true;
}
public override string ToString()
@@ -8022,7 +6847,11 @@ public enum OlfactometerChannel
}
+ ///
+ /// Configuration for a single olfactometer channel
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("Configuration for a single olfactometer channel")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
public partial class OlfactometerChannelConfig
@@ -8175,7 +7004,7 @@ public override string ToString()
///
- /// Channel type
+ /// Olfactometer channel type
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
@@ -10357,7 +9186,11 @@ public override string ToString()
}
+ ///
+ /// Represents a rectangle defined by its top-left corner, width, and height.
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("Represents a rectangle defined by its top-left corner, width, and height.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
public partial class Rect
@@ -10539,14 +9372,256 @@ public System.IObservable Generate()
return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new RenderSpecification(this)));
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate(System.IObservable source)
+ {
+ return System.Reactive.Linq.Observable.Select(source, _ => new RenderSpecification(this));
+ }
+
+ protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
+ {
+ stringBuilder.Append("Contrast = " + _contrast);
+ return true;
+ }
+
+ public override string ToString()
+ {
+ System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
+ stringBuilder.Append(GetType().Name);
+ stringBuilder.Append(" { ");
+ if (PrintMembers(stringBuilder))
+ {
+ stringBuilder.Append(" ");
+ }
+ stringBuilder.Append("}");
+ return stringBuilder.ToString();
+ }
+ }
+
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [Newtonsoft.Json.JsonConverter(typeof(JsonInheritanceConverter), "function_type")]
+ [JsonInheritanceAttribute("PatchRewardFunction", typeof(PatchRewardFunction))]
+ [JsonInheritanceAttribute("OnThisPatchEntryRewardFunction", typeof(OnThisPatchEntryRewardFunction))]
+ [JsonInheritanceAttribute("OutsideRewardFunction", typeof(OutsideRewardFunction))]
+ [JsonInheritanceAttribute("PersistentRewardFunction", typeof(PersistentRewardFunction))]
+ [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
+ [Bonsai.CombinatorAttribute(MethodName="Generate")]
+ public partial class RewardFunction
+ {
+
+ public RewardFunction()
+ {
+ }
+
+ protected RewardFunction(RewardFunction other)
+ {
+ }
+
+ public System.IObservable Generate()
+ {
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new RewardFunction(this)));
+ }
+
+ public System.IObservable Generate(System.IObservable source)
+ {
+ return System.Reactive.Linq.Observable.Select(source, _ => new RewardFunction(this));
+ }
+
+ protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
+ {
+ return false;
+ }
+
+ public override string ToString()
+ {
+ System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
+ stringBuilder.Append(GetType().Name);
+ stringBuilder.Append(" { ");
+ if (PrintMembers(stringBuilder))
+ {
+ stringBuilder.Append(" ");
+ }
+ stringBuilder.Append("}");
+ return stringBuilder.ToString();
+ }
+ }
+
+
+ ///
+ /// Specifies reward parameters and behavior for a patch.
+ ///
+ ///This class defines all aspects of reward delivery including amounts, probabilities,
+ ///delays, operant logic, and dynamic update functions. It serves as the complete
+ ///specification for how rewards are managed in a given Patch.
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute(@"Specifies reward parameters and behavior for a patch.
+
+ This class defines all aspects of reward delivery including amounts, probabilities,
+ delays, operant logic, and dynamic update functions. It serves as the complete
+ specification for how rewards are managed in a given Patch.")]
+ [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
+ [Bonsai.CombinatorAttribute(MethodName="Generate")]
+ public partial class RewardSpecification
+ {
+
+ private OperantLogic _operantLogic;
+
+ private Distribution _delay;
+
+ private Distribution _amount;
+
+ private Distribution _probability;
+
+ private Distribution _available;
+
+ private System.Collections.Generic.List _rewardFunction;
+
+ public RewardSpecification()
+ {
+ _delay = new Distribution();
+ _amount = new Distribution();
+ _probability = new Distribution();
+ _available = new Distribution();
+ _rewardFunction = new System.Collections.Generic.List();
+ }
+
+ protected RewardSpecification(RewardSpecification other)
+ {
+ _operantLogic = other._operantLogic;
+ _delay = other._delay;
+ _amount = other._amount;
+ _probability = other._probability;
+ _available = other._available;
+ _rewardFunction = other._rewardFunction;
+ }
+
+ ///
+ /// The optional operant logic of the reward
+ ///
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("operant_logic")]
+ [System.ComponentModel.DescriptionAttribute("The optional operant logic of the reward")]
+ public OperantLogic OperantLogic
+ {
+ get
+ {
+ return _operantLogic;
+ }
+ set
+ {
+ _operantLogic = value;
+ }
+ }
+
+ ///
+ /// The optional distribution where the delay to reward will be drawn from
+ ///
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("delay")]
+ [System.ComponentModel.DescriptionAttribute("The optional distribution where the delay to reward will be drawn from")]
+ public Distribution Delay
+ {
+ get
+ {
+ return _delay;
+ }
+ set
+ {
+ _delay = value;
+ }
+ }
+
+ ///
+ /// Initial amount of reward in microliters
+ ///
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("amount")]
+ [System.ComponentModel.DescriptionAttribute("Initial amount of reward in microliters")]
+ public Distribution Amount
+ {
+ get
+ {
+ return _amount;
+ }
+ set
+ {
+ _amount = value;
+ }
+ }
+
+ ///
+ /// Initial probability of reward delivery
+ ///
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("probability")]
+ [System.ComponentModel.DescriptionAttribute("Initial probability of reward delivery")]
+ public Distribution Probability
+ {
+ get
+ {
+ return _probability;
+ }
+ set
+ {
+ _probability = value;
+ }
+ }
+
+ ///
+ /// Initial amount of reward available in the patch in microliters
+ ///
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("available")]
+ [System.ComponentModel.DescriptionAttribute("Initial amount of reward available in the patch in microliters")]
+ public Distribution Available
+ {
+ get
+ {
+ return _available;
+ }
+ set
+ {
+ _available = value;
+ }
+ }
+
+ ///
+ /// Reward function of the patch
+ ///
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("reward_function")]
+ [System.ComponentModel.DescriptionAttribute("Reward function of the patch")]
+ public System.Collections.Generic.List RewardFunction
+ {
+ get
+ {
+ return _rewardFunction;
+ }
+ set
+ {
+ _rewardFunction = value;
+ }
+ }
+
+ public System.IObservable Generate()
+ {
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new RewardSpecification(this)));
+ }
+
+ public System.IObservable Generate(System.IObservable source)
{
- return System.Reactive.Linq.Observable.Select(source, _ => new RenderSpecification(this));
+ return System.Reactive.Linq.Observable.Select(source, _ => new RewardSpecification(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
- stringBuilder.Append("Contrast = " + _contrast);
+ stringBuilder.Append("OperantLogic = " + _operantLogic + ", ");
+ stringBuilder.Append("Delay = " + _delay + ", ");
+ stringBuilder.Append("Amount = " + _amount + ", ");
+ stringBuilder.Append("Probability = " + _probability + ", ");
+ stringBuilder.Append("Available = " + _available + ", ");
+ stringBuilder.Append("RewardFunction = " + _rewardFunction);
return true;
}
@@ -10565,38 +9640,60 @@ public override string ToString()
}
+ ///
+ /// Container class for calibration models.
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [Newtonsoft.Json.JsonConverter(typeof(JsonInheritanceConverter), "function_type")]
- [JsonInheritanceAttribute("PatchRewardFunction", typeof(PatchRewardFunction))]
- [JsonInheritanceAttribute("OnThisPatchEntryRewardFunction", typeof(OnThisPatchEntryRewardFunction))]
- [JsonInheritanceAttribute("OutsideRewardFunction", typeof(OutsideRewardFunction))]
- [JsonInheritanceAttribute("PersistentRewardFunction", typeof(PersistentRewardFunction))]
+ [System.ComponentModel.DescriptionAttribute("Container class for calibration models.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class RewardFunction
+ public partial class RigCalibration
{
- public RewardFunction()
+ private WaterValveCalibration _waterValve;
+
+ public RigCalibration()
{
+ _waterValve = new WaterValveCalibration();
}
- protected RewardFunction(RewardFunction other)
+ protected RigCalibration(RigCalibration other)
{
+ _waterValve = other._waterValve;
}
- public System.IObservable Generate()
+ ///
+ /// Water valve calibration
+ ///
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("water_valve", Required=Newtonsoft.Json.Required.Always)]
+ [System.ComponentModel.DescriptionAttribute("Water valve calibration")]
+ public WaterValveCalibration WaterValve
{
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new RewardFunction(this)));
+ get
+ {
+ return _waterValve;
+ }
+ set
+ {
+ _waterValve = value;
+ }
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate()
{
- return System.Reactive.Linq.Observable.Select(source, _ => new RewardFunction(this));
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new RigCalibration(this)));
+ }
+
+ public System.IObservable Generate(System.IObservable source)
+ {
+ return System.Reactive.Linq.Observable.Select(source, _ => new RigCalibration(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
- return false;
+ stringBuilder.Append("WaterValve = " + _waterValve);
+ return true;
}
public override string ToString()
@@ -10615,180 +9712,180 @@ public override string ToString()
///
- /// Specifies reward parameters and behavior for a patch.
+ /// A scalar distribution that returns a constant value.
///
- ///This class defines all aspects of reward delivery including amounts, probabilities,
- ///delays, operant logic, and dynamic update functions. It serves as the complete
- ///specification for how rewards are managed in a given Patch.
+ ///Useful for fixed parameters that don't vary across trials or samples.
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute(@"Specifies reward parameters and behavior for a patch.
-
- This class defines all aspects of reward delivery including amounts, probabilities,
- delays, operant logic, and dynamic update functions. It serves as the complete
- specification for how rewards are managed in a given Patch.")]
+ [System.ComponentModel.DescriptionAttribute("A scalar distribution that returns a constant value.\n\nUseful for fixed parameters" +
+ " that don\'t vary across trials or samples.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class RewardSpecification
+ public partial class Scalar : Distribution
{
- private OperantLogic _operantLogic;
-
- private Distribution _delay;
-
- private Distribution _amount;
-
- private Distribution _probability;
+ private ScalarDistributionParameter _distributionParameters;
- private Distribution _available;
+ private TruncationParameters2 _truncationParameters;
- private System.Collections.Generic.List _rewardFunction;
+ private ScalingParameters2 _scalingParameters;
- public RewardSpecification()
+ public Scalar()
{
- _delay = new Distribution();
- _amount = new Distribution();
- _probability = new Distribution();
- _available = new Distribution();
- _rewardFunction = new System.Collections.Generic.List();
+ _distributionParameters = new ScalarDistributionParameter();
}
- protected RewardSpecification(RewardSpecification other)
+ protected Scalar(Scalar other) :
+ base(other)
{
- _operantLogic = other._operantLogic;
- _delay = other._delay;
- _amount = other._amount;
- _probability = other._probability;
- _available = other._available;
- _rewardFunction = other._rewardFunction;
+ _distributionParameters = other._distributionParameters;
+ _truncationParameters = other._truncationParameters;
+ _scalingParameters = other._scalingParameters;
}
///
- /// The optional operant logic of the reward
+ /// Parameters of the distribution
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("operant_logic")]
- [System.ComponentModel.DescriptionAttribute("The optional operant logic of the reward")]
- public OperantLogic OperantLogic
+ [Newtonsoft.Json.JsonPropertyAttribute("distribution_parameters")]
+ [System.ComponentModel.DescriptionAttribute("Parameters of the distribution")]
+ public ScalarDistributionParameter DistributionParameters
{
get
{
- return _operantLogic;
+ return _distributionParameters;
}
set
{
- _operantLogic = value;
+ _distributionParameters = value;
}
}
- ///
- /// The optional distribution where the delay to reward will be drawn from
- ///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("delay")]
- [System.ComponentModel.DescriptionAttribute("The optional distribution where the delay to reward will be drawn from")]
- public Distribution Delay
+ [Newtonsoft.Json.JsonPropertyAttribute("truncation_parameters")]
+ public TruncationParameters2 TruncationParameters
{
get
{
- return _delay;
+ return _truncationParameters;
}
set
{
- _delay = value;
+ _truncationParameters = value;
}
}
- ///
- /// Initial amount of reward in microliters
- ///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("amount")]
- [System.ComponentModel.DescriptionAttribute("Initial amount of reward in microliters")]
- public Distribution Amount
+ [Newtonsoft.Json.JsonPropertyAttribute("scaling_parameters")]
+ public ScalingParameters2 ScalingParameters
{
get
{
- return _amount;
+ return _scalingParameters;
}
set
{
- _amount = value;
+ _scalingParameters = value;
}
}
- ///
- /// Initial probability of reward delivery
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("probability")]
- [System.ComponentModel.DescriptionAttribute("Initial probability of reward delivery")]
- public Distribution Probability
+ public System.IObservable Generate()
{
- get
- {
- return _probability;
- }
- set
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new Scalar(this)));
+ }
+
+ public System.IObservable Generate(System.IObservable source)
+ {
+ return System.Reactive.Linq.Observable.Select(source, _ => new Scalar(this));
+ }
+
+ protected override bool PrintMembers(System.Text.StringBuilder stringBuilder)
+ {
+ if (base.PrintMembers(stringBuilder))
{
- _probability = value;
+ stringBuilder.Append(", ");
}
+ stringBuilder.Append("DistributionParameters = " + _distributionParameters + ", ");
+ stringBuilder.Append("TruncationParameters = " + _truncationParameters + ", ");
+ stringBuilder.Append("ScalingParameters = " + _scalingParameters);
+ return true;
}
+ }
+
+
+ ///
+ /// Parameters for a scalar (constant) distribution.
+ ///
+ ///Represents a deterministic value that always returns the same number.
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("Parameters for a scalar (constant) distribution.\n\nRepresents a deterministic valu" +
+ "e that always returns the same number.")]
+ [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
+ [Bonsai.CombinatorAttribute(MethodName="Generate")]
+ public partial class ScalarDistributionParameter
+ {
- ///
- /// Initial amount of reward available in the patch in microliters
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("available")]
- [System.ComponentModel.DescriptionAttribute("Initial amount of reward available in the patch in microliters")]
- public Distribution Available
+ private string _family;
+
+ private double _value;
+
+ public ScalarDistributionParameter()
+ {
+ _family = "Scalar";
+ _value = 0D;
+ }
+
+ protected ScalarDistributionParameter(ScalarDistributionParameter other)
+ {
+ _family = other._family;
+ _value = other._value;
+ }
+
+ [Newtonsoft.Json.JsonPropertyAttribute("family")]
+ public string Family
{
get
{
- return _available;
+ return _family;
}
set
{
- _available = value;
+ _family = value;
}
}
///
- /// Reward function of the patch
+ /// The static value of the distribution
///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("reward_function")]
- [System.ComponentModel.DescriptionAttribute("Reward function of the patch")]
- public System.Collections.Generic.List RewardFunction
+ [Newtonsoft.Json.JsonPropertyAttribute("value")]
+ [System.ComponentModel.DescriptionAttribute("The static value of the distribution")]
+ public double Value
{
get
{
- return _rewardFunction;
+ return _value;
}
set
{
- _rewardFunction = value;
+ _value = value;
}
}
- public System.IObservable Generate()
+ public System.IObservable Generate()
{
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new RewardSpecification(this)));
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new ScalarDistributionParameter(this)));
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate(System.IObservable source)
{
- return System.Reactive.Linq.Observable.Select(source, _ => new RewardSpecification(this));
+ return System.Reactive.Linq.Observable.Select(source, _ => new ScalarDistributionParameter(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
- stringBuilder.Append("OperantLogic = " + _operantLogic + ", ");
- stringBuilder.Append("Delay = " + _delay + ", ");
- stringBuilder.Append("Amount = " + _amount + ", ");
- stringBuilder.Append("Probability = " + _probability + ", ");
- stringBuilder.Append("Available = " + _available + ", ");
- stringBuilder.Append("RewardFunction = " + _rewardFunction);
+ stringBuilder.Append("Family = " + _family + ", ");
+ stringBuilder.Append("Value = " + _value);
return true;
}
@@ -10808,59 +9905,84 @@ public override string ToString()
///
- /// Container class for calibration models. In a future release these will be moved to the respective devices
+ /// Parameters for scaling and offsetting sampled distribution values.
+ ///Scaling is applied as (value * scale + offset).
+ ///
+ ///Applies linear transformation: result = (value * scale) + offset.
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute("Container class for calibration models. In a future release these will be moved t" +
- "o the respective devices")]
+ [System.ComponentModel.DescriptionAttribute("Parameters for scaling and offsetting sampled distribution values.\nScaling is app" +
+ "lied as (value * scale + offset).\n\nApplies linear transformation: result = (valu" +
+ "e * scale) + offset.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class RigCalibration
+ public partial class ScalingParameters
{
- private WaterValveCalibration _waterValve;
+ private double _scale;
+
+ private double _offset;
+
+ public ScalingParameters()
+ {
+ _scale = 1D;
+ _offset = 0D;
+ }
- public RigCalibration()
+ protected ScalingParameters(ScalingParameters other)
{
- _waterValve = new WaterValveCalibration();
+ _scale = other._scale;
+ _offset = other._offset;
}
- protected RigCalibration(RigCalibration other)
+ ///
+ /// Scaling factor to apply on the sampled distribution
+ ///
+ [Newtonsoft.Json.JsonPropertyAttribute("scale")]
+ [System.ComponentModel.DescriptionAttribute("Scaling factor to apply on the sampled distribution")]
+ public double Scale
{
- _waterValve = other._waterValve;
+ get
+ {
+ return _scale;
+ }
+ set
+ {
+ _scale = value;
+ }
}
///
- /// Water valve calibration
+ /// Offset factor to apply on the sampled distribution
///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("water_valve", Required=Newtonsoft.Json.Required.Always)]
- [System.ComponentModel.DescriptionAttribute("Water valve calibration")]
- public WaterValveCalibration WaterValve
+ [Newtonsoft.Json.JsonPropertyAttribute("offset")]
+ [System.ComponentModel.DescriptionAttribute("Offset factor to apply on the sampled distribution")]
+ public double Offset
{
get
{
- return _waterValve;
+ return _offset;
}
set
{
- _waterValve = value;
+ _offset = value;
}
}
- public System.IObservable Generate()
+ public System.IObservable Generate()
{
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new RigCalibration(this)));
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new ScalingParameters(this)));
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate(System.IObservable source)
{
- return System.Reactive.Linq.Observable.Select(source, _ => new RigCalibration(this));
+ return System.Reactive.Linq.Observable.Select(source, _ => new ScalingParameters(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
- stringBuilder.Append("WaterValve = " + _waterValve);
+ stringBuilder.Append("Scale = " + _scale + ", ");
+ stringBuilder.Append("Offset = " + _offset);
return true;
}
@@ -10880,180 +10002,209 @@ public override string ToString()
///
- /// A scalar distribution that returns a constant value.
- ///
- ///Useful for fixed parameters that don't vary across trials or samples.
+ /// Represents a screen assembly (left, center and right screens) and respective configuration.
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute("A scalar distribution that returns a constant value.\n\nUseful for fixed parameters" +
- " that don\'t vary across trials or samples.")]
+ [System.ComponentModel.DescriptionAttribute("Represents a screen assembly (left, center and right screens) and respective conf" +
+ "iguration.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class Scalar : Distribution
+ public partial class ScreenAssembly
{
- private ScalarDistributionParameter _distributionParameters;
+ private string _deviceType;
- private TruncationParameters2 _truncationParameters;
+ private ScreenAssemblyCalibration _calibration;
- private ScalingParameters2 _scalingParameters;
+ private int _displayIndex;
- public Scalar()
+ private double _targetRenderFrequency;
+
+ private double _targetUpdateFrequency;
+
+ private string _textureAssetsDirectory;
+
+ private double _brightness;
+
+ private double _contrast;
+
+ public ScreenAssembly()
{
- _distributionParameters = new ScalarDistributionParameter();
+ _deviceType = "ScreenAssembly";
+ _calibration = new ScreenAssemblyCalibration();
+ _displayIndex = 1;
+ _targetRenderFrequency = 60D;
+ _targetUpdateFrequency = 120D;
+ _textureAssetsDirectory = "Textures";
+ _brightness = 0D;
+ _contrast = 1D;
}
- protected Scalar(Scalar other) :
- base(other)
+ protected ScreenAssembly(ScreenAssembly other)
{
- _distributionParameters = other._distributionParameters;
- _truncationParameters = other._truncationParameters;
- _scalingParameters = other._scalingParameters;
+ _deviceType = other._deviceType;
+ _calibration = other._calibration;
+ _displayIndex = other._displayIndex;
+ _targetRenderFrequency = other._targetRenderFrequency;
+ _targetUpdateFrequency = other._targetUpdateFrequency;
+ _textureAssetsDirectory = other._textureAssetsDirectory;
+ _brightness = other._brightness;
+ _contrast = other._contrast;
}
- ///
- /// Parameters of the distribution
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("distribution_parameters")]
- [System.ComponentModel.DescriptionAttribute("Parameters of the distribution")]
- public ScalarDistributionParameter DistributionParameters
+ [Newtonsoft.Json.JsonPropertyAttribute("device_type")]
+ public string DeviceType
{
get
{
- return _distributionParameters;
+ return _deviceType;
}
set
{
- _distributionParameters = value;
+ _deviceType = value;
}
}
+ ///
+ /// Screen assembly calibration
+ ///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("truncation_parameters")]
- public TruncationParameters2 TruncationParameters
+ [Newtonsoft.Json.JsonPropertyAttribute("calibration")]
+ [System.ComponentModel.DescriptionAttribute("Screen assembly calibration")]
+ public ScreenAssemblyCalibration Calibration
{
get
{
- return _truncationParameters;
+ return _calibration;
}
set
{
- _truncationParameters = value;
+ _calibration = value;
}
}
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("scaling_parameters")]
- public ScalingParameters2 ScalingParameters
+ ///
+ /// Display index
+ ///
+ [Newtonsoft.Json.JsonPropertyAttribute("display_index")]
+ [System.ComponentModel.DescriptionAttribute("Display index")]
+ public int DisplayIndex
{
get
{
- return _scalingParameters;
+ return _displayIndex;
}
set
{
- _scalingParameters = value;
+ _displayIndex = value;
}
}
- public System.IObservable Generate()
- {
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new Scalar(this)));
- }
-
- public System.IObservable Generate(System.IObservable source)
- {
- return System.Reactive.Linq.Observable.Select(source, _ => new Scalar(this));
- }
-
- protected override bool PrintMembers(System.Text.StringBuilder stringBuilder)
+ ///
+ /// Target render frequency
+ ///
+ [Newtonsoft.Json.JsonPropertyAttribute("target_render_frequency")]
+ [System.ComponentModel.DescriptionAttribute("Target render frequency")]
+ public double TargetRenderFrequency
{
- if (base.PrintMembers(stringBuilder))
+ get
{
- stringBuilder.Append(", ");
+ return _targetRenderFrequency;
+ }
+ set
+ {
+ _targetRenderFrequency = value;
}
- stringBuilder.Append("DistributionParameters = " + _distributionParameters + ", ");
- stringBuilder.Append("TruncationParameters = " + _truncationParameters + ", ");
- stringBuilder.Append("ScalingParameters = " + _scalingParameters);
- return true;
}
- }
-
-
- ///
- /// Parameters for a scalar (constant) distribution.
- ///
- ///Represents a deterministic value that always returns the same number.
- ///
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute("Parameters for a scalar (constant) distribution.\n\nRepresents a deterministic valu" +
- "e that always returns the same number.")]
- [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
- [Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class ScalarDistributionParameter
- {
-
- private string _family;
-
- private double _value;
- public ScalarDistributionParameter()
+ ///
+ /// Target update frequency
+ ///
+ [Newtonsoft.Json.JsonPropertyAttribute("target_update_frequency")]
+ [System.ComponentModel.DescriptionAttribute("Target update frequency")]
+ public double TargetUpdateFrequency
{
- _family = "Scalar";
- _value = 0D;
+ get
+ {
+ return _targetUpdateFrequency;
+ }
+ set
+ {
+ _targetUpdateFrequency = value;
+ }
}
- protected ScalarDistributionParameter(ScalarDistributionParameter other)
+ ///
+ /// Calibration directory
+ ///
+ [Newtonsoft.Json.JsonPropertyAttribute("texture_assets_directory")]
+ [System.ComponentModel.DescriptionAttribute("Calibration directory")]
+ public string TextureAssetsDirectory
{
- _family = other._family;
- _value = other._value;
+ get
+ {
+ return _textureAssetsDirectory;
+ }
+ set
+ {
+ _textureAssetsDirectory = value;
+ }
}
- [Newtonsoft.Json.JsonPropertyAttribute("family")]
- public string Family
+ ///
+ /// Brightness
+ ///
+ [Newtonsoft.Json.JsonPropertyAttribute("brightness")]
+ [System.ComponentModel.DescriptionAttribute("Brightness")]
+ public double Brightness
{
get
{
- return _family;
+ return _brightness;
}
set
{
- _family = value;
+ _brightness = value;
}
}
///
- /// The static value of the distribution
+ /// Contrast
///
- [Newtonsoft.Json.JsonPropertyAttribute("value")]
- [System.ComponentModel.DescriptionAttribute("The static value of the distribution")]
- public double Value
+ [Newtonsoft.Json.JsonPropertyAttribute("contrast")]
+ [System.ComponentModel.DescriptionAttribute("Contrast")]
+ public double Contrast
{
get
{
- return _value;
+ return _contrast;
}
set
{
- _value = value;
+ _contrast = value;
}
}
- public System.IObservable Generate()
+ public System.IObservable Generate()
{
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new ScalarDistributionParameter(this)));
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new ScreenAssembly(this)));
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate(System.IObservable source)
{
- return System.Reactive.Linq.Observable.Select(source, _ => new ScalarDistributionParameter(this));
+ return System.Reactive.Linq.Observable.Select(source, _ => new ScreenAssembly(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
- stringBuilder.Append("Family = " + _family + ", ");
- stringBuilder.Append("Value = " + _value);
+ stringBuilder.Append("DeviceType = " + _deviceType + ", ");
+ stringBuilder.Append("Calibration = " + _calibration + ", ");
+ stringBuilder.Append("DisplayIndex = " + _displayIndex + ", ");
+ stringBuilder.Append("TargetRenderFrequency = " + _targetRenderFrequency + ", ");
+ stringBuilder.Append("TargetUpdateFrequency = " + _targetUpdateFrequency + ", ");
+ stringBuilder.Append("TextureAssetsDirectory = " + _textureAssetsDirectory + ", ");
+ stringBuilder.Append("Brightness = " + _brightness + ", ");
+ stringBuilder.Append("Contrast = " + _contrast);
return true;
}
@@ -11073,84 +10224,104 @@ public override string ToString()
///
- /// Parameters for scaling and offsetting sampled distribution values.
- ///Scaling is applied as (value * scale + offset).
- ///
- ///Applies linear transformation: result = (value * scale) + offset.
+ /// Represents the calibration parameters for a screen assembly with three displays.
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute("Parameters for scaling and offsetting sampled distribution values.\nScaling is app" +
- "lied as (value * scale + offset).\n\nApplies linear transformation: result = (valu" +
- "e * scale) + offset.")]
+ [System.ComponentModel.DescriptionAttribute("Represents the calibration parameters for a screen assembly with three displays.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class ScalingParameters
+ public partial class ScreenAssemblyCalibration
{
- private double _scale;
+ private DisplayCalibration _left;
- private double _offset;
+ private DisplayCalibration _center;
- public ScalingParameters()
+ private DisplayCalibration _right;
+
+ public ScreenAssemblyCalibration()
{
- _scale = 1D;
- _offset = 0D;
+ _left = new DisplayCalibration();
+ _center = new DisplayCalibration();
+ _right = new DisplayCalibration();
}
- protected ScalingParameters(ScalingParameters other)
+ protected ScreenAssemblyCalibration(ScreenAssemblyCalibration other)
{
- _scale = other._scale;
- _offset = other._offset;
+ _left = other._left;
+ _center = other._center;
+ _right = other._right;
}
///
- /// Scaling factor to apply on the sampled distribution
+ /// Left display calibration
///
- [Newtonsoft.Json.JsonPropertyAttribute("scale")]
- [System.ComponentModel.DescriptionAttribute("Scaling factor to apply on the sampled distribution")]
- public double Scale
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("left")]
+ [System.ComponentModel.DescriptionAttribute("Left display calibration")]
+ public DisplayCalibration Left
{
get
{
- return _scale;
+ return _left;
}
set
{
- _scale = value;
+ _left = value;
}
}
///
- /// Offset factor to apply on the sampled distribution
+ /// Center display calibration
///
- [Newtonsoft.Json.JsonPropertyAttribute("offset")]
- [System.ComponentModel.DescriptionAttribute("Offset factor to apply on the sampled distribution")]
- public double Offset
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("center")]
+ [System.ComponentModel.DescriptionAttribute("Center display calibration")]
+ public DisplayCalibration Center
{
get
{
- return _offset;
+ return _center;
}
set
{
- _offset = value;
+ _center = value;
}
}
- public System.IObservable Generate()
+ ///
+ /// Right display calibration
+ ///
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("right")]
+ [System.ComponentModel.DescriptionAttribute("Right display calibration")]
+ public DisplayCalibration Right
{
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new ScalingParameters(this)));
+ get
+ {
+ return _right;
+ }
+ set
+ {
+ _right = value;
+ }
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate()
{
- return System.Reactive.Linq.Observable.Select(source, _ => new ScalingParameters(this));
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new ScreenAssemblyCalibration(this)));
+ }
+
+ public System.IObservable Generate(System.IObservable source)
+ {
+ return System.Reactive.Linq.Observable.Select(source, _ => new ScreenAssemblyCalibration(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
- stringBuilder.Append("Scale = " + _scale + ", ");
- stringBuilder.Append("Offset = " + _offset);
+ stringBuilder.Append("Left = " + _left + ", ");
+ stringBuilder.Append("Center = " + _center + ", ");
+ stringBuilder.Append("Right = " + _right);
return true;
}
@@ -11172,249 +10343,260 @@ public override string ToString()
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class Screen
+ public partial class Session
{
- private string _deviceType;
+ private string _aindBehaviorServicesPkgVersion;
- private string _deviceName;
+ private string _version;
- private BaseModel _additionalSettings;
+ private string _experiment;
- private DisplaysCalibration _calibration;
+ private System.Collections.Generic.List _experimenter;
- private int _displayIndex;
+ private System.DateTimeOffset _date;
- private double _targetRenderFrequency;
+ private string _sessionName;
- private double _targetUpdateFrequency;
+ private string _subject;
- private string _textureAssetsDirectory;
+ private string _notes;
- private double _brightness;
+ private string _commitHash;
- private double _contrast;
+ private bool _allowDirtyRepo;
- public Screen()
+ private bool _skipHardwareValidation;
+
+ public Session()
{
- _deviceType = "Screen";
- _calibration = new DisplaysCalibration();
- _displayIndex = 1;
- _targetRenderFrequency = 60D;
- _targetUpdateFrequency = 120D;
- _textureAssetsDirectory = "Textures";
- _brightness = 0D;
- _contrast = 1D;
+ _aindBehaviorServicesPkgVersion = "0.13.0";
+ _version = "0.13.0";
+ _experimenter = new System.Collections.Generic.List();
+ _allowDirtyRepo = false;
+ _skipHardwareValidation = false;
}
- protected Screen(Screen other)
+ protected Session(Session other)
{
- _deviceType = other._deviceType;
- _deviceName = other._deviceName;
- _additionalSettings = other._additionalSettings;
- _calibration = other._calibration;
- _displayIndex = other._displayIndex;
- _targetRenderFrequency = other._targetRenderFrequency;
- _targetUpdateFrequency = other._targetUpdateFrequency;
- _textureAssetsDirectory = other._textureAssetsDirectory;
- _brightness = other._brightness;
- _contrast = other._contrast;
+ _aindBehaviorServicesPkgVersion = other._aindBehaviorServicesPkgVersion;
+ _version = other._version;
+ _experiment = other._experiment;
+ _experimenter = other._experimenter;
+ _date = other._date;
+ _sessionName = other._sessionName;
+ _subject = other._subject;
+ _notes = other._notes;
+ _commitHash = other._commitHash;
+ _allowDirtyRepo = other._allowDirtyRepo;
+ _skipHardwareValidation = other._skipHardwareValidation;
}
- ///
- /// Device type
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_type")]
- [System.ComponentModel.DescriptionAttribute("Device type")]
- public string DeviceType
+ [Newtonsoft.Json.JsonPropertyAttribute("aind_behavior_services_pkg_version")]
+ public string AindBehaviorServicesPkgVersion
{
get
{
- return _deviceType;
+ return _aindBehaviorServicesPkgVersion;
}
set
{
- _deviceType = value;
+ _aindBehaviorServicesPkgVersion = value;
+ }
+ }
+
+ [Newtonsoft.Json.JsonPropertyAttribute("version")]
+ public string Version
+ {
+ get
+ {
+ return _version;
+ }
+ set
+ {
+ _version = value;
}
}
///
- /// Device name
+ /// Name of the experiment
///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Device name")]
- public string DeviceName
+ [Newtonsoft.Json.JsonPropertyAttribute("experiment")]
+ [System.ComponentModel.DescriptionAttribute("Name of the experiment")]
+ public string Experiment
{
get
{
- return _deviceName;
+ return _experiment;
}
set
{
- _deviceName = value;
+ _experiment = value;
}
}
///
- /// Additional settings
+ /// Name of the experimenter
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("additional_settings")]
- [System.ComponentModel.DescriptionAttribute("Additional settings")]
- public BaseModel AdditionalSettings
+ [Newtonsoft.Json.JsonPropertyAttribute("experimenter")]
+ [System.ComponentModel.DescriptionAttribute("Name of the experimenter")]
+ public System.Collections.Generic.List Experimenter
{
get
{
- return _additionalSettings;
+ return _experimenter;
}
set
{
- _additionalSettings = value;
+ _experimenter = value;
}
}
///
- /// Screen calibration
+ /// Date of the experiment
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("calibration")]
- [System.ComponentModel.DescriptionAttribute("Screen calibration")]
- public DisplaysCalibration Calibration
+ [Newtonsoft.Json.JsonPropertyAttribute("date")]
+ [System.ComponentModel.DescriptionAttribute("Date of the experiment")]
+ public System.DateTimeOffset Date
{
get
{
- return _calibration;
+ return _date;
}
set
{
- _calibration = value;
+ _date = value;
}
}
///
- /// Display index
+ /// Name of the session. This will be used to create a folder in the root path. If not provided, it will be generated using subject and date.
///
- [Newtonsoft.Json.JsonPropertyAttribute("display_index")]
- [System.ComponentModel.DescriptionAttribute("Display index")]
- public int DisplayIndex
+ [Newtonsoft.Json.JsonPropertyAttribute("session_name")]
+ [System.ComponentModel.DescriptionAttribute("Name of the session. This will be used to create a folder in the root path. If no" +
+ "t provided, it will be generated using subject and date.")]
+ public string SessionName
{
get
{
- return _displayIndex;
+ return _sessionName;
}
set
{
- _displayIndex = value;
+ _sessionName = value;
}
}
///
- /// Target render frequency
+ /// Name of the subject
///
- [Newtonsoft.Json.JsonPropertyAttribute("target_render_frequency")]
- [System.ComponentModel.DescriptionAttribute("Target render frequency")]
- public double TargetRenderFrequency
+ [Newtonsoft.Json.JsonPropertyAttribute("subject", Required=Newtonsoft.Json.Required.Always)]
+ [System.ComponentModel.DescriptionAttribute("Name of the subject")]
+ public string Subject
{
get
{
- return _targetRenderFrequency;
+ return _subject;
}
set
{
- _targetRenderFrequency = value;
+ _subject = value;
}
}
///
- /// Target update frequency
+ /// Notes about the experiment
///
- [Newtonsoft.Json.JsonPropertyAttribute("target_update_frequency")]
- [System.ComponentModel.DescriptionAttribute("Target update frequency")]
- public double TargetUpdateFrequency
+ [Newtonsoft.Json.JsonPropertyAttribute("notes")]
+ [System.ComponentModel.DescriptionAttribute("Notes about the experiment")]
+ public string Notes
{
get
{
- return _targetUpdateFrequency;
+ return _notes;
}
set
{
- _targetUpdateFrequency = value;
+ _notes = value;
}
}
///
- /// Calibration directory
+ /// Commit hash of the repository
///
- [Newtonsoft.Json.JsonPropertyAttribute("texture_assets_directory")]
- [System.ComponentModel.DescriptionAttribute("Calibration directory")]
- public string TextureAssetsDirectory
+ [Newtonsoft.Json.JsonPropertyAttribute("commit_hash")]
+ [System.ComponentModel.DescriptionAttribute("Commit hash of the repository")]
+ public string CommitHash
{
get
{
- return _textureAssetsDirectory;
+ return _commitHash;
}
set
{
- _textureAssetsDirectory = value;
+ _commitHash = value;
}
}
///
- /// Brightness
+ /// Allow running from a dirty repository
///
- [Newtonsoft.Json.JsonPropertyAttribute("brightness")]
- [System.ComponentModel.DescriptionAttribute("Brightness")]
- public double Brightness
+ [Newtonsoft.Json.JsonPropertyAttribute("allow_dirty_repo")]
+ [System.ComponentModel.DescriptionAttribute("Allow running from a dirty repository")]
+ public bool AllowDirtyRepo
{
get
{
- return _brightness;
+ return _allowDirtyRepo;
}
set
{
- _brightness = value;
+ _allowDirtyRepo = value;
}
}
///
- /// Contrast
+ /// Skip hardware validation
///
- [Newtonsoft.Json.JsonPropertyAttribute("contrast")]
- [System.ComponentModel.DescriptionAttribute("Contrast")]
- public double Contrast
+ [Newtonsoft.Json.JsonPropertyAttribute("skip_hardware_validation")]
+ [System.ComponentModel.DescriptionAttribute("Skip hardware validation")]
+ public bool SkipHardwareValidation
{
get
{
- return _contrast;
+ return _skipHardwareValidation;
}
set
{
- _contrast = value;
+ _skipHardwareValidation = value;
}
}
- public System.IObservable Generate()
+ public System.IObservable Generate()
{
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new Screen(this)));
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new Session(this)));
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate(System.IObservable source)
{
- return System.Reactive.Linq.Observable.Select(source, _ => new Screen(this));
+ return System.Reactive.Linq.Observable.Select(source, _ => new Session(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
- stringBuilder.Append("DeviceType = " + _deviceType + ", ");
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("AdditionalSettings = " + _additionalSettings + ", ");
- stringBuilder.Append("Calibration = " + _calibration + ", ");
- stringBuilder.Append("DisplayIndex = " + _displayIndex + ", ");
- stringBuilder.Append("TargetRenderFrequency = " + _targetRenderFrequency + ", ");
- stringBuilder.Append("TargetUpdateFrequency = " + _targetUpdateFrequency + ", ");
- stringBuilder.Append("TextureAssetsDirectory = " + _textureAssetsDirectory + ", ");
- stringBuilder.Append("Brightness = " + _brightness + ", ");
- stringBuilder.Append("Contrast = " + _contrast);
+ stringBuilder.Append("AindBehaviorServicesPkgVersion = " + _aindBehaviorServicesPkgVersion + ", ");
+ stringBuilder.Append("Version = " + _version + ", ");
+ stringBuilder.Append("Experiment = " + _experiment + ", ");
+ stringBuilder.Append("Experimenter = " + _experimenter + ", ");
+ stringBuilder.Append("Date = " + _date + ", ");
+ stringBuilder.Append("SessionName = " + _sessionName + ", ");
+ stringBuilder.Append("Subject = " + _subject + ", ");
+ stringBuilder.Append("Notes = " + _notes + ", ");
+ stringBuilder.Append("CommitHash = " + _commitHash + ", ");
+ stringBuilder.Append("AllowDirtyRepo = " + _allowDirtyRepo + ", ");
+ stringBuilder.Append("SkipHardwareValidation = " + _skipHardwareValidation);
return true;
}
@@ -11601,7 +10783,11 @@ public override string ToString()
}
+ ///
+ /// Spinnaker camera device configuration.
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("Spinnaker camera device configuration.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
public partial class SpinnakerCamera
@@ -11609,10 +10795,6 @@ public partial class SpinnakerCamera
private string _deviceType;
- private string _deviceName;
-
- private BaseModel _additionalSettings;
-
private BaseModel _calibration;
private string _serialNumber;
@@ -11650,8 +10832,6 @@ public SpinnakerCamera()
protected SpinnakerCamera(SpinnakerCamera other)
{
_deviceType = other._deviceType;
- _deviceName = other._deviceName;
- _additionalSettings = other._additionalSettings;
_calibration = other._calibration;
_serialNumber = other._serialNumber;
_binning = other._binning;
@@ -11665,11 +10845,7 @@ protected SpinnakerCamera(SpinnakerCamera other)
_videoWriter = other._videoWriter;
}
- ///
- /// Device type
- ///
[Newtonsoft.Json.JsonPropertyAttribute("device_type")]
- [System.ComponentModel.DescriptionAttribute("Device type")]
public string DeviceType
{
get
@@ -11683,46 +10859,11 @@ public string DeviceType
}
///
- /// Device name
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Device name")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
- }
-
- ///
- /// Additional settings
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("additional_settings")]
- [System.ComponentModel.DescriptionAttribute("Additional settings")]
- public BaseModel AdditionalSettings
- {
- get
- {
- return _additionalSettings;
- }
- set
- {
- _additionalSettings = value;
- }
- }
-
- ///
- /// Calibration
+ /// Calibration for the device.
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("calibration")]
- [System.ComponentModel.DescriptionAttribute("Calibration")]
+ [System.ComponentModel.DescriptionAttribute("Calibration for the device.")]
public BaseModel Calibration
{
get
@@ -11924,8 +11065,6 @@ public System.IObservable Generate(System.IObservable<
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
stringBuilder.Append("DeviceType = " + _deviceType + ", ");
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("AdditionalSettings = " + _additionalSettings + ", ");
stringBuilder.Append("Calibration = " + _calibration + ", ");
stringBuilder.Append("SerialNumber = " + _serialNumber + ", ");
stringBuilder.Append("Binning = " + _binning + ", ");
@@ -11955,6 +11094,9 @@ public override string ToString()
}
+ ///
+ /// ADC bit depth options for Spinnaker cameras.
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
public enum SpinnakerCameraAdcBitDepth
{
@@ -11970,6 +11112,9 @@ public enum SpinnakerCameraAdcBitDepth
}
+ ///
+ /// Pixel format options for Spinnaker cameras.
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
public enum SpinnakerCameraPixelFormat
{
@@ -12511,7 +11656,11 @@ public override string ToString()
}
+ ///
+ /// A calibrated treadmill device
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("A calibrated treadmill device")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
public partial class Treadmill
@@ -12519,10 +11668,6 @@ public partial class Treadmill
private string _deviceType;
- private string _deviceName;
-
- private BaseModel _additionalSettings;
-
private TreadmillCalibration _calibration;
private int _whoAmI;
@@ -12534,14 +11679,13 @@ public partial class Treadmill
public Treadmill()
{
_deviceType = "Treadmill";
+ _calibration = new TreadmillCalibration();
_whoAmI = 1402;
}
protected Treadmill(Treadmill other)
{
_deviceType = other._deviceType;
- _deviceName = other._deviceName;
- _additionalSettings = other._additionalSettings;
_calibration = other._calibration;
_whoAmI = other._whoAmI;
_serialNumber = other._serialNumber;
@@ -12561,41 +11705,6 @@ public string DeviceType
}
}
- ///
- /// Device name
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Device name")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
- }
-
- ///
- /// Additional settings
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("additional_settings")]
- [System.ComponentModel.DescriptionAttribute("Additional settings")]
- public BaseModel AdditionalSettings
- {
- get
- {
- return _additionalSettings;
- }
- set
- {
- _additionalSettings = value;
- }
- }
-
[System.Xml.Serialization.XmlIgnoreAttribute()]
[Newtonsoft.Json.JsonPropertyAttribute("calibration")]
public TreadmillCalibration Calibration
@@ -12631,257 +11740,50 @@ public int WhoAmI
public string SerialNumber
{
get
- {
- return _serialNumber;
- }
- set
- {
- _serialNumber = value;
- }
- }
-
- ///
- /// Device port name
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("port_name", Required=Newtonsoft.Json.Required.Always)]
- [System.ComponentModel.DescriptionAttribute("Device port name")]
- public string PortName
- {
- get
- {
- return _portName;
- }
- set
- {
- _portName = value;
- }
- }
-
- public System.IObservable Generate()
- {
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new Treadmill(this)));
- }
-
- public System.IObservable Generate(System.IObservable source)
- {
- return System.Reactive.Linq.Observable.Select(source, _ => new Treadmill(this));
- }
-
- protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
- {
- stringBuilder.Append("DeviceType = " + _deviceType + ", ");
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("AdditionalSettings = " + _additionalSettings + ", ");
- stringBuilder.Append("Calibration = " + _calibration + ", ");
- stringBuilder.Append("WhoAmI = " + _whoAmI + ", ");
- stringBuilder.Append("SerialNumber = " + _serialNumber + ", ");
- stringBuilder.Append("PortName = " + _portName);
- return true;
- }
-
- public override string ToString()
- {
- System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
- stringBuilder.Append(GetType().Name);
- stringBuilder.Append(" { ");
- if (PrintMembers(stringBuilder))
- {
- stringBuilder.Append(" ");
- }
- stringBuilder.Append("}");
- return stringBuilder.ToString();
- }
- }
-
-
- ///
- /// Treadmill calibration class
- ///
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute("Treadmill calibration class")]
- [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
- [Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class TreadmillCalibration
- {
-
- private string _deviceName;
-
- private TreadmillCalibrationInput _input;
-
- private TreadmillCalibrationOutput _output;
-
- private System.DateTimeOffset? _date;
-
- private string _description;
-
- private string _notes;
-
- public TreadmillCalibration()
- {
- _deviceName = "Treadmill";
- _input = new TreadmillCalibrationInput();
- _output = new TreadmillCalibrationOutput();
- _description = "Calibration of the treadmill system";
- }
-
- protected TreadmillCalibration(TreadmillCalibration other)
- {
- _deviceName = other._deviceName;
- _input = other._input;
- _output = other._output;
- _date = other._date;
- _description = other._description;
- _notes = other._notes;
- }
-
- ///
- /// Must match a device name in rig/instrument
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Must match a device name in rig/instrument")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
- }
-
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("input", Required=Newtonsoft.Json.Required.Always)]
- public TreadmillCalibrationInput Input
- {
- get
- {
- return _input;
- }
- set
- {
- _input = value;
- }
- }
-
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("output", Required=Newtonsoft.Json.Required.Always)]
- public TreadmillCalibrationOutput Output
- {
- get
- {
- return _output;
- }
- set
- {
- _output = value;
- }
- }
-
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("date")]
- public System.DateTimeOffset? Date
- {
- get
- {
- return _date;
- }
- set
- {
- _date = value;
- }
- }
-
- [Newtonsoft.Json.JsonPropertyAttribute("description")]
- public string Description
- {
- get
- {
- return _description;
- }
- set
- {
- _description = value;
- }
- }
-
- [Newtonsoft.Json.JsonPropertyAttribute("notes")]
- public string Notes
- {
- get
- {
- return _notes;
- }
- set
- {
- _notes = value;
- }
- }
-
- public System.IObservable Generate()
- {
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new TreadmillCalibration(this)));
- }
-
- public System.IObservable Generate(System.IObservable source)
- {
- return System.Reactive.Linq.Observable.Select(source, _ => new TreadmillCalibration(this));
- }
-
- protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
- {
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("Input = " + _input + ", ");
- stringBuilder.Append("Output = " + _output + ", ");
- stringBuilder.Append("Date = " + _date + ", ");
- stringBuilder.Append("Description = " + _description + ", ");
- stringBuilder.Append("Notes = " + _notes);
- return true;
- }
-
- public override string ToString()
- {
- System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
- stringBuilder.Append(GetType().Name);
- stringBuilder.Append(" { ");
- if (PrintMembers(stringBuilder))
- {
- stringBuilder.Append(" ");
- }
- stringBuilder.Append("}");
- return stringBuilder.ToString();
- }
- }
-
-
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
- [Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class TreadmillCalibrationInput
- {
-
- public TreadmillCalibrationInput()
- {
+ {
+ return _serialNumber;
+ }
+ set
+ {
+ _serialNumber = value;
+ }
}
- protected TreadmillCalibrationInput(TreadmillCalibrationInput other)
+ ///
+ /// Device port name
+ ///
+ [Newtonsoft.Json.JsonPropertyAttribute("port_name", Required=Newtonsoft.Json.Required.Always)]
+ [System.ComponentModel.DescriptionAttribute("Device port name")]
+ public string PortName
{
+ get
+ {
+ return _portName;
+ }
+ set
+ {
+ _portName = value;
+ }
}
- public System.IObservable Generate()
+ public System.IObservable Generate()
{
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new TreadmillCalibrationInput(this)));
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new Treadmill(this)));
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate(System.IObservable source)
{
- return System.Reactive.Linq.Observable.Select(source, _ => new TreadmillCalibrationInput(this));
+ return System.Reactive.Linq.Observable.Select(source, _ => new Treadmill(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
- return false;
+ stringBuilder.Append("DeviceType = " + _deviceType + ", ");
+ stringBuilder.Append("Calibration = " + _calibration + ", ");
+ stringBuilder.Append("WhoAmI = " + _whoAmI + ", ");
+ stringBuilder.Append("SerialNumber = " + _serialNumber + ", ");
+ stringBuilder.Append("PortName = " + _portName);
+ return true;
}
public override string ToString()
@@ -12899,12 +11801,18 @@ public override string ToString()
}
+ ///
+ /// Treadmill calibration class
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("Treadmill calibration class")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class TreadmillCalibrationOutput
+ public partial class TreadmillCalibration
{
+ private System.DateTimeOffset _date;
+
private double _wheelDiameter;
private int _pulsesPerRevolution;
@@ -12913,7 +11821,7 @@ public partial class TreadmillCalibrationOutput
private System.Collections.Generic.List> _brakeLookupCalibration;
- public TreadmillCalibrationOutput()
+ public TreadmillCalibration()
{
_wheelDiameter = 15D;
_pulsesPerRevolution = 28800;
@@ -12921,14 +11829,33 @@ public TreadmillCalibrationOutput()
_brakeLookupCalibration = new System.Collections.Generic.List>();
}
- protected TreadmillCalibrationOutput(TreadmillCalibrationOutput other)
+ protected TreadmillCalibration(TreadmillCalibration other)
{
+ _date = other._date;
_wheelDiameter = other._wheelDiameter;
_pulsesPerRevolution = other._pulsesPerRevolution;
_invertDirection = other._invertDirection;
_brakeLookupCalibration = other._brakeLookupCalibration;
}
+ ///
+ /// Date of the calibration
+ ///
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("date")]
+ [System.ComponentModel.DescriptionAttribute("Date of the calibration")]
+ public System.DateTimeOffset Date
+ {
+ get
+ {
+ return _date;
+ }
+ set
+ {
+ _date = value;
+ }
+ }
+
///
/// Wheel diameter
///
@@ -12984,7 +11911,7 @@ public bool InvertDirection
/// Brake lookup calibration. Each pair of values define (input [torque], output [brake set-point U16])
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("brake_lookup_calibration", Required=Newtonsoft.Json.Required.Always)]
+ [Newtonsoft.Json.JsonPropertyAttribute("brake_lookup_calibration")]
[System.ComponentModel.DescriptionAttribute("Brake lookup calibration. Each pair of values define (input [torque], output [bra" +
"ke set-point U16])")]
public System.Collections.Generic.List> BrakeLookupCalibration
@@ -12999,18 +11926,19 @@ public System.Collections.Generic.List>
}
}
- public System.IObservable Generate()
+ public System.IObservable Generate()
{
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new TreadmillCalibrationOutput(this)));
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new TreadmillCalibration(this)));
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate(System.IObservable source)
{
- return System.Reactive.Linq.Observable.Select(source, _ => new TreadmillCalibrationOutput(this));
+ return System.Reactive.Linq.Observable.Select(source, _ => new TreadmillCalibration(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
+ stringBuilder.Append("Date = " + _date + ", ");
stringBuilder.Append("WheelDiameter = " + _wheelDiameter + ", ");
stringBuilder.Append("PulsesPerRevolution = " + _pulsesPerRevolution + ", ");
stringBuilder.Append("InvertDirection = " + _invertDirection + ", ");
@@ -13486,10 +12414,14 @@ public enum UpdaterTarget
}
+ ///
+ /// FFMPEG video writer configuration.
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
[Newtonsoft.Json.JsonConverter(typeof(JsonInheritanceConverter), "video_writer_type")]
[JsonInheritanceAttribute("FFMPEG", typeof(VideoWriterFfmpeg))]
[JsonInheritanceAttribute("OPENCV", typeof(VideoWriterOpenCv))]
+ [System.ComponentModel.DescriptionAttribute("FFMPEG video writer configuration.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
public partial class VideoWriter
@@ -13533,7 +12465,11 @@ public override string ToString()
}
+ ///
+ /// FFMPEG video writer configuration.
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("FFMPEG video writer configuration.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
public partial class VideoWriterFfmpeg : VideoWriter
@@ -13657,7 +12593,11 @@ protected override bool PrintMembers(System.Text.StringBuilder stringBuilder)
}
+ ///
+ /// OpenCV video writer configuration.
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute("OpenCV video writer configuration.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
public partial class VideoWriterOpenCv : VideoWriter
@@ -13905,361 +12845,84 @@ public OdorSpecification OdorSpecification
}
set
{
- _odorSpecification = value;
- }
- }
-
- ///
- /// The optional reward specification of the virtual site
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("reward_specification")]
- [System.ComponentModel.DescriptionAttribute("The optional reward specification of the virtual site")]
- public VirtualSiteRewardSpecification RewardSpecification
- {
- get
- {
- return _rewardSpecification;
- }
- set
- {
- _rewardSpecification = value;
- }
- }
-
- ///
- /// The optional render specification of the virtual site
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("render_specification")]
- [System.ComponentModel.DescriptionAttribute("The optional render specification of the virtual site")]
- public RenderSpecification RenderSpecification
- {
- get
- {
- return _renderSpecification;
- }
- set
- {
- _renderSpecification = value;
- }
- }
-
- ///
- /// Treadmill specification
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("treadmill_specification")]
- [System.ComponentModel.DescriptionAttribute("Treadmill specification")]
- public TreadmillSpecification TreadmillSpecification
- {
- get
- {
- return _treadmillSpecification;
- }
- set
- {
- _treadmillSpecification = value;
- }
- }
-
- public System.IObservable Generate()
- {
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new VirtualSite(this)));
- }
-
- public System.IObservable Generate(System.IObservable source)
- {
- return System.Reactive.Linq.Observable.Select(source, _ => new VirtualSite(this));
- }
-
- protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
- {
- stringBuilder.Append("Id = " + _id + ", ");
- stringBuilder.Append("Label = " + _label + ", ");
- stringBuilder.Append("Length = " + _length + ", ");
- stringBuilder.Append("StartPosition = " + _startPosition + ", ");
- stringBuilder.Append("OdorSpecification = " + _odorSpecification + ", ");
- stringBuilder.Append("RewardSpecification = " + _rewardSpecification + ", ");
- stringBuilder.Append("RenderSpecification = " + _renderSpecification + ", ");
- stringBuilder.Append("TreadmillSpecification = " + _treadmillSpecification);
- return true;
- }
-
- public override string ToString()
- {
- System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
- stringBuilder.Append(GetType().Name);
- stringBuilder.Append(" { ");
- if (PrintMembers(stringBuilder))
- {
- stringBuilder.Append(" ");
- }
- stringBuilder.Append("}");
- return stringBuilder.ToString();
- }
- }
-
-
- ///
- /// Generates virtual site specifications with randomized properties.
- ///
- ///This class defines templates for creating virtual sites with variable properties
- ///like length and rendering specifications. It's used to generate diverse virtual
- ///environments for the foraging task.
- ///
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute(@"Generates virtual site specifications with randomized properties.
-
- This class defines templates for creating virtual sites with variable properties
- like length and rendering specifications. It's used to generate diverse virtual
- environments for the foraging task.")]
- [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
- [Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class VirtualSiteGenerator
- {
-
- private RenderSpecification _renderSpecification;
-
- private VirtualSiteLabels _label;
-
- private Distribution _lengthDistribution;
-
- private TreadmillSpecification _treadmillSpecification;
-
- public VirtualSiteGenerator()
- {
- _renderSpecification = new RenderSpecification();
- _label = AindVrForagingDataSchema.VirtualSiteLabels.Unspecified;
- _lengthDistribution = new Distribution();
- }
-
- protected VirtualSiteGenerator(VirtualSiteGenerator other)
- {
- _renderSpecification = other._renderSpecification;
- _label = other._label;
- _lengthDistribution = other._lengthDistribution;
- _treadmillSpecification = other._treadmillSpecification;
- }
-
- ///
- /// Contrast of the environment
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("render_specification")]
- [System.ComponentModel.DescriptionAttribute("Contrast of the environment")]
- public RenderSpecification RenderSpecification
- {
- get
- {
- return _renderSpecification;
- }
- set
- {
- _renderSpecification = value;
- }
- }
-
- ///
- /// Label of the virtual site
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("label")]
- [System.ComponentModel.DescriptionAttribute("Label of the virtual site")]
- public VirtualSiteLabels Label
- {
- get
- {
- return _label;
- }
- set
- {
- _label = value;
- }
- }
-
- ///
- /// Distribution of the length of the virtual site
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("length_distribution")]
- [System.ComponentModel.DescriptionAttribute("Distribution of the length of the virtual site")]
- public Distribution LengthDistribution
- {
- get
- {
- return _lengthDistribution;
- }
- set
- {
- _lengthDistribution = value;
+ _odorSpecification = value;
}
}
///
- /// Treadmill specification
+ /// The optional reward specification of the virtual site
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("treadmill_specification")]
- [System.ComponentModel.DescriptionAttribute("Treadmill specification")]
- public TreadmillSpecification TreadmillSpecification
+ [Newtonsoft.Json.JsonPropertyAttribute("reward_specification")]
+ [System.ComponentModel.DescriptionAttribute("The optional reward specification of the virtual site")]
+ public VirtualSiteRewardSpecification RewardSpecification
{
get
{
- return _treadmillSpecification;
+ return _rewardSpecification;
}
set
{
- _treadmillSpecification = value;
- }
- }
-
- public System.IObservable Generate()
- {
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new VirtualSiteGenerator(this)));
- }
-
- public System.IObservable Generate(System.IObservable source)
- {
- return System.Reactive.Linq.Observable.Select(source, _ => new VirtualSiteGenerator(this));
- }
-
- protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
- {
- stringBuilder.Append("RenderSpecification = " + _renderSpecification + ", ");
- stringBuilder.Append("Label = " + _label + ", ");
- stringBuilder.Append("LengthDistribution = " + _lengthDistribution + ", ");
- stringBuilder.Append("TreadmillSpecification = " + _treadmillSpecification);
- return true;
- }
-
- public override string ToString()
- {
- System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder();
- stringBuilder.Append(GetType().Name);
- stringBuilder.Append(" { ");
- if (PrintMembers(stringBuilder))
- {
- stringBuilder.Append(" ");
+ _rewardSpecification = value;
}
- stringBuilder.Append("}");
- return stringBuilder.ToString();
- }
- }
-
-
- ///
- /// Enumeration of virtual site types in the VR foraging environment.
- ///
- ///These labels categorize different regions of the virtual environment,
- ///each serving different functional roles in the foraging task.
- ///
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
- public enum VirtualSiteLabels
- {
-
- [System.Runtime.Serialization.EnumMemberAttribute(Value="Unspecified")]
- Unspecified = 0,
-
- [System.Runtime.Serialization.EnumMemberAttribute(Value="InterPatch")]
- InterPatch = 1,
-
- [System.Runtime.Serialization.EnumMemberAttribute(Value="PostPatch")]
- PostPatch = 2,
-
- [System.Runtime.Serialization.EnumMemberAttribute(Value="RewardSite")]
- RewardSite = 3,
-
- [System.Runtime.Serialization.EnumMemberAttribute(Value="InterSite")]
- InterSite = 4,
- }
-
-
- ///
- /// THIS CLASS IS NOT MEANT TO BE DIRECTLY INSTANTIATED.
- ///Specifies reward parameters and behavior for a virtual site.
- ///
- ///Note: This class is primarily used internally for runtime site generation
- ///and is not meant to be directly instantiated in task configuration DSL.
- ///
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute(@"THIS CLASS IS NOT MEANT TO BE DIRECTLY INSTANTIATED.
- Specifies reward parameters and behavior for a virtual site.
-
- Note: This class is primarily used internally for runtime site generation
- and is not meant to be directly instantiated in task configuration DSL.")]
- [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
- [Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class VirtualSiteRewardSpecification
- {
-
- private OperantLogic _operantLogic;
-
- private Distribution _delay;
-
- public VirtualSiteRewardSpecification()
- {
- _operantLogic = new OperantLogic();
- _delay = new Distribution();
- }
-
- protected VirtualSiteRewardSpecification(VirtualSiteRewardSpecification other)
- {
- _operantLogic = other._operantLogic;
- _delay = other._delay;
}
///
- /// The optional operant logic of the reward
+ /// The optional render specification of the virtual site
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("operant_logic", Required=Newtonsoft.Json.Required.Always)]
- [System.ComponentModel.DescriptionAttribute("The optional operant logic of the reward")]
- public OperantLogic OperantLogic
+ [Newtonsoft.Json.JsonPropertyAttribute("render_specification")]
+ [System.ComponentModel.DescriptionAttribute("The optional render specification of the virtual site")]
+ public RenderSpecification RenderSpecification
{
get
{
- return _operantLogic;
+ return _renderSpecification;
}
set
{
- _operantLogic = value;
+ _renderSpecification = value;
}
}
///
- /// The optional distribution where the delay to reward will be drawn from
+ /// Treadmill specification
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("delay")]
- [System.ComponentModel.DescriptionAttribute("The optional distribution where the delay to reward will be drawn from")]
- public Distribution Delay
+ [Newtonsoft.Json.JsonPropertyAttribute("treadmill_specification")]
+ [System.ComponentModel.DescriptionAttribute("Treadmill specification")]
+ public TreadmillSpecification TreadmillSpecification
{
get
{
- return _delay;
+ return _treadmillSpecification;
}
set
{
- _delay = value;
+ _treadmillSpecification = value;
}
}
- public System.IObservable Generate()
+ public System.IObservable Generate()
{
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new VirtualSiteRewardSpecification(this)));
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new VirtualSite(this)));
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate(System.IObservable source)
{
- return System.Reactive.Linq.Observable.Select(source, _ => new VirtualSiteRewardSpecification(this));
+ return System.Reactive.Linq.Observable.Select(source, _ => new VirtualSite(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
- stringBuilder.Append("OperantLogic = " + _operantLogic + ", ");
- stringBuilder.Append("Delay = " + _delay);
+ stringBuilder.Append("Id = " + _id + ", ");
+ stringBuilder.Append("Label = " + _label + ", ");
+ stringBuilder.Append("Length = " + _length + ", ");
+ stringBuilder.Append("StartPosition = " + _startPosition + ", ");
+ stringBuilder.Append("OdorSpecification = " + _odorSpecification + ", ");
+ stringBuilder.Append("RewardSpecification = " + _rewardSpecification + ", ");
+ stringBuilder.Append("RenderSpecification = " + _renderSpecification + ", ");
+ stringBuilder.Append("TreadmillSpecification = " + _treadmillSpecification);
return true;
}
@@ -14279,152 +12942,134 @@ public override string ToString()
///
- /// Defines a visual corridor segment in the VR environment.
+ /// Generates virtual site specifications with randomized properties.
///
- ///Visual corridors are the basic building blocks of the VR environment,
- ///defining spatial regions with specific textures, dimensions, and positions.
+ ///This class defines templates for creating virtual sites with variable properties
+ ///like length and rendering specifications. It's used to generate diverse virtual
+ ///environments for the foraging task.
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute("Defines a visual corridor segment in the VR environment.\n\nVisual corridors are th" +
- "e basic building blocks of the VR environment,\ndefining spatial regions with spe" +
- "cific textures, dimensions, and positions.")]
+ [System.ComponentModel.DescriptionAttribute(@"Generates virtual site specifications with randomized properties.
+
+ This class defines templates for creating virtual sites with variable properties
+ like length and rendering specifications. It's used to generate diverse virtual
+ environments for the foraging task.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class VisualCorridor
+ public partial class VirtualSiteGenerator
{
- private int _id;
-
- private Size _size;
-
- private double _startPosition;
+ private RenderSpecification _renderSpecification;
- private double _length;
+ private VirtualSiteLabels _label;
- private WallTextures _textures;
+ private Distribution _lengthDistribution;
- public VisualCorridor()
- {
- _id = 0;
- _size = new Size();
- _startPosition = 0D;
- _length = 120D;
- _textures = new WallTextures();
- }
+ private TreadmillSpecification _treadmillSpecification;
- protected VisualCorridor(VisualCorridor other)
+ public VirtualSiteGenerator()
{
- _id = other._id;
- _size = other._size;
- _startPosition = other._startPosition;
- _length = other._length;
- _textures = other._textures;
+ _renderSpecification = new RenderSpecification();
+ _label = AindVrForagingDataSchema.VirtualSiteLabels.Unspecified;
+ _lengthDistribution = new Distribution();
}
- ///
- /// Id of the visual corridor object
- ///
- [Newtonsoft.Json.JsonPropertyAttribute("id")]
- [System.ComponentModel.DescriptionAttribute("Id of the visual corridor object")]
- public int Id
+ protected VirtualSiteGenerator(VirtualSiteGenerator other)
{
- get
- {
- return _id;
- }
- set
- {
- _id = value;
- }
+ _renderSpecification = other._renderSpecification;
+ _label = other._label;
+ _lengthDistribution = other._lengthDistribution;
+ _treadmillSpecification = other._treadmillSpecification;
}
///
- /// Size of the corridor (cm)
+ /// Contrast of the environment
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("size")]
- [System.ComponentModel.DescriptionAttribute("Size of the corridor (cm)")]
- public Size Size
+ [Newtonsoft.Json.JsonPropertyAttribute("render_specification")]
+ [System.ComponentModel.DescriptionAttribute("Contrast of the environment")]
+ public RenderSpecification RenderSpecification
{
get
{
- return _size;
+ return _renderSpecification;
}
set
{
- _size = value;
+ _renderSpecification = value;
}
}
///
- /// Start position of the corridor (cm)
+ /// Label of the virtual site
///
- [Newtonsoft.Json.JsonPropertyAttribute("start_position")]
- [System.ComponentModel.DescriptionAttribute("Start position of the corridor (cm)")]
- public double StartPosition
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("label")]
+ [System.ComponentModel.DescriptionAttribute("Label of the virtual site")]
+ public VirtualSiteLabels Label
{
get
{
- return _startPosition;
+ return _label;
}
set
{
- _startPosition = value;
+ _label = value;
}
}
///
- /// Length of the corridor site (cm)
+ /// Distribution of the length of the virtual site
///
- [Newtonsoft.Json.JsonPropertyAttribute("length")]
- [System.ComponentModel.DescriptionAttribute("Length of the corridor site (cm)")]
- public double Length
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("length_distribution")]
+ [System.ComponentModel.DescriptionAttribute("Distribution of the length of the virtual site")]
+ public Distribution LengthDistribution
{
get
{
- return _length;
+ return _lengthDistribution;
}
set
{
- _length = value;
+ _lengthDistribution = value;
}
}
///
- /// The textures of the corridor
+ /// Treadmill specification
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("textures", Required=Newtonsoft.Json.Required.Always)]
- [System.ComponentModel.DescriptionAttribute("The textures of the corridor")]
- public WallTextures Textures
+ [Newtonsoft.Json.JsonPropertyAttribute("treadmill_specification")]
+ [System.ComponentModel.DescriptionAttribute("Treadmill specification")]
+ public TreadmillSpecification TreadmillSpecification
{
get
{
- return _textures;
+ return _treadmillSpecification;
}
set
{
- _textures = value;
+ _treadmillSpecification = value;
}
}
- public System.IObservable Generate()
+ public System.IObservable Generate()
{
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new VisualCorridor(this)));
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new VirtualSiteGenerator(this)));
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate(System.IObservable source)
{
- return System.Reactive.Linq.Observable.Select(source, _ => new VisualCorridor(this));
+ return System.Reactive.Linq.Observable.Select(source, _ => new VirtualSiteGenerator(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
- stringBuilder.Append("Id = " + _id + ", ");
- stringBuilder.Append("Size = " + _size + ", ");
- stringBuilder.Append("StartPosition = " + _startPosition + ", ");
- stringBuilder.Append("Length = " + _length + ", ");
- stringBuilder.Append("Textures = " + _textures);
+ stringBuilder.Append("RenderSpecification = " + _renderSpecification + ", ");
+ stringBuilder.Append("Label = " + _label + ", ");
+ stringBuilder.Append("LengthDistribution = " + _lengthDistribution + ", ");
+ stringBuilder.Append("TreadmillSpecification = " + _treadmillSpecification);
return true;
}
@@ -14444,135 +13089,117 @@ public override string ToString()
///
- /// Defines textures for all walls of a visual corridor in the VR environment.
+ /// Enumeration of virtual site types in the VR foraging environment.
///
- ///This class specifies the visual appearance of corridor surfaces including
- ///floor, ceiling, and side walls, allowing for complex visual environments
- ///with different textures on each surface.
+ ///These labels categorize different regions of the virtual environment,
+ ///each serving different functional roles in the foraging task.
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute(@"Defines textures for all walls of a visual corridor in the VR environment.
-
- This class specifies the visual appearance of corridor surfaces including
- floor, ceiling, and side walls, allowing for complex visual environments
- with different textures on each surface.")]
- [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
- [Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class WallTextures
+ [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
+ public enum VirtualSiteLabels
{
- private Texture _floor;
+ [System.Runtime.Serialization.EnumMemberAttribute(Value="Unspecified")]
+ Unspecified = 0,
- private Texture _ceiling;
+ [System.Runtime.Serialization.EnumMemberAttribute(Value="InterPatch")]
+ InterPatch = 1,
- private Texture _left;
+ [System.Runtime.Serialization.EnumMemberAttribute(Value="PostPatch")]
+ PostPatch = 2,
- private Texture _right;
+ [System.Runtime.Serialization.EnumMemberAttribute(Value="RewardSite")]
+ RewardSite = 3,
- public WallTextures()
- {
- _floor = new Texture();
- _ceiling = new Texture();
- _left = new Texture();
- _right = new Texture();
- }
+ [System.Runtime.Serialization.EnumMemberAttribute(Value="InterSite")]
+ InterSite = 4,
+ }
+
+
+ ///
+ /// THIS CLASS IS NOT MEANT TO BE DIRECTLY INSTANTIATED.
+ ///Specifies reward parameters and behavior for a virtual site.
+ ///
+ ///Note: This class is primarily used internally for runtime site generation
+ ///and is not meant to be directly instantiated in task configuration DSL.
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute(@"THIS CLASS IS NOT MEANT TO BE DIRECTLY INSTANTIATED.
+ Specifies reward parameters and behavior for a virtual site.
+
+ Note: This class is primarily used internally for runtime site generation
+ and is not meant to be directly instantiated in task configuration DSL.")]
+ [Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
+ [Bonsai.CombinatorAttribute(MethodName="Generate")]
+ public partial class VirtualSiteRewardSpecification
+ {
- protected WallTextures(WallTextures other)
- {
- _floor = other._floor;
- _ceiling = other._ceiling;
- _left = other._left;
- _right = other._right;
- }
+ private OperantLogic _operantLogic;
- ///
- /// The texture of the floor
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("floor", Required=Newtonsoft.Json.Required.Always)]
- [System.ComponentModel.DescriptionAttribute("The texture of the floor")]
- public Texture Floor
+ private Distribution _delay;
+
+ public VirtualSiteRewardSpecification()
{
- get
- {
- return _floor;
- }
- set
- {
- _floor = value;
- }
+ _operantLogic = new OperantLogic();
+ _delay = new Distribution();
}
- ///
- /// The texture of the ceiling
- ///
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("ceiling", Required=Newtonsoft.Json.Required.Always)]
- [System.ComponentModel.DescriptionAttribute("The texture of the ceiling")]
- public Texture Ceiling
+ protected VirtualSiteRewardSpecification(VirtualSiteRewardSpecification other)
{
- get
- {
- return _ceiling;
- }
- set
- {
- _ceiling = value;
- }
+ _operantLogic = other._operantLogic;
+ _delay = other._delay;
}
///
- /// The texture of the left
+ /// The optional operant logic of the reward
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("left", Required=Newtonsoft.Json.Required.Always)]
- [System.ComponentModel.DescriptionAttribute("The texture of the left")]
- public Texture Left
+ [Newtonsoft.Json.JsonPropertyAttribute("operant_logic", Required=Newtonsoft.Json.Required.Always)]
+ [System.ComponentModel.DescriptionAttribute("The optional operant logic of the reward")]
+ public OperantLogic OperantLogic
{
get
{
- return _left;
+ return _operantLogic;
}
set
{
- _left = value;
+ _operantLogic = value;
}
}
///
- /// The texture of the right
+ /// The optional distribution where the delay to reward will be drawn from
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("right", Required=Newtonsoft.Json.Required.Always)]
- [System.ComponentModel.DescriptionAttribute("The texture of the right")]
- public Texture Right
+ [Newtonsoft.Json.JsonPropertyAttribute("delay")]
+ [System.ComponentModel.DescriptionAttribute("The optional distribution where the delay to reward will be drawn from")]
+ public Distribution Delay
{
get
{
- return _right;
+ return _delay;
}
set
{
- _right = value;
+ _delay = value;
}
}
- public System.IObservable Generate()
+ public System.IObservable Generate()
{
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new WallTextures(this)));
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new VirtualSiteRewardSpecification(this)));
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate(System.IObservable source)
{
- return System.Reactive.Linq.Observable.Select(source, _ => new WallTextures(this));
+ return System.Reactive.Linq.Observable.Select(source, _ => new VirtualSiteRewardSpecification(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
- stringBuilder.Append("Floor = " + _floor + ", ");
- stringBuilder.Append("Ceiling = " + _ceiling + ", ");
- stringBuilder.Append("Left = " + _left + ", ");
- stringBuilder.Append("Right = " + _right);
+ stringBuilder.Append("OperantLogic = " + _operantLogic + ", ");
+ stringBuilder.Append("Delay = " + _delay);
return true;
}
@@ -14592,148 +13219,152 @@ public override string ToString()
///
- /// Water valve calibration class
+ /// Defines a visual corridor segment in the VR environment.
+ ///
+ ///Visual corridors are the basic building blocks of the VR environment,
+ ///defining spatial regions with specific textures, dimensions, and positions.
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute("Water valve calibration class")]
+ [System.ComponentModel.DescriptionAttribute("Defines a visual corridor segment in the VR environment.\n\nVisual corridors are th" +
+ "e basic building blocks of the VR environment,\ndefining spatial regions with spe" +
+ "cific textures, dimensions, and positions.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class WaterValveCalibration
+ public partial class VisualCorridor
{
- private string _deviceName;
-
- private WaterValveCalibrationInput _input;
+ private int _id;
- private WaterValveCalibrationOutput _output;
+ private Size _size;
- private System.DateTimeOffset? _date;
+ private double _startPosition;
- private string _description;
+ private double _length;
- private string _notes;
+ private WallTextures _textures;
- public WaterValveCalibration()
+ public VisualCorridor()
{
- _deviceName = "WaterValve";
- _input = new WaterValveCalibrationInput();
- _output = new WaterValveCalibrationOutput();
- _description = "Calibration of the water valve delivery system";
+ _id = 0;
+ _size = new Size();
+ _startPosition = 0D;
+ _length = 120D;
+ _textures = new WallTextures();
}
- protected WaterValveCalibration(WaterValveCalibration other)
+ protected VisualCorridor(VisualCorridor other)
{
- _deviceName = other._deviceName;
- _input = other._input;
- _output = other._output;
- _date = other._date;
- _description = other._description;
- _notes = other._notes;
+ _id = other._id;
+ _size = other._size;
+ _startPosition = other._startPosition;
+ _length = other._length;
+ _textures = other._textures;
}
///
- /// Name of the device being calibrated
+ /// Id of the visual corridor object
///
- [Newtonsoft.Json.JsonPropertyAttribute("device_name")]
- [System.ComponentModel.DescriptionAttribute("Name of the device being calibrated")]
- public string DeviceName
- {
- get
- {
- return _deviceName;
- }
- set
- {
- _deviceName = value;
- }
- }
-
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("input", Required=Newtonsoft.Json.Required.Always)]
- public WaterValveCalibrationInput Input
+ [Newtonsoft.Json.JsonPropertyAttribute("id")]
+ [System.ComponentModel.DescriptionAttribute("Id of the visual corridor object")]
+ public int Id
{
get
{
- return _input;
+ return _id;
}
set
{
- _input = value;
+ _id = value;
}
}
+ ///
+ /// Size of the corridor (cm)
+ ///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("output", Required=Newtonsoft.Json.Required.Always)]
- public WaterValveCalibrationOutput Output
+ [Newtonsoft.Json.JsonPropertyAttribute("size")]
+ [System.ComponentModel.DescriptionAttribute("Size of the corridor (cm)")]
+ public Size Size
{
get
{
- return _output;
+ return _size;
}
set
{
- _output = value;
+ _size = value;
}
}
- [System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("date")]
- public System.DateTimeOffset? Date
+ ///
+ /// Start position of the corridor (cm)
+ ///
+ [Newtonsoft.Json.JsonPropertyAttribute("start_position")]
+ [System.ComponentModel.DescriptionAttribute("Start position of the corridor (cm)")]
+ public double StartPosition
{
get
{
- return _date;
+ return _startPosition;
}
set
{
- _date = value;
+ _startPosition = value;
}
}
- [Newtonsoft.Json.JsonPropertyAttribute("description")]
- public string Description
+ ///
+ /// Length of the corridor site (cm)
+ ///
+ [Newtonsoft.Json.JsonPropertyAttribute("length")]
+ [System.ComponentModel.DescriptionAttribute("Length of the corridor site (cm)")]
+ public double Length
{
get
{
- return _description;
+ return _length;
}
set
{
- _description = value;
+ _length = value;
}
}
- [Newtonsoft.Json.JsonPropertyAttribute("notes")]
- public string Notes
+ ///
+ /// The textures of the corridor
+ ///
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("textures", Required=Newtonsoft.Json.Required.Always)]
+ [System.ComponentModel.DescriptionAttribute("The textures of the corridor")]
+ public WallTextures Textures
{
get
{
- return _notes;
+ return _textures;
}
set
{
- _notes = value;
+ _textures = value;
}
}
- public System.IObservable Generate()
+ public System.IObservable Generate()
{
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new WaterValveCalibration(this)));
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new VisualCorridor(this)));
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate(System.IObservable source)
{
- return System.Reactive.Linq.Observable.Select(source, _ => new WaterValveCalibration(this));
+ return System.Reactive.Linq.Observable.Select(source, _ => new VisualCorridor(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
- stringBuilder.Append("DeviceName = " + _deviceName + ", ");
- stringBuilder.Append("Input = " + _input + ", ");
- stringBuilder.Append("Output = " + _output + ", ");
- stringBuilder.Append("Date = " + _date + ", ");
- stringBuilder.Append("Description = " + _description + ", ");
- stringBuilder.Append("Notes = " + _notes);
+ stringBuilder.Append("Id = " + _id + ", ");
+ stringBuilder.Append("Size = " + _size + ", ");
+ stringBuilder.Append("StartPosition = " + _startPosition + ", ");
+ stringBuilder.Append("Length = " + _length + ", ");
+ stringBuilder.Append("Textures = " + _textures);
return true;
}
@@ -14752,55 +13383,136 @@ public override string ToString()
}
+ ///
+ /// Defines textures for all walls of a visual corridor in the VR environment.
+ ///
+ ///This class specifies the visual appearance of corridor surfaces including
+ ///floor, ceiling, and side walls, allowing for complex visual environments
+ ///with different textures on each surface.
+ ///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
+ [System.ComponentModel.DescriptionAttribute(@"Defines textures for all walls of a visual corridor in the VR environment.
+
+ This class specifies the visual appearance of corridor surfaces including
+ floor, ceiling, and side walls, allowing for complex visual environments
+ with different textures on each surface.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class WaterValveCalibrationInput
+ public partial class WallTextures
{
- private System.Collections.Generic.List _measurements;
+ private Texture _floor;
+
+ private Texture _ceiling;
+
+ private Texture _left;
+
+ private Texture _right;
- public WaterValveCalibrationInput()
+ public WallTextures()
{
- _measurements = new System.Collections.Generic.List();
+ _floor = new Texture();
+ _ceiling = new Texture();
+ _left = new Texture();
+ _right = new Texture();
}
- protected WaterValveCalibrationInput(WaterValveCalibrationInput other)
+ protected WallTextures(WallTextures other)
{
- _measurements = other._measurements;
+ _floor = other._floor;
+ _ceiling = other._ceiling;
+ _left = other._left;
+ _right = other._right;
}
///
- /// List of measurements
+ /// The texture of the floor
///
[System.Xml.Serialization.XmlIgnoreAttribute()]
- [Newtonsoft.Json.JsonPropertyAttribute("measurements")]
- [System.ComponentModel.DescriptionAttribute("List of measurements")]
- public System.Collections.Generic.List Measurements
+ [Newtonsoft.Json.JsonPropertyAttribute("floor", Required=Newtonsoft.Json.Required.Always)]
+ [System.ComponentModel.DescriptionAttribute("The texture of the floor")]
+ public Texture Floor
{
get
{
- return _measurements;
+ return _floor;
}
set
{
- _measurements = value;
+ _floor = value;
+ }
+ }
+
+ ///
+ /// The texture of the ceiling
+ ///
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("ceiling", Required=Newtonsoft.Json.Required.Always)]
+ [System.ComponentModel.DescriptionAttribute("The texture of the ceiling")]
+ public Texture Ceiling
+ {
+ get
+ {
+ return _ceiling;
+ }
+ set
+ {
+ _ceiling = value;
+ }
+ }
+
+ ///
+ /// The texture of the left
+ ///
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("left", Required=Newtonsoft.Json.Required.Always)]
+ [System.ComponentModel.DescriptionAttribute("The texture of the left")]
+ public Texture Left
+ {
+ get
+ {
+ return _left;
+ }
+ set
+ {
+ _left = value;
+ }
+ }
+
+ ///
+ /// The texture of the right
+ ///
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ [Newtonsoft.Json.JsonPropertyAttribute("right", Required=Newtonsoft.Json.Required.Always)]
+ [System.ComponentModel.DescriptionAttribute("The texture of the right")]
+ public Texture Right
+ {
+ get
+ {
+ return _right;
+ }
+ set
+ {
+ _right = value;
}
}
- public System.IObservable Generate()
+ public System.IObservable Generate()
{
- return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new WaterValveCalibrationInput(this)));
+ return System.Reactive.Linq.Observable.Defer(() => System.Reactive.Linq.Observable.Return(new WallTextures(this)));
}
- public System.IObservable Generate(System.IObservable source)
+ public System.IObservable Generate(System.IObservable source)
{
- return System.Reactive.Linq.Observable.Select(source, _ => new WaterValveCalibrationInput(this));
+ return System.Reactive.Linq.Observable.Select(source, _ => new WallTextures(this));
}
protected virtual bool PrintMembers(System.Text.StringBuilder stringBuilder)
{
- stringBuilder.Append("Measurements = " + _measurements);
+ stringBuilder.Append("Floor = " + _floor + ", ");
+ stringBuilder.Append("Ceiling = " + _ceiling + ", ");
+ stringBuilder.Append("Left = " + _left + ", ");
+ stringBuilder.Append("Right = " + _right);
return true;
}
@@ -14820,15 +13532,19 @@ public override string ToString()
///
- /// Output for water valve calibration class
+ /// Represents a water valve calibration.
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("Bonsai.Sgen", "0.6.1.0 (Newtonsoft.Json v13.0.0.0)")]
- [System.ComponentModel.DescriptionAttribute("Output for water valve calibration class")]
+ [System.ComponentModel.DescriptionAttribute("Represents a water valve calibration.")]
[Bonsai.WorkflowElementCategoryAttribute(Bonsai.ElementCategory.Source)]
[Bonsai.CombinatorAttribute(MethodName="Generate")]
- public partial class WaterValveCalibrationOutput
+ public partial class WaterValveCalibration
{
+ private System.DateTimeOffset _date;
+
+ private System.Collections.Generic.List _measurements;
+
private System.Collections.Generic.Dictionary