pyedb 0.13.0__py3-none-any.whl → 0.14.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.
- pyedb/__init__.py +1 -1
- pyedb/configuration/cfg_common.py +0 -5
- pyedb/configuration/cfg_components.py +0 -2
- pyedb/configuration/cfg_operations.py +0 -2
- pyedb/configuration/cfg_package_definition.py +0 -2
- pyedb/configuration/cfg_ports_sources.py +14 -11
- pyedb/configuration/cfg_stackup.py +0 -7
- pyedb/configuration/configuration.py +0 -6
- pyedb/dotnet/application/Variables.py +4 -40
- pyedb/dotnet/edb.py +27 -82
- pyedb/dotnet/edb_core/{edb_data/components_data.py → cell/hierarchy/component.py} +13 -133
- pyedb/dotnet/edb_core/cell/hierarchy/model.py +0 -3
- pyedb/dotnet/edb_core/cell/hierarchy/netlist_model.py +30 -0
- pyedb/dotnet/edb_core/cell/hierarchy/pin_pair_model.py +105 -0
- pyedb/dotnet/edb_core/cell/hierarchy/s_parameter_model.py +34 -0
- pyedb/dotnet/edb_core/cell/hierarchy/spice_model.py +34 -0
- pyedb/dotnet/edb_core/cell/layout.py +137 -0
- pyedb/dotnet/edb_core/cell/layout_obj.py +2 -4
- pyedb/dotnet/edb_core/cell/primitive.py +199 -1
- pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +52 -0
- pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +50 -0
- pyedb/dotnet/edb_core/cell/terminal/padstack_instance_terminal.py +88 -0
- pyedb/dotnet/edb_core/cell/terminal/pingroup_terminal.py +59 -0
- pyedb/dotnet/edb_core/cell/terminal/point_terminal.py +73 -0
- pyedb/dotnet/edb_core/{edb_data/terminals.py → cell/terminal/terminal.py} +33 -242
- pyedb/dotnet/edb_core/components.py +10 -56
- pyedb/dotnet/edb_core/definition/component_def.py +1 -8
- pyedb/dotnet/edb_core/definition/component_model.py +0 -2
- pyedb/dotnet/edb_core/definition/definitions.py +0 -2
- pyedb/dotnet/edb_core/definition/package_def.py +7 -5
- pyedb/dotnet/edb_core/edb_data/control_file.py +0 -3
- pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -5
- pyedb/dotnet/edb_core/edb_data/hfss_pi_simulation_setup_data.py +4 -9
- pyedb/dotnet/edb_core/edb_data/layer_data.py +0 -7
- pyedb/dotnet/edb_core/edb_data/nets_data.py +2 -5
- pyedb/dotnet/edb_core/edb_data/padstacks_data.py +11 -29
- pyedb/dotnet/edb_core/edb_data/ports.py +4 -4
- pyedb/dotnet/edb_core/edb_data/primitives_data.py +3 -26
- pyedb/dotnet/edb_core/edb_data/raptor_x_simulation_setup_data.py +13 -20
- pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +3 -11
- pyedb/dotnet/edb_core/edb_data/sources.py +12 -17
- pyedb/dotnet/edb_core/general.py +1 -6
- pyedb/dotnet/edb_core/geometry/polygon_data.py +0 -3
- pyedb/dotnet/edb_core/hfss.py +1 -33
- pyedb/dotnet/edb_core/layout.py +0 -35
- pyedb/dotnet/edb_core/layout_validation.py +1 -3
- pyedb/dotnet/edb_core/materials.py +1 -22
- pyedb/dotnet/edb_core/net_class.py +0 -8
- pyedb/dotnet/edb_core/nets.py +4 -29
- pyedb/dotnet/edb_core/padstack.py +76 -30
- pyedb/dotnet/edb_core/sim_setup_data/data/adaptive_frequency_data.py +72 -0
- pyedb/dotnet/edb_core/sim_setup_data/data/mesh_operation.py +287 -0
- pyedb/dotnet/edb_core/{edb_data/hfss_simulation_setup_data.py → sim_setup_data/data/settings.py} +174 -878
- pyedb/dotnet/edb_core/sim_setup_data/data/sweep_data.py +509 -0
- pyedb/dotnet/edb_core/sim_setup_data/io/__init__.py +0 -0
- pyedb/dotnet/edb_core/{edb_data/siwave_simulation_setup_data.py → sim_setup_data/io/siwave.py} +0 -341
- pyedb/dotnet/edb_core/siwave.py +5 -33
- pyedb/dotnet/edb_core/stackup.py +4 -51
- pyedb/dotnet/edb_core/utilities/simulation_setup.py +612 -366
- pyedb/generic/data_handlers.py +1 -9
- pyedb/generic/general_methods.py +3 -53
- pyedb/generic/plot.py +1 -2
- pyedb/ipc2581/ecad/cad_data/layer_feature.py +1 -7
- pyedb/ipc2581/ecad/cad_data/package.py +1 -4
- pyedb/ipc2581/ecad/cad_data/path.py +1 -3
- pyedb/ipc2581/ecad/cad_data/polygon.py +1 -6
- pyedb/ipc2581/ecad/cad_data/step.py +1 -10
- pyedb/ipc2581/ipc2581.py +8 -15
- pyedb/modeler/geometry_operators.py +164 -67
- pyedb/siwave.py +1 -16
- {pyedb-0.13.0.dist-info → pyedb-0.14.0.dist-info}/METADATA +2 -2
- {pyedb-0.13.0.dist-info → pyedb-0.14.0.dist-info}/RECORD +75 -61
- /pyedb/dotnet/edb_core/cell/{__init__.py → terminal/__init__.py} +0 -0
- {pyedb-0.13.0.dist-info → pyedb-0.14.0.dist-info}/LICENSE +0 -0
- {pyedb-0.13.0.dist-info → pyedb-0.14.0.dist-info}/WHEEL +0 -0
|
@@ -30,8 +30,8 @@ import re
|
|
|
30
30
|
import warnings
|
|
31
31
|
|
|
32
32
|
from pyedb.dotnet.clr_module import String
|
|
33
|
+
from pyedb.dotnet.edb_core.cell.hierarchy.component import EDBComponent
|
|
33
34
|
from pyedb.dotnet.edb_core.definition.component_def import EDBComponentDef
|
|
34
|
-
from pyedb.dotnet.edb_core.edb_data.components_data import EDBComponent
|
|
35
35
|
from pyedb.dotnet.edb_core.edb_data.padstacks_data import EDBPadstackInstance
|
|
36
36
|
from pyedb.dotnet.edb_core.edb_data.sources import Source, SourceType
|
|
37
37
|
from pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
|
|
@@ -40,7 +40,6 @@ from pyedb.generic.general_methods import (
|
|
|
40
40
|
_retry_ntimes,
|
|
41
41
|
generate_unique_name,
|
|
42
42
|
get_filename_without_extension,
|
|
43
|
-
pyedb_function_handler,
|
|
44
43
|
)
|
|
45
44
|
from pyedb.modeler.geometry_operators import GeometryOperators
|
|
46
45
|
|
|
@@ -85,7 +84,6 @@ class Components(object):
|
|
|
85
84
|
>>> edbapp.components
|
|
86
85
|
"""
|
|
87
86
|
|
|
88
|
-
@pyedb_function_handler()
|
|
89
87
|
def __getitem__(self, name):
|
|
90
88
|
"""Get a component or component definition from the Edb project.
|
|
91
89
|
|
|
@@ -95,7 +93,7 @@ class Components(object):
|
|
|
95
93
|
|
|
96
94
|
Returns
|
|
97
95
|
-------
|
|
98
|
-
:class:`pyedb.dotnet.edb_core.
|
|
96
|
+
:class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`
|
|
99
97
|
|
|
100
98
|
"""
|
|
101
99
|
if name in self.instances:
|
|
@@ -128,7 +126,6 @@ class Components(object):
|
|
|
128
126
|
def _edb(self):
|
|
129
127
|
return self._pedb.edb_api
|
|
130
128
|
|
|
131
|
-
@pyedb_function_handler()
|
|
132
129
|
def _init_parts(self):
|
|
133
130
|
a = self.components
|
|
134
131
|
a = self.resistors
|
|
@@ -171,7 +168,7 @@ class Components(object):
|
|
|
171
168
|
|
|
172
169
|
Returns
|
|
173
170
|
-------
|
|
174
|
-
dict[str, :class:`pyedb.dotnet.edb_core.
|
|
171
|
+
dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
|
|
175
172
|
Default dictionary for the EDB component.
|
|
176
173
|
|
|
177
174
|
Examples
|
|
@@ -191,7 +188,7 @@ class Components(object):
|
|
|
191
188
|
|
|
192
189
|
Returns
|
|
193
190
|
-------
|
|
194
|
-
Dict[str, :class:`pyedb.dotnet.edb_core.
|
|
191
|
+
Dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
|
|
195
192
|
Default dictionary for the EDB component.
|
|
196
193
|
|
|
197
194
|
Examples
|
|
@@ -221,7 +218,6 @@ class Components(object):
|
|
|
221
218
|
m = "Ansys.Ansoft.Edb.Definition.NPortComponentModel"
|
|
222
219
|
return {name: l for name, l in self.definitions.items() if m in [i.ToString() for i in l._comp_model]}
|
|
223
220
|
|
|
224
|
-
@pyedb_function_handler()
|
|
225
221
|
def import_definition(self, file_path):
|
|
226
222
|
"""Import component definition from json file.
|
|
227
223
|
|
|
@@ -256,7 +252,6 @@ class Components(object):
|
|
|
256
252
|
pass
|
|
257
253
|
return True
|
|
258
254
|
|
|
259
|
-
@pyedb_function_handler()
|
|
260
255
|
def export_definition(self, file_path):
|
|
261
256
|
"""Export component definitions to json file.
|
|
262
257
|
|
|
@@ -307,7 +302,6 @@ class Components(object):
|
|
|
307
302
|
json.dump(data, f, ensure_ascii=False, indent=4)
|
|
308
303
|
return file_path
|
|
309
304
|
|
|
310
|
-
@pyedb_function_handler()
|
|
311
305
|
def refresh_components(self):
|
|
312
306
|
"""Refresh the component dictionary."""
|
|
313
307
|
# self._logger.info("Refreshing the Components dictionary.")
|
|
@@ -324,7 +318,7 @@ class Components(object):
|
|
|
324
318
|
|
|
325
319
|
Returns
|
|
326
320
|
-------
|
|
327
|
-
dict[str, :class:`pyedb.dotnet.edb_core.
|
|
321
|
+
dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
|
|
328
322
|
Dictionary of resistors.
|
|
329
323
|
|
|
330
324
|
Examples
|
|
@@ -346,7 +340,7 @@ class Components(object):
|
|
|
346
340
|
|
|
347
341
|
Returns
|
|
348
342
|
-------
|
|
349
|
-
dict[str, :class:`pyedb.dotnet.edb_core.
|
|
343
|
+
dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
|
|
350
344
|
Dictionary of capacitors.
|
|
351
345
|
|
|
352
346
|
Examples
|
|
@@ -368,7 +362,7 @@ class Components(object):
|
|
|
368
362
|
|
|
369
363
|
Returns
|
|
370
364
|
-------
|
|
371
|
-
dict[str, :class:`pyedb.dotnet.edb_core.
|
|
365
|
+
dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
|
|
372
366
|
Dictionary of inductors.
|
|
373
367
|
|
|
374
368
|
Examples
|
|
@@ -391,7 +385,7 @@ class Components(object):
|
|
|
391
385
|
|
|
392
386
|
Returns
|
|
393
387
|
-------
|
|
394
|
-
dict[str, :class:`pyedb.dotnet.edb_core.
|
|
388
|
+
dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
|
|
395
389
|
Dictionary of integrated circuits.
|
|
396
390
|
|
|
397
391
|
Examples
|
|
@@ -414,7 +408,7 @@ class Components(object):
|
|
|
414
408
|
|
|
415
409
|
Returns
|
|
416
410
|
-------
|
|
417
|
-
dict[str, :class:`pyedb.dotnet.edb_core.
|
|
411
|
+
dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
|
|
418
412
|
Dictionary of circuit inputs and outputs.
|
|
419
413
|
|
|
420
414
|
Examples
|
|
@@ -437,7 +431,7 @@ class Components(object):
|
|
|
437
431
|
|
|
438
432
|
Returns
|
|
439
433
|
-------
|
|
440
|
-
dict[str, :class:`pyedb.dotnet.edb_core.
|
|
434
|
+
dict[str, :class:`pyedb.dotnet.edb_core.cell.hierarchy.component.EDBComponent`]
|
|
441
435
|
Dictionary of other core components.
|
|
442
436
|
|
|
443
437
|
Examples
|
|
@@ -479,7 +473,6 @@ class Components(object):
|
|
|
479
473
|
self._comps_by_part[val.partname] = [val]
|
|
480
474
|
return self._comps_by_part
|
|
481
475
|
|
|
482
|
-
@pyedb_function_handler()
|
|
483
476
|
def get_component_by_name(self, name):
|
|
484
477
|
"""Retrieve a component by name.
|
|
485
478
|
|
|
@@ -500,7 +493,6 @@ class Components(object):
|
|
|
500
493
|
else:
|
|
501
494
|
pass
|
|
502
495
|
|
|
503
|
-
@pyedb_function_handler()
|
|
504
496
|
def get_components_from_nets(self, netlist=None):
|
|
505
497
|
"""Retrieve components from a net list.
|
|
506
498
|
|
|
@@ -525,7 +517,6 @@ class Components(object):
|
|
|
525
517
|
cmp_list.append(refdes)
|
|
526
518
|
return cmp_list
|
|
527
519
|
|
|
528
|
-
@pyedb_function_handler()
|
|
529
520
|
def _get_edb_pin_from_pin_name(self, cmp, pin):
|
|
530
521
|
if not isinstance(cmp, self._pedb.edb_api.cell.hierarchy.component):
|
|
531
522
|
return False
|
|
@@ -536,7 +527,6 @@ class Components(object):
|
|
|
536
527
|
return pins[0]
|
|
537
528
|
return False
|
|
538
529
|
|
|
539
|
-
@pyedb_function_handler()
|
|
540
530
|
def get_component_placement_vector(
|
|
541
531
|
self,
|
|
542
532
|
mounted_component,
|
|
@@ -634,7 +624,6 @@ class Components(object):
|
|
|
634
624
|
self._logger.warning("Failed to compute vector.")
|
|
635
625
|
return False, [0, 0], 0, 0
|
|
636
626
|
|
|
637
|
-
@pyedb_function_handler()
|
|
638
627
|
def get_solder_ball_height(self, cmp):
|
|
639
628
|
"""Get component solder ball height.
|
|
640
629
|
|
|
@@ -656,7 +645,6 @@ class Components(object):
|
|
|
656
645
|
return cmp_prop.GetSolderBallProperty().GetHeight()
|
|
657
646
|
return False
|
|
658
647
|
|
|
659
|
-
@pyedb_function_handler()
|
|
660
648
|
def create_source_on_component(self, sources=None):
|
|
661
649
|
"""Create voltage, current source, or resistor on component.
|
|
662
650
|
|
|
@@ -735,7 +723,6 @@ class Components(object):
|
|
|
735
723
|
)
|
|
736
724
|
return True
|
|
737
725
|
|
|
738
|
-
@pyedb_function_handler()
|
|
739
726
|
def create_port_on_pins(self, refdes, pins, reference_pins, impedance=50.0, port_name=None, pec_boundary=False):
|
|
740
727
|
"""Create circuit port between pins and reference ones.
|
|
741
728
|
|
|
@@ -855,7 +842,6 @@ class Components(object):
|
|
|
855
842
|
return term
|
|
856
843
|
return False
|
|
857
844
|
|
|
858
|
-
@pyedb_function_handler()
|
|
859
845
|
def create_port_on_component(
|
|
860
846
|
self,
|
|
861
847
|
component,
|
|
@@ -1030,7 +1016,6 @@ class Components(object):
|
|
|
1030
1016
|
self.create_port_on_pins(component, pin, ref_pins)
|
|
1031
1017
|
return True
|
|
1032
1018
|
|
|
1033
|
-
@pyedb_function_handler()
|
|
1034
1019
|
def _create_terminal(self, pin, term_name=None):
|
|
1035
1020
|
"""Create terminal on component pin.
|
|
1036
1021
|
|
|
@@ -1060,7 +1045,6 @@ class Components(object):
|
|
|
1060
1045
|
)
|
|
1061
1046
|
return term
|
|
1062
1047
|
|
|
1063
|
-
@pyedb_function_handler()
|
|
1064
1048
|
def _get_closest_pin_from(self, pin, ref_pinlist):
|
|
1065
1049
|
"""Returns the closest pin from given pin among the list of reference pins.
|
|
1066
1050
|
|
|
@@ -1092,7 +1076,6 @@ class Components(object):
|
|
|
1092
1076
|
closest_pin = ref_pin
|
|
1093
1077
|
return closest_pin
|
|
1094
1078
|
|
|
1095
|
-
@pyedb_function_handler()
|
|
1096
1079
|
def replace_rlc_by_gap_boundaries(self, component=None):
|
|
1097
1080
|
"""Replace RLC component by RLC gap boundaries. These boundary types are compatible with 3D modeler export.
|
|
1098
1081
|
Only 2 pins RLC components are supported in this command.
|
|
@@ -1134,7 +1117,6 @@ class Components(object):
|
|
|
1134
1117
|
component.is_enabled = False
|
|
1135
1118
|
return self.add_rlc_boundary(component.refdes, False)
|
|
1136
1119
|
|
|
1137
|
-
@pyedb_function_handler()
|
|
1138
1120
|
def deactivate_rlc_component(self, component=None, create_circuit_port=False, pec_boundary=False):
|
|
1139
1121
|
"""Deactivate RLC component with a possibility to convert it to a circuit port.
|
|
1140
1122
|
|
|
@@ -1187,7 +1169,6 @@ class Components(object):
|
|
|
1187
1169
|
component=component.refdes, circuit_ports=create_circuit_port, pec_boundary=pec_boundary
|
|
1188
1170
|
)
|
|
1189
1171
|
|
|
1190
|
-
@pyedb_function_handler()
|
|
1191
1172
|
def add_port_on_rlc_component(self, component=None, circuit_ports=True, pec_boundary=False):
|
|
1192
1173
|
"""Deactivate RLC component and replace it with a circuit port.
|
|
1193
1174
|
The circuit port supports only two-pin components.
|
|
@@ -1261,7 +1242,6 @@ class Components(object):
|
|
|
1261
1242
|
return True
|
|
1262
1243
|
return False
|
|
1263
1244
|
|
|
1264
|
-
@pyedb_function_handler()
|
|
1265
1245
|
def add_rlc_boundary(self, component=None, circuit_type=True):
|
|
1266
1246
|
"""Add RLC gap boundary on component and replace it with a circuit port.
|
|
1267
1247
|
The circuit port supports only 2-pin components.
|
|
@@ -1335,7 +1315,6 @@ class Components(object):
|
|
|
1335
1315
|
self._logger.info("Component {} has been replaced by port".format(component.refdes))
|
|
1336
1316
|
return True
|
|
1337
1317
|
|
|
1338
|
-
@pyedb_function_handler()
|
|
1339
1318
|
def _create_pin_group_terminal(self, pingroup, isref=False, term_name=None, term_type="circuit"):
|
|
1340
1319
|
"""Creates an EDB pin group terminal from a given EDB pin group.
|
|
1341
1320
|
|
|
@@ -1370,7 +1349,6 @@ class Components(object):
|
|
|
1370
1349
|
pingroup_term.SetIsAutoPort(True)
|
|
1371
1350
|
return pingroup_term
|
|
1372
1351
|
|
|
1373
|
-
@pyedb_function_handler()
|
|
1374
1352
|
def _is_top_component(self, cmp):
|
|
1375
1353
|
"""Test the component placement layer.
|
|
1376
1354
|
|
|
@@ -1392,7 +1370,6 @@ class Components(object):
|
|
|
1392
1370
|
else:
|
|
1393
1371
|
return False
|
|
1394
1372
|
|
|
1395
|
-
@pyedb_function_handler()
|
|
1396
1373
|
def _getComponentDefinition(self, name, pins):
|
|
1397
1374
|
componentDefinition = self._pedb.edb_api.definition.ComponentDef.FindByName(self._db, name)
|
|
1398
1375
|
if componentDefinition.IsNull():
|
|
@@ -1415,7 +1392,6 @@ class Components(object):
|
|
|
1415
1392
|
self._logger.warning("Found existing component definition for footprint {}".format(name))
|
|
1416
1393
|
return componentDefinition
|
|
1417
1394
|
|
|
1418
|
-
@pyedb_function_handler()
|
|
1419
1395
|
def create_rlc_component(
|
|
1420
1396
|
self, pins, component_name="", r_value=None, c_value=None, l_value=None, is_parallel=False
|
|
1421
1397
|
): # pragma: no cover
|
|
@@ -1455,7 +1431,6 @@ class Components(object):
|
|
|
1455
1431
|
is_parallel=is_parallel,
|
|
1456
1432
|
)
|
|
1457
1433
|
|
|
1458
|
-
@pyedb_function_handler()
|
|
1459
1434
|
def create(
|
|
1460
1435
|
self,
|
|
1461
1436
|
pins,
|
|
@@ -1571,7 +1546,6 @@ class Components(object):
|
|
|
1571
1546
|
self._cmp[new_cmp.GetName()] = new_edb_comp
|
|
1572
1547
|
return new_edb_comp
|
|
1573
1548
|
|
|
1574
|
-
@pyedb_function_handler()
|
|
1575
1549
|
def create_component_from_pins(
|
|
1576
1550
|
self, pins, component_name, placement_layer=None, component_part_name=None
|
|
1577
1551
|
): # pragma: no cover
|
|
@@ -1614,7 +1588,6 @@ class Components(object):
|
|
|
1614
1588
|
is_rlc=False,
|
|
1615
1589
|
)
|
|
1616
1590
|
|
|
1617
|
-
@pyedb_function_handler()
|
|
1618
1591
|
def set_component_model(self, componentname, model_type="Spice", modelpath=None, modelname=None):
|
|
1619
1592
|
"""Assign a Spice or Touchstone model to a component.
|
|
1620
1593
|
|
|
@@ -1703,7 +1676,6 @@ class Components(object):
|
|
|
1703
1676
|
return False
|
|
1704
1677
|
return True
|
|
1705
1678
|
|
|
1706
|
-
@pyedb_function_handler()
|
|
1707
1679
|
def create_pingroup_from_pins(self, pins, group_name=None):
|
|
1708
1680
|
"""Create a pin group on a component.
|
|
1709
1681
|
|
|
@@ -1771,7 +1743,6 @@ class Components(object):
|
|
|
1771
1743
|
pingroup.SetNet(pins[0].GetNet())
|
|
1772
1744
|
return pingroup
|
|
1773
1745
|
|
|
1774
|
-
@pyedb_function_handler()
|
|
1775
1746
|
def delete_single_pin_rlc(self, deactivate_only=False):
|
|
1776
1747
|
# type: (bool) -> list
|
|
1777
1748
|
"""Delete all RLC components with a single pin.
|
|
@@ -1813,7 +1784,6 @@ class Components(object):
|
|
|
1813
1784
|
|
|
1814
1785
|
return deleted_comps
|
|
1815
1786
|
|
|
1816
|
-
@pyedb_function_handler()
|
|
1817
1787
|
def delete_component(self, component_name): # pragma: no cover
|
|
1818
1788
|
"""Delete a component.
|
|
1819
1789
|
|
|
@@ -1841,7 +1811,6 @@ class Components(object):
|
|
|
1841
1811
|
warnings.warn("`delete_component` is deprecated. Use `delete` property instead.", DeprecationWarning)
|
|
1842
1812
|
return self.delete(component_name=component_name)
|
|
1843
1813
|
|
|
1844
|
-
@pyedb_function_handler()
|
|
1845
1814
|
def delete(self, component_name):
|
|
1846
1815
|
"""Delete a component.
|
|
1847
1816
|
|
|
@@ -1871,7 +1840,6 @@ class Components(object):
|
|
|
1871
1840
|
return True
|
|
1872
1841
|
return False
|
|
1873
1842
|
|
|
1874
|
-
@pyedb_function_handler()
|
|
1875
1843
|
def disable_rlc_component(self, component_name):
|
|
1876
1844
|
"""Disable a RLC component.
|
|
1877
1845
|
|
|
@@ -1907,7 +1875,6 @@ class Components(object):
|
|
|
1907
1875
|
return True
|
|
1908
1876
|
return False
|
|
1909
1877
|
|
|
1910
|
-
@pyedb_function_handler()
|
|
1911
1878
|
def set_solder_ball(
|
|
1912
1879
|
self,
|
|
1913
1880
|
component="",
|
|
@@ -2014,7 +1981,6 @@ class Components(object):
|
|
|
2014
1981
|
edb_cmp.SetComponentProperty(cmp_property)
|
|
2015
1982
|
return True
|
|
2016
1983
|
|
|
2017
|
-
@pyedb_function_handler()
|
|
2018
1984
|
def set_component_rlc(
|
|
2019
1985
|
self,
|
|
2020
1986
|
componentname,
|
|
@@ -2099,7 +2065,6 @@ class Components(object):
|
|
|
2099
2065
|
self._logger.info("RLC properties for Component %s has been assigned.", componentname)
|
|
2100
2066
|
return True
|
|
2101
2067
|
|
|
2102
|
-
@pyedb_function_handler()
|
|
2103
2068
|
def update_rlc_from_bom(
|
|
2104
2069
|
self,
|
|
2105
2070
|
bom_file,
|
|
@@ -2169,7 +2134,6 @@ class Components(object):
|
|
|
2169
2134
|
self.components[comp].is_enabled = False
|
|
2170
2135
|
return found
|
|
2171
2136
|
|
|
2172
|
-
@pyedb_function_handler()
|
|
2173
2137
|
def import_bom(
|
|
2174
2138
|
self,
|
|
2175
2139
|
bom_file,
|
|
@@ -2260,7 +2224,6 @@ class Components(object):
|
|
|
2260
2224
|
self.components[comp].is_enabled = False
|
|
2261
2225
|
return True
|
|
2262
2226
|
|
|
2263
|
-
@pyedb_function_handler()
|
|
2264
2227
|
def export_bom(self, bom_file, delimiter=","):
|
|
2265
2228
|
"""Export Bom file from layout.
|
|
2266
2229
|
|
|
@@ -2291,7 +2254,6 @@ class Components(object):
|
|
|
2291
2254
|
f.writelines([delimiter.join([refdes, part_name, comp_type, value + "\n"])])
|
|
2292
2255
|
return True
|
|
2293
2256
|
|
|
2294
|
-
@pyedb_function_handler
|
|
2295
2257
|
def find_by_reference_designator(self, reference_designator):
|
|
2296
2258
|
"""Find a component.
|
|
2297
2259
|
|
|
@@ -2303,7 +2265,6 @@ class Components(object):
|
|
|
2303
2265
|
obj = self._pedb.edb_api.cell.hierarchy.component.FindByName(self._active_layout, reference_designator)
|
|
2304
2266
|
return EDBComponent(self._pedb, obj)
|
|
2305
2267
|
|
|
2306
|
-
@pyedb_function_handler()
|
|
2307
2268
|
def get_pin_from_component(self, component, netName=None, pinName=None):
|
|
2308
2269
|
"""Retrieve the pins of a component.
|
|
2309
2270
|
|
|
@@ -2356,7 +2317,6 @@ class Components(object):
|
|
|
2356
2317
|
pins = [p for p in list(component.LayoutObjs) if int(p.GetObjType()) == 1 and p.IsLayoutPin()]
|
|
2357
2318
|
return pins
|
|
2358
2319
|
|
|
2359
|
-
@pyedb_function_handler()
|
|
2360
2320
|
def get_aedt_pin_name(self, pin):
|
|
2361
2321
|
"""Retrieve the pin name that is shown in AEDT.
|
|
2362
2322
|
|
|
@@ -2388,7 +2348,6 @@ class Components(object):
|
|
|
2388
2348
|
name = str(name).strip("'")
|
|
2389
2349
|
return name
|
|
2390
2350
|
|
|
2391
|
-
@pyedb_function_handler
|
|
2392
2351
|
def get_pins(self, reference_designator, net_name=None, pin_name=None):
|
|
2393
2352
|
"""Get component pins.
|
|
2394
2353
|
|
|
@@ -2416,7 +2375,6 @@ class Components(object):
|
|
|
2416
2375
|
|
|
2417
2376
|
return pins
|
|
2418
2377
|
|
|
2419
|
-
@pyedb_function_handler()
|
|
2420
2378
|
def get_pin_position(self, pin):
|
|
2421
2379
|
"""Retrieve the pin position in meters.
|
|
2422
2380
|
|
|
@@ -2450,7 +2408,6 @@ class Components(object):
|
|
|
2450
2408
|
)
|
|
2451
2409
|
return [pin_xy.X.ToDouble(), pin_xy.Y.ToDouble()]
|
|
2452
2410
|
|
|
2453
|
-
@pyedb_function_handler()
|
|
2454
2411
|
def get_pins_name_from_net(self, net_name, pin_list=None):
|
|
2455
2412
|
"""Retrieve pins belonging to a net.
|
|
2456
2413
|
|
|
@@ -2485,7 +2442,6 @@ class Components(object):
|
|
|
2485
2442
|
pin_names.append(self.get_aedt_pin_name(pin))
|
|
2486
2443
|
return pin_names
|
|
2487
2444
|
|
|
2488
|
-
@pyedb_function_handler()
|
|
2489
2445
|
def get_nets_from_pin_list(self, PinList):
|
|
2490
2446
|
"""Retrieve nets with one or more pins.
|
|
2491
2447
|
|
|
@@ -2512,7 +2468,6 @@ class Components(object):
|
|
|
2512
2468
|
netlist.append(pin.GetNet().GetName())
|
|
2513
2469
|
return list(set(netlist))
|
|
2514
2470
|
|
|
2515
|
-
@pyedb_function_handler()
|
|
2516
2471
|
def get_component_net_connection_info(self, refdes):
|
|
2517
2472
|
"""Retrieve net connection information.
|
|
2518
2473
|
|
|
@@ -2602,7 +2557,6 @@ class Components(object):
|
|
|
2602
2557
|
|
|
2603
2558
|
return through_comp_list
|
|
2604
2559
|
|
|
2605
|
-
@pyedb_function_handler()
|
|
2606
2560
|
def short_component_pins(self, component_name, pins_to_short=None, width=1e-3):
|
|
2607
2561
|
"""Short pins of component with a trace.
|
|
2608
2562
|
|
|
@@ -24,7 +24,6 @@ import os
|
|
|
24
24
|
|
|
25
25
|
from pyedb.dotnet.edb_core.definition.component_model import NPortComponentModel
|
|
26
26
|
from pyedb.dotnet.edb_core.utilities.obj_base import ObjBase
|
|
27
|
-
from pyedb.generic.general_methods import pyedb_function_handler
|
|
28
27
|
|
|
29
28
|
|
|
30
29
|
class EDBComponentDef(ObjBase):
|
|
@@ -84,7 +83,7 @@ class EDBComponentDef(ObjBase):
|
|
|
84
83
|
-------
|
|
85
84
|
dict of :class:`EDBComponent`
|
|
86
85
|
"""
|
|
87
|
-
from pyedb.dotnet.edb_core.
|
|
86
|
+
from pyedb.dotnet.edb_core.cell.hierarchy.component import EDBComponent
|
|
88
87
|
|
|
89
88
|
comp_list = [
|
|
90
89
|
EDBComponent(self._pedb, l)
|
|
@@ -94,7 +93,6 @@ class EDBComponentDef(ObjBase):
|
|
|
94
93
|
]
|
|
95
94
|
return {comp.refdes: comp for comp in comp_list}
|
|
96
95
|
|
|
97
|
-
@pyedb_function_handler()
|
|
98
96
|
def assign_rlc_model(self, res=None, ind=None, cap=None, is_parallel=False):
|
|
99
97
|
"""Assign RLC to all components under this part name.
|
|
100
98
|
|
|
@@ -114,7 +112,6 @@ class EDBComponentDef(ObjBase):
|
|
|
114
112
|
comp.assign_rlc_model(res, ind, cap, is_parallel)
|
|
115
113
|
return True
|
|
116
114
|
|
|
117
|
-
@pyedb_function_handler()
|
|
118
115
|
def assign_s_param_model(self, file_path, model_name=None, reference_net=None):
|
|
119
116
|
"""Assign S-parameter to all components under this part name.
|
|
120
117
|
|
|
@@ -133,7 +130,6 @@ class EDBComponentDef(ObjBase):
|
|
|
133
130
|
comp.assign_s_param_model(file_path, model_name, reference_net)
|
|
134
131
|
return True
|
|
135
132
|
|
|
136
|
-
@pyedb_function_handler()
|
|
137
133
|
def assign_spice_model(self, file_path, model_name=None):
|
|
138
134
|
"""Assign Spice model to all components under this part name.
|
|
139
135
|
|
|
@@ -171,11 +167,9 @@ class EDBComponentDef(ObjBase):
|
|
|
171
167
|
temp[edb_object.name] = edb_object
|
|
172
168
|
return temp
|
|
173
169
|
|
|
174
|
-
@pyedb_function_handler
|
|
175
170
|
def _add_component_model(self, value):
|
|
176
171
|
self._edb_object.AddComponentModel(value._edb_object)
|
|
177
172
|
|
|
178
|
-
@pyedb_function_handler
|
|
179
173
|
def add_n_port_model(self, fpath, name=None):
|
|
180
174
|
if not name:
|
|
181
175
|
name = os.path.splitext(os.path.basename(fpath)[0])
|
|
@@ -188,7 +182,6 @@ class EDBComponentDef(ObjBase):
|
|
|
188
182
|
|
|
189
183
|
self._add_component_model(n_port_comp_model)
|
|
190
184
|
|
|
191
|
-
@pyedb_function_handler
|
|
192
185
|
def create(self, name):
|
|
193
186
|
cell_type = self._pedb.edb_api.cell.CellType.FootprintCell
|
|
194
187
|
footprint_cell = self._pedb._active_cell.cell.Create(self._pedb.active_db, cell_type, name)
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
# SOFTWARE.
|
|
22
22
|
|
|
23
23
|
from pyedb.dotnet.edb_core.utilities.obj_base import ObjBase
|
|
24
|
-
from pyedb.generic.general_methods import pyedb_function_handler
|
|
25
24
|
|
|
26
25
|
|
|
27
26
|
class ComponentModel(ObjBase):
|
|
@@ -31,7 +30,6 @@ class ComponentModel(ObjBase):
|
|
|
31
30
|
super().__init__(pedb, edb_object)
|
|
32
31
|
self._model_type_mapping = {"PinPairModel": self._pedb.edb_api.cell}
|
|
33
32
|
|
|
34
|
-
@pyedb_function_handler()
|
|
35
33
|
def name(self):
|
|
36
34
|
"""Name of the component model."""
|
|
37
35
|
return self._edb_object.GetName()
|
|
@@ -22,7 +22,6 @@
|
|
|
22
22
|
|
|
23
23
|
from pyedb.dotnet.edb_core.definition.component_def import EDBComponentDef
|
|
24
24
|
from pyedb.dotnet.edb_core.definition.package_def import PackageDef
|
|
25
|
-
from pyedb.generic.general_methods import pyedb_function_handler
|
|
26
25
|
|
|
27
26
|
|
|
28
27
|
class Definitions:
|
|
@@ -39,7 +38,6 @@ class Definitions:
|
|
|
39
38
|
"""Package definitions."""
|
|
40
39
|
return {l.GetName(): PackageDef(self._pedb, l) for l in list(self._pedb.active_db.PackageDefs)}
|
|
41
40
|
|
|
42
|
-
@pyedb_function_handler
|
|
43
41
|
def add_package_def(self, name, component_part_name=None, boundary_points=None):
|
|
44
42
|
"""Add a package definition.
|
|
45
43
|
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
from pyedb.dotnet.edb_core.geometry.polygon_data import PolygonData
|
|
24
24
|
from pyedb.dotnet.edb_core.utilities.obj_base import ObjBase
|
|
25
|
-
from pyedb.
|
|
25
|
+
from pyedb.edb_logger import pyedb_logger
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
class PackageDef(ObjBase):
|
|
@@ -37,7 +37,7 @@ class PackageDef(ObjBase):
|
|
|
37
37
|
component_part_name : str, optional
|
|
38
38
|
Part name of the component.
|
|
39
39
|
extent_bounding_box : list, optional
|
|
40
|
-
Bounding box defines the shape of the package. For example, [[0, 0], ["2mm", "2mm"].
|
|
40
|
+
Bounding box defines the shape of the package. For example, [[0, 0], ["2mm", "2mm"]].
|
|
41
41
|
|
|
42
42
|
"""
|
|
43
43
|
|
|
@@ -48,7 +48,6 @@ class PackageDef(ObjBase):
|
|
|
48
48
|
else:
|
|
49
49
|
self._edb_object = edb_object
|
|
50
50
|
|
|
51
|
-
@pyedb_function_handler
|
|
52
51
|
def __create_from_name(self, name, component_part_name=None, extent_bounding_box=None):
|
|
53
52
|
"""Create a package definition.
|
|
54
53
|
|
|
@@ -72,12 +71,16 @@ class PackageDef(ObjBase):
|
|
|
72
71
|
bbox = [[y_pt1 - y_mid, x_pt1 - x_mid], [y_pt2 - y_mid, x_pt2 - x_mid]]
|
|
73
72
|
else:
|
|
74
73
|
bbox = extent_bounding_box
|
|
74
|
+
if bbox is None:
|
|
75
|
+
pyedb_logger.warning(
|
|
76
|
+
"Package creation uses bounding box but it cannot be inferred. "
|
|
77
|
+
"Please set argument 'component_part_name' or 'extent_bounding_box'."
|
|
78
|
+
)
|
|
75
79
|
polygon_data = PolygonData(self._pedb, create_from_bounding_box=True, points=bbox)
|
|
76
80
|
|
|
77
81
|
edb_object.SetExteriorBoundary(polygon_data._edb_object)
|
|
78
82
|
return edb_object
|
|
79
83
|
|
|
80
|
-
@pyedb_function_handler
|
|
81
84
|
def delete(self):
|
|
82
85
|
"""Delete a package definition object from the database."""
|
|
83
86
|
return self._edb_object.Delete()
|
|
@@ -141,7 +144,6 @@ class PackageDef(ObjBase):
|
|
|
141
144
|
value = self._pedb.edb_value(value)
|
|
142
145
|
self._edb_object.SetHeight(value)
|
|
143
146
|
|
|
144
|
-
@pyedb_function_handler
|
|
145
147
|
def set_heatsink(self, fin_base_height, fin_height, fin_orientation, fin_spacing, fin_thickness):
|
|
146
148
|
from pyedb.dotnet.edb_core.utilities.heatsink import HeatSink
|
|
147
149
|
|
|
@@ -32,7 +32,6 @@ from pyedb.generic.general_methods import (
|
|
|
32
32
|
env_value,
|
|
33
33
|
is_ironpython,
|
|
34
34
|
is_linux,
|
|
35
|
-
pyedb_function_handler,
|
|
36
35
|
)
|
|
37
36
|
from pyedb.misc.aedtlib_personalib_install import write_pretty_xml
|
|
38
37
|
from pyedb.misc.misc import list_installed_ansysem
|
|
@@ -43,7 +42,6 @@ else:
|
|
|
43
42
|
import subprocess
|
|
44
43
|
|
|
45
44
|
|
|
46
|
-
@pyedb_function_handler()
|
|
47
45
|
def convert_technology_file(tech_file, edbversion=None, control_file=None):
|
|
48
46
|
"""Convert a technology file to edb control file (xml).
|
|
49
47
|
|
|
@@ -1255,7 +1253,6 @@ class ControlFile:
|
|
|
1255
1253
|
)
|
|
1256
1254
|
return True
|
|
1257
1255
|
|
|
1258
|
-
@pyedb_function_handler()
|
|
1259
1256
|
def write_xml(self, xml_output):
|
|
1260
1257
|
"""Write xml to output file
|
|
1261
1258
|
|
|
@@ -23,7 +23,6 @@
|
|
|
23
23
|
from pyedb.dotnet.edb_core.edb_data.edbvalue import EdbValue
|
|
24
24
|
from pyedb.dotnet.edb_core.edb_data.primitives_data import cast
|
|
25
25
|
from pyedb.dotnet.edb_core.general import convert_pytuple_to_nettuple
|
|
26
|
-
from pyedb.generic.general_methods import pyedb_function_handler
|
|
27
26
|
|
|
28
27
|
|
|
29
28
|
class HfssExtentInfo:
|
|
@@ -49,12 +48,10 @@ class HfssExtentInfo:
|
|
|
49
48
|
"pml": self._pedb.edb_api.utility.utility.OpenRegionType.PML,
|
|
50
49
|
}
|
|
51
50
|
|
|
52
|
-
@pyedb_function_handler()
|
|
53
51
|
def _get_edb_value(self, value):
|
|
54
52
|
"""Get EDB value."""
|
|
55
53
|
return self._pedb.edb_value(value)
|
|
56
54
|
|
|
57
|
-
@pyedb_function_handler()
|
|
58
55
|
def _update_hfss_extent_info(self, hfss_extent_info):
|
|
59
56
|
return self._pedb.active_cell.SetHFSSExtentInfo(hfss_extent_info)
|
|
60
57
|
|
|
@@ -321,7 +318,6 @@ class HfssExtentInfo:
|
|
|
321
318
|
info.UseXYDataExtentForVerticalExpansion = value
|
|
322
319
|
self._update_hfss_extent_info(info)
|
|
323
320
|
|
|
324
|
-
@pyedb_function_handler()
|
|
325
321
|
def load_config(self, config):
|
|
326
322
|
"""Load HFSS extent configuration.
|
|
327
323
|
|
|
@@ -334,7 +330,6 @@ class HfssExtentInfo:
|
|
|
334
330
|
if hasattr(self, i):
|
|
335
331
|
setattr(self, i, j)
|
|
336
332
|
|
|
337
|
-
@pyedb_function_handler()
|
|
338
333
|
def export_config(self):
|
|
339
334
|
"""Export HFSS extent information.
|
|
340
335
|
|
|
@@ -21,15 +21,12 @@
|
|
|
21
21
|
# SOFTWARE.
|
|
22
22
|
|
|
23
23
|
from pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
|
|
24
|
-
from pyedb.dotnet.edb_core.
|
|
25
|
-
|
|
26
|
-
EdbFrequencySweep,
|
|
27
|
-
)
|
|
28
|
-
from pyedb.generic.data_handlers import pyedb_function_handler
|
|
24
|
+
from pyedb.dotnet.edb_core.sim_setup_data.data.sweep_data import SweepData
|
|
25
|
+
from pyedb.dotnet.edb_core.utilities.simulation_setup import SimulationSetup
|
|
29
26
|
from pyedb.generic.general_methods import generate_unique_name
|
|
30
27
|
|
|
31
28
|
|
|
32
|
-
class HFSSPISimulationSetup(
|
|
29
|
+
class HFSSPISimulationSetup(SimulationSetup):
|
|
33
30
|
"""Manages EDB methods for HFSSPI simulation setup."""
|
|
34
31
|
|
|
35
32
|
def __init__(self, pedb, edb_object=None):
|
|
@@ -39,7 +36,6 @@ class HFSSPISimulationSetup(BaseSimulationSetup):
|
|
|
39
36
|
self._edb_setup_info = None
|
|
40
37
|
self.logger = self._pedb.logger
|
|
41
38
|
|
|
42
|
-
@pyedb_function_handler
|
|
43
39
|
def create(self, name=None):
|
|
44
40
|
"""Create an HFSS setup."""
|
|
45
41
|
self._name = name
|
|
@@ -76,7 +72,6 @@ class HFSSPISimulationSetup(BaseSimulationSetup):
|
|
|
76
72
|
else:
|
|
77
73
|
self.logger.error(f"Property position expects an integer value while the provided value is {value}.")
|
|
78
74
|
|
|
79
|
-
@pyedb_function_handler()
|
|
80
75
|
def add_frequency_sweep(self, name=None, frequency_sweep=None):
|
|
81
76
|
"""Add frequency sweep.
|
|
82
77
|
|
|
@@ -106,7 +101,7 @@ class HFSSPISimulationSetup(BaseSimulationSetup):
|
|
|
106
101
|
return False
|
|
107
102
|
if not name:
|
|
108
103
|
name = generate_unique_name("sweep")
|
|
109
|
-
return
|
|
104
|
+
return SweepData(self, frequency_sweep, name)
|
|
110
105
|
|
|
111
106
|
|
|
112
107
|
class HFSSPISimulationSettings(object):
|