math-spec-mapping 0.4.1.2__tar.gz → 0.4.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. {math_spec_mapping-0.4.1.2/src/math_spec_mapping.egg-info → math_spec_mapping-0.4.3}/PKG-INFO +3 -2
  2. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/README.md +1 -1
  3. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/pyproject.toml +3 -2
  4. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/MathSpec.py +29 -2
  5. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Convenience/__init__.py +1 -0
  6. math_spec_mapping-0.4.3/src/math_spec_mapping/Convenience/cadCAD.py +21 -0
  7. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/load.py +4 -0
  8. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Reports/__init__.py +2 -1
  9. math_spec_mapping-0.4.3/src/math_spec_mapping/Reports/advanced.py +57 -0
  10. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Reports/general.py +20 -2
  11. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Reports/markdown.py +4 -1
  12. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/__init__.py +3 -0
  13. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3/src/math_spec_mapping.egg-info}/PKG-INFO +3 -2
  14. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping.egg-info/SOURCES.txt +2 -0
  15. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping.egg-info/requires.txt +1 -0
  16. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/LICENSE +0 -0
  17. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/setup.cfg +0 -0
  18. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/ActionTransmissionChannel.py +0 -0
  19. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/Block.py +0 -0
  20. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/BoundaryAction.py +0 -0
  21. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/ControlAction.py +0 -0
  22. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/Entity.py +0 -0
  23. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/Mechanism.py +0 -0
  24. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/Metric.py +0 -0
  25. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/Parameter.py +0 -0
  26. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/Policy.py +0 -0
  27. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/Space.py +0 -0
  28. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/State.py +0 -0
  29. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/StateUpdateTransmissionChannel.py +0 -0
  30. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/StatefulMetric.py +0 -0
  31. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/Type.py +0 -0
  32. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Classes/__init__.py +0 -0
  33. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Convenience/documentation.py +0 -0
  34. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Convenience/github.py +0 -0
  35. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Convenience/starter.py +0 -0
  36. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/__init__.py +0 -0
  37. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/action_transmission_channel.py +0 -0
  38. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/boundary_actions.py +0 -0
  39. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/control_actions.py +0 -0
  40. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/displays.py +0 -0
  41. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/entities.py +0 -0
  42. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/general.py +0 -0
  43. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/implementations.py +0 -0
  44. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/mechanism.py +0 -0
  45. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/metrics.py +0 -0
  46. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/parameters.py +0 -0
  47. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/policy.py +0 -0
  48. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/spaces.py +0 -0
  49. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/spec_tree.py +0 -0
  50. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/state_update_transmission_channels.py +0 -0
  51. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/stateful_metrics.py +0 -0
  52. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/states.py +0 -0
  53. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/type.py +0 -0
  54. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Load/wiring.py +0 -0
  55. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Reports/boundary_actions.py +0 -0
  56. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Reports/control_actions.py +0 -0
  57. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Reports/html.py +0 -0
  58. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Reports/mechanisms.py +0 -0
  59. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Reports/node_map.py +0 -0
  60. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Reports/parameters.py +0 -0
  61. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Reports/policies.py +0 -0
  62. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Reports/spaces.py +0 -0
  63. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Reports/state.py +0 -0
  64. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Reports/tables.py +0 -0
  65. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/Reports/wiring.py +0 -0
  66. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/schema.py +0 -0
  67. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping/schema.schema.json +0 -0
  68. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping.egg-info/dependency_links.txt +0 -0
  69. {math_spec_mapping-0.4.1.2 → math_spec_mapping-0.4.3}/src/math_spec_mapping.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: math-spec-mapping
3
- Version: 0.4.1.2
3
+ Version: 0.4.3
4
4
  Summary: A library for easy mapping of mathematical specifications.
5
5
  Author-email: Sean McOwen <Sean@Block.Science>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -15,6 +15,7 @@ Requires-Dist: pandas>=1.4
15
15
  Requires-Dist: jsonschema>=4.21.1
16
16
  Requires-Dist: PyGithub==2.5.0
17
17
  Requires-Dist: python-dotenv>=1.0.0
18
+ Requires-Dist: pypandoc>=1.15
18
19
 
19
20
  # Mathematical Specification Mapping Library (MSML)
20
21
 
@@ -30,7 +31,7 @@ One good example is the [wiring report](https://github.com/BlockScience/Predator
30
31
 
31
32
  ## Installing the library
32
33
 
33
- To install the library, simply pip install by running "pip install math_spec_mapping"
34
+ To install the library, simply pip install by running "pip install math-spec-mapping". The pypi package can be found [here](https://pypi.org/project/math-spec-mapping/).
34
35
 
35
36
  ## Why MSML?
36
37
 
@@ -12,7 +12,7 @@ One good example is the [wiring report](https://github.com/BlockScience/Predator
12
12
 
13
13
  ## Installing the library
14
14
 
15
- To install the library, simply pip install by running "pip install math_spec_mapping"
15
+ To install the library, simply pip install by running "pip install math-spec-mapping". The pypi package can be found [here](https://pypi.org/project/math-spec-mapping/).
16
16
 
17
17
  ## Why MSML?
18
18
 
@@ -3,7 +3,7 @@ requires = ["setuptools>=61.0"]
3
3
  build-backend = "setuptools.build_meta"
4
4
  [project]
5
5
  name = "math-spec-mapping"
6
- version = "0.4.1.2"
6
+ version = "0.4.3"
7
7
  authors = [
8
8
  { name="Sean McOwen", email="Sean@Block.Science" },
9
9
  ]
@@ -14,7 +14,8 @@ dependencies = [
14
14
  "pandas>=1.4",
15
15
  "jsonschema>=4.21.1",
16
16
  "PyGithub==2.5.0",
17
- "python-dotenv>=1.0.0"
17
+ "python-dotenv>=1.0.0",
18
+ "pypandoc>=1.15",
18
19
  ]
19
20
  readme = "README.md"
20
21
  requires-python = ">=3.7"
@@ -1041,10 +1041,25 @@ using .Spaces: generate_space_type
1041
1041
  blocks,
1042
1042
  state_preperation_functions=[],
1043
1043
  parameter_preperation_functions=[],
1044
+ fixed_parameters=None,
1045
+ fixed_state=None,
1044
1046
  ):
1045
1047
  out = {}
1046
1048
  out["StateSpace"] = self._build_state_space()
1049
+ if fixed_state:
1050
+ for key in fixed_state:
1051
+ assert (
1052
+ key in out["StateSpace"]
1053
+ ), "The fixed parameter {} is not in the state space".format(key)
1054
+ out["StateSpace"].pop(key)
1055
+
1047
1056
  out["ParameterSpace"] = self._build_parameter_space()
1057
+ if fixed_parameters:
1058
+ for key in fixed_parameters:
1059
+ assert (
1060
+ key in out["ParameterSpace"]
1061
+ ), "The fixed parameter {} is not in the parameter space".format(key)
1062
+ out["ParameterSpace"].pop(key)
1048
1063
  out["Model"] = cadCADModel(
1049
1064
  self,
1050
1065
  out["StateSpace"],
@@ -1052,6 +1067,8 @@ using .Spaces: generate_space_type
1052
1067
  blocks,
1053
1068
  state_preperation_functions=state_preperation_functions,
1054
1069
  parameter_preperation_functions=parameter_preperation_functions,
1070
+ fixed_parameters=fixed_parameters,
1071
+ fixed_state=fixed_state,
1055
1072
  )
1056
1073
  return out
1057
1074
 
@@ -1079,6 +1096,8 @@ class cadCADModel:
1079
1096
  blocks,
1080
1097
  state_preperation_functions=[],
1081
1098
  parameter_preperation_functions=[],
1099
+ fixed_parameters=None,
1100
+ fixed_state=None,
1082
1101
  ):
1083
1102
  self.ms = ms
1084
1103
  self.state_space = state_space
@@ -1086,10 +1105,18 @@ class cadCADModel:
1086
1105
  self.blocks = blocks
1087
1106
  self.state_preperation_functions = state_preperation_functions
1088
1107
  self.parameter_preperation_functions = parameter_preperation_functions
1108
+ self.fixed_parameters = fixed_parameters
1109
+ self.fixed_state = fixed_state
1089
1110
 
1090
1111
  def create_experiment(
1091
1112
  self, state, params, record_trajectory=False, use_deepcopy=True
1092
1113
  ):
1114
+ if self.fixed_state:
1115
+ for x in self.fixed_state:
1116
+ state[x] = self.fixed_state[x]
1117
+ if self.fixed_parameters:
1118
+ for x in self.fixed_parameters:
1119
+ params[x] = self.fixed_parameters[x]
1093
1120
  return Experiment(
1094
1121
  self,
1095
1122
  state,
@@ -1180,11 +1207,11 @@ class BatchExperiments:
1180
1207
  def step(self):
1181
1208
  for experiment in self.experiments:
1182
1209
  experiment.step()
1183
-
1210
+
1184
1211
  def run(self, t):
1185
1212
  for experiment in self.experiments:
1186
1213
  experiment.run(t)
1187
-
1214
+
1188
1215
  @property
1189
1216
  def trajectories(self):
1190
1217
  return [experiment.trajectories for experiment in self.experiments]
@@ -6,3 +6,4 @@ from .github import (
6
6
  create_priority_label_matrix,
7
7
  create_milestone_label_matrix,
8
8
  )
9
+ from .cadCAD import get_nested_types
@@ -0,0 +1,21 @@
1
+ from copy import deepcopy
2
+ from typing import _TypedDictMeta, _GenericAlias
3
+
4
+
5
+ def get_underlying_type(data):
6
+ if type(data) == _GenericAlias:
7
+ data = [get_underlying_type(x) for x in data.__args__]
8
+ elif type(data) == _TypedDictMeta:
9
+ data = get_nested_types(data.__annotations__)
10
+ return data
11
+
12
+
13
+ def get_nested_types(data):
14
+ data = deepcopy(data)
15
+ for key in data:
16
+ if type(data[key]) == _TypedDictMeta:
17
+ data[key] = get_nested_types(data[key].__annotations__)
18
+ elif type(data[key]) == _GenericAlias:
19
+ data[key] = get_underlying_type(data[key])
20
+
21
+ return data
@@ -86,4 +86,8 @@ def load_from_json(json: Dict, spec_path=None) -> MathSpec:
86
86
  if spec_path:
87
87
  tree = load_spec_tree(spec_path, ms)
88
88
  ms._add_spec_tree(tree)
89
+ else:
90
+ print(
91
+ "Add spec path to load_from_json to load spec tree and allow linking to the code in Obsidian"
92
+ )
89
93
  return ms
@@ -2,7 +2,7 @@ from .node_map import create_action_chains_graph
2
2
  from .boundary_actions import write_out_boundary_actions
3
3
  from .policies import write_out_policies
4
4
  from .mechanisms import write_out_mechanisms
5
- from .general import load_svg_graphviz
5
+ from .general import load_svg_graphviz, convert_markdown_to_pdf
6
6
  from .html import (
7
7
  write_basic_report_full,
8
8
  write_action_chain_reports,
@@ -32,3 +32,4 @@ from .state import (
32
32
  write_initial_state_variables_tables,
33
33
  )
34
34
  from .parameters import write_parameter_table_markdown
35
+ from .advanced import write_glossary_report
@@ -0,0 +1,57 @@
1
+ from ..Classes import MathSpec
2
+ from .state import write_state_section
3
+
4
+
5
+ def write_glossary_report(ms: MathSpec, directory: str) -> None:
6
+ """Function to write a report of each component and its description in MSML
7
+
8
+ Args:
9
+ ms (MathSpec): The mathematical specification object
10
+ directory (str): Directory to put reports into
11
+ """
12
+ out = "# Glossary\n\n"
13
+
14
+ out += "## Entities\n\n"
15
+ for entity in ms.entities:
16
+ if entity == "Global":
17
+ continue
18
+ entity = ms.entities[entity]
19
+ out += "**{}**: {}".format(entity.name, entity.notes)
20
+ out += "\n\n"
21
+ out += "\n"
22
+
23
+ out += "## State\n\n"
24
+ states = list(ms.state.keys())
25
+ states.remove("Global State")
26
+ states = ["Global State"] + states
27
+ for state in states:
28
+ out += "### {}\n\n".format(state)
29
+ out += write_state_section(ms.state[state])
30
+ out += "\n\n"
31
+ out += "\n\n"
32
+
33
+ for name, component in [
34
+ ["Types", ms.types],
35
+ ["Spaces", ms.spaces],
36
+ ["Boundary Actions", ms.boundary_actions],
37
+ ["Control Actions", ms.control_actions],
38
+ ["Policies", ms.policies],
39
+ ["Mechanisms", ms.mechanisms],
40
+ ["Wiring", ms.wiring],
41
+ ["Parameters", ms.parameters.parameter_map],
42
+ ["Stateful Metrics", ms.stateful_metrics],
43
+ ["Metrics", ms.metrics],
44
+ ]:
45
+ out += "## {}\n\n".format(name)
46
+ for key in component:
47
+ if hasattr(component[key], "description"):
48
+ desc = component[key].description
49
+ else:
50
+ desc = component[key].notes
51
+
52
+ out += "**{}**: {}\n\n".format(key, desc)
53
+ out += "\n\n"
54
+
55
+ path = directory + "/Glossary.md"
56
+ with open(path, "w") as f:
57
+ f.write(out)
@@ -1,5 +1,6 @@
1
1
  from graphviz import Digraph
2
2
  import os
3
+ import pypandoc
3
4
 
4
5
 
5
6
  def load_svg_graphviz(graph: Digraph, overwrite: bool = False) -> str:
@@ -23,7 +24,7 @@ def load_svg_graphviz(graph: Digraph, overwrite: bool = False) -> str:
23
24
  assert "{}.gv".format(graph.name) not in os.listdir(".")
24
25
 
25
26
  # Render the graph
26
- graph.render(directory=".", format='svg')
27
+ graph.render(directory=".", format="svg")
27
28
 
28
29
  # Read the svg
29
30
  with open("./{}.gv.svg".format(graph.name), "r") as f:
@@ -35,6 +36,7 @@ def load_svg_graphviz(graph: Digraph, overwrite: bool = False) -> str:
35
36
 
36
37
  return svg
37
38
 
39
+
38
40
  def write_header() -> str:
39
41
  out = '<p>For explanations of generalized dynamical systems as well as how the mathematical specification library works in detail, please consult the documentation <a href="https://github.com/BlockScience/MSML/tree/main/docs">here</a></p>'
40
42
  out += "Graph Legend:<br/>"
@@ -43,4 +45,20 @@ def write_header() -> str:
43
45
  out += "Red Square: Policy<br/>"
44
46
  out += "Blue Circle: Mechanism<br/>"
45
47
  out += "Transparent Circle: State Variable"
46
- return out
48
+ return out
49
+
50
+
51
+ def convert_markdown_to_pdf(md_path, pdf_path, pdflatex_path=None):
52
+ if pdflatex_path:
53
+ pypandoc.convert_file(
54
+ md_path,
55
+ "pdf",
56
+ outputfile=pdf_path,
57
+ extra_args=["--pdf-engine={}".format(pdflatex_path)],
58
+ )
59
+ else:
60
+ pypandoc.convert_file(
61
+ md_path,
62
+ "pdf",
63
+ outputfile=pdf_path,
64
+ )
@@ -70,7 +70,10 @@ def write_source_code_block(component, text, path):
70
70
  if hasattr(component, "source_code_location"):
71
71
  file_path = component.source_code_location
72
72
  else:
73
- file_path = component["Source Code Location"]
73
+ try:
74
+ file_path = component["Source Code Location"]
75
+ except:
76
+ file_path = None
74
77
  if file_path:
75
78
  file_path = os.path.relpath(file_path, path)
76
79
  text += "## Spec Source Code Location\n\n"
@@ -28,6 +28,8 @@ from .Reports import (
28
28
  write_state_variable_table_markdown,
29
29
  write_initial_state_variables_tables,
30
30
  write_parameter_table_markdown,
31
+ write_glossary_report,
32
+ convert_markdown_to_pdf,
31
33
  )
32
34
  from .schema import schema
33
35
  from .Convenience import (
@@ -36,6 +38,7 @@ from .Convenience import (
36
38
  find_open_issues,
37
39
  create_priority_label_matrix,
38
40
  create_milestone_label_matrix,
41
+ get_nested_types,
39
42
  )
40
43
 
41
44
  # from .Convenience import write_top_level_json_description
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: math-spec-mapping
3
- Version: 0.4.1.2
3
+ Version: 0.4.3
4
4
  Summary: A library for easy mapping of mathematical specifications.
5
5
  Author-email: Sean McOwen <Sean@Block.Science>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -15,6 +15,7 @@ Requires-Dist: pandas>=1.4
15
15
  Requires-Dist: jsonschema>=4.21.1
16
16
  Requires-Dist: PyGithub==2.5.0
17
17
  Requires-Dist: python-dotenv>=1.0.0
18
+ Requires-Dist: pypandoc>=1.15
18
19
 
19
20
  # Mathematical Specification Mapping Library (MSML)
20
21
 
@@ -30,7 +31,7 @@ One good example is the [wiring report](https://github.com/BlockScience/Predator
30
31
 
31
32
  ## Installing the library
32
33
 
33
- To install the library, simply pip install by running "pip install math_spec_mapping"
34
+ To install the library, simply pip install by running "pip install math-spec-mapping". The pypi package can be found [here](https://pypi.org/project/math-spec-mapping/).
34
35
 
35
36
  ## Why MSML?
36
37
 
@@ -26,6 +26,7 @@ src/math_spec_mapping/Classes/StatefulMetric.py
26
26
  src/math_spec_mapping/Classes/Type.py
27
27
  src/math_spec_mapping/Classes/__init__.py
28
28
  src/math_spec_mapping/Convenience/__init__.py
29
+ src/math_spec_mapping/Convenience/cadCAD.py
29
30
  src/math_spec_mapping/Convenience/documentation.py
30
31
  src/math_spec_mapping/Convenience/github.py
31
32
  src/math_spec_mapping/Convenience/starter.py
@@ -50,6 +51,7 @@ src/math_spec_mapping/Load/states.py
50
51
  src/math_spec_mapping/Load/type.py
51
52
  src/math_spec_mapping/Load/wiring.py
52
53
  src/math_spec_mapping/Reports/__init__.py
54
+ src/math_spec_mapping/Reports/advanced.py
53
55
  src/math_spec_mapping/Reports/boundary_actions.py
54
56
  src/math_spec_mapping/Reports/control_actions.py
55
57
  src/math_spec_mapping/Reports/general.py
@@ -4,3 +4,4 @@ pandas>=1.4
4
4
  jsonschema>=4.21.1
5
5
  PyGithub==2.5.0
6
6
  python-dotenv>=1.0.0
7
+ pypandoc>=1.15