PySimultan 0.4.1__py3-none-any.whl → 0.4.3__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
PySimultan2/__about__.py CHANGED
@@ -1 +1 @@
1
- version = '0.4.1'
1
+ version = '0.4.3'
PySimultan2/__init__.py CHANGED
@@ -91,6 +91,12 @@ class Config:
91
91
  def get_default_mapper(self, *args, **kwargs):
92
92
  return self._default_mapper
93
93
 
94
+ def set_default_data_model(self, data_model):
95
+ self._default_data_model = data_model
96
+
97
+ def set_default_mapper(self, mapper):
98
+ self._default_mapper = mapper
99
+
94
100
 
95
101
  config = Config()
96
102
 
PySimultan2/data_model.py CHANGED
@@ -119,7 +119,7 @@ class DataModel:
119
119
  def __new__(cls, *args, **kwargs):
120
120
 
121
121
  instance = super().__new__(cls)
122
- config.default_data_model = instance
122
+ config.set_default_data_model(instance)
123
123
  try:
124
124
  data_models.add(instance)
125
125
  except Exception as e:
@@ -378,8 +378,8 @@ class DataModel:
378
378
  data_models = WeakSet()
379
379
  data_models_dict = WeakValueDictionary()
380
380
 
381
- if config.default_data_model is self:
382
- config.default_data_model = None
381
+ if config.get_default_data_model() is self:
382
+ config.set_default_data_model(None)
383
383
 
384
384
  del self
385
385
 
@@ -117,7 +117,7 @@ class ComponentList(SimultanObject):
117
117
  [all_components[i] for i in np.argsort(indices)]]
118
118
  except TypeError as e:
119
119
  logger.warning(f'Could not sort list {all_components}:\n{e}')
120
- return [self._object_mapper.create_python_object(x) for x in all_components]
120
+ return [self._object_mapper.create_python_object(x, data_model=self._data_model) for x in all_components]
121
121
  except Exception as e:
122
122
  logger.error(f'Could not get data from list {self}:\n{e}')
123
123
  return []
@@ -249,11 +249,12 @@ class ComponentList(SimultanObject):
249
249
  if isinstance(i, slice):
250
250
  if self._object_mapper is None:
251
251
  return self.__class__(self.data[i])
252
- return [self._object_mapper.create_python_object(x) for x in self.__class__(self.data[i])]
252
+ return [self._object_mapper.create_python_object(x, data_model=self._data_model)
253
+ for x in self.__class__(self.data[i])]
253
254
  else:
254
255
  if self._object_mapper is None:
255
256
  return self.data[i]
256
- return self._object_mapper.create_python_object(self.data[i])
257
+ return self._object_mapper.create_python_object(self.data[i], data_model=self._data_model)
257
258
 
258
259
  def __repr__(self):
259
260
  return f'List {self.name}: ' + repr(list(self.data))
@@ -278,13 +279,13 @@ class ComponentList(SimultanObject):
278
279
  return None
279
280
 
280
281
  if self._wrapped_obj.Parent is not None:
281
- return self._object_mapper.create_python_object(self._wrapped_obj.Parent)
282
+ return self._object_mapper.create_python_object(self._wrapped_obj.Parent, data_model=self._data_model)
282
283
  else:
283
284
  return None
284
285
 
285
286
  @property
286
287
  def referenced_by(self):
287
- return set([self._object_mapper.create_python_object(x.Target) for x in self._wrapped_obj.ReferencedBy if
288
+ return set([self._object_mapper.create_python_object(x.Target, data_model=self._data_model) for x in self._wrapped_obj.ReferencedBy if
288
289
  x.Target != self._wrapped_obj])
289
290
 
290
291
  def clear(self):
PySimultan2/files.py CHANGED
@@ -20,7 +20,7 @@ from SIMULTAN.Data.Components import SimComponent, ComponentMapping
20
20
 
21
21
  # from .config import default_data_model
22
22
 
23
- from . import config
23
+ from . import config, logger
24
24
 
25
25
  from typing import TYPE_CHECKING
26
26
  if TYPE_CHECKING:
@@ -197,7 +197,7 @@ class FileInfo(object, metaclass=MetaMock):
197
197
  :return: FileInfo
198
198
  """
199
199
 
200
- data_model = kwargs.get('data_model', config.default_data_model)
200
+ data_model = kwargs.get('data_model', config.get_default_data_model())
201
201
  resource = create_asset_from_string(filename, content, *args, **kwargs)
202
202
 
203
203
  file_info = cls(resource_entry=resource,
@@ -241,8 +241,8 @@ class FileInfo(object, metaclass=MetaMock):
241
241
  def resource_entry(self) -> Union[ResourceFileEntry, ContainedResourceFileEntry, None]:
242
242
  if self._resource_entry is None:
243
243
  if self.data_model is None:
244
- logger.warning(f'No data model provided. Using default data model: {config.default_data_model.id}.')
245
- self.data_model = config.default_data_model
244
+ logger.warning(f'No data model provided. Using default data model: {config.get_default_data_model().id}.')
245
+ self.data_model = config.get_default_data_model()
246
246
  if self.data_model is not None:
247
247
  self.resource_entry = self.data_model.add_resource(self.file_path)
248
248
  return self._resource_entry
@@ -63,7 +63,7 @@ class BaseGeometry(object, metaclass=MetaMock):
63
63
  def __init__(self, *args, **kwargs):
64
64
  self._wrapped_object: Union[Vertex, Edge, Face, Volume, EdgeLoop, Layer] = kwargs.get('wrapped_object', None)
65
65
  self._geometry_model: Optional[GeometryModel] = kwargs.get('geometry_model', None)
66
- self._object_mapper = kwargs.get('object_mapper', config.default_mapper)
66
+ self._object_mapper = kwargs.get('object_mapper', config.get_default_mapper())
67
67
  self._data_model = kwargs.get('data_model', None)
68
68
 
69
69
  @property
@@ -537,7 +537,7 @@ class GeometryModel(object, metaclass=MetaMock):
537
537
  @classmethod
538
538
  def create_simultan_instance(cls, *args, **kwargs):
539
539
 
540
- data_model: DataModel = kwargs.get('data_model', config.default_data_model)
540
+ data_model: DataModel = kwargs.get('data_model', config.get_default_data_model())
541
541
  name: str = kwargs.get('name', 'GeometryModel')
542
542
 
543
543
  new_geo_model, resource = data_model.create_new_geometry_model(name=name)
@@ -549,8 +549,8 @@ class GeometryModel(object, metaclass=MetaMock):
549
549
 
550
550
  def __init__(self, *args, **kwargs):
551
551
  self._wrapped_object: NetGeometryModel = kwargs.get('wrapped_object', None)
552
- self._object_mapper = kwargs.get('object_mapper', config.default_mapper)
553
- self._data_model = kwargs.get('data_model', config.default_data_model)
552
+ self._object_mapper = kwargs.get('object_mapper', config.get_default_mapper())
553
+ self._data_model = kwargs.get('data_model', config.get_default_data_model())
554
554
 
555
555
  @property
556
556
  def name(self):
@@ -29,10 +29,12 @@ class PythonMapper(object):
29
29
 
30
30
  def __new__(cls, *args, **kwargs):
31
31
  instance = super(PythonMapper, cls).__new__(cls)
32
- config.default_mapper = instance
32
+ config.set_default_mapper(instance)
33
33
  return instance
34
34
 
35
35
  def __init__(self, *args, **kwargs):
36
+
37
+ self.name = kwargs.get('name', 'PythonMapper')
36
38
  self.registered_classes = default_registered_classes # dict with all registered classes: {taxonomy: class}
37
39
  self.mapped_classes = default_mapped_classes # dict with all mapped classes: {taxonomy: class}
38
40
  self.taxonomy_maps = default_taxonomy_maps # dict with all taxonomie maps: {taxonomy: taxonomie_map}
@@ -136,20 +138,14 @@ class PythonMapper(object):
136
138
  typed_data.append(typed_object)
137
139
  return typed_data
138
140
 
139
- # @lru_cache(maxsize=500)
140
- def create_python_object(self, component, cls=None, data_model=None, *args, **kwargs):
141
+ def create_python_geometry_object(self, component, data_model=None, *args, **kwargs):
141
142
 
142
143
  if component is None:
143
144
  return None
144
145
 
145
146
  if data_model is None:
146
- logger.warning(f'No data model provided. Using default data model: {config.default_data_model.id}.')
147
- data_model = config.default_data_model
148
- data_model_id = data_model.id
149
- # data_model_id = list(data_models)[0].id
150
- # data_model = list(data_models)[0]
151
- else:
152
- data_model_id = data_model.id
147
+ logger.warning(f'No data model provided. Using default data model: {config.get_default_data_model().id}.')
148
+ data_model = config.get_default_data_model()
153
149
 
154
150
  if isinstance(component, (Layer, Vertex, Edge, PEdge, Face, Volume, EdgeLoop)):
155
151
  if isinstance(component, Layer):
@@ -157,7 +153,22 @@ class PythonMapper(object):
157
153
  else:
158
154
  geometry_model = component.Layer.Model.Model
159
155
  cls = self.registered_geometry_classes[type(component)]
160
- return create_python_geometry(cls, component, data_model_id, self, geometry_model)
156
+ return create_python_geometry(cls, component, data_model, self, geometry_model)
157
+ else:
158
+ self.create_python_object(component, data_model, *args, **kwargs)
159
+
160
+ # @lru_cache(maxsize=500)
161
+ def create_python_object(self, component, cls=None, data_model=None, *args, **kwargs):
162
+
163
+ if component is None:
164
+ return None
165
+
166
+ if data_model is None:
167
+ logger.warning(f'No data model provided. Using default data model: {config.get_default_data_model().id}.')
168
+ data_model = config.get_default_data_model()
169
+
170
+ if isinstance(component, (Layer, Vertex, Edge, PEdge, Face, Volume, EdgeLoop)):
171
+ self.create_python_geometry_object(component, data_model, *args, **kwargs)
161
172
 
162
173
  if cls is None:
163
174
  c_slots = [x.Target.Key for x in component.Slots.Items]
@@ -181,10 +192,8 @@ class PythonMapper(object):
181
192
  else:
182
193
  return create_python_object(component,
183
194
  cls,
184
- data_model_id=data_model_id,
185
195
  object_mapper=self,
186
196
  data_model=data_model,
187
-
188
197
  *args,
189
198
  **kwargs)
190
199
 
@@ -219,8 +228,8 @@ class PythonMapper(object):
219
228
  cls._cls_instances = WeakSet()
220
229
  cls.__property_cache__ = {}
221
230
 
222
- if config.default_mapper is self:
223
- config.default_mapper = None
231
+ if config.get_default_mapper() is self:
232
+ config.set_default_mapper(None)
224
233
 
225
234
  def copy(self):
226
235
  new_mapper = PythonMapper()
@@ -231,4 +240,4 @@ class PythonMapper(object):
231
240
 
232
241
 
233
242
  if config.get_default_mapper() is None:
234
- config._default_mapper = PythonMapper()
243
+ config.set_default_mapper(PythonMapper())
@@ -68,10 +68,10 @@ class MetaMock(type):
68
68
  data_model = list(data_models.data)[0]()
69
69
  kwargs['data_model'] = data_model
70
70
  else:
71
- if config.default_data_model is not None:
71
+ if config.get_default_data_model() is not None:
72
72
  logger.warning(
73
- f'No data model provided. Using default data model: {config.default_data_model.id}.')
74
- data_model = config.default_data_model
73
+ f'No data model provided. Using default data model: {config.get_default_data_model().id}')
74
+ data_model = config.get_default_data_model()
75
75
  kwargs['data_model'] = data_model
76
76
  else:
77
77
  raise TypeError((f'Error creating new instance of class {cls.__name__}:\n'
@@ -154,8 +154,8 @@ class SimultanObject(object, metaclass=MetaMock):
154
154
 
155
155
  self._wrapped_obj: Union[SimComponent, None] = kwargs.get('wrapped_obj', None)
156
156
  self.__obj_init__ = kwargs.get('__obj_init__', False)
157
- self._data_model: Union[DataModel, None] = kwargs.get('data_model', config.default_data_model)
158
- self._object_mapper: Union[PythonMapper, None] = kwargs.get('object_mapper', config.default_mapper)
157
+ self._data_model: Union[DataModel, None] = kwargs.get('data_model', config.get_default_data_model())
158
+ self._object_mapper: Union[PythonMapper, None] = kwargs.get('object_mapper', config.get_default_mapper())
159
159
  self.name = kwargs.get('name', None)
160
160
 
161
161
  self.__property_cache__ = {}
@@ -223,7 +223,7 @@ class SimultanObject(object, metaclass=MetaMock):
223
223
  return None
224
224
 
225
225
  if self._wrapped_obj.Parent is not None:
226
- return self._object_mapper.create_python_object(self._wrapped_obj.Parent)
226
+ return self._object_mapper.create_python_object(self._wrapped_obj.Parent, data_model=self._data_model)
227
227
  else:
228
228
  return None
229
229
 
@@ -239,7 +239,8 @@ class SimultanObject(object, metaclass=MetaMock):
239
239
 
240
240
  @property
241
241
  def referenced_by(self) -> set['SimultanObject']:
242
- return set([self._object_mapper.create_python_object(x.Target) for x in self._wrapped_obj.ReferencedBy if
242
+ return set([self._object_mapper.create_python_object(x.Target, data_model=self._data_model)
243
+ for x in self._wrapped_obj.ReferencedBy if
243
244
  x.Target != self._wrapped_obj])
244
245
 
245
246
  @property
@@ -259,14 +260,17 @@ class SimultanObject(object, metaclass=MetaMock):
259
260
  def get_subcomponents(self) -> dict[[str, str], Union['SimultanObject', SimComponent]]:
260
261
  subcomponents = {}
261
262
  for comp in self._wrapped_obj.Components:
262
- subcomponents[(comp.Slot.SlotBase.Target.Key, comp.Slot.SlotExtension)] = self._object_mapper.create_python_object(comp.Component)
263
+ subcomponents[(comp.Slot.SlotBase.Target.Key,
264
+ comp.Slot.SlotExtension)] = self._object_mapper.create_python_object(comp.Component,
265
+ data_model=self._data_model)
263
266
  return subcomponents
264
267
 
265
268
  def get_subcomponent_list(self) -> list[Union['SimultanObject', SimComponent]]:
266
269
  return list(self.get_subcomponents().values())
267
270
 
268
271
  def get_referenced_components(self) -> list['SimultanObject']:
269
- return [self._object_mapper.create_python_object(x) for x in self._wrapped_obj.ReferencedComponents]
272
+ return [self._object_mapper.create_python_object(x, data_model=self._data_model)
273
+ for x in self._wrapped_obj.ReferencedComponents]
270
274
 
271
275
  def add_taxonomy_entry_reference(self,
272
276
  taxonomy_entry_reference: SimTaxonomyEntryReference,
PySimultan2/utils.py CHANGED
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from . import config
4
3
  from enum import Enum
5
4
  from weakref import WeakSet
6
5
  import numpy as np
@@ -65,14 +64,19 @@ def create_python_object(wrapped_obj: SimComponent, cls: Type[SimultanObject], *
65
64
  :param cls: class of the python object
66
65
  :param args: additional arguments
67
66
  :param kwargs: additional keyword arguments
67
+ :param data_model: DataModel
68
+ :param object_mapper: PythonMapper
69
+
70
+ :return: SimultanObject
68
71
  :return:
69
72
  """
70
73
 
71
74
  from .default_types import ComponentList, ComponentDictionary
72
75
 
73
- if kwargs.get('data_model_id', None) is None:
74
- from .data_model import data_models
75
- kwargs['data_model_id'] = list(data_models)[0].id
76
+ data_model = kwargs.get('data_model', None)
77
+
78
+ if data_model is None:
79
+ data_model = config.get_default_data_model()
76
80
 
77
81
  if wrapped_obj is None:
78
82
  return None
@@ -104,7 +108,7 @@ def create_python_object(wrapped_obj: SimComponent, cls: Type[SimultanObject], *
104
108
  obj.__obj_init__ = True
105
109
  obj.__property_cache__ = dict()
106
110
  obj._wrapped_obj = wrapped_obj
107
- obj._data_model = kwargs.get('data_model', None)
111
+ obj._data_model = data_model
108
112
  obj._object_mapper = kwargs.get('object_mapper', None)
109
113
  obj.component_policy = kwargs.get('component_policy', 'subcomponent')
110
114
 
@@ -227,7 +231,7 @@ def get_default_slot(default_type: Union[SimTaxonomyEntryReference, SimTaxonomyE
227
231
  :return:
228
232
  """
229
233
 
230
- default_taxonomy_entry = SimDefaultSlotKeys.GetDefaultSlot(config.default_data_model.project_data_manager.Taxonomies,
234
+ default_taxonomy_entry = SimDefaultSlotKeys.GetDefaultSlot(config.get_default_data_model().project_data_manager.Taxonomies,
231
235
  SimDefaultSlotKeys.Undefined)
232
236
 
233
237
  if default_type is SimTaxonomyEntryReference:
@@ -604,7 +608,7 @@ def create_simultan_component_for_taxonomy(cls, *args, **kwargs) -> SimComponent
604
608
 
605
609
  data_model = kwargs.get('data_model', None)
606
610
  if data_model is None:
607
- data_model = config.default_data_model
611
+ data_model = config.get_default_data_model()
608
612
 
609
613
  # simultan_taxonomy = cls._taxonomy_map.get_or_create_simultan_taxonomy(data_model=data_model)
610
614
  # tayonomy_entry = cls._taxonomy_map.get_or_create_simultan_taxonomy_entry(data_model=data_model)
@@ -679,7 +683,7 @@ def get_property(prop_name: Optional[str] = None,
679
683
  data_model = component._data_model
680
684
  object_mapper = component._object_mapper
681
685
  else:
682
- data_model = config.default_data_model
686
+ data_model = config.get_default_data_model()
683
687
  obj = get_component_taxonomy_entry(wrapped_obj, text_or_key)
684
688
 
685
689
  return get_obj_value(obj, data_model=data_model, object_mapper=object_mapper)
@@ -877,7 +881,7 @@ def create_mapped_python_object(value: SimComponent,
877
881
  """
878
882
 
879
883
  if object_mapper is None:
880
- object_mapper = config.default_mapper
884
+ object_mapper = config.get_default_mapper()
881
885
 
882
886
  # logger.debug(f'Creating mapped python object for {value}.')
883
887
  if type(value) in object_mapper.registered_classes.values():
@@ -973,13 +977,13 @@ def set_property_to_list(value: Union[list, tuple, set, ComponentList],
973
977
 
974
978
  if 'ComponentList' in [x.Target.Key for x in component.Slots]:
975
979
  if not hasattr(component, '_object_mapper'):
976
- mapper = config.default_mapper
980
+ mapper = config.get_default_mapper()
977
981
  component._object_mapper = mapper
978
982
  else:
979
983
  mapper = component._object_mapper
980
984
 
981
985
  if not hasattr(component, '_data_model'):
982
- data_model = config.default_data_model
986
+ data_model = config.get_default_data_model()
983
987
  component._data_model = data_model
984
988
  else:
985
989
  data_model = component._data_model
@@ -1240,13 +1244,13 @@ def set_property_to_dict(value: dict,
1240
1244
 
1241
1245
  if 'ComponentDictionary' in [x.Target.Key for x in component.Slots]:
1242
1246
  if not hasattr(component, '_object_mapper'):
1243
- mapper = config.default_mapper
1247
+ mapper = config.get_default_mapper()
1244
1248
  component._object_mapper = mapper
1245
1249
  else:
1246
1250
  mapper = component._object_mapper
1247
1251
 
1248
1252
  if not hasattr(component, '_data_model'):
1249
- data_model = config.default_data_model
1253
+ data_model = config.get_default_data_model()
1250
1254
  component._data_model = data_model
1251
1255
  else:
1252
1256
  data_model = component._data_model
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: PySimultan
3
- Version: 0.4.1
3
+ Version: 0.4.3
4
4
  Project-URL: Documentation, https://github.com/Bühler Maximilian/PySimultan2#readme
5
5
  Project-URL: Issues, https://github.com/Bühler Maximilian/PySimultan2/issues
6
6
  Project-URL: Source, https://github.com/Bühler Maximilian/PySimultan2
@@ -1,15 +1,15 @@
1
- PySimultan2/__about__.py,sha256=L2Offsg-6m5gCNnCgevSz7hv6G-kIe1QidASLbohFtk,19
2
- PySimultan2/__init__.py,sha256=00tn7bPM8yncDR41VxBYm5_gVy6i7ZdzpRJoop2pbLc,2692
3
- PySimultan2/data_model.py,sha256=FBYw5yz4lNGgbpnuCnkkwBEkSxI3bv9eE4vumoxCeLU,26956
4
- PySimultan2/default_types.py,sha256=GGAnuOCwF7YSt6tPDMr6houAILWyRsAhMfb9Y_Rpetk,22946
5
- PySimultan2/files.py,sha256=97lRYzKP9hEqP0vKRUbYdd4WSRkgVQ-mJhSJuP_CYSY,12631
1
+ PySimultan2/__about__.py,sha256=l1cddhN_DochM-HfCX27Wng2U2p8iuhA7C5-Wd08cIA,19
2
+ PySimultan2/__init__.py,sha256=2pdrZP8ECaVRlaCfwzFblht_30JfenzyQ2rEt-QldeU,2876
3
+ PySimultan2/data_model.py,sha256=m9q3P5SfxYXdmwdQuPoTazHZAJ1xwazixFtdetJ2Dgk,26968
4
+ PySimultan2/default_types.py,sha256=v_4awsUURLbu4Sfw7J_7BoQKirXbKdU9s7-wqgA4nNE,23112
5
+ PySimultan2/files.py,sha256=gx3BA6WYjNVplqqes7jkPopp6O50pgLvantXgmitx54,12657
6
6
  PySimultan2/multi_values.py,sha256=ZFXlTLuZo32x7_7diYAp2XEjp5uwgHLgNOzN7v74-5I,13650
7
- PySimultan2/object_mapper.py,sha256=FvZR6qEB_dbsaH6V3EE9JgZdTgRTEvbYus01xp6wt9k,9676
8
- PySimultan2/simultan_object.py,sha256=nK28YKOMAQfRJZGwjgbI9sFtJBb84kEaTIwGzWBiAqw,16900
7
+ PySimultan2/object_mapper.py,sha256=UUP8oZNkCG68DpizNJlcj14nrPTKMiq5oWAmA_XO1AY,10116
8
+ PySimultan2/simultan_object.py,sha256=Plr9nwgRmKzdkTO7l8ksWekEow9pT-MgjjAfLlChgDI,17208
9
9
  PySimultan2/taxonomy_maps.py,sha256=aU9zUJph7QcInIZq0W-Vqoy4DYr0CEs-VsXwPMK_cxU,7976
10
- PySimultan2/utils.py,sha256=w806h9aKT3T8Qn178qpXvuzaNpoNGzQVKORhtt3VGBM,62456
10
+ PySimultan2/utils.py,sha256=J3T7KDfONFeLWBulXmGMCaaOu5sfkDSHmI92JWO8dW4,62553
11
11
  PySimultan2/geometry/__init__.py,sha256=nJolTD1i5J8qUkOQa-r3D20aq3Co3sN31Xc0n4wJpJo,248
12
- PySimultan2/geometry/geometry_base.py,sha256=HMz4jZk9Himd5zXZw642kX80bs5TcZNzAE4lPTIRwas,23393
12
+ PySimultan2/geometry/geometry_base.py,sha256=jOTNMISGLRjUUjVfPZ64A2Fp4oinv42polIct9bgIY4,23417
13
13
  PySimultan2/geometry/utils.py,sha256=J25YsK8sso_UL7xRusItQZvyjtvxdOsSPelBQYFABhY,8519
14
14
  PySimultan2/resources/AssimpNet.dll,sha256=x8uwMHPRmEH9fDQihfEQLUdblM1u7RP-CCnUjOpXcLo,205312
15
15
  PySimultan2/resources/AvalonDock.dll,sha256=9tCcw7cpaVq0bh1H2sfcxb8EWhySmgujPs89lAqIPZs,500224
@@ -75,7 +75,7 @@ PySimultan2/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
75
75
  PySimultan2/resources/assimp.dll,sha256=HwfDwXqoPDTFRyoQpA3qmgZoUdFtziJkV5fNtktEZEU,6081536
76
76
  PySimultan2/resources/defaultsettings.xml,sha256=s6Tk1tubLz5UYqXZWpD42EDHzedemRY1nEneoIVcUfg,392
77
77
  PySimultan2/resources/setup.bat,sha256=fjvvYfVM6TalS-QTSiKAbAId5nTsk8kGGo06ba-wWaY,32
78
- pysimultan-0.4.1.dist-info/METADATA,sha256=J3X6HkTS9PHazoL50e2K-cugM3v3-7dRXjPe-oEVnRM,1657
79
- pysimultan-0.4.1.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
80
- pysimultan-0.4.1.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
81
- pysimultan-0.4.1.dist-info/RECORD,,
78
+ pysimultan-0.4.3.dist-info/METADATA,sha256=Pf9TmV9HU7TQg3_pk6bdKxPs_zXZjppZpgEvOCwUMAk,1657
79
+ pysimultan-0.4.3.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
80
+ pysimultan-0.4.3.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
81
+ pysimultan-0.4.3.dist-info/RECORD,,