PySimultan 0.4.21__py3-none-any.whl → 0.5.0__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- PySimultan2/__about__.py +1 -1
- PySimultan2/__init__.py +1 -0
- PySimultan2/data_model.py +185 -80
- PySimultan2/default_types.py +135 -25
- PySimultan2/files.py +55 -5
- PySimultan2/object_mapper.py +58 -7
- PySimultan2/resources/ComponentBuilder.dll +0 -0
- PySimultan2/resources/ComponentBuilder.runtimeconfig.json +2 -1
- PySimultan2/resources/ComponentBuilder.xml +47 -1
- PySimultan2/resources/SIMULTAN.AutoUpdate.Client.dll +0 -0
- PySimultan2/resources/SIMULTAN.AutoUpdate.DataTransferLibrary.dll +0 -0
- PySimultan2/resources/SIMULTAN.Lang.dll +0 -0
- PySimultan2/resources/SIMULTAN.Lang.xml +94 -7
- PySimultan2/resources/SIMULTAN.Plugins.dll +0 -0
- PySimultan2/resources/SIMULTAN.UI.dll +0 -0
- PySimultan2/resources/SIMULTAN.UI.xml +136 -43
- PySimultan2/resources/SIMULTAN.dll +0 -0
- PySimultan2/resources/SIMULTAN.xml +364 -97
- PySimultan2/resources/System.Collections.Immutable.dll +0 -0
- PySimultan2/resources/System.Reflection.Metadata.dll +0 -0
- PySimultan2/resources/System.Reflection.MetadataLoadContext.dll +0 -0
- PySimultan2/resources/componentmanager.user +0 -0
- PySimultan2/simultan_object.py +64 -15
- PySimultan2/taxonomy_maps.py +20 -12
- PySimultan2/type_setter_lookup.py +46 -33
- PySimultan2/utils.py +49 -14
- {pysimultan-0.4.21.dist-info → pysimultan-0.5.0.dist-info}/METADATA +2 -3
- {pysimultan-0.4.21.dist-info → pysimultan-0.5.0.dist-info}/RECORD +30 -32
- {pysimultan-0.4.21.dist-info → pysimultan-0.5.0.dist-info}/WHEEL +1 -1
- PySimultan2/resources/GeometryViewer.dll +0 -0
- PySimultan2/resources/GeometryViewer.dll.config +0 -42
- PySimultan2/resources/GeometryViewer.xml +0 -6425
- PySimultan2/resources/SitePlanner.dll +0 -0
- PySimultan2/resources/SitePlanner.dll.config +0 -11
- PySimultan2/resources/SitePlanner.xml +0 -2736
- {pysimultan-0.4.21.dist-info → pysimultan-0.5.0.dist-info}/licenses/LICENSE.txt +0 -0
Binary file
|
Binary file
|
Binary file
|
Binary file
|
PySimultan2/simultan_object.py
CHANGED
@@ -3,8 +3,10 @@ import json
|
|
3
3
|
|
4
4
|
from copy import copy
|
5
5
|
from weakref import WeakSet
|
6
|
+
from functools import lru_cache
|
6
7
|
from . import utils
|
7
8
|
from numpy import ndarray
|
9
|
+
from pandas import DataFrame
|
8
10
|
import colorlog
|
9
11
|
from typing import Union, Optional, Any
|
10
12
|
|
@@ -80,6 +82,7 @@ class MetaMock(type):
|
|
80
82
|
init_dict['object_mapper'] = cls._object_mapper
|
81
83
|
init_dict['data_model'] = data_model
|
82
84
|
init_dict['wrapped_obj'] = wrapped_obj
|
85
|
+
|
83
86
|
obj.__init__(*args, **init_dict)
|
84
87
|
|
85
88
|
# for key, value in kwargs.items():
|
@@ -110,7 +113,14 @@ class SimultanObject(object, metaclass=MetaMock):
|
|
110
113
|
|
111
114
|
@classproperty
|
112
115
|
def _cls_instances_dict(cls) -> dict[SimId, 'SimultanObject']:
|
113
|
-
|
116
|
+
if cls._cls_instances_dict_cache is None:
|
117
|
+
cls._cls_instances_dict_cache = dict(zip([x.id for x in cls._cls_instances], [x for x in cls._cls_instances]))
|
118
|
+
|
119
|
+
elif len(cls._cls_instances) == 0:
|
120
|
+
return {}
|
121
|
+
elif len(cls._cls_instances) != len(cls._cls_instances_dict_cache):
|
122
|
+
cls._cls_instances_dict_cache = dict(zip([x.id for x in cls._cls_instances], [x for x in cls._cls_instances]))
|
123
|
+
return cls._cls_instances_dict_cache
|
114
124
|
|
115
125
|
@classproperty
|
116
126
|
def cls_instances(cls) -> list['SimultanObject']:
|
@@ -150,7 +160,11 @@ class SimultanObject(object, metaclass=MetaMock):
|
|
150
160
|
self._wrapped_obj: Union[SimComponent, None] = kwargs.get('wrapped_obj', None)
|
151
161
|
self.__obj_init__: bool = kwargs.get('__obj_init__', False)
|
152
162
|
self._data_model: Union[DataModel, None] = kwargs.get('data_model', config.get_default_data_model())
|
153
|
-
|
163
|
+
|
164
|
+
object_mapper = kwargs.get('object_mapper', None)
|
165
|
+
if object_mapper is None:
|
166
|
+
object_mapper = config.get_default_mapper()
|
167
|
+
self._object_mapper: Union[PythonMapper, None] = object_mapper
|
154
168
|
self.name: str = kwargs.get('name', '')
|
155
169
|
|
156
170
|
self.__property_cache__ = {}
|
@@ -192,15 +206,6 @@ class SimultanObject(object, metaclass=MetaMock):
|
|
192
206
|
if self._wrapped_obj is not None:
|
193
207
|
return [x.Target.Key for x in self._wrapped_obj.Slots]
|
194
208
|
|
195
|
-
@property
|
196
|
-
def json_ref(self):
|
197
|
-
return {"_ref": {
|
198
|
-
"$ref": self.__class__.__name__,
|
199
|
-
"$id": {
|
200
|
-
"$oid": self.id_str
|
201
|
-
}
|
202
|
-
}}
|
203
|
-
|
204
209
|
@property
|
205
210
|
def name(self) -> str:
|
206
211
|
if self._wrapped_obj is not None:
|
@@ -275,7 +280,7 @@ class SimultanObject(object, metaclass=MetaMock):
|
|
275
280
|
|
276
281
|
def add_subcomponent(self, subcomponent: Union['SimultanObject', SimComponent],
|
277
282
|
slot: SimTaxonomyEntryReference = None,
|
278
|
-
slot_extension: str = None):
|
283
|
+
slot_extension: str = None) -> 'SimultanObject':
|
279
284
|
|
280
285
|
if isinstance(subcomponent, SimComponent):
|
281
286
|
comp_to_add = subcomponent
|
@@ -292,6 +297,8 @@ class SimultanObject(object, metaclass=MetaMock):
|
|
292
297
|
slot_extension,
|
293
298
|
slot)
|
294
299
|
|
300
|
+
return comp_to_add
|
301
|
+
|
295
302
|
def remove_subcomponent(self, subcomponent: Union['SimultanObject', SimComponent]):
|
296
303
|
if isinstance(subcomponent, SimComponent):
|
297
304
|
utils.remove_sub_component(self._wrapped_obj, subcomponent)
|
@@ -387,18 +394,20 @@ class SimultanObject(object, metaclass=MetaMock):
|
|
387
394
|
setattr(comp_prop, prop, value)
|
388
395
|
return comp_prop
|
389
396
|
|
390
|
-
def copy(self
|
397
|
+
def copy(self,
|
398
|
+
name: str = None):
|
391
399
|
"""
|
392
400
|
Create a copy of the object including all properties. The properties are copied by reference.
|
393
401
|
:return:
|
394
402
|
"""
|
395
|
-
new_copy = self.__class__(
|
403
|
+
new_copy = self.__class__(name=name if name is not None else f'Copy of {self.name}',
|
404
|
+
data_model=self._data_model,
|
396
405
|
object_mapper=self._object_mapper)
|
397
406
|
|
398
407
|
for content in self._taxonomy_map.content:
|
399
408
|
setattr(new_copy, content.property_name, getattr(self, content.property_name))
|
400
409
|
|
401
|
-
new_copy.name = f'Copy of {self.name}'
|
410
|
+
# new_copy.name = name if name is not None else f'Copy of {self.name}'
|
402
411
|
|
403
412
|
if self.associated_geometry:
|
404
413
|
for geo in self.associated_geometry:
|
@@ -406,6 +415,46 @@ class SimultanObject(object, metaclass=MetaMock):
|
|
406
415
|
|
407
416
|
return new_copy
|
408
417
|
|
418
|
+
def remove_from_datamodel(self):
|
419
|
+
self._data_model.remove_component(self)
|
420
|
+
self.__class__.cls_instances.remove(self)
|
421
|
+
|
422
|
+
def to_json(self) -> dict:
|
423
|
+
|
424
|
+
from .default_types import ComponentList, ComponentDictionary
|
425
|
+
|
426
|
+
obj_dict = {
|
427
|
+
str(self.id): {'name': self.name},
|
428
|
+
'taxonomies': self.taxonomy_keys,
|
429
|
+
}
|
430
|
+
|
431
|
+
for content in self._taxonomy_map.content:
|
432
|
+
val = getattr(self, content.property_name)
|
433
|
+
|
434
|
+
if hasattr(val, 'json_ref'):
|
435
|
+
obj_dict[content.text_or_key] = val.json_ref()
|
436
|
+
elif isinstance(val, (list, ComponentList)):
|
437
|
+
obj_dict[content.text_or_key] = [v.json_ref() if hasattr(v, 'json_ref') else v for v in val]
|
438
|
+
elif isinstance(val, (dict, ComponentDictionary)):
|
439
|
+
obj_dict[content.text_or_key] = {k: v.json_ref() if hasattr(v, 'json_ref') else v for k, v in val.items()}
|
440
|
+
elif isinstance(val, ndarray):
|
441
|
+
obj_dict[content.text_or_key] = val.tolist()
|
442
|
+
elif isinstance(val, DataFrame):
|
443
|
+
obj_dict[content.text_or_key] = val.to_dict()
|
444
|
+
else:
|
445
|
+
obj_dict[content.text_or_key] = val
|
446
|
+
|
447
|
+
return obj_dict
|
448
|
+
|
449
|
+
def json_ref(self):
|
450
|
+
return {"$ref": {
|
451
|
+
"$type": 'Component',
|
452
|
+
"$taxonomies": self.taxonomy_keys,
|
453
|
+
"$id": {'local_id': self.id.LocalId,
|
454
|
+
'global_id': str(self.id.GlobalId)
|
455
|
+
}
|
456
|
+
}
|
457
|
+
}
|
409
458
|
|
410
459
|
# def to_json(self):
|
411
460
|
#
|
PySimultan2/taxonomy_maps.py
CHANGED
@@ -4,6 +4,7 @@ from ruamel.yaml import YAML, yaml_object, add_representer
|
|
4
4
|
from . import yaml
|
5
5
|
|
6
6
|
from typing import TYPE_CHECKING, Optional, Union, Literal
|
7
|
+
|
7
8
|
if TYPE_CHECKING:
|
8
9
|
from .data_model import DataModel
|
9
10
|
|
@@ -15,7 +16,9 @@ class Content(object):
|
|
15
16
|
|
16
17
|
yaml_tag = u'!Content'
|
17
18
|
|
18
|
-
def __init__(self,
|
19
|
+
def __init__(self,
|
20
|
+
*args,
|
21
|
+
**kwargs):
|
19
22
|
"""
|
20
23
|
Define a content/parameter/property of a taxonomy entry in the taxonomy map.
|
21
24
|
|
@@ -27,8 +30,7 @@ class Content(object):
|
|
27
30
|
* *type* (``str``) -- type of the content/parameter/property
|
28
31
|
* *unit* (``str``) -- unit of the content/parameter/property
|
29
32
|
* *documentation* (``str``) -- documentation of the content/parameter/property
|
30
|
-
* *component_policy* (``str``) -- component add policy of the content/parameter/property, '
|
31
|
-
reference' or 'subcomponent'
|
33
|
+
* *component_policy* (``str``) -- component add policy of the content/parameter/property, 'reference' or 'subcomponent'
|
32
34
|
"""
|
33
35
|
|
34
36
|
self.name: str = kwargs.get('name', kwargs.get('text_or_key'))
|
@@ -89,11 +91,14 @@ class TaxonomyMap(object):
|
|
89
91
|
self._content_dict = {}
|
90
92
|
self._parameter_taxonomy_entry_dict = {}
|
91
93
|
|
92
|
-
self.taxonomy_name = kwargs.get('taxonomy_name', kwargs.get('taxonomy_key'
|
93
|
-
self.taxonomy_key = kwargs.get('taxonomy_key'
|
94
|
+
self.taxonomy_name = kwargs.get('taxonomy_name', kwargs.get('taxonomy_key'))
|
95
|
+
self.taxonomy_key = kwargs.get('taxonomy_key')
|
94
96
|
|
95
|
-
self.
|
96
|
-
|
97
|
+
if self.taxonomy_key == kwargs.get('taxonomy_entry_key'):
|
98
|
+
raise ValueError('taxonomy_key and taxonomy_entry_key must be different')
|
99
|
+
|
100
|
+
self.taxonomy_entry_name = kwargs.get('taxonomy_entry_name', kwargs.get('taxonomy_entry_key'))
|
101
|
+
self.taxonomy_entry_key = kwargs.get('taxonomy_entry_key')
|
97
102
|
|
98
103
|
self.content = kwargs.get('content', [])
|
99
104
|
self.documentation = kwargs.get('documentation', '')
|
@@ -128,8 +133,7 @@ class TaxonomyMap(object):
|
|
128
133
|
@property
|
129
134
|
def parameter_taxonomy_entry_dict(self):
|
130
135
|
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
|
136
|
+
self._parameter_taxonomy_entry_dict = {content.property_name: content.text_or_key for content in self._content}
|
133
137
|
return self._parameter_taxonomy_entry_dict
|
134
138
|
|
135
139
|
def write(self, filename=None):
|
@@ -152,11 +156,13 @@ class TaxonomyMap(object):
|
|
152
156
|
content._taxonomy_map = self
|
153
157
|
self._content_dict = {}
|
154
158
|
|
155
|
-
def get_or_create_simultan_taxonomy_entry(self,
|
159
|
+
def get_or_create_simultan_taxonomy_entry(self,
|
160
|
+
data_model: 'DataModel',
|
161
|
+
create=True):
|
156
162
|
|
157
163
|
if self._taxonomy_entries.get(data_model, None) is None:
|
158
164
|
|
159
|
-
taxonomy_entries = data_model.get_taxonomy_entries()
|
165
|
+
taxonomy_entries = data_model.get_taxonomy_entries(taxonomy=self.taxonomy_key)
|
160
166
|
if self.taxonomy_entry_key in taxonomy_entries.keys():
|
161
167
|
self._taxonomy_entries[data_model] = taxonomy_entries[self.taxonomy_entry_key]
|
162
168
|
elif create:
|
@@ -167,7 +173,9 @@ class TaxonomyMap(object):
|
|
167
173
|
create=create))
|
168
174
|
return self._taxonomy_entries[data_model]
|
169
175
|
|
170
|
-
def get_or_create_simultan_taxonomy(self,
|
176
|
+
def get_or_create_simultan_taxonomy(self,
|
177
|
+
data_model: 'DataModel',
|
178
|
+
create=True):
|
171
179
|
if self._taxonomies.get(data_model, None) is None:
|
172
180
|
self._taxonomies[data_model] = data_model.get_or_create_taxonomy(
|
173
181
|
taxonomy_name=self.taxonomy_name,
|
@@ -1,11 +1,16 @@
|
|
1
|
+
from typing import Any
|
1
2
|
import numpy as np
|
2
3
|
import pandas as pd
|
4
|
+
import inspect
|
5
|
+
import enum
|
3
6
|
|
4
|
-
from .utils import (SimComponent,
|
7
|
+
from .utils import (SimComponent, SimDoubleParameter, SimIntegerParameter, SimStringParameter,
|
5
8
|
SimBoolParameter, SimEnumParameter, SimMultiValueField3D, SimMultiValueBigTable, FileInfo,
|
6
9
|
set_property_to_sim_component, set_property_to_parameter, set_property_to_value_field,
|
7
10
|
set_property_to_file_info, set_property_to_list, set_property_to_dict)
|
8
11
|
|
12
|
+
from .simultan_object import SimultanObject, MetaMock
|
13
|
+
|
9
14
|
from .default_types import ComponentList, ComponentDictionary
|
10
15
|
|
11
16
|
from SIMULTAN.Data.Components import (ComponentWalker, SimComponent, SimBoolParameter, SimDoubleParameter,
|
@@ -14,46 +19,54 @@ from SIMULTAN.Data.Components import (ComponentWalker, SimComponent, SimBoolPara
|
|
14
19
|
SimParameterOperations, SimComponentReference)
|
15
20
|
|
16
21
|
|
17
|
-
lookup_dict = {None: lambda x: None,
|
18
|
-
SimComponent: set_property_to_sim_component,
|
19
|
-
SimultanObject: set_property_to_sim_component,
|
20
|
-
SimDoubleParameter: set_property_to_parameter,
|
21
|
-
SimIntegerParameter: set_property_to_parameter,
|
22
|
-
SimStringParameter: set_property_to_parameter,
|
23
|
-
SimBoolParameter: set_property_to_parameter,
|
24
|
-
SimEnumParameter: set_property_to_parameter,
|
25
|
-
SimMultiValueField3D: set_property_to_value_field,
|
26
|
-
SimMultiValueBigTable: set_property_to_value_field,
|
27
|
-
int: set_property_to_parameter,
|
28
|
-
float: set_property_to_parameter,
|
29
|
-
str: set_property_to_parameter,
|
30
|
-
bool: set_property_to_parameter,
|
31
|
-
FileInfo: set_property_to_file_info,
|
32
|
-
list: set_property_to_list,
|
33
|
-
tuple: set_property_to_list,
|
34
|
-
set: set_property_to_list,
|
35
|
-
dict: set_property_to_dict,
|
36
|
-
ComponentDictionary: set_property_to_dict,
|
37
|
-
ComponentList: set_property_to_list,
|
38
|
-
np.ndarray: set_property_to_value_field,
|
39
|
-
pd.DataFrame: set_property_to_value_field}
|
40
|
-
|
41
|
-
|
42
22
|
class TypeSetterFcnLookupDict(object):
|
43
23
|
|
24
|
+
lookup_dict = {None: lambda x: None,
|
25
|
+
SimComponent: set_property_to_sim_component,
|
26
|
+
SimultanObject: set_property_to_sim_component,
|
27
|
+
SimDoubleParameter: set_property_to_parameter,
|
28
|
+
SimIntegerParameter: set_property_to_parameter,
|
29
|
+
SimStringParameter: set_property_to_parameter,
|
30
|
+
SimBoolParameter: set_property_to_parameter,
|
31
|
+
SimEnumParameter: set_property_to_parameter,
|
32
|
+
SimMultiValueField3D: set_property_to_value_field,
|
33
|
+
SimMultiValueBigTable: set_property_to_value_field,
|
34
|
+
int: set_property_to_parameter,
|
35
|
+
float: set_property_to_parameter,
|
36
|
+
str: set_property_to_parameter,
|
37
|
+
bool: set_property_to_parameter,
|
38
|
+
FileInfo: set_property_to_file_info,
|
39
|
+
list: set_property_to_list,
|
40
|
+
tuple: set_property_to_list,
|
41
|
+
set: set_property_to_list,
|
42
|
+
dict: set_property_to_dict,
|
43
|
+
enum.Enum: set_property_to_parameter,
|
44
|
+
enum.IntEnum: set_property_to_parameter,
|
45
|
+
enum.EnumType: set_property_to_parameter,
|
46
|
+
ComponentDictionary: set_property_to_sim_component,
|
47
|
+
ComponentList: set_property_to_list,
|
48
|
+
np.ndarray: set_property_to_value_field,
|
49
|
+
pd.DataFrame: set_property_to_value_field}
|
50
|
+
|
44
51
|
def __getitem__(self, item: type):
|
45
|
-
|
46
|
-
|
47
|
-
|
52
|
+
bases = [item, *inspect.getmro(type(item))]
|
53
|
+
|
54
|
+
if SimultanObject in bases or MetaMock in bases:
|
48
55
|
return set_property_to_sim_component
|
49
56
|
else:
|
50
|
-
|
57
|
+
for base in bases:
|
58
|
+
if base in self.lookup_dict:
|
59
|
+
return self.lookup_dict[base]
|
60
|
+
return None
|
51
61
|
|
52
62
|
def get(self,
|
53
|
-
item:
|
54
|
-
default=
|
55
|
-
|
63
|
+
item: Any,
|
64
|
+
default='_____'):
|
65
|
+
|
66
|
+
val = self.__getitem__(type(item))
|
56
67
|
if val is None:
|
68
|
+
if default == '_____':
|
69
|
+
raise KeyError(f'No setter function found for type {type(item)}')
|
57
70
|
return default
|
58
71
|
else:
|
59
72
|
return val
|
PySimultan2/utils.py
CHANGED
@@ -62,7 +62,10 @@ class CircularReferenceResolver(object):
|
|
62
62
|
circ_ref_resolver = CircularReferenceResolver()
|
63
63
|
|
64
64
|
|
65
|
-
def create_python_object(wrapped_obj: SimComponent,
|
65
|
+
def create_python_object(wrapped_obj: SimComponent,
|
66
|
+
cls: Type[SimultanObject],
|
67
|
+
*args,
|
68
|
+
**kwargs):
|
66
69
|
"""
|
67
70
|
Create a new mapped python object from a wrapped object
|
68
71
|
:param wrapped_obj: wrapped object to create the python object from
|
@@ -104,6 +107,7 @@ def create_python_object(wrapped_obj: SimComponent, cls: Type[SimultanObject], *
|
|
104
107
|
kwargs[content.text_or_key] = get_property(wrapped_obj=wrapped_obj,
|
105
108
|
text_or_key=content.text_or_key,
|
106
109
|
object_mapper=kwargs.get('object_mapper', None),
|
110
|
+
data_model=data_model
|
107
111
|
)
|
108
112
|
|
109
113
|
kwargs['name'] = wrapped_obj.Name
|
@@ -300,12 +304,16 @@ def create_sim_string_parameter(**kwargs) -> SimStringParameter:
|
|
300
304
|
:return:
|
301
305
|
"""
|
302
306
|
|
303
|
-
|
307
|
+
try:
|
308
|
+
init_dict = ['slot', 'value']
|
304
309
|
|
305
|
-
|
306
|
-
|
310
|
+
args = [x for x in [kwargs.get(key, None) for key in init_dict] if x is not None]
|
311
|
+
args.append(SimParameterOperations(0).All)
|
307
312
|
|
308
|
-
|
313
|
+
return SimStringParameter(*args)
|
314
|
+
except Exception as e:
|
315
|
+
logger.error(f'Error creating string parameter: {e}\n{traceback.format_exc()}')
|
316
|
+
raise e
|
309
317
|
|
310
318
|
|
311
319
|
def create_sim_bool_parameter(**kwargs) -> SimBoolParameter:
|
@@ -354,7 +362,7 @@ def create_parameter(value: Union[int, float, str, SimTaxonomyEntry] = 0,
|
|
354
362
|
if type(value) is float:
|
355
363
|
parameter_type = float
|
356
364
|
elif type(value) is int:
|
357
|
-
parameter_type =
|
365
|
+
parameter_type = int
|
358
366
|
elif type(value) is str:
|
359
367
|
parameter_type = str
|
360
368
|
elif type(value) is SimTaxonomyEntry:
|
@@ -548,6 +556,8 @@ def add_referenced_component(component: Union[SimComponent, SimultanObject],
|
|
548
556
|
ref = SimComponentReference(new_slot, referenced_wrapped_obj._wrapped_obj)
|
549
557
|
component_wrapped_obj.ReferencedComponents.Add(ref)
|
550
558
|
|
559
|
+
return
|
560
|
+
|
551
561
|
|
552
562
|
def remove_referenced_component(component: Union[SimComponent, SimultanObject],
|
553
563
|
referenced_component: Union[SimComponent, SimultanObject]):
|
@@ -625,7 +635,9 @@ def get_component_geometry(data_model, geometry_model, component) -> tuple[list[
|
|
625
635
|
return points, edges, faces, volumes
|
626
636
|
|
627
637
|
|
628
|
-
def create_simultan_component_for_taxonomy(cls
|
638
|
+
def create_simultan_component_for_taxonomy(cls: Type[SimultanObject],
|
639
|
+
*args,
|
640
|
+
**kwargs) -> SimComponent:
|
629
641
|
"""
|
630
642
|
Create a new Simultan component for a taxonomy
|
631
643
|
:param cls:
|
@@ -698,7 +710,8 @@ def get_property(prop_name: Optional[str] = None,
|
|
698
710
|
text_or_key: Optional[str] = None,
|
699
711
|
component=None,
|
700
712
|
wrapped_obj=None,
|
701
|
-
object_mapper=None
|
713
|
+
object_mapper=None,
|
714
|
+
data_model=None) -> Any:
|
702
715
|
|
703
716
|
if prop_name is None and text_or_key is None:
|
704
717
|
raise ValueError('Either prop_name or text_or_key must be set.')
|
@@ -708,11 +721,14 @@ def get_property(prop_name: Optional[str] = None,
|
|
708
721
|
|
709
722
|
if component is not None:
|
710
723
|
obj = get_component_taxonomy_entry(component._wrapped_obj, text_or_key)
|
711
|
-
data_model
|
724
|
+
if data_model is None:
|
725
|
+
data_model = component._data_model
|
712
726
|
object_mapper = component._object_mapper
|
713
727
|
else:
|
714
|
-
data_model
|
715
|
-
|
728
|
+
if data_model is None:
|
729
|
+
data_model = config.get_default_data_model()
|
730
|
+
obj = get_component_taxonomy_entry(wrapped_obj,
|
731
|
+
text_or_key)
|
716
732
|
|
717
733
|
return get_obj_value(obj, data_model=data_model, object_mapper=object_mapper)
|
718
734
|
|
@@ -768,6 +784,8 @@ def get_obj_value(obj: Union[SimComponent, SimDoubleParameter, SimIntegerParamet
|
|
768
784
|
|
769
785
|
if obj is None:
|
770
786
|
return
|
787
|
+
elif isinstance(obj, SimultanObject):
|
788
|
+
return obj
|
771
789
|
elif isinstance(obj, (int, float, str)):
|
772
790
|
return obj
|
773
791
|
elif type(obj) in type_convert_dict.keys():
|
@@ -924,7 +942,6 @@ def create_mapped_python_object(value: Any,
|
|
924
942
|
data_model=data_model,
|
925
943
|
object_mapper=object_mapper,
|
926
944
|
add_to_data_model=add_to_data_model)
|
927
|
-
|
928
945
|
# logger.debug(f'Created mapped python object {new_val} for {value}.')
|
929
946
|
return new_val
|
930
947
|
elif isinstance(value, dict):
|
@@ -944,6 +961,16 @@ def create_mapped_python_object(value: Any,
|
|
944
961
|
elif isinstance(value, UnresolvedObject):
|
945
962
|
return value.resolve()
|
946
963
|
else:
|
964
|
+
sub_classes = [issubclass(x, value.__class__) for x in object_mapper.registered_classes.values()]
|
965
|
+
if sum(sub_classes) == 1:
|
966
|
+
key = list(object_mapper.registered_classes.keys())[sub_classes.index(True)]
|
967
|
+
mapped_cls = object_mapper.get_mapped_class(key)
|
968
|
+
new_val = mapped_cls(**value.__dict__,
|
969
|
+
data_model=data_model,
|
970
|
+
object_mapper=object_mapper,
|
971
|
+
add_to_data_model=add_to_data_model)
|
972
|
+
return new_val
|
973
|
+
|
947
974
|
raise TypeError(f'Error creating mapped python object for {value}.')
|
948
975
|
|
949
976
|
|
@@ -1125,7 +1152,7 @@ def set_property_to_file_info(value: FileInfo,
|
|
1125
1152
|
tag=taxonomy_entry)
|
1126
1153
|
|
1127
1154
|
|
1128
|
-
def set_property_to_parameter(value: Union[int, float, str],
|
1155
|
+
def set_property_to_parameter(value: Union[int, float, str, Enum, bool],
|
1129
1156
|
component: SimultanObject,
|
1130
1157
|
prop_name: str,
|
1131
1158
|
taxonomy_entry: SimTaxonomyEntry,
|
@@ -1145,6 +1172,9 @@ def set_property_to_parameter(value: Union[int, float, str],
|
|
1145
1172
|
|
1146
1173
|
wrapped_obj = component._wrapped_obj
|
1147
1174
|
|
1175
|
+
if isinstance(value, Enum):
|
1176
|
+
value = value.value
|
1177
|
+
|
1148
1178
|
if parameter_idx is not None:
|
1149
1179
|
existing_parameter_type = type(wrapped_obj.Parameters.Items[parameter_idx])
|
1150
1180
|
|
@@ -1354,6 +1384,9 @@ def add_properties(prop_name: str,
|
|
1354
1384
|
content = taxonomy_map.get_content_by_property_name(prop_name)
|
1355
1385
|
|
1356
1386
|
def setx(self, value: Union[int, float, str, tuple, set, SimComponent, SimultanObject]):
|
1387
|
+
|
1388
|
+
# logger.debug(f'Setting property {prop_name} to {value}.')
|
1389
|
+
|
1357
1390
|
self.__property_cache__.pop(content.text_or_key, None)
|
1358
1391
|
|
1359
1392
|
slot_extension = content.slot_extension
|
@@ -1389,7 +1422,9 @@ def add_properties(prop_name: str,
|
|
1389
1422
|
return
|
1390
1423
|
|
1391
1424
|
from .type_setter_lookup import type_setter_fcn_lookup_dict
|
1392
|
-
|
1425
|
+
|
1426
|
+
setter_fcn = type_setter_fcn_lookup_dict.get(value, set_property_to_unknown_type)
|
1427
|
+
|
1393
1428
|
setter_fcn(*fcn_arg_list)
|
1394
1429
|
|
1395
1430
|
setx.__taxonomy__ = taxonomy
|
@@ -1,12 +1,11 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: PySimultan
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.5.0
|
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
|
7
7
|
Author-email: Bühler Maximilian <maximilian.buehler@tuwien.ac.at>
|
8
|
-
License
|
9
|
-
License-File: LICENSE.txt
|
8
|
+
License: MIT
|
10
9
|
Classifier: Development Status :: 4 - Beta
|
11
10
|
Classifier: Programming Language :: Python
|
12
11
|
Classifier: Programming Language :: Python :: 3.8
|
@@ -1,14 +1,14 @@
|
|
1
|
-
PySimultan2/__about__.py,sha256=
|
2
|
-
PySimultan2/__init__.py,sha256=
|
3
|
-
PySimultan2/data_model.py,sha256=
|
4
|
-
PySimultan2/default_types.py,sha256=
|
5
|
-
PySimultan2/files.py,sha256=
|
1
|
+
PySimultan2/__about__.py,sha256=r3KZ-VR8WzImzZtG_Cy9406RiC9eKWaqtTphrx4AlGw,19
|
2
|
+
PySimultan2/__init__.py,sha256=PGVR1uhY01dF5tHyad-znURUZ_LVB95vsjId2BT0aJM,3245
|
3
|
+
PySimultan2/data_model.py,sha256=wSEHnx5uU81CSbUpKkmpQ2gbWfDziDxNGIiKnF9-Bck,31731
|
4
|
+
PySimultan2/default_types.py,sha256=xJ7nSdUhNj9P_WX_OoEo6gmvJ0P3I33k160nOsMbkAU,27234
|
5
|
+
PySimultan2/files.py,sha256=_KQNn1WS9LEETSADbxaFXNaTZ9e66dAGhPU5K1iOcOk,14068
|
6
6
|
PySimultan2/multi_values.py,sha256=ZFXlTLuZo32x7_7diYAp2XEjp5uwgHLgNOzN7v74-5I,13650
|
7
|
-
PySimultan2/object_mapper.py,sha256=
|
8
|
-
PySimultan2/simultan_object.py,sha256=
|
9
|
-
PySimultan2/taxonomy_maps.py,sha256=
|
10
|
-
PySimultan2/type_setter_lookup.py,sha256=
|
11
|
-
PySimultan2/utils.py,sha256=
|
7
|
+
PySimultan2/object_mapper.py,sha256=Inx7jj8VkuvjMibWiP3PcymATllvP2prUW-pRQaT15M,15535
|
8
|
+
PySimultan2/simultan_object.py,sha256=akaSUZZWIVfwx1wT5EdOgRR2UeShUthX-LE2Uk6w8CQ,19058
|
9
|
+
PySimultan2/taxonomy_maps.py,sha256=abMB2RSKEaliW-Ewegq-Inq9npHeOD1VVrMYoKJAlC0,8762
|
10
|
+
PySimultan2/type_setter_lookup.py,sha256=WtopIR2Z3v3wNFtqmeVorH7ZUbKoJYTTe5I3vfQuKUI,3404
|
11
|
+
PySimultan2/utils.py,sha256=wIN169fAne6xc_DgppscyB17uj8pAkptyaX_89CcJrc,63110
|
12
12
|
PySimultan2/geometry/__init__.py,sha256=nJolTD1i5J8qUkOQa-r3D20aq3Co3sN31Xc0n4wJpJo,248
|
13
13
|
PySimultan2/geometry/geometry_base.py,sha256=nbb9U2W3vFviVLxISLHRi2CVyLEM-3zIKvoZ1uSYs_8,23420
|
14
14
|
PySimultan2/geometry/utils.py,sha256=J25YsK8sso_UL7xRusItQZvyjtvxdOsSPelBQYFABhY,8519
|
@@ -16,19 +16,16 @@ PySimultan2/resources/AssimpNet.dll,sha256=x8uwMHPRmEH9fDQihfEQLUdblM1u7RP-CCnUj
|
|
16
16
|
PySimultan2/resources/AvalonDock.dll,sha256=9tCcw7cpaVq0bh1H2sfcxb8EWhySmgujPs89lAqIPZs,500224
|
17
17
|
PySimultan2/resources/BruTile.dll,sha256=ZiE_vovBW_CZOjDgOn8eaq_tfWRBD3-nSEk0ctBSdKI,198144
|
18
18
|
PySimultan2/resources/ClosedXML.dll,sha256=dzkwJaBvIdou7SZSE5lsEART_jlnMMztEZu_jBuHp74,1198592
|
19
|
-
PySimultan2/resources/ComponentBuilder.dll,sha256=
|
19
|
+
PySimultan2/resources/ComponentBuilder.dll,sha256=h1muHkr2D3cITs39GEAlc73jPomuBT6tpuZaHYEAgg8,2304512
|
20
20
|
PySimultan2/resources/ComponentBuilder.dll.config,sha256=jP5s_8OMg9085DyGtrLZcguy8etqm4ra21KwDXq1sy0,3032
|
21
|
-
PySimultan2/resources/ComponentBuilder.runtimeconfig.json,sha256=
|
22
|
-
PySimultan2/resources/ComponentBuilder.xml,sha256=
|
21
|
+
PySimultan2/resources/ComponentBuilder.runtimeconfig.json,sha256=YBIGLYblUb1QapC3Td-VcI9HtfEQ_6rQssb-JbeODyA,458
|
22
|
+
PySimultan2/resources/ComponentBuilder.xml,sha256=5jkNgGaRzrSS2Umvcs_7vRuJqIZUc8GSKfAT0kfV4GA,1039253
|
23
23
|
PySimultan2/resources/ControlzEx.dll,sha256=S26xw5MnNiIoyiCmVFbFOmUx1yx_zAyXBdDSOSidZxQ,463160
|
24
24
|
PySimultan2/resources/Cyotek.Drawing.BitmapFont.dll,sha256=JG8HbAq5s796e02jB9QklO2cOyKPtHmhY6vc7KUs0OQ,41800
|
25
25
|
PySimultan2/resources/DocumentFormat.OpenXml.dll,sha256=JjiBI17BpHztipV39dQdXAjhHo6Ic0xRjijJJuBQLLo,6108592
|
26
26
|
PySimultan2/resources/DotSpatial.Projections.dll,sha256=dK4oFLcpUK3i6CZ3qIcX5B0npYd-W4hHJz7RJvM77ho,1541632
|
27
27
|
PySimultan2/resources/ExcelNumberFormat.dll,sha256=18Rbjk4QJ4MeL8jN-UH69R0opm_qz8qqc32nMmLntQc,30720
|
28
28
|
PySimultan2/resources/Fluent.dll,sha256=9b7QKKj8-Ynhe4WqSVfiP82PkxYz_kI_GXYi_KQxrEU,2598400
|
29
|
-
PySimultan2/resources/GeometryViewer.dll,sha256=XSL8_RE1WaMQEE63lWfRyT3c2mGp4he2sV3aVqZAraM,674816
|
30
|
-
PySimultan2/resources/GeometryViewer.dll.config,sha256=Mh7DX9B2wny9xirQXMGItReL1tu6dr9eZs_snTJfazc,2218
|
31
|
-
PySimultan2/resources/GeometryViewer.xml,sha256=RScFj5qG1LsCNFPMVQlX1IH6_T2oh-2oM8Ru7GJP6mw,327644
|
32
29
|
PySimultan2/resources/HelixToolkit.Core.Wpf.dll,sha256=fja1q_EVnu7tVMh_7t-fJUEllzBjPBCCJi4XUPkqdXI,586240
|
33
30
|
PySimultan2/resources/HelixToolkit.SharpDX.Core.Wpf.dll,sha256=UKAHS0g37VbEtnEOXDaEgSH5OK6Au9edAECfWWLolIQ,613376
|
34
31
|
PySimultan2/resources/HelixToolkit.SharpDX.Core.dll,sha256=rTdGZRKbcjsY-qQQDDTwwrOQRc_Nb9DpxBV_n2zfm2M,1729536
|
@@ -45,18 +42,18 @@ PySimultan2/resources/Microsoft.WindowsAPICodePack.dll,sha256=aB9FK5RWRh1onyayOe
|
|
45
42
|
PySimultan2/resources/Microsoft.Xaml.Behaviors.dll,sha256=j3gq16397qqTMYMGWqegvpOHq85gOOkSRV54UnsErco,145272
|
46
43
|
PySimultan2/resources/Newtonsoft.Json.Bson.dll,sha256=tgbl3XemJCyh8d9xfrU9lQWuVpBDMLl1wI1PLb6MMxk,90624
|
47
44
|
PySimultan2/resources/Newtonsoft.Json.dll,sha256=etsgJYQb32kqVnEuCK_nXhcwxx1keKj-1XWs1DJRpmI,639488
|
48
|
-
PySimultan2/resources/SIMULTAN.AutoUpdate.Client.dll,sha256=
|
45
|
+
PySimultan2/resources/SIMULTAN.AutoUpdate.Client.dll,sha256=dtErCiJG-De-0WAXbsCjaQiCMo9HxKdIj7xqQnPMCPs,25088
|
49
46
|
PySimultan2/resources/SIMULTAN.AutoUpdate.Client.dll.config,sha256=4rhndDRQFzX7AjPtDML_7lv2-0OHxR28slhacOQuTwg,432
|
50
|
-
PySimultan2/resources/SIMULTAN.AutoUpdate.DataTransferLibrary.dll,sha256=
|
47
|
+
PySimultan2/resources/SIMULTAN.AutoUpdate.DataTransferLibrary.dll,sha256=7dqMPmwPrrCpLS69IRuVQEux8nzA-wINx1CFG0Ji5j8,16384
|
51
48
|
PySimultan2/resources/SIMULTAN.AutoUpdate.DataTransferLibrary.dll.config,sha256=HvbeaSHEkocT9rD29HBz5uBbH3lmvCBBwzo9DD8RGo4,706
|
52
|
-
PySimultan2/resources/SIMULTAN.Lang.dll,sha256
|
53
|
-
PySimultan2/resources/SIMULTAN.Lang.xml,sha256=
|
54
|
-
PySimultan2/resources/SIMULTAN.Plugins.dll,sha256=
|
49
|
+
PySimultan2/resources/SIMULTAN.Lang.dll,sha256=v6CvF1yAP3Y_ZSDLM4M1neDslSEUoN2QWh7xp5eeb_w,2584576
|
50
|
+
PySimultan2/resources/SIMULTAN.Lang.xml,sha256=RB5sIQdIqpqyM_b9xxRprWlOs8cr6XgeDbdk7rN6Tbg,736513
|
51
|
+
PySimultan2/resources/SIMULTAN.Plugins.dll,sha256=lDyPykpM5AyhgSlU4JjZsmMqH0NjcS12zP0HFKGrwP0,18944
|
55
52
|
PySimultan2/resources/SIMULTAN.Plugins.xml,sha256=TqS3AuLxIKvHWoSkodX8RKhviwm8Isz3xC3QQcOT0rs,17708
|
56
|
-
PySimultan2/resources/SIMULTAN.UI.dll,sha256=
|
57
|
-
PySimultan2/resources/SIMULTAN.UI.xml,sha256=
|
58
|
-
PySimultan2/resources/SIMULTAN.dll,sha256=
|
59
|
-
PySimultan2/resources/SIMULTAN.xml,sha256=
|
53
|
+
PySimultan2/resources/SIMULTAN.UI.dll,sha256=_qq5w1MdpjkJMGll3osNalDilDOsVDkEadxw6I_PS-I,1216512
|
54
|
+
PySimultan2/resources/SIMULTAN.UI.xml,sha256=Ot5-CtpwT6Cng0EjmlBKHkUQFlJ4SMZYlLxqLfeuDW8,833822
|
55
|
+
PySimultan2/resources/SIMULTAN.dll,sha256=GuFGoqJH1m2k19Fb8K_yJGI55f_BmSBuyKY-Q51YZZs,1768448
|
56
|
+
PySimultan2/resources/SIMULTAN.xml,sha256=k0ZClCQhdXKWLhRRgN94WnVl2m5w7_PPN9AMBdE-sPc,1963736
|
60
57
|
PySimultan2/resources/SharpDX.D3DCompiler.dll,sha256=qyDGhqpcMo0zkNAdSdyX9sxWRxGRZq6ce4FIBXvxXSI,57856
|
61
58
|
PySimultan2/resources/SharpDX.DXGI.dll,sha256=GMTsibwN7s_JG8t-ofKaJpDpKIADw2bqAnAzdLS21zI,147968
|
62
59
|
PySimultan2/resources/SharpDX.Direct2D1.dll,sha256=HkRyV1YspAeY05q0E4pkFy3Hrrkd96fr9SzlmVnDekc,495616
|
@@ -64,19 +61,20 @@ PySimultan2/resources/SharpDX.Direct3D11.dll,sha256=XBwIVxhA-_S5haBjrGlXEwWWqIg5
|
|
64
61
|
PySimultan2/resources/SharpDX.Direct3D9.dll,sha256=aXAe2nQzrAAQq6QWudnCRc14aUdw1LtrdUG4O6zkHVU,338944
|
65
62
|
PySimultan2/resources/SharpDX.Mathematics.dll,sha256=ajtUzW3A6l7UwfVpZgpPacGrVHHP24QZmdSyZOHOThI,215552
|
66
63
|
PySimultan2/resources/SharpDX.dll,sha256=UY1FparshMs36D7iz1jFA6tqJf67jEi1MxY0DJZ-hL0,275968
|
67
|
-
PySimultan2/resources/SitePlanner.dll,sha256=a591d7c4yLZ3f-BzUKUtQb89uklzuQ1YT-UMBhsppck,4535808
|
68
|
-
PySimultan2/resources/SitePlanner.dll.config,sha256=DLowURBQA7YOMY03hQDZIGlFR0eJsnSIovgf5cKJdlY,427
|
69
|
-
PySimultan2/resources/SitePlanner.xml,sha256=80cFeETNe67PaiFk3JluQvG7p5m78GCQqybJ4gptgCM,140105
|
70
64
|
PySimultan2/resources/Sprache.Calc.dll,sha256=QyBWSMEL5UXootOCTzYWlAkDgGcseeVgDaw_W7K32zc,22528
|
71
65
|
PySimultan2/resources/Sprache.dll,sha256=4c4dDHP9ztxaBDpgWYBUhKKkzPl5eISQimpThGZl0t8,59904
|
66
|
+
PySimultan2/resources/System.Collections.Immutable.dll,sha256=YkpsmK2tsFnupt75OgF4vW0fedXRXfvGwPKONArInxk,245920
|
72
67
|
PySimultan2/resources/System.Data.OleDb.dll,sha256=-AAzdmyo01QNgD9qnUIewEImplJFVNDGUlqE17qmRYA,124024
|
73
68
|
PySimultan2/resources/System.Net.Http.Formatting.dll,sha256=xQBIin4YpqDObdqwau_5dr8XQEq54hlxV4gBgNtUqbc,179672
|
69
|
+
PySimultan2/resources/System.Reflection.Metadata.dll,sha256=Z_vYHE6IgOvBi3DLxLhfX-v6o01lTfD0B4oW6B8IsyA,475912
|
70
|
+
PySimultan2/resources/System.Reflection.MetadataLoadContext.dll,sha256=Fbu6xb2TISqYo235SFdcXBxG-0nbtA2XNftoDa4FqIA,253600
|
74
71
|
PySimultan2/resources/XAMLMarkupExtensions.dll,sha256=Ck7FAAFHqSSwMtGJebfun-88OCEplWxY2YKMwlFaF84,36864
|
75
72
|
PySimultan2/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
76
73
|
PySimultan2/resources/assimp.dll,sha256=HwfDwXqoPDTFRyoQpA3qmgZoUdFtziJkV5fNtktEZEU,6081536
|
74
|
+
PySimultan2/resources/componentmanager.user,sha256=hrzr1US4pqkFnLHXcvPkvrgGd7QvlxaV8mhS6fuikEs,760
|
77
75
|
PySimultan2/resources/defaultsettings.xml,sha256=s6Tk1tubLz5UYqXZWpD42EDHzedemRY1nEneoIVcUfg,392
|
78
76
|
PySimultan2/resources/setup.bat,sha256=fjvvYfVM6TalS-QTSiKAbAId5nTsk8kGGo06ba-wWaY,32
|
79
|
-
pysimultan-0.
|
80
|
-
pysimultan-0.
|
81
|
-
pysimultan-0.
|
82
|
-
pysimultan-0.
|
77
|
+
pysimultan-0.5.0.dist-info/METADATA,sha256=ija9DqBqK2nmbyuXJ1h6EboV-sWF_M6vx5n6IZjaQY0,2665
|
78
|
+
pysimultan-0.5.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
79
|
+
pysimultan-0.5.0.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
|
80
|
+
pysimultan-0.5.0.dist-info/RECORD,,
|
Binary file
|