PySimultan 0.4.18__py3-none-any.whl → 0.4.20__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.
PySimultan2/__about__.py CHANGED
@@ -1 +1 @@
1
- version = '0.4.18'
1
+ version = '0.4.20'
@@ -341,6 +341,9 @@ class ComponentDictionary(SimultanObject):
341
341
  super().__init__(*args, **kwargs)
342
342
  self.component_policy = kwargs.get('component_policy', 'subcomponent') # component add policy of the content/parameter/property, 'reference' or 'subcomponent'
343
343
 
344
+ def __load_init__(self, *args, **kwargs):
345
+ self._dict = {}
346
+
344
347
  @classmethod
345
348
  def create_from_values(cls,
346
349
  values: dict[str, Any],
@@ -374,13 +377,54 @@ class ComponentDictionary(SimultanObject):
374
377
 
375
378
  if kwargs.get('check_dict', True) and comp_dict is not None and key in object.__getattribute__(self,
376
379
  '_dict').keys():
377
- return object.__getattribute__(self, '_dict')[key]
380
+ return object.__getattribute__(self, '_dict').get(key, None)
378
381
  else:
379
382
  # data_model = config.default_data_model
380
- obj = get_component_taxonomy_entry(self._wrapped_obj, key)
381
- if obj is not None:
382
- val = get_obj_value(obj, data_model=self._data_model, object_mapper=self._object_mapper)
383
- self._dict[key] = val
383
+ # obj = get_component_taxonomy_entry(self._wrapped_obj, key)
384
+ # if obj is not None:
385
+ # val = get_obj_value(obj, data_model=self._data_model, object_mapper=self._object_mapper)
386
+ data_model = self._data_model
387
+ object_mapper = self._object_mapper
388
+ wrapped_obj = self._wrapped_obj
389
+
390
+ if key in self._taxonomy_map.parameter_taxonomy_entry_dict.keys():
391
+ text_or_key = self._taxonomy_map.parameter_taxonomy_entry_dict[key]
392
+ else:
393
+ content = Content(text_or_key=f'__dict_key__{key}',
394
+ property_name=key,
395
+ type=None,
396
+ unit=None,
397
+ documentation=f'Property {key} in ComponentDictionary',
398
+ component_policy=self.component_policy)
399
+ self._taxonomy_map.add_content(content)
400
+ text_or_key = content.text_or_key
401
+
402
+ try:
403
+ components = list(wrapped_obj.Components.Items)
404
+ val = next((get_obj_value(x.Component,
405
+ data_model=data_model,
406
+ object_mapper=object_mapper) for x in components if
407
+ x.Slot.SlotBase.Target.Key == text_or_key), None)
408
+ if val is None:
409
+ ref_components = list(wrapped_obj.ReferencedComponents.Items)
410
+ val = next((get_obj_value(x.Target,
411
+ data_model=data_model,
412
+ object_mapper=object_mapper) for x in ref_components
413
+ if x.Slot.SlotBase.Target.Key == text_or_key), None)
414
+ if val is None:
415
+ parameters = list(wrapped_obj.Parameters.Items)
416
+ val = next((get_obj_value(x,
417
+ data_model=data_model,
418
+ object_mapper=object_mapper) for x in parameters if
419
+ x.NameTaxonomyEntry.TextOrKey == text_or_key), None)
420
+
421
+ except Exception as e:
422
+ logger.error(f'Could not get value for key {key} ({text_or_key}) in {self}:\n{e}')
423
+ raise ValueError(f'Could not get value for key {key} ({text_or_key}) in {self}:\n{e}')
424
+
425
+ self._dict[key] = get_obj_value(val,
426
+ data_model=data_model,
427
+ object_mapper=object_mapper)
384
428
  return self._dict[key]
385
429
 
386
430
  def __setitem__(self, key, value):
@@ -391,7 +435,7 @@ class ComponentDictionary(SimultanObject):
391
435
  if key in self._taxonomy_map.content_dict.keys():
392
436
  content = self._taxonomy_map.content_dict[key]
393
437
  else:
394
- content = Content(text_or_key=key,
438
+ content = Content(text_or_key=f'__dict_key__{key}',
395
439
  property_name=key,
396
440
  type=None,
397
441
  unit=None,
@@ -399,7 +443,6 @@ class ComponentDictionary(SimultanObject):
399
443
  component_policy=self.component_policy)
400
444
  self._taxonomy_map.add_content(content)
401
445
  taxonomy_entry = content.get_taxonomie_entry(self._data_model)
402
-
403
446
  component_idx, ref_component_idx, parameter_idx, ref_asset_idx = get_param_indices(self._wrapped_obj,
404
447
  taxonomy_entry)
405
448
 
@@ -425,6 +468,7 @@ class ComponentDictionary(SimultanObject):
425
468
  ref_component_idx=ref_component_idx,
426
469
  parameter_idx=parameter_idx,
427
470
  keep=[])
471
+ return
428
472
 
429
473
  if isinstance(value, (list, tuple, set, ComponentList)):
430
474
  setter_fcn = set_property_to_list
@@ -436,11 +480,7 @@ class ComponentDictionary(SimultanObject):
436
480
  setter_fcn(*fcn_arg_list)
437
481
  item = self.__getitem__(key, check_dict=False)
438
482
 
439
- # self._object_mapper.create_python_object(self._wrapped_obj)
440
- #
441
- # if isinstance(value, ):
442
-
443
- self._dict[key] = self.__getitem__(key, check_dict=False)
483
+ self._dict[key] = item
444
484
 
445
485
  def __delitem__(self, key):
446
486
  self[key] = None
@@ -471,7 +511,7 @@ class ComponentDictionary(SimultanObject):
471
511
  data_model=self._data_model,
472
512
  object_mapper=self._object_mapper)
473
513
  for ref_component in self._wrapped_obj.ReferencedComponents.Items:
474
- comp_dict[ref_component.Slot.SlotBase.Target.Name] = get_obj_value(ref_component.Target,
514
+ comp_dict[ref_component.Slot.SlotBase.Target.Key] = get_obj_value(ref_component.Target,
475
515
  data_model=self._data_model,
476
516
  object_mapper=self._object_mapper)
477
517
  for ref_asset in self._wrapped_obj.ReferencedAssets.Items:
@@ -87,6 +87,7 @@ class TaxonomyMap(object):
87
87
 
88
88
  self._content = []
89
89
  self._content_dict = {}
90
+ self._parameter_taxonomy_entry_dict = {}
90
91
 
91
92
  self.taxonomy_name = kwargs.get('taxonomy_name', kwargs.get('taxonomy_key', None))
92
93
  self.taxonomy_key = kwargs.get('taxonomy_key', None)
@@ -124,6 +125,13 @@ class TaxonomyMap(object):
124
125
  self._content_dict[content.text_or_key] = content
125
126
  return self._content_dict
126
127
 
128
+ @property
129
+ def parameter_taxonomy_entry_dict(self):
130
+ if not self._parameter_taxonomy_entry_dict:
131
+ for content in self._content:
132
+ self._parameter_taxonomy_entry_dict[content.property_name] = content.text_or_key
133
+ return self._parameter_taxonomy_entry_dict
134
+
127
135
  def write(self, filename=None):
128
136
  if filename is not None:
129
137
  with open(filename, mode='w') as f:
PySimultan2/utils.py CHANGED
@@ -1,10 +1,16 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import sys
4
+ import traceback
5
+
3
6
  from enum import Enum
4
7
  from weakref import WeakSet
5
8
  import numpy as np
6
9
  import pandas as pd
7
10
  from typing import List as TypeList, Union, Optional, Type, Any, TYPE_CHECKING
11
+
12
+ from System import ArgumentException, NotSupportedException
13
+
8
14
  from SIMULTAN.Data.Components import (ComponentWalker, SimComponent, SimBoolParameter, SimDoubleParameter,
9
15
  SimEnumParameter, SimIntegerParameter, SimStringParameter, ComponentMapping,
10
16
  SimSlot, SimComponentVisibility, SimChildComponentEntry, SimDefaultSlots,
@@ -417,8 +423,31 @@ def add_sub_component(comp: SimComponent,
417
423
  new_slot = SimSlot(sub_comp.Slots[0].Target, str(slot_extension))
418
424
 
419
425
  entry = SimChildComponentEntry(new_slot, sub_comp)
426
+
427
+ error = None
428
+ new_slot_extension = 0
429
+
420
430
  if entry not in comp.Components.Items:
421
- comp.Components.InsertItem(len(comp.Components.Items), entry)
431
+ try:
432
+ comp.Components.InsertItem(len(comp.Components.Items), entry)
433
+ except (ArgumentException, NotSupportedException) as e:
434
+ error = e
435
+
436
+ while error is not None and new_slot_extension < 100:
437
+ try:
438
+ try:
439
+ slot_extension += 1
440
+ if slot_extension > 1000:
441
+ break
442
+ except Exception as e:
443
+ new_slot_extension += 1
444
+ slot_extension = slot_extension + f'_{new_slot_extension}'
445
+ new_slot = SimSlot(sub_comp.Slots[0].Target, str(slot_extension))
446
+ entry = SimChildComponentEntry(new_slot, sub_comp)
447
+ comp.Components.InsertItem(len(comp.Components.Items), entry)
448
+ error = None
449
+ except (ArgumentException, NotSupportedException) as e:
450
+ error = e
422
451
  return True
423
452
 
424
453
 
@@ -727,7 +756,8 @@ type_convert_dict = {SimComponent: get_sim_component_value,
727
756
  SimEnumParameter: get_parameter_value,
728
757
  ResourceEntry: get_resource_entry_value,
729
758
  ContainedResourceFileEntry: get_resource_entry_value,
730
- LinkedResourceFileEntry: get_resource_entry_value}
759
+ LinkedResourceFileEntry: get_resource_entry_value
760
+ }
731
761
 
732
762
 
733
763
  def get_obj_value(obj: Union[SimComponent, SimDoubleParameter, SimIntegerParameter, SimStringParameter,
@@ -738,6 +768,8 @@ def get_obj_value(obj: Union[SimComponent, SimDoubleParameter, SimIntegerParamet
738
768
 
739
769
  if obj is None:
740
770
  return
771
+ elif isinstance(obj, (int, float, str)):
772
+ return obj
741
773
  elif type(obj) in type_convert_dict.keys():
742
774
  return type_convert_dict[type(obj)](obj, data_model=data_model, object_mapper=object_mapper)
743
775
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: PySimultan
3
- Version: 0.4.18
3
+ Version: 0.4.20
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
@@ -78,3 +78,12 @@ C:\Program Files\FreeCAD
78
78
 
79
79
 
80
80
  ```
81
+
82
+
83
+ # Change Log
84
+
85
+ ## [0.4.20] - 2024-07-01
86
+ - Fixed Bug in nested dictionary creation
87
+
88
+ ## [0.4.19] - 2024-07-01
89
+ - Refactored dictionaries
@@ -1,13 +1,13 @@
1
- PySimultan2/__about__.py,sha256=NDfheEp8FwJqF_9iumAMNgYhdmAOIo7i6lRU_Li4zHE,20
1
+ PySimultan2/__about__.py,sha256=5LZKy2_Q7Bsu50daCLBwex_Hb1mMwOUMiteIDt5jRXI,20
2
2
  PySimultan2/__init__.py,sha256=cabTN1Oz8xtFM31ouBKg5lwLqW5vtexDP669PYyNLnA,3224
3
3
  PySimultan2/data_model.py,sha256=xosu5TAfgsrxwyhd6SfHFp4Wvo1_YtxdHsSuZmuNVJU,27022
4
- PySimultan2/default_types.py,sha256=v_4awsUURLbu4Sfw7J_7BoQKirXbKdU9s7-wqgA4nNE,23112
4
+ PySimultan2/default_types.py,sha256=MvZuU7qQW-ybRIT5Fl5yKdyidXhTQjFZuUq2W8hvEI4,25504
5
5
  PySimultan2/files.py,sha256=8F1QC9nTsTSrCpu5vGx1xGx-7UgkDwoICXau_5j7UzI,12725
6
6
  PySimultan2/multi_values.py,sha256=ZFXlTLuZo32x7_7diYAp2XEjp5uwgHLgNOzN7v74-5I,13650
7
7
  PySimultan2/object_mapper.py,sha256=yYVGeIzkdYvNMqW_kz9NwVxi6IJWGAqLS8CrYzW2oEg,13210
8
8
  PySimultan2/simultan_object.py,sha256=P047pfjgScysBMIsW7Co63VlzXGnLqGwxjyAEVLh8kg,16917
9
- PySimultan2/taxonomy_maps.py,sha256=IYpIat6ZJi5MyCbsjAxWvVOWDRp_VvSMWUY3CApKSik,8061
10
- PySimultan2/utils.py,sha256=qhF46rCHmI96Hdp9sdHAAkUJtaQxoG6YJu7Hx5IM4Go,62569
9
+ PySimultan2/taxonomy_maps.py,sha256=YXOE-vUan2vLQyk96W728Vw5elBvIwH56tTuRBYeUyQ,8420
10
+ PySimultan2/utils.py,sha256=NOetVGG51-JTCrTTXMMmUz2pZpAGmvuojtoXd1UmLtA,63716
11
11
  PySimultan2/geometry/__init__.py,sha256=nJolTD1i5J8qUkOQa-r3D20aq3Co3sN31Xc0n4wJpJo,248
12
12
  PySimultan2/geometry/geometry_base.py,sha256=nbb9U2W3vFviVLxISLHRi2CVyLEM-3zIKvoZ1uSYs_8,23420
13
13
  PySimultan2/geometry/utils.py,sha256=J25YsK8sso_UL7xRusItQZvyjtvxdOsSPelBQYFABhY,8519
@@ -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.18.dist-info/METADATA,sha256=tnKziIsTcgeCIf7BGaxdm1VhBQJPu6LROSu0E4mHZi4,2483
79
- pysimultan-0.4.18.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
80
- pysimultan-0.4.18.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
81
- pysimultan-0.4.18.dist-info/RECORD,,
78
+ pysimultan-0.4.20.dist-info/METADATA,sha256=TlRBXFruRV99PRNlQ_BOu8m4VeW3bgFu6-7Ufy-fjao,2619
79
+ pysimultan-0.4.20.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
80
+ pysimultan-0.4.20.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
81
+ pysimultan-0.4.20.dist-info/RECORD,,