Skip to content

Commit 6b44870

Browse files
syntronadeas31
andauthored
update type hints (#366)
* [ModelicaSystem] add/update type hints for get*() functions * [ModelicaSystem] fix definition of simulate() * [ModelicaSystem] more type hints fixes / cleanups * indicate that OMPython includes type hints via py.typed see: https://mypy.readthedocs.io/en/stable/installed_packages.html#installed-packages see: https://blog.whtsky.me/tech/2021/dont-forget-py.typed-for-your-typed-python-package/ see: https://stackoverflow.com/questions/76073605/add-py-typed-as-package-data-with-setuptools-in-pyproject-toml --------- Co-authored-by: Adeel Asghar <[email protected]>
1 parent ea1cdcc commit 6b44870

File tree

3 files changed

+44
-13
lines changed

3 files changed

+44
-13
lines changed

OMPython/ModelicaSystem.py

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ def __init__(
345345

346346
self._quantities: list[dict[str, Any]] = []
347347
self._params: dict[str, str] = {} # even numerical values are stored as str
348-
self._inputs: dict[str, list | None] = {}
348+
self._inputs: dict[str, list[tuple[float, float]]] = {}
349349
# _outputs values are str before simulate(), but they can be
350350
# np.float64 after simulate().
351351
self._outputs: dict[str, Any] = {}
@@ -354,8 +354,15 @@ def __init__(
354354
self._simulate_options: dict[str, str] = {}
355355
self._override_variables: dict[str, str] = {}
356356
self._simulate_options_override: dict[str, str] = {}
357-
self._linearization_options = {'startTime': 0.0, 'stopTime': 1.0, 'stepSize': 0.002, 'tolerance': 1e-8}
358-
self._optimization_options = self._linearization_options | {'numberOfIntervals': 500}
357+
self._linearization_options: dict[str, str | float] = {
358+
'startTime': 0.0,
359+
'stopTime': 1.0,
360+
'stepSize': 0.002,
361+
'tolerance': 1e-8,
362+
}
363+
self._optimization_options = self._linearization_options | {
364+
'numberOfIntervals': 500,
365+
}
359366
self._linearized_inputs: list[str] = [] # linearization input list
360367
self._linearized_outputs: list[str] = [] # linearization output list
361368
self._linearized_states: list[str] = [] # linearization states list
@@ -695,7 +702,10 @@ def getQuantities(self, names: Optional[str | list[str]] = None) -> list[dict]:
695702

696703
raise ModelicaSystemError("Unhandled input for getQuantities()")
697704

698-
def getContinuous(self, names: Optional[str | list[str]] = None):
705+
def getContinuous(
706+
self,
707+
names: Optional[str | list[str]] = None,
708+
) -> dict[str, str | numbers.Real] | list[str | numbers.Real]:
699709
"""Get values of continuous signals.
700710
701711
If called before simulate(), the initial values are returned as
@@ -767,7 +777,10 @@ def getContinuous(self, names: Optional[str | list[str]] = None):
767777

768778
raise ModelicaSystemError("Unhandled input for getContinous()")
769779

770-
def getParameters(self, names: Optional[str | list[str]] = None) -> dict[str, str] | list[str]: # 5
780+
def getParameters(
781+
self,
782+
names: Optional[str | list[str]] = None,
783+
) -> dict[str, str] | list[str]:
771784
"""Get parameter values.
772785
773786
Args:
@@ -798,7 +811,10 @@ def getParameters(self, names: Optional[str | list[str]] = None) -> dict[str, st
798811

799812
raise ModelicaSystemError("Unhandled input for getParameters()")
800813

801-
def getInputs(self, names: Optional[str | list[str]] = None) -> dict | list: # 6
814+
def getInputs(
815+
self,
816+
names: Optional[str | list[str]] = None,
817+
) -> dict[str, list[tuple[float, float]]] | list[list[tuple[float, float]]]:
802818
"""Get values of input signals.
803819
804820
Args:
@@ -832,7 +848,10 @@ def getInputs(self, names: Optional[str | list[str]] = None) -> dict | list: #
832848

833849
raise ModelicaSystemError("Unhandled input for getInputs()")
834850

835-
def getOutputs(self, names: Optional[str | list[str]] = None): # 7
851+
def getOutputs(
852+
self,
853+
names: Optional[str | list[str]] = None,
854+
) -> dict[str, str | numbers.Real] | list[str | numbers.Real]:
836855
"""Get values of output signals.
837856
838857
If called before simulate(), the initial values are returned as
@@ -900,7 +919,10 @@ def getOutputs(self, names: Optional[str | list[str]] = None): # 7
900919

901920
raise ModelicaSystemError("Unhandled input for getOutputs()")
902921

903-
def getSimulationOptions(self, names: Optional[str | list[str]] = None) -> dict[str, str] | list[str]:
922+
def getSimulationOptions(
923+
self,
924+
names: Optional[str | list[str]] = None,
925+
) -> dict[str, str] | list[str]:
904926
"""Get simulation options such as stopTime and tolerance.
905927
906928
Args:
@@ -934,7 +956,10 @@ def getSimulationOptions(self, names: Optional[str | list[str]] = None) -> dict[
934956

935957
raise ModelicaSystemError("Unhandled input for getSimulationOptions()")
936958

937-
def getLinearizationOptions(self, names: Optional[str | list[str]] = None) -> dict | list:
959+
def getLinearizationOptions(
960+
self,
961+
names: Optional[str | list[str]] = None,
962+
) -> dict[str, str | float] | list[str | float]:
938963
"""Get simulation options used for linearization.
939964
940965
Args:
@@ -969,7 +994,10 @@ def getLinearizationOptions(self, names: Optional[str | list[str]] = None) -> di
969994

970995
raise ModelicaSystemError("Unhandled input for getLinearizationOptions()")
971996

972-
def getOptimizationOptions(self, names: Optional[str | list[str]] = None) -> dict | list:
997+
def getOptimizationOptions(
998+
self,
999+
names: Optional[str | list[str]] = None,
1000+
) -> dict[str, str | float] | list[str | float]:
9731001
"""Get simulation options used for optimization.
9741002
9751003
Args:
@@ -1084,7 +1112,7 @@ def simulate_cmd(
10841112

10851113
def simulate(
10861114
self,
1087-
resultfile: Optional[str] = None,
1115+
resultfile: Optional[str | os.PathLike] = None,
10881116
simflags: Optional[str] = None,
10891117
simargs: Optional[dict[str, Optional[str | dict[str, Any] | numbers.Number]]] = None,
10901118
timeout: Optional[float] = None,
@@ -1783,9 +1811,9 @@ def linearize(
17831811
continue
17841812

17851813
target = body_part.targets[0].id # type: ignore
1786-
value = ast.literal_eval(body_part.value)
1814+
value_ast = ast.literal_eval(body_part.value)
17871815

1788-
linear_data[target] = value
1816+
linear_data[target] = value_ast
17891817
except (AttributeError, IndexError, ValueError, SyntaxError, TypeError) as ex:
17901818
raise ModelicaSystemError(f"Error parsing linearization file {linear_file}!") from ex
17911819

OMPython/py.typed

Whitespace-only changes.

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ dependencies = [
2525
[tool.setuptools]
2626
packages = ["OMPython"]
2727

28+
[tool.setuptools.package-data]
29+
"OMPython" = ["py.typed"]
30+
2831
[project.urls]
2932
Homepage = "http://openmodelica.org/"
3033
Documentation = "https://openmodelica.org/doc/OpenModelicaUsersGuide/latest/ompython.html"

0 commit comments

Comments
 (0)