pyedb 0.2.0__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 pyedb might be problematic. Click here for more details.

Files changed (128) hide show
  1. pyedb/__init__.py +17 -0
  2. pyedb/dotnet/__init__.py +0 -0
  3. pyedb/dotnet/application/Variables.py +2261 -0
  4. pyedb/dotnet/application/__init__.py +0 -0
  5. pyedb/dotnet/clr_module.py +103 -0
  6. pyedb/dotnet/edb.py +4237 -0
  7. pyedb/dotnet/edb_core/__init__.py +1 -0
  8. pyedb/dotnet/edb_core/cell/__init__.py +0 -0
  9. pyedb/dotnet/edb_core/cell/hierarchy/__init__.py +0 -0
  10. pyedb/dotnet/edb_core/cell/hierarchy/model.py +66 -0
  11. pyedb/dotnet/edb_core/components.py +2669 -0
  12. pyedb/dotnet/edb_core/configuration.py +423 -0
  13. pyedb/dotnet/edb_core/definition/__init__.py +0 -0
  14. pyedb/dotnet/edb_core/definition/component_def.py +166 -0
  15. pyedb/dotnet/edb_core/definition/component_model.py +30 -0
  16. pyedb/dotnet/edb_core/definition/definition_obj.py +18 -0
  17. pyedb/dotnet/edb_core/definition/definitions.py +12 -0
  18. pyedb/dotnet/edb_core/dotnet/__init__.py +0 -0
  19. pyedb/dotnet/edb_core/dotnet/database.py +1218 -0
  20. pyedb/dotnet/edb_core/dotnet/layout.py +238 -0
  21. pyedb/dotnet/edb_core/dotnet/primitive.py +1517 -0
  22. pyedb/dotnet/edb_core/edb_data/__init__.py +0 -0
  23. pyedb/dotnet/edb_core/edb_data/components_data.py +938 -0
  24. pyedb/dotnet/edb_core/edb_data/connectable.py +113 -0
  25. pyedb/dotnet/edb_core/edb_data/control_file.py +1268 -0
  26. pyedb/dotnet/edb_core/edb_data/design_options.py +35 -0
  27. pyedb/dotnet/edb_core/edb_data/edbvalue.py +45 -0
  28. pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +330 -0
  29. pyedb/dotnet/edb_core/edb_data/hfss_simulation_setup_data.py +1607 -0
  30. pyedb/dotnet/edb_core/edb_data/layer_data.py +576 -0
  31. pyedb/dotnet/edb_core/edb_data/nets_data.py +281 -0
  32. pyedb/dotnet/edb_core/edb_data/obj_base.py +19 -0
  33. pyedb/dotnet/edb_core/edb_data/padstacks_data.py +2080 -0
  34. pyedb/dotnet/edb_core/edb_data/ports.py +287 -0
  35. pyedb/dotnet/edb_core/edb_data/primitives_data.py +1397 -0
  36. pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +2914 -0
  37. pyedb/dotnet/edb_core/edb_data/simulation_setup.py +716 -0
  38. pyedb/dotnet/edb_core/edb_data/siwave_simulation_setup_data.py +1205 -0
  39. pyedb/dotnet/edb_core/edb_data/sources.py +514 -0
  40. pyedb/dotnet/edb_core/edb_data/terminals.py +632 -0
  41. pyedb/dotnet/edb_core/edb_data/utilities.py +148 -0
  42. pyedb/dotnet/edb_core/edb_data/variables.py +91 -0
  43. pyedb/dotnet/edb_core/general.py +181 -0
  44. pyedb/dotnet/edb_core/hfss.py +1646 -0
  45. pyedb/dotnet/edb_core/layout.py +1244 -0
  46. pyedb/dotnet/edb_core/layout_validation.py +272 -0
  47. pyedb/dotnet/edb_core/materials.py +939 -0
  48. pyedb/dotnet/edb_core/net_class.py +335 -0
  49. pyedb/dotnet/edb_core/nets.py +1215 -0
  50. pyedb/dotnet/edb_core/padstack.py +1389 -0
  51. pyedb/dotnet/edb_core/siwave.py +1427 -0
  52. pyedb/dotnet/edb_core/stackup.py +2703 -0
  53. pyedb/edb_logger.py +396 -0
  54. pyedb/generic/__init__.py +0 -0
  55. pyedb/generic/constants.py +1063 -0
  56. pyedb/generic/data_handlers.py +320 -0
  57. pyedb/generic/design_types.py +104 -0
  58. pyedb/generic/filesystem.py +150 -0
  59. pyedb/generic/general_methods.py +1535 -0
  60. pyedb/generic/plot.py +1840 -0
  61. pyedb/generic/process.py +285 -0
  62. pyedb/generic/settings.py +224 -0
  63. pyedb/ipc2581/__init__.py +0 -0
  64. pyedb/ipc2581/bom/__init__.py +0 -0
  65. pyedb/ipc2581/bom/bom.py +21 -0
  66. pyedb/ipc2581/bom/bom_item.py +32 -0
  67. pyedb/ipc2581/bom/characteristics.py +37 -0
  68. pyedb/ipc2581/bom/refdes.py +16 -0
  69. pyedb/ipc2581/content/__init__.py +0 -0
  70. pyedb/ipc2581/content/color.py +38 -0
  71. pyedb/ipc2581/content/content.py +55 -0
  72. pyedb/ipc2581/content/dictionary_color.py +29 -0
  73. pyedb/ipc2581/content/dictionary_fill.py +28 -0
  74. pyedb/ipc2581/content/dictionary_line.py +30 -0
  75. pyedb/ipc2581/content/entry_color.py +13 -0
  76. pyedb/ipc2581/content/entry_line.py +14 -0
  77. pyedb/ipc2581/content/fill.py +15 -0
  78. pyedb/ipc2581/content/layer_ref.py +10 -0
  79. pyedb/ipc2581/content/standard_geometries_dictionary.py +72 -0
  80. pyedb/ipc2581/ecad/__init__.py +0 -0
  81. pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
  82. pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +26 -0
  83. pyedb/ipc2581/ecad/cad_data/cad_data.py +37 -0
  84. pyedb/ipc2581/ecad/cad_data/component.py +41 -0
  85. pyedb/ipc2581/ecad/cad_data/drill.py +30 -0
  86. pyedb/ipc2581/ecad/cad_data/feature.py +54 -0
  87. pyedb/ipc2581/ecad/cad_data/layer.py +41 -0
  88. pyedb/ipc2581/ecad/cad_data/layer_feature.py +151 -0
  89. pyedb/ipc2581/ecad/cad_data/logical_net.py +32 -0
  90. pyedb/ipc2581/ecad/cad_data/outline.py +25 -0
  91. pyedb/ipc2581/ecad/cad_data/package.py +104 -0
  92. pyedb/ipc2581/ecad/cad_data/padstack_def.py +38 -0
  93. pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +24 -0
  94. pyedb/ipc2581/ecad/cad_data/padstack_instance.py +62 -0
  95. pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +26 -0
  96. pyedb/ipc2581/ecad/cad_data/path.py +89 -0
  97. pyedb/ipc2581/ecad/cad_data/phy_net.py +80 -0
  98. pyedb/ipc2581/ecad/cad_data/pin.py +31 -0
  99. pyedb/ipc2581/ecad/cad_data/polygon.py +169 -0
  100. pyedb/ipc2581/ecad/cad_data/profile.py +40 -0
  101. pyedb/ipc2581/ecad/cad_data/stackup.py +31 -0
  102. pyedb/ipc2581/ecad/cad_data/stackup_group.py +42 -0
  103. pyedb/ipc2581/ecad/cad_data/stackup_layer.py +21 -0
  104. pyedb/ipc2581/ecad/cad_data/step.py +275 -0
  105. pyedb/ipc2581/ecad/cad_header.py +33 -0
  106. pyedb/ipc2581/ecad/ecad.py +19 -0
  107. pyedb/ipc2581/ecad/spec.py +46 -0
  108. pyedb/ipc2581/history_record.py +37 -0
  109. pyedb/ipc2581/ipc2581.py +387 -0
  110. pyedb/ipc2581/logistic_header.py +25 -0
  111. pyedb/misc/__init__.py +0 -0
  112. pyedb/misc/aedtlib_personalib_install.py +14 -0
  113. pyedb/misc/downloads.py +322 -0
  114. pyedb/misc/misc.py +67 -0
  115. pyedb/misc/pyedb.runtimeconfig.json +13 -0
  116. pyedb/misc/siw_feature_config/__init__.py +0 -0
  117. pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
  118. pyedb/misc/siw_feature_config/emc/component_tags.py +46 -0
  119. pyedb/misc/siw_feature_config/emc/net_tags.py +37 -0
  120. pyedb/misc/siw_feature_config/emc/tag_library.py +62 -0
  121. pyedb/misc/siw_feature_config/emc/xml_generic.py +78 -0
  122. pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +179 -0
  123. pyedb/misc/utilities.py +27 -0
  124. pyedb/modeler/geometry_operators.py +2082 -0
  125. pyedb-0.2.0.dist-info/LICENSE +21 -0
  126. pyedb-0.2.0.dist-info/METADATA +208 -0
  127. pyedb-0.2.0.dist-info/RECORD +128 -0
  128. pyedb-0.2.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,1063 @@
1
+ import math
2
+ import warnings
3
+
4
+ RAD2DEG = 180.0 / math.pi
5
+ DEG2RAD = math.pi / 180
6
+ HOUR2SEC = 3600.0
7
+ MIN2SEC = 60.0
8
+ SEC2MIN = 1 / 60.0
9
+ SEC2HOUR = 1 / 3600.0
10
+ INV2PI = 0.5 / math.pi
11
+ V2PI = 2.0 * math.pi
12
+ METER2IN = 0.0254
13
+ METER2MILES = 1609.344051499
14
+ MILS2METER = 39370.078740157
15
+ SpeedOfLight = 299792458.0
16
+
17
+
18
+ def db20(x, inverse=True): # pragma: no cover
19
+ """Convert db20 to decimal and vice versa."""
20
+ if inverse:
21
+ return 20 * math.log10(x)
22
+ else:
23
+ return math.pow(10, x / 20.0)
24
+
25
+
26
+ def db10(x, inverse=True): # pragma: no cover
27
+ """Convert db10 to decimal and vice versa."""
28
+ if inverse:
29
+ return 10 * math.log10(x)
30
+ else:
31
+ return math.pow(10, x / 10.0)
32
+
33
+
34
+ def dbw(x, inverse=True): # pragma: no cover
35
+ """Convert W to decimal and vice versa."""
36
+ if inverse:
37
+ return 10 * math.log10(x)
38
+ else:
39
+ return math.pow(10, x / 10.0)
40
+
41
+
42
+ def dbm(x, inverse=True): # pragma: no cover
43
+ """Convert W to decimal and vice versa."""
44
+ if inverse:
45
+ return 10 * math.log10(x) + 30
46
+ else:
47
+ return math.pow(10, x / 10.0) / 1000
48
+
49
+
50
+ def fah2kel(val, inverse=True): # pragma: no cover
51
+ """Convert a temperature from Fahrenheit to Kelvin.
52
+
53
+ Parameters
54
+ ----------
55
+ val : float
56
+ Temperature value in Fahrenheit.
57
+ inverse : bool, optional
58
+ The default is ``True``.
59
+
60
+ Returns
61
+ -------
62
+ float
63
+ Temperature value converted to Kelvin.
64
+
65
+ """
66
+ if inverse:
67
+ return (val - 273.15) * 9 / 5 + 32
68
+ else:
69
+ return (val - 32) * 5 / 9 + 273.15
70
+
71
+
72
+ def cel2kel(val, inverse=True): # pragma: no cover
73
+ """Convert a temperature from Celsius to Kelvin.
74
+
75
+ Parameters
76
+ ----------
77
+ val : float
78
+ Temperature value in Celsius.
79
+ inverse : bool, optional
80
+ The default is ``True``.
81
+
82
+ Returns
83
+ -------
84
+ float
85
+ Temperature value converted to Kelvin.
86
+
87
+ """
88
+
89
+ if inverse:
90
+ return val - 273.15
91
+ else:
92
+ return val + 273.15
93
+
94
+
95
+ def unit_system(units): # pragma: no cover
96
+ """Retrieve the name of the unit system associated with a unit string.
97
+
98
+ Parameters
99
+ ----------
100
+ units : str
101
+ Units for retrieving the associated unit system name.
102
+
103
+ Returns
104
+ -------
105
+ str
106
+ Key from the ``AEDT_units`` when successful. For example, ``"AngularSpeed"``.
107
+ ``False`` when the units specified are not defined in AEDT units.
108
+
109
+ """
110
+
111
+ for unit_type, unit_dict in AEDT_UNITS.items():
112
+ if units in unit_dict:
113
+ return unit_type
114
+
115
+ return False
116
+
117
+
118
+ def _resolve_unit_system(unit_system_1, unit_system_2, operation): # pragma: no cover
119
+ """Retrieve the unit string of an arithmetic operation on ``Variable`` objects. If no resulting unit system
120
+ is defined for a specific operation (in unit_system_operations), an empty string is returned
121
+
122
+ Parameters
123
+ ----------
124
+ unit_system_1 : str
125
+ Name of a unit system, which is a key of ``AEDT_units``.
126
+ unit_system_2 : str
127
+ Name of another unit system, which is a key of ``AEDT_units``.
128
+ operation : str
129
+ Name of an operator within the data set of ``["multiply" ,"divide"]``.
130
+
131
+ Returns
132
+ -------
133
+ str
134
+ Unit system when successful, ``""`` when failed.
135
+
136
+ """
137
+ try:
138
+ key = "{}_{}_{}".format(unit_system_1, operation, unit_system_2)
139
+ result_unit_system = UNIT_SYSTEM_OPERATIONS[key]
140
+ return SI_UNITS[result_unit_system]
141
+ except KeyError:
142
+ return ""
143
+
144
+
145
+ def unit_converter(values, unit_system="Length", input_units="meter", output_units="mm"): # pragma: no cover
146
+ """Convert unit in specified unit system.
147
+
148
+ Parameters
149
+ ----------
150
+ values : float, list
151
+ Values to convert.
152
+ unit_system : str
153
+ Unit system. Default is `"Length"`.
154
+ input_units : str
155
+ Input units. Default is `"meter"`.
156
+ output_units : str
157
+ Output units. Default is `"mm"`.
158
+
159
+ Returns
160
+ -------
161
+ float, list
162
+ Converted value.
163
+ """
164
+ if unit_system in AEDT_UNITS:
165
+ if input_units not in AEDT_UNITS[unit_system]:
166
+ warnings.warn("Unknown units: '{}'".format(input_units))
167
+ return values
168
+ elif output_units not in AEDT_UNITS[unit_system]:
169
+ warnings.warn("Unknown units: '{}'".format(output_units))
170
+ return values
171
+ else:
172
+ input_is_list = isinstance(values, list)
173
+ if not input_is_list:
174
+ values = [values]
175
+ converted_values = []
176
+ for value in values:
177
+ if unit_system == "Temperature":
178
+ value = AEDT_UNITS[unit_system][input_units](value, False)
179
+ value = AEDT_UNITS[unit_system][output_units](value, output_units != "kel")
180
+ elif not callable(AEDT_UNITS[unit_system][input_units]) and not callable(
181
+ AEDT_UNITS[unit_system][output_units]
182
+ ):
183
+ value = value * AEDT_UNITS[unit_system][input_units] / AEDT_UNITS[unit_system][output_units]
184
+ elif not callable(AEDT_UNITS[unit_system][input_units]) and callable(
185
+ AEDT_UNITS[unit_system][output_units]
186
+ ):
187
+ value = value * AEDT_UNITS[unit_system][input_units]
188
+ value = AEDT_UNITS[unit_system][output_units](value, True)
189
+ elif callable(AEDT_UNITS[unit_system][input_units]) and not callable(
190
+ AEDT_UNITS[unit_system][output_units]
191
+ ):
192
+ value = AEDT_UNITS[unit_system][input_units](value, False) / AEDT_UNITS[unit_system][output_units]
193
+ else:
194
+ value = AEDT_UNITS[unit_system][input_units](value, False)
195
+ value = AEDT_UNITS[unit_system][output_units](value, True)
196
+
197
+ converted_values.append(value)
198
+ if input_is_list:
199
+ return converted_values
200
+ else:
201
+ return converted_values[0]
202
+ warnings.warn("No system unit found")
203
+ return values
204
+
205
+
206
+ def scale_units(scale_to_unit): # pragma: no cover
207
+ """Find the scale_to_unit into main system unit.
208
+
209
+ Parameters
210
+ ----------
211
+ scale_to_unit : str
212
+ Unit to Scale.
213
+
214
+ Returns
215
+ -------
216
+ float
217
+ Return the scaling factor if any.
218
+ """
219
+ sunit = 1.0
220
+ for val in list(AEDT_UNITS.values()):
221
+ for unit, scale_val in val.items():
222
+ if scale_to_unit.lower() == unit.lower():
223
+ sunit = scale_val
224
+ break
225
+ else:
226
+ continue
227
+ break
228
+ return sunit
229
+
230
+
231
+ def validate_enum_class_value(cls, value): # pragma: no cover
232
+ """Check whether the value for the class ``enumeration-class`` is valid.
233
+
234
+ Parameters
235
+ ----------
236
+ cls : class
237
+ Enumeration-style class with integer members in range(0, N) where cls.Invalid equals N-1.
238
+ value : int
239
+ Value to check.
240
+
241
+ Returns
242
+ -------
243
+ bool
244
+ ``True`` when the value is valid for the ``enumeration-class``, ``False`` otherwise.
245
+ """
246
+ return isinstance(value, int) and value >= 0 and value < cls.Invalid
247
+
248
+
249
+ AEDT_UNITS = {
250
+ "AngularSpeed": {
251
+ "deg_per_hr": HOUR2SEC * DEG2RAD,
252
+ "rad_per_hr": HOUR2SEC,
253
+ "deg_per_min": MIN2SEC * DEG2RAD,
254
+ "rad_per_min": MIN2SEC,
255
+ "deg_per_sec": DEG2RAD,
256
+ "rad_per_sec": 1.0,
257
+ "rev_per_sec": V2PI,
258
+ "per_sec": V2PI,
259
+ "rpm": SEC2MIN * V2PI,
260
+ },
261
+ "Angle": {"deg": DEG2RAD, "rad": 1.0, "degmin": DEG2RAD * SEC2MIN, "degsec": DEG2RAD * SEC2HOUR},
262
+ "Area": {
263
+ "fm2": 1e-30,
264
+ "pm2": 1e-24,
265
+ "nm2": 1e-18,
266
+ "um2": 1e-12,
267
+ "mm2": 1e-6,
268
+ "cm2": 1e-4,
269
+ "dm2": 1e-2,
270
+ "m2": 1.0,
271
+ "meter2": 1.0,
272
+ "km2": 1e6,
273
+ "uin2": METER2IN * 1e-12,
274
+ "mil2": METER2IN * 1e-6,
275
+ "in2": METER2IN,
276
+ "ft2": METER2IN * 24,
277
+ "yd2": METER2IN * 288,
278
+ },
279
+ "Capacitance": {"fF": 1e-15, "pF": 1e-12, "nF": 1e-9, "uF": 1e-6, "mF": 1e-3, "F": 1.0},
280
+ "Conductance": {"fSie": 1e-15, "pSie": 1e-12, "nSie": 1e-9, "uSie": 1e-6, "mSie": 1e-3, "Sie": 1.0},
281
+ "Current": {
282
+ "fA": 1e-15,
283
+ "pA": 1e-12,
284
+ "nA": 1e-9,
285
+ "uA": 1e-6,
286
+ "mA": 1e-3,
287
+ "A": 1.0,
288
+ "kA": 1e3,
289
+ "MegA": 1e6,
290
+ "gA": 1e9,
291
+ "dBA": (db20,),
292
+ },
293
+ "Flux": {"Wb": 1.0, "mx": 1e-8, "vh": 3600, "vs": 1.0},
294
+ "Force": {
295
+ "fNewton": 1e-15,
296
+ "pNewton": 1e-12,
297
+ "nNewton": 1e-9,
298
+ "uNewton": 1e-6,
299
+ "mNewton": 1e-3,
300
+ "newton": 1.0,
301
+ "kNewton": 1e3,
302
+ "megNewton": 1e6,
303
+ "gNewton": 1e9,
304
+ "dyne": 1e-5,
305
+ "kp": 9.80665,
306
+ "PoundsForce": 4.44822,
307
+ },
308
+ "Freq": {"Hz": 1.0, "kHz": 1e3, "MHz": 1e6, "GHz": 1e9, "THz": 1e12, "rps": 1.0, "per_sec": 1.0},
309
+ "Inductance": {"fH": 1e-15, "pH": 1e-12, "nH": 1e-9, "uH": 1e-6, "mH": 1e-3, "H": 1.0},
310
+ "Length": {
311
+ "fm": 1e-15,
312
+ "pm": 1e-12,
313
+ "nm": 1e-9,
314
+ "um": 1e-6,
315
+ "mm": 1e-3,
316
+ "cm": 1e-2,
317
+ "dm": 1e-1,
318
+ "meter": 1.0,
319
+ "meters": 1.0,
320
+ "km": 1e3,
321
+ "uin": METER2IN * 1e-6,
322
+ "mil": METER2IN * 1e-3,
323
+ "in": METER2IN,
324
+ "ft": METER2IN * 12,
325
+ "yd": METER2IN * 144,
326
+ },
327
+ "Mass": {"ug": 1e-9, "mg": 1e-6, "g": 1e-3, "kg": 1.0, "ton": 1000, "oz": 0.0283495, "lb": 0.453592},
328
+ "None": {
329
+ "f": 1e-15,
330
+ "p": 1e-12,
331
+ "n": 1e-9,
332
+ "u": 1e-6,
333
+ "m": 1e-3,
334
+ "": 1.0,
335
+ "k": 1e3,
336
+ "meg": 1e6,
337
+ "g": 1e9,
338
+ "t": 1e12,
339
+ },
340
+ "Resistance": {"uOhm": 1e-6, "mOhm": 1e-3, "ohm": 1.0, "kOhm": 1e3, "megohm": 1e6, "GOhm": 1e9},
341
+ "Speed": {
342
+ "mm_per_sec": 1e-3,
343
+ "cm_per_sec": 1e-2,
344
+ "m_per_sec": 1.0,
345
+ "km_per_sec": 1e3,
346
+ "inches_per_sec": METER2IN,
347
+ "feet_per_sec": METER2IN * 12,
348
+ "feet_per_min": METER2IN * 12 * SEC2MIN,
349
+ "km_per_min": 60e3,
350
+ "m_per_h": 3600,
351
+ "miles_per_hour": METER2MILES * SEC2HOUR,
352
+ "miles_per_minute": METER2MILES * SEC2MIN,
353
+ "miles_per_sec": METER2MILES,
354
+ },
355
+ "Time": {
356
+ "fs": 1e-15,
357
+ "ps": 1e-12,
358
+ "ns": 1e-9,
359
+ "us": 1e-6,
360
+ "ms": 1e-3,
361
+ "s": 1,
362
+ "min": 60,
363
+ "hour": 3600,
364
+ "day": 3600 * 12,
365
+ },
366
+ "Torque": {
367
+ "fNewtonMeter": 1e-15,
368
+ "pNewtonMeter": 1e-12,
369
+ "nNewtonMeter": 1e-9,
370
+ "uNewtonMeter": 1e-6,
371
+ "mNewtonMeter": 1e-3,
372
+ "cNewtonMeter": 1e-2,
373
+ "NewtonMeter": 1,
374
+ "kNewtonMeter": 1e3,
375
+ "megNewtonMeter": 1e6,
376
+ "gNewtonMeter": 1e9,
377
+ },
378
+ "Voltage": {
379
+ "fV": 1e-15,
380
+ "pV": 1e-12,
381
+ "nV": 1e-9,
382
+ "uV": 1e-6,
383
+ "mV": 1e-3,
384
+ "V": 1.0,
385
+ "kV": 1e3,
386
+ "MegV": 1e6,
387
+ "gV": 1e9,
388
+ "dBV": db20,
389
+ },
390
+ "Temperature": {"kel": lambda x, y: x, "cel": cel2kel, "fah": fah2kel},
391
+ "Power": {
392
+ "fW": 1e-15,
393
+ "pW": 1e-12,
394
+ "nW": 1e-9,
395
+ "uW": 1e-6,
396
+ "mW": 1e-3,
397
+ "W": 1.0,
398
+ "kW": 1e3,
399
+ "megW": 1e6,
400
+ "gW": 1e9,
401
+ "Btu_per_hr": 3.4129693,
402
+ "Btu_per_sec": 9.48047e-4,
403
+ "dBm": dbm,
404
+ "dBW": dbw,
405
+ "HP": 1.34102e-3,
406
+ "erg_per_sec": 1e7,
407
+ },
408
+ "B-field": {
409
+ "ftesla": 1e-15,
410
+ "ptesla": 1e-12,
411
+ "ntesla": 1e-9,
412
+ "utesla": 1e-6,
413
+ "mtesla": 1e-3,
414
+ "tesla": 1.0,
415
+ "ktesla": 1e3,
416
+ "megtesla": 1e6,
417
+ "gtesla": 1e9,
418
+ },
419
+ "E-field": {
420
+ "fV_per_m": 1e-15,
421
+ "pV_per_m": 1e-12,
422
+ "nV_per_m": 1e-9,
423
+ "uV_per_m": 1e-6,
424
+ "mV_per_m": 1e-3,
425
+ "V_per_m": 1.0,
426
+ "kV_per_m": 1e3,
427
+ "megV_per_m": 1e6,
428
+ "gV_per_m": 1e9,
429
+ "fV_per_meter": 1e-15,
430
+ "pV_per_meter": 1e-12,
431
+ "nV_per_meter": 1e-9,
432
+ "uV_per_meter": 1e-6,
433
+ "mV_per_meter": 1e-3,
434
+ "V_per_meter": 1.0,
435
+ "kV_per_meter": 1e3,
436
+ "megV_per_meter": 1e6,
437
+ "gV_per_meter": 1e9,
438
+ },
439
+ "H-field": {
440
+ "fA_per_m": 1e-15,
441
+ "pA_per_m": 1e-12,
442
+ "nA_per_m": 1e-9,
443
+ "uA_per_m": 1e-6,
444
+ "mA_per_m": 1e-3,
445
+ "A_per_m": 1.0,
446
+ "kA_per_m": 1e3,
447
+ "megA_per_m": 1e6,
448
+ "gA_per_m": 1e9,
449
+ "fA_per_meter": 1e-15,
450
+ "pA_per_meter": 1e-12,
451
+ "nA_per_meter": 1e-9,
452
+ "uA_per_meter": 1e-6,
453
+ "mA_per_meter": 1e-3,
454
+ "A_per_meter": 1.0,
455
+ "kA_per_meter": 1e3,
456
+ "megA_per_meter": 1e6,
457
+ "gA_per_meter": 1e9,
458
+ },
459
+ "SurfaceHeat": {
460
+ "uW_per_m2": 1e-6,
461
+ "mW_per_m2": 1e-3,
462
+ "irrad_W_per_m2": 1.0,
463
+ "W_per_m2": 1.0,
464
+ "kW_per_m2": 1e3,
465
+ "megW_per_m2": 1e6,
466
+ "irrad_W_per_cm2": 1e4,
467
+ "W_per_cm2": 1e4,
468
+ "W_per_in2": 1550,
469
+ "erg_per_s_per_cm2": 1e-3,
470
+ "btu_per_hr_per_ft2": 3.15,
471
+ "btu_per_s_per_ft2": 11356.53,
472
+ "irrad_W_per_mm2": 1e6,
473
+ "irrad_met": 1.0,
474
+ },
475
+ "J-field": {
476
+ "fA_per_m2": 1e-15,
477
+ "pA_per_m2": 1e-12,
478
+ "nA_per_m2": 1e-9,
479
+ "uA_per_m2": 1e-6,
480
+ "mA_per_m2": 1e-3,
481
+ "A_per_m2": 1.0,
482
+ "kA_per_m2": 1e3,
483
+ "megA_per_m2": 1e6,
484
+ "gA_per_m2": 1e9,
485
+ "fA_per_meter2": 1e-15,
486
+ "pA_per_meter2": 1e-12,
487
+ "nA_per_meter2": 1e-9,
488
+ "uA_per_meter2": 1e-6,
489
+ "mA_per_meter2": 1e-3,
490
+ "A_per_meter2": 1.0,
491
+ "kA_per_meter2": 1e3,
492
+ "megA_per_meter2": 1e6,
493
+ "gA_per_meter2": 1e9,
494
+ },
495
+ }
496
+ SI_UNITS = {
497
+ "AngularSpeed": "rad_per_sec",
498
+ "Angle": "rad",
499
+ "Area": "m2",
500
+ "Capacitance": "F",
501
+ "Conductance": "Sie",
502
+ "Current": "A",
503
+ "Flux": "vs",
504
+ "Force": "newton",
505
+ "Freq": "Hz",
506
+ "Inductance": "H",
507
+ "Length": "meter",
508
+ "Mass": "kg",
509
+ "None": "",
510
+ "Resistance": "ohm",
511
+ "Speed": "m_per_sec",
512
+ "SurfaceHeat": "W_per_m2",
513
+ "Time": "s",
514
+ "Torque": "NewtonMeter",
515
+ "Voltage": "V",
516
+ "Temperature": "kel",
517
+ "Power": "W",
518
+ "B-field": "tesla",
519
+ "E-field": "V_per_meter",
520
+ "H-field": "A_per_meter",
521
+ "J-field": "A_per_m2",
522
+ }
523
+ UNIT_SYSTEM_OPERATIONS = {
524
+ # Multiplication of physical domains
525
+ "Voltage_multiply_Current": "Power",
526
+ "Torque_multiply_AngularSpeed": "Power",
527
+ "AngularSpeed_multiply_Time": "Angle",
528
+ "Current_multiply_Resistance": "Voltage",
529
+ "AngularSpeed_multiply_Inductance": "Resistance",
530
+ "Speed_multiply_Time": "Length",
531
+ # Division of Physical Domains
532
+ "Power_divide_Voltage": "Current",
533
+ "Power_divide_Current": "Voltage",
534
+ "Power_divide_AngularSpeed": "Torque",
535
+ "Power_divide_Torque": "AngularSpeed",
536
+ "Angle_divide_AngularSpeed": "Time",
537
+ "Angle_divide_Time": "AngularSpeed",
538
+ "Voltage_divide_Current": "Resistance",
539
+ "Voltage_divide_Resistance": "Current",
540
+ "Resistance_divide_AngularSpeed": "Inductance",
541
+ "Resistance_divide_Inductance": "AngularSpeed",
542
+ "None_divide_Freq": "Time",
543
+ "None_divide_Time": "Freq",
544
+ "Length_divide_Time": "Speed",
545
+ "Length_divide_Speed": "Time",
546
+ }
547
+
548
+
549
+ class INFINITE_SPHERE_TYPE(object):
550
+ """INFINITE_SPHERE_TYPE Enumerator class."""
551
+
552
+ (ThetaPhi, AzOverEl, ElOverAz) = ("Theta-Phi", "Az Over El", "El Over Az")
553
+
554
+
555
+ class FILLET(object):
556
+ """FilletType Enumerator class."""
557
+
558
+ (Round, Mitered) = range(0, 2)
559
+
560
+
561
+ class AXIS(object):
562
+ """CoordinateSystemAxis Enumerator class."""
563
+
564
+ (X, Y, Z) = range(0, 3)
565
+
566
+
567
+ class PLANE(object):
568
+ """CoordinateSystemPlane Enumerator class."""
569
+
570
+ (YZ, ZX, XY) = range(0, 3)
571
+
572
+
573
+ class GRAVITY(object):
574
+ """GravityDirection Enumerator class."""
575
+
576
+ (XNeg, YNeg, ZNeg, XPos, YPos, ZPos) = range(0, 6)
577
+
578
+
579
+ class VIEW(object):
580
+ """View Enumerator class."""
581
+
582
+ (XY, YZ, ZX, ISO) = ("XY", "YZ", "ZX", "iso")
583
+
584
+
585
+ class GLOBALCS(object):
586
+ """GlobalCS Enumerator class."""
587
+
588
+ (XY, YZ, ZX) = ("Global:XY", "Global:YZ", "Global:XZ")
589
+
590
+
591
+ class MATRIXOPERATIONSQ3D(object):
592
+ """Matrix Reduction types."""
593
+
594
+ (JoinSeries, JoinParallel, FloatNet, GroundNet, FloatTerminal, FloatInfinity, ReturnPath, AddSink, MoveSink) = (
595
+ "JoinSeries",
596
+ "JoinParallel",
597
+ "FloatNet",
598
+ "GroundNet",
599
+ "FloatTerminal",
600
+ "FloatInfinity",
601
+ "ReturnPath",
602
+ "AddSink",
603
+ "MoveSink",
604
+ )
605
+
606
+
607
+ class MATRIXOPERATIONSQ2D(object):
608
+ """Matrix Reduction types."""
609
+
610
+ (AddGround, SetReferenceGround, Float, Parallel, DiffPair) = (
611
+ "AddGround",
612
+ "SetReferenceGround",
613
+ "Float",
614
+ "Parallel",
615
+ "DiffPair",
616
+ )
617
+
618
+
619
+ class CATEGORIESQ3D(object):
620
+ """Plot Categories for Q2d and Q3d."""
621
+
622
+ class Q2D(object):
623
+ (
624
+ CMatrix,
625
+ GMatrix,
626
+ RMatrix,
627
+ LMatrix,
628
+ LumpedC,
629
+ LumpedG,
630
+ LumpedR,
631
+ LumpedL,
632
+ CharacteristicImpedance,
633
+ CrossTalkForward,
634
+ LumpedCrossTalkForward,
635
+ CrossTalkBackward,
636
+ ) = ("C", "G", "R", "L", "lumpC", "lumpG", "lumpR", "lumpL", "Z0", "Kf", "lumpKf", "Kb")
637
+
638
+ class Q3D(object):
639
+ (C, G, DCL, DCR, ACL, ACR) = ("C", "G", "DCL", "DCR", "ACL", "ACR")
640
+
641
+
642
+ class CSMODE(object):
643
+ """COORDINATE SYSTEM MODE Enumerator class."""
644
+
645
+ (View, Axis, ZXZ, ZYZ, AXISROTATION) = ("view", "axis", "zxz", "zyz", "axisrotation")
646
+
647
+
648
+ class SEGMENTTYPE(object):
649
+ """CROSSSECTION Enumerator class."""
650
+
651
+ (Line, Arc, Spline, AngularArc) = range(0, 4)
652
+
653
+
654
+ class CROSSSECTION(object):
655
+ """CROSSSECTION Enumerator class."""
656
+
657
+ (NONE, Line, Circle, Rectangle, Trapezoid) = range(0, 5)
658
+
659
+
660
+ class SWEEPDRAFT(object):
661
+ """SweepDraftType Enumerator class."""
662
+
663
+ (Extended, Round, Natural, Mixed) = range(0, 4)
664
+
665
+
666
+ class FlipChipOrientation(object):
667
+ """Chip orientation enumerator class."""
668
+
669
+ (Up, Down) = range(0, 2)
670
+
671
+
672
+ class SolverType(object):
673
+ """Provides solver type classes."""
674
+
675
+ (Hfss, Siwave, Q3D, Maxwell, Nexxim, TwinBuilder, Hfss3dLayout, SiwaveSYZ, SiwaveDC) = range(0, 9)
676
+
677
+
678
+ class CutoutSubdesignType(object):
679
+ (BoundingBox, Conformal, ConvexHull, Invalid) = range(0, 4)
680
+
681
+
682
+ class RadiationBoxType(object):
683
+ (BoundingBox, Conformal, ConvexHull, Polygon, Invalid) = range(0, 5)
684
+
685
+
686
+ class SweepType(object):
687
+ (Linear, LogCount, Invalid) = range(0, 3)
688
+
689
+
690
+ class BasisOrder(object):
691
+ """Enumeration-class for HFSS basis order settings.
692
+
693
+
694
+ Warning: the value ``single`` has been renamed to ``Single`` for consistency. Please update references to
695
+ ``single``.
696
+ """
697
+
698
+ (Mixed, Zero, Single, Double, Invalid) = (-1, 0, 1, 2, 3)
699
+
700
+
701
+ class NodeType(object):
702
+ """Type of node for source creation."""
703
+
704
+ (Positive, Negative, Floating) = range(0, 3)
705
+
706
+
707
+ class SourceType(object):
708
+ """Type of excitation enumerator."""
709
+
710
+ (CoaxPort, CircPort, LumpedPort, Vsource, Isource, Rlc, DcTerminal) = range(0, 7)
711
+
712
+
713
+ class SOLUTIONS(object):
714
+ """Provides the names of default solution types."""
715
+
716
+ class Hfss(object):
717
+ """Provides HFSS solution types."""
718
+
719
+ (DrivenModal, DrivenTerminal, EigenMode, Transient, SBR, Characteristic) = (
720
+ "Modal",
721
+ "Terminal",
722
+ "Eigenmode",
723
+ "Transient Network",
724
+ "SBR+",
725
+ "Characteristic",
726
+ )
727
+
728
+ class Maxwell3d(object):
729
+ """Provides Maxwell 3D solution types."""
730
+
731
+ (
732
+ Transient,
733
+ Magnetostatic,
734
+ EddyCurrent,
735
+ ElectroStatic,
736
+ ElectroDCConduction,
737
+ ElectroDCTransient,
738
+ TransientAPhiFormulation,
739
+ ) = (
740
+ "Transient",
741
+ "Magnetostatic",
742
+ "EddyCurrent",
743
+ "Electrostatic",
744
+ "ElectroDCConduction",
745
+ "ElectricTransient",
746
+ "TransientAPhiFormulation",
747
+ )
748
+
749
+ class Maxwell2d(object):
750
+ """Provides Maxwell 2D solution types."""
751
+
752
+ (
753
+ TransientXY,
754
+ TransientZ,
755
+ MagnetostaticXY,
756
+ MagnetostaticZ,
757
+ EddyCurrentXY,
758
+ EddyCurrentZ,
759
+ ElectroStaticXY,
760
+ ElectroStaticZ,
761
+ ElectroDCConductionX,
762
+ ElectroDCConductionZ,
763
+ ElectroDCTransientXY,
764
+ ElectroDCTransientZ,
765
+ ) = (
766
+ "TransientXY",
767
+ "TransientZ",
768
+ "MagnetostaticXY",
769
+ "MagnetostaticZ",
770
+ "EddyCurrentXY",
771
+ "EddyCurrentZ",
772
+ "ElectrostaticXY",
773
+ "ElectrostaticZ",
774
+ "ElectroDCConductionXY",
775
+ "ElectroDCConductionZ",
776
+ "ElectricTransientXY",
777
+ "ElectricTransientZ",
778
+ )
779
+
780
+ class Icepak(object):
781
+ """Provides Icepak solution types."""
782
+
783
+ (
784
+ SteadyTemperatureAndFlow,
785
+ SteadyTemperatureOnly,
786
+ SteadyFlowOnly,
787
+ TransientTemperatureAndFlow,
788
+ TransientTemperatureOnly,
789
+ TransientFlowOnly,
790
+ ) = (
791
+ "SteadyStateTemperatureAndFlow",
792
+ "SteadyStateTemperatureOnly",
793
+ "SteadyStateFlowOnly",
794
+ "TransientTemperatureAndFlow",
795
+ "TransientTemperatureOnly",
796
+ "TransientFlowOnly",
797
+ )
798
+
799
+ class Circuit(object):
800
+ """Provides Circuit solution types."""
801
+
802
+ (
803
+ NexximLNA,
804
+ NexximDC,
805
+ NexximTransient,
806
+ NexximQuickEye,
807
+ NexximVerifEye,
808
+ NexximAMI,
809
+ NexximOscillatorRSF,
810
+ NexximOscillator1T,
811
+ NexximOscillatorNT,
812
+ NexximHarmonicBalance1T,
813
+ NexximHarmonicBalanceNT,
814
+ NexximSystem,
815
+ NexximTVNoise,
816
+ HSPICE,
817
+ TR,
818
+ ) = (
819
+ "NexximLNA",
820
+ "NexximDC",
821
+ "NexximTransient",
822
+ "NexximQuickEye",
823
+ "NexximVerifEye",
824
+ "NexximAMI",
825
+ "NexximOscillatorRSF",
826
+ "NexximOscillator1T",
827
+ "NexximOscillatorNT",
828
+ "NexximHarmonicBalance1T",
829
+ "NexximHarmonicBalanceNT",
830
+ "NexximSystem",
831
+ "NexximTVNoise",
832
+ "HSPICE",
833
+ "TR",
834
+ )
835
+
836
+ class Mechanical(object):
837
+ """Provides Mechanical solution types."""
838
+
839
+ (Thermal, Structural, Modal) = ("Thermal", "Structural", "Modal")
840
+
841
+
842
+ class SETUPS(object):
843
+ """Provides constants for the default setup types."""
844
+
845
+ (
846
+ HFSSDrivenAuto,
847
+ HFSSDrivenDefault,
848
+ HFSSEigen,
849
+ HFSSTransient,
850
+ HFSSSBR,
851
+ MaxwellTransient,
852
+ Magnetostatic,
853
+ EddyCurrent,
854
+ Electrostatic,
855
+ ElectrostaticDC,
856
+ ElectricTransient,
857
+ SteadyTemperatureAndFlow,
858
+ SteadyTemperatureOnly,
859
+ SteadyFlowOnly,
860
+ Matrix,
861
+ NexximLNA,
862
+ NexximDC,
863
+ NexximTransient,
864
+ NexximQuickEye,
865
+ NexximVerifEye,
866
+ NexximAMI,
867
+ NexximOscillatorRSF,
868
+ NexximOscillator1T,
869
+ NexximOscillatorNT,
870
+ NexximHarmonicBalance1T,
871
+ NexximHarmonicBalanceNT,
872
+ NexximSystem,
873
+ NexximTVNoise,
874
+ HSPICE,
875
+ HFSS3DLayout,
876
+ Open,
877
+ Close,
878
+ MechTerm,
879
+ MechModal,
880
+ GRM,
881
+ TR,
882
+ TransientTemperatureAndFlow,
883
+ TransientTemperatureOnly,
884
+ TransientFlowOnly,
885
+ DFIG,
886
+ TPIM,
887
+ SPIM,
888
+ TPSM,
889
+ BLDC,
890
+ ASSM,
891
+ PMDC,
892
+ SRM,
893
+ LSSM,
894
+ UNIM,
895
+ DCM,
896
+ CPSM,
897
+ NSSM,
898
+ ) = range(0, 52)
899
+
900
+
901
+ CSS4_COLORS = {
902
+ "chocolate": "#D2691E",
903
+ "darkgreen": "#006400",
904
+ "orangered": "#FF4500",
905
+ "darkseagreen": "#8FBC8F",
906
+ "darkmagenta": "#8B008B",
907
+ "saddlebrown": "#8B4513",
908
+ "mediumaquamarine": "#66CDAA",
909
+ "limegreen": "#32CD32",
910
+ "blue": "#0000FF",
911
+ "mediumseagreen": "#3CB371",
912
+ "peru": "#CD853F",
913
+ "turquoise": "#40E0D0",
914
+ "darkcyan": "#008B8B",
915
+ "olivedrab": "#6B8E23",
916
+ "cyan": "#00FFFF",
917
+ "aquamarine": "#7FFFD4",
918
+ "powderblue": "#B0E0E6",
919
+ "hotpink": "#FF69B4",
920
+ "palegreen": "#98FB98",
921
+ "darkturquoise": "#00CED1",
922
+ "magenta": "#FF00FF",
923
+ "slateblue": "#6A5ACD",
924
+ "lightgreen": "#90EE90",
925
+ "sienna": "#A0522D",
926
+ "darkorchid": "#9932CC",
927
+ "orange": "#FFA500",
928
+ "forestgreen": "#228B22",
929
+ "palegoldenrod": "#EEE8AA",
930
+ "blueviolet": "#8A2BE2",
931
+ "royalblue": "#4169E1",
932
+ "teal": "#008080",
933
+ "darkgoldenrod": "#B8860B",
934
+ "lightskyblue": "#87CEFA",
935
+ "lime": "#00FF00",
936
+ "orchid": "#DA70D6",
937
+ "mediumorchid": "#BA55D3",
938
+ "indigo": "#4B0082",
939
+ "mediumspringgreen": "#00FA9A",
940
+ "tomato": "#FF6347",
941
+ "mediumblue": "#0000CD",
942
+ "midnightblue": "#191970",
943
+ "deepskyblue": "#00BFFF",
944
+ "salmon": "#FA8072",
945
+ "rosybrown": "#BC8F8F",
946
+ "mediumslateblue": "#7B68EE",
947
+ "moccasin": "#FFE4B5",
948
+ "paleturquoise": "#AFEEEE",
949
+ "darkblue": "#00008B",
950
+ "navy": "#000080",
951
+ "steelblue": "#4682B4",
952
+ "crimson": "#DC143C",
953
+ "red": "#FF0000",
954
+ "bisque": "#FFE4C4",
955
+ "darkslategray": "#2F4F4F",
956
+ "maroon": "#800000",
957
+ "mediumpurple": "#9370DB",
958
+ "darkslateblue": "#483D8B",
959
+ "darksalmon": "#E9967A",
960
+ "deeppink": "#FF1493",
961
+ "seagreen": "#2E8B57",
962
+ "mediumvioletred": "#C71585",
963
+ "greenyellow": "#ADFF2F",
964
+ "springgreen": "#00FF7F",
965
+ "sandybrown": "#F4A460",
966
+ "brown": "#A52A2A",
967
+ "lightpink": "#FFB6C1",
968
+ "olive": "#808000",
969
+ "burlywood": "#DEB887",
970
+ "dodgerblue": "#1E90FF",
971
+ "darkolivegreen": "#556B2F",
972
+ "lightsalmon": "#FFA07A",
973
+ "aqua": "#00FFFF",
974
+ "khaki": "#F0E68C",
975
+ "pink": "#FFC0CB",
976
+ "green": "#008000",
977
+ "darkorange": "#FF8C00",
978
+ "rebeccapurple": "#663399",
979
+ "coral": "#FF7F50",
980
+ "darkviolet": "#9400D3",
981
+ "purple": "#800080",
982
+ "palevioletred": "#DB7093",
983
+ "lightseagreen": "#20B2AA",
984
+ "indianred": "#CD5C5C",
985
+ "darkkhaki": "#BDB76B",
986
+ "lightcoral": "#F08080",
987
+ "mediumturquoise": "#48D1CC",
988
+ "peachpuff": "#FFDAB9",
989
+ "skyblue": "#87CEEB",
990
+ "fuchsia": "#FF00FF",
991
+ "navajowhite": "#FFDEAD",
992
+ "lawngreen": "#7CFC00",
993
+ "cornflowerblue": "#6495ED",
994
+ "tan": "#D2B48C",
995
+ "darkred": "#8B0000",
996
+ "firebrick": "#B22222",
997
+ "gold": "#FFD700",
998
+ "yellow": "#FFFF00",
999
+ "wheat": "#F5DEB3",
1000
+ "chartreuse": "#7FFF00",
1001
+ "goldenrod": "#DAA520",
1002
+ "violet": "#EE82EE",
1003
+ "yellowgreen": "#9ACD32",
1004
+ "cadetblue": "#5F9EA0",
1005
+ "plum": "#DDA0DD",
1006
+ }
1007
+
1008
+
1009
+ class LineStyle(object):
1010
+ """Provides trace line style constants."""
1011
+
1012
+ (Solid, Dot, ShortDash, DotShortDash, Dash, DotDash, DotDot, DotDotDash, LongDash) = (
1013
+ "Solid",
1014
+ "Dot",
1015
+ "ShortDash",
1016
+ "DotShortDash",
1017
+ "Dash",
1018
+ "DotDash",
1019
+ "DotDot",
1020
+ "DotDotDash",
1021
+ "LongDash",
1022
+ )
1023
+
1024
+
1025
+ class TraceType(object):
1026
+ """Provides trace type constants."""
1027
+
1028
+ (Continuous, Discrete, StickZero, StickInfinity, BarZero, BarInfinity, Histogram, Step, Stair, Digital) = (
1029
+ "Continuous",
1030
+ "Discrete",
1031
+ "Stick Zero",
1032
+ "Stick Infinity",
1033
+ "Bar Zero",
1034
+ "Bar Infinity",
1035
+ "Histogram",
1036
+ "Step",
1037
+ "Stair",
1038
+ "Digital",
1039
+ )
1040
+
1041
+
1042
+ class SymbolStyle(object):
1043
+ """Provides symbol style constants."""
1044
+
1045
+ (
1046
+ Box,
1047
+ Circle,
1048
+ VerticalEllipse,
1049
+ HorizontalEllipse,
1050
+ VerticalUpTriangle,
1051
+ VerticalDownTriangle,
1052
+ HorizontalLeftTriangle,
1053
+ HorizontalRightTriangle,
1054
+ ) = (
1055
+ "Box",
1056
+ "Circle",
1057
+ "VerticalEllipse",
1058
+ "HorizontalEllipse",
1059
+ "VerticalUpTriangle",
1060
+ "VerticalDownTriangle",
1061
+ "HorizontalLeftTriangle",
1062
+ "HorizontalRightTriangle",
1063
+ )