From b2c8e0d56e07c6caf4d2c58a412b4fee64bac11d Mon Sep 17 00:00:00 2001 From: Vigneshwaran-Selvaraj_adi Date: Thu, 27 Mar 2025 01:30:43 +0530 Subject: [PATCH] converted the condition type to string Signed-off-by: Vigneshwaran-Selvaraj_adi --- .../clients/spec/utilities/_constants.py | 24 +++++++ .../spec/utilities/_dataframe_utilities.py | 36 +++++++++- tests/spec/test_spec_dataframe_utilitites.py | 68 ++++++++++--------- 3 files changed, 93 insertions(+), 35 deletions(-) diff --git a/nisystemlink/clients/spec/utilities/_constants.py b/nisystemlink/clients/spec/utilities/_constants.py index bd0acf63..e0754e81 100644 --- a/nisystemlink/clients/spec/utilities/_constants.py +++ b/nisystemlink/clients/spec/utilities/_constants.py @@ -1,6 +1,30 @@ +from dataclasses import dataclass +from typing import List, Optional + +from nisystemlink.clients.spec.models._condition import ConditionRange + + class DataFrameHeaders: CONDITION_COLUMN_HEADER_PREFIX = "condition_" PROPERTY_COLUMN_HEADER_PREFIX = "properties." KEYWORDS_COLUMN_HEADER = "keywords" + + +@dataclass +class TempNumericCondition: + """A temp numeric condition to store condition type as string.""" + + condition_type: str + range: Optional[List[ConditionRange]] = None + discrete: Optional[List[float]] = None + unit: Optional[str] = None + + +@dataclass +class TempStringCondition: + """A temp string condition to store condition type as string.""" + + condition_type: str + discrete: Optional[List[str]] = None diff --git a/nisystemlink/clients/spec/utilities/_dataframe_utilities.py b/nisystemlink/clients/spec/utilities/_dataframe_utilities.py index 28f4e50e..86690a6b 100644 --- a/nisystemlink/clients/spec/utilities/_dataframe_utilities.py +++ b/nisystemlink/clients/spec/utilities/_dataframe_utilities.py @@ -11,7 +11,11 @@ SpecificationLimit, SpecificationType, ) -from nisystemlink.clients.spec.utilities._constants import DataFrameHeaders +from nisystemlink.clients.spec.utilities._constants import ( + DataFrameHeaders, + TempNumericCondition, + TempStringCondition, +) def summarize_conditions_as_a_string( @@ -44,6 +48,27 @@ def summarize_conditions_as_a_string( ] +def convert_condition( + condition_value: NumericConditionValue | StringConditionValue, +) -> TempNumericCondition | TempStringCondition: + """Creates a TempCondition object and removes None values.""" + if isinstance(condition_value, NumericConditionValue): + return TempNumericCondition( + condition_type=condition_value.condition_type.value, + range=condition_value.range, + discrete=condition_value.discrete, + unit=condition_value.unit, + ) + + elif isinstance(condition_value, StringConditionValue): + return TempStringCondition( + condition_type=condition_value.condition_type.value, + discrete=condition_value.discrete, + ) + + return None + + def normalize_conditions_per_column( conditions: List[Condition], ) -> List[Dict[str, Any]]: @@ -61,7 +86,9 @@ def normalize_conditions_per_column( """ return [ { - f"{DataFrameHeaders.CONDITION_COLUMN_HEADER_PREFIX}{condition.name}": condition.value + f"{DataFrameHeaders.CONDITION_COLUMN_HEADER_PREFIX}{condition.name}": convert_condition( + condition.value + ) for condition in conditions if condition.name and condition.value } @@ -86,7 +113,10 @@ def normalize_conditions_per_row( separate row in the dataframe. """ return [ - {"condition.name": condition.name, "condition.value": condition.value} + { + "condition.name": condition.name, + "condition.value": convert_condition(condition.value), + } for condition in conditions if condition.name and condition.value ] diff --git a/tests/spec/test_spec_dataframe_utilitites.py b/tests/spec/test_spec_dataframe_utilitites.py index dc2c989b..fe9c9809 100644 --- a/tests/spec/test_spec_dataframe_utilitites.py +++ b/tests/spec/test_spec_dataframe_utilitites.py @@ -17,6 +17,10 @@ SpecificationType, ) from nisystemlink.clients.spec.utilities import convert_specs_to_dataframe +from nisystemlink.clients.spec.utilities._constants import ( + TempNumericCondition, + TempStringCondition, +) from nisystemlink.clients.spec.utilities._dataframe_utilities import ( normalize_conditions_per_column, normalize_conditions_per_row, @@ -276,16 +280,16 @@ def test__convert_specs_to_dataframe_with_condition_per_column__returns_datafram conditions_dict = [ [ { - "condition_Temperature": NumericConditionValue( - condition_type=ConditionType.NUMERIC, + "condition_Temperature": TempNumericCondition( + condition_type=ConditionType.NUMERIC.value, range=[ ConditionRange(min=-25, step=20, max=85), ], discrete=[1.3, 1.5, 1.7], unit="C", ), - "condition_Package": StringConditionValue( - condition_type=ConditionType.STRING, + "condition_Package": TempStringCondition( + condition_type=ConditionType.STRING.value, discrete=["D", "QFIN"], ), "condition_Supply Voltage": None, @@ -293,8 +297,8 @@ def test__convert_specs_to_dataframe_with_condition_per_column__returns_datafram ], [ { - "condition_Temperature": NumericConditionValue( - condition_type=ConditionType.NUMERIC, + "condition_Temperature": TempNumericCondition( + condition_type=ConditionType.NUMERIC.value, range=[ ConditionRange(min=-25, step=20, max=85), ConditionRange(min=-10, step=10), @@ -302,8 +306,8 @@ def test__convert_specs_to_dataframe_with_condition_per_column__returns_datafram unit="C", ), "condition_Package": None, - "condition_Supply Voltage": NumericConditionValue( - condition_type=ConditionType.NUMERIC, + "condition_Supply Voltage": TempNumericCondition( + condition_type=ConditionType.NUMERIC.value, discrete=[1.3, 1.5, 1.7], unit="mV", ), @@ -356,8 +360,8 @@ def test__convert_specs_to_dataframe_with_condition_per_row__returns_dataframe_w [ { "condition.name": "Temperature", - "condition.value": NumericConditionValue( - condition_type=ConditionType.NUMERIC, + "condition.value": TempNumericCondition( + condition_type=ConditionType.NUMERIC.value, range=[ ConditionRange(min=-25, step=20, max=85), ], @@ -367,8 +371,8 @@ def test__convert_specs_to_dataframe_with_condition_per_row__returns_dataframe_w }, { "condition.name": "Package", - "condition.value": StringConditionValue( - condition_type=ConditionType.STRING, + "condition.value": TempStringCondition( + condition_type=ConditionType.STRING.value, discrete=["D", "QFIN"], ), }, @@ -376,8 +380,8 @@ def test__convert_specs_to_dataframe_with_condition_per_row__returns_dataframe_w [ { "condition.name": "Temperature", - "condition.value": NumericConditionValue( - condition_type=ConditionType.NUMERIC, + "condition.value": TempNumericCondition( + condition_type=ConditionType.NUMERIC.value, range=[ ConditionRange(min=-25, step=20, max=85), ConditionRange(min=-10, step=10), @@ -387,8 +391,8 @@ def test__convert_specs_to_dataframe_with_condition_per_row__returns_dataframe_w }, { "condition.name": "Supply Voltage", - "condition.value": NumericConditionValue( - condition_type=ConditionType.NUMERIC, + "condition.value": TempNumericCondition( + condition_type=ConditionType.NUMERIC.value, discrete=[1.3, 1.5, 1.7], unit="mV", ), @@ -490,32 +494,32 @@ def test__normalize_conditions_per_column__returns_only_conditions_in_conditions expected_conditions_dict = [ [ { - "condition_Temperature": NumericConditionValue( - condition_type=ConditionType.NUMERIC, + "condition_Temperature": TempNumericCondition( + condition_type=ConditionType.NUMERIC.value, range=[ ConditionRange(min=-25, step=20, max=85), ], discrete=[1.3, 1.5, 1.7], unit="C", ), - "condition_Package": StringConditionValue( - condition_type=ConditionType.STRING, + "condition_Package": TempStringCondition( + condition_type=ConditionType.STRING.value, discrete=["D", "QFIN"], ), } ], [ { - "condition_Temperature": NumericConditionValue( - condition_type=ConditionType.NUMERIC, + "condition_Temperature": TempNumericCondition( + condition_type=ConditionType.NUMERIC.value, range=[ ConditionRange(min=-25, step=20, max=85), ConditionRange(min=-10, step=10), ], unit="C", ), - "condition_Supply Voltage": NumericConditionValue( - condition_type=ConditionType.NUMERIC, + "condition_Supply Voltage": TempNumericCondition( + condition_type=ConditionType.NUMERIC.value, discrete=[1.3, 1.5, 1.7], unit="mV", ), @@ -538,8 +542,8 @@ def test__normalize_conditions_per_row__returns_only_conditions_in_conditions_pe [ { "condition.name": "Temperature", - "condition.value": NumericConditionValue( - condition_type=ConditionType.NUMERIC, + "condition.value": TempNumericCondition( + condition_type=ConditionType.NUMERIC.value, range=[ ConditionRange(min=-25, step=20, max=85), ], @@ -549,8 +553,8 @@ def test__normalize_conditions_per_row__returns_only_conditions_in_conditions_pe }, { "condition.name": "Package", - "condition.value": StringConditionValue( - condition_type=ConditionType.STRING, + "condition.value": TempStringCondition( + condition_type=ConditionType.STRING.value, discrete=["D", "QFIN"], ), }, @@ -558,8 +562,8 @@ def test__normalize_conditions_per_row__returns_only_conditions_in_conditions_pe [ { "condition.name": "Temperature", - "condition.value": NumericConditionValue( - condition_type=ConditionType.NUMERIC, + "condition.value": TempNumericCondition( + condition_type=ConditionType.NUMERIC.value, range=[ ConditionRange(min=-25, step=20, max=85), ConditionRange(min=-10, step=10), @@ -569,8 +573,8 @@ def test__normalize_conditions_per_row__returns_only_conditions_in_conditions_pe }, { "condition.name": "Supply Voltage", - "condition.value": NumericConditionValue( - condition_type=ConditionType.NUMERIC, + "condition.value": TempNumericCondition( + condition_type=ConditionType.NUMERIC.value, discrete=[1.3, 1.5, 1.7], unit="mV", ),