Skip to content

Commit

Permalink
Merge pull request #49 from pyiron/use_list
Browse files Browse the repository at this point in the history
Remove use_list
  • Loading branch information
samwaseda authored Feb 9, 2025
2 parents eead0cc + 915cd46 commit c83685b
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 78 deletions.
11 changes: 2 additions & 9 deletions semantikon/converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
_to_units_container,
_replace_units,
)
from ast import literal_eval
from typing import get_origin, get_args

__author__ = "Sam Waseda"
Expand Down Expand Up @@ -44,14 +43,8 @@ def parse_metadata(value):
dictionary of the metadata. Available keys are `units`, `label`,
`triples`, `uri` and `shape`. See `semantikon.typing.u` for more details.
"""
not_use_list = len(value.__metadata__) == 1 and isinstance(
value.__metadata__[0], str
)
if not_use_list:
return literal_eval(value.__metadata__[0])
else:
metadata = value.__metadata__[0]
return {k: v for k, v in zip(metadata[::2], metadata[1::2])}
metadata = value.__metadata__[0]
return {k: v for k, v in zip(metadata[::2], metadata[1::2])}


def meta_to_dict(value):
Expand Down
10 changes: 2 additions & 8 deletions semantikon/typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ def _type_metadata(
uri: str | None = None,
shape: tuple[int] | None = None,
restrictions: tuple[tuple[str, str]] | None = None,
use_list: bool = True,
**kwargs,
):
parent_result = {}
Expand All @@ -45,11 +44,8 @@ def _type_metadata(
if result[key] is None:
result[key] = value
result.update(kwargs)
if use_list:
items = [x for k, v in result.items() for x in [k, v]]
return Annotated[type_, items]
else:
return Annotated[type_, str(result)]
items = [x for k, v in result.items() for x in [k, v]]
return Annotated[type_, items]


def _function_metadata(
Expand Down Expand Up @@ -80,7 +76,6 @@ def u(
uri: str | None = None,
shape: tuple[int] | None = None,
restrictions: tuple[tuple[str, str]] | None = None,
use_list: bool = True,
**kwargs,
):
is_type_hint = (
Expand All @@ -95,7 +90,6 @@ def u(
"uri": uri,
"shape": shape,
"restrictions": restrictions,
"use_list": use_list,
}
)
if is_type_hint:
Expand Down
118 changes: 57 additions & 61 deletions tests/unit/test_parsers.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,60 @@

class TestUnits(unittest.TestCase):
def test_basic(self):
for use_list in [True, False]:
@u(uri="abc")
def get_speed(
distance: u(float, units="meter"),
time: u(float, units="second"),
) -> u(float, units="meter/second", label="speed"):
return distance / time

@u(uri="abc")
def get_speed(
distance: u(float, units="meter", use_list=use_list),
time: u(float, units="second", use_list=use_list),
) -> u(float, units="meter/second", label="speed", use_list=use_list):
return distance / time
input_args = parse_input_args(get_speed)
for key in ["distance", "time"]:
self.assertTrue(key in input_args)
for key in [
"units",
"uri",
"triples",
"shape",
"label",
"restrictions",
"dtype",
]:
self.assertTrue(key in input_args["distance"])
self.assertEqual(input_args["distance"]["units"], "meter")
self.assertEqual(input_args["time"]["units"], "second")
output_args = parse_output_args(get_speed)
for key in [
"units",
"uri",
"triples",
"shape",
"label",
"restrictions",
"dtype",
]:
self.assertTrue(key in output_args)
self.assertEqual(output_args["units"], "meter/second")
self.assertEqual(output_args["label"], "speed")
self.assertEqual(get_speed._semantikon_metadata["uri"], "abc")
self.assertRaises(TypeError, u, "abc")
f_dict = get_function_dict(get_speed)
self.assertEqual(f_dict["uri"], "abc")
self.assertEqual(f_dict["label"], "get_speed")

input_args = parse_input_args(get_speed)
for key in ["distance", "time"]:
self.assertTrue(key in input_args)
for key in [
"units",
"uri",
"triples",
"shape",
"label",
"restrictions",
"dtype",
]:
self.assertTrue(key in input_args["distance"])
self.assertEqual(input_args["distance"]["units"], "meter")
self.assertEqual(input_args["time"]["units"], "second")
output_args = parse_output_args(get_speed)
def test_multiple_output_args(self):
def get_speed(
distance: u(float, units="meter"),
time: u(float, units="second"),
) -> tuple[
u(float, units="meter/second", label="speed"),
u(float, units="meter", label="distance"),
]:
return distance / time, distance

output_args = parse_output_args(get_speed)
self.assertIsInstance(output_args, tuple)
for output_arg in output_args:
for key in [
"units",
"uri",
Expand All @@ -44,44 +73,11 @@ def get_speed(
"restrictions",
"dtype",
]:
self.assertTrue(key in output_args)
self.assertEqual(output_args["units"], "meter/second")
self.assertEqual(output_args["label"], "speed")
self.assertEqual(get_speed._semantikon_metadata["uri"], "abc")
self.assertRaises(TypeError, u, "abc")
f_dict = get_function_dict(get_speed)
self.assertEqual(f_dict["uri"], "abc")
self.assertEqual(f_dict["label"], "get_speed")

def test_multiple_output_args(self):
for use_list in [True, False]:

def get_speed(
distance: u(float, units="meter", use_list=use_list),
time: u(float, units="second", use_list=use_list),
) -> tuple[
u(float, units="meter/second", label="speed", use_list=use_list),
u(float, units="meter", label="distance", use_list=use_list),
]:
return distance / time, distance

output_args = parse_output_args(get_speed)
self.assertIsInstance(output_args, tuple)
for output_arg in output_args:
for key in [
"units",
"uri",
"triples",
"shape",
"label",
"restrictions",
"dtype",
]:
self.assertTrue(key in output_arg)
self.assertEqual(output_args[0]["units"], "meter/second")
self.assertEqual(output_args[0]["label"], "speed")
self.assertEqual(output_args[1]["units"], "meter")
self.assertEqual(output_args[1]["label"], "distance")
self.assertTrue(key in output_arg)
self.assertEqual(output_args[0]["units"], "meter/second")
self.assertEqual(output_args[0]["label"], "speed")
self.assertEqual(output_args[1]["units"], "meter")
self.assertEqual(output_args[1]["label"], "distance")

def test_additional_args(self):
def get_speed(
Expand Down

0 comments on commit c83685b

Please sign in to comment.