Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions nisystemlink/clients/spec/utilities/_constants.py
Original file line number Diff line number Diff line change
@@ -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
36 changes: 33 additions & 3 deletions nisystemlink/clients/spec/utilities/_dataframe_utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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]]:
Expand All @@ -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
}
Expand All @@ -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
]
Expand Down
68 changes: 36 additions & 32 deletions tests/spec/test_spec_dataframe_utilitites.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -276,34 +280,34 @@ 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,
}
],
[
{
"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_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",
),
Expand Down Expand Up @@ -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),
],
Expand All @@ -367,17 +371,17 @@ 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"],
),
},
],
[
{
"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),
Expand All @@ -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",
),
Expand Down Expand Up @@ -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",
),
Expand All @@ -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),
],
Expand All @@ -549,17 +553,17 @@ 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"],
),
},
],
[
{
"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),
Expand All @@ -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",
),
Expand Down