PySimultan 0.5.4__py3-none-any.whl → 0.5.6__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 +1 -1
- PySimultan2/files.py +24 -4
- PySimultan2/utils.py +8 -1
- pysimultan-0.5.6.dist-info/METADATA +173 -0
- {pysimultan-0.5.4.dist-info → pysimultan-0.5.6.dist-info}/RECORD +7 -7
- pysimultan-0.5.4.dist-info/METADATA +0 -91
- {pysimultan-0.5.4.dist-info → pysimultan-0.5.6.dist-info}/WHEEL +0 -0
- {pysimultan-0.5.4.dist-info → pysimultan-0.5.6.dist-info}/licenses/LICENSE.txt +0 -0
    
        PySimultan2/__about__.py
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            version = '0.5. | 
| 1 | 
            +
            version = '0.5.6'
         | 
    
        PySimultan2/files.py
    CHANGED
    
    | @@ -129,7 +129,7 @@ def create_asset_from_string(filename: str, | |
| 129 129 |  | 
| 130 130 | 
             
                    if target_dir is not None:
         | 
| 131 131 | 
             
                        if isinstance(target_dir, DirectoryInfo):
         | 
| 132 | 
            -
                            target_dir = target_dir. | 
| 132 | 
            +
                            target_dir = target_dir.full_path
         | 
| 133 133 |  | 
| 134 134 | 
             
                        resource = data_model.add_resource(filepath,
         | 
| 135 135 | 
             
                                                           target_dir=target_dir)
         | 
| @@ -324,6 +324,11 @@ class FileInfo(object, metaclass=MetaMock): | |
| 324 324 | 
             
                    except Exception as e:
         | 
| 325 325 | 
             
                        return None
         | 
| 326 326 |  | 
| 327 | 
            +
                @property
         | 
| 328 | 
            +
                def directory(self) -> DirectoryInfo:
         | 
| 329 | 
            +
                    return DirectoryInfo(resource_entry=self.resource_entry.Parent,
         | 
| 330 | 
            +
                                         data_model=self.data_model)
         | 
| 331 | 
            +
             | 
| 327 332 | 
             
                @property
         | 
| 328 333 | 
             
                def resource_entry(self) -> Union[ResourceFileEntry, ContainedResourceFileEntry, None]:
         | 
| 329 334 | 
             
                    if self._resource_entry is None:
         | 
| @@ -505,14 +510,18 @@ class DirectoryInfo(object, metaclass=DirectoryInfoMetaMock): | |
| 505 510 |  | 
| 506 511 | 
             
                def __init__(self,
         | 
| 507 512 | 
             
                             path: Optional[str] = None,
         | 
| 513 | 
            +
                             helper_file: Optional[FileInfo] = None,
         | 
| 514 | 
            +
                             resource_entry: Optional[ResourceDirectoryEntry] = None,
         | 
| 508 515 | 
             
                             *args,
         | 
| 509 516 | 
             
                             **kwargs):
         | 
| 510 517 |  | 
| 511 518 | 
             
                    self._resource_entry: Optional[ResourceDirectoryEntry] = None
         | 
| 519 | 
            +
                    self._helper_file: Optional[FileInfo] = None
         | 
| 512 520 | 
             
                    self.data_model: Optional[DataModel] = kwargs.get('data_model', None)
         | 
| 513 521 | 
             
                    self.path: str = path
         | 
| 514 522 |  | 
| 515 | 
            -
                    self.resource_entry =  | 
| 523 | 
            +
                    self.resource_entry = resource_entry
         | 
| 524 | 
            +
                    self.helper_file = helper_file
         | 
| 516 525 |  | 
| 517 526 | 
             
                @property
         | 
| 518 527 | 
             
                def tags(self) -> List[SimTaxonomyEntry]:
         | 
| @@ -526,6 +535,17 @@ class DirectoryInfo(object, metaclass=DirectoryInfoMetaMock): | |
| 526 535 | 
             
                def relative_path(self) -> str:
         | 
| 527 536 | 
             
                    return self.resource_entry.CurrentRelativePath
         | 
| 528 537 |  | 
| 538 | 
            +
                @property
         | 
| 539 | 
            +
                def helper_file(self) -> Optional[FileInfo]:
         | 
| 540 | 
            +
                    if self._helper_file is None:
         | 
| 541 | 
            +
                        self._helper_file = self.add_file('__dir_helper_file__')
         | 
| 542 | 
            +
             | 
| 543 | 
            +
                    return self._helper_file
         | 
| 544 | 
            +
             | 
| 545 | 
            +
                @helper_file.setter
         | 
| 546 | 
            +
                def helper_file(self, value):
         | 
| 547 | 
            +
                    self._helper_file = value
         | 
| 548 | 
            +
             | 
| 529 549 | 
             
                @property
         | 
| 530 550 | 
             
                def resource_entry(self) -> Optional[ResourceDirectoryEntry]:
         | 
| 531 551 | 
             
                    if self._resource_entry is None:
         | 
| @@ -578,7 +598,7 @@ class DirectoryInfo(object, metaclass=DirectoryInfoMetaMock): | |
| 578 598 | 
             
                                                                                                                         (
         | 
| 579 599 | 
             
                                                                                                                         ResourceFileEntry,
         | 
| 580 600 | 
             
                                                                                                                         ContainedResourceFileEntry)
         | 
| 581 | 
            -
                                                                                                                         )
         | 
| 601 | 
            +
                                                                                                                         ) and entry.Name != '__dir_helper_file__'
         | 
| 582 602 | 
             
                            ]
         | 
| 583 603 |  | 
| 584 604 | 
             
                @property
         | 
| @@ -610,4 +630,4 @@ class DirectoryInfo(object, metaclass=DirectoryInfoMetaMock): | |
| 610 630 | 
             
                    add_tag_to_resource(self.resource_entry, tag)
         | 
| 611 631 |  | 
| 612 632 | 
             
                def __repr__(self):
         | 
| 613 | 
            -
                    return f'DirectoryInfo(key:{self.key}, hash: {hash(self)}; {self.full_path} | 
| 633 | 
            +
                    return f'DirectoryInfo(key:{self.key}, hash: {hash(self)}; {self.full_path})'
         | 
    
        PySimultan2/utils.py
    CHANGED
    
    | @@ -770,6 +770,13 @@ def get_resource_entry_value(obj: ResourceEntry, | |
| 770 770 | 
             
                                         data_model: DataModel = None,
         | 
| 771 771 | 
             
                                         object_mapper: PythonMapper = None) -> Union[FileInfo, DirectoryInfo]:
         | 
| 772 772 | 
             
                if isinstance(obj, (ResourceFileEntry, ContainedResourceFileEntry, LinkedResourceFileEntry)):
         | 
| 773 | 
            +
             | 
| 774 | 
            +
                    if obj.Name == '__dir_helper_file__':
         | 
| 775 | 
            +
                        return DirectoryInfo(file_path=obj.Parent.CurrentFullPath,
         | 
| 776 | 
            +
                                             resource_entry=obj.Parent,
         | 
| 777 | 
            +
                                             helper_file=obj,
         | 
| 778 | 
            +
                                             data_model=data_model)
         | 
| 779 | 
            +
             | 
| 773 780 | 
             
                    return FileInfo(file_path=obj.File.FullPath,
         | 
| 774 781 | 
             
                                    resource_entry=obj,
         | 
| 775 782 | 
             
                                    data_model=data_model)
         | 
| @@ -1203,7 +1210,7 @@ def set_property_to_directory_info(value: DirectoryInfo, | |
| 1203 1210 | 
             
                    ref_asset_idx = None
         | 
| 1204 1211 |  | 
| 1205 1212 | 
             
                add_asset_to_component(component._wrapped_obj,
         | 
| 1206 | 
            -
                                       value.resource_entry,
         | 
| 1213 | 
            +
                                       value.helper_file.resource_entry,
         | 
| 1207 1214 | 
             
                                       '0',
         | 
| 1208 1215 | 
             
                                       tag=taxonomy_entry)
         | 
| 1209 1216 |  | 
| @@ -0,0 +1,173 @@ | |
| 1 | 
            +
            Metadata-Version: 2.3
         | 
| 2 | 
            +
            Name: PySimultan
         | 
| 3 | 
            +
            Version: 0.5.6
         | 
| 4 | 
            +
            Project-URL: Documentation, https://github.com/Bühler Maximilian/PySimultan2#readme
         | 
| 5 | 
            +
            Project-URL: Issues, https://github.com/Bühler Maximilian/PySimultan2/issues
         | 
| 6 | 
            +
            Project-URL: Source, https://github.com/Bühler Maximilian/PySimultan2
         | 
| 7 | 
            +
            Author-email: Bühler Maximilian <maximilian.buehler@tuwien.ac.at>
         | 
| 8 | 
            +
            License: MIT
         | 
| 9 | 
            +
            Classifier: Development Status :: 4 - Beta
         | 
| 10 | 
            +
            Classifier: Programming Language :: Python
         | 
| 11 | 
            +
            Classifier: Programming Language :: Python :: 3.8
         | 
| 12 | 
            +
            Classifier: Programming Language :: Python :: 3.9
         | 
| 13 | 
            +
            Classifier: Programming Language :: Python :: 3.10
         | 
| 14 | 
            +
            Classifier: Programming Language :: Python :: 3.11
         | 
| 15 | 
            +
            Classifier: Programming Language :: Python :: 3.12
         | 
| 16 | 
            +
            Classifier: Programming Language :: Python :: Implementation :: CPython
         | 
| 17 | 
            +
            Classifier: Programming Language :: Python :: Implementation :: PyPy
         | 
| 18 | 
            +
            Requires-Python: >=3.8
         | 
| 19 | 
            +
            Requires-Dist: colorlog
         | 
| 20 | 
            +
            Requires-Dist: numpy
         | 
| 21 | 
            +
            Requires-Dist: pandas
         | 
| 22 | 
            +
            Requires-Dist: pyarrow
         | 
| 23 | 
            +
            Requires-Dist: pythonnet
         | 
| 24 | 
            +
            Requires-Dist: ruamel-yaml
         | 
| 25 | 
            +
            Requires-Dist: six
         | 
| 26 | 
            +
            Requires-Dist: tqdm
         | 
| 27 | 
            +
            Description-Content-Type: text/markdown
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            # pysimultan
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            [](https://pypi.org/project/pysimultan)
         | 
| 32 | 
            +
            [](https://pypi.org/project/pysimultan)
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            PySimultan is a Python library designed to facilitate the creation, manipulation, and management of SIMULTAN data models, taxonomies, and templates. It provides a structured way to define and interact with complex data structures, making it particularly useful for applications that require detailed data organization and templating.  
         | 
| 35 | 
            +
            Key Features:
         | 
| 36 | 
            +
            - Data Models: Create and manage data SIMULTAN models with ease.
         | 
| 37 | 
            +
            - Taxonomies: Define and use taxonomies to categorize and structure data.
         | 
| 38 | 
            +
            - File and Directory Management: Handle files and directories within the data models.
         | 
| 39 | 
            +
            - Mapping of Python objects to SIMULTAN data models: Map Python objects to SIMULTAN data models for easy data creation and manipulation.
         | 
| 40 | 
            +
            - Simple integration in existing Python projects: Easily integrate PySimultan into existing Python projects to enhance data management capabilities.
         | 
| 41 | 
            +
             | 
| 42 | 
            +
             | 
| 43 | 
            +
            -----
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            ## Table of Contents
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            - [Installation](#installation)
         | 
| 48 | 
            +
            - [License](#license)
         | 
| 49 | 
            +
            - [Usage](#usage)
         | 
| 50 | 
            +
            - [Change Log](#change-log)
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            ## Installation
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            ```console
         | 
| 55 | 
            +
            pip install PySimultan
         | 
| 56 | 
            +
            ```
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            ## License
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            `PySimultan` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.
         | 
| 61 | 
            +
             | 
| 62 | 
            +
             | 
| 63 | 
            +
            # Usage
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            ### Data Models
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            Create a new data model:
         | 
| 68 | 
            +
            ```python
         | 
| 69 | 
            +
            from PySimultan2 import DataModel
         | 
| 70 | 
            +
             | 
| 71 | 
            +
            # Create a new data model
         | 
| 72 | 
            +
            data_model = DataModel.create_new_project(project_path='my_project.simultan',
         | 
| 73 | 
            +
                                                      user_name='admin',
         | 
| 74 | 
            +
                                                      password='admin')
         | 
| 75 | 
            +
            ```
         | 
| 76 | 
            +
             | 
| 77 | 
            +
            Load an existing data model:
         | 
| 78 | 
            +
            ```python
         | 
| 79 | 
            +
            from PySimultan2 import DataModel
         | 
| 80 | 
            +
             | 
| 81 | 
            +
            # Load an existing data model
         | 
| 82 | 
            +
            data_model = DataModel(project_path='my_project.simultan',
         | 
| 83 | 
            +
                                   user_name='admin',
         | 
| 84 | 
            +
                                   password='admin')
         | 
| 85 | 
            +
            ```
         | 
| 86 | 
            +
             | 
| 87 | 
            +
            save the data model:
         | 
| 88 | 
            +
            ```python
         | 
| 89 | 
            +
            data_model.save()
         | 
| 90 | 
            +
            ```
         | 
| 91 | 
            +
             | 
| 92 | 
            +
            close and cleanup the data model:
         | 
| 93 | 
            +
            ```python
         | 
| 94 | 
            +
            data_model.cleanup()
         | 
| 95 | 
            +
            ```
         | 
| 96 | 
            +
             | 
| 97 | 
            +
             | 
| 98 | 
            +
            ### Mapping python to SIMULTAN
         | 
| 99 | 
            +
             | 
| 100 | 
            +
            #### Create a mapped class:
         | 
| 101 | 
            +
            ```python
         | 
| 102 | 
            +
            from PySimultan2 import DataModel, TaxonomyMap, Content, PythonMapper
         | 
| 103 | 
            +
             | 
| 104 | 
            +
            mapper = PythonMapper()
         | 
| 105 | 
            +
             | 
| 106 | 
            +
            class TestComponent(object):
         | 
| 107 | 
            +
                def __init__(self, *args, **kwargs):
         | 
| 108 | 
            +
                    self.param_1 = kwargs.get('param_1')
         | 
| 109 | 
            +
                    self.param_2 = kwargs.get('param_2')
         | 
| 110 | 
            +
             | 
| 111 | 
            +
            content0 = Content(text_or_key='param_1',  # text or key of the content/parameter/property
         | 
| 112 | 
            +
                               property_name='param_1',  # name of the generated property
         | 
| 113 | 
            +
                               type=None,  # type of the content/parameter/property
         | 
| 114 | 
            +
                               unit=None,  # unit of the content/parameter/property
         | 
| 115 | 
            +
                               documentation='param_1 to test')
         | 
| 116 | 
            +
             | 
| 117 | 
            +
            content1 = Content(text_or_key='param_2',  # text or key of the content/parameter/property
         | 
| 118 | 
            +
                               property_name='param_2',  # name of the generated property
         | 
| 119 | 
            +
                               type=None,  # type of the content/parameter/property
         | 
| 120 | 
            +
                               unit=None,  # unit of the content/parameter/property
         | 
| 121 | 
            +
                               documentation='param_2 to test')
         | 
| 122 | 
            +
             | 
| 123 | 
            +
            test_component_map = TaxonomyMap(taxonomy_name='PySimultan',
         | 
| 124 | 
            +
                                             taxonomy_key='Test',
         | 
| 125 | 
            +
                                             taxonomy_entry_name='test_component',
         | 
| 126 | 
            +
                                             taxonomy_entry_key='test_component',
         | 
| 127 | 
            +
                                             content=[content0, content1],
         | 
| 128 | 
            +
                                             )
         | 
| 129 | 
            +
             | 
| 130 | 
            +
            mapper.register(test_component_map.taxonomy_entry_key, TestComponent, taxonomy_map=test_component_map)
         | 
| 131 | 
            +
            ```
         | 
| 132 | 
            +
             | 
| 133 | 
            +
            #### Create an instance of the mapped class:
         | 
| 134 | 
            +
            ```python
         | 
| 135 | 
            +
            # get the mapped class
         | 
| 136 | 
            +
            mapped_test_component_cls = mapper.get_mapped_class('test_component')
         | 
| 137 | 
            +
             | 
| 138 | 
            +
            # create an instance of the mapped class
         | 
| 139 | 
            +
            mapped_test_component = mapped_test_component_cls(param_1='value1', 
         | 
| 140 | 
            +
                                                              param_2='value2',
         | 
| 141 | 
            +
                                                              data_model=data_model)
         | 
| 142 | 
            +
             | 
| 143 | 
            +
            # save the data_model
         | 
| 144 | 
            +
            data_model.save()
         | 
| 145 | 
            +
             | 
| 146 | 
            +
            # cleanup the data_model
         | 
| 147 | 
            +
            data_model.cleanup()
         | 
| 148 | 
            +
            ```
         | 
| 149 | 
            +
             | 
| 150 | 
            +
            #### Load an instance of the mapped class:
         | 
| 151 | 
            +
            ```python
         | 
| 152 | 
            +
            # load the data_model
         | 
| 153 | 
            +
            data_model = DataModel(project_path='my_project.simultan',
         | 
| 154 | 
            +
                                   user_name='admin',
         | 
| 155 | 
            +
                                   password='admin')
         | 
| 156 | 
            +
                                   
         | 
| 157 | 
            +
            # get the mapped class
         | 
| 158 | 
            +
            mapped_test_component_cls = mapper.get_mapped_class('test_component')
         | 
| 159 | 
            +
             | 
| 160 | 
            +
            # get the instances of the mapped class
         | 
| 161 | 
            +
            instances = mapped_test_component_cls.cls_instaces
         | 
| 162 | 
            +
             | 
| 163 | 
            +
            print(instances[0].param_1)
         | 
| 164 | 
            +
            ```
         | 
| 165 | 
            +
             | 
| 166 | 
            +
             | 
| 167 | 
            +
            # Change Log
         | 
| 168 | 
            +
             | 
| 169 | 
            +
            ## [0.4.20] - 2024-07-01
         | 
| 170 | 
            +
            - Fixed Bug in nested dictionary creation
         | 
| 171 | 
            +
             | 
| 172 | 
            +
            ## [0.4.19] - 2024-07-01
         | 
| 173 | 
            +
            - Refactored dictionaries 
         | 
| @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            PySimultan2/CHANGELOG.md,sha256=LeVHBC6dGDwDwgXipNrwgvgews9QkyjsqtYa_jiLMm0,217
         | 
| 2 | 
            -
            PySimultan2/__about__.py,sha256= | 
| 2 | 
            +
            PySimultan2/__about__.py,sha256=ahwIJXU28jCG9DVuIM_KtpxcsovPdHHik2HOD6G7DgQ,19
         | 
| 3 3 | 
             
            PySimultan2/__init__.py,sha256=PGVR1uhY01dF5tHyad-znURUZ_LVB95vsjId2BT0aJM,3245
         | 
| 4 4 | 
             
            PySimultan2/data_model.py,sha256=YYtfcR6jvGztng6Be8Vw9FQ02cPkl8ATHTZMoIu1ABQ,34140
         | 
| 5 5 | 
             
            PySimultan2/default_types.py,sha256=K-Eka5BCKk8DT3HU5761Ym_-ZFmu1_Dro0zW0LVGoHA,27157
         | 
| 6 | 
            -
            PySimultan2/files.py,sha256= | 
| 6 | 
            +
            PySimultan2/files.py,sha256=BCETl4M8qedw7Bjt8QXvY6Rl3U6Lou36XqPY2ST1o9Q,22447
         | 
| 7 7 | 
             
            PySimultan2/multi_values.py,sha256=ZFXlTLuZo32x7_7diYAp2XEjp5uwgHLgNOzN7v74-5I,13650
         | 
| 8 8 | 
             
            PySimultan2/object_mapper.py,sha256=_SQye38NmIr4m_-X9CuvUJnVDBmjmUDdPH2bnaxpzKY,18546
         | 
| 9 9 | 
             
            PySimultan2/simultan_object.py,sha256=akaSUZZWIVfwx1wT5EdOgRR2UeShUthX-LE2Uk6w8CQ,19058
         | 
| 10 10 | 
             
            PySimultan2/taxonomy_maps.py,sha256=abMB2RSKEaliW-Ewegq-Inq9npHeOD1VVrMYoKJAlC0,8762
         | 
| 11 11 | 
             
            PySimultan2/type_setter_lookup.py,sha256=px92E-BlnvY-11F-F7L7cOwbE1_L8FQVqi-23nJi5j4,3518
         | 
| 12 | 
            -
            PySimultan2/utils.py,sha256= | 
| 12 | 
            +
            PySimultan2/utils.py,sha256=TOrMMTh6n63VgjEGVX6j67_jhUx4ImFI39X61g0OegQ,66692
         | 
| 13 13 | 
             
            PySimultan2/geometry/__init__.py,sha256=nJolTD1i5J8qUkOQa-r3D20aq3Co3sN31Xc0n4wJpJo,248
         | 
| 14 14 | 
             
            PySimultan2/geometry/geometry_base.py,sha256=nbb9U2W3vFviVLxISLHRi2CVyLEM-3zIKvoZ1uSYs_8,23420
         | 
| 15 15 | 
             
            PySimultan2/geometry/utils.py,sha256=J25YsK8sso_UL7xRusItQZvyjtvxdOsSPelBQYFABhY,8519
         | 
| @@ -75,7 +75,7 @@ PySimultan2/resources/assimp.dll,sha256=HwfDwXqoPDTFRyoQpA3qmgZoUdFtziJkV5fNtktE | |
| 75 75 | 
             
            PySimultan2/resources/componentmanager.user,sha256=hrzr1US4pqkFnLHXcvPkvrgGd7QvlxaV8mhS6fuikEs,760
         | 
| 76 76 | 
             
            PySimultan2/resources/defaultsettings.xml,sha256=s6Tk1tubLz5UYqXZWpD42EDHzedemRY1nEneoIVcUfg,392
         | 
| 77 77 | 
             
            PySimultan2/resources/setup.bat,sha256=fjvvYfVM6TalS-QTSiKAbAId5nTsk8kGGo06ba-wWaY,32
         | 
| 78 | 
            -
            pysimultan-0.5. | 
| 79 | 
            -
            pysimultan-0.5. | 
| 80 | 
            -
            pysimultan-0.5. | 
| 81 | 
            -
            pysimultan-0.5. | 
| 78 | 
            +
            pysimultan-0.5.6.dist-info/METADATA,sha256=MblBIAKHvlsGbA3u5BVv5rycD0yqSqph_B4nNyEyfOA,5815
         | 
| 79 | 
            +
            pysimultan-0.5.6.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
         | 
| 80 | 
            +
            pysimultan-0.5.6.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
         | 
| 81 | 
            +
            pysimultan-0.5.6.dist-info/RECORD,,
         | 
| @@ -1,91 +0,0 @@ | |
| 1 | 
            -
            Metadata-Version: 2.3
         | 
| 2 | 
            -
            Name: PySimultan
         | 
| 3 | 
            -
            Version: 0.5.4
         | 
| 4 | 
            -
            Project-URL: Documentation, https://github.com/Bühler Maximilian/PySimultan2#readme
         | 
| 5 | 
            -
            Project-URL: Issues, https://github.com/Bühler Maximilian/PySimultan2/issues
         | 
| 6 | 
            -
            Project-URL: Source, https://github.com/Bühler Maximilian/PySimultan2
         | 
| 7 | 
            -
            Author-email: Bühler Maximilian <maximilian.buehler@tuwien.ac.at>
         | 
| 8 | 
            -
            License: MIT
         | 
| 9 | 
            -
            Classifier: Development Status :: 4 - Beta
         | 
| 10 | 
            -
            Classifier: Programming Language :: Python
         | 
| 11 | 
            -
            Classifier: Programming Language :: Python :: 3.8
         | 
| 12 | 
            -
            Classifier: Programming Language :: Python :: 3.9
         | 
| 13 | 
            -
            Classifier: Programming Language :: Python :: 3.10
         | 
| 14 | 
            -
            Classifier: Programming Language :: Python :: 3.11
         | 
| 15 | 
            -
            Classifier: Programming Language :: Python :: 3.12
         | 
| 16 | 
            -
            Classifier: Programming Language :: Python :: Implementation :: CPython
         | 
| 17 | 
            -
            Classifier: Programming Language :: Python :: Implementation :: PyPy
         | 
| 18 | 
            -
            Requires-Python: >=3.8
         | 
| 19 | 
            -
            Requires-Dist: colorlog
         | 
| 20 | 
            -
            Requires-Dist: numpy
         | 
| 21 | 
            -
            Requires-Dist: pandas
         | 
| 22 | 
            -
            Requires-Dist: pyarrow
         | 
| 23 | 
            -
            Requires-Dist: pythonnet
         | 
| 24 | 
            -
            Requires-Dist: ruamel-yaml
         | 
| 25 | 
            -
            Requires-Dist: six
         | 
| 26 | 
            -
            Requires-Dist: tqdm
         | 
| 27 | 
            -
            Description-Content-Type: text/markdown
         | 
| 28 | 
            -
             | 
| 29 | 
            -
            # pysimultan_api
         | 
| 30 | 
            -
             | 
| 31 | 
            -
            [](https://pypi.org/project/pysimultan-api)
         | 
| 32 | 
            -
            [](https://pypi.org/project/pysimultan-api)
         | 
| 33 | 
            -
             | 
| 34 | 
            -
            -----
         | 
| 35 | 
            -
             | 
| 36 | 
            -
            ## Table of Contents
         | 
| 37 | 
            -
             | 
| 38 | 
            -
            - [Installation](#installation)
         | 
| 39 | 
            -
            - [License](#license)
         | 
| 40 | 
            -
            - [Usage](#usage)
         | 
| 41 | 
            -
            - [FreeCAD support](#freecad-support)
         | 
| 42 | 
            -
            - [Change Log](#change-log)
         | 
| 43 | 
            -
             | 
| 44 | 
            -
            ## Installation
         | 
| 45 | 
            -
             | 
| 46 | 
            -
            ```console
         | 
| 47 | 
            -
            pip install PySimultan
         | 
| 48 | 
            -
            ```
         | 
| 49 | 
            -
             | 
| 50 | 
            -
            ## License
         | 
| 51 | 
            -
             | 
| 52 | 
            -
            `pysimultan-api` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.
         | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
            ### Usage
         | 
| 56 | 
            -
             | 
| 57 | 
            -
            ```python
         | 
| 58 | 
            -
            from PySimultan2 import DataModel, Content, TaxonomyMap, PythonMapper
         | 
| 59 | 
            -
            ```
         | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
            ## FreeCAD support
         | 
| 63 | 
            -
             | 
| 64 | 
            -
            PySimultanUI looks for a FreeCAD version in C:\Program Files\FreeCAD. If you don't have FreeCAD installed, you can 
         | 
| 65 | 
            -
            download it from the FreeCAD website or use the FreeCAD version provided in the FreeCAD-Bundle repository.
         | 
| 66 | 
            -
            Go to https://github.com/FreeCAD/FreeCAD-Bundle/releases/tag/weekly-builds and download the latest version 
         | 
| 67 | 
            -
            of FreeCAD for your OS. The version must be compiled with the same python version you are using (e.g. py311). 
         | 
| 68 | 
            -
             | 
| 69 | 
            -
            Extract the zip file to C:\Program Files\FreeCAD
         | 
| 70 | 
            -
             | 
| 71 | 
            -
            The directory structure should look like this:
         | 
| 72 | 
            -
             | 
| 73 | 
            -
            ```
         | 
| 74 | 
            -
            C:\Program Files\FreeCAD
         | 
| 75 | 
            -
            │   ...
         | 
| 76 | 
            -
            │   FreeCAD_weekly-builds-37730-conda-Windows-x86_64-py311
         | 
| 77 | 
            -
            │       │   bin
         | 
| 78 | 
            -
            │       │   lib
         | 
| 79 | 
            -
            │       │   ...
         | 
| 80 | 
            -
            │
         | 
| 81 | 
            -
             | 
| 82 | 
            -
            ```
         | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
            # Change Log
         | 
| 86 | 
            -
             | 
| 87 | 
            -
            ## [0.4.20] - 2024-07-01
         | 
| 88 | 
            -
            - Fixed Bug in nested dictionary creation
         | 
| 89 | 
            -
             | 
| 90 | 
            -
            ## [0.4.19] - 2024-07-01
         | 
| 91 | 
            -
            - Refactored dictionaries 
         | 
| 
            File without changes
         | 
| 
            File without changes
         |