From b91719bf597c3563768b53154f3bf3bdd8e74fe4 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Fri, 31 Oct 2025 14:58:16 -0500 Subject: [PATCH 01/26] Update data.proto and fix mypy errors --- poetry.lock | 20 +++++++++---------- pyproject.toml | 1 + src/ni/datastore/data/_data_store_client.py | 4 ++-- .../data/_types/_published_condition.py | 8 ++++---- .../data/_types/_published_measurement.py | 8 ++++---- src/ni/datastore/data/_types/_step.py | 8 ++++---- src/ni/datastore/data/_types/_test_result.py | 4 ++-- src/ni/datastore/metadata/_types/_alias.py | 4 ++-- .../metadata/_types/_extension_schema.py | 4 ++-- src/ni/datastore/metadata/_types/_operator.py | 4 ++-- src/ni/datastore/metadata/_types/_test.py | 4 ++-- .../metadata/_types/_test_description.py | 4 ++-- .../metadata/_types/_test_station.py | 4 ++-- tests/unit/data/test_get_metadata.py | 6 +++--- tests/unit/data/test_publish_measurement.py | 14 ++++++------- tests/unit/data/test_query_metadata.py | 4 ++-- tests/unit/metadata/test_get_metadata.py | 8 ++++---- tests/unit/metadata/test_query_metadata.py | 8 ++++---- 18 files changed, 59 insertions(+), 58 deletions(-) diff --git a/poetry.lock b/poetry.lock index e008c04..6f1056d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2350,14 +2350,14 @@ ni-measurements-data-v1-proto = ">=0.1.0.dev2" [[package]] name = "ni-measurements-data-v1-proto" -version = "0.1.0.dev2" +version = "0.1.0.dev3" description = "Protobuf data types and service stubs for NI data store gRPC APIs" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] files = [ - {file = "ni_measurements_data_v1_proto-0.1.0.dev2-py3-none-any.whl", hash = "sha256:ac2e8e960f3e830368535fa48ce68236a4ecede1c34385c7fc698e2a2c885db3"}, - {file = "ni_measurements_data_v1_proto-0.1.0.dev2.tar.gz", hash = "sha256:d7b9180282a0760b1e81b6f8317406255bc86a9ddf890016edfd280ea4b7de83"}, + {file = "ni_measurements_data_v1_proto-0.1.0.dev3-py3-none-any.whl", hash = "sha256:d50f07b94946aedbf3f8689511dff8b91e532bd40dad647822b82d5ec1bad24c"}, + {file = "ni_measurements_data_v1_proto-0.1.0.dev3.tar.gz", hash = "sha256:0d43ce0fc2ce129296024ae80a1e1864a01657fea3b44eec009af19564e7deab"}, ] [package.dependencies] @@ -2384,14 +2384,14 @@ ni-measurements-metadata-v1-proto = ">=0.1.0.dev2" [[package]] name = "ni-measurements-metadata-v1-proto" -version = "0.1.0.dev2" +version = "0.1.0.dev3" description = "Protobuf data types and service stub for NI metadata store gRPC APIs" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] files = [ - {file = "ni_measurements_metadata_v1_proto-0.1.0.dev2-py3-none-any.whl", hash = "sha256:e460171ccc5f44c52856dcb182ac5d09a552c0b74e43c766ec77da1d5956dd19"}, - {file = "ni_measurements_metadata_v1_proto-0.1.0.dev2.tar.gz", hash = "sha256:50e202d9d688e2ec4675aa0c3cfa4b60045d5b276947aae769ab05e3099ea754"}, + {file = "ni_measurements_metadata_v1_proto-0.1.0.dev3-py3-none-any.whl", hash = "sha256:8800a3ed141f2269eae01cd022b81e42b2c7f9ebca67060002fbd3b22b8abad5"}, + {file = "ni_measurements_metadata_v1_proto-0.1.0.dev3.tar.gz", hash = "sha256:3e9c0b6aa7c9f6a2d2e571fa863c765afa91803be85e052193814b8cd4e2573b"}, ] [package.dependencies] @@ -4276,14 +4276,14 @@ files = [ [[package]] name = "webcolors" -version = "24.11.1" +version = "25.10.0" description = "A library for working with the color formats defined by HTML and CSS." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, - {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, + {file = "webcolors-25.10.0-py3-none-any.whl", hash = "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d"}, + {file = "webcolors-25.10.0.tar.gz", hash = "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf"}, ] [[package]] diff --git a/pyproject.toml b/pyproject.toml index c92fb0f..ee841b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,6 +39,7 @@ python = "^3.10" protobuf = {version=">=4.21"} ni-datamonikers-v1-client = { version = ">=0.1.0.dev1", allow-prereleases = true } ni-measurements-data-v1-client = { version = ">=0.1.0.dev2", allow-prereleases = true } +ni-measurements-data-v1-proto = { version = ">=0.1.0.dev2", allow-prereleases = true } ni-measurements-metadata-v1-client = { version = ">=0.1.0.dev2", allow-prereleases = true } ni-protobuf-types = { version = ">=1.0.1.dev0", allow-prereleases = true } hightime = { version = ">=0.3.0.dev0", allow-prereleases = true } diff --git a/src/ni/datastore/data/_data_store_client.py b/src/ni/datastore/data/_data_store_client.py index 291500d..44adc1e 100644 --- a/src/ni/datastore/data/_data_store_client.py +++ b/src/ni/datastore/data/_data_store_client.py @@ -368,8 +368,8 @@ def publish_measurement_batch( publish_request = PublishMeasurementBatchRequest( measurement_name=measurement_name, step_id=step_id, - timestamp=[hightime_datetime_to_protobuf(ts) for ts in timestamps], - outcome=outcomes, + timestamps=[hightime_datetime_to_protobuf(ts) for ts in timestamps], + outcomes=outcomes, error_information=error_information, hardware_item_ids=hardware_item_ids, test_adapter_ids=test_adapter_ids, diff --git a/src/ni/datastore/data/_types/_published_condition.py b/src/ni/datastore/data/_types/_published_condition.py index 08dda71..ecbd9b3 100644 --- a/src/ni/datastore/data/_types/_published_condition.py +++ b/src/ni/datastore/data/_types/_published_condition.py @@ -66,8 +66,8 @@ def from_protobuf(published_condition_proto: PublishedConditionProto) -> "Publis else None ), id=published_condition_proto.id, - condition_name=published_condition_proto.condition_name, - condition_type=published_condition_proto.condition_type, + condition_name=published_condition_proto.name, + condition_type=published_condition_proto.type, step_id=published_condition_proto.step_id, test_result_id=published_condition_proto.test_result_id, ) @@ -77,8 +77,8 @@ def to_protobuf(self) -> PublishedConditionProto: return PublishedConditionProto( moniker=self.moniker, id=self.id, - condition_name=self.condition_name, - condition_type=self.condition_type, + name=self.condition_name, + type=self.condition_type, step_id=self.step_id, test_result_id=self.test_result_id, ) diff --git a/src/ni/datastore/data/_types/_published_measurement.py b/src/ni/datastore/data/_types/_published_measurement.py index 7761d22..c463936 100644 --- a/src/ni/datastore/data/_types/_published_measurement.py +++ b/src/ni/datastore/data/_types/_published_measurement.py @@ -164,9 +164,9 @@ def from_protobuf( software_item_ids=published_measurement_proto.software_item_ids, hardware_item_ids=published_measurement_proto.hardware_item_ids, test_adapter_ids=published_measurement_proto.test_adapter_ids, - measurement_name=published_measurement_proto.measurement_name, + measurement_name=published_measurement_proto.name, data_type=published_measurement_proto.data_type, - measurement_notes=published_measurement_proto.measurement_notes, + measurement_notes=published_measurement_proto.notes, start_date_time=( hightime_datetime_from_protobuf(published_measurement_proto.start_date_time) if published_measurement_proto.HasField("start_date_time") @@ -199,9 +199,9 @@ def to_protobuf(self) -> PublishedMeasurementProto: software_item_ids=self.software_item_ids, hardware_item_ids=self.hardware_item_ids, test_adapter_ids=self.test_adapter_ids, - measurement_name=self.measurement_name, + name=self.measurement_name, data_type=self.data_type, - measurement_notes=self.measurement_notes, + notes=self.measurement_notes, start_date_time=( hightime_datetime_to_protobuf(self.start_date_time) if self.start_date_time is not None diff --git a/src/ni/datastore/data/_types/_step.py b/src/ni/datastore/data/_types/_step.py index 856ae2a..4faa9a1 100644 --- a/src/ni/datastore/data/_types/_step.py +++ b/src/ni/datastore/data/_types/_step.py @@ -110,8 +110,8 @@ def from_protobuf(step_proto: StepProto) -> "Step": parent_step_id=step_proto.parent_step_id, test_result_id=step_proto.test_result_id, test_id=step_proto.test_id, - step_name=step_proto.step_name, - step_type=step_proto.step_type, + step_name=step_proto.name, + step_type=step_proto.type, notes=step_proto.notes, link=step_proto.link, schema_id=step_proto.schema_id, @@ -136,8 +136,8 @@ def to_protobuf(self) -> StepProto: parent_step_id=self.parent_step_id, test_result_id=self.test_result_id, test_id=self.test_id, - step_name=self.step_name, - step_type=self.step_type, + name=self.step_name, + type=self.step_type, notes=self.notes, start_date_time=( hightime_datetime_to_protobuf(self.start_date_time) diff --git a/src/ni/datastore/data/_types/_test_result.py b/src/ni/datastore/data/_types/_test_result.py index 9f52e40..1a1d6b9 100644 --- a/src/ni/datastore/data/_types/_test_result.py +++ b/src/ni/datastore/data/_types/_test_result.py @@ -151,7 +151,7 @@ def from_protobuf(test_result_proto: TestResultProto) -> "TestResult": software_item_ids=test_result_proto.software_item_ids, hardware_item_ids=test_result_proto.hardware_item_ids, test_adapter_ids=test_result_proto.test_adapter_ids, - test_result_name=test_result_proto.test_result_name, + test_result_name=test_result_proto.name, link=test_result_proto.link, schema_id=test_result_proto.schema_id, ) @@ -182,7 +182,7 @@ def to_protobuf(self) -> TestResultProto: software_item_ids=self.software_item_ids, hardware_item_ids=self.hardware_item_ids, test_adapter_ids=self.test_adapter_ids, - test_result_name=self.test_result_name, + name=self.test_result_name, start_date_time=( hightime_datetime_to_protobuf(self.start_date_time) if self.start_date_time diff --git a/src/ni/datastore/metadata/_types/_alias.py b/src/ni/datastore/metadata/_types/_alias.py index 75ce24f..70f65f7 100644 --- a/src/ni/datastore/metadata/_types/_alias.py +++ b/src/ni/datastore/metadata/_types/_alias.py @@ -45,7 +45,7 @@ def __init__( def from_protobuf(alias_proto: AliasProto) -> "Alias": """Create an Alias instance from a protobuf Alias message.""" return Alias( - alias_name=alias_proto.alias_name, + alias_name=alias_proto.name, target_type=alias_proto.target_type, target_id=alias_proto.target_id, ) @@ -53,7 +53,7 @@ def from_protobuf(alias_proto: AliasProto) -> "Alias": def to_protobuf(self) -> AliasProto: """Convert this Alias to a protobuf Alias message.""" return AliasProto( - alias_name=self.alias_name, + name=self.alias_name, target_type=self.target_type, target_id=self.target_id, ) diff --git a/src/ni/datastore/metadata/_types/_extension_schema.py b/src/ni/datastore/metadata/_types/_extension_schema.py index 35bb53c..2dfd00e 100644 --- a/src/ni/datastore/metadata/_types/_extension_schema.py +++ b/src/ni/datastore/metadata/_types/_extension_schema.py @@ -38,14 +38,14 @@ def __init__( def from_protobuf(extension_schema_proto: ExtensionSchemaProto) -> "ExtensionSchema": """Create an ExtensionSchema instance from a protobuf ExtensionSchema message.""" return ExtensionSchema( - schema_id=extension_schema_proto.schema_id, + schema_id=extension_schema_proto.id, schema=extension_schema_proto.schema, ) def to_protobuf(self) -> ExtensionSchemaProto: """Convert this ExtensionSchema to a protobuf ExtensionSchema message.""" return ExtensionSchemaProto( - schema_id=self.schema_id, + id=self.schema_id, schema=self.schema, ) diff --git a/src/ni/datastore/metadata/_types/_operator.py b/src/ni/datastore/metadata/_types/_operator.py index c8193a0..a6f5cc2 100644 --- a/src/ni/datastore/metadata/_types/_operator.py +++ b/src/ni/datastore/metadata/_types/_operator.py @@ -75,7 +75,7 @@ def __init__( def from_protobuf(operator_proto: OperatorProto) -> "Operator": """Create an Operator instance from a protobuf Operator message.""" operator = Operator( - operator_name=operator_proto.operator_name, + operator_name=operator_proto.name, role=operator_proto.role, link=operator_proto.link, schema_id=operator_proto.schema_id, @@ -88,7 +88,7 @@ def to_protobuf(self) -> OperatorProto: """Convert this Operator to a protobuf Operator message.""" operator_proto = OperatorProto( id=self.id, - operator_name=self.operator_name, + name=self.operator_name, role=self.role, link=self.link, schema_id=self.schema_id, diff --git a/src/ni/datastore/metadata/_types/_test.py b/src/ni/datastore/metadata/_types/_test.py index 381c424..4240505 100644 --- a/src/ni/datastore/metadata/_types/_test.py +++ b/src/ni/datastore/metadata/_types/_test.py @@ -75,7 +75,7 @@ def __init__( def from_protobuf(test_proto: TestProto) -> "Test": """Create a Test instance from a protobuf Test message.""" test = Test( - test_name=test_proto.test_name, + test_name=test_proto.name, description=test_proto.description, link=test_proto.link, schema_id=test_proto.schema_id, @@ -88,7 +88,7 @@ def to_protobuf(self) -> TestProto: """Convert this Test to a protobuf Test message.""" test_proto = TestProto( id=self.id, - test_name=self.test_name, + name=self.test_name, description=self.description, link=self.link, schema_id=self.schema_id, diff --git a/src/ni/datastore/metadata/_types/_test_description.py b/src/ni/datastore/metadata/_types/_test_description.py index d81f125..3f9e3a9 100644 --- a/src/ni/datastore/metadata/_types/_test_description.py +++ b/src/ni/datastore/metadata/_types/_test_description.py @@ -77,7 +77,7 @@ def from_protobuf(test_description_proto: TestDescriptionProto) -> "TestDescript """Create a TestDescription instance from a protobuf TestDescription message.""" test_description = TestDescription( uut_id=test_description_proto.uut_id, - test_description_name=test_description_proto.test_description_name, + test_description_name=test_description_proto.name, link=test_description_proto.link, schema_id=test_description_proto.schema_id, ) @@ -92,7 +92,7 @@ def to_protobuf(self) -> TestDescriptionProto: test_description_proto = TestDescriptionProto( id=self.id, uut_id=self.uut_id, - test_description_name=self.test_description_name, + name=self.test_description_name, link=self.link, schema_id=self.schema_id, ) diff --git a/src/ni/datastore/metadata/_types/_test_station.py b/src/ni/datastore/metadata/_types/_test_station.py index 9e31f93..0552555 100644 --- a/src/ni/datastore/metadata/_types/_test_station.py +++ b/src/ni/datastore/metadata/_types/_test_station.py @@ -78,7 +78,7 @@ def __init__( def from_protobuf(test_station_proto: TestStationProto) -> "TestStation": """Create a TestStation instance from a protobuf TestStation message.""" test_station = TestStation( - test_station_name=test_station_proto.test_station_name, + test_station_name=test_station_proto.name, asset_identifier=test_station_proto.asset_identifier, link=test_station_proto.link, schema_id=test_station_proto.schema_id, @@ -93,7 +93,7 @@ def to_protobuf(self) -> TestStationProto: """Convert this TestStation to a protobuf TestStation message.""" test_station_proto = TestStationProto( id=self.id, - test_station_name=self.test_station_name, + name=self.test_station_name, asset_identifier=self.asset_identifier, link=self.link, schema_id=self.schema_id, diff --git a/tests/unit/data/test_get_metadata.py b/tests/unit/data/test_get_metadata.py index bc6d150..bd5351f 100644 --- a/tests/unit/data/test_get_metadata.py +++ b/tests/unit/data/test_get_metadata.py @@ -38,8 +38,8 @@ def test___get_step___calls_data_store_service_client( parent_step_id="parent_step_id", test_result_id="test_result", test_id="test_id", - step_name="step_name", - step_type="step_type", + name="step_name", + type="step_type", notes="step_notes", start_date_time=hightime_datetime_to_protobuf(start_time), end_date_time=hightime_datetime_to_protobuf(end_time), @@ -69,7 +69,7 @@ def test___get_test_result___calls_data_store_service_client( software_item_ids=[], hardware_item_ids=[], test_adapter_ids=[], - test_result_name="test_result_name", + name="test_result_name", start_date_time=hightime_datetime_to_protobuf(start_time), end_date_time=hightime_datetime_to_protobuf(end_time), ) diff --git a/tests/unit/data/test_publish_measurement.py b/tests/unit/data/test_publish_measurement.py index c51e0f8..72a0321 100644 --- a/tests/unit/data/test_publish_measurement.py +++ b/tests/unit/data/test_publish_measurement.py @@ -66,7 +66,7 @@ def test___publish_boolean_data___calls_data_store_service_client( assert request.step_id == "step_id" assert request.measurement_name == "name" assert request.notes == "notes" - assert request.timestamp == unittest.mock.ANY + assert request.timestamps == unittest.mock.ANY assert request.scalar.bool_value == value assert request.outcome == Outcome.OUTCOME_PASSED assert request.error_information == ErrorInformation() @@ -292,10 +292,10 @@ def test___vector___publish_measurement_batch___calls_data_store_service_client( assert next(iter(response)).id == "response_id" assert request.step_id == "step_id" assert request.measurement_name == "name" - assert request.timestamp == [hightime_datetime_to_protobuf(timestamp)] + assert request.timestamps == [hightime_datetime_to_protobuf(timestamp)] assert request.scalar_values.double_array.values == [1.0, 2.0, 3.0] assert request.scalar_values.attributes["NI_UnitDescription"].string_value == "BatchUnits" - assert request.outcome == [Outcome.OUTCOME_PASSED] + assert request.outcomes == [Outcome.OUTCOME_PASSED] assert request.error_information == [ErrorInformation()] assert request.hardware_item_ids == [] assert request.software_item_ids == [] @@ -330,7 +330,7 @@ def test___int_list___publish_measurement_batch___calls_data_store_service_clien assert next(iter(response)).id == "response_id" assert request.step_id == "step_id" assert request.measurement_name == "name" - assert request.timestamp == [hightime_datetime_to_protobuf(timestamp)] + assert request.timestamps == [hightime_datetime_to_protobuf(timestamp)] assert request.scalar_values.sint32_array.values == [1, 2, 3] assert request.scalar_values.attributes["NI_UnitDescription"].string_value == "" @@ -363,7 +363,7 @@ def test___float_list___publish_measurement_batch___calls_data_store_service_cli assert next(iter(response)).id == "response_id" assert request.step_id == "step_id" assert request.measurement_name == "name" - assert request.timestamp == [hightime_datetime_to_protobuf(timestamp)] + assert request.timestamps == [hightime_datetime_to_protobuf(timestamp)] assert request.scalar_values.double_array.values == [1.0, 2.0, 3.0] assert request.scalar_values.attributes["NI_UnitDescription"].string_value == "" @@ -396,7 +396,7 @@ def test___bool_list___publish_measurement_batch___calls_data_store_service_clie assert next(iter(response)).id == "response_id" assert request.step_id == "step_id" assert request.measurement_name == "name" - assert request.timestamp == [hightime_datetime_to_protobuf(timestamp)] + assert request.timestamps == [hightime_datetime_to_protobuf(timestamp)] assert request.scalar_values.bool_array.values == [True, False, True] assert request.scalar_values.attributes["NI_UnitDescription"].string_value == "" @@ -429,7 +429,7 @@ def test___str_list___publish_measurement_batch___calls_data_store_service_clien assert next(iter(response)).id == "response_id" assert request.step_id == "step_id" assert request.measurement_name == "name" - assert request.timestamp == [hightime_datetime_to_protobuf(timestamp)] + assert request.timestamps == [hightime_datetime_to_protobuf(timestamp)] assert request.scalar_values.string_array.values == ["one", "two", "three"] assert request.scalar_values.attributes["NI_UnitDescription"].string_value == "" diff --git a/tests/unit/data/test_query_metadata.py b/tests/unit/data/test_query_metadata.py index 7456280..f3030dd 100644 --- a/tests/unit/data/test_query_metadata.py +++ b/tests/unit/data/test_query_metadata.py @@ -32,8 +32,8 @@ def test___query_steps___calls_data_store_service_client( parent_step_id="parent_step_id", test_result_id="test_result", test_id="test_id", - step_name="step_name", - step_type="step_type", + name="step_name", + type="step_type", notes="step_notes", start_date_time=hightime_datetime_to_protobuf(start_time), end_date_time=hightime_datetime_to_protobuf(end_time), diff --git a/tests/unit/metadata/test_get_metadata.py b/tests/unit/metadata/test_get_metadata.py index 081e8f0..59790cf 100644 --- a/tests/unit/metadata/test_get_metadata.py +++ b/tests/unit/metadata/test_get_metadata.py @@ -107,7 +107,7 @@ def test___get_operator___calls_metadata_store_service_client( ) -> None: operator = OperatorProto( id="operator_id", - operator_name="operator_name", + name="operator_name", role="role", link="link", extensions=None, @@ -131,7 +131,7 @@ def test___get_test_description___calls_metadata_store_service_client( test_description = TestDescriptionProto( id="test_description_id", uut_id="uut_id", - test_description_name="test_description_name", + name="test_description_name", link="link", extensions=None, schema_id="schema_id", @@ -153,7 +153,7 @@ def test___get_test___calls_metadata_store_service_client( ) -> None: test = TestProto( id="test_id", - test_name="test_name", + name="test_name", description="description", extensions=None, schema_id="schema_id", @@ -175,7 +175,7 @@ def test___get_test_station___calls_metadata_store_service_client( ) -> None: test_station = TestStationProto( id="test_station_id", - test_station_name="test_station_name", + name="test_station_name", asset_identifier="asset_identifier", link="link", extensions=None, diff --git a/tests/unit/metadata/test_query_metadata.py b/tests/unit/metadata/test_query_metadata.py index ab2b629..2a9f697 100644 --- a/tests/unit/metadata/test_query_metadata.py +++ b/tests/unit/metadata/test_query_metadata.py @@ -107,7 +107,7 @@ def test___query_operators___calls_metadata_store_service_client( ) -> None: operator = OperatorProto( id="operator_id", - operator_name="operator_name", + name="operator_name", role="role", link="link", extensions=None, @@ -131,7 +131,7 @@ def test___query_test_descriptions___calls_metadata_store_service_client( test_description = TestDescriptionProto( id="test_description_id", uut_id="uut_id", - test_description_name="test_description_name", + name="test_description_name", link="link", extensions=None, schema_id="schema_id", @@ -153,7 +153,7 @@ def test___query_tests___calls_metadata_store_service_client( ) -> None: test = TestProto( id="test_id", - test_name="test_name", + name="test_name", description="description", extensions=None, schema_id="schema_id", @@ -175,7 +175,7 @@ def test___query_test_stations___calls_metadata_store_service_client( ) -> None: test_station = TestStationProto( id="test_station_id", - test_station_name="test_station_name", + name="test_station_name", asset_identifier="asset_identifier", link="link", extensions=None, From 0bfd907bf6dd47867305a845fbdab1d793947b83 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 3 Nov 2025 15:47:56 -0600 Subject: [PATCH 02/26] Update to the latest versions of data.client and metadata.client --- examples/overview/poetry.lock | 111 ++++++------------------------- examples/overview/pyproject.toml | 4 +- poetry.lock | 30 ++++----- pyproject.toml | 5 +- 4 files changed, 40 insertions(+), 110 deletions(-) diff --git a/examples/overview/poetry.lock b/examples/overview/poetry.lock index e49e6b2..4e36e3c 100644 --- a/examples/overview/poetry.lock +++ b/examples/overview/poetry.lock @@ -164,74 +164,6 @@ files = [ pycodestyle = "*" setuptools = "*" -[[package]] -name = "grpcio" -version = "1.75.0" -description = "HTTP/2-based RPC framework" -optional = false -python-versions = ">=3.9" -groups = ["main", "dev"] -markers = "python_version < \"3.14\"" -files = [ - {file = "grpcio-1.75.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:1ec9cbaec18d9597c718b1ed452e61748ac0b36ba350d558f9ded1a94cc15ec7"}, - {file = "grpcio-1.75.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:7ee5ee42bfae8238b66a275f9ebcf6f295724375f2fa6f3b52188008b6380faf"}, - {file = "grpcio-1.75.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9146e40378f551eed66c887332afc807fcce593c43c698e21266a4227d4e20d2"}, - {file = "grpcio-1.75.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0c40f368541945bb664857ecd7400acb901053a1abbcf9f7896361b2cfa66798"}, - {file = "grpcio-1.75.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:50a6e43a9adc6938e2a16c9d9f8a2da9dd557ddd9284b73b07bd03d0e098d1e9"}, - {file = "grpcio-1.75.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dce15597ca11913b78e1203c042d5723e3ea7f59e7095a1abd0621be0e05b895"}, - {file = "grpcio-1.75.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:851194eec47755101962da423f575ea223c9dd7f487828fe5693920e8745227e"}, - {file = "grpcio-1.75.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ca123db0813eef80625a4242a0c37563cb30a3edddebe5ee65373854cf187215"}, - {file = "grpcio-1.75.0-cp310-cp310-win32.whl", hash = "sha256:222b0851e20c04900c63f60153503e918b08a5a0fad8198401c0b1be13c6815b"}, - {file = "grpcio-1.75.0-cp310-cp310-win_amd64.whl", hash = "sha256:bb58e38a50baed9b21492c4b3f3263462e4e37270b7ea152fc10124b4bd1c318"}, - {file = "grpcio-1.75.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:7f89d6d0cd43170a80ebb4605cad54c7d462d21dc054f47688912e8bf08164af"}, - {file = "grpcio-1.75.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:cb6c5b075c2d092f81138646a755f0dad94e4622300ebef089f94e6308155d82"}, - {file = "grpcio-1.75.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:494dcbade5606128cb9f530ce00331a90ecf5e7c5b243d373aebdb18e503c346"}, - {file = "grpcio-1.75.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:050760fd29c8508844a720f06c5827bb00de8f5e02f58587eb21a4444ad706e5"}, - {file = "grpcio-1.75.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:266fa6209b68a537b2728bb2552f970e7e78c77fe43c6e9cbbe1f476e9e5c35f"}, - {file = "grpcio-1.75.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:06d22e1d8645e37bc110f4c589cb22c283fd3de76523065f821d6e81de33f5d4"}, - {file = "grpcio-1.75.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9880c323595d851292785966cadb6c708100b34b163cab114e3933f5773cba2d"}, - {file = "grpcio-1.75.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:55a2d5ae79cd0f68783fb6ec95509be23746e3c239290b2ee69c69a38daa961a"}, - {file = "grpcio-1.75.0-cp311-cp311-win32.whl", hash = "sha256:352dbdf25495eef584c8de809db280582093bc3961d95a9d78f0dfb7274023a2"}, - {file = "grpcio-1.75.0-cp311-cp311-win_amd64.whl", hash = "sha256:678b649171f229fb16bda1a2473e820330aa3002500c4f9fd3a74b786578e90f"}, - {file = "grpcio-1.75.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:fa35ccd9501ffdd82b861809cbfc4b5b13f4b4c5dc3434d2d9170b9ed38a9054"}, - {file = "grpcio-1.75.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:0fcb77f2d718c1e58cc04ef6d3b51e0fa3b26cf926446e86c7eba105727b6cd4"}, - {file = "grpcio-1.75.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:36764a4ad9dc1eb891042fab51e8cdf7cc014ad82cee807c10796fb708455041"}, - {file = "grpcio-1.75.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:725e67c010f63ef17fc052b261004942763c0b18dcd84841e6578ddacf1f9d10"}, - {file = "grpcio-1.75.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:91fbfc43f605c5ee015c9056d580a70dd35df78a7bad97e05426795ceacdb59f"}, - {file = "grpcio-1.75.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7a9337ac4ce61c388e02019d27fa837496c4b7837cbbcec71b05934337e51531"}, - {file = "grpcio-1.75.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ee16e232e3d0974750ab5f4da0ab92b59d6473872690b5e40dcec9a22927f22e"}, - {file = "grpcio-1.75.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:55dfb9122973cc69520b23d39867726722cafb32e541435707dc10249a1bdbc6"}, - {file = "grpcio-1.75.0-cp312-cp312-win32.whl", hash = "sha256:fb64dd62face3d687a7b56cd881e2ea39417af80f75e8b36f0f81dfd93071651"}, - {file = "grpcio-1.75.0-cp312-cp312-win_amd64.whl", hash = "sha256:6b365f37a9c9543a9e91c6b4103d68d38d5bcb9965b11d5092b3c157bd6a5ee7"}, - {file = "grpcio-1.75.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:1bb78d052948d8272c820bb928753f16a614bb2c42fbf56ad56636991b427518"}, - {file = "grpcio-1.75.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:9dc4a02796394dd04de0b9673cb79a78901b90bb16bf99ed8cb528c61ed9372e"}, - {file = "grpcio-1.75.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:437eeb16091d31498585d73b133b825dc80a8db43311e332c08facf820d36894"}, - {file = "grpcio-1.75.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:c2c39984e846bd5da45c5f7bcea8fafbe47c98e1ff2b6f40e57921b0c23a52d0"}, - {file = "grpcio-1.75.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:38d665f44b980acdbb2f0e1abf67605ba1899f4d2443908df9ec8a6f26d2ed88"}, - {file = "grpcio-1.75.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2e8e752ab5cc0a9c5b949808c000ca7586223be4f877b729f034b912364c3964"}, - {file = "grpcio-1.75.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3a6788b30aa8e6f207c417874effe3f79c2aa154e91e78e477c4825e8b431ce0"}, - {file = "grpcio-1.75.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc33e67cab6141c54e75d85acd5dec616c5095a957ff997b4330a6395aa9b51"}, - {file = "grpcio-1.75.0-cp313-cp313-win32.whl", hash = "sha256:c8cfc780b7a15e06253aae5f228e1e84c0d3c4daa90faf5bc26b751174da4bf9"}, - {file = "grpcio-1.75.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c91d5b16eff3cbbe76b7a1eaaf3d91e7a954501e9d4f915554f87c470475c3d"}, - {file = "grpcio-1.75.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:0b85f4ebe6b56d2a512201bb0e5f192c273850d349b0a74ac889ab5d38959d16"}, - {file = "grpcio-1.75.0-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:68c95b1c1e3bf96ceadf98226e9dfe2bc92155ce352fa0ee32a1603040e61856"}, - {file = "grpcio-1.75.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:153c5a7655022c3626ad70be3d4c2974cb0967f3670ee49ece8b45b7a139665f"}, - {file = "grpcio-1.75.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:53067c590ac3638ad0c04272f2a5e7e32a99fec8824c31b73bc3ef93160511fa"}, - {file = "grpcio-1.75.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:78dcc025a144319b66df6d088bd0eda69e1719eb6ac6127884a36188f336df19"}, - {file = "grpcio-1.75.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1ec2937fd92b5b4598cbe65f7e57d66039f82b9e2b7f7a5f9149374057dde77d"}, - {file = "grpcio-1.75.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:597340a41ad4b619aaa5c9b94f7e6ba4067885386342ab0af039eda945c255cd"}, - {file = "grpcio-1.75.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0aa795198b28807d28570c0a5f07bb04d5facca7d3f27affa6ae247bbd7f312a"}, - {file = "grpcio-1.75.0-cp39-cp39-win32.whl", hash = "sha256:585147859ff4603798e92605db28f4a97c821c69908e7754c44771c27b239bbd"}, - {file = "grpcio-1.75.0-cp39-cp39-win_amd64.whl", hash = "sha256:eafbe3563f9cb378370a3fa87ef4870539cf158124721f3abee9f11cd8162460"}, - {file = "grpcio-1.75.0.tar.gz", hash = "sha256:b989e8b09489478c2d19fecc744a298930f40d8b27c3638afbfe84d22f36ce4e"}, -] - -[package.dependencies] -typing-extensions = ">=4.12,<5.0" - -[package.extras] -protobuf = ["grpcio-tools (>=1.75.0)"] - [[package]] name = "grpcio" version = "1.76.0" @@ -239,7 +171,6 @@ description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.9" groups = ["main", "dev"] -markers = "python_version >= \"3.14\"" files = [ {file = "grpcio-1.76.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc"}, {file = "grpcio-1.76.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde"}, @@ -736,7 +667,7 @@ protobuf = ">=4.21" [[package]] name = "ni-datastore" version = "0.1.0.dev5" -description = "APIs for publishing and retrieving data from the NI Measurement Data Store" +description = "APIs for publishing and retrieving data from NI Measurement Data Services" optional = false python-versions = "^3.10" groups = ["dev"] @@ -746,8 +677,8 @@ develop = true [package.dependencies] hightime = ">=0.3.0.dev0" ni-datamonikers-v1-client = ">=0.1.0.dev1" -ni-measurements-data-v1-client = ">=0.1.0.dev2" -ni-measurements-metadata-v1-client = ">=0.1.0.dev2" +ni-measurements-data-v1-client = ">=0.2.0.dev0" +ni-measurements-metadata-v1-client = ">=0.2.0.dev0" ni-protobuf-types = ">=1.0.1.dev0" protobuf = ">=4.21" @@ -806,30 +737,30 @@ protobuf = ">=4.21" [[package]] name = "ni-measurements-data-v1-client" -version = "0.1.0.dev2" +version = "0.2.0.dev0" description = "gRPC Client for NI Data Store Service" optional = false -python-versions = "<4.0,>=3.9" +python-versions = "<4.0,>=3.10" groups = ["main", "dev"] files = [ - {file = "ni_measurements_data_v1_client-0.1.0.dev2-py3-none-any.whl", hash = "sha256:be9fce9adcd2165e0387fc8d72a92a20a2d33f45aa9c0ce55dd00bc5306483c6"}, - {file = "ni_measurements_data_v1_client-0.1.0.dev2.tar.gz", hash = "sha256:4f598cd890658c66e028a33e7b065785ded238c5b4668d828083e92ffb727cdb"}, + {file = "ni_measurements_data_v1_client-0.2.0.dev0-py3-none-any.whl", hash = "sha256:b3c56b2b58a2ca6046c07850cb4a4d40f95b075c54e5f154fc38737acf59b7c9"}, + {file = "ni_measurements_data_v1_client-0.2.0.dev0.tar.gz", hash = "sha256:49e7e9dd2dddd70cbf5b4d9f4b312055c54ad808f1d014f616c3fedf70a1fb48"}, ] [package.dependencies] ni-measurementlink-discovery-v1-client = ">=0.1.0.dev0" -ni-measurements-data-v1-proto = ">=0.1.0.dev2" +ni-measurements-data-v1-proto = ">=0.1.0.dev4" [[package]] name = "ni-measurements-data-v1-proto" -version = "0.1.0.dev2" +version = "0.1.0.dev4" description = "Protobuf data types and service stubs for NI data store gRPC APIs" optional = false -python-versions = "<4.0,>=3.9" +python-versions = "<4.0,>=3.10" groups = ["main", "dev"] files = [ - {file = "ni_measurements_data_v1_proto-0.1.0.dev2-py3-none-any.whl", hash = "sha256:ac2e8e960f3e830368535fa48ce68236a4ecede1c34385c7fc698e2a2c885db3"}, - {file = "ni_measurements_data_v1_proto-0.1.0.dev2.tar.gz", hash = "sha256:d7b9180282a0760b1e81b6f8317406255bc86a9ddf890016edfd280ea4b7de83"}, + {file = "ni_measurements_data_v1_proto-0.1.0.dev4-py3-none-any.whl", hash = "sha256:bf9124e6d5b7749313bde3348755fd7c4213ff9270069cf5cbb449ef754566aa"}, + {file = "ni_measurements_data_v1_proto-0.1.0.dev4.tar.gz", hash = "sha256:701c40918edbadef27dd98216a4bba99044d57cc5e542e8e8501fcc8b9b5edf6"}, ] [package.dependencies] @@ -840,30 +771,30 @@ protobuf = ">=4.21" [[package]] name = "ni-measurements-metadata-v1-client" -version = "0.1.0.dev2" +version = "0.2.0.dev0" description = "gRPC Client for NI Metadata Store Service" optional = false -python-versions = "<4.0,>=3.9" +python-versions = "<4.0,>=3.10" groups = ["main", "dev"] files = [ - {file = "ni_measurements_metadata_v1_client-0.1.0.dev2-py3-none-any.whl", hash = "sha256:afd2ebaa4252aba10c04c4afa49b20574e838ad3e3ad9f5306f3180ca1c0fb33"}, - {file = "ni_measurements_metadata_v1_client-0.1.0.dev2.tar.gz", hash = "sha256:57676fc3d37301b630c7bafbf0aec72ce2a85fcc769b0eac68888a271c14d55a"}, + {file = "ni_measurements_metadata_v1_client-0.2.0.dev0-py3-none-any.whl", hash = "sha256:a70ffc0bfec736299e0e8e09e4b1883e8f6dcf4865085d901625b13b7b41050d"}, + {file = "ni_measurements_metadata_v1_client-0.2.0.dev0.tar.gz", hash = "sha256:37ef497c11a6fa114ee16d78cd41712d2f734602afd3b9aebe145bd09df28856"}, ] [package.dependencies] ni-measurementlink-discovery-v1-client = ">=0.1.0.dev0" -ni-measurements-metadata-v1-proto = ">=0.1.0.dev2" +ni-measurements-metadata-v1-proto = ">=0.1.0.dev3" [[package]] name = "ni-measurements-metadata-v1-proto" -version = "0.1.0.dev2" +version = "0.1.0.dev3" description = "Protobuf data types and service stub for NI metadata store gRPC APIs" optional = false python-versions = "<4.0,>=3.9" groups = ["main", "dev"] files = [ - {file = "ni_measurements_metadata_v1_proto-0.1.0.dev2-py3-none-any.whl", hash = "sha256:e460171ccc5f44c52856dcb182ac5d09a552c0b74e43c766ec77da1d5956dd19"}, - {file = "ni_measurements_metadata_v1_proto-0.1.0.dev2.tar.gz", hash = "sha256:50e202d9d688e2ec4675aa0c3cfa4b60045d5b276947aae769ab05e3099ea754"}, + {file = "ni_measurements_metadata_v1_proto-0.1.0.dev3-py3-none-any.whl", hash = "sha256:8800a3ed141f2269eae01cd022b81e42b2c7f9ebca67060002fbd3b22b8abad5"}, + {file = "ni_measurements_metadata_v1_proto-0.1.0.dev3.tar.gz", hash = "sha256:3e9c0b6aa7c9f6a2d2e571fa863c765afa91803be85e052193814b8cd4e2573b"}, ] [package.dependencies] @@ -1453,4 +1384,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = "^3.10" -content-hash = "599cdc8a6b489c120ede3e6a45a5c8925ccb8324cc992b0728d405a1b95c063a" +content-hash = "eab472a16ae5ee0ef69fac7209ad28cc5459fa7fb44ef92a8d20694b1a685f32" diff --git a/examples/overview/pyproject.toml b/examples/overview/pyproject.toml index 32cadc8..dfc1482 100644 --- a/examples/overview/pyproject.toml +++ b/examples/overview/pyproject.toml @@ -42,8 +42,8 @@ requires-poetry = '>=2.1,<3.0' python = "^3.10" protobuf = {version=">=4.21"} ni-datamonikers-v1-client = { version = ">=0.1.0.dev1", allow-prereleases = true } -ni-measurements-data-v1-client = { version = ">=0.1.0.dev2", allow-prereleases = true } -ni-measurements-metadata-v1-client = { version = ">=0.1.0.dev2", allow-prereleases = true } +ni-measurements-data-v1-client = { version = ">=0.2.0.dev0", allow-prereleases = true } +ni-measurements-metadata-v1-client = { version = ">=0.2.0.dev0", allow-prereleases = true } ni-protobuf-types = { version = ">=1.0.1.dev0", allow-prereleases = true } hightime = { version = ">=0.3.0.dev0", allow-prereleases = true } grpcio-tools = [ diff --git a/poetry.lock b/poetry.lock index 6f1056d..d695b68 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2334,30 +2334,30 @@ protobuf = ">=4.21" [[package]] name = "ni-measurements-data-v1-client" -version = "0.1.0.dev2" +version = "0.2.0.dev0" description = "gRPC Client for NI Data Store Service" optional = false -python-versions = "<4.0,>=3.9" +python-versions = "<4.0,>=3.10" groups = ["main"] files = [ - {file = "ni_measurements_data_v1_client-0.1.0.dev2-py3-none-any.whl", hash = "sha256:be9fce9adcd2165e0387fc8d72a92a20a2d33f45aa9c0ce55dd00bc5306483c6"}, - {file = "ni_measurements_data_v1_client-0.1.0.dev2.tar.gz", hash = "sha256:4f598cd890658c66e028a33e7b065785ded238c5b4668d828083e92ffb727cdb"}, + {file = "ni_measurements_data_v1_client-0.2.0.dev0-py3-none-any.whl", hash = "sha256:b3c56b2b58a2ca6046c07850cb4a4d40f95b075c54e5f154fc38737acf59b7c9"}, + {file = "ni_measurements_data_v1_client-0.2.0.dev0.tar.gz", hash = "sha256:49e7e9dd2dddd70cbf5b4d9f4b312055c54ad808f1d014f616c3fedf70a1fb48"}, ] [package.dependencies] ni-measurementlink-discovery-v1-client = ">=0.1.0.dev0" -ni-measurements-data-v1-proto = ">=0.1.0.dev2" +ni-measurements-data-v1-proto = ">=0.1.0.dev4" [[package]] name = "ni-measurements-data-v1-proto" -version = "0.1.0.dev3" +version = "0.1.0.dev4" description = "Protobuf data types and service stubs for NI data store gRPC APIs" optional = false -python-versions = "<4.0,>=3.9" +python-versions = "<4.0,>=3.10" groups = ["main"] files = [ - {file = "ni_measurements_data_v1_proto-0.1.0.dev3-py3-none-any.whl", hash = "sha256:d50f07b94946aedbf3f8689511dff8b91e532bd40dad647822b82d5ec1bad24c"}, - {file = "ni_measurements_data_v1_proto-0.1.0.dev3.tar.gz", hash = "sha256:0d43ce0fc2ce129296024ae80a1e1864a01657fea3b44eec009af19564e7deab"}, + {file = "ni_measurements_data_v1_proto-0.1.0.dev4-py3-none-any.whl", hash = "sha256:bf9124e6d5b7749313bde3348755fd7c4213ff9270069cf5cbb449ef754566aa"}, + {file = "ni_measurements_data_v1_proto-0.1.0.dev4.tar.gz", hash = "sha256:701c40918edbadef27dd98216a4bba99044d57cc5e542e8e8501fcc8b9b5edf6"}, ] [package.dependencies] @@ -2368,19 +2368,19 @@ protobuf = ">=4.21" [[package]] name = "ni-measurements-metadata-v1-client" -version = "0.1.0.dev2" +version = "0.2.0.dev0" description = "gRPC Client for NI Metadata Store Service" optional = false -python-versions = "<4.0,>=3.9" +python-versions = "<4.0,>=3.10" groups = ["main"] files = [ - {file = "ni_measurements_metadata_v1_client-0.1.0.dev2-py3-none-any.whl", hash = "sha256:afd2ebaa4252aba10c04c4afa49b20574e838ad3e3ad9f5306f3180ca1c0fb33"}, - {file = "ni_measurements_metadata_v1_client-0.1.0.dev2.tar.gz", hash = "sha256:57676fc3d37301b630c7bafbf0aec72ce2a85fcc769b0eac68888a271c14d55a"}, + {file = "ni_measurements_metadata_v1_client-0.2.0.dev0-py3-none-any.whl", hash = "sha256:a70ffc0bfec736299e0e8e09e4b1883e8f6dcf4865085d901625b13b7b41050d"}, + {file = "ni_measurements_metadata_v1_client-0.2.0.dev0.tar.gz", hash = "sha256:37ef497c11a6fa114ee16d78cd41712d2f734602afd3b9aebe145bd09df28856"}, ] [package.dependencies] ni-measurementlink-discovery-v1-client = ">=0.1.0.dev0" -ni-measurements-metadata-v1-proto = ">=0.1.0.dev2" +ni-measurements-metadata-v1-proto = ">=0.1.0.dev3" [[package]] name = "ni-measurements-metadata-v1-proto" @@ -4330,4 +4330,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = "^3.10" -content-hash = "ecf25bb5dcb9289fb64b139078f8517659665b0c15e6a859a4825a993498f92b" +content-hash = "c99b5a77da8d3386e67aaf6fab12ef49be57dbc607e14717469ce61af012e10b" diff --git a/pyproject.toml b/pyproject.toml index ee841b6..a663d4d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,9 +38,8 @@ requires-poetry = '>=2.1,<3.0' python = "^3.10" protobuf = {version=">=4.21"} ni-datamonikers-v1-client = { version = ">=0.1.0.dev1", allow-prereleases = true } -ni-measurements-data-v1-client = { version = ">=0.1.0.dev2", allow-prereleases = true } -ni-measurements-data-v1-proto = { version = ">=0.1.0.dev2", allow-prereleases = true } -ni-measurements-metadata-v1-client = { version = ">=0.1.0.dev2", allow-prereleases = true } +ni-measurements-data-v1-client = { version = ">=0.2.0.dev0", allow-prereleases = true } +ni-measurements-metadata-v1-client = { version = ">=0.2.0.dev0", allow-prereleases = true } ni-protobuf-types = { version = ">=1.0.1.dev0", allow-prereleases = true } hightime = { version = ">=0.3.0.dev0", allow-prereleases = true } From 87cbdab2690ec48dba92c2e245957722bb8fa585 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Mon, 3 Nov 2025 15:59:17 -0600 Subject: [PATCH 03/26] Fix a couple tests --- tests/unit/data/test_publish_measurement.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/data/test_publish_measurement.py b/tests/unit/data/test_publish_measurement.py index 72a0321..a8ddd77 100644 --- a/tests/unit/data/test_publish_measurement.py +++ b/tests/unit/data/test_publish_measurement.py @@ -66,7 +66,7 @@ def test___publish_boolean_data___calls_data_store_service_client( assert request.step_id == "step_id" assert request.measurement_name == "name" assert request.notes == "notes" - assert request.timestamps == unittest.mock.ANY + assert request.timestamp == unittest.mock.ANY assert request.scalar.bool_value == value assert request.outcome == Outcome.OUTCOME_PASSED assert request.error_information == ErrorInformation() From 50ad6d3c00a2ba909b2453a0bedd0b1ec5c931d6 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 09:43:06 -0600 Subject: [PATCH 04/26] Run poetry update to include renovate changes --- poetry.lock | 66 ++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/poetry.lock b/poetry.lock index d695b68..8a34565 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1258,14 +1258,14 @@ pygments = "*" [[package]] name = "ipywidgets" -version = "8.1.7" +version = "8.1.8" description = "Jupyter interactive widgets" optional = false python-versions = ">=3.7" groups = ["dev"] files = [ - {file = "ipywidgets-8.1.7-py3-none-any.whl", hash = "sha256:764f2602d25471c213919b8a1997df04bef869251db4ca8efba1b76b1bd9f7bb"}, - {file = "ipywidgets-8.1.7.tar.gz", hash = "sha256:15f1ac050b9ccbefd45dccfbb2ef6bed0029d8278682d569d71b8dd96bee0376"}, + {file = "ipywidgets-8.1.8-py3-none-any.whl", hash = "sha256:ecaca67aed704a338f88f67b1181b58f821ab5dc89c1f0f5ef99db43c1c2921e"}, + {file = "ipywidgets-8.1.8.tar.gz", hash = "sha256:61f969306b95f85fba6b6986b7fe45d73124d1d9e3023a8068710d47a22ea668"}, ] [package.dependencies] @@ -1682,14 +1682,14 @@ test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-v [[package]] name = "jupyterlab-widgets" -version = "3.0.15" +version = "3.0.16" description = "Jupyter interactive widgets for JupyterLab" optional = false python-versions = ">=3.7" groups = ["dev"] files = [ - {file = "jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c"}, - {file = "jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b"}, + {file = "jupyterlab_widgets-3.0.16-py3-none-any.whl", hash = "sha256:45fa36d9c6422cf2559198e4db481aa243c7a32d9926b500781c830c80f7ecf8"}, + {file = "jupyterlab_widgets-3.0.16.tar.gz", hash = "sha256:423da05071d55cf27a9e602216d35a3a65a3e41cdf9c5d3b643b814ce38c19e0"}, ] [[package]] @@ -2134,14 +2134,14 @@ files = [ [[package]] name = "narwhals" -version = "2.10.0" +version = "2.10.1" description = "Extremely lightweight compatibility layer between dataframe libraries" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "narwhals-2.10.0-py3-none-any.whl", hash = "sha256:baed44e8fc38e800e3a585e3fa9843a7079a6fad5fbffbecee4348d6ac52298c"}, - {file = "narwhals-2.10.0.tar.gz", hash = "sha256:1c05bbef2048a4045263de7d98c3d06140583eb13d796dd733b2157f05d24485"}, + {file = "narwhals-2.10.1-py3-none-any.whl", hash = "sha256:eed3d9ec8f821963456fef306c1ad11017995982169fca1f38f71c97d6a97b9b"}, + {file = "narwhals-2.10.1.tar.gz", hash = "sha256:d6e3a9b1c0904a82984dec58a3d12b3bc08e9d61bbee639e7bb05349e663d036"}, ] [package.extras] @@ -2893,35 +2893,35 @@ files = [ [[package]] name = "psutil" -version = "7.1.2" +version = "7.1.3" description = "Cross-platform lib for process and system monitoring." optional = false python-versions = ">=3.6" groups = ["dev"] files = [ - {file = "psutil-7.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0cc5c6889b9871f231ed5455a9a02149e388fffcb30b607fb7a8896a6d95f22e"}, - {file = "psutil-7.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8e9e77a977208d84aa363a4a12e0f72189d58bbf4e46b49aae29a2c6e93ef206"}, - {file = "psutil-7.1.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d9623a5e4164d2220ecceb071f4b333b3c78866141e8887c072129185f41278"}, - {file = "psutil-7.1.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:364b1c10fe4ed59c89ec49e5f1a70da353b27986fa8233b4b999df4742a5ee2f"}, - {file = "psutil-7.1.2-cp313-cp313t-win_amd64.whl", hash = "sha256:f101ef84de7e05d41310e3ccbdd65a6dd1d9eed85e8aaf0758405d022308e204"}, - {file = "psutil-7.1.2-cp313-cp313t-win_arm64.whl", hash = "sha256:20c00824048a95de67f00afedc7b08b282aa08638585b0206a9fb51f28f1a165"}, - {file = "psutil-7.1.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:e09cfe92aa8e22b1ec5e2d394820cf86c5dff6367ac3242366485dfa874d43bc"}, - {file = "psutil-7.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:fa6342cf859c48b19df3e4aa170e4cfb64aadc50b11e06bb569c6c777b089c9e"}, - {file = "psutil-7.1.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:625977443498ee7d6c1e63e93bacca893fd759a66c5f635d05e05811d23fb5ee"}, - {file = "psutil-7.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a24bcd7b7f2918d934af0fb91859f621b873d6aa81267575e3655cd387572a7"}, - {file = "psutil-7.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:329f05610da6380982e6078b9d0881d9ab1e9a7eb7c02d833bfb7340aa634e31"}, - {file = "psutil-7.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:7b04c29e3c0c888e83ed4762b70f31e65c42673ea956cefa8ced0e31e185f582"}, - {file = "psutil-7.1.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c9ba5c19f2d46203ee8c152c7b01df6eec87d883cfd8ee1af2ef2727f6b0f814"}, - {file = "psutil-7.1.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:2a486030d2fe81bec023f703d3d155f4823a10a47c36784c84f1cc7f8d39bedb"}, - {file = "psutil-7.1.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3efd8fc791492e7808a51cb2b94889db7578bfaea22df931424f874468e389e3"}, - {file = "psutil-7.1.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2aeb9b64f481b8eabfc633bd39e0016d4d8bbcd590d984af764d80bf0851b8a"}, - {file = "psutil-7.1.2-cp37-abi3-win_amd64.whl", hash = "sha256:8e17852114c4e7996fe9da4745c2bdef001ebbf2f260dec406290e66628bdb91"}, - {file = "psutil-7.1.2-cp37-abi3-win_arm64.whl", hash = "sha256:3e988455e61c240cc879cb62a008c2699231bf3e3d061d7fce4234463fd2abb4"}, - {file = "psutil-7.1.2.tar.gz", hash = "sha256:aa225cdde1335ff9684708ee8c72650f6598d5ed2114b9a7c5802030b1785018"}, + {file = "psutil-7.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0005da714eee687b4b8decd3d6cc7c6db36215c9e74e5ad2264b90c3df7d92dc"}, + {file = "psutil-7.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19644c85dcb987e35eeeaefdc3915d059dac7bd1167cdcdbf27e0ce2df0c08c0"}, + {file = "psutil-7.1.3-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95ef04cf2e5ba0ab9eaafc4a11eaae91b44f4ef5541acd2ee91d9108d00d59a7"}, + {file = "psutil-7.1.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1068c303be3a72f8e18e412c5b2a8f6d31750fb152f9cb106b54090296c9d251"}, + {file = "psutil-7.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:18349c5c24b06ac5612c0428ec2a0331c26443d259e2a0144a9b24b4395b58fa"}, + {file = "psutil-7.1.3-cp313-cp313t-win_arm64.whl", hash = "sha256:c525ffa774fe4496282fb0b1187725793de3e7c6b29e41562733cae9ada151ee"}, + {file = "psutil-7.1.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:b403da1df4d6d43973dc004d19cee3b848e998ae3154cc8097d139b77156c353"}, + {file = "psutil-7.1.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ad81425efc5e75da3f39b3e636293360ad8d0b49bed7df824c79764fb4ba9b8b"}, + {file = "psutil-7.1.3-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f33a3702e167783a9213db10ad29650ebf383946e91bc77f28a5eb083496bc9"}, + {file = "psutil-7.1.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fac9cd332c67f4422504297889da5ab7e05fd11e3c4392140f7370f4208ded1f"}, + {file = "psutil-7.1.3-cp314-cp314t-win_amd64.whl", hash = "sha256:3792983e23b69843aea49c8f5b8f115572c5ab64c153bada5270086a2123c7e7"}, + {file = "psutil-7.1.3-cp314-cp314t-win_arm64.whl", hash = "sha256:31d77fcedb7529f27bb3a0472bea9334349f9a04160e8e6e5020f22c59893264"}, + {file = "psutil-7.1.3-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab"}, + {file = "psutil-7.1.3-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880"}, + {file = "psutil-7.1.3-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3"}, + {file = "psutil-7.1.3-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b"}, + {file = "psutil-7.1.3-cp37-abi3-win_amd64.whl", hash = "sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd"}, + {file = "psutil-7.1.3-cp37-abi3-win_arm64.whl", hash = "sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1"}, + {file = "psutil-7.1.3.tar.gz", hash = "sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74"}, ] [package.extras] -dev = ["abi3audit", "black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pyreadline ; os_name == \"nt\"", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-xdist", "pywin32 ; os_name == \"nt\" and platform_python_implementation != \"PyPy\"", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "validate-pyproject[all]", "virtualenv", "vulture", "wheel", "wheel ; os_name == \"nt\" and platform_python_implementation != \"PyPy\"", "wmi ; os_name == \"nt\" and platform_python_implementation != \"PyPy\""] +dev = ["abi3audit", "black", "check-manifest", "colorama ; os_name == \"nt\"", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pyreadline ; os_name == \"nt\"", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-xdist", "pywin32 ; os_name == \"nt\" and platform_python_implementation != \"PyPy\"", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "validate-pyproject[all]", "virtualenv", "vulture", "wheel", "wheel ; os_name == \"nt\" and platform_python_implementation != \"PyPy\"", "wmi ; os_name == \"nt\" and platform_python_implementation != \"PyPy\""] test = ["pytest", "pytest-instafail", "pytest-subtests", "pytest-xdist", "pywin32 ; os_name == \"nt\" and platform_python_implementation != \"PyPy\"", "setuptools", "wheel ; os_name == \"nt\" and platform_python_implementation != \"PyPy\"", "wmi ; os_name == \"nt\" and platform_python_implementation != \"PyPy\""] [[package]] @@ -4317,14 +4317,14 @@ test = ["pytest", "websockets"] [[package]] name = "widgetsnbextension" -version = "4.0.14" +version = "4.0.15" description = "Jupyter interactive widgets for Jupyter Notebook" optional = false python-versions = ">=3.7" groups = ["dev"] files = [ - {file = "widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575"}, - {file = "widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af"}, + {file = "widgetsnbextension-4.0.15-py3-none-any.whl", hash = "sha256:8156704e4346a571d9ce73b84bee86a29906c9abfd7223b7228a28899ccf3366"}, + {file = "widgetsnbextension-4.0.15.tar.gz", hash = "sha256:de8610639996f1567952d763a5a41af8af37f2575a41f9852a38f947eb82a3b9"}, ] [metadata] From 4db4b10400c687bc589eaa67ef0ba7f3e5fc0f8c Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 10:01:42 -0600 Subject: [PATCH 05/26] Rename wrapper class fields to match .proto fields --- examples/overview/src/overview.py | 4 ++-- src/ni/datastore/metadata/_types/_operator.py | 14 +++++++------- src/ni/datastore/metadata/_types/_test.py | 14 +++++++------- .../metadata/_types/_test_description.py | 14 +++++++------- .../datastore/metadata/_types/_test_station.py | 14 +++++++------- tests/acceptance/test_publish_with_metadata.py | 16 ++++++++-------- tests/unit/metadata/test_create_metadata.py | 8 ++++---- tests/unit/metadata/test_get_metadata.py | 8 ++++---- tests/unit/metadata/test_query_metadata.py | 8 ++++---- 9 files changed, 50 insertions(+), 50 deletions(-) diff --git a/examples/overview/src/overview.py b/examples/overview/src/overview.py index bc9d16d..e1aa66a 100644 --- a/examples/overview/src/overview.py +++ b/examples/overview/src/overview.py @@ -36,12 +36,12 @@ def publish_data() -> str: uut_instance_id = metadata_store_client.create_uut_instance(uut_instance=uut_instance) # Create Operator metadata - operator = Operator(operator_name="James Bowery", role="Test Operator") + operator = Operator(name="James Bowery", role="Test Operator") operator_id = metadata_store_client.create_operator(operator) print(f"created operator_id: {operator_id}") # Create TestStation metadata - test_station = TestStation(test_station_name="TestStation_12") + test_station = TestStation(name="TestStation_12") test_station_id = metadata_store_client.create_test_station(test_station) print(f"created test_station_id: {test_station_id}") diff --git a/src/ni/datastore/metadata/_types/_operator.py b/src/ni/datastore/metadata/_types/_operator.py index a6f5cc2..b3d9247 100644 --- a/src/ni/datastore/metadata/_types/_operator.py +++ b/src/ni/datastore/metadata/_types/_operator.py @@ -22,7 +22,7 @@ class Operator: __slots__ = ( "_id", - "operator_name", + "name", "role", "link", "_extensions", @@ -42,7 +42,7 @@ def id(self) -> str: def __init__( self, *, - operator_name: str = "", + name: str = "", role: str = "", link: str = "", extensions: Mapping[str, str] | None = None, @@ -51,7 +51,7 @@ def __init__( """Initialize an Operator instance. Args: - operator_name: The name of the operator. + name: The name of the operator. role: The role of the operator. link: A link to a resource that describes the operator. This value is expected to be a valid URI. @@ -63,7 +63,7 @@ def __init__( test result must have a schema_id. """ self._id = "" - self.operator_name = operator_name + self.name = name self.role = role self.link = link self._extensions: MutableMapping[str, str] = ( @@ -75,7 +75,7 @@ def __init__( def from_protobuf(operator_proto: OperatorProto) -> "Operator": """Create an Operator instance from a protobuf Operator message.""" operator = Operator( - operator_name=operator_proto.name, + name=operator_proto.name, role=operator_proto.role, link=operator_proto.link, schema_id=operator_proto.schema_id, @@ -88,7 +88,7 @@ def to_protobuf(self) -> OperatorProto: """Convert this Operator to a protobuf Operator message.""" operator_proto = OperatorProto( id=self.id, - name=self.operator_name, + name=self.name, role=self.role, link=self.link, schema_id=self.schema_id, @@ -102,7 +102,7 @@ def __eq__(self, other: object) -> bool: return NotImplemented return ( self.id == other.id - and self.operator_name == other.operator_name + and self.name == other.name and self.role == other.role and self.link == other.link and self.extensions == other.extensions diff --git a/src/ni/datastore/metadata/_types/_test.py b/src/ni/datastore/metadata/_types/_test.py index 4240505..1382049 100644 --- a/src/ni/datastore/metadata/_types/_test.py +++ b/src/ni/datastore/metadata/_types/_test.py @@ -22,7 +22,7 @@ class Test: __slots__ = ( "_id", - "test_name", + "name", "description", "link", "_extensions", @@ -42,7 +42,7 @@ def id(self) -> str: def __init__( self, *, - test_name: str = "", + name: str = "", description: str = "", link: str = "", extensions: Mapping[str, str] | None = None, @@ -51,7 +51,7 @@ def __init__( """Initialize a Test instance. Args: - test_name: The name of the test. + name: The name of the test. description: A description of what the test does. link: A link to a resource that describes the test. This value is expected to be a valid URI. @@ -63,7 +63,7 @@ def __init__( the test result must have a schema_id. """ self._id = "" - self.test_name = test_name + self.name = name self.description = description self.link = link self._extensions: MutableMapping[str, str] = ( @@ -75,7 +75,7 @@ def __init__( def from_protobuf(test_proto: TestProto) -> "Test": """Create a Test instance from a protobuf Test message.""" test = Test( - test_name=test_proto.name, + name=test_proto.name, description=test_proto.description, link=test_proto.link, schema_id=test_proto.schema_id, @@ -88,7 +88,7 @@ def to_protobuf(self) -> TestProto: """Convert this Test to a protobuf Test message.""" test_proto = TestProto( id=self.id, - name=self.test_name, + name=self.name, description=self.description, link=self.link, schema_id=self.schema_id, @@ -102,7 +102,7 @@ def __eq__(self, other: object) -> bool: return NotImplemented return ( self.id == other.id - and self.test_name == other.test_name + and self.name == other.name and self.description == other.description and self.link == other.link and self.extensions == other.extensions diff --git a/src/ni/datastore/metadata/_types/_test_description.py b/src/ni/datastore/metadata/_types/_test_description.py index 3f9e3a9..6aefc98 100644 --- a/src/ni/datastore/metadata/_types/_test_description.py +++ b/src/ni/datastore/metadata/_types/_test_description.py @@ -23,7 +23,7 @@ class TestDescription: __slots__ = ( "_id", "uut_id", - "test_description_name", + "name", "link", "_extensions", "schema_id", @@ -43,7 +43,7 @@ def __init__( self, *, uut_id: str = "", - test_description_name: str = "", + name: str = "", link: str = "", extensions: Mapping[str, str] | None = None, schema_id: str = "", @@ -53,7 +53,7 @@ def __init__( Args: uut_id: The ID of the UUT associated with this test description. This value is expected to be a parsable GUID or an alias. - test_description_name: The name of the test description. + name: The name of the test description. link: A link to a resource that describes the test description. This value is expected to be a valid URI. extensions: Any extensions to be associated with the test description. @@ -65,7 +65,7 @@ def __init__( """ self._id = "" self.uut_id = uut_id - self.test_description_name = test_description_name + self.name = name self.link = link self._extensions: MutableMapping[str, str] = ( dict(extensions) if extensions is not None else {} @@ -77,7 +77,7 @@ def from_protobuf(test_description_proto: TestDescriptionProto) -> "TestDescript """Create a TestDescription instance from a protobuf TestDescription message.""" test_description = TestDescription( uut_id=test_description_proto.uut_id, - test_description_name=test_description_proto.name, + name=test_description_proto.name, link=test_description_proto.link, schema_id=test_description_proto.schema_id, ) @@ -92,7 +92,7 @@ def to_protobuf(self) -> TestDescriptionProto: test_description_proto = TestDescriptionProto( id=self.id, uut_id=self.uut_id, - name=self.test_description_name, + name=self.name, link=self.link, schema_id=self.schema_id, ) @@ -106,7 +106,7 @@ def __eq__(self, other: object) -> bool: return ( self.id == other.id and self.uut_id == other.uut_id - and self.test_description_name == other.test_description_name + and self.name == other.name and self.link == other.link and self.extensions == other.extensions and self.schema_id == other.schema_id diff --git a/src/ni/datastore/metadata/_types/_test_station.py b/src/ni/datastore/metadata/_types/_test_station.py index 0552555..0a06b97 100644 --- a/src/ni/datastore/metadata/_types/_test_station.py +++ b/src/ni/datastore/metadata/_types/_test_station.py @@ -25,7 +25,7 @@ class TestStation: __slots__ = ( "_id", - "test_station_name", + "name", "asset_identifier", "link", "_extensions", @@ -45,7 +45,7 @@ def id(self) -> str: def __init__( self, *, - test_station_name: str = "", + name: str = "", asset_identifier: str = "", link: str = "", extensions: Mapping[str, str] | None = None, @@ -54,7 +54,7 @@ def __init__( """Initialize a TestStation instance. Args: - test_station_name: The name of the test station. + name: The name of the test station. asset_identifier: The asset identifier of the test station. link: A link to a resource that describes the test station. This value is expected to be a valid URI. @@ -66,7 +66,7 @@ def __init__( the test result must have a schema_id. """ self._id = "" - self.test_station_name = test_station_name + self.name = name self.asset_identifier = asset_identifier self.link = link self._extensions: MutableMapping[str, str] = ( @@ -78,7 +78,7 @@ def __init__( def from_protobuf(test_station_proto: TestStationProto) -> "TestStation": """Create a TestStation instance from a protobuf TestStation message.""" test_station = TestStation( - test_station_name=test_station_proto.name, + name=test_station_proto.name, asset_identifier=test_station_proto.asset_identifier, link=test_station_proto.link, schema_id=test_station_proto.schema_id, @@ -93,7 +93,7 @@ def to_protobuf(self) -> TestStationProto: """Convert this TestStation to a protobuf TestStation message.""" test_station_proto = TestStationProto( id=self.id, - name=self.test_station_name, + name=self.name, asset_identifier=self.asset_identifier, link=self.link, schema_id=self.schema_id, @@ -107,7 +107,7 @@ def __eq__(self, other: object) -> bool: return NotImplemented return ( self.id == other.id - and self.test_station_name == other.test_station_name + and self.name == other.name and self.asset_identifier == other.asset_identifier and self.link == other.link and self.extensions == other.extensions diff --git a/tests/acceptance/test_publish_with_metadata.py b/tests/acceptance/test_publish_with_metadata.py index 43e5854..116074f 100644 --- a/tests/acceptance/test_publish_with_metadata.py +++ b/tests/acceptance/test_publish_with_metadata.py @@ -64,7 +64,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat operator_name = "John Bowery" operator_role = "Test Operator II" operator = Operator( - operator_name=operator_name, + name=operator_name, role=operator_role, extensions={"o1": "one", "o2": "two"}, schema_id=schema_id, @@ -73,7 +73,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat # Metadata: TestStation test_station = TestStation( - test_station_name="TestStation_12", + name="TestStation_12", asset_identifier="Test Station Asset Identifier", link="Test Station Link", extensions={"ts1": "one", "ts2": "two"}, @@ -84,7 +84,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat # Metadata: TestDescription test_description = TestDescription( uut_id=uut_id, - test_description_name="Metadata Acceptance Test", + name="Metadata Acceptance Test", link="Test Description Link", extensions={"td1": "one", "td2": "two"}, schema_id=schema_id, @@ -155,7 +155,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat # Metadata: Test test = Test( - test_name="Test Name", + name="Test Name", description="Test Description", link="Test Link", extensions={"t1": "one", "t2": "two"}, @@ -243,13 +243,13 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat # Check Test found_test = metadata_store_client.get_test(found_step.test_id) assert found_test.description == test.description - assert found_test.test_name == test.test_name + assert found_test.name == test.name assert found_test.link == test.link assert found_test.extensions == test.extensions # Check Operator found_operator = metadata_store_client.get_operator(found_test_result.operator_id) - assert found_operator.operator_name == operator.operator_name + assert found_operator.name == operator.name assert found_operator.role == operator.role assert found_operator.extensions == operator.extensions @@ -278,7 +278,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat found_test_station = metadata_store_client.get_test_station( found_test_result.test_station_id ) - assert found_test_station.test_station_name == test_station.test_station_name + assert found_test_station.name == test_station.name assert found_test_station.asset_identifier == test_station.asset_identifier assert found_test_station.link == test_station.link assert found_test_station.extensions == test_station.extensions @@ -288,7 +288,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat found_test_result.test_description_id ) assert ( - found_test_description.test_description_name == test_description.test_description_name + found_test_description.name == test_description.name ) assert found_test_description.link == test_description.link assert found_test_description.extensions == test_description.extensions diff --git a/tests/unit/metadata/test_create_metadata.py b/tests/unit/metadata/test_create_metadata.py index 37c1972..ba6067a 100644 --- a/tests/unit/metadata/test_create_metadata.py +++ b/tests/unit/metadata/test_create_metadata.py @@ -93,7 +93,7 @@ def test___create_operator___calls_metadata_store_service_client( mocked_metadata_store_service_client: NonCallableMock, ) -> None: operator = Operator( - operator_name="operator_name", + name="operator_name", role="role", link="link", extensions=None, @@ -116,7 +116,7 @@ def test___create_test_description___calls_metadata_store_service_client( ) -> None: test_description = TestDescription( uut_id="uut_id", - test_description_name="test_description_name", + name="test_description_name", link="link", extensions=None, schema_id="schema_id", @@ -137,7 +137,7 @@ def test___create_test___calls_metadata_store_service_client( mocked_metadata_store_service_client: NonCallableMock, ) -> None: test = Test( - test_name="test_name", + name="test_name", description="description", extensions=None, schema_id="schema_id", @@ -158,7 +158,7 @@ def test___create_test_station___calls_metadata_store_service_client( mocked_metadata_store_service_client: NonCallableMock, ) -> None: test_station = TestStation( - test_station_name="test_station_name", + name="test_station_name", asset_identifier="asset_identifier", link="link", extensions=None, diff --git a/tests/unit/metadata/test_get_metadata.py b/tests/unit/metadata/test_get_metadata.py index 59790cf..c2100e9 100644 --- a/tests/unit/metadata/test_get_metadata.py +++ b/tests/unit/metadata/test_get_metadata.py @@ -107,7 +107,7 @@ def test___get_operator___calls_metadata_store_service_client( ) -> None: operator = OperatorProto( id="operator_id", - name="operator_name", + name="name", role="role", link="link", extensions=None, @@ -131,7 +131,7 @@ def test___get_test_description___calls_metadata_store_service_client( test_description = TestDescriptionProto( id="test_description_id", uut_id="uut_id", - name="test_description_name", + name="name", link="link", extensions=None, schema_id="schema_id", @@ -153,7 +153,7 @@ def test___get_test___calls_metadata_store_service_client( ) -> None: test = TestProto( id="test_id", - name="test_name", + name="name", description="description", extensions=None, schema_id="schema_id", @@ -175,7 +175,7 @@ def test___get_test_station___calls_metadata_store_service_client( ) -> None: test_station = TestStationProto( id="test_station_id", - name="test_station_name", + name="name", asset_identifier="asset_identifier", link="link", extensions=None, diff --git a/tests/unit/metadata/test_query_metadata.py b/tests/unit/metadata/test_query_metadata.py index 2a9f697..c4b91f6 100644 --- a/tests/unit/metadata/test_query_metadata.py +++ b/tests/unit/metadata/test_query_metadata.py @@ -107,7 +107,7 @@ def test___query_operators___calls_metadata_store_service_client( ) -> None: operator = OperatorProto( id="operator_id", - name="operator_name", + name="name", role="role", link="link", extensions=None, @@ -131,7 +131,7 @@ def test___query_test_descriptions___calls_metadata_store_service_client( test_description = TestDescriptionProto( id="test_description_id", uut_id="uut_id", - name="test_description_name", + name="name", link="link", extensions=None, schema_id="schema_id", @@ -153,7 +153,7 @@ def test___query_tests___calls_metadata_store_service_client( ) -> None: test = TestProto( id="test_id", - name="test_name", + name="name", description="description", extensions=None, schema_id="schema_id", @@ -175,7 +175,7 @@ def test___query_test_stations___calls_metadata_store_service_client( ) -> None: test_station = TestStationProto( id="test_station_id", - name="test_station_name", + name="name", asset_identifier="asset_identifier", link="link", extensions=None, From 16c56ec9c02a4c2858fa8be3b3f7e553b11c5259 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 10:23:50 -0600 Subject: [PATCH 06/26] Fix ni-python-styleguide error --- .../acceptance/test_publish_with_metadata.py | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/tests/acceptance/test_publish_with_metadata.py b/tests/acceptance/test_publish_with_metadata.py index 116074f..3a0a0fa 100644 --- a/tests/acceptance/test_publish_with_metadata.py +++ b/tests/acceptance/test_publish_with_metadata.py @@ -18,7 +18,7 @@ Operator, SoftwareItem, Test, - # TestAdapter, + TestAdapter, TestDescription, TestStation, Uut, @@ -118,17 +118,17 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat hardware_item_ids = [hardware_item_id] # Metadata: TestAdapter - # test_adapter=TestAdapter( - # name="Test Adapter Name", - # manufacturer="Test Adapter Manufacturer", - # serial_number="Test Adapter Serial Number", - # part_number="Test Adapter Part Number", - # asset_identifier="Test Adapter Asset Identifier", - # calibration_due_date="Test Adapter Calibration Due Date", - # link="Test Adapter Link", - # ) - # test_adapter_id = metadata_store_client.create_test_adapter(test_adapter) - # test_adapter_ids = [test_adapter_id] + test_adapter = TestAdapter( + name="Test Adapter Name", + manufacturer="Test Adapter Manufacturer", + serial_number="Test Adapter Serial Number", + part_number="Test Adapter Part Number", + asset_identifier="Test Adapter Asset Identifier", + calibration_due_date="Test Adapter Calibration Due Date", + link="Test Adapter Link", + ) + test_adapter_id = metadata_store_client.create_test_adapter(test_adapter) + test_adapter_ids = [test_adapter_id] # Metadata: TestResult test_result_name = "sample test result" @@ -192,7 +192,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat outcome=Outcome.OUTCOME_PASSED, error_information=error_information, hardware_item_ids=hardware_item_ids, - # test_adapter_ids=test_adapter_ids, + test_adapter_ids=test_adapter_ids, software_item_ids=software_item_ids, notes="Measurement Notes", ) @@ -287,9 +287,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat found_test_description = metadata_store_client.get_test_description( found_test_result.test_description_id ) - assert ( - found_test_description.name == test_description.name - ) + assert found_test_description.name == test_description.name assert found_test_description.link == test_description.link assert found_test_description.extensions == test_description.extensions From 0a64dca837dd27fe7aad0e31d6ba5fdd56153926 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 10:32:04 -0600 Subject: [PATCH 07/26] Add error_information to TestResult --- src/ni/datastore/data/_types/_test_result.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/ni/datastore/data/_types/_test_result.py b/src/ni/datastore/data/_types/_test_result.py index 1a1d6b9..710ef82 100644 --- a/src/ni/datastore/data/_types/_test_result.py +++ b/src/ni/datastore/data/_types/_test_result.py @@ -10,6 +10,7 @@ populate_from_extension_value_message_map, ) from ni.measurements.data.v1.data_store_pb2 import ( + ErrorInformation, Outcome, TestResult as TestResultProto, ) @@ -45,6 +46,7 @@ class TestResult: "link", "_extensions", "schema_id", + "error_information", ) @property @@ -97,6 +99,7 @@ def __init__( link: str = "", extensions: Mapping[str, str] | None = None, schema_id: str = "", + error_information: ErrorInformation | None = None, ) -> None: """Initialize a TestResult instance. @@ -113,6 +116,8 @@ def __init__( link: Optional link to external resources for this test result. extensions: Additional custom metadata as key-value pairs. schema_id: ID of the extension schema for validating extensions. + error_information: Error or exception information in case of + test result failure. """ self.id = id self.uut_instance_id = uut_instance_id @@ -134,6 +139,7 @@ def __init__( dict(extensions) if extensions is not None else {} ) self.schema_id = schema_id + self.error_information = error_information self._start_date_time: ht.datetime | None = None self._end_date_time: ht.datetime | None = None @@ -166,6 +172,11 @@ def from_protobuf(test_result_proto: TestResultProto) -> "TestResult": else None ) test_result._outcome = test_result_proto.outcome + test_result.error_information = ( + test_result_proto.error_information + if test_result_proto.HasField("error_information") + else None + ) populate_from_extension_value_message_map( test_result.extensions, test_result_proto.extensions ) @@ -194,6 +205,7 @@ def to_protobuf(self) -> TestResultProto: outcome=self.outcome, link=self.link, schema_id=self.schema_id, + error_information=self.error_information, ) populate_extension_value_message_map(test_result_proto.extensions, self.extensions) return test_result_proto @@ -218,6 +230,7 @@ def __eq__(self, other: object) -> bool: and self.link == other.link and self.extensions == other.extensions and self.schema_id == other.schema_id + and self.error_information == other.error_information ) def __str__(self) -> str: From e2b3fa173b0908d6934237c2abe354d08fb914a5 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 10:39:20 -0600 Subject: [PATCH 08/26] Add error_information to Step class --- src/ni/datastore/data/_types/_step.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/ni/datastore/data/_types/_step.py b/src/ni/datastore/data/_types/_step.py index 4faa9a1..b4cb228 100644 --- a/src/ni/datastore/data/_types/_step.py +++ b/src/ni/datastore/data/_types/_step.py @@ -10,6 +10,7 @@ populate_from_extension_value_message_map, ) from ni.measurements.data.v1.data_store_pb2 import ( + ErrorInformation, Step as StepProto, ) from ni.protobuf.types.precision_timestamp_conversion import ( @@ -41,6 +42,7 @@ class Step: "link", "_extensions", "schema_id", + "error_information", ) @property @@ -71,6 +73,7 @@ def __init__( link: str = "", extensions: Mapping[str, str] | None = None, schema_id: str = "", + error_information: ErrorInformation | None = None, ) -> None: """Initialize a Step instance. @@ -85,6 +88,8 @@ def __init__( link: Optional link to external resources for this step. extensions: Additional custom metadata as key-value pairs. schema_id: ID of the extension schema for validating extensions. + error_information: Error or exception information in case of + step failure. """ self.id = id self.parent_step_id = parent_step_id @@ -98,6 +103,7 @@ def __init__( dict(extensions) if extensions is not None else {} ) self.schema_id = schema_id + self.error_information = error_information self._start_date_time: ht.datetime | None = None self._end_date_time: ht.datetime | None = None @@ -126,6 +132,9 @@ def from_protobuf(step_proto: StepProto) -> "Step": if step_proto.HasField("end_date_time") else None ) + step.error_information = ( + step_proto.error_information if step_proto.HasField("error_information") else None + ) populate_from_extension_value_message_map(step.extensions, step_proto.extensions) return step @@ -149,6 +158,7 @@ def to_protobuf(self) -> StepProto: ), link=self.link, schema_id=self.schema_id, + error_information=self.error_information, ) populate_extension_value_message_map(step_proto.extensions, self.extensions) return step_proto @@ -170,6 +180,7 @@ def __eq__(self, other: object) -> bool: and self.link == other.link and self.extensions == other.extensions and self.schema_id == other.schema_id + and self.error_information == other.error_information ) def __str__(self) -> str: From f07087e14fe61d6e38e6bb77a977c283f42a66f9 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 10:52:21 -0600 Subject: [PATCH 09/26] Add outcome field to Step class --- src/ni/datastore/data/_types/_step.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/ni/datastore/data/_types/_step.py b/src/ni/datastore/data/_types/_step.py index b4cb228..991d506 100644 --- a/src/ni/datastore/data/_types/_step.py +++ b/src/ni/datastore/data/_types/_step.py @@ -11,6 +11,7 @@ ) from ni.measurements.data.v1.data_store_pb2 import ( ErrorInformation, + Outcome, Step as StepProto, ) from ni.protobuf.types.precision_timestamp_conversion import ( @@ -43,6 +44,7 @@ class Step: "_extensions", "schema_id", "error_information", + "outcome", ) @property @@ -74,6 +76,7 @@ def __init__( extensions: Mapping[str, str] | None = None, schema_id: str = "", error_information: ErrorInformation | None = None, + outcome: Outcome.ValueType = Outcome.OUTCOME_UNSPECIFIED, ) -> None: """Initialize a Step instance. @@ -90,6 +93,8 @@ def __init__( schema_id: ID of the extension schema for validating extensions. error_information: Error or exception information in case of step failure. + outcome: The outcome of the step (PASSED, FAILED, + INDETERMINATE, or UNSPECIFIED). """ self.id = id self.parent_step_id = parent_step_id @@ -104,6 +109,7 @@ def __init__( ) self.schema_id = schema_id self.error_information = error_information + self.outcome = outcome self._start_date_time: ht.datetime | None = None self._end_date_time: ht.datetime | None = None @@ -135,6 +141,7 @@ def from_protobuf(step_proto: StepProto) -> "Step": step.error_information = ( step_proto.error_information if step_proto.HasField("error_information") else None ) + step.outcome = step_proto.outcome populate_from_extension_value_message_map(step.extensions, step_proto.extensions) return step @@ -159,6 +166,7 @@ def to_protobuf(self) -> StepProto: link=self.link, schema_id=self.schema_id, error_information=self.error_information, + outcome=self.outcome, ) populate_extension_value_message_map(step_proto.extensions, self.extensions) return step_proto @@ -181,6 +189,7 @@ def __eq__(self, other: object) -> bool: and self.extensions == other.extensions and self.schema_id == other.schema_id and self.error_information == other.error_information + and self.outcome == other.outcome ) def __str__(self) -> str: From c68d6af83fbe4975f915de276812b5fe4bd0847c Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 11:29:11 -0600 Subject: [PATCH 10/26] Rename step_name to name and step_type to type in Step class - Updated __slots__, __init__ parameters, and field assignments - Updated from_protobuf and to_protobuf methods - Updated __eq__ method and docstring - Updated all test files to use new field names - Maintains compatibility with protobuf schema --- examples/notebooks/alias/alias.ipynb | 10 +++---- src/ni/datastore/data/_types/_step.py | 28 +++++++++---------- tests/acceptance/_utils.py | 2 +- .../test_publish_condition_and_read_data.py | 2 +- ...t_publish_condition_batch_and_read_data.py | 2 +- .../test_publish_measurement_and_read_data.py | 2 +- ...publish_measurement_batch_and_read_data.py | 4 +-- .../acceptance/test_publish_with_metadata.py | 12 ++++---- tests/acceptance/test_query_steps.py | 6 ++-- tests/unit/data/test_create_metadata.py | 4 +-- 10 files changed, 36 insertions(+), 36 deletions(-) diff --git a/examples/notebooks/alias/alias.ipynb b/examples/notebooks/alias/alias.ipynb index 6094cea..302f8d2 100644 --- a/examples/notebooks/alias/alias.ipynb +++ b/examples/notebooks/alias/alias.ipynb @@ -20,8 +20,8 @@ "from ni.datastore.metadata import MetadataStoreClient, Operator\n", "\n", "metadata_store_client = MetadataStoreClient()\n", - "operatorOne = Operator(operator_name=\"Jane Doe\")\n", - "operatorTwo = Operator(operator_name=\"John Smith\")\n", + "operatorOne = Operator(name=\"Jane Doe\")\n", + "operatorTwo = Operator(name=\"John Smith\")\n", "\n", "metadata_store_client.create_operator(operatorOne)\n", "metadata_store_client.create_operator(operatorTwo)" @@ -100,7 +100,7 @@ "retrieved_operator_id = retrieved_session.operator_id\n", "operator_details = metadata_store_client.get_operator(retrieved_operator_id)\n", "\n", - "print(f\"The name of the operator for the session: {operator_details.operator_name}\")" + "print(f\"The name of the operator for the session: {operator_details.name}\")" ] }, { @@ -217,7 +217,7 @@ ], "metadata": { "kernelspec": { - "display_name": "ni-datastore-py3.11", + "display_name": "ni-datastore-py3.14", "language": "python", "name": "python3" }, @@ -231,7 +231,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.14.0" } }, "nbformat": 4, diff --git a/src/ni/datastore/data/_types/_step.py b/src/ni/datastore/data/_types/_step.py index 991d506..228717e 100644 --- a/src/ni/datastore/data/_types/_step.py +++ b/src/ni/datastore/data/_types/_step.py @@ -35,8 +35,8 @@ class Step: "parent_step_id", "test_result_id", "test_id", - "step_name", - "step_type", + "name", + "type", "notes", "_start_date_time", "_end_date_time", @@ -69,8 +69,8 @@ def __init__( parent_step_id: str = "", test_result_id: str = "", test_id: str = "", - step_name: str = "", - step_type: str = "", + name: str = "", + type: str = "", notes: str = "", link: str = "", extensions: Mapping[str, str] | None = None, @@ -85,8 +85,8 @@ def __init__( parent_step_id: ID of the parent step if this is a nested step. test_result_id: ID of the test result this step belongs to. test_id: ID of the test associated with this step. - step_name: Human-readable name of the step. - step_type: Type or category of the step. + name: Human-readable name of the step. + type: Type or category of the step. notes: Additional notes or comments about the step. link: Optional link to external resources for this step. extensions: Additional custom metadata as key-value pairs. @@ -100,8 +100,8 @@ def __init__( self.parent_step_id = parent_step_id self.test_result_id = test_result_id self.test_id = test_id - self.step_name = step_name - self.step_type = step_type + self.name = name + self.type = type self.notes = notes self.link = link self._extensions: MutableMapping[str, str] = ( @@ -122,8 +122,8 @@ def from_protobuf(step_proto: StepProto) -> "Step": parent_step_id=step_proto.parent_step_id, test_result_id=step_proto.test_result_id, test_id=step_proto.test_id, - step_name=step_proto.name, - step_type=step_proto.type, + name=step_proto.name, + type=step_proto.type, notes=step_proto.notes, link=step_proto.link, schema_id=step_proto.schema_id, @@ -152,8 +152,8 @@ def to_protobuf(self) -> StepProto: parent_step_id=self.parent_step_id, test_result_id=self.test_result_id, test_id=self.test_id, - name=self.step_name, - type=self.step_type, + name=self.name, + type=self.type, notes=self.notes, start_date_time=( hightime_datetime_to_protobuf(self.start_date_time) @@ -180,8 +180,8 @@ def __eq__(self, other: object) -> bool: and self.parent_step_id == other.parent_step_id and self.test_result_id == other.test_result_id and self.test_id == other.test_id - and self.step_name == other.step_name - and self.step_type == other.step_type + and self.name == other.name + and self.type == other.type and self.notes == other.notes and self.start_date_time == other.start_date_time and self.end_date_time == other.end_date_time diff --git a/tests/acceptance/_utils.py b/tests/acceptance/_utils.py index e155a75..dcec13f 100644 --- a/tests/acceptance/_utils.py +++ b/tests/acceptance/_utils.py @@ -13,7 +13,7 @@ def create_test_result_and_step(data_store_client: DataStoreClient, description: """Create a single step within a single test result and return the step_id.""" test_result_id = create_test_result(data_store_client, description) - step = Step(step_name=f"{description} step", test_result_id=test_result_id) + step = Step(name=f"{description} step", test_result_id=test_result_id) step_id = data_store_client.create_step(step) return step_id diff --git a/tests/acceptance/test_publish_condition_and_read_data.py b/tests/acceptance/test_publish_condition_and_read_data.py index ded9955..6caa8f8 100644 --- a/tests/acceptance/test_publish_condition_and_read_data.py +++ b/tests/acceptance/test_publish_condition_and_read_data.py @@ -100,6 +100,6 @@ def _create_step(data_store_client: DataStoreClient, datatype_string: str) -> st test_result_id = data_store_client.create_test_result(test_result) # Publish the waveform data - step = Step(step_name=f"Initial step: {datatype_string}", test_result_id=test_result_id) + step = Step(name=f"Initial step: {datatype_string}", test_result_id=test_result_id) step_id = data_store_client.create_step(step) return step_id diff --git a/tests/acceptance/test_publish_condition_batch_and_read_data.py b/tests/acceptance/test_publish_condition_batch_and_read_data.py index e50d900..98a1599 100644 --- a/tests/acceptance/test_publish_condition_batch_and_read_data.py +++ b/tests/acceptance/test_publish_condition_batch_and_read_data.py @@ -98,6 +98,6 @@ def _create_step(data_store_client: DataStoreClient, datatype_string: str) -> st test_result_id = data_store_client.create_test_result(test_result) # Publish the waveform data - step = Step(step_name=f"Initial step: {datatype_string}", test_result_id=test_result_id) + step = Step(name=f"Initial step: {datatype_string}", test_result_id=test_result_id) step_id = data_store_client.create_step(step) return step_id diff --git a/tests/acceptance/test_publish_measurement_and_read_data.py b/tests/acceptance/test_publish_measurement_and_read_data.py index 2c4ba00..bf5ffa8 100644 --- a/tests/acceptance/test_publish_measurement_and_read_data.py +++ b/tests/acceptance/test_publish_measurement_and_read_data.py @@ -135,6 +135,6 @@ def _create_step(data_store_client: DataStoreClient, datatype_string: str) -> st test_result_id = data_store_client.create_test_result(test_result) # Publish the waveform data - step = Step(step_name=f"Initial step: {datatype_string}", test_result_id=test_result_id) + step = Step(name=f"Initial step: {datatype_string}", test_result_id=test_result_id) step_id = data_store_client.create_step(step) return step_id diff --git a/tests/acceptance/test_publish_measurement_batch_and_read_data.py b/tests/acceptance/test_publish_measurement_batch_and_read_data.py index 5eb0d7d..d1c849c 100644 --- a/tests/acceptance/test_publish_measurement_batch_and_read_data.py +++ b/tests/acceptance/test_publish_measurement_batch_and_read_data.py @@ -16,7 +16,7 @@ def test___publish_float___read_data_returns_vector() -> None: test_result_id = data_store_client.create_test_result(test_result) # Publish the waveform data - step = Step(step_name="Initial step", test_result_id=test_result_id) + step = Step(name="Initial step", test_result_id=test_result_id) step_id = data_store_client.create_step(step) published_measurements = data_store_client.publish_measurement_batch( measurement_name="python batch publish float", @@ -43,7 +43,7 @@ def test___publish_batch_vector___read_data_returns_vector() -> None: expected_vector = Vector(values=[1, 2, 3], units="Volts") # Batch publish the vector - step = Step(step_name="Initial step", test_result_id=test_result_id) + step = Step(name="Initial step", test_result_id=test_result_id) step_id = data_store_client.create_step(step) published_measurements = data_store_client.publish_measurement_batch( measurement_name="python publish scalar", diff --git a/tests/acceptance/test_publish_with_metadata.py b/tests/acceptance/test_publish_with_metadata.py index 3a0a0fa..e0d76e4 100644 --- a/tests/acceptance/test_publish_with_metadata.py +++ b/tests/acceptance/test_publish_with_metadata.py @@ -164,13 +164,13 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat test_id = metadata_store_client.create_test(test) # Data: Step - parent_step = Step(step_name="Parent Step") + parent_step = Step(name="Parent Step") step = Step( parent_step_id=parent_step.id, test_result_id=test_result_id, test_id=test_id, - step_name="Step Name", - step_type="Step Type", + name="Step Name", + type="Step Type", notes="Step Notes", link="Step Link", extensions={"s1": "one", "s2": "two"}, @@ -233,9 +233,9 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat assert found_step.parent_step_id == step.parent_step_id assert found_step.test_result_id == step.test_result_id assert found_step.test_id == step.test_id - assert found_step.step_name == step.step_name - # TODO: File an issue that found_step.step_type is blank. - # assert found_step.step_type == step.step_type + assert found_step.name == step.name + # TODO: File an issue that found_step.type is blank. + # assert found_step.type == step.type assert found_step.notes == step.notes assert found_step.link == step.link assert found_step.extensions == step.extensions diff --git a/tests/acceptance/test_query_steps.py b/tests/acceptance/test_query_steps.py index 2232a1e..0617bc2 100644 --- a/tests/acceptance/test_query_steps.py +++ b/tests/acceptance/test_query_steps.py @@ -16,7 +16,7 @@ def test___query_steps___filter_by_id___single_step_returned() -> None: assert len(queried_steps) == 1 first_step = queried_steps[0] assert first_step is not None - assert first_step.step_name == "query steps filter by id step" + assert first_step.name == "query steps filter by id step" def test___query_steps___filter_by_name___correct_steps_returned() -> None: @@ -30,11 +30,11 @@ def test___query_steps___filter_by_name___correct_steps_returned() -> None: step_name_base = append_hashed_time(description) for index in range(0, 3): step_name = f"{step_name_base} {index}" - step = Step(step_name=step_name, test_result_id=test_result_id) + step = Step(name=step_name, test_result_id=test_result_id) _ = data_store_client.create_step(step) # Create and publish one more step/measurement that doesn't match the naming pattern. - step = Step(step_name="some other step name", test_result_id=test_result_id) + step = Step(name="some other step name", test_result_id=test_result_id) _ = data_store_client.create_step(step) # Query steps based on name. diff --git a/tests/unit/data/test_create_metadata.py b/tests/unit/data/test_create_metadata.py index 7592879..6939b86 100644 --- a/tests/unit/data/test_create_metadata.py +++ b/tests/unit/data/test_create_metadata.py @@ -27,8 +27,8 @@ def test___create_step___calls_data_store_service_client( parent_step_id="parent_step_id", test_result_id="test_result", test_id="test_id", - step_name="step_name", - step_type="step_type", + name="step_name", + type="step_type", notes="step_notes", ) expected_response = CreateStepResponse(step_id="response_id") From a751453f37925ba3cfc131c92a7c3f43de23d752 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 11:31:28 -0600 Subject: [PATCH 11/26] Fix custom_metadata notebook --- .../custom-metadata/custom_metadata.ipynb | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/examples/notebooks/custom-metadata/custom_metadata.ipynb b/examples/notebooks/custom-metadata/custom_metadata.ipynb index a855e09..108787c 100644 --- a/examples/notebooks/custom-metadata/custom_metadata.ipynb +++ b/examples/notebooks/custom-metadata/custom_metadata.ipynb @@ -39,7 +39,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "13d59ad8", "metadata": {}, "outputs": [], @@ -105,22 +105,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "fc2373bd", "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'test_result_schema_id' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mNameError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[3]\u001b[39m\u001b[32m, line 17\u001b[39m\n\u001b[32m 10\u001b[39m scope_id = metadata_store_client.create_hardware_item(hardware_item=scope)\n\u001b[32m 12\u001b[39m data_store_client = DataStoreClient()\n\u001b[32m 13\u001b[39m test_result_id = data_store_client.create_test_result(\n\u001b[32m 14\u001b[39m test_result=TestResult(\n\u001b[32m 15\u001b[39m test_result_name=\u001b[33m\"\u001b[39m\u001b[33mscope measurements\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m 16\u001b[39m hardware_item_ids=[cable_id, socket_id, scope_id],\n\u001b[32m---> \u001b[39m\u001b[32m17\u001b[39m schema_id=\u001b[43mtest_result_schema_id\u001b[49m\n\u001b[32m 18\u001b[39m )\n\u001b[32m 19\u001b[39m )\n\u001b[32m 21\u001b[39m waveform = AnalogWaveform(\n\u001b[32m 22\u001b[39m sample_count=\u001b[32m3\u001b[39m,\n\u001b[32m 23\u001b[39m raw_data=np.array([\u001b[32m1.0\u001b[39m, \u001b[32m2.0\u001b[39m, \u001b[32m3.0\u001b[39m]),\n\u001b[32m (...)\u001b[39m\u001b[32m 27\u001b[39m )\n\u001b[32m 28\u001b[39m )\n\u001b[32m 30\u001b[39m step = Step(step_name=\u001b[33m\"\u001b[39m\u001b[33mInitial step\u001b[39m\u001b[33m\"\u001b[39m, test_result_id=test_result_id)\n", - "\u001b[31mNameError\u001b[39m: name 'test_result_schema_id' is not defined" - ] - } - ], + "outputs": [], "source": [ "from datetime import timezone\n", "import hightime as ht\n", @@ -151,7 +139,7 @@ " )\n", ")\n", "\n", - "step = Step(step_name=\"Initial step\", test_result_id=test_result_id)\n", + "step = Step(name=\"Initial step\", test_result_id=test_result_id)\n", "step_id = data_store_client.create_step(step)\n", "published_measurement = data_store_client.publish_measurement(\n", " measurement_name=\"scope reading\",\n", @@ -206,7 +194,7 @@ ], "metadata": { "kernelspec": { - "display_name": "ni-datastore-py3.11", + "display_name": "ni-datastore-py3.14", "language": "python", "name": "python3" }, @@ -220,7 +208,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.14.0" } }, "nbformat": 4, From 6420acc20e8726c7b4cab16b1831f9b50e6317eb Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 11:41:19 -0600 Subject: [PATCH 12/26] Update TestResult.test_result_name to name --- .../notebooks/overview/publish_measurement.ipynb | 12 ++++++------ src/ni/datastore/data/_types/_test_result.py | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/examples/notebooks/overview/publish_measurement.ipynb b/examples/notebooks/overview/publish_measurement.ipynb index 17aba2e..ff7e6af 100644 --- a/examples/notebooks/overview/publish_measurement.ipynb +++ b/examples/notebooks/overview/publish_measurement.ipynb @@ -121,7 +121,7 @@ "from ni.datastore.metadata import Operator, TestStation, SoftwareItem\n", "\n", "# Invalid creation of operator - no badge_number provided\n", - "operator = Operator(operator_name=\"James Bowery\", schema_id=schema_id)\n", + "operator = Operator(name=\"James Bowery\", schema_id=schema_id)\n", "try:\n", " operator_id = metadata_store_client.create_operator(operator)\n", "except grpc.RpcError as e:\n", @@ -133,7 +133,7 @@ "operator_id = metadata_store_client.create_operator(operator)\n", "\n", "# Invalid creation of test station - location is invalid\n", - "test_station = TestStation(test_station_name=\"TestStation_12\", schema_id=schema_id)\n", + "test_station = TestStation(name=\"TestStation_12\", schema_id=schema_id)\n", "test_station.extensions[\"location\"] = \"Texas\"\n", "try:\n", " test_station_id = metadata_store_client.create_test_station(test_station)\n", @@ -221,7 +221,7 @@ " ht.datetime.now(timezone.utc)\n", " )\n", ")\n", - "step = Step(step_name=\"Initial step\", test_result_id=test_result_id)\n", + "step = Step(name=\"Initial step\", test_result_id=test_result_id)\n", "step_id = data_store_client.create_step(step)\n", "published_measurement = data_store_client.publish_measurement(\n", " measurement_name=name,\n", @@ -260,7 +260,7 @@ " # badge_number is a custom attribute in the schema\n", " # It's not a standard attribute of the operator object\n", " badge_number = operator.extensions[\"badge_number\"]\n", - " print(f\"operator {operator.operator_name}'s badge number is: {badge_number}\")\n", + " print(f\"operator {operator.name}'s badge number is: {badge_number}\")\n", "\n", " waveform = data_store_client.read_data(found_measurement, expected_type=AnalogWaveform)\n", " print(f\"published data is: {waveform.raw_data}\")" @@ -288,7 +288,7 @@ ], "metadata": { "kernelspec": { - "display_name": "ni-datastore-py3.11", + "display_name": "ni-datastore-py3.14", "language": "python", "name": "python3" }, @@ -302,7 +302,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.14.0" } }, "nbformat": 4, diff --git a/src/ni/datastore/data/_types/_test_result.py b/src/ni/datastore/data/_types/_test_result.py index 710ef82..3333de9 100644 --- a/src/ni/datastore/data/_types/_test_result.py +++ b/src/ni/datastore/data/_types/_test_result.py @@ -39,7 +39,7 @@ class TestResult: "_software_item_ids", "_hardware_item_ids", "_test_adapter_ids", - "test_result_name", + "name", "_start_date_time", "_end_date_time", "_outcome", @@ -95,7 +95,7 @@ def __init__( software_item_ids: Iterable[str] | None = None, hardware_item_ids: Iterable[str] | None = None, test_adapter_ids: Iterable[str] | None = None, - test_result_name: str = "", + name: str = "", link: str = "", extensions: Mapping[str, str] | None = None, schema_id: str = "", @@ -112,7 +112,7 @@ def __init__( software_item_ids: IDs of software items used in the test. hardware_item_ids: IDs of hardware items used in the test. test_adapter_ids: IDs of test adapters used in the test. - test_result_name: Human-readable name for the test result. + name: Human-readable name for the test result. link: Optional link to external resources for this test result. extensions: Additional custom metadata as key-value pairs. schema_id: ID of the extension schema for validating extensions. @@ -133,7 +133,7 @@ def __init__( self._test_adapter_ids: MutableSequence[str] = ( list(test_adapter_ids) if test_adapter_ids is not None else [] ) - self.test_result_name = test_result_name + self.name = name self.link = link self._extensions: MutableMapping[str, str] = ( dict(extensions) if extensions is not None else {} @@ -157,7 +157,7 @@ def from_protobuf(test_result_proto: TestResultProto) -> "TestResult": software_item_ids=test_result_proto.software_item_ids, hardware_item_ids=test_result_proto.hardware_item_ids, test_adapter_ids=test_result_proto.test_adapter_ids, - test_result_name=test_result_proto.name, + name=test_result_proto.name, link=test_result_proto.link, schema_id=test_result_proto.schema_id, ) @@ -193,7 +193,7 @@ def to_protobuf(self) -> TestResultProto: software_item_ids=self.software_item_ids, hardware_item_ids=self.hardware_item_ids, test_adapter_ids=self.test_adapter_ids, - name=self.test_result_name, + name=self.name, start_date_time=( hightime_datetime_to_protobuf(self.start_date_time) if self.start_date_time @@ -223,7 +223,7 @@ def __eq__(self, other: object) -> bool: and self.software_item_ids == other.software_item_ids and self.hardware_item_ids == other.hardware_item_ids and self.test_adapter_ids == other.test_adapter_ids - and self.test_result_name == other.test_result_name + and self.name == other.name and self.start_date_time == other.start_date_time and self.end_date_time == other.end_date_time and self.outcome == other.outcome From 91942e9afb2d474f99845f6bd2ce12245b862448 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 11:52:26 -0600 Subject: [PATCH 13/26] Change condition_name to name and condition_type to type. --- .../notebooks/query/publish_sample_data.ipynb | 151 +++--------------- .../data/_types/_published_condition.py | 28 ++-- 2 files changed, 37 insertions(+), 142 deletions(-) diff --git a/examples/notebooks/query/publish_sample_data.ipynb b/examples/notebooks/query/publish_sample_data.ipynb index 5648272..2b0c206 100644 --- a/examples/notebooks/query/publish_sample_data.ipynb +++ b/examples/notebooks/query/publish_sample_data.ipynb @@ -37,7 +37,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "c28ff0fa", "metadata": {}, "outputs": [], @@ -70,39 +70,10 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "658ae5b8", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "🚀 Starting sample data creation...\n", - "📊 Creating comprehensive test metadata and measurements\n", - "\n", - "✅ Creating operators...\n", - "\n", - "✅ Creating test stations...\n", - "\n", - "✅ Creating hardware items...\n", - "\n", - "✅ Creating UUTs...\n", - "\n", - "✅ Creating software items...\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Create sample operators\n", "print(\"🚀 Starting sample data creation...\")\n", @@ -110,34 +81,34 @@ "\n", "# Create sample operators\n", "print(\"\\n✅ Creating operators...\")\n", - "operator1 = Operator(operator_name=\"Alex Smith\", role=\"Test Engineer\")\n", + "operator1 = Operator(name=\"Alex Smith\", role=\"Test Engineer\")\n", "metadata_store_client.create_operator(operator1)\n", "ALIAS_OPERATOR_ALEX = \"Operator_Alex_Smith\"\n", "metadata_store_client.create_alias(ALIAS_OPERATOR_ALEX, operator1)\n", "\n", - "operator2 = Operator(operator_name=\"Jordan Chen\", role=\"Senior Test Engineer\")\n", + "operator2 = Operator(name=\"Jordan Chen\", role=\"Senior Test Engineer\")\n", "metadata_store_client.create_operator(operator2)\n", "ALIAS_OPERATOR_JORDAN = \"Operator_Jordan_Chen\"\n", "metadata_store_client.create_alias(ALIAS_OPERATOR_JORDAN, operator2)\n", "\n", - "operator3 = Operator(operator_name=\"Taylor Johnson\", role=\"Lab Technician\")\n", + "operator3 = Operator(name=\"Taylor Johnson\", role=\"Lab Technician\")\n", "metadata_store_client.create_operator(operator3)\n", "ALIAS_OPERATOR_TAYLOR = \"Operator_Taylor_Johnson\"\n", "metadata_store_client.create_alias(ALIAS_OPERATOR_TAYLOR, operator3)\n", "\n", "# Create sample test stations\n", "print(\"\\n✅ Creating test stations...\")\n", - "station1 = TestStation(test_station_name=\"TestStation_A1\")\n", + "station1 = TestStation(name=\"TestStation_A1\")\n", "metadata_store_client.create_test_station(station1)\n", "ALIAS_STATION_A1 = \"Station_A1\"\n", "metadata_store_client.create_alias(ALIAS_STATION_A1, station1)\n", "\n", - "station2 = TestStation(test_station_name=\"TestStation_B2\")\n", + "station2 = TestStation(name=\"TestStation_B2\")\n", "metadata_store_client.create_test_station(station2)\n", "ALIAS_STATION_B2 = \"Station_B2\"\n", "metadata_store_client.create_alias(ALIAS_STATION_B2, station2)\n", "\n", - "station3 = TestStation(test_station_name=\"TestStation_C3\")\n", + "station3 = TestStation(name=\"TestStation_C3\")\n", "metadata_store_client.create_test_station(station3)\n", "ALIAS_STATION_C3 = \"Station_C3\"\n", "metadata_store_client.create_alias(ALIAS_STATION_C3, station3)\n", @@ -196,29 +167,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "4fec522e", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "✅ Creating UUT instances...\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Create sample UUT instances (individual devices with serial numbers)\n", "print(\"\\n✅ Creating UUT instances...\")\n", @@ -250,39 +202,10 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "a14d6ca4", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "🔬 Creating sample test results with measurements...\n", - "📋 Creating Power Supply test...\n", - " 🧪 Created measurement 'Configure DMM' - ✅ Passed\n", - " 🧪 Created measurement 'Set Load Conditions' - ✅ Passed\n", - " 🧪 Created measurement 'Warm-up Period' - ✅ Passed\n", - " 🧪 Created measurement 'Measure Input Voltage' - ❌ Failed\n", - " 🧪 Created measurement 'Measure Input Current' - ❌ Failed\n", - " 🧪 Created measurement 'Calculate Input Power' - ❌ Failed\n", - " 🧪 Created measurement 'Measure 5V Rail' - ✅ Passed\n", - " 🧪 Created measurement 'Measure 12V Rail' - ❌ Failed\n", - " 🧪 Created measurement 'Measure -12V Rail' - ✅ Passed\n", - " 🧪 Created measurement 'No Load Test' - ✅ Passed\n", - " 🧪 Created measurement '25% Load Test' - ✅ Passed\n", - " 🧪 Created measurement '50% Load Test' - ✅ Passed\n", - " 🧪 Created measurement '75% Load Test' - ✅ Passed\n", - " 🧪 Created measurement 'Full Load Test' - ✅ Passed\n", - " 🧪 Created measurement '5V Ripple' - ✅ Passed\n", - " 🧪 Created measurement '12V Ripple' - ❌ Failed\n", - " 🧪 Created measurement '-12V Ripple' - ❌ Failed\n", - " 📊 Created 17 measurements for Power Supply test\n", - " 🌡️ Created 15 conditions for Power Supply test\n" - ] - } - ], + "outputs": [], "source": [ "import random\n", "\n", @@ -302,7 +225,7 @@ " test_station_id=ALIAS_STATION_A1,\n", " software_item_ids=[ALIAS_SOFTWARE_PYTHON],\n", " hardware_item_ids=[ALIAS_DMM, ALIAS_SCOPE],\n", - " test_result_name=\"Power Supply Test v2.1\"\n", + " name=\"Power Supply Test v2.1\"\n", ")\n", "ps_test_result_id = data_store_client.create_test_result(power_test_result)\n", "\n", @@ -317,7 +240,7 @@ "\n", "power_step_objects = []\n", "for step_name, measurement_names in power_steps:\n", - " step = Step(step_name=step_name, test_result_id=ps_test_result_id)\n", + " step = Step(name=step_name, test_result_id=ps_test_result_id)\n", " step_id = data_store_client.create_step(step)\n", " power_step_objects.append((step_id, measurement_names))\n", "\n", @@ -401,38 +324,10 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "3e51f538", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "📋 Creating Audio Amplifier test...\n", - " 🌡️ Adding test conditions for Audio Amplifier test...\n", - " 📊 Created 18 measurements for Audio Amplifier test\n", - " 🌡️ Created 18 conditions for Audio Amplifier test\n", - "\n", - "📋 Creating second Power Supply test...\n", - " 🌡️ Adding test conditions for second Power Supply test...\n", - " 📊 Created 3 measurements for second Power Supply test\n", - " 🌡️ Created 1 conditions for second Power Supply test\n", - "\n", - "🎯 Sample data creation complete!\n", - "📊 Summary:\n", - " - Test Results: 3\n", - " - Steps: 12\n", - " - Measurements: 38\n", - " - Conditions: 19\n", - "\n", - "✅ Ready to run query notebooks!\n", - " 📓 Next: query_metadata.ipynb - Query operators, stations, hardware, etc.\n", - " 📓 Then: query_measurements.ipynb - Query test results and measurements\n" - ] - } - ], + "outputs": [], "source": [ "# Scenario 2: Audio Amplifier Test\n", "print(\"\\n📋 Creating Audio Amplifier test...\")\n", @@ -442,7 +337,7 @@ " test_station_id=ALIAS_STATION_B2,\n", " software_item_ids=[ALIAS_SOFTWARE_PYTHON],\n", " hardware_item_ids=[ALIAS_DMM, ALIAS_SCOPE],\n", - " test_result_name=\"Audio Amplifier Test v1.3\"\n", + " name=\"Audio Amplifier Test v1.3\"\n", ")\n", "amp_test_result_id = data_store_client.create_test_result(amplifier_test_result)\n", "\n", @@ -458,7 +353,7 @@ "\n", "amplifier_step_objects = []\n", "for step_name, measurement_names in amplifier_steps:\n", - " step = Step(step_name=step_name, test_result_id=amp_test_result_id)\n", + " step = Step(name=step_name, test_result_id=amp_test_result_id)\n", " step_id = data_store_client.create_step(step)\n", " amplifier_step_objects.append((step_id, measurement_names))\n", "\n", @@ -527,7 +422,7 @@ " test_station_id=ALIAS_STATION_C3,\n", " software_item_ids=[ALIAS_SOFTWARE_PYTHON],\n", " hardware_item_ids=[ALIAS_DMM, ALIAS_SCOPE],\n", - " test_result_name=\"Power Supply Test v2.1\"\n", + " name=\"Power Supply Test v2.1\"\n", ")\n", "ps_test_2_result_id = data_store_client.create_test_result(power_test_2)\n", "\n", @@ -538,7 +433,7 @@ "\n", "power_test_2_conditions = 0\n", "for step_name, measurement_names in quick_steps:\n", - " step = Step(step_name=step_name, test_result_id=ps_test_2_result_id)\n", + " step = Step(name=step_name, test_result_id=ps_test_2_result_id)\n", " step_id = data_store_client.create_step(step)\n", " \n", " for measurement_name in measurement_names:\n", @@ -613,7 +508,7 @@ ], "metadata": { "kernelspec": { - "display_name": "ni-datastore-py3.11", + "display_name": "ni-datastore-py3.14", "language": "python", "name": "python3" }, @@ -627,7 +522,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.14.0" } }, "nbformat": 4, diff --git a/src/ni/datastore/data/_types/_published_condition.py b/src/ni/datastore/data/_types/_published_condition.py index ecbd9b3..723811f 100644 --- a/src/ni/datastore/data/_types/_published_condition.py +++ b/src/ni/datastore/data/_types/_published_condition.py @@ -19,8 +19,8 @@ class PublishedCondition: __slots__ = ( "moniker", "id", - "condition_name", - "condition_type", + "name", + "type", "step_id", "test_result_id", ) @@ -30,8 +30,8 @@ def __init__( *, moniker: Moniker | None = None, id: str = "", - condition_name: str = "", - condition_type: str = "", + name: str = "", + type: str = "", step_id: str = "", test_result_id: str = "", ) -> None: @@ -42,8 +42,8 @@ def __init__( with. This moniker returns a Vector when read. id: The unique identifier of the condition. This can be used to reference and find the condition in the data store. - condition_name: The name of the condition. - condition_type: The type of the condition. For example, "Setup" or + name: The name of the condition. + type: The type of the condition. For example, "Setup" or "Environment". step_id: The ID of the step with which this condition is associated. test_result_id: The ID of the test result with which this condition @@ -51,8 +51,8 @@ def __init__( """ self.moniker = moniker self.id = id - self.condition_name = condition_name - self.condition_type = condition_type + self.name = name + self.type = type self.step_id = step_id self.test_result_id = test_result_id @@ -66,8 +66,8 @@ def from_protobuf(published_condition_proto: PublishedConditionProto) -> "Publis else None ), id=published_condition_proto.id, - condition_name=published_condition_proto.name, - condition_type=published_condition_proto.type, + name=published_condition_proto.name, + type=published_condition_proto.type, step_id=published_condition_proto.step_id, test_result_id=published_condition_proto.test_result_id, ) @@ -77,8 +77,8 @@ def to_protobuf(self) -> PublishedConditionProto: return PublishedConditionProto( moniker=self.moniker, id=self.id, - name=self.condition_name, - type=self.condition_type, + name=self.name, + type=self.type, step_id=self.step_id, test_result_id=self.test_result_id, ) @@ -90,8 +90,8 @@ def __eq__(self, other: object) -> bool: return ( self.moniker == other.moniker and self.id == other.id - and self.condition_name == other.condition_name - and self.condition_type == other.condition_type + and self.name == other.name + and self.type == other.type and self.step_id == other.step_id and self.test_result_id == other.test_result_id ) From 709df97d59f99d71822771682852763eabbff89c Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 12:53:44 -0600 Subject: [PATCH 14/26] Rename alias_name, measurement_name, and measurement_notes. --- .../data/_types/_published_measurement.py | 28 +++++++++---------- src/ni/datastore/metadata/_types/_alias.py | 14 +++++----- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/ni/datastore/data/_types/_published_measurement.py b/src/ni/datastore/data/_types/_published_measurement.py index c463936..6dc0fdd 100644 --- a/src/ni/datastore/data/_types/_published_measurement.py +++ b/src/ni/datastore/data/_types/_published_measurement.py @@ -35,9 +35,9 @@ class PublishedMeasurement: "_software_item_ids", "_hardware_item_ids", "_test_adapter_ids", - "measurement_name", + "name", "data_type", - "measurement_notes", + "notes", "start_date_time", "end_date_time", "outcome", @@ -76,9 +76,9 @@ def __init__( software_item_ids: Iterable[str] | None = None, hardware_item_ids: Iterable[str] | None = None, test_adapter_ids: Iterable[str] | None = None, - measurement_name: str = "", + name: str = "", data_type: str = "", - measurement_notes: str = "", + notes: str = "", start_date_time: ht.datetime | None = None, end_date_time: ht.datetime | None = None, outcome: Outcome.ValueType = Outcome.OUTCOME_UNSPECIFIED, @@ -105,9 +105,9 @@ def __init__( this measurement. test_adapter_ids: The IDs of the test adapters associated with this measurement. - measurement_name: The name of the measurement. + name: The name of the measurement. data_type: The data type of the measurement value. - measurement_notes: Additional notes or comments about the + notes: Additional notes or comments about the measurement. start_date_time: The start timestamp of the measurement. end_date_time: The end timestamp of the measurement. @@ -134,9 +134,9 @@ def __init__( self._test_adapter_ids: MutableSequence[str] = ( list(test_adapter_ids) if test_adapter_ids is not None else [] ) - self.measurement_name = measurement_name + self.name = name self.data_type = data_type - self.measurement_notes = measurement_notes + self.notes = notes self.start_date_time = start_date_time self.end_date_time = end_date_time self.outcome = outcome @@ -164,9 +164,9 @@ def from_protobuf( software_item_ids=published_measurement_proto.software_item_ids, hardware_item_ids=published_measurement_proto.hardware_item_ids, test_adapter_ids=published_measurement_proto.test_adapter_ids, - measurement_name=published_measurement_proto.name, + name=published_measurement_proto.name, data_type=published_measurement_proto.data_type, - measurement_notes=published_measurement_proto.notes, + notes=published_measurement_proto.notes, start_date_time=( hightime_datetime_from_protobuf(published_measurement_proto.start_date_time) if published_measurement_proto.HasField("start_date_time") @@ -199,9 +199,9 @@ def to_protobuf(self) -> PublishedMeasurementProto: software_item_ids=self.software_item_ids, hardware_item_ids=self.hardware_item_ids, test_adapter_ids=self.test_adapter_ids, - name=self.measurement_name, + name=self.name, data_type=self.data_type, - notes=self.measurement_notes, + notes=self.notes, start_date_time=( hightime_datetime_to_protobuf(self.start_date_time) if self.start_date_time is not None @@ -230,9 +230,9 @@ def __eq__(self, other: object) -> bool: and self.software_item_ids == other.software_item_ids and self.hardware_item_ids == other.hardware_item_ids and self.test_adapter_ids == other.test_adapter_ids - and self.measurement_name == other.measurement_name + and self.name == other.name and self.data_type == other.data_type - and self.measurement_notes == other.measurement_notes + and self.notes == other.notes and self.start_date_time == other.start_date_time and self.end_date_time == other.end_date_time and self.outcome == other.outcome diff --git a/src/ni/datastore/metadata/_types/_alias.py b/src/ni/datastore/metadata/_types/_alias.py index 70f65f7..cad8039 100644 --- a/src/ni/datastore/metadata/_types/_alias.py +++ b/src/ni/datastore/metadata/_types/_alias.py @@ -17,7 +17,7 @@ class Alias: """ __slots__ = ( - "alias_name", + "name", "target_type", "target_id", ) @@ -25,19 +25,19 @@ class Alias: def __init__( self, *, - alias_name: str = "", + name: str = "", target_type: AliasTargetType.ValueType = AliasTargetType.ALIAS_TARGET_TYPE_UNSPECIFIED, target_id: str = "", ) -> None: """Initialize an Alias instance. Args: - alias_name: The registered alias name for the aliased metadata + name: The registered alias name for the aliased metadata instance. target_type: The type of the aliased metadata instance. target_id: The unique identifier for the aliased metadata instance. """ - self.alias_name = alias_name + self.name = name self.target_type = target_type self.target_id = target_id @@ -45,7 +45,7 @@ def __init__( def from_protobuf(alias_proto: AliasProto) -> "Alias": """Create an Alias instance from a protobuf Alias message.""" return Alias( - alias_name=alias_proto.name, + name=alias_proto.name, target_type=alias_proto.target_type, target_id=alias_proto.target_id, ) @@ -53,7 +53,7 @@ def from_protobuf(alias_proto: AliasProto) -> "Alias": def to_protobuf(self) -> AliasProto: """Convert this Alias to a protobuf Alias message.""" return AliasProto( - name=self.alias_name, + name=self.name, target_type=self.target_type, target_id=self.target_id, ) @@ -63,7 +63,7 @@ def __eq__(self, other: object) -> bool: if not isinstance(other, Alias): return NotImplemented return ( - self.alias_name == other.alias_name + self.name == other.name and self.target_type == other.target_type and self.target_id == other.target_id ) From 56c202fd61f7c9c1d22384912ead20c2328bdcd2 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 12:55:01 -0600 Subject: [PATCH 15/26] Rename schema_id to id --- .../datastore/metadata/_types/_extension_schema.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/ni/datastore/metadata/_types/_extension_schema.py b/src/ni/datastore/metadata/_types/_extension_schema.py index 2dfd00e..8c16efd 100644 --- a/src/ni/datastore/metadata/_types/_extension_schema.py +++ b/src/ni/datastore/metadata/_types/_extension_schema.py @@ -15,37 +15,37 @@ class ExtensionSchema: """ __slots__ = ( - "schema_id", + "id", "schema", ) def __init__( self, *, - schema_id: str = "", + id: str = "", schema: str = "", ) -> None: """Initialize an ExtensionSchema instance. Args: - schema_id: The ID of the schema. + id: The ID of the schema. schema: The schema itself. """ - self.schema_id = schema_id + self.id = id self.schema = schema @staticmethod def from_protobuf(extension_schema_proto: ExtensionSchemaProto) -> "ExtensionSchema": """Create an ExtensionSchema instance from a protobuf ExtensionSchema message.""" return ExtensionSchema( - schema_id=extension_schema_proto.id, + id=extension_schema_proto.id, schema=extension_schema_proto.schema, ) def to_protobuf(self) -> ExtensionSchemaProto: """Convert this ExtensionSchema to a protobuf ExtensionSchema message.""" return ExtensionSchemaProto( - id=self.schema_id, + id=self.id, schema=self.schema, ) @@ -53,7 +53,7 @@ def __eq__(self, other: object) -> bool: """Determine equality.""" if not isinstance(other, ExtensionSchema): return NotImplemented - return self.schema_id == other.schema_id and self.schema == other.schema + return self.id == other.id and self.schema == other.schema def __str__(self) -> str: """Return a string representation of the ExtensionSchema.""" From b89ffb8f0f40caffa4f4cb7a8e6986727d254cde Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 12:59:08 -0600 Subject: [PATCH 16/26] Fix overview example with latest code changes --- examples/overview/poetry.lock | 415 ++++++++++++++++-------------- examples/overview/src/overview.py | 10 +- 2 files changed, 223 insertions(+), 202 deletions(-) diff --git a/examples/overview/poetry.lock b/examples/overview/poetry.lock index 4e36e3c..5f76c58 100644 --- a/examples/overview/poetry.lock +++ b/examples/overview/poetry.lock @@ -522,26 +522,26 @@ setuptools = "*" [[package]] name = "hightime" -version = "0.3.0.dev1" +version = "1.0.0" description = "Hightime Python API" optional = false python-versions = "<4.0,>=3.9" groups = ["main", "dev"] files = [ - {file = "hightime-0.3.0.dev1-py3-none-any.whl", hash = "sha256:33b05864264655929f6ecaade8a1f27070f1e3a2028e304e051825cbe6a505c9"}, - {file = "hightime-0.3.0.dev1.tar.gz", hash = "sha256:e1ad569c034b61be5b906a5dc4b226af6b6fe4985f2550edc8b575a4df5fdaf0"}, + {file = "hightime-1.0.0-py3-none-any.whl", hash = "sha256:ba86d42976c36451b14e11c736e61f296f9f00dbb79c8488e18d70c6b2dbb395"}, + {file = "hightime-1.0.0.tar.gz", hash = "sha256:480d2a03e2c3ed44916d2406d40ab6d10a276ed7f101619fc3fcc1e00c46aacf"}, ] [[package]] name = "isort" -version = "6.0.1" +version = "7.0.0" description = "A Python utility / library to sort Python imports." optional = false -python-versions = ">=3.9.0" +python-versions = ">=3.10.0" groups = ["lint"] files = [ - {file = "isort-6.0.1-py3-none-any.whl", hash = "sha256:2dc5d7f65c9678d94c88dfc29161a320eec67328bc97aad576874cb4be1e9615"}, - {file = "isort-6.0.1.tar.gz", hash = "sha256:1cb5df28dfbc742e490c5e41bad6da41b805b0a8be7bc93cd0fb2a8a890ac450"}, + {file = "isort-7.0.0-py3-none-any.whl", hash = "sha256:1bcabac8bc3c36c7fb7b98a76c8abb18e0f841a3ba81decac7691008592499c1"}, + {file = "isort-7.0.0.tar.gz", hash = "sha256:5513527951aadb3ac4292a41a16cbc50dd1642432f5e8c20057d414bdafb4187"}, ] [package.extras] @@ -688,14 +688,14 @@ url = "../.." [[package]] name = "ni-grpc-extensions" -version = "0.1.0.dev1" +version = "1.0.0" description = "gRPC Extensions" optional = false python-versions = "<4.0,>=3.9" groups = ["main", "dev"] files = [ - {file = "ni_grpc_extensions-0.1.0.dev1-py3-none-any.whl", hash = "sha256:171a16303a2cfcbd2f29ad5df448bf6b89b399be3ba52fc0c2e755c2e7075075"}, - {file = "ni_grpc_extensions-0.1.0.dev1.tar.gz", hash = "sha256:99af79ab9054b15b8682c9540ea4e474236bfaab0b271b42731ba9fd2c5bb4c7"}, + {file = "ni_grpc_extensions-1.0.0-py3-none-any.whl", hash = "sha256:6b8181284370a53546ffd371d334f15e293cae5e9ff06fa2e467d1714bf7a03f"}, + {file = "ni_grpc_extensions-1.0.0.tar.gz", hash = "sha256:6e066246ce9a4b4420f5e503769b23c31a49c430be6ebd72324c5b5a15c34ebb"}, ] [package.dependencies] @@ -704,32 +704,32 @@ traceloggingdynamic = {version = ">=1.0", markers = "sys_platform == \"win32\""} [[package]] name = "ni-measurementlink-discovery-v1-client" -version = "0.1.0.dev0" +version = "1.0.0" description = "gRPC Client for NI Discovery Service" optional = false python-versions = "<4.0,>=3.9" groups = ["main", "dev"] files = [ - {file = "ni_measurementlink_discovery_v1_client-0.1.0.dev0-py3-none-any.whl", hash = "sha256:b27abeddb3465e2be3a8142f0884eaeabff82d89040a76d026501d8527064167"}, - {file = "ni_measurementlink_discovery_v1_client-0.1.0.dev0.tar.gz", hash = "sha256:b964d48bc7942fc1eb6bcc5b03ce1a3fb031e9fa19d7d1a92c3c85b92fc44c17"}, + {file = "ni_measurementlink_discovery_v1_client-1.0.0-py3-none-any.whl", hash = "sha256:6a4c45d2517a7c6017a3b7dd817a6d7ebc8ebec318243c4f17778115a1a192a6"}, + {file = "ni_measurementlink_discovery_v1_client-1.0.0.tar.gz", hash = "sha256:2aa2a0c55f6599ffa3ff05e67e6ff89360f22bf0082e512348a41997ddfde3f8"}, ] [package.dependencies] grpcio = ">=1.49.0,<2.0" -ni-grpc-extensions = ">=0.1.0.dev0" -ni-measurementlink-discovery-v1-proto = ">=0.1.0.dev0" +ni-grpc-extensions = ">=0.1.0.dev1" +ni-measurementlink-discovery-v1-proto = ">=0.1.0.dev1" pywin32 = {version = ">=303", markers = "sys_platform == \"win32\""} [[package]] name = "ni-measurementlink-discovery-v1-proto" -version = "0.1.0.dev1" +version = "1.0.0" description = "Protobuf data types for NI discovery gRPC APIs" optional = false python-versions = "<4.0,>=3.9" groups = ["main", "dev"] files = [ - {file = "ni_measurementlink_discovery_v1_proto-0.1.0.dev1-py3-none-any.whl", hash = "sha256:2525e5c2975b6c3b5d0127a55c974a077a56d35e42ae1203c6063770b87e3062"}, - {file = "ni_measurementlink_discovery_v1_proto-0.1.0.dev1.tar.gz", hash = "sha256:75ebca4560d1e58d8ba585d6b1b8ea9923327d3ed5cc2cb6b9d8cc8d8931aa4e"}, + {file = "ni_measurementlink_discovery_v1_proto-1.0.0-py3-none-any.whl", hash = "sha256:093eb4ffd27338fbea4909aea30afbd3090f482f3a1dcc98e63bbaf1a6b4da8b"}, + {file = "ni_measurementlink_discovery_v1_proto-1.0.0.tar.gz", hash = "sha256:11353eefdecc49244783d76a332bc855589eb0bb8c882f53c8f9b0a47ca91115"}, ] [package.dependencies] @@ -869,143 +869,153 @@ typing-extensions = ">=4.13.2" [[package]] name = "numpy" -version = "2.0.2" +version = "2.2.6" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main", "dev"] markers = "python_version < \"3.12\"" files = [ - {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b"}, - {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd"}, - {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318"}, - {file = "numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8"}, - {file = "numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326"}, - {file = "numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97"}, - {file = "numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a"}, - {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669"}, - {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951"}, - {file = "numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9"}, - {file = "numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15"}, - {file = "numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4"}, - {file = "numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c"}, - {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692"}, - {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a"}, - {file = "numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c"}, - {file = "numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded"}, - {file = "numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5"}, - {file = "numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729"}, - {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1"}, - {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd"}, - {file = "numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d"}, - {file = "numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d"}, - {file = "numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa"}, - {file = "numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385"}, - {file = "numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf"}, + {file = "numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83"}, + {file = "numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915"}, + {file = "numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680"}, + {file = "numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289"}, + {file = "numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d"}, + {file = "numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491"}, + {file = "numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a"}, + {file = "numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf"}, + {file = "numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1"}, + {file = "numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab"}, + {file = "numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47"}, + {file = "numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282"}, + {file = "numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87"}, + {file = "numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249"}, + {file = "numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49"}, + {file = "numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de"}, + {file = "numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4"}, + {file = "numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566"}, + {file = "numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f"}, + {file = "numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f"}, + {file = "numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868"}, + {file = "numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d"}, + {file = "numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd"}, + {file = "numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8"}, + {file = "numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f"}, + {file = "numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa"}, + {file = "numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571"}, + {file = "numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1"}, + {file = "numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff"}, + {file = "numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00"}, + {file = "numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd"}, ] [[package]] name = "numpy" -version = "2.3.3" +version = "2.3.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.11" groups = ["main", "dev"] markers = "python_version >= \"3.12\"" files = [ - {file = "numpy-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ffc4f5caba7dfcbe944ed674b7eef683c7e94874046454bb79ed7ee0236f59d"}, - {file = "numpy-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7e946c7170858a0295f79a60214424caac2ffdb0063d4d79cb681f9aa0aa569"}, - {file = "numpy-2.3.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:cd4260f64bc794c3390a63bf0728220dd1a68170c169088a1e0dfa2fde1be12f"}, - {file = "numpy-2.3.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:f0ddb4b96a87b6728df9362135e764eac3cfa674499943ebc44ce96c478ab125"}, - {file = "numpy-2.3.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:afd07d377f478344ec6ca2b8d4ca08ae8bd44706763d1efb56397de606393f48"}, - {file = "numpy-2.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bc92a5dedcc53857249ca51ef29f5e5f2f8c513e22cfb90faeb20343b8c6f7a6"}, - {file = "numpy-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7af05ed4dc19f308e1d9fc759f36f21921eb7bbfc82843eeec6b2a2863a0aefa"}, - {file = "numpy-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:433bf137e338677cebdd5beac0199ac84712ad9d630b74eceeb759eaa45ddf30"}, - {file = "numpy-2.3.3-cp311-cp311-win32.whl", hash = "sha256:eb63d443d7b4ffd1e873f8155260d7f58e7e4b095961b01c91062935c2491e57"}, - {file = "numpy-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:ec9d249840f6a565f58d8f913bccac2444235025bbb13e9a4681783572ee3caa"}, - {file = "numpy-2.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:74c2a948d02f88c11a3c075d9733f1ae67d97c6bdb97f2bb542f980458b257e7"}, - {file = "numpy-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cfdd09f9c84a1a934cde1eec2267f0a43a7cd44b2cca4ff95b7c0d14d144b0bf"}, - {file = "numpy-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb32e3cf0f762aee47ad1ddc6672988f7f27045b0783c887190545baba73aa25"}, - {file = "numpy-2.3.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:396b254daeb0a57b1fe0ecb5e3cff6fa79a380fa97c8f7781a6d08cd429418fe"}, - {file = "numpy-2.3.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:067e3d7159a5d8f8a0b46ee11148fc35ca9b21f61e3c49fbd0a027450e65a33b"}, - {file = "numpy-2.3.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c02d0629d25d426585fb2e45a66154081b9fa677bc92a881ff1d216bc9919a8"}, - {file = "numpy-2.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9192da52b9745f7f0766531dcfa978b7763916f158bb63bdb8a1eca0068ab20"}, - {file = "numpy-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cd7de500a5b66319db419dc3c345244404a164beae0d0937283b907d8152e6ea"}, - {file = "numpy-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93d4962d8f82af58f0b2eb85daaf1b3ca23fe0a85d0be8f1f2b7bb46034e56d7"}, - {file = "numpy-2.3.3-cp312-cp312-win32.whl", hash = "sha256:5534ed6b92f9b7dca6c0a19d6df12d41c68b991cef051d108f6dbff3babc4ebf"}, - {file = "numpy-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:497d7cad08e7092dba36e3d296fe4c97708c93daf26643a1ae4b03f6294d30eb"}, - {file = "numpy-2.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:ca0309a18d4dfea6fc6262a66d06c26cfe4640c3926ceec90e57791a82b6eee5"}, - {file = "numpy-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f5415fb78995644253370985342cd03572ef8620b934da27d77377a2285955bf"}, - {file = "numpy-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d00de139a3324e26ed5b95870ce63be7ec7352171bc69a4cf1f157a48e3eb6b7"}, - {file = "numpy-2.3.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9dc13c6a5829610cc07422bc74d3ac083bd8323f14e2827d992f9e52e22cd6a6"}, - {file = "numpy-2.3.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d79715d95f1894771eb4e60fb23f065663b2298f7d22945d66877aadf33d00c7"}, - {file = "numpy-2.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:952cfd0748514ea7c3afc729a0fc639e61655ce4c55ab9acfab14bda4f402b4c"}, - {file = "numpy-2.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b83648633d46f77039c29078751f80da65aa64d5622a3cd62aaef9d835b6c93"}, - {file = "numpy-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b001bae8cea1c7dfdb2ae2b017ed0a6f2102d7a70059df1e338e307a4c78a8ae"}, - {file = "numpy-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e9aced64054739037d42fb84c54dd38b81ee238816c948c8f3ed134665dcd86"}, - {file = "numpy-2.3.3-cp313-cp313-win32.whl", hash = "sha256:9591e1221db3f37751e6442850429b3aabf7026d3b05542d102944ca7f00c8a8"}, - {file = "numpy-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f0dadeb302887f07431910f67a14d57209ed91130be0adea2f9793f1a4f817cf"}, - {file = "numpy-2.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:3c7cf302ac6e0b76a64c4aecf1a09e51abd9b01fc7feee80f6c43e3ab1b1dbc5"}, - {file = "numpy-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:eda59e44957d272846bb407aad19f89dc6f58fecf3504bd144f4c5cf81a7eacc"}, - {file = "numpy-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:823d04112bc85ef5c4fda73ba24e6096c8f869931405a80aa8b0e604510a26bc"}, - {file = "numpy-2.3.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:40051003e03db4041aa325da2a0971ba41cf65714e65d296397cc0e32de6018b"}, - {file = "numpy-2.3.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ee9086235dd6ab7ae75aba5662f582a81ced49f0f1c6de4260a78d8f2d91a19"}, - {file = "numpy-2.3.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94fcaa68757c3e2e668ddadeaa86ab05499a70725811e582b6a9858dd472fb30"}, - {file = "numpy-2.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da1a74b90e7483d6ce5244053399a614b1d6b7bc30a60d2f570e5071f8959d3e"}, - {file = "numpy-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2990adf06d1ecee3b3dcbb4977dfab6e9f09807598d647f04d385d29e7a3c3d3"}, - {file = "numpy-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ed635ff692483b8e3f0fcaa8e7eb8a75ee71aa6d975388224f70821421800cea"}, - {file = "numpy-2.3.3-cp313-cp313t-win32.whl", hash = "sha256:a333b4ed33d8dc2b373cc955ca57babc00cd6f9009991d9edc5ddbc1bac36bcd"}, - {file = "numpy-2.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4384a169c4d8f97195980815d6fcad04933a7e1ab3b530921c3fef7a1c63426d"}, - {file = "numpy-2.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:75370986cc0bc66f4ce5110ad35aae6d182cc4ce6433c40ad151f53690130bf1"}, - {file = "numpy-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cd052f1fa6a78dee696b58a914b7229ecfa41f0a6d96dc663c1220a55e137593"}, - {file = "numpy-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:414a97499480067d305fcac9716c29cf4d0d76db6ebf0bf3cbce666677f12652"}, - {file = "numpy-2.3.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:50a5fe69f135f88a2be9b6ca0481a68a136f6febe1916e4920e12f1a34e708a7"}, - {file = "numpy-2.3.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:b912f2ed2b67a129e6a601e9d93d4fa37bef67e54cac442a2f588a54afe5c67a"}, - {file = "numpy-2.3.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e318ee0596d76d4cb3d78535dc005fa60e5ea348cd131a51e99d0bdbe0b54fe"}, - {file = "numpy-2.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce020080e4a52426202bdb6f7691c65bb55e49f261f31a8f506c9f6bc7450421"}, - {file = "numpy-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6687dc183aa55dae4a705b35f9c0f8cb178bcaa2f029b241ac5356221d5c021"}, - {file = "numpy-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d8f3b1080782469fdc1718c4ed1d22549b5fb12af0d57d35e992158a772a37cf"}, - {file = "numpy-2.3.3-cp314-cp314-win32.whl", hash = "sha256:cb248499b0bc3be66ebd6578b83e5acacf1d6cb2a77f2248ce0e40fbec5a76d0"}, - {file = "numpy-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:691808c2b26b0f002a032c73255d0bd89751425f379f7bcd22d140db593a96e8"}, - {file = "numpy-2.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:9ad12e976ca7b10f1774b03615a2a4bab8addce37ecc77394d8e986927dc0dfe"}, - {file = "numpy-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9cc48e09feb11e1db00b320e9d30a4151f7369afb96bd0e48d942d09da3a0d00"}, - {file = "numpy-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:901bf6123879b7f251d3631967fd574690734236075082078e0571977c6a8e6a"}, - {file = "numpy-2.3.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f025652034199c301049296b59fa7d52c7e625017cae4c75d8662e377bf487d"}, - {file = "numpy-2.3.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:533ca5f6d325c80b6007d4d7fb1984c303553534191024ec6a524a4c92a5935a"}, - {file = "numpy-2.3.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0edd58682a399824633b66885d699d7de982800053acf20be1eaa46d92009c54"}, - {file = "numpy-2.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:367ad5d8fbec5d9296d18478804a530f1191e24ab4d75ab408346ae88045d25e"}, - {file = "numpy-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8f6ac61a217437946a1fa48d24c47c91a0c4f725237871117dea264982128097"}, - {file = "numpy-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:179a42101b845a816d464b6fe9a845dfaf308fdfc7925387195570789bb2c970"}, - {file = "numpy-2.3.3-cp314-cp314t-win32.whl", hash = "sha256:1250c5d3d2562ec4174bce2e3a1523041595f9b651065e4a4473f5f48a6bc8a5"}, - {file = "numpy-2.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b37a0b2e5935409daebe82c1e42274d30d9dd355852529eab91dab8dcca7419f"}, - {file = "numpy-2.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:78c9f6560dc7e6b3990e32df7ea1a50bbd0e2a111e05209963f5ddcab7073b0b"}, - {file = "numpy-2.3.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1e02c7159791cd481e1e6d5ddd766b62a4d5acf8df4d4d1afe35ee9c5c33a41e"}, - {file = "numpy-2.3.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:dca2d0fc80b3893ae72197b39f69d55a3cd8b17ea1b50aa4c62de82419936150"}, - {file = "numpy-2.3.3-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:99683cbe0658f8271b333a1b1b4bb3173750ad59c0c61f5bbdc5b318918fffe3"}, - {file = "numpy-2.3.3-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:d9d537a39cc9de668e5cd0e25affb17aec17b577c6b3ae8a3d866b479fbe88d0"}, - {file = "numpy-2.3.3-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8596ba2f8af5f93b01d97563832686d20206d303024777f6dfc2e7c7c3f1850e"}, - {file = "numpy-2.3.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1ec5615b05369925bd1125f27df33f3b6c8bc10d788d5999ecd8769a1fa04db"}, - {file = "numpy-2.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2e267c7da5bf7309670523896df97f93f6e469fb931161f483cd6882b3b1a5dc"}, - {file = "numpy-2.3.3.tar.gz", hash = "sha256:ddc7c39727ba62b80dfdbedf400d1c10ddfa8eefbd7ec8dcb118be8b56d31029"}, + {file = "numpy-2.3.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e78aecd2800b32e8347ce49316d3eaf04aed849cd5b38e0af39f829a4e59f5eb"}, + {file = "numpy-2.3.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7fd09cc5d65bda1e79432859c40978010622112e9194e581e3415a3eccc7f43f"}, + {file = "numpy-2.3.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:1b219560ae2c1de48ead517d085bc2d05b9433f8e49d0955c82e8cd37bd7bf36"}, + {file = "numpy-2.3.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:bafa7d87d4c99752d07815ed7a2c0964f8ab311eb8168f41b910bd01d15b6032"}, + {file = "numpy-2.3.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36dc13af226aeab72b7abad501d370d606326a0029b9f435eacb3b8c94b8a8b7"}, + {file = "numpy-2.3.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7b2f9a18b5ff9824a6af80de4f37f4ec3c2aab05ef08f51c77a093f5b89adda"}, + {file = "numpy-2.3.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9984bd645a8db6ca15d850ff996856d8762c51a2239225288f08f9050ca240a0"}, + {file = "numpy-2.3.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:64c5825affc76942973a70acf438a8ab618dbd692b84cd5ec40a0a0509edc09a"}, + {file = "numpy-2.3.4-cp311-cp311-win32.whl", hash = "sha256:ed759bf7a70342f7817d88376eb7142fab9fef8320d6019ef87fae05a99874e1"}, + {file = "numpy-2.3.4-cp311-cp311-win_amd64.whl", hash = "sha256:faba246fb30ea2a526c2e9645f61612341de1a83fb1e0c5edf4ddda5a9c10996"}, + {file = "numpy-2.3.4-cp311-cp311-win_arm64.whl", hash = "sha256:4c01835e718bcebe80394fd0ac66c07cbb90147ebbdad3dcecd3f25de2ae7e2c"}, + {file = "numpy-2.3.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ef1b5a3e808bc40827b5fa2c8196151a4c5abe110e1726949d7abddfe5c7ae11"}, + {file = "numpy-2.3.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c2f91f496a87235c6aaf6d3f3d89b17dba64996abadccb289f48456cff931ca9"}, + {file = "numpy-2.3.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:f77e5b3d3da652b474cc80a14084927a5e86a5eccf54ca8ca5cbd697bf7f2667"}, + {file = "numpy-2.3.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:8ab1c5f5ee40d6e01cbe96de5863e39b215a4d24e7d007cad56c7184fdf4aeef"}, + {file = "numpy-2.3.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77b84453f3adcb994ddbd0d1c5d11db2d6bda1a2b7fd5ac5bd4649d6f5dc682e"}, + {file = "numpy-2.3.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4121c5beb58a7f9e6dfdee612cb24f4df5cd4db6e8261d7f4d7450a997a65d6a"}, + {file = "numpy-2.3.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:65611ecbb00ac9846efe04db15cbe6186f562f6bb7e5e05f077e53a599225d16"}, + {file = "numpy-2.3.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dabc42f9c6577bcc13001b8810d300fe814b4cfbe8a92c873f269484594f9786"}, + {file = "numpy-2.3.4-cp312-cp312-win32.whl", hash = "sha256:a49d797192a8d950ca59ee2d0337a4d804f713bb5c3c50e8db26d49666e351dc"}, + {file = "numpy-2.3.4-cp312-cp312-win_amd64.whl", hash = "sha256:985f1e46358f06c2a09921e8921e2c98168ed4ae12ccd6e5e87a4f1857923f32"}, + {file = "numpy-2.3.4-cp312-cp312-win_arm64.whl", hash = "sha256:4635239814149e06e2cb9db3dd584b2fa64316c96f10656983b8026a82e6e4db"}, + {file = "numpy-2.3.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c090d4860032b857d94144d1a9976b8e36709e40386db289aaf6672de2a81966"}, + {file = "numpy-2.3.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a13fc473b6db0be619e45f11f9e81260f7302f8d180c49a22b6e6120022596b3"}, + {file = "numpy-2.3.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:3634093d0b428e6c32c3a69b78e554f0cd20ee420dcad5a9f3b2a63762ce4197"}, + {file = "numpy-2.3.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:043885b4f7e6e232d7df4f51ffdef8c36320ee9d5f227b380ea636722c7ed12e"}, + {file = "numpy-2.3.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ee6a571d1e4f0ea6d5f22d6e5fbd6ed1dc2b18542848e1e7301bd190500c9d7"}, + {file = "numpy-2.3.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc8a63918b04b8571789688b2780ab2b4a33ab44bfe8ccea36d3eba51228c953"}, + {file = "numpy-2.3.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:40cc556d5abbc54aabe2b1ae287042d7bdb80c08edede19f0c0afb36ae586f37"}, + {file = "numpy-2.3.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ecb63014bb7f4ce653f8be7f1df8cbc6093a5a2811211770f6606cc92b5a78fd"}, + {file = "numpy-2.3.4-cp313-cp313-win32.whl", hash = "sha256:e8370eb6925bb8c1c4264fec52b0384b44f675f191df91cbe0140ec9f0955646"}, + {file = "numpy-2.3.4-cp313-cp313-win_amd64.whl", hash = "sha256:56209416e81a7893036eea03abcb91c130643eb14233b2515c90dcac963fe99d"}, + {file = "numpy-2.3.4-cp313-cp313-win_arm64.whl", hash = "sha256:a700a4031bc0fd6936e78a752eefb79092cecad2599ea9c8039c548bc097f9bc"}, + {file = "numpy-2.3.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:86966db35c4040fdca64f0816a1c1dd8dbd027d90fca5a57e00e1ca4cd41b879"}, + {file = "numpy-2.3.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:838f045478638b26c375ee96ea89464d38428c69170360b23a1a50fa4baa3562"}, + {file = "numpy-2.3.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d7315ed1dab0286adca467377c8381cd748f3dc92235f22a7dfc42745644a96a"}, + {file = "numpy-2.3.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:84f01a4d18b2cc4ade1814a08e5f3c907b079c847051d720fad15ce37aa930b6"}, + {file = "numpy-2.3.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:817e719a868f0dacde4abdfc5c1910b301877970195db9ab6a5e2c4bd5b121f7"}, + {file = "numpy-2.3.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85e071da78d92a214212cacea81c6da557cab307f2c34b5f85b628e94803f9c0"}, + {file = "numpy-2.3.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2ec646892819370cf3558f518797f16597b4e4669894a2ba712caccc9da53f1f"}, + {file = "numpy-2.3.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:035796aaaddfe2f9664b9a9372f089cfc88bd795a67bd1bfe15e6e770934cf64"}, + {file = "numpy-2.3.4-cp313-cp313t-win32.whl", hash = "sha256:fea80f4f4cf83b54c3a051f2f727870ee51e22f0248d3114b8e755d160b38cfb"}, + {file = "numpy-2.3.4-cp313-cp313t-win_amd64.whl", hash = "sha256:15eea9f306b98e0be91eb344a94c0e630689ef302e10c2ce5f7e11905c704f9c"}, + {file = "numpy-2.3.4-cp313-cp313t-win_arm64.whl", hash = "sha256:b6c231c9c2fadbae4011ca5e7e83e12dc4a5072f1a1d85a0a7b3ed754d145a40"}, + {file = "numpy-2.3.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:81c3e6d8c97295a7360d367f9f8553973651b76907988bb6066376bc2252f24e"}, + {file = "numpy-2.3.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7c26b0b2bf58009ed1f38a641f3db4be8d960a417ca96d14e5b06df1506d41ff"}, + {file = "numpy-2.3.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:62b2198c438058a20b6704351b35a1d7db881812d8512d67a69c9de1f18ca05f"}, + {file = "numpy-2.3.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:9d729d60f8d53a7361707f4b68a9663c968882dd4f09e0d58c044c8bf5faee7b"}, + {file = "numpy-2.3.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd0c630cf256b0a7fd9d0a11c9413b42fef5101219ce6ed5a09624f5a65392c7"}, + {file = "numpy-2.3.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5e081bc082825f8b139f9e9fe42942cb4054524598aaeb177ff476cc76d09d2"}, + {file = "numpy-2.3.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:15fb27364ed84114438fff8aaf998c9e19adbeba08c0b75409f8c452a8692c52"}, + {file = "numpy-2.3.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:85d9fb2d8cd998c84d13a79a09cc0c1091648e848e4e6249b0ccd7f6b487fa26"}, + {file = "numpy-2.3.4-cp314-cp314-win32.whl", hash = "sha256:e73d63fd04e3a9d6bc187f5455d81abfad05660b212c8804bf3b407e984cd2bc"}, + {file = "numpy-2.3.4-cp314-cp314-win_amd64.whl", hash = "sha256:3da3491cee49cf16157e70f607c03a217ea6647b1cea4819c4f48e53d49139b9"}, + {file = "numpy-2.3.4-cp314-cp314-win_arm64.whl", hash = "sha256:6d9cd732068e8288dbe2717177320723ccec4fb064123f0caf9bbd90ab5be868"}, + {file = "numpy-2.3.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:22758999b256b595cf0b1d102b133bb61866ba5ceecf15f759623b64c020c9ec"}, + {file = "numpy-2.3.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9cb177bc55b010b19798dc5497d540dea67fd13a8d9e882b2dae71de0cf09eb3"}, + {file = "numpy-2.3.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:0f2bcc76f1e05e5ab58893407c63d90b2029908fa41f9f1cc51eecce936c3365"}, + {file = "numpy-2.3.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:8dc20bde86802df2ed8397a08d793da0ad7a5fd4ea3ac85d757bf5dd4ad7c252"}, + {file = "numpy-2.3.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e199c087e2aa71c8f9ce1cb7a8e10677dc12457e7cc1be4798632da37c3e86e"}, + {file = "numpy-2.3.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85597b2d25ddf655495e2363fe044b0ae999b75bc4d630dc0d886484b03a5eb0"}, + {file = "numpy-2.3.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:04a69abe45b49c5955923cf2c407843d1c85013b424ae8a560bba16c92fe44a0"}, + {file = "numpy-2.3.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e1708fac43ef8b419c975926ce1eaf793b0c13b7356cfab6ab0dc34c0a02ac0f"}, + {file = "numpy-2.3.4-cp314-cp314t-win32.whl", hash = "sha256:863e3b5f4d9915aaf1b8ec79ae560ad21f0b8d5e3adc31e73126491bb86dee1d"}, + {file = "numpy-2.3.4-cp314-cp314t-win_amd64.whl", hash = "sha256:962064de37b9aef801d33bc579690f8bfe6c5e70e29b61783f60bcba838a14d6"}, + {file = "numpy-2.3.4-cp314-cp314t-win_arm64.whl", hash = "sha256:8b5a9a39c45d852b62693d9b3f3e0fe052541f804296ff401a72a1b60edafb29"}, + {file = "numpy-2.3.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6e274603039f924c0fe5cb73438fa9246699c78a6df1bd3decef9ae592ae1c05"}, + {file = "numpy-2.3.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d149aee5c72176d9ddbc6803aef9c0f6d2ceeea7626574fc68518da5476fa346"}, + {file = "numpy-2.3.4-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:6d34ed9db9e6395bb6cd33286035f73a59b058169733a9db9f85e650b88df37e"}, + {file = "numpy-2.3.4-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:fdebe771ca06bb8d6abce84e51dca9f7921fe6ad34a0c914541b063e9a68928b"}, + {file = "numpy-2.3.4-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e92defe6c08211eb77902253b14fe5b480ebc5112bc741fd5e9cd0608f847"}, + {file = "numpy-2.3.4-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13b9062e4f5c7ee5c7e5be96f29ba71bc5a37fed3d1d77c37390ae00724d296d"}, + {file = "numpy-2.3.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:81b3a59793523e552c4a96109dde028aa4448ae06ccac5a76ff6532a85558a7f"}, + {file = "numpy-2.3.4.tar.gz", hash = "sha256:a7d018bfedb375a8d979ac758b120ba846a7fe764911a64465fd87b8729f4a6a"}, ] [[package]] @@ -1049,20 +1059,20 @@ flake8 = ">=5.0.0" [[package]] name = "platformdirs" -version = "4.4.0" +version = "4.5.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["lint"] files = [ - {file = "platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85"}, - {file = "platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf"}, + {file = "platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3"}, + {file = "platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312"}, ] [package.extras] -docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] -type = ["mypy (>=1.14.1)"] +docs = ["furo (>=2025.9.25)", "proselint (>=0.14)", "sphinx (>=8.2.3)", "sphinx-autodoc-typehints (>=3.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.4.2)", "pytest-cov (>=7)", "pytest-mock (>=3.15.1)"] +type = ["mypy (>=1.18.2)"] [[package]] name = "protobuf" @@ -1110,22 +1120,23 @@ files = [ [[package]] name = "protobuf" -version = "6.32.1" +version = "6.33.0" description = "" optional = false python-versions = ">=3.9" groups = ["main", "dev"] markers = "python_version >= \"3.14\"" files = [ - {file = "protobuf-6.32.1-cp310-abi3-win32.whl", hash = "sha256:a8a32a84bc9f2aad712041b8b366190f71dde248926da517bde9e832e4412085"}, - {file = "protobuf-6.32.1-cp310-abi3-win_amd64.whl", hash = "sha256:b00a7d8c25fa471f16bc8153d0e53d6c9e827f0953f3c09aaa4331c718cae5e1"}, - {file = "protobuf-6.32.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d8c7e6eb619ffdf105ee4ab76af5a68b60a9d0f66da3ea12d1640e6d8dab7281"}, - {file = "protobuf-6.32.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:2f5b80a49e1eb7b86d85fcd23fe92df154b9730a725c3b38c4e43b9d77018bf4"}, - {file = "protobuf-6.32.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:b1864818300c297265c83a4982fd3169f97122c299f56a56e2445c3698d34710"}, - {file = "protobuf-6.32.1-cp39-cp39-win32.whl", hash = "sha256:68ff170bac18c8178f130d1ccb94700cf72852298e016a2443bdb9502279e5f1"}, - {file = "protobuf-6.32.1-cp39-cp39-win_amd64.whl", hash = "sha256:d0975d0b2f3e6957111aa3935d08a0eb7e006b1505d825f862a1fffc8348e122"}, - {file = "protobuf-6.32.1-py3-none-any.whl", hash = "sha256:2601b779fc7d32a866c6b4404f9d42a3f67c5b9f3f15b4db3cccabe06b95c346"}, - {file = "protobuf-6.32.1.tar.gz", hash = "sha256:ee2469e4a021474ab9baafea6cd070e5bf27c7d29433504ddea1a4ee5850f68d"}, + {file = "protobuf-6.33.0-cp310-abi3-win32.whl", hash = "sha256:d6101ded078042a8f17959eccd9236fb7a9ca20d3b0098bbcb91533a5680d035"}, + {file = "protobuf-6.33.0-cp310-abi3-win_amd64.whl", hash = "sha256:9a031d10f703f03768f2743a1c403af050b6ae1f3480e9c140f39c45f81b13ee"}, + {file = "protobuf-6.33.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:905b07a65f1a4b72412314082c7dbfae91a9e8b68a0cc1577515f8df58ecf455"}, + {file = "protobuf-6.33.0-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:e0697ece353e6239b90ee43a9231318302ad8353c70e6e45499fa52396debf90"}, + {file = "protobuf-6.33.0-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:e0a1715e4f27355afd9570f3ea369735afc853a6c3951a6afe1f80d8569ad298"}, + {file = "protobuf-6.33.0-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:35be49fd3f4fefa4e6e2aacc35e8b837d6703c37a2168a55ac21e9b1bc7559ef"}, + {file = "protobuf-6.33.0-cp39-cp39-win32.whl", hash = "sha256:cd33a8e38ea3e39df66e1bbc462b076d6e5ba3a4ebbde58219d777223a7873d3"}, + {file = "protobuf-6.33.0-cp39-cp39-win_amd64.whl", hash = "sha256:c963e86c3655af3a917962c9619e1a6b9670540351d7af9439d06064e3317cc9"}, + {file = "protobuf-6.33.0-py3-none-any.whl", hash = "sha256:25c9e1963c6734448ea2d308cfa610e692b801304ba0908d7bfa564ac5132995"}, + {file = "protobuf-6.33.0.tar.gz", hash = "sha256:140303d5c8d2037730c548f8c7b93b20bb1dc301be280c378b82b8894589c954"}, ] [[package]] @@ -1200,14 +1211,14 @@ files = [ [[package]] name = "pytokens" -version = "0.1.10" -description = "A Fast, spec compliant Python 3.12+ tokenizer that runs on older Pythons." +version = "0.2.0" +description = "A Fast, spec compliant Python 3.13+ tokenizer that runs on older Pythons." optional = false python-versions = ">=3.8" groups = ["lint"] files = [ - {file = "pytokens-0.1.10-py3-none-any.whl", hash = "sha256:db7b72284e480e69fb085d9f251f66b3d2df8b7166059261258ff35f50fb711b"}, - {file = "pytokens-0.1.10.tar.gz", hash = "sha256:c9a4bfa0be1d26aebce03e6884ba454e842f186a59ea43a6d3b25af58223c044"}, + {file = "pytokens-0.2.0-py3-none-any.whl", hash = "sha256:74d4b318c67f4295c13782ddd9abcb7e297ec5630ad060eb90abf7ebbefe59f8"}, + {file = "pytokens-0.2.0.tar.gz", hash = "sha256:532d6421364e5869ea57a9523bf385f02586d4662acbcc0342afd69511b4dd43"}, ] [package.extras] @@ -1291,45 +1302,55 @@ files = [ [[package]] name = "tomli" -version = "2.2.1" +version = "2.3.0" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" groups = ["lint"] markers = "python_version == \"3.10\"" files = [ - {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, - {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, - {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, - {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, - {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, - {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, - {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, - {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, - {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, - {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, + {file = "tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45"}, + {file = "tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba"}, + {file = "tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf"}, + {file = "tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441"}, + {file = "tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845"}, + {file = "tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c"}, + {file = "tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456"}, + {file = "tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be"}, + {file = "tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac"}, + {file = "tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22"}, + {file = "tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f"}, + {file = "tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52"}, + {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8"}, + {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6"}, + {file = "tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876"}, + {file = "tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878"}, + {file = "tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b"}, + {file = "tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae"}, + {file = "tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b"}, + {file = "tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf"}, + {file = "tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f"}, + {file = "tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05"}, + {file = "tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606"}, + {file = "tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999"}, + {file = "tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e"}, + {file = "tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3"}, + {file = "tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc"}, + {file = "tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0"}, + {file = "tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879"}, + {file = "tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005"}, + {file = "tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463"}, + {file = "tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8"}, + {file = "tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77"}, + {file = "tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf"}, + {file = "tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530"}, + {file = "tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b"}, + {file = "tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67"}, + {file = "tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f"}, + {file = "tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0"}, + {file = "tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba"}, + {file = "tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b"}, + {file = "tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549"}, ] [[package]] @@ -1347,14 +1368,14 @@ files = [ [[package]] name = "types-grpcio" -version = "1.0.0.20250914" +version = "1.0.0.20251009" description = "Typing stubs for grpcio" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "types_grpcio-1.0.0.20250914-py3-none-any.whl", hash = "sha256:47253be85c5ef5ff5397c23a596cb6b657580cdd0814a7e3fc75d2aacb08aa60"}, - {file = "types_grpcio-1.0.0.20250914.tar.gz", hash = "sha256:6b6f42bfd90e8c73d3969e04978e8cb07651cf877f447779d4003a307d213016"}, + {file = "types_grpcio-1.0.0.20251009-py3-none-any.whl", hash = "sha256:112ac4312a5b0a273a4c414f7f2c7668f342990d9c6ab0f647391c36331f95ed"}, + {file = "types_grpcio-1.0.0.20251009.tar.gz", hash = "sha256:a8f615ea7a47b31f10da028ab5258d4f1611fbd70719ca450fc0ab3fb9c62b63"}, ] [[package]] diff --git a/examples/overview/src/overview.py b/examples/overview/src/overview.py index e1aa66a..5afe79e 100644 --- a/examples/overview/src/overview.py +++ b/examples/overview/src/overview.py @@ -55,7 +55,7 @@ def publish_data() -> str: # Create TestResult metadata test_result = TestResult( - test_result_name="sample test result", + name="sample test result", operator_id=operator_id, test_station_id=test_station_id, software_item_ids=[software_item_id, software_item_2_id], @@ -75,7 +75,7 @@ def publish_data() -> str: ) # Publish the test step with the waveform data - step = Step(step_name="Initial step", test_result_id=test_result_id) + step = Step(name="Initial step", test_result_id=test_result_id) step_id = data_store_client.create_step(step) published_measurement = data_store_client.publish_measurement( measurement_name=name, @@ -83,7 +83,7 @@ def publish_data() -> str: step_id=step_id, ) print( - f"Published measurement: '{published_measurement.measurement_name}' with id {published_measurement.id}" + f"Published measurement: '{published_measurement.name}' with id {published_measurement.id}" ) return published_measurement.id @@ -99,10 +99,10 @@ def query_data(published_measurement_id: str) -> None: if found_measurement is not None: print( - f"Found published measurement: '{found_measurement.measurement_name}' with id {found_measurement.id}" + f"Found published measurement: '{found_measurement.name}' with id {found_measurement.id}" ) test_result = data_store_client.get_test_result(found_measurement.test_result_id) - print(f"test_result: {test_result.test_result_name}") + print(f"test_result: {test_result.name}") operator = metadata_store_client.get_operator(test_result.operator_id) print(f"operator: {operator}") From 6a76243c08510253a5fd5e5be2ff93f572fc5139 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 13:31:19 -0600 Subject: [PATCH 17/26] Fix some notebooks --- examples/notebooks/alias/alias.ipynb | 2 +- .../custom-metadata/custom_metadata.ipynb | 2 +- .../notebooks/overview/publish_measurement.ipynb | 2 +- poetry.lock | 14 +++++++------- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/notebooks/alias/alias.ipynb b/examples/notebooks/alias/alias.ipynb index 302f8d2..6d18e2a 100644 --- a/examples/notebooks/alias/alias.ipynb +++ b/examples/notebooks/alias/alias.ipynb @@ -70,7 +70,7 @@ "from ni.datastore.data import DataStoreClient, TestResult\n", "\n", "test_result = TestResult(\n", - " test_result_name=\"Test Result with Operator Alias\",\n", + " name=\"Test Result with Operator Alias\",\n", " operator_id=\"secondary_operator\"\n", ")\n", "\n", diff --git a/examples/notebooks/custom-metadata/custom_metadata.ipynb b/examples/notebooks/custom-metadata/custom_metadata.ipynb index 108787c..b174c89 100644 --- a/examples/notebooks/custom-metadata/custom_metadata.ipynb +++ b/examples/notebooks/custom-metadata/custom_metadata.ipynb @@ -124,7 +124,7 @@ "data_store_client = DataStoreClient()\n", "test_result_id = data_store_client.create_test_result(\n", " test_result=TestResult(\n", - " test_result_name=\"scope measurements\",\n", + " name=\"scope measurements\",\n", " hardware_item_ids=[cable_id, socket_id, scope_id],\n", " schema_id=test_result_schema_id\n", " )\n", diff --git a/examples/notebooks/overview/publish_measurement.ipynb b/examples/notebooks/overview/publish_measurement.ipynb index ff7e6af..04853de 100644 --- a/examples/notebooks/overview/publish_measurement.ipynb +++ b/examples/notebooks/overview/publish_measurement.ipynb @@ -159,7 +159,7 @@ "software_item_id = metadata_store_client.create_software_item(software_item)\n", " \n", "test_result = TestResult(\n", - " test_result_name=\"sample publish test result\",\n", + " name=\"sample publish test result\",\n", " operator_id=operator_id,\n", " test_station_id=test_station_id,\n", " schema_id=schema_id,\n", diff --git a/poetry.lock b/poetry.lock index 8a34565..6b981a6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2134,14 +2134,14 @@ files = [ [[package]] name = "narwhals" -version = "2.10.1" +version = "2.10.2" description = "Extremely lightweight compatibility layer between dataframe libraries" optional = false python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "narwhals-2.10.1-py3-none-any.whl", hash = "sha256:eed3d9ec8f821963456fef306c1ad11017995982169fca1f38f71c97d6a97b9b"}, - {file = "narwhals-2.10.1.tar.gz", hash = "sha256:d6e3a9b1c0904a82984dec58a3d12b3bc08e9d61bbee639e7bb05349e663d036"}, + {file = "narwhals-2.10.2-py3-none-any.whl", hash = "sha256:059cd5c6751161b97baedcaf17a514c972af6a70f36a89af17de1a0caf519c43"}, + {file = "narwhals-2.10.2.tar.gz", hash = "sha256:ff738a08bc993cbb792266bec15346c1d85cc68fdfe82a23283c3713f78bd354"}, ] [package.extras] @@ -2803,14 +2803,14 @@ type = ["mypy (>=1.18.2)"] [[package]] name = "plotly" -version = "6.3.1" +version = "6.4.0" description = "An open-source interactive data visualization library for Python" optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "plotly-6.3.1-py3-none-any.whl", hash = "sha256:8b4420d1dcf2b040f5983eed433f95732ed24930e496d36eb70d211923532e64"}, - {file = "plotly-6.3.1.tar.gz", hash = "sha256:dd896e3d940e653a7ce0470087e82c2bd903969a55e30d1b01bb389319461bb0"}, + {file = "plotly-6.4.0-py3-none-any.whl", hash = "sha256:a1062eafbdc657976c2eedd276c90e184ccd6c21282a5e9ee8f20efca9c9a4c5"}, + {file = "plotly-6.4.0.tar.gz", hash = "sha256:68c6db2ed2180289ef978f087841148b7efda687552276da15a6e9b92107052a"}, ] [package.dependencies] @@ -2823,7 +2823,7 @@ dev-build = ["build", "jupyter", "plotly[dev-core]"] dev-core = ["pytest", "requests", "ruff (==0.11.12)"] dev-optional = ["anywidget", "colorcet", "fiona (<=1.9.6) ; python_version <= \"3.8\"", "geopandas", "inflect", "numpy", "orjson", "pandas", "pdfrw", "pillow", "plotly-geo", "plotly[dev-build]", "plotly[kaleido]", "polars[timezone]", "pyarrow", "pyshp", "pytz", "scikit-image", "scipy", "shapely", "statsmodels", "vaex ; python_version <= \"3.9\"", "xarray"] express = ["numpy"] -kaleido = ["kaleido (>=1.0.0)"] +kaleido = ["kaleido (>=1.1.0)"] [[package]] name = "pluggy" From eb94808ae99871256a6834c2aa9f371129c8590f Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 13:40:39 -0600 Subject: [PATCH 18/26] Fix query notebooks --- .../notebooks/query/query_measurements.ipynb | 101 ++--------- examples/notebooks/query/query_metadata.ipynb | 167 +++++++++++++++--- 2 files changed, 152 insertions(+), 116 deletions(-) diff --git a/examples/notebooks/query/query_measurements.ipynb b/examples/notebooks/query/query_measurements.ipynb index 011d253..83b0cfe 100644 --- a/examples/notebooks/query/query_measurements.ipynb +++ b/examples/notebooks/query/query_measurements.ipynb @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "8c34ac09", "metadata": {}, "outputs": [], @@ -62,88 +62,7 @@ "execution_count": null, "id": "e981dfd0", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "1. Failed Measurements:\n", - " ❌ 1kHz Response - Failed at 2025-10-23 19:46:03\n", - " ❌ 20kHz Response - Failed at 2025-10-23 19:46:03\n", - " ❌ Supply Voltage - Failed at 2025-10-23 19:46:02\n", - " ❌ Measure Input Voltage - Failed at 2025-10-23 19:45:56\n", - " ❌ Left Channel DC Offset - Failed at 2025-10-23 19:46:02\n", - " ❌ Right Channel DC Offset - Failed at 2025-10-23 19:46:02\n", - " ❌ 75% Load Test - Failed at 2025-10-23 19:45:56\n", - " ❌ Measure -12V Rail - Failed at 2025-10-23 19:45:56\n", - " ❌ Calculate Input Power - Failed at 2025-10-23 19:45:56\n", - " ❌ 1kHz THD+N Left - Failed at 2025-10-23 19:46:03\n", - " ❌ Max Power Left - Failed at 2025-10-23 19:46:03\n", - " ❌ SNR Right Channel - Failed at 2025-10-23 19:46:03\n", - " ❌ No Load Test - Failed at 2025-10-23 19:45:56\n", - " ❌ voltage_response - Failed at 2025-10-23 19:43:25\n", - " ❌ voltage_response - Failed at 2025-10-23 19:43:25\n", - " ❌ 50% Load Test - Failed at 2025-10-23 19:45:56\n", - " ❌ Standby Current - Failed at 2025-10-23 19:46:02\n", - " ❌ Full Load Test - Failed at 2025-10-23 19:45:56\n", - " ❌ Configure DMM - Failed at 2025-10-23 19:45:56\n", - " ❌ Load Current - Failed at 2025-10-23 19:46:03\n", - " ❌ Measure 12V Rail - Failed at 2025-10-23 19:45:56\n", - " ❌ 10kHz THD+N Left - Failed at 2025-10-23 19:46:03\n", - " ❌ Warm-up Period - Failed at 2025-10-23 19:45:56\n", - " ❌ data publish sample - Failed at 2025-10-23 19:33:17\n", - " ❌ Enable Signal - Failed at 2025-10-23 19:46:02\n", - " ❌ 1kHz THD+N Right - Failed at 2025-10-23 19:46:03\n", - " ❌ voltage_response - Failed at 2025-10-23 19:43:25\n", - " ❌ voltage_response - Failed at 2025-10-23 19:43:25\n", - " ❌ 12V Ripple - Failed at 2025-10-23 19:45:56\n", - " ❌ 5V Ripple - Failed at 2025-10-23 19:45:56\n", - " ❌ Output 12V - Failed at 2025-10-23 19:46:03\n", - " ❌ Set Load Conditions - Failed at 2025-10-23 19:45:56\n", - " ❌ 10kHz Response - Failed at 2025-10-23 19:46:03\n", - " ❌ Measure 5V Rail - Failed at 2025-10-23 19:45:56\n", - " ❌ 20Hz Response - Failed at 2025-10-23 19:46:02\n", - " ❌ SNR Left Channel - Failed at 2025-10-23 19:46:03\n", - " ❌ Output 5V - Failed at 2025-10-23 19:46:03\n", - " ❌ -12V Ripple - Failed at 2025-10-23 19:45:56\n", - " ❌ 10kHz THD+N Right - Failed at 2025-10-23 19:46:03\n", - " ❌ 25% Load Test - Failed at 2025-10-23 19:45:56\n", - " ❌ Power at 1% THD - Failed at 2025-10-23 19:46:03\n", - " ❌ Max Power Right - Failed at 2025-10-23 19:46:03\n", - " ❌ Measure Input Current - Failed at 2025-10-23 19:45:56\n", - " ... and 28 more measurements\n", - "\n", - "=== Voltage Measurements ===\n", - " ⚡ Supply Voltage - ❌ (Failed)\n", - " ⚡ Measure Input Voltage - ❌ (Failed)\n", - "\n", - "=== Current Measurements ===\n", - " 🔌 Standby Current - ❌ (Failed)\n", - " 🔌 Load Current - ✅ (Passed)\n", - " 🔌 Measure Input Current - ❌ (Failed)\n", - "\n", - "=== Failed Measurements by Operator Alex Smith ===\n", - " 📋 Measure Input Voltage - ❌ (Failed) - Operator: Alex Smith\n", - " 📋 75% Load Test - ✅ (Passed) - Operator: Alex Smith\n", - " 📋 Measure -12V Rail - ✅ (Passed) - Operator: Alex Smith\n", - " 📋 Calculate Input Power - ❌ (Failed) - Operator: Alex Smith\n", - " 📋 No Load Test - ✅ (Passed) - Operator: Alex Smith\n", - " 📋 50% Load Test - ✅ (Passed) - Operator: Alex Smith\n", - " 📋 Full Load Test - ✅ (Passed) - Operator: Alex Smith\n", - " 📋 Configure DMM - ✅ (Passed) - Operator: Alex Smith\n", - " 📋 Measure 12V Rail - ❌ (Failed) - Operator: Alex Smith\n", - " 📋 Warm-up Period - ✅ (Passed) - Operator: Alex Smith\n", - " 📋 12V Ripple - ❌ (Failed) - Operator: Alex Smith\n", - " 📋 5V Ripple - ✅ (Passed) - Operator: Alex Smith\n", - " 📋 Set Load Conditions - ✅ (Passed) - Operator: Alex Smith\n", - " 📋 Measure 5V Rail - ✅ (Passed) - Operator: Alex Smith\n", - " 📋 -12V Ripple - ❌ (Failed) - Operator: Alex Smith\n", - " 📋 25% Load Test - ✅ (Passed) - Operator: Alex Smith\n", - " 📋 Measure Input Current - ❌ (Failed) - Operator: Alex Smith\n" - ] - } - ], + "outputs": [], "source": [ "from ni.datastore.data import Outcome\n", "from ni.datastore.metadata import MetadataStoreClient\n", @@ -153,7 +72,7 @@ "failed_measurements = data_store_client.query_measurements(\"\")\n", "for measurement in failed_measurements:\n", " print(f\"*** data type: {measurement.data_type}\")\n", - " measurement_name = measurement.measurement_name or \"Unnamed Measurement\"\n", + " measurement_name = measurement.name or \"Unnamed Measurement\"\n", " if measurement.start_date_time:\n", " print(f\" ❌ {measurement_name} - Failed at {measurement.start_date_time.strftime('%Y-%m-%d %H:%M:%S')}\")\n", " else:\n", @@ -166,7 +85,7 @@ " print(f\" ... and {len(failed_measurements) - 15} more measurements\")\n", "\n", "def print_measurement_with_outcome(measurement) -> str:\n", - " name = measurement.measurement_name or \"Unnamed Measurement\"\n", + " name = measurement.name or \"Unnamed Measurement\"\n", " passed = measurement.outcome == Outcome.OUTCOME_PASSED\n", " failed = measurement.outcome == Outcome.OUTCOME_FAILED\n", " return f\"{name} - {'✅ (Passed)' if passed else '❌ (Failed)' if failed else '❓ (Unknown)'}\"\n", @@ -188,7 +107,7 @@ " test_result = data_store_client.get_test_result(measurement.test_result_id)\n", " if test_result.operator_id:\n", " operator = metadata_store_client.get_operator(test_result.operator_id)\n", - " operator_name = operator.operator_name\n", + " operator_name = operator.name\n", " if operator_name == \"Alex Smith\":\n", " print(f\" 📋 {print_measurement_with_outcome(measurement)} - Operator: {operator_name}\")" ] @@ -224,7 +143,7 @@ "print(f\"Found {len(all_steps)} steps total\")\n", "print(\"\\nStep summary:\")\n", "for step in all_steps[:10]: # Show first 10 steps\n", - " step_name = step.step_name or \"Unnamed Step\"\n", + " step_name = step.name or \"Unnamed Step\"\n", " # Steps don't have a status field, so we'll skip showing status\n", " print(f\" 🔧 {step_name}\")\n", "\n", @@ -234,7 +153,7 @@ "print(\"\\n=== Steps containing 'Voltage' ===\")\n", "voltage_steps = list(data_store_client.query_steps(\"$filter=contains(Name,'Voltage')\"))\n", "for step in voltage_steps:\n", - " step_name = step.step_name or \"Unnamed Step\"\n", + " step_name = step.name or \"Unnamed Step\"\n", " # Steps don't have a status field, so we'll skip showing status\n", " print(f\" 🔧 {step_name}\")" ] @@ -270,7 +189,7 @@ "\n", "# Get unique condition names and sort them\n", "unique_condition_names = sorted(set(\n", - " condition.condition_name if hasattr(condition, 'condition_name') else \"Unnamed Condition\"\n", + " condition.name if hasattr(condition, 'name') else \"Unnamed Condition\"\n", " for condition in temp_and_pressure_conditions\n", "))\n", "\n", @@ -307,7 +226,7 @@ ], "metadata": { "kernelspec": { - "display_name": "ni-datastore-py3.11", + "display_name": "ni-datastore-py3.14", "language": "python", "name": "python3" }, @@ -321,7 +240,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.14.0" } }, "nbformat": 4, diff --git a/examples/notebooks/query/query_metadata.ipynb b/examples/notebooks/query/query_metadata.ipynb index 4f50407..8fab342 100644 --- a/examples/notebooks/query/query_metadata.ipynb +++ b/examples/notebooks/query/query_metadata.ipynb @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "34089e87", "metadata": {}, "outputs": [], @@ -71,20 +71,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "1a56f513", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Filtered operators (by name containing 'Smith'):\n", + " Alex Smith (Test Engineer)\n", + "\n", + "Filtered operators (by role containing 'Test Engineer'):\n", + " Alex Smith (Test Engineer)\n", + " Jordan Chen (Senior Test Engineer)\n" + ] + } + ], "source": [ "print(\"\\nFiltered operators (by name containing 'Smith'):\")\n", "operators_named_smith = metadata_store_client.query_operators(\"$filter=contains(Name,'Smith')\")\n", "for operator in operators_named_smith:\n", - " print(f\" {operator.operator_name} ({operator.role})\")\n", + " print(f\" {operator.name} ({operator.role})\")\n", "\n", "print(\"\\nFiltered operators (by role containing 'Test Engineer'):\")\n", "test_engineer_operators = metadata_store_client.query_operators(\"$filter=contains(Role,'Test Engineer')\")\n", "for operator in test_engineer_operators:\n", - " print(f\" {operator.operator_name} ({operator.role})\")" + " print(f\" {operator.name} ({operator.role})\")" ] }, { @@ -109,28 +123,46 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "64eea755", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Filtered test stations (by name containing 'A1'):\n", + " TestStation_A1\n", + "\n", + "Filtered test stations (by name exactly 'TestStation_B2'):\n", + " TestStation_B2\n", + "\n", + "Filtered test stations (by name starting with 'Test'):\n", + " TestStation_A1\n", + " TestStation_B2\n", + " TestStation_C3\n" + ] + } + ], "source": [ "# Test stations whose name includes 'A1'\n", "print(\"\\nFiltered test stations (by name containing 'A1'):\")\n", "a1_test_stations = metadata_store_client.query_test_stations(\"$filter=contains(Name,'A1')\")\n", "for station in a1_test_stations:\n", - " print(f\" {station.test_station_name}\")\n", + " print(f\" {station.name}\")\n", "\n", "# Test stations named exactly 'TestStation_B2'\n", "print(\"\\nFiltered test stations (by name exactly 'TestStation_B2'):\")\n", "exact_b2_test_stations = metadata_store_client.query_test_stations(\"$filter=Name eq 'TestStation_B2'\")\n", "for station in exact_b2_test_stations:\n", - " print(f\" {station.test_station_name}\")\n", + " print(f\" {station.name}\")\n", "\n", "# Test stations whose name starts with 'Test'\n", "print(\"\\nFiltered test stations (by name starting with 'Test'):\")\n", "starts_test_stations = metadata_store_client.query_test_stations(\"$filter=startswith(Name,'Test')\")\n", "for station in starts_test_stations:\n", - " print(f\" {station.test_station_name}\")" + " print(f\" {station.name}\")" ] }, { @@ -161,10 +193,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "114fe8ac", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Filtered hardware items (by manufacturer 'NI'):\n", + " NI PXIe-4081 (S/N: DMM001)\n", + " NI PXIe-5171 (S/N: SCOPE001)\n", + "\n", + "Filtered hardware items (by model containing '4081'):\n", + " NI PXIe-4081 (S/N: DMM001)\n", + "\n", + "Filtered hardware items (by serial number containing 'SCOPE'):\n", + " NI PXIe-5171 (S/N: SCOPE001)\n" + ] + } + ], "source": [ "print(\"Filtered hardware items (by manufacturer 'NI'):\")\n", "filtered_hardware = metadata_store_client.query_hardware_items(\"$filter=Manufacturer eq 'NI'\")\n", @@ -204,10 +252,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "9e90d54d", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Filtered UUTs (by name containing 'Power'):\n", + " PowerSupply v2.1\n", + "\n", + "Filtered UUTs (by name ending with 'v1.3'):\n", + " Audio Amplifier v1.3\n" + ] + } + ], "source": [ "print(\"\\nFiltered UUTs (by name containing 'Power'):\")\n", "filtered_uuts = metadata_store_client.query_uuts(\"$filter=contains(Name,'Power')\")\n", @@ -242,10 +303,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "26e75660", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Filtered UUT instances (by serial containing '2024'):\n", + " Serial: PS-2024-001\n", + " Serial: PS-2024-002\n", + " Serial: AMP-2024-001\n", + "\n", + "Filtered UUT instances (by serial starting with 'PS'):\n", + " Serial: PS-2024-001\n", + " Serial: PS-2024-002\n", + "\n", + "Combined filter - UUT instances (serial contains 'AMP' and '2024'):\n", + " Serial: AMP-2024-001\n" + ] + } + ], "source": [ "print(\"\\nFiltered UUT instances (by serial containing '2024'):\")\n", "filtered_instances = metadata_store_client.query_uut_instances(\"$filter=contains(SerialNumber,'2024')\")\n", @@ -291,10 +371,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "de089e05", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Filtered software items (by product 'Python'):\n", + " Python 3.11.5\n", + "\n", + "Filtered software items (by version starting with '3.'):\n", + " Python 3.11.5\n" + ] + } + ], "source": [ "print(\"\\nFiltered software items (by product 'Python'):\")\n", "filtered_software = metadata_store_client.query_software_items(\"$filter=Product eq 'Python'\")\n", @@ -332,10 +425,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "cd194f24", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Filtered aliases (by name containing 'Operator'):\n", + " Operator_Alex_Smith -> Operator\n", + " Operator_Jordan_Chen -> Operator\n", + " Operator_Taylor_Johnson -> Operator\n", + "\n", + "Filtered aliases (by name starting with 'UUT'):\n", + " UUT_PowerSupply_v2_1 -> UUT\n", + " UUT_AudioAmplifier_v1_3 -> UUT\n", + " UUT_Instance_PS_001 -> UUT Instance\n", + " UUT_Instance_PS_002 -> UUT Instance\n", + " UUT_Instance_AMP_001 -> UUT Instance\n", + "\n", + "Filtered aliases (by target type containing 'Test'):\n", + " Station_A1 -> Test Station\n", + " Station_B2 -> Test Station\n", + " Station_C3 -> Test Station\n" + ] + } + ], "source": [ "# Helper function to translate numeric target_type to human-readable enum values\n", "def get_target_type_name(target_type):\n", @@ -358,25 +475,25 @@ "filtered_aliases = metadata_store_client.query_aliases(\"$filter=contains(Name,'Operator')\")\n", "for alias in filtered_aliases:\n", " target_type_name = get_target_type_name(alias.target_type)\n", - " print(f\" {alias.alias_name} -> {target_type_name}\")\n", + " print(f\" {alias.name} -> {target_type_name}\")\n", "\n", "print(\"\\nFiltered aliases (by name starting with 'UUT'):\")\n", "uut_aliases = metadata_store_client.query_aliases(\"$filter=startswith(Name,'UUT')\")\n", "for alias in uut_aliases:\n", " target_type_name = get_target_type_name(alias.target_type)\n", - " print(f\" {alias.alias_name} -> {target_type_name}\")\n", + " print(f\" {alias.name} -> {target_type_name}\")\n", "\n", "print(\"\\nFiltered aliases (by target type containing 'Test'):\")\n", "test_station_aliases = metadata_store_client.query_aliases(\"$filter=TargetType eq DataStore.AliasTargetType'TestStation'\")\n", "for alias in test_station_aliases:\n", " target_type_name = get_target_type_name(alias.target_type)\n", - " print(f\" {alias.alias_name} -> {target_type_name}\")\n" + " print(f\" {alias.name} -> {target_type_name}\")\n" ] } ], "metadata": { "kernelspec": { - "display_name": "ni-datastore-py3.11", + "display_name": "ni-datastore-py3.14", "language": "python", "name": "python3" }, @@ -390,7 +507,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.14.0" } }, "nbformat": 4, From 67f25e29201a1269ddfc84bd75baafc1e86d96a5 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 13:42:36 -0600 Subject: [PATCH 19/26] Fix voltage-regulator notebook --- .../voltage-regulator/publish_waveforms.ipynb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/notebooks/voltage-regulator/publish_waveforms.ipynb b/examples/notebooks/voltage-regulator/publish_waveforms.ipynb index 69b30e1..32d11b0 100644 --- a/examples/notebooks/voltage-regulator/publish_waveforms.ipynb +++ b/examples/notebooks/voltage-regulator/publish_waveforms.ipynb @@ -48,12 +48,12 @@ "metadata_store_client = MetadataStoreClient()\n", "\n", "# Create alias for Operator \"James Bowery\"\n", - "operator = Operator(operator_name=\"James Bowery\", role=\"Test Architect\")\n", + "operator = Operator(name=\"James Bowery\", role=\"Test Architect\")\n", "metadata_store_client.create_operator(operator)\n", "metadata_store_client.create_alias(ALIAS_JAMES_BOWERY, operator)\n", "\n", "# Create alias for Test Station \"TestStation_12\"\n", - "test_station = TestStation(test_station_name=\"TestStation_12\")\n", + "test_station = TestStation(name=\"TestStation_12\")\n", "metadata_store_client.create_test_station(test_station)\n", "metadata_store_client.create_alias(ALIAS_TEST_STATION_12, test_station)\n", "\n", @@ -114,7 +114,7 @@ " ALIAS_SOFTWARE_ITEM_PYTHON_3_12,\n", " ],\n", " hardware_item_ids=[ALIAS_HARDWARE_ITEM_PXIe_5171],\n", - " test_result_name=\"voltage regulator waveforms\",\n", + " name=\"voltage regulator waveforms\",\n", ")\n", "test_result_id = data_store_client.create_test_result(test_result)\n" ] @@ -185,7 +185,7 @@ "\n", "# Time in milliseconds\n", "time_ms = np.linspace(0, 1000, 500)\n", - "step = Step(step_name=\"Initial step\", test_result_id=test_result_id)\n", + "step = Step(name=\"Initial step\", test_result_id=test_result_id)\n", "step_id = data_store_client.create_step(step)\n", "\n", "# Input voltages to simulate\n", @@ -288,7 +288,7 @@ ], "metadata": { "kernelspec": { - "display_name": "ni-datastore-py3.11", + "display_name": "ni-datastore-py3.14", "language": "python", "name": "python3" }, @@ -302,7 +302,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.14.0" } }, "nbformat": 4, From 852c517adeb3676a9a99ceb81e47a6852ba811d8 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 13:48:19 -0600 Subject: [PATCH 20/26] Fix mypy errors --- tests/acceptance/_utils.py | 2 +- tests/acceptance/test_publish_condition_and_read_data.py | 2 +- .../test_publish_condition_batch_and_read_data.py | 2 +- .../acceptance/test_publish_measurement_and_read_data.py | 2 +- .../test_publish_measurement_batch_and_read_data.py | 4 ++-- tests/acceptance/test_publish_with_metadata.py | 8 ++++---- tests/acceptance/test_query_conditions.py | 4 ++-- tests/acceptance/test_query_measurements.py | 4 ++-- tests/acceptance/test_query_steps.py | 2 +- tests/acceptance/test_query_test_results.py | 2 +- tests/unit/data/test_create_metadata.py | 2 +- 11 files changed, 17 insertions(+), 17 deletions(-) diff --git a/tests/acceptance/_utils.py b/tests/acceptance/_utils.py index dcec13f..271a659 100644 --- a/tests/acceptance/_utils.py +++ b/tests/acceptance/_utils.py @@ -21,7 +21,7 @@ def create_test_result_and_step(data_store_client: DataStoreClient, description: def create_test_result(data_store_client: DataStoreClient, description: str) -> str: """Create a single TestResult and return that test result's id.""" test_result_name = f"{description} test result" - test_result = TestResult(test_result_name=test_result_name) + test_result = TestResult(name=test_result_name) test_result_id = data_store_client.create_test_result(test_result) return test_result_id diff --git a/tests/acceptance/test_publish_condition_and_read_data.py b/tests/acceptance/test_publish_condition_and_read_data.py index 6caa8f8..f8f4c4d 100644 --- a/tests/acceptance/test_publish_condition_and_read_data.py +++ b/tests/acceptance/test_publish_condition_and_read_data.py @@ -96,7 +96,7 @@ def test___publish_scalar_condition___read_data_returns_vector() -> None: def _create_step(data_store_client: DataStoreClient, datatype_string: str) -> str: test_result_name = f"python publish {datatype_string} acceptance test" - test_result = TestResult(test_result_name=test_result_name) + test_result = TestResult(name=test_result_name) test_result_id = data_store_client.create_test_result(test_result) # Publish the waveform data diff --git a/tests/acceptance/test_publish_condition_batch_and_read_data.py b/tests/acceptance/test_publish_condition_batch_and_read_data.py index 98a1599..aa87512 100644 --- a/tests/acceptance/test_publish_condition_batch_and_read_data.py +++ b/tests/acceptance/test_publish_condition_batch_and_read_data.py @@ -94,7 +94,7 @@ def test___publish_batch_vector_condition___read_data_returns_vector() -> None: def _create_step(data_store_client: DataStoreClient, datatype_string: str) -> str: test_result_name = f"python publish {datatype_string} acceptance test" - test_result = TestResult(test_result_name=test_result_name) + test_result = TestResult(name=test_result_name) test_result_id = data_store_client.create_test_result(test_result) # Publish the waveform data diff --git a/tests/acceptance/test_publish_measurement_and_read_data.py b/tests/acceptance/test_publish_measurement_and_read_data.py index bf5ffa8..262fd52 100644 --- a/tests/acceptance/test_publish_measurement_and_read_data.py +++ b/tests/acceptance/test_publish_measurement_and_read_data.py @@ -131,7 +131,7 @@ def test___publish_complex_waveform___read_data_returns_complex_waveform() -> No def _create_step(data_store_client: DataStoreClient, datatype_string: str) -> str: test_result_name = f"python publish {datatype_string} acceptance test" - test_result = TestResult(test_result_name=test_result_name) + test_result = TestResult(name=test_result_name) test_result_id = data_store_client.create_test_result(test_result) # Publish the waveform data diff --git a/tests/acceptance/test_publish_measurement_batch_and_read_data.py b/tests/acceptance/test_publish_measurement_batch_and_read_data.py index d1c849c..f73aee3 100644 --- a/tests/acceptance/test_publish_measurement_batch_and_read_data.py +++ b/tests/acceptance/test_publish_measurement_batch_and_read_data.py @@ -12,7 +12,7 @@ def test___publish_float___read_data_returns_vector() -> None: with DataStoreClient() as data_store_client: # Create TestResult metadata test_result_name = "python batch publish float acceptance test" - test_result = TestResult(test_result_name=test_result_name) + test_result = TestResult(name=test_result_name) test_result_id = data_store_client.create_test_result(test_result) # Publish the waveform data @@ -36,7 +36,7 @@ def test___publish_batch_vector___read_data_returns_vector() -> None: with DataStoreClient() as data_store_client: # Create TestResult metadata test_result_name = "python publish scalar acceptance test" - test_result = TestResult(test_result_name=test_result_name) + test_result = TestResult(name=test_result_name) test_result_id = data_store_client.create_test_result(test_result) # Create a Vector data to publish diff --git a/tests/acceptance/test_publish_with_metadata.py b/tests/acceptance/test_publish_with_metadata.py index e0d76e4..039cdb3 100644 --- a/tests/acceptance/test_publish_with_metadata.py +++ b/tests/acceptance/test_publish_with_metadata.py @@ -140,7 +140,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat software_item_ids=software_item_ids, hardware_item_ids=hardware_item_ids, # test_adapter_ids=test_adapter_ids, - test_result_name=test_result_name, + name=test_result_name, link="Test Result Link", extensions={"tr1": "one", "tr2": "two"}, schema_id=schema_id, @@ -204,8 +204,8 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat assert found_measurement is not None # Check PublishedMeasurement - assert found_measurement.measurement_notes == "Measurement Notes" - assert found_measurement.measurement_name == "Measurement Name" + assert found_measurement.notes == "Measurement Notes" + assert found_measurement.name == "Measurement Name" assert sorted(found_measurement.software_item_ids) == sorted(software_item_ids) assert sorted(found_measurement.hardware_item_ids) == sorted(hardware_item_ids) # assert found_measurement.test_adapter_ids == test_adapter_ids @@ -218,7 +218,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat # Check TestResult found_test_result = data_store_client.get_test_result(found_measurement.test_result_id) - assert found_test_result.test_result_name == test_result_name + assert found_test_result.name == test_result_name assert found_test_result.operator_id == operator_id assert sorted(found_test_result.software_item_ids) == sorted(software_item_ids) assert sorted(found_test_result.hardware_item_ids) == sorted(hardware_item_ids) diff --git a/tests/acceptance/test_query_conditions.py b/tests/acceptance/test_query_conditions.py index eb55e31..7bf6bb9 100644 --- a/tests/acceptance/test_query_conditions.py +++ b/tests/acceptance/test_query_conditions.py @@ -28,7 +28,7 @@ def test___query_conditions___filter_by_id___single_condition_returned() -> None assert len(queried_conditions) == 1 first_condition = queried_conditions[0] assert first_condition is not None - assert first_condition.condition_name == condition_name + assert first_condition.name == condition_name # Check the value of the queried condition. vector = data_store_client.read_data(first_condition, expected_type=Vector) @@ -73,5 +73,5 @@ def test___query_conditions___filter_by_name___correct_conditions_returned() -> for condition in queried_conditions: assert condition is not None vector = data_store_client.read_data(condition, expected_type=Vector) - assert condition.condition_name == f"{condition_name_base} {vector[0]}" + assert condition.name == f"{condition_name_base} {vector[0]}" assert vector.units == "" diff --git a/tests/acceptance/test_query_measurements.py b/tests/acceptance/test_query_measurements.py index 45b9fd7..9182ad3 100644 --- a/tests/acceptance/test_query_measurements.py +++ b/tests/acceptance/test_query_measurements.py @@ -27,7 +27,7 @@ def test___query_measurements___filter_by_id___single_measurement_returned() -> assert len(queried_measurements) == 1 first_measurement = queried_measurements[0] assert first_measurement is not None - assert first_measurement.measurement_name == measurement_name + assert first_measurement.name == measurement_name # Check the value of the queried measurement. vector = data_store_client.read_data(first_measurement, expected_type=Vector) @@ -69,5 +69,5 @@ def test___query_measurements___filter_by_name___correct_measurements_returned() for measurement in queried_measurements: assert measurement is not None vector = data_store_client.read_data(measurement, expected_type=Vector) - assert measurement.measurement_name == f"{measurement_name_base} {vector[0]}" + assert measurement.name == f"{measurement_name_base} {vector[0]}" assert vector.units == "" diff --git a/tests/acceptance/test_query_steps.py b/tests/acceptance/test_query_steps.py index 0617bc2..76e2a9d 100644 --- a/tests/acceptance/test_query_steps.py +++ b/tests/acceptance/test_query_steps.py @@ -23,7 +23,7 @@ def test___query_steps___filter_by_name___correct_steps_returned() -> None: with DataStoreClient() as data_store_client: description = "query steps filter by name" test_result_name = f"{description} test result" - test_result = TestResult(test_result_name=test_result_name) + test_result = TestResult(name=test_result_name) test_result_id = data_store_client.create_test_result(test_result) # Create multiple similarly named steps and published a measurement for each. diff --git a/tests/acceptance/test_query_test_results.py b/tests/acceptance/test_query_test_results.py index 9370ff1..51bde9d 100644 --- a/tests/acceptance/test_query_test_results.py +++ b/tests/acceptance/test_query_test_results.py @@ -19,7 +19,7 @@ def test___query_test_results___filter_by_id___single_test_result_returned() -> assert len(queried_test_results) == 1 first_test_result = queried_test_results[0] assert first_test_result is not None - assert first_test_result.test_result_name == f"{description} test result" + assert first_test_result.name == f"{description} test result" def test___query_steps___filter_by_name___correct_steps_returned() -> None: diff --git a/tests/unit/data/test_create_metadata.py b/tests/unit/data/test_create_metadata.py index 6939b86..2f428d6 100644 --- a/tests/unit/data/test_create_metadata.py +++ b/tests/unit/data/test_create_metadata.py @@ -55,7 +55,7 @@ def test___create_test_result___calls_data_store_service_client( software_item_ids=[], hardware_item_ids=[], test_adapter_ids=[], - test_result_name="test_result_name", + name="test_result_name", ) expected_response = CreateTestResultResponse(test_result_id="response_id") mocked_data_store_service_client.create_test_result.return_value = expected_response From e15038efed81d53b69f348cf58a5f23cef38614f Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 13:57:02 -0600 Subject: [PATCH 21/26] Add notes to publish_measurement_batch --- src/ni/datastore/data/_data_store_client.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ni/datastore/data/_data_store_client.py b/src/ni/datastore/data/_data_store_client.py index 44adc1e..2928846 100644 --- a/src/ni/datastore/data/_data_store_client.py +++ b/src/ni/datastore/data/_data_store_client.py @@ -316,6 +316,7 @@ def publish_measurement_batch( hardware_item_ids: Iterable[str] = tuple(), test_adapter_ids: Iterable[str] = tuple(), software_item_ids: Iterable[str] = tuple(), + notes: str = "", ) -> Sequence[PublishedMeasurement]: """Publish multiple scalar measurements at once for parametric sweeps. @@ -358,6 +359,8 @@ def publish_measurement_batch( this measurement. These values are expected to be parsable GUIDs or aliases. + notes: Any notes to be associated with the published measurements. + Returns: Sequence[PublishedMeasurement]: The monikers of the published measurements and their corresponding metadata. NOTE: Using @@ -374,6 +377,7 @@ def publish_measurement_batch( hardware_item_ids=hardware_item_ids, test_adapter_ids=test_adapter_ids, software_item_ids=software_item_ids, + notes=notes, ) populate_publish_measurement_batch_request_values(publish_request, values) publish_response = self._get_data_store_client().publish_measurement_batch(publish_request) From 9f572e8ee3a9442e859d309fef6c1c99e775c9a9 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 14:13:50 -0600 Subject: [PATCH 22/26] Update documentation for field name changes --- docs/reference/ni-data-store.md | 17 +++-- docs/reference/ni-metadata-store.md | 15 ++-- .../using-measurement-data-services.md | 72 ++++++++++++------- 3 files changed, 66 insertions(+), 38 deletions(-) diff --git a/docs/reference/ni-data-store.md b/docs/reference/ni-data-store.md index db55c8f..e709468 100644 --- a/docs/reference/ni-data-store.md +++ b/docs/reference/ni-data-store.md @@ -16,13 +16,14 @@ A **TestResult** represents a complete test session or test execution run for a - `software_item_ids` (list of strings) - IDs of software used during testing - `hardware_item_ids` (list of strings) - IDs of hardware used during testing - `test_adapter_ids` (list of strings) - IDs of test adapters used -- `test_result_name` (string) - Human-readable name for the test run +- `name` (string) - Human-readable name for the test run - `start_date_time` (timestamp) - When the test execution started - `end_date_time` (timestamp) - When the test execution finished - `outcome` (enum) - Overall test result (PASSED, FAILED, INDETERMINATE, UNSPECIFIED) - `link` (string) - Optional link to additional resources - `extensions` (dict) - Custom key-value pairs for additional metadata - `schema_id` (string) - ID of the schema for extension validation +- `error_information` (ErrorInformation) - Error details if test result failed **Real-world example**: When you put a circuit board on a test station and run a complete validation sequence, that entire session becomes one TestResult. It includes metadata like who ran the test, when it was run, what test station was used, and links to all the measurements and steps that were performed. @@ -34,14 +35,16 @@ A **Step** represents an individual test procedure or operation within a larger - `parent_step_id` (string) - ID of parent step (for hierarchical steps) - `test_result_id` (string) - ID of the associated TestResult - `test_id` (string) - ID of the test definition/specification -- `step_name` (string) - Human-readable name for the step -- `step_type` (string) - Type/category of the step +- `name` (string) - Human-readable name for the step +- `type` (string) - Type/category of the step - `notes` (string) - Additional notes about the step - `start_date_time` (timestamp) - When the step started executing - `end_date_time` (timestamp) - When the step finished executing +- `outcome` (enum) - Result of this step (PASSED, FAILED, INDETERMINATE, UNSPECIFIED) - `link` (string) - Optional link to additional resources - `extensions` (dict) - Custom key-value pairs for additional metadata - `schema_id` (string) - ID of the schema for extension validation +- `error_information` (ErrorInformation) - Error details if step failed **Real-world examples**: - "Measure DC Voltage on Pin 5" @@ -64,9 +67,9 @@ A **PublishedMeasurement** represents actual measurement data captured during a - `software_item_ids` (list of strings) - Software used to capture this measurement - `hardware_item_ids` (list of strings) - Hardware used to capture this measurement - `test_adapter_ids` (list of strings) - Test adapters used to capture this measurement -- `measurement_name` (string) - Name used to group related measurements +- `name` (string) - Name used to group related measurements - `data_type` (string) - Type of data (e.g., "Scalar", "AnalogWaveform", "Spectrum") -- `measurement_notes` (string) - Additional notes about the measurement +- `notes` (string) - Additional notes about the measurement - `start_date_time` (timestamp) - When measurement capture started - `end_date_time` (timestamp) - When measurement capture finished - `outcome` (enum) - Result of this measurement (PASSED, FAILED, INDETERMINATE, UNSPECIFIED) @@ -95,8 +98,8 @@ A **PublishedCondition** represents environmental or contextual information that **Fields:** - `moniker` (Moniker) - Data location identifier for retrieving the condition value - `id` (string) - Unique identifier for this condition -- `condition_name` (string) - Name of the condition (e.g., "Temperature", "Supply Voltage") -- `condition_type` (string) - Type/category of the condition (e.g., "Environment", "Input Parameter") +- `name` (string) - Name of the condition (e.g., "Temperature", "Supply Voltage") +- `type` (string) - Type/category of the condition (e.g., "Environment", "Input Parameter") - `step_id` (string) - ID of the associated Step - `test_result_id` (string) - ID of the associated TestResult diff --git a/docs/reference/ni-metadata-store.md b/docs/reference/ni-metadata-store.md index 3ebd7d5..ba8e708 100644 --- a/docs/reference/ni-metadata-store.md +++ b/docs/reference/ni-metadata-store.md @@ -9,7 +9,7 @@ An **Operator** represents a person who performs tests or operates test equipmen **Fields:** - `id` (string) - The id of the operator -- `operator_name` (string) - The name of the operator +- `name` (string) - The name of the operator - `role` (string) - The role of the operator (e.g., "Test Engineer", "Lab Technician") - `link` (string) - URI to resource describing the operator - `extensions` (dict) - Custom key-value pairs for additional metadata @@ -69,16 +69,17 @@ A **UUT Instance** represents an individual physical device with a unique serial - `id` (string) - The id of the UUT instance - `uut_id` (string) - The ID of the UUT associated with this instance (GUID or alias) - `serial_number` (string) - The serial number of the UUT instance -- `asset_identifier` (string) - For tracking and inventory purposes - `manufacture_date` (string) - When the instance was manufactured +- `firmware_version` (string) - Version of the firmware on the UUT instance +- `hardware_version` (string) - Hardware version of the UUT instance - `link` (string) - URI to resource describing the UUT instance - `extensions` (dict) - Custom key-value pairs for additional metadata - `schema_id` (string) - ID of the schema for extension validation **Real-world examples**: -- UUT: "PowerSupply v2.1", Serial: "PS-2024-001" - First power supply unit built in 2024 -- UUT: "Audio Amplifier v1.3", Serial: "AMP-2024-456" - Specific amplifier with serial number -- UUT: "RF Transceiver Gen3", Serial: "RF-X7G9-2024-789" - Individual transceiver unit +- UUT: "PowerSupply v2.1", Serial: "PS-2024-001", FW: "1.2.3", HW: "Rev C" - First power supply unit built in 2024 +- UUT: "Audio Amplifier v1.3", Serial: "AMP-2024-456", FW: "2.0.1", HW: "Rev B" - Specific amplifier with serial number +- UUT: "RF Transceiver Gen3", Serial: "RF-X7G9-2024-789", FW: "3.1.0", HW: "Rev A" - Individual transceiver unit Each UUT instance tracks the test history for that specific physical device throughout its lifecycle. @@ -185,7 +186,7 @@ A **Test Adapter** represents a test fixture, mechanical setup, or interface use An **Extension Schema** defines the structure and validation rules for custom extension fields that can be added to any metadata entity. **Fields:** -- `schema_id` (string) - Unique identifier for the schema +- `id` (string) - Unique identifier for the schema - `schema` (string) - The schema definition itself (JSON Schema format) **Real-world examples**: @@ -198,7 +199,7 @@ An **Extension Schema** defines the structure and validation rules for custom ex An **Alias** provides a human-readable name that points to any metadata entity. This creates a layer of abstraction that makes test code more maintainable and readable. **Fields:** -- `alias_name` (string) - The registered alias name for the metadata instance +- `name` (string) - The registered alias name for the metadata instance - `target_type` (enum) - The type of the aliased metadata instance (see `AliasTargetType` enum) - `target_id` (string) - The unique identifier for the aliased metadata instance diff --git a/docs/reference/using-measurement-data-services.md b/docs/reference/using-measurement-data-services.md index 47256f3..70998f3 100644 --- a/docs/reference/using-measurement-data-services.md +++ b/docs/reference/using-measurement-data-services.md @@ -14,6 +14,25 @@ The typical measurement data workflow follows this sequence: 2. [**Test Execution Phase**](#test-execution-phase) - Create test sessions and publish data 3. [**Analysis Phase**](#analysis-phase) - Query and analyze results +## **Required Imports** + +Before using the services, import the necessary classes and types: + +```python +from datetime import datetime +from ni.datastore.data import DataStoreClient +from ni.datastore.metadata import MetadataStoreClient +from ni.datastore.data._types import TestResult, Step +from ni.datastore.metadata._types import ( + Operator, TestStation, HardwareItem, SoftwareItem, + Uut, UutInstance, TestDescription, Test, TestAdapter +) +from ni.measurements.data.v1.data_store_pb2 import Outcome +from nitypes.scalar import Scalar +from nitypes.vector import Vector +from nitypes.waveform import AnalogWaveform +``` + ## **Setup Phase** Before running tests, establish the metadata foundation that describes your test environment and processes. @@ -28,7 +47,7 @@ Register the people who will be running tests: ```python # Create operators sarah = Operator( - operator_name="Sarah Johnson", + name="Sarah Johnson", role="Test Engineer", schema_id=schema_id, extensions={ @@ -39,7 +58,7 @@ sarah = Operator( sarah_id = metadata_store_client.create_operator(sarah) mike_id = metadata_store_client.create_operator(Operator( - operator_name="Mike Chen", + name="Mike Chen", role="Senior Technician", schema_id=schema_id, extensions={ @@ -55,7 +74,7 @@ Define the physical locations where testing occurs: ```python # Create test stations station_a1_id = metadata_store_client.create_test_station(TestStation( - test_station_name="Station_A1", + name="Station_A1", asset_identifier="STA-001", schema_id=schema_id, extensions={ @@ -65,7 +84,7 @@ station_a1_id = metadata_store_client.create_test_station(TestStation( )) rf_lab_id = metadata_store_client.create_test_station(TestStation( - test_station_name="RF_Lab_Bench_1", + name="RF_Lab_Bench_1", asset_identifier="RFL-001", schema_id=schema_id, extensions={ @@ -152,7 +171,7 @@ power_supply_uut = Uut( "efficiency": ">90%" } ) -power_supply_uut_id = metadata_store_client.create_uut(uut) +power_supply_uut_id = metadata_store_client.create_uut(power_supply_uut) ``` #### **UUT Instances (Physical Devices)** @@ -179,7 +198,7 @@ Create test specifications and procedures: # Create comprehensive test suites power_test_desc_id = metadata_store_client.create_test_description(TestDescription( uut_id=power_supply_uut_id, - test_description_name="Power Supply Validation Suite", + name="Power Supply Validation Suite", schema_id=schema_id, extensions={ "version": "v2.1", @@ -192,7 +211,7 @@ power_test_desc_id = metadata_store_client.create_test_description(TestDescripti ```python # Create specific test procedures voltage_test_id = metadata_store_client.create_test(Test( - test_name="DC Voltage Accuracy Test", + name="DC Voltage Accuracy Test", description="Measures DC voltage accuracy across 5V, 12V, and 24V outputs", schema_id=schema_id, extensions={ @@ -202,7 +221,7 @@ voltage_test_id = metadata_store_client.create_test(Test( )) load_test_id = metadata_store_client.create_test(Test( - test_name="Load Regulation Test", + name="Load Regulation Test", description="Tests voltage stability under varying load conditions", schema_id=schema_id, extensions={ @@ -258,7 +277,7 @@ metadata_store_client.create_alias( metadata_store_client.create_alias( alias_name="Current_PowerSupply_Design", alias_target=power_supply_uut -)) +) ``` --- @@ -280,7 +299,7 @@ test_result_id = data_store_client.create_test_result(TestResult( test_description_id=power_test_desc_id, software_item_ids=[python_id, nidaqmx_id, custom_app_id], hardware_item_ids=[dmm_id, scope_id], # or use aliases - test_result_name="PowerSupply PS-2024-001456 Validation", + name="PowerSupply PS-2024-001456 Validation", schema_id=schema_id, extensions={ "test_operator_notes": "First production unit validation", @@ -298,16 +317,16 @@ Organize measurements into logical **Steps**: voltage_step_id = data_store_client.create_step(Step( test_result_id=test_result_id, test_id=voltage_test_id, - step_name="DC Voltage Accuracy Check", - step_type="Measurement", + name="DC Voltage Accuracy Check", + type="Measurement", notes="Testing 5V, 12V, and 24V outputs under no load" )) load_step_id = data_store_client.create_step(Step( test_result_id=test_result_id, test_id=load_test_id, - step_name="Load Regulation Test", - step_type="Measurement", + name="Load Regulation Test", + type="Measurement", notes="Variable load from 0% to 100% rated current" )) ``` @@ -330,7 +349,7 @@ temperature = Scalar(value=23.5, units="DegC") data_store_client.publish_condition( condition_name="Temperature", type="Environment", - value=temperature + value=temperature, step_id=voltage_step_id ) @@ -338,7 +357,7 @@ humidity = Scalar(value=45.2, units="%RH") data_store_client.publish_condition( condition_name="Humidity", type="Environment", - value=humidity + value=humidity, step_id=voltage_step_id ) ``` @@ -483,10 +502,10 @@ Access the actual measured values: for measurement in measurements: if measurement.data_type == "type.googleapis.com/ni.protobuf.types.Vector": value = data_store_client.read_data(measurement, expected_type=Vector) - print(f"{measurement.measurement_name}: {value}") - else if measurement.data_type == "type.googleapis.com/ni.protobuf.types.DoubleAnalogWaveform": - waveform = data_store_client.read_data(measurement, expected_type=DoubleAnalogWaveform) - print(f"{measurement.measurement_name}: {len(waveform.samples)} samples") + print(f"{measurement.name}: {value}") + elif measurement.data_type == "type.googleapis.com/ni.protobuf.types.DoubleAnalogWaveform": + waveform = data_store_client.read_data(measurement, expected_type=AnalogWaveform) + print(f"{measurement.name}: {len(waveform.raw_data)} samples") ``` ### **4. Cross-Reference with Metadata** @@ -526,14 +545,19 @@ for measurement in measurements: ```python # Track performance over time for a UUT model uut_instances = metadata_store_client.query_uut_instances( - f"$filter=UutId eq c26e0057-3732-47d5-9576-3e3487e6e5b9" + f"$filter=UutId eq '{power_supply_uut_id}'" ) for instance in uut_instances: - measurements = data_store_client.query_measurements( - f"$filter=TestResultId eq {instance.uut_instance_id} and Name eq '5V Output Voltage'" + # Get test results for this UUT instance + test_results = data_store_client.query_test_results( + f"$filter=UutInstanceId eq '{instance.id}'" ) - # Analyze voltage accuracy trends... + for test_result in test_results: + measurements = data_store_client.query_measurements( + f"$filter=TestResultId eq '{test_result.id}' and Name eq '5V Output Voltage'" + ) + # Analyze voltage accuracy trends... ``` #### **Equipment Performance Analysis** From 7408e14cd8334b76b8e35c2c5cd02badd93f5b8f Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 14:16:23 -0600 Subject: [PATCH 23/26] Make start_date_time and end_date_time writable. --- src/ni/datastore/data/_types/_step.py | 51 ++++++++++++--------------- 1 file changed, 22 insertions(+), 29 deletions(-) diff --git a/src/ni/datastore/data/_types/_step.py b/src/ni/datastore/data/_types/_step.py index 228717e..5c97238 100644 --- a/src/ni/datastore/data/_types/_step.py +++ b/src/ni/datastore/data/_types/_step.py @@ -38,8 +38,8 @@ class Step: "name", "type", "notes", - "_start_date_time", - "_end_date_time", + "start_date_time", + "end_date_time", "link", "_extensions", "schema_id", @@ -47,16 +47,6 @@ class Step: "outcome", ) - @property - def start_date_time(self) -> ht.datetime | None: - """Get the start date and time of the step execution.""" - return self._start_date_time - - @property - def end_date_time(self) -> ht.datetime | None: - """Get the end date and time of the step execution.""" - return self._end_date_time - @property def extensions(self) -> MutableMapping[str, str]: """The extensions of the step.""" @@ -72,6 +62,8 @@ def __init__( name: str = "", type: str = "", notes: str = "", + start_date_time: ht.datetime | None = None, + end_date_time: ht.datetime | None = None, link: str = "", extensions: Mapping[str, str] | None = None, schema_id: str = "", @@ -88,6 +80,8 @@ def __init__( name: Human-readable name of the step. type: Type or category of the step. notes: Additional notes or comments about the step. + start_date_time: The start date and time of the step execution. + end_date_time: The end date and time of the step execution. link: Optional link to external resources for this step. extensions: Additional custom metadata as key-value pairs. schema_id: ID of the extension schema for validating extensions. @@ -103,6 +97,8 @@ def __init__( self.name = name self.type = type self.notes = notes + self.start_date_time = start_date_time + self.end_date_time = end_date_time self.link = link self._extensions: MutableMapping[str, str] = ( dict(extensions) if extensions is not None else {} @@ -111,9 +107,6 @@ def __init__( self.error_information = error_information self.outcome = outcome - self._start_date_time: ht.datetime | None = None - self._end_date_time: ht.datetime | None = None - @staticmethod def from_protobuf(step_proto: StepProto) -> "Step": """Create a Step instance from a protobuf Step message.""" @@ -125,23 +118,23 @@ def from_protobuf(step_proto: StepProto) -> "Step": name=step_proto.name, type=step_proto.type, notes=step_proto.notes, + start_date_time=( + hightime_datetime_from_protobuf(step_proto.start_date_time) + if step_proto.HasField("start_date_time") + else None + ), + end_date_time=( + hightime_datetime_from_protobuf(step_proto.end_date_time) + if step_proto.HasField("end_date_time") + else None + ), link=step_proto.link, schema_id=step_proto.schema_id, + error_information=( + step_proto.error_information if step_proto.HasField("error_information") else None + ), + outcome=step_proto.outcome, ) - step._start_date_time = ( - hightime_datetime_from_protobuf(step_proto.start_date_time) - if step_proto.HasField("start_date_time") - else None - ) - step._end_date_time = ( - hightime_datetime_from_protobuf(step_proto.end_date_time) - if step_proto.HasField("end_date_time") - else None - ) - step.error_information = ( - step_proto.error_information if step_proto.HasField("error_information") else None - ) - step.outcome = step_proto.outcome populate_from_extension_value_message_map(step.extensions, step_proto.extensions) return step From 5d006bac78daf4e129ed93bed71972d365e0d7a3 Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 14:26:12 -0600 Subject: [PATCH 24/26] Update TestResult fields --- src/ni/datastore/data/_types/_test_result.py | 67 +++++++++----------- 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/src/ni/datastore/data/_types/_test_result.py b/src/ni/datastore/data/_types/_test_result.py index 3333de9..c1d137d 100644 --- a/src/ni/datastore/data/_types/_test_result.py +++ b/src/ni/datastore/data/_types/_test_result.py @@ -40,30 +40,15 @@ class TestResult: "_hardware_item_ids", "_test_adapter_ids", "name", - "_start_date_time", - "_end_date_time", - "_outcome", + "start_date_time", + "end_date_time", + "outcome", "link", "_extensions", "schema_id", "error_information", ) - @property - def start_date_time(self) -> ht.datetime | None: - """Get the start date and time of the test execution.""" - return self._start_date_time - - @property - def end_date_time(self) -> ht.datetime | None: - """Get the end date and time of the test execution.""" - return self._end_date_time - - @property - def outcome(self) -> Outcome.ValueType: - """Get the outcome of the test execution.""" - return self._outcome - @property def software_item_ids(self) -> MutableSequence[str]: """The software item IDs associated with the test result.""" @@ -96,6 +81,9 @@ def __init__( hardware_item_ids: Iterable[str] | None = None, test_adapter_ids: Iterable[str] | None = None, name: str = "", + start_date_time: ht.datetime | None = None, + end_date_time: ht.datetime | None = None, + outcome: Outcome.ValueType = Outcome.OUTCOME_UNSPECIFIED, link: str = "", extensions: Mapping[str, str] | None = None, schema_id: str = "", @@ -113,6 +101,10 @@ def __init__( hardware_item_ids: IDs of hardware items used in the test. test_adapter_ids: IDs of test adapters used in the test. name: Human-readable name for the test result. + start_date_time: The start date and time of the test execution. + end_date_time: The end date and time of the test execution. + outcome: The outcome of the test execution (PASSED, FAILED, + INDETERMINATE, or UNSPECIFIED). link: Optional link to external resources for this test result. extensions: Additional custom metadata as key-value pairs. schema_id: ID of the extension schema for validating extensions. @@ -134,6 +126,9 @@ def __init__( list(test_adapter_ids) if test_adapter_ids is not None else [] ) self.name = name + self.start_date_time = start_date_time + self.end_date_time = end_date_time + self.outcome = outcome self.link = link self._extensions: MutableMapping[str, str] = ( dict(extensions) if extensions is not None else {} @@ -141,10 +136,6 @@ def __init__( self.schema_id = schema_id self.error_information = error_information - self._start_date_time: ht.datetime | None = None - self._end_date_time: ht.datetime | None = None - self._outcome: Outcome.ValueType = Outcome.OUTCOME_UNSPECIFIED - @staticmethod def from_protobuf(test_result_proto: TestResultProto) -> "TestResult": """Create a TestResult instance from a protobuf TestResult message.""" @@ -158,24 +149,24 @@ def from_protobuf(test_result_proto: TestResultProto) -> "TestResult": hardware_item_ids=test_result_proto.hardware_item_ids, test_adapter_ids=test_result_proto.test_adapter_ids, name=test_result_proto.name, + start_date_time=( + hightime_datetime_from_protobuf(test_result_proto.start_date_time) + if test_result_proto.HasField("start_date_time") + else None + ), + end_date_time=( + hightime_datetime_from_protobuf(test_result_proto.end_date_time) + if test_result_proto.HasField("end_date_time") + else None + ), + outcome=test_result_proto.outcome, link=test_result_proto.link, schema_id=test_result_proto.schema_id, - ) - test_result._start_date_time = ( - hightime_datetime_from_protobuf(test_result_proto.start_date_time) - if test_result_proto.HasField("start_date_time") - else None - ) - test_result._end_date_time = ( - hightime_datetime_from_protobuf(test_result_proto.end_date_time) - if test_result_proto.HasField("end_date_time") - else None - ) - test_result._outcome = test_result_proto.outcome - test_result.error_information = ( - test_result_proto.error_information - if test_result_proto.HasField("error_information") - else None + error_information=( + test_result_proto.error_information + if test_result_proto.HasField("error_information") + else None + ), ) populate_from_extension_value_message_map( test_result.extensions, test_result_proto.extensions From d16323405d07225ddaeaf37a15b0ee9658f1898f Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 14:43:28 -0600 Subject: [PATCH 25/26] Clear query_metadata outputs --- examples/notebooks/query/query_metadata.ipynb | 147 ++---------------- 1 file changed, 15 insertions(+), 132 deletions(-) diff --git a/examples/notebooks/query/query_metadata.ipynb b/examples/notebooks/query/query_metadata.ipynb index 8fab342..9f625fa 100644 --- a/examples/notebooks/query/query_metadata.ipynb +++ b/examples/notebooks/query/query_metadata.ipynb @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "34089e87", "metadata": {}, "outputs": [], @@ -71,24 +71,10 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "1a56f513", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Filtered operators (by name containing 'Smith'):\n", - " Alex Smith (Test Engineer)\n", - "\n", - "Filtered operators (by role containing 'Test Engineer'):\n", - " Alex Smith (Test Engineer)\n", - " Jordan Chen (Senior Test Engineer)\n" - ] - } - ], + "outputs": [], "source": [ "print(\"\\nFiltered operators (by name containing 'Smith'):\")\n", "operators_named_smith = metadata_store_client.query_operators(\"$filter=contains(Name,'Smith')\")\n", @@ -123,28 +109,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "64eea755", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Filtered test stations (by name containing 'A1'):\n", - " TestStation_A1\n", - "\n", - "Filtered test stations (by name exactly 'TestStation_B2'):\n", - " TestStation_B2\n", - "\n", - "Filtered test stations (by name starting with 'Test'):\n", - " TestStation_A1\n", - " TestStation_B2\n", - " TestStation_C3\n" - ] - } - ], + "outputs": [], "source": [ "# Test stations whose name includes 'A1'\n", "print(\"\\nFiltered test stations (by name containing 'A1'):\")\n", @@ -193,26 +161,10 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "114fe8ac", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Filtered hardware items (by manufacturer 'NI'):\n", - " NI PXIe-4081 (S/N: DMM001)\n", - " NI PXIe-5171 (S/N: SCOPE001)\n", - "\n", - "Filtered hardware items (by model containing '4081'):\n", - " NI PXIe-4081 (S/N: DMM001)\n", - "\n", - "Filtered hardware items (by serial number containing 'SCOPE'):\n", - " NI PXIe-5171 (S/N: SCOPE001)\n" - ] - } - ], + "outputs": [], "source": [ "print(\"Filtered hardware items (by manufacturer 'NI'):\")\n", "filtered_hardware = metadata_store_client.query_hardware_items(\"$filter=Manufacturer eq 'NI'\")\n", @@ -252,23 +204,10 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "9e90d54d", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Filtered UUTs (by name containing 'Power'):\n", - " PowerSupply v2.1\n", - "\n", - "Filtered UUTs (by name ending with 'v1.3'):\n", - " Audio Amplifier v1.3\n" - ] - } - ], + "outputs": [], "source": [ "print(\"\\nFiltered UUTs (by name containing 'Power'):\")\n", "filtered_uuts = metadata_store_client.query_uuts(\"$filter=contains(Name,'Power')\")\n", @@ -303,29 +242,10 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "26e75660", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Filtered UUT instances (by serial containing '2024'):\n", - " Serial: PS-2024-001\n", - " Serial: PS-2024-002\n", - " Serial: AMP-2024-001\n", - "\n", - "Filtered UUT instances (by serial starting with 'PS'):\n", - " Serial: PS-2024-001\n", - " Serial: PS-2024-002\n", - "\n", - "Combined filter - UUT instances (serial contains 'AMP' and '2024'):\n", - " Serial: AMP-2024-001\n" - ] - } - ], + "outputs": [], "source": [ "print(\"\\nFiltered UUT instances (by serial containing '2024'):\")\n", "filtered_instances = metadata_store_client.query_uut_instances(\"$filter=contains(SerialNumber,'2024')\")\n", @@ -371,23 +291,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "de089e05", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Filtered software items (by product 'Python'):\n", - " Python 3.11.5\n", - "\n", - "Filtered software items (by version starting with '3.'):\n", - " Python 3.11.5\n" - ] - } - ], + "outputs": [], "source": [ "print(\"\\nFiltered software items (by product 'Python'):\")\n", "filtered_software = metadata_store_client.query_software_items(\"$filter=Product eq 'Python'\")\n", @@ -425,34 +332,10 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "cd194f24", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Filtered aliases (by name containing 'Operator'):\n", - " Operator_Alex_Smith -> Operator\n", - " Operator_Jordan_Chen -> Operator\n", - " Operator_Taylor_Johnson -> Operator\n", - "\n", - "Filtered aliases (by name starting with 'UUT'):\n", - " UUT_PowerSupply_v2_1 -> UUT\n", - " UUT_AudioAmplifier_v1_3 -> UUT\n", - " UUT_Instance_PS_001 -> UUT Instance\n", - " UUT_Instance_PS_002 -> UUT Instance\n", - " UUT_Instance_AMP_001 -> UUT Instance\n", - "\n", - "Filtered aliases (by target type containing 'Test'):\n", - " Station_A1 -> Test Station\n", - " Station_B2 -> Test Station\n", - " Station_C3 -> Test Station\n" - ] - } - ], + "outputs": [], "source": [ "# Helper function to translate numeric target_type to human-readable enum values\n", "def get_target_type_name(target_type):\n", From 5649463f9bcba15b0e0e8be061e8ffefd09328ea Mon Sep 17 00:00:00 2001 From: Joel Dixon Date: Tue, 4 Nov 2025 14:47:40 -0600 Subject: [PATCH 26/26] Remove comment --- tests/acceptance/test_publish_with_metadata.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/acceptance/test_publish_with_metadata.py b/tests/acceptance/test_publish_with_metadata.py index 039cdb3..86ffd21 100644 --- a/tests/acceptance/test_publish_with_metadata.py +++ b/tests/acceptance/test_publish_with_metadata.py @@ -139,7 +139,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat test_description_id=test_description_id, software_item_ids=software_item_ids, hardware_item_ids=hardware_item_ids, - # test_adapter_ids=test_adapter_ids, + test_adapter_ids=test_adapter_ids, name=test_result_name, link="Test Result Link", extensions={"tr1": "one", "tr2": "two"}, @@ -208,7 +208,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat assert found_measurement.name == "Measurement Name" assert sorted(found_measurement.software_item_ids) == sorted(software_item_ids) assert sorted(found_measurement.hardware_item_ids) == sorted(hardware_item_ids) - # assert found_measurement.test_adapter_ids == test_adapter_ids + assert found_measurement.test_adapter_ids == test_adapter_ids assert found_measurement.error_information == error_information assert found_measurement.outcome == Outcome.OUTCOME_PASSED assert isinstance(found_measurement.start_date_time, ht.datetime) @@ -234,8 +234,7 @@ def test___waveform_with_all_metadata___publish___query_read_returns_correct_dat assert found_step.test_result_id == step.test_result_id assert found_step.test_id == step.test_id assert found_step.name == step.name - # TODO: File an issue that found_step.type is blank. - # assert found_step.type == step.type + assert found_step.type == step.type assert found_step.notes == step.notes assert found_step.link == step.link assert found_step.extensions == step.extensions