ansys-systemcoupling-core 0.9.1__py3-none-any.whl → 0.10.1__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.

Potentially problematic release.


This version of ansys-systemcoupling-core might be problematic. Click here for more details.

Files changed (129) hide show
  1. ansys/systemcoupling/core/__init__.py +1 -1
  2. ansys/systemcoupling/core/adaptor/api_25_2/_add_participant.py +80 -0
  3. ansys/systemcoupling/core/adaptor/api_25_2/_clear_state.py +13 -0
  4. ansys/systemcoupling/core/adaptor/api_25_2/_solve.py +13 -0
  5. ansys/systemcoupling/core/adaptor/api_25_2/abort.py +39 -0
  6. ansys/systemcoupling/core/adaptor/api_25_2/activate_hidden.py +46 -0
  7. ansys/systemcoupling/core/adaptor/api_25_2/add_aerodamping_data_transfers.py +43 -0
  8. ansys/systemcoupling/core/adaptor/api_25_2/add_data_transfer.py +190 -0
  9. ansys/systemcoupling/core/adaptor/api_25_2/add_expression_function.py +61 -0
  10. ansys/systemcoupling/core/adaptor/api_25_2/add_flow_boundary_data_transfers.py +32 -0
  11. ansys/systemcoupling/core/adaptor/api_25_2/add_fsi_data_transfers.py +43 -0
  12. ansys/systemcoupling/core/adaptor/api_25_2/add_interface.py +77 -0
  13. ansys/systemcoupling/core/adaptor/api_25_2/add_named_expression.py +42 -0
  14. ansys/systemcoupling/core/adaptor/api_25_2/add_ordered_data_transfers.py +41 -0
  15. ansys/systemcoupling/core/adaptor/api_25_2/add_participant.py +177 -0
  16. ansys/systemcoupling/core/adaptor/api_25_2/add_reference_frame.py +40 -0
  17. ansys/systemcoupling/core/adaptor/api_25_2/add_thermal_data_transfers.py +43 -0
  18. ansys/systemcoupling/core/adaptor/api_25_2/add_transformation.py +102 -0
  19. ansys/systemcoupling/core/adaptor/api_25_2/analysis_control.py +333 -0
  20. ansys/systemcoupling/core/adaptor/api_25_2/apip.py +33 -0
  21. ansys/systemcoupling/core/adaptor/api_25_2/ascii_output.py +44 -0
  22. ansys/systemcoupling/core/adaptor/api_25_2/attribute.py +20 -0
  23. ansys/systemcoupling/core/adaptor/api_25_2/attribute_child.py +74 -0
  24. ansys/systemcoupling/core/adaptor/api_25_2/automatic_alignment_options.py +46 -0
  25. ansys/systemcoupling/core/adaptor/api_25_2/available_ports.py +40 -0
  26. ansys/systemcoupling/core/adaptor/api_25_2/avoid_data_reconstruction.py +56 -0
  27. ansys/systemcoupling/core/adaptor/api_25_2/case_root.py +62 -0
  28. ansys/systemcoupling/core/adaptor/api_25_2/clear_state.py +18 -0
  29. ansys/systemcoupling/core/adaptor/api_25_2/connect_ensight_dvs.py +41 -0
  30. ansys/systemcoupling/core/adaptor/api_25_2/coupling_interface.py +20 -0
  31. ansys/systemcoupling/core/adaptor/api_25_2/coupling_interface_child.py +42 -0
  32. ansys/systemcoupling/core/adaptor/api_25_2/coupling_participant.py +23 -0
  33. ansys/systemcoupling/core/adaptor/api_25_2/coupling_participant_child.py +272 -0
  34. ansys/systemcoupling/core/adaptor/api_25_2/create_restart_point.py +28 -0
  35. ansys/systemcoupling/core/adaptor/api_25_2/data_transfer.py +20 -0
  36. ansys/systemcoupling/core/adaptor/api_25_2/data_transfer_child.py +195 -0
  37. ansys/systemcoupling/core/adaptor/api_25_2/delete_snapshot.py +30 -0
  38. ansys/systemcoupling/core/adaptor/api_25_2/delete_transformation.py +42 -0
  39. ansys/systemcoupling/core/adaptor/api_25_2/dimensionality.py +96 -0
  40. ansys/systemcoupling/core/adaptor/api_25_2/execution_control.py +266 -0
  41. ansys/systemcoupling/core/adaptor/api_25_2/execution_control_1.py +24 -0
  42. ansys/systemcoupling/core/adaptor/api_25_2/expression.py +20 -0
  43. ansys/systemcoupling/core/adaptor/api_25_2/expression_child.py +36 -0
  44. ansys/systemcoupling/core/adaptor/api_25_2/expression_function.py +20 -0
  45. ansys/systemcoupling/core/adaptor/api_25_2/expression_function_child.py +46 -0
  46. ansys/systemcoupling/core/adaptor/api_25_2/external_data_file.py +24 -0
  47. ansys/systemcoupling/core/adaptor/api_25_2/fluent_input.py +77 -0
  48. ansys/systemcoupling/core/adaptor/api_25_2/fmu_parameter.py +20 -0
  49. ansys/systemcoupling/core/adaptor/api_25_2/fmu_parameter_child.py +164 -0
  50. ansys/systemcoupling/core/adaptor/api_25_2/generate_input_file.py +53 -0
  51. ansys/systemcoupling/core/adaptor/api_25_2/get_add_data_transfer_group_commands.py +29 -0
  52. ansys/systemcoupling/core/adaptor/api_25_2/get_execution_command.py +30 -0
  53. ansys/systemcoupling/core/adaptor/api_25_2/get_machines.py +34 -0
  54. ansys/systemcoupling/core/adaptor/api_25_2/get_mode_shape_variables.py +29 -0
  55. ansys/systemcoupling/core/adaptor/api_25_2/get_region_names_for_participant.py +32 -0
  56. ansys/systemcoupling/core/adaptor/api_25_2/get_setup_summary.py +25 -0
  57. ansys/systemcoupling/core/adaptor/api_25_2/get_status_messages.py +52 -0
  58. ansys/systemcoupling/core/adaptor/api_25_2/get_supported_participant_types.py +13 -0
  59. ansys/systemcoupling/core/adaptor/api_25_2/get_thermal_data_transfer_options.py +32 -0
  60. ansys/systemcoupling/core/adaptor/api_25_2/get_transformation.py +43 -0
  61. ansys/systemcoupling/core/adaptor/api_25_2/global_stabilization.py +155 -0
  62. ansys/systemcoupling/core/adaptor/api_25_2/has_input_file_changed.py +36 -0
  63. ansys/systemcoupling/core/adaptor/api_25_2/import_system_coupling_input_file.py +36 -0
  64. ansys/systemcoupling/core/adaptor/api_25_2/initialize.py +27 -0
  65. ansys/systemcoupling/core/adaptor/api_25_2/instancing.py +25 -0
  66. ansys/systemcoupling/core/adaptor/api_25_2/instancing_child.py +114 -0
  67. ansys/systemcoupling/core/adaptor/api_25_2/interrupt.py +39 -0
  68. ansys/systemcoupling/core/adaptor/api_25_2/library.py +37 -0
  69. ansys/systemcoupling/core/adaptor/api_25_2/live_visualization.py +20 -0
  70. ansys/systemcoupling/core/adaptor/api_25_2/live_visualization_child.py +100 -0
  71. ansys/systemcoupling/core/adaptor/api_25_2/map.py +19 -0
  72. ansys/systemcoupling/core/adaptor/api_25_2/mapping_control.py +273 -0
  73. ansys/systemcoupling/core/adaptor/api_25_2/open.py +107 -0
  74. ansys/systemcoupling/core/adaptor/api_25_2/open_results_in_ensight.py +56 -0
  75. ansys/systemcoupling/core/adaptor/api_25_2/open_snapshot.py +37 -0
  76. ansys/systemcoupling/core/adaptor/api_25_2/output_control.py +134 -0
  77. ansys/systemcoupling/core/adaptor/api_25_2/parameter.py +20 -0
  78. ansys/systemcoupling/core/adaptor/api_25_2/parameter_child.py +60 -0
  79. ansys/systemcoupling/core/adaptor/api_25_2/partition_participants.py +148 -0
  80. ansys/systemcoupling/core/adaptor/api_25_2/properties.py +36 -0
  81. ansys/systemcoupling/core/adaptor/api_25_2/record_interactions.py +46 -0
  82. ansys/systemcoupling/core/adaptor/api_25_2/reference_frame.py +20 -0
  83. ansys/systemcoupling/core/adaptor/api_25_2/reference_frame_child.py +71 -0
  84. ansys/systemcoupling/core/adaptor/api_25_2/region.py +20 -0
  85. ansys/systemcoupling/core/adaptor/api_25_2/region_child.py +71 -0
  86. ansys/systemcoupling/core/adaptor/api_25_2/reload_expression_function_modules.py +14 -0
  87. ansys/systemcoupling/core/adaptor/api_25_2/results.py +89 -0
  88. ansys/systemcoupling/core/adaptor/api_25_2/save.py +53 -0
  89. ansys/systemcoupling/core/adaptor/api_25_2/save_snapshot.py +54 -0
  90. ansys/systemcoupling/core/adaptor/api_25_2/setup_root.py +243 -0
  91. ansys/systemcoupling/core/adaptor/api_25_2/show_plot.py +75 -0
  92. ansys/systemcoupling/core/adaptor/api_25_2/shutdown.py +25 -0
  93. ansys/systemcoupling/core/adaptor/api_25_2/side.py +20 -0
  94. ansys/systemcoupling/core/adaptor/api_25_2/side_child.py +56 -0
  95. ansys/systemcoupling/core/adaptor/api_25_2/solution_control.py +127 -0
  96. ansys/systemcoupling/core/adaptor/api_25_2/solution_root.py +134 -0
  97. ansys/systemcoupling/core/adaptor/api_25_2/solve.py +30 -0
  98. ansys/systemcoupling/core/adaptor/api_25_2/stabilization.py +157 -0
  99. ansys/systemcoupling/core/adaptor/api_25_2/step.py +57 -0
  100. ansys/systemcoupling/core/adaptor/api_25_2/transformation.py +21 -0
  101. ansys/systemcoupling/core/adaptor/api_25_2/transformation_child.py +62 -0
  102. ansys/systemcoupling/core/adaptor/api_25_2/type.py +39 -0
  103. ansys/systemcoupling/core/adaptor/api_25_2/unmapped_value_options.py +158 -0
  104. ansys/systemcoupling/core/adaptor/api_25_2/update_control.py +43 -0
  105. ansys/systemcoupling/core/adaptor/api_25_2/update_interfaces.py +19 -0
  106. ansys/systemcoupling/core/adaptor/api_25_2/update_participant.py +61 -0
  107. ansys/systemcoupling/core/adaptor/api_25_2/variable.py +20 -0
  108. ansys/systemcoupling/core/adaptor/api_25_2/variable_child.py +231 -0
  109. ansys/systemcoupling/core/adaptor/api_25_2/write_csv_chart_files.py +21 -0
  110. ansys/systemcoupling/core/adaptor/api_25_2/write_ensight.py +46 -0
  111. ansys/systemcoupling/core/adaptor/api_25_2/write_target_data.py +32 -0
  112. ansys/systemcoupling/core/adaptor/impl/get_syc_version.py +4 -1
  113. ansys/systemcoupling/core/adaptor/impl/injected_commands.py +3 -1
  114. ansys/systemcoupling/core/charts/csv_chartdata.py +4 -3
  115. ansys/systemcoupling/core/charts/plot_functions.py +12 -4
  116. ansys/systemcoupling/core/charts/plotter.py +3 -2
  117. ansys/systemcoupling/core/client/grpc_client.py +11 -2
  118. ansys/systemcoupling/core/client/syc_container.py +40 -35
  119. ansys/systemcoupling/core/client/syc_process.py +5 -2
  120. ansys/systemcoupling/core/native_api/datamodel_metadata.py +3 -2
  121. ansys/systemcoupling/core/native_api/object_path.py +2 -1
  122. ansys/systemcoupling/core/syc_version.py +1 -1
  123. ansys/systemcoupling/core/util/assertion.py +38 -0
  124. ansys/systemcoupling/core/util/file_transfer.py +2 -1
  125. ansys/systemcoupling/core/util/yaml_helper.py +5 -5
  126. {ansys_systemcoupling_core-0.9.1.dist-info → ansys_systemcoupling_core-0.10.1.dist-info}/METADATA +16 -10
  127. {ansys_systemcoupling_core-0.9.1.dist-info → ansys_systemcoupling_core-0.10.1.dist-info}/RECORD +129 -18
  128. {ansys_systemcoupling_core-0.9.1.dist-info → ansys_systemcoupling_core-0.10.1.dist-info}/WHEEL +0 -0
  129. {ansys_systemcoupling_core-0.9.1.dist-info → ansys_systemcoupling_core-0.10.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,43 @@
1
+ #
2
+ # This is an auto-generated file. DO NOT EDIT!
3
+ #
4
+
5
+ from ansys.systemcoupling.core.adaptor.impl.types import *
6
+
7
+
8
+ class update_control(Container):
9
+ """
10
+ Configure update controls.
11
+ """
12
+
13
+ syc_name = "UpdateControl"
14
+
15
+ property_names_types = [
16
+ ("option", "Option", "str"),
17
+ ("update_frequency", "UpdateFrequency", "int"),
18
+ ]
19
+
20
+ @property
21
+ def option(self) -> str:
22
+ """Specifies how often the participant will perform updates.
23
+
24
+ Possible values:
25
+
26
+ - \"ProgramControlled\"
27
+ - \"EveryIteration\"
28
+ - \"StepInterval\"
29
+ - \"Suspended\" """
30
+ return self.get_property_state("option")
31
+
32
+ @option.setter
33
+ def option(self, value: str):
34
+ self.set_property_state("option", value)
35
+
36
+ @property
37
+ def update_frequency(self) -> int:
38
+ """Specify update frequency."""
39
+ return self.get_property_state("update_frequency")
40
+
41
+ @update_frequency.setter
42
+ def update_frequency(self, value: int):
43
+ self.set_property_state("update_frequency", value)
@@ -0,0 +1,19 @@
1
+ #
2
+ # This is an auto-generated file. DO NOT EDIT!
3
+ #
4
+
5
+ from ansys.systemcoupling.core.adaptor.impl.types import *
6
+
7
+
8
+ class update_interfaces(Command):
9
+ """
10
+ Command to apply transformation and instance defined in the interfaces.
11
+ And display mapping mesh with the transformation and instance applied in the
12
+ System Coupling viewer.
13
+
14
+ The purpose of this command is to visually confirm the correctness of coupling
15
+ interfaces definition, alignment and instancing settings, and to allow modifying
16
+ those settings to fix any issues ("nudge" the alignment, etc.)
17
+ """
18
+
19
+ syc_name = "UpdateInterfaces"
@@ -0,0 +1,61 @@
1
+ #
2
+ # This is an auto-generated file. DO NOT EDIT!
3
+ #
4
+
5
+ from ansys.systemcoupling.core.adaptor.impl.types import *
6
+
7
+
8
+ class update_participant(Command):
9
+ """
10
+ Given the name of a participant, updates the state of the participant.
11
+
12
+ Available for DEFAULT-SRV, CFD-SRV, MECH-SRV, and SCDT-SRV and
13
+ AEDT participants.
14
+
15
+ As part of the update, System Coupling updates all regions, variables,
16
+ and parameters defined in the participant, including all variable
17
+ attributes. Regions, variables, and parameters may be added to the
18
+ participant but may not be removed.
19
+
20
+ You may specify an input file using an optional argument. If an input
21
+ file is not provided, then the original input file will be reimported.
22
+
23
+ Note: AEDT participants must be updated using an scp file.
24
+
25
+ If the update process fails, System Coupling displays an error. In this
26
+ case, you can either update the setup in the participant application to
27
+ remove any issues with the update process or delete the participant
28
+ from the analysis and then re-add it using the updated input file.
29
+
30
+ Parameters
31
+ ----------
32
+ participant_name : str
33
+ Participant name. Must be the name of an existing participant.
34
+ input_file : str, optional
35
+ Name of the input file for the participant to be added.
36
+ Currently supported formats are SCP files, mechanical server
37
+ (\*.rst) files, cfd server (\*.csv) files, and system coupling
38
+ data server (\*.scdt/axdt/csv) files.
39
+
40
+ """
41
+
42
+ syc_name = "UpdateParticipant"
43
+
44
+ argument_names = ["participant_name", "input_file"]
45
+
46
+ class participant_name(String):
47
+ """
48
+ Participant name. Must be the name of an existing participant.
49
+ """
50
+
51
+ syc_name = "ParticipantName"
52
+
53
+ class input_file(String):
54
+ """
55
+ Name of the input file for the participant to be added.
56
+ Currently supported formats are SCP files, mechanical server
57
+ (\*.rst) files, cfd server (\*.csv) files, and system coupling
58
+ data server (\*.scdt/axdt/csv) files.
59
+ """
60
+
61
+ syc_name = "InputFile"
@@ -0,0 +1,20 @@
1
+ #
2
+ # This is an auto-generated file. DO NOT EDIT!
3
+ #
4
+
5
+ from ansys.systemcoupling.core.adaptor.impl.types import *
6
+
7
+ from .variable_child import variable_child
8
+
9
+
10
+ class variable(NamedContainer[variable_child]):
11
+ """
12
+ Configure a variable for the coupling participant.
13
+ """
14
+
15
+ syc_name = "Variable"
16
+
17
+ child_object_type: variable_child = variable_child
18
+ """
19
+ child_object_type of variable.
20
+ """
@@ -0,0 +1,231 @@
1
+ #
2
+ # This is an auto-generated file. DO NOT EDIT!
3
+ #
4
+
5
+ from ansys.systemcoupling.core.adaptor.impl.types import *
6
+
7
+ from .attribute import attribute
8
+
9
+
10
+ class variable_child(Container):
11
+ """
12
+ Configure a variable for the coupling participant.
13
+ """
14
+
15
+ syc_name = "child_object_type"
16
+
17
+ child_names = ["attribute"]
18
+
19
+ attribute: attribute = attribute
20
+ """
21
+ attribute child of variable_child.
22
+ """
23
+ property_names_types = [
24
+ ("quantity_type", "QuantityType", "str"),
25
+ ("location", "Location", "str"),
26
+ ("participant_display_name", "ParticipantDisplayName", "str"),
27
+ ("display_name", "DisplayName", "str"),
28
+ ("data_type", "DataType", "str"),
29
+ ("real_initial_value", "RealInitialValue", "RealType"),
30
+ ("integer_initial_value", "IntegerInitialValue", "int"),
31
+ ("logical_initial_value", "LogicalInitialValue", "bool"),
32
+ ("string_initial_value", "StringInitialValue", "str"),
33
+ ("enumeration_initial_value", "EnumerationInitialValue", "int"),
34
+ ("real_min", "RealMin", "RealType"),
35
+ ("real_max", "RealMax", "RealType"),
36
+ ("integer_min", "IntegerMin", "int"),
37
+ ("integer_max", "IntegerMax", "int"),
38
+ ("enumeration_min", "EnumerationMin", "int"),
39
+ ("enumeration_max", "EnumerationMax", "int"),
40
+ ("tensor_type", "TensorType", "str"),
41
+ ("is_extensive", "IsExtensive", "bool"),
42
+ ]
43
+
44
+ @property
45
+ def quantity_type(self) -> str:
46
+ """Quantity type of the variable.
47
+
48
+ Allowed values:
49
+
50
+ - \"Unspecified\"
51
+ - \"Force\"
52
+ - \"Incremental Displacement\"
53
+ - \"Temperature\"
54
+ - \"Heat Rate\"
55
+ - \"Heat Transfer Coefficient\"
56
+ - \"Convection Reference Temperature\"
57
+ - \"Mode Shape\"
58
+ - \"Electrical Conductivity\" """
59
+ return self.get_property_state("quantity_type")
60
+
61
+ @quantity_type.setter
62
+ def quantity_type(self, value: str):
63
+ self.set_property_state("quantity_type", value)
64
+
65
+ @property
66
+ def location(self) -> str:
67
+ """Data location of the variable (\"Node\" or \"Element\")."""
68
+ return self.get_property_state("location")
69
+
70
+ @location.setter
71
+ def location(self, value: str):
72
+ self.set_property_state("location", value)
73
+
74
+ @property
75
+ def participant_display_name(self) -> str:
76
+ """Variable's display name as defined by the participant solver."""
77
+ return self.get_property_state("participant_display_name")
78
+
79
+ @participant_display_name.setter
80
+ def participant_display_name(self, value: str):
81
+ self.set_property_state("participant_display_name", value)
82
+
83
+ @property
84
+ def display_name(self) -> str:
85
+ """Variable's display name as defined in System Coupling."""
86
+ return self.get_property_state("display_name")
87
+
88
+ @display_name.setter
89
+ def display_name(self, value: str):
90
+ self.set_property_state("display_name", value)
91
+
92
+ @property
93
+ def data_type(self) -> str:
94
+ """Variable's data type as reported by the participant.
95
+
96
+ Allowed values (non-FMU case):
97
+
98
+ - Real
99
+ - Complex
100
+
101
+ Allowed values (FMU):
102
+
103
+ - Real
104
+ - Integer
105
+ - Logical
106
+ - String
107
+ - Enumeration"""
108
+ return self.get_property_state("data_type")
109
+
110
+ @data_type.setter
111
+ def data_type(self, value: str):
112
+ self.set_property_state("data_type", value)
113
+
114
+ @property
115
+ def real_initial_value(self) -> RealType:
116
+ """Real data start value."""
117
+ return self.get_property_state("real_initial_value")
118
+
119
+ @real_initial_value.setter
120
+ def real_initial_value(self, value: RealType):
121
+ self.set_property_state("real_initial_value", value)
122
+
123
+ @property
124
+ def integer_initial_value(self) -> int:
125
+ """Integer data start value."""
126
+ return self.get_property_state("integer_initial_value")
127
+
128
+ @integer_initial_value.setter
129
+ def integer_initial_value(self, value: int):
130
+ self.set_property_state("integer_initial_value", value)
131
+
132
+ @property
133
+ def logical_initial_value(self) -> bool:
134
+ """Logical data start value."""
135
+ return self.get_property_state("logical_initial_value")
136
+
137
+ @logical_initial_value.setter
138
+ def logical_initial_value(self, value: bool):
139
+ self.set_property_state("logical_initial_value", value)
140
+
141
+ @property
142
+ def string_initial_value(self) -> str:
143
+ """String data start value."""
144
+ return self.get_property_state("string_initial_value")
145
+
146
+ @string_initial_value.setter
147
+ def string_initial_value(self, value: str):
148
+ self.set_property_state("string_initial_value", value)
149
+
150
+ @property
151
+ def enumeration_initial_value(self) -> int:
152
+ """Enumeration data start value."""
153
+ return self.get_property_state("enumeration_initial_value")
154
+
155
+ @enumeration_initial_value.setter
156
+ def enumeration_initial_value(self, value: int):
157
+ self.set_property_state("enumeration_initial_value", value)
158
+
159
+ @property
160
+ def real_min(self) -> RealType:
161
+ """Real data minimum value."""
162
+ return self.get_property_state("real_min")
163
+
164
+ @real_min.setter
165
+ def real_min(self, value: RealType):
166
+ self.set_property_state("real_min", value)
167
+
168
+ @property
169
+ def real_max(self) -> RealType:
170
+ """Real data maximum value."""
171
+ return self.get_property_state("real_max")
172
+
173
+ @real_max.setter
174
+ def real_max(self, value: RealType):
175
+ self.set_property_state("real_max", value)
176
+
177
+ @property
178
+ def integer_min(self) -> int:
179
+ """Integer data minimum value."""
180
+ return self.get_property_state("integer_min")
181
+
182
+ @integer_min.setter
183
+ def integer_min(self, value: int):
184
+ self.set_property_state("integer_min", value)
185
+
186
+ @property
187
+ def integer_max(self) -> int:
188
+ """Integer data maximum value."""
189
+ return self.get_property_state("integer_max")
190
+
191
+ @integer_max.setter
192
+ def integer_max(self, value: int):
193
+ self.set_property_state("integer_max", value)
194
+
195
+ @property
196
+ def enumeration_min(self) -> int:
197
+ """Enumeration data minimum value."""
198
+ return self.get_property_state("enumeration_min")
199
+
200
+ @enumeration_min.setter
201
+ def enumeration_min(self, value: int):
202
+ self.set_property_state("enumeration_min", value)
203
+
204
+ @property
205
+ def enumeration_max(self) -> int:
206
+ """Enumeration data maximum value."""
207
+ return self.get_property_state("enumeration_max")
208
+
209
+ @enumeration_max.setter
210
+ def enumeration_max(self, value: int):
211
+ self.set_property_state("enumeration_max", value)
212
+
213
+ @property
214
+ def tensor_type(self) -> str:
215
+ """Indicates the variable tensor type (\"Scalar\" or \"Vector\").
216
+
217
+ \"Vector\" is not supported for the FMU case."""
218
+ return self.get_property_state("tensor_type")
219
+
220
+ @tensor_type.setter
221
+ def tensor_type(self, value: str):
222
+ self.set_property_state("tensor_type", value)
223
+
224
+ @property
225
+ def is_extensive(self) -> bool:
226
+ """Indicates whether this is an extensive property."""
227
+ return self.get_property_state("is_extensive")
228
+
229
+ @is_extensive.setter
230
+ def is_extensive(self, value: bool):
231
+ self.set_property_state("is_extensive", value)
@@ -0,0 +1,21 @@
1
+ #
2
+ # This is an auto-generated file. DO NOT EDIT!
3
+ #
4
+
5
+ from ansys.systemcoupling.core.adaptor.impl.types import *
6
+
7
+
8
+ class write_csv_chart_files(Command):
9
+ """
10
+ For each coupling interface, exports a CSV file containing chart data
11
+ (convergence and source/target quantity transfer values) for
12
+ that interface.
13
+
14
+ Each file is named according to the convention ``<interface>.csv``, where
15
+ ``<interface>`` is the object name of the corresponding coupling interface.
16
+
17
+ This command will overwrite any CSV charting files that already exist,
18
+ including any that were written during the solution.
19
+ """
20
+
21
+ syc_name = "WriteCsvChartFiles"
@@ -0,0 +1,46 @@
1
+ #
2
+ # This is an auto-generated file. DO NOT EDIT!
3
+ #
4
+
5
+ from ansys.systemcoupling.core.adaptor.impl.types import *
6
+
7
+
8
+ class write_ensight(Command):
9
+ """
10
+ Write a file with mesh and results which can be loaded into EnSight for
11
+ post processing.
12
+
13
+ Parameters
14
+ ----------
15
+ file_name : str
16
+ Base name for EnSight files. It will generate <base>.encas file which
17
+ should be loaded into EnSight. Other files are generated for geometry
18
+ and variables.
19
+ binary : bool, optional
20
+ To control if file is to be written in binary format or ASCII. ASCII
21
+ slows down performance, but may be useful for debugging and seeing
22
+ raw data.
23
+
24
+ """
25
+
26
+ syc_name = "WriteEnSight"
27
+
28
+ argument_names = ["file_name", "binary"]
29
+
30
+ class file_name(String):
31
+ """
32
+ Base name for EnSight files. It will generate <base>.encas file which
33
+ should be loaded into EnSight. Other files are generated for geometry
34
+ and variables.
35
+ """
36
+
37
+ syc_name = "FileName"
38
+
39
+ class binary(Boolean):
40
+ """
41
+ To control if file is to be written in binary format or ASCII. ASCII
42
+ slows down performance, but may be useful for debugging and seeing
43
+ raw data.
44
+ """
45
+
46
+ syc_name = "Binary"
@@ -0,0 +1,32 @@
1
+ #
2
+ # This is an auto-generated file. DO NOT EDIT!
3
+ #
4
+
5
+ from ansys.systemcoupling.core.adaptor.impl.types import *
6
+
7
+
8
+ class write_target_data(Command):
9
+ """
10
+ Command to write target data for target participant after mapping operation.
11
+
12
+ The purpose of this command is to write target mesh and target mapped data in
13
+ the target participant working directory and thus mapping results from SystemCoupling can
14
+ be check in the target participant.
15
+
16
+ Parameters
17
+ ----------
18
+ overwrite : bool, optional
19
+ Flag indicating whether to overwrite the existing target data file. Default value is False.
20
+
21
+ """
22
+
23
+ syc_name = "WriteTargetData"
24
+
25
+ argument_names = ["overwrite"]
26
+
27
+ class overwrite(Boolean):
28
+ """
29
+ Flag indicating whether to overwrite the existing target data file. Default value is False.
30
+ """
31
+
32
+ syc_name = "Overwrite"
@@ -44,11 +44,14 @@ def get_syc_version(api) -> str:
44
44
  def clean_version_string(version_in: str) -> str:
45
45
  year, _, release = version_in.partition(" ")
46
46
  if len(year) == 4 and year.startswith("20") and release.startswith("R"):
47
+ # Exclude Bandit check. The try-except-pass is only used to simplify logic.
48
+ # An exception will be thrown in any case, but it *also* gets thrown for
49
+ # input that does not match the above 'if' condition.
47
50
  try:
48
51
  year = int(year[2:])
49
52
  release = int(release[1:])
50
53
  return f"{year}.{release}"
51
- except:
54
+ except: # nosec B110
52
55
  pass
53
56
  raise RuntimeError(
54
57
  f"Version string {version_in} has invalid format (expect '20yy Rn')."
@@ -187,7 +187,9 @@ def _ensure_file_available(session: SessionProtocol, filepath: str) -> str:
187
187
  file_name = os.path.basename(filepath)
188
188
  root_name, _, ext = file_name.rpartition(".")
189
189
  ext = f".{ext}" if ext else ""
190
- new_name = f"{root_name}_{int(time.time())}_{random.randint(1, 10000000)}{ext}"
190
+ # Exclude Bandit check as random number is simply being used to create a unique
191
+ # file name, not for security/cryptographic purposes.
192
+ new_name = f"{root_name}_{int(time.time())}_{random.randint(1, 10000000)}{ext}" # nosec B311
191
193
 
192
194
  session._native_api.ExecPythonString(
193
195
  PythonString=f"import shutil\nshutil.copy('{filepath}', '{new_name}')"
@@ -32,6 +32,7 @@ from ansys.systemcoupling.core.charts.chart_datatypes import (
32
32
  TimestepData,
33
33
  TransferSeriesInfo,
34
34
  )
35
+ from ansys.systemcoupling.core.util.assertion import assert_
35
36
 
36
37
  HeaderList = list[str]
37
38
  ChartData = list[list[float]]
@@ -231,8 +232,8 @@ def _parse_suffix(header: str, part_disp_name: str) -> str:
231
232
 
232
233
  def parse_csv_metadata(interface_name: str, headers: list[str]) -> InterfaceInfo:
233
234
  intf_info = InterfaceInfo(name=interface_name)
234
- assert headers[0] == "Iteration"
235
- assert headers[1] == "Step"
235
+ assert_(headers[0] == "Iteration", 'Header expected to be "Iteration"')
236
+ assert_(headers[1] == "Step", 'Header expected to be "Step"')
236
237
  intf_info.is_transient = headers[2] == "Time"
237
238
 
238
239
  start_index = 3 if intf_info.is_transient else 2
@@ -263,7 +264,7 @@ def parse_csv_metadata(interface_name: str, headers: list[str]) -> InterfaceInfo
263
264
 
264
265
  intf_disp_name = intf_or_part_disp_name
265
266
  if data_index == 0:
266
- assert intf_info.display_name == ""
267
+ assert_(intf_info.display_name == "", "display_name should be empty")
267
268
  intf_info.display_name = intf_disp_name
268
269
  series_info = TransferSeriesInfo(
269
270
  data_index,
@@ -34,8 +34,12 @@ from ansys.systemcoupling.core.charts.plotter import Plotter
34
34
 
35
35
 
36
36
  def create_and_show_plot(spec: PlotSpec, csv_list: list[str]) -> Plotter:
37
- assert len(spec.interfaces) == 1, "Plots currently only support one interface"
38
- assert len(spec.interfaces) == len(csv_list)
37
+ if len(spec.interfaces) != 1:
38
+ raise ValueError("Plots currently only support one interface")
39
+ if len(spec.interfaces) != len(csv_list):
40
+ raise ValueError(
41
+ "'csv_list' should have length equal to the number of interfaces"
42
+ )
39
43
 
40
44
  manager = PlotDefinitionManager(spec)
41
45
  reader = CsvChartDataReader(spec.interfaces[0].name, csv_list[0])
@@ -61,8 +65,12 @@ def solve_with_live_plot(
61
65
  csv_list: list[str],
62
66
  solve_func: Callable[[], None],
63
67
  ):
64
- assert len(spec.interfaces) == 1, "Plots currently only support one interface"
65
- assert len(spec.interfaces) == len(csv_list)
68
+ if len(spec.interfaces) != 1:
69
+ raise ValueError("Plots currently only support one interface")
70
+ if len(spec.interfaces) != len(csv_list):
71
+ raise ValueError(
72
+ "'csv_list' should have length equal to the number of interfaces"
73
+ )
66
74
 
67
75
  manager = PlotDefinitionManager(spec)
68
76
  dispatcher = MessageDispatcher()
@@ -37,6 +37,7 @@ from ansys.systemcoupling.core.charts.chart_datatypes import (
37
37
  from ansys.systemcoupling.core.charts.plotdefinition_manager import (
38
38
  PlotDefinitionManager,
39
39
  )
40
+ from ansys.systemcoupling.core.util.assertion import assert_
40
41
 
41
42
 
42
43
  def _process_timestep_data(
@@ -282,13 +283,13 @@ class Plotter:
282
283
  # this (assume the wait function is stored as an
283
284
  # attribute):
284
285
  #
285
- # assert self._wait_for_metadata is not None
286
+ # assert_(self._wait_for_metadata is not None)
286
287
  # metadata = self._wait_for_metadata()
287
288
  # if metadata is not None:
288
289
  # self.set_metadata(metadata)
289
290
  # else:
290
291
  # return
291
- assert self._request_update is not None
292
+ assert_(self._request_update is not None)
292
293
 
293
294
  self.ani = FuncAnimation(
294
295
  self._fig,
@@ -101,6 +101,7 @@ class SycGrpc(object):
101
101
  self.__output_thread = None
102
102
  self.__pim_instance = None
103
103
  self.__skip_exit = False
104
+ self.__container = None
104
105
 
105
106
  @classmethod
106
107
  def _cleanup(cls):
@@ -161,7 +162,9 @@ class SycGrpc(object):
161
162
  """Start the System Coupling container and establish a connection."""
162
163
  LOG.debug("Starting container...")
163
164
  port = port if port is not None else _find_port()
164
- start_container(mounted_from, mounted_to, network, port, version)
165
+ self.__container = start_container(
166
+ mounted_from, mounted_to, network, port, version
167
+ )
165
168
  LOG.debug("...started")
166
169
  self._connect(_LOCALHOST_IP, port)
167
170
 
@@ -307,12 +310,18 @@ class SycGrpc(object):
307
310
  try:
308
311
  self.__ostream_service.end_streaming()
309
312
  except Exception as e:
310
- LOG.debug("Exception on OutputStreamService.end_straming(): " + str(e))
313
+ LOG.debug(f"Exception on OutputStreamService.end_straming(): {e}")
311
314
  self.__process_service.quit()
312
315
  self.__channel = None
313
316
  if self.__process:
314
317
  self.__process.end()
315
318
  self.__process = None
319
+ if self.__container:
320
+ try:
321
+ self.__container.stop()
322
+ except Exception as e:
323
+ LOG.debug(f"Exception from container.stop(): {e}")
324
+ self.__container = None
316
325
  if self.__pim_instance is not None:
317
326
  self.__pim_instance.delete()
318
327
  self.__pim_instance = None