math-spec-mapping 0.3.7__py3-none-any.whl → 0.3.9__py3-none-any.whl

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.
@@ -477,17 +477,23 @@ class MathSpec:
477
477
  state_base,
478
478
  post_processing_function,
479
479
  state_preperation_functions=None,
480
+ parameter_preperation_functions=None,
480
481
  metrics_functions=None,
481
482
  ):
482
483
  if experiment["Param Modifications"]:
483
484
  params_base = deepcopy(params_base)
484
485
  for key in experiment["Param Modifications"]:
485
486
  params_base[key] = experiment["Param Modifications"][key]
487
+ if experiment["State Modifications"]:
488
+ state_base = deepcopy(state_base)
489
+ for key in experiment["State Modifications"]:
490
+ state_base[key] = experiment["State Modifications"][key]
486
491
  msi = self.build_implementation(params_base)
487
492
  state, params = msi.prepare_state_and_params(
488
493
  state_base,
489
494
  params_base,
490
495
  state_preperation_functions=state_preperation_functions,
496
+ parameter_preperation_functions=parameter_preperation_functions,
491
497
  )
492
498
 
493
499
  state = msi.execute_blocks(state, params, experiment["Blocks"])
@@ -510,6 +516,7 @@ class MathSpec:
510
516
  state_base,
511
517
  post_processing_function,
512
518
  state_preperation_functions=None,
519
+ parameter_preperation_functions=None,
513
520
  metrics_functions=None,
514
521
  ):
515
522
  state_l = []
@@ -524,6 +531,7 @@ class MathSpec:
524
531
  state_base,
525
532
  post_processing_function,
526
533
  state_preperation_functions=state_preperation_functions,
534
+ parameter_preperation_functions=parameter_preperation_functions,
527
535
  metrics_functions=metrics_functions,
528
536
  )
529
537
  df["Monte Carlo Run"] = i + 1
@@ -1007,7 +1015,13 @@ class MathSpecImplementation:
1007
1015
  len(shouldnt_be_in_params) == 0
1008
1016
  ), "The following parameters are extra: {}".format(shouldnt_be_in_params)
1009
1017
 
1010
- def prepare_state_and_params(self, state, params, state_preperation_functions=None):
1018
+ def prepare_state_and_params(
1019
+ self,
1020
+ state,
1021
+ params,
1022
+ state_preperation_functions=None,
1023
+ parameter_preperation_functions=None,
1024
+ ):
1011
1025
  self.validate_state_and_params(state, params)
1012
1026
  state = deepcopy(state)
1013
1027
  params = deepcopy(params)
@@ -1018,6 +1032,12 @@ class MathSpecImplementation:
1018
1032
  assert (
1019
1033
  state is not None
1020
1034
  ), "A state must be returned from the state preperation functions"
1035
+ if parameter_preperation_functions:
1036
+ for f in parameter_preperation_functions:
1037
+ params = f(params)
1038
+ assert (
1039
+ params is not None
1040
+ ), "A parameter set must be returned from the parameter preperation functions"
1021
1041
  return state, params
1022
1042
 
1023
1043
  def load_components(self):
@@ -39,19 +39,27 @@ def remove_dummy_repo_components(path):
39
39
  with open(path2 + "/__init__.py", "w") as f:
40
40
  f.write(contents)
41
41
 
42
- """if "Displays" in directory_folders:
42
+ if "Displays" in directory_folders:
43
43
  path2 = path + "/Displays"
44
44
  contents = os.listdir(path2)
45
- if "Dummy.py" in contents:
46
- os.remove(path2 + "/Dummy.py")
47
- if "__init__.py" in contents:
48
- with open(path2 + "/__init__.py", "r") as f:
45
+ if "wiring.py" in contents:
46
+ with open(path2 + "/wiring.py", "r") as f:
49
47
  contents = f.read()
50
- contents = contents.replace("from .Dummy import metrics_x\n", "")
51
- contents = contents.replace("metrics.extend(metrics_x)\n", "")
52
- contents = contents.replace("metrics.extend(metrics_x)", "")
53
- with open(path2 + "/__init__.py", "w") as f:
54
- f.write(contents)"""
48
+
49
+ contents = contents.replace('"Dummy Boundary Wiring 2",\n', "")
50
+ contents = contents.replace('"Dummy Boundary Wiring 2",', "")
51
+ contents = contents.replace('"Dummy Boundary Wiring 2"', "")
52
+
53
+ contents = contents.replace('"Dummy Boundary Wiring",\n', "")
54
+ contents = contents.replace('"Dummy Boundary Wiring",', "")
55
+ contents = contents.replace('"Dummy Boundary Wiring"', "")
56
+
57
+ contents = contents.replace('"Dummy Control Wiring",\n', "")
58
+ contents = contents.replace('"Dummy Control Wiring",', "")
59
+ contents = contents.replace('"Dummy Control Wiring"', "")
60
+
61
+ with open(path2 + "/wiring.py", "w") as f:
62
+ f.write(contents)
55
63
 
56
64
  if "Wiring" in directory_folders:
57
65
  path2 = path + "/Wiring"
@@ -78,6 +86,8 @@ def remove_dummy_repo_components(path):
78
86
  contents = contents.replace("from .Dummy import dummy_mechanisms\n", "")
79
87
  contents = contents.replace("mechanism.extend(dummy_mechanisms)\n", "")
80
88
  contents = contents.replace("mechanism.extend(dummy_mechanisms)", "")
89
+ contents = contents.replace("mechanisms.extend(dummy_mechanisms)\n", "")
90
+ contents = contents.replace("mechanisms.extend(dummy_mechanisms)", "")
81
91
  with open(path2 + "/__init__.py", "w") as f:
82
92
  f.write(contents)
83
93
 
@@ -104,8 +114,23 @@ def remove_dummy_repo_components(path):
104
114
  with open(path2 + "/__init__.py", "r") as f:
105
115
  contents = f.read()
106
116
  contents = contents.replace(
107
- "from .Dummy import dummy_boundary_action\n", ""
117
+ "from .Dummy import dummy_boundary_action, dummy_boundary_action2\n",
118
+ "",
119
+ )
120
+ contents = contents.replace(
121
+ "from .Dummy import dummy_boundary_actions\n",
122
+ "",
123
+ )
124
+
125
+ contents = contents.replace(
126
+ "boundary_actions.extend(dummy_boundary_actions)",
127
+ "",
108
128
  )
129
+
130
+ contents = contents.replace("dummy_boundary_action2,\n", "")
131
+ contents = contents.replace("dummy_boundary_action2,", "")
132
+ contents = contents.replace("dummy_boundary_action2", "")
133
+
109
134
  contents = contents.replace("dummy_boundary_action,\n", "")
110
135
  contents = contents.replace("dummy_boundary_action,", "")
111
136
  contents = contents.replace("dummy_boundary_action", "")
@@ -123,6 +148,13 @@ def remove_dummy_repo_components(path):
123
148
  contents = contents.replace(
124
149
  "from .Dummy import dummy_control_action\n", ""
125
150
  )
151
+ contents = contents.replace(
152
+ "from .Dummy import dummy_control_actions\n", ""
153
+ )
154
+ contents = contents.replace(
155
+ "control_actions.extend(dummy_control_actions)", ""
156
+ )
157
+
126
158
  contents = contents.replace("dummy_control_action,\n", "")
127
159
  contents = contents.replace("dummy_control_action,", "")
128
160
  contents = contents.replace("dummy_control_action", "")
@@ -200,6 +232,8 @@ def remove_dummy_repo_components(path):
200
232
  contents = contents.replace(
201
233
  "from .Dummy import DummyCompoundType, DummyType1, DummyType2\n", ""
202
234
  )
235
+ contents = contents.replace("from .Dummy import dummy_types\n", "")
236
+ contents = contents.replace("types.extend(dummy_types)", "")
203
237
  contents = contents.replace(
204
238
  """ DummyType1,
205
239
  DummyType2,
@@ -40,14 +40,14 @@ def convert_stateful_metric(ms, data: Dict) -> StatefulMetricSet:
40
40
  x[1]
41
41
  )
42
42
 
43
- var["implementations"] = {}
43
+ var["implementations"] = {}
44
+ if "python" in ms["Implementations"]:
45
+ if "stateful_metrics" in ms["Implementations"]["python"]:
46
+ if var["name"] in ms["Implementations"]["python"]["stateful_metrics"]:
47
+ var["implementations"]["python"] = ms["Implementations"]["python"][
48
+ "stateful_metrics"
49
+ ][var["name"]]
44
50
 
45
- if "python" in ms["Implementations"]:
46
- if "stateful_metrics" in ms["Implementations"]["python"]:
47
- if var["name"] in ms["Implementations"]["python"]["stateful_metrics"]:
48
- var["implementations"]["python"] = ms["Implementations"]["python"][
49
- "stateful_metrics"
50
- ][var["name"]]
51
51
  new_variables.append(StatefulMetric(var))
52
52
  data["metrics"] = new_variables
53
53
 
@@ -7,6 +7,7 @@ from .html import (
7
7
  write_basic_report_full,
8
8
  write_action_chain_reports,
9
9
  write_spec_tree,
10
+ write_parameter_table,
10
11
  write_entity_reports,
11
12
  write_overview,
12
13
  )
@@ -26,3 +27,8 @@ from .markdown import (
26
27
  write_stateful_metrics_markdown_report,
27
28
  write_all_markdown_reports,
28
29
  )
30
+ from .state import (
31
+ write_state_variable_table_markdown,
32
+ write_initial_state_variables_tables,
33
+ )
34
+ from .parameters import write_parameter_table_markdown
@@ -6,7 +6,7 @@ from .policies import write_out_policies
6
6
  from .mechanisms import write_out_mechanisms
7
7
  from .general import load_svg_graphviz, write_header
8
8
  from .node_map import create_action_chains_graph
9
- from .parameters import write_out_params
9
+ from .parameters import write_out_params, write_parameter_table_markdown
10
10
  from .state import write_local_state_variable_tables, write_global_state_variable_table
11
11
  from typing import List
12
12
  import os
@@ -267,3 +267,12 @@ def write_overview(ms: MathSpec, name: str, file_path: str, summary: str = None)
267
267
  out += write_spec_tree(ms, readme=True)
268
268
  with open(file_path, "w") as f:
269
269
  f.write(out)
270
+
271
+
272
+ def write_parameter_table(ms: MathSpec, path=None, linking=False) -> str:
273
+ out = write_parameter_table_markdown(ms, links=linking)
274
+ if path:
275
+ with open("{}/Paramter Table.md".format(path), "w") as f:
276
+ f.write(out)
277
+ else:
278
+ return out
@@ -13,3 +13,38 @@ def write_out_params(ms: MathSpec, params: List[str]) -> str:
13
13
  out += "<p>Parameter Class: {}</p>".format(param.parameter_class)
14
14
 
15
15
  return out
16
+
17
+
18
+ def write_parameter_table_markdown(ms, initial_values=None, links=False):
19
+ if initial_values:
20
+ table = """| Name | Description | Parameter Class | Symbol | Domain | Initial Value |
21
+ | --- | --- | --- | --- | --- | --- |
22
+ """
23
+ else:
24
+ table = """| Name | Description | Parameter Class | Symbol | Domain |
25
+ | --- | --- | --- | --- | --- |
26
+ """
27
+
28
+ for name in ms.parameters.parameter_map:
29
+ var = ms.parameters.parameter_map[name]
30
+ table_vars = [
31
+ var.name,
32
+ var.description,
33
+ var.parameter_class,
34
+ var.symbol,
35
+ var.domain,
36
+ ]
37
+ table += "|"
38
+ for i, tv in enumerate(table_vars):
39
+ if tv:
40
+ if links and i == 0:
41
+ table += "[[{}\|{}]]".format(tv, tv)
42
+ else:
43
+ table += "{}".format(tv)
44
+ table += "|"
45
+ if initial_values:
46
+ table += " {} |".format(initial_values[var.name])
47
+
48
+ table += "\n"
49
+
50
+ return table
@@ -33,8 +33,13 @@ def write_state_variable_table(target_state, links=False):
33
33
  return table
34
34
 
35
35
 
36
- def write_state_variable_table_markdown(target_state, links=False):
37
- table = """| Name | Description | Type | Symbol | Domain |
36
+ def write_state_variable_table_markdown(target_state, initial_values=None, links=False):
37
+ if initial_values:
38
+ table = """| Name | Description | Type | Symbol | Domain | Initial Value |
39
+ | --- | --- | --- | --- | --- | --- |
40
+ """
41
+ else:
42
+ table = """| Name | Description | Type | Symbol | Domain |
38
43
  | --- | --- | --- | --- | --- |
39
44
  """
40
45
 
@@ -56,12 +61,33 @@ def write_state_variable_table_markdown(target_state, links=False):
56
61
  else:
57
62
  table += "{}".format(tv)
58
63
  table += "|"
64
+ if initial_values:
65
+ table += " {} |".format(initial_values[var.name])
59
66
 
60
67
  table += "\n"
61
68
 
62
69
  return table
63
70
 
64
71
 
72
+ def write_initial_state_variables_tables(ms, initial_values, links=False):
73
+ out = "### Global State"
74
+ out += "\n\n"
75
+ out += write_state_variable_table_markdown(
76
+ ms.state["Global State"], initial_values=initial_values, links=links
77
+ )
78
+ out += "\n"
79
+ for x in ms.state:
80
+ if x == "Global State":
81
+ continue
82
+
83
+ out += "### {}".format(x)
84
+ out += "\n\n"
85
+ out += write_state_variable_table_markdown(ms.state[x], links=links)
86
+ out += "\n"
87
+
88
+ return out
89
+
90
+
65
91
  def write_global_state_variable_table(state):
66
92
  out = ""
67
93
  out += "<h3>Global State</h3>"
@@ -8,6 +8,7 @@ from .Reports import (
8
8
  write_basic_report_full,
9
9
  write_action_chain_reports,
10
10
  write_spec_tree,
11
+ write_parameter_table,
11
12
  create_parameter_impact_table,
12
13
  write_entity_reports,
13
14
  write_wiring_report,
@@ -24,6 +25,9 @@ from .Reports import (
24
25
  write_parameter_markdown_report,
25
26
  write_stateful_metrics_markdown_report,
26
27
  write_all_markdown_reports,
28
+ write_state_variable_table_markdown,
29
+ write_initial_state_variables_tables,
30
+ write_parameter_table_markdown,
27
31
  )
28
32
  from .schema import schema
29
33
  from .Convenience import remove_dummy_repo_components
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: math-spec-mapping
3
- Version: 0.3.7
3
+ Version: 0.3.9
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
@@ -1,4 +1,4 @@
1
- math_spec_mapping/__init__.py,sha256=CzT9KycdX5nuiUzDFmLXVeAIr8v8UKGbXsEQF8vjl1c,961
1
+ math_spec_mapping/__init__.py,sha256=5n9PbwtdXymhFpL0uUOmcpCBfCEgDp2T93QIASC73ts,1107
2
2
  math_spec_mapping/schema.py,sha256=6mrRqzEnTTSXjb19xJ63MBp0KjKH0s7i6TfT4MkAY9k,233
3
3
  math_spec_mapping/schema.schema.json,sha256=hJP2TcV5WPFPmx4u_A5U1xtnpkE1LeYaTeYOXadTot0,30916
4
4
  math_spec_mapping/Classes/ActionTransmissionChannel.py,sha256=zWMo5QsgPh5WGIWXl-xOrZNMXYJXmK6Vejw1dQvi0og,246
@@ -6,7 +6,7 @@ math_spec_mapping/Classes/Block.py,sha256=cGtIhNgRfoDZ0O3SxeXcNzNlHcdXIB89sT2uaZ
6
6
  math_spec_mapping/Classes/BoundaryAction.py,sha256=KuZqtvZwSHWDP7gFQXGnG-r3EuYJU_oU9wMCuqvRkzk,593
7
7
  math_spec_mapping/Classes/ControlAction.py,sha256=ysqpgANwdizVdwqtgZmnxXMpCqrzmVEF_6YT0M3l4Ho,526
8
8
  math_spec_mapping/Classes/Entity.py,sha256=fA0-b128_OHHxfCg4pzqyQV083EYev1HlVpy86S5igg,1226
9
- math_spec_mapping/Classes/MathSpec.py,sha256=YopqG_ca7nxgPPZxQR9b442C155ZJGfs73CDEIL5uMc,39038
9
+ math_spec_mapping/Classes/MathSpec.py,sha256=6cBpp9OHmfU-XTqPI4Qjnj91cXRxfGtcAQnczOKxt-4,39892
10
10
  math_spec_mapping/Classes/Mechanism.py,sha256=2sLm3wYBIeTQaMBcsJ9btqIWsbS895Ra8NY6Y9_G_Dg,379
11
11
  math_spec_mapping/Classes/Metric.py,sha256=AhPgYppOP6q49xvR8S9STxQsXUKJlTWx7wI1LfZEtww,581
12
12
  math_spec_mapping/Classes/Parameter.py,sha256=ZuJ_w0sChvRElJ4sOnXZ2EV4Ell2xXFulKLjVOpgz2E,1237
@@ -19,7 +19,7 @@ math_spec_mapping/Classes/Type.py,sha256=2KFY8d3cv1PzJJ7SSMHJf1zcfQ3ZbqxotK2KgTa
19
19
  math_spec_mapping/Classes/__init__.py,sha256=0zxgOqns_9JybD74HKMVh6aw8ij8WVbfQ4Q_1uWzof0,761
20
20
  math_spec_mapping/Convenience/__init__.py,sha256=z2W-E5Wg1CNEkDI5UqH3qIVBqp-3A1e63f3u9fA-N7w,112
21
21
  math_spec_mapping/Convenience/documentation.py,sha256=1ziWVJznbCUxeAAt03nAdEYtMlXNo5TeedHfgs0vSBU,1625
22
- math_spec_mapping/Convenience/starter.py,sha256=Pv0b5pHnv5Bxk3PkY8O9Nv62z2C_gxj5xcf8G9r4Pkw,11010
22
+ math_spec_mapping/Convenience/starter.py,sha256=9dBKU3EHscut2wA6Nx1XUmehrFIdr4dCjP9V1BbTF6s,12567
23
23
  math_spec_mapping/Load/__init__.py,sha256=_ga5nHi7U5rY5lCF36_XI9Qmybq4P8R4m5I5mmjLBk8,33
24
24
  math_spec_mapping/Load/action_transmission_channel.py,sha256=9Wer7g2s5SSOcUYuZ0PqSKUVVnW3EvGQJZNXJTwW__0,2561
25
25
  math_spec_mapping/Load/boundary_actions.py,sha256=q-jxhu8FaKNjdOdexlK6f22GDgraGa1jnL5kEzQ7mJY,2625
@@ -35,26 +35,26 @@ math_spec_mapping/Load/parameters.py,sha256=W4utm7to3s2fo4z3XgLH0TM1agaIad1qfM2I
35
35
  math_spec_mapping/Load/policy.py,sha256=HvlhGHGJTweVs7DOI2HSL_2_diECr8ukDUmzoFLQELo,2444
36
36
  math_spec_mapping/Load/spaces.py,sha256=7zgGA57Te7T4hfuCCDElffiidWgn1lKm5E14e1yjt8M,1116
37
37
  math_spec_mapping/Load/state_update_transmission_channels.py,sha256=FJWp5n4HdtHAfof5BUQ6BnRakljatL2h8dWCapaVSc0,2238
38
- math_spec_mapping/Load/stateful_metrics.py,sha256=pX2w3MvX2akFAOo6XWybkRE_X-v5BqchV2jTx0EekF0,2356
38
+ math_spec_mapping/Load/stateful_metrics.py,sha256=3Lq1ZGMaDd5OcGeqR2p5c_znkYw7ETTNPFjUVdZAHKk,2384
39
39
  math_spec_mapping/Load/states.py,sha256=3YurI7eTNkN6nrXRFVrc58wH0VfM22XOuWE07HVpR7Y,1365
40
40
  math_spec_mapping/Load/type.py,sha256=z6cBdBNjWed7cRyA0Bj7Jd5PmtemVVh07n3mWFj_5U4,4356
41
41
  math_spec_mapping/Load/wiring.py,sha256=1dR94U5N1W_WI5rL6lYBltH25ZvApB2pIpq9r5Opkug,3083
42
- math_spec_mapping/Reports/__init__.py,sha256=W27I6S9Ro1hWeHmnxIokCA06awB__eYey7PvKD4Hc1s,933
42
+ math_spec_mapping/Reports/__init__.py,sha256=P3IuE1wiM1EO_yCSD73D4O0O6j7aVWmiwpKJM58ISEs,1121
43
43
  math_spec_mapping/Reports/boundary_actions.py,sha256=45BPp4QjWdD-3E9ZWwqgj_nI2-YdcI2ZZ19_Qv_K7Qk,1410
44
44
  math_spec_mapping/Reports/control_actions.py,sha256=NksekZKIPFSIkubttFstKFthc5AU9B9PWRLSl9j1wWs,1216
45
45
  math_spec_mapping/Reports/general.py,sha256=WOOn6Wlb8M4fsdN49FlKLwOka6vJPQ9aCUy88TL2ki0,1610
46
- math_spec_mapping/Reports/html.py,sha256=uUXxMgGoL2yQelSg7CmJjIsU84SbZarqPg2d9x7Z13k,9220
46
+ math_spec_mapping/Reports/html.py,sha256=zRo67S81pIRK_sttuFy8Y06qllen_K0lNS1qeHQo5ik,9521
47
47
  math_spec_mapping/Reports/markdown.py,sha256=SdhgOMpMBnGKWDG0cimk-LI_UqjQDPy87IxTb-PrBQ0,22866
48
48
  math_spec_mapping/Reports/mechanisms.py,sha256=d2Rxt3JBYvqAOAYUynl0buYVoXEHrO8EGq7GK6hK8NA,1322
49
49
  math_spec_mapping/Reports/node_map.py,sha256=FdSMDQG16NX6n9sZcH-T5xwsvgjrV9OqBHc9J_VlNK0,3129
50
- math_spec_mapping/Reports/parameters.py,sha256=yizNG4lNGrgrlzYYcHMGfXKDFlPw4PMDYshDqZ3YARs,535
50
+ math_spec_mapping/Reports/parameters.py,sha256=T73OKY3dWufeYEb6jSxGQH6GH4PSZLMmZcaV1m8qUn0,1553
51
51
  math_spec_mapping/Reports/policies.py,sha256=EuBzBsTM6QSS_GHFcAyhGgWvDDZwRuKe7Eos9nX13ho,1814
52
52
  math_spec_mapping/Reports/spaces.py,sha256=-76hR5wQBv4lsG000ypBJ-OprjsNjI-rNRMYdtsYnjQ,579
53
- math_spec_mapping/Reports/state.py,sha256=RkqfSonar74KVC8PpA9GgI2xaHX6BrkNdAuWMZlYQfI,2321
53
+ math_spec_mapping/Reports/state.py,sha256=EPiHz3cDCEPHnVjuFruVKaGJ2SclUfGUFvvOukiHPNg,3110
54
54
  math_spec_mapping/Reports/tables.py,sha256=O0CNuqh3LMECq5uLjBOoxMUk5hUvkUK660FNnwWUxDY,1505
55
55
  math_spec_mapping/Reports/wiring.py,sha256=u9SvKWy6T-WJUEgFI6-zgZanoOaTTs_2YwmEceDLsV8,1618
56
- math_spec_mapping-0.3.7.dist-info/LICENSE,sha256=ObyEzSw8kgCaFbEfpu1zP4TrcAKLA0xhqHMZZfyh7N0,1069
57
- math_spec_mapping-0.3.7.dist-info/METADATA,sha256=Y4GIicxIeBa44LDgCxCdNAedQ7EZunZn-VD3JPMfFF4,6500
58
- math_spec_mapping-0.3.7.dist-info/WHEEL,sha256=mguMlWGMX-VHnMpKOjjQidIo1ssRlCFu4a4mBpz1s2M,91
59
- math_spec_mapping-0.3.7.dist-info/top_level.txt,sha256=AImhn9wgazkdV0a9vfiphtQR8uGe2nq-ZIOp-6yUk9o,18
60
- math_spec_mapping-0.3.7.dist-info/RECORD,,
56
+ math_spec_mapping-0.3.9.dist-info/LICENSE,sha256=ObyEzSw8kgCaFbEfpu1zP4TrcAKLA0xhqHMZZfyh7N0,1069
57
+ math_spec_mapping-0.3.9.dist-info/METADATA,sha256=LHloXu-KQrrxTtV_ds9ZnHzTRiQ2w-08YvPSrOKP4nY,6500
58
+ math_spec_mapping-0.3.9.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
59
+ math_spec_mapping-0.3.9.dist-info/top_level.txt,sha256=AImhn9wgazkdV0a9vfiphtQR8uGe2nq-ZIOp-6yUk9o,18
60
+ math_spec_mapping-0.3.9.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.1.1)
2
+ Generator: setuptools (71.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5