pyedb 0.13.dev0__py3-none-any.whl → 0.14.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 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 +613 -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 +25 -32
- {pyedb-0.13.dev0.dist-info → pyedb-0.14.1.dist-info}/METADATA +2 -2
- {pyedb-0.13.dev0.dist-info → pyedb-0.14.1.dist-info}/RECORD +75 -61
- /pyedb/dotnet/edb_core/cell/{__init__.py → terminal/__init__.py} +0 -0
- {pyedb-0.13.dev0.dist-info → pyedb-0.14.1.dist-info}/LICENSE +0 -0
- {pyedb-0.13.dev0.dist-info → pyedb-0.14.1.dist-info}/WHEEL +0 -0
|
@@ -25,8 +25,8 @@ import json
|
|
|
25
25
|
import os
|
|
26
26
|
|
|
27
27
|
from pyedb.dotnet.clr_module import Dictionary
|
|
28
|
-
from pyedb.dotnet.edb_core.edb_data.hfss_simulation_setup_data import AdaptiveType
|
|
29
28
|
from pyedb.dotnet.edb_core.edb_data.sources import Source, SourceType
|
|
29
|
+
from pyedb.dotnet.edb_core.utilities.simulation_setup import AdaptiveType
|
|
30
30
|
from pyedb.generic.constants import (
|
|
31
31
|
BasisOrder,
|
|
32
32
|
CutoutSubdesignType,
|
|
@@ -35,7 +35,7 @@ from pyedb.generic.constants import (
|
|
|
35
35
|
SweepType,
|
|
36
36
|
validate_enum_class_value,
|
|
37
37
|
)
|
|
38
|
-
from pyedb.generic.general_methods import generate_unique_name
|
|
38
|
+
from pyedb.generic.general_methods import generate_unique_name
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class SimulationConfigurationBatch(object):
|
|
@@ -525,7 +525,6 @@ class SimulationConfigurationBatch(object):
|
|
|
525
525
|
if len([src for src in value if isinstance(src, Source)]) == len(value):
|
|
526
526
|
self._sources = value
|
|
527
527
|
|
|
528
|
-
@pyedb_function_handler()
|
|
529
528
|
def add_source(self, source=None): # pragma: no cover
|
|
530
529
|
"""Add a new source to configuration.
|
|
531
530
|
|
|
@@ -1912,7 +1911,7 @@ class SimulationConfigurationAc(object):
|
|
|
1912
1911
|
|
|
1913
1912
|
Returns
|
|
1914
1913
|
-------
|
|
1915
|
-
class: pyedb.dotnet.edb_core.edb_data.
|
|
1914
|
+
class: pyedb.dotnet.edb_core.edb_data.simulation_setup.AdaptiveType
|
|
1916
1915
|
"""
|
|
1917
1916
|
return self._adaptive_type
|
|
1918
1917
|
|
|
@@ -2355,7 +2354,6 @@ class SimulationConfiguration(object):
|
|
|
2355
2354
|
"""
|
|
2356
2355
|
return self._batch_solve_settings
|
|
2357
2356
|
|
|
2358
|
-
@pyedb_function_handler()
|
|
2359
2357
|
def build_simulation_project(self):
|
|
2360
2358
|
"""Build active simulation project. This method requires to be run inside Edb Class.
|
|
2361
2359
|
|
|
@@ -2433,7 +2431,6 @@ class SimulationConfiguration(object):
|
|
|
2433
2431
|
prop_values = [value.strip()]
|
|
2434
2432
|
return prop_values
|
|
2435
2433
|
|
|
2436
|
-
@pyedb_function_handler()
|
|
2437
2434
|
def add_dc_ground_source_term(self, source_name=None, node_to_ground=1):
|
|
2438
2435
|
"""Add a dc ground source terminal for Siwave.
|
|
2439
2436
|
|
|
@@ -2705,7 +2702,6 @@ class SimulationConfiguration(object):
|
|
|
2705
2702
|
else:
|
|
2706
2703
|
self.__setattr__(k, v)
|
|
2707
2704
|
|
|
2708
|
-
@pyedb_function_handler()
|
|
2709
2705
|
def export_json(self, output_file):
|
|
2710
2706
|
"""Export Json file from SimulationConfiguration object.
|
|
2711
2707
|
|
|
@@ -2735,7 +2731,6 @@ class SimulationConfiguration(object):
|
|
|
2735
2731
|
else:
|
|
2736
2732
|
return False
|
|
2737
2733
|
|
|
2738
|
-
@pyedb_function_handler()
|
|
2739
2734
|
def import_json(self, input_file):
|
|
2740
2735
|
"""Import Json file into SimulationConfiguration object instance.
|
|
2741
2736
|
|
|
@@ -2764,7 +2759,6 @@ class SimulationConfiguration(object):
|
|
|
2764
2759
|
else:
|
|
2765
2760
|
return False
|
|
2766
2761
|
|
|
2767
|
-
@pyedb_function_handler()
|
|
2768
2762
|
def add_voltage_source(
|
|
2769
2763
|
self,
|
|
2770
2764
|
name="",
|
|
@@ -2836,7 +2830,6 @@ class SimulationConfiguration(object):
|
|
|
2836
2830
|
except: # pragma: no cover
|
|
2837
2831
|
return False
|
|
2838
2832
|
|
|
2839
|
-
@pyedb_function_handler()
|
|
2840
2833
|
def add_current_source(
|
|
2841
2834
|
self,
|
|
2842
2835
|
name="",
|
|
@@ -2908,7 +2901,6 @@ class SimulationConfiguration(object):
|
|
|
2908
2901
|
except: # pragma: no cover
|
|
2909
2902
|
return False
|
|
2910
2903
|
|
|
2911
|
-
@pyedb_function_handler()
|
|
2912
2904
|
def add_rlc(
|
|
2913
2905
|
self,
|
|
2914
2906
|
name="",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
import warnings
|
|
24
24
|
|
|
25
25
|
from pyedb.generic.constants import NodeType, SourceType
|
|
26
|
-
from pyedb.generic.general_methods import generate_unique_name
|
|
26
|
+
from pyedb.generic.general_methods import generate_unique_name
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
class Node(object):
|
|
@@ -306,7 +306,6 @@ class PinGroup(object):
|
|
|
306
306
|
def net_name(self):
|
|
307
307
|
return self._edb_pin_group.GetNet().GetName()
|
|
308
308
|
|
|
309
|
-
@pyedb_function_handler
|
|
310
309
|
def get_terminal(self, name=None, create_new_terminal=False):
|
|
311
310
|
"""Terminal."""
|
|
312
311
|
warnings.warn("Use new property :func:`terminal` instead.", DeprecationWarning)
|
|
@@ -318,12 +317,13 @@ class PinGroup(object):
|
|
|
318
317
|
@property
|
|
319
318
|
def terminal(self):
|
|
320
319
|
"""Terminal."""
|
|
321
|
-
from pyedb.dotnet.edb_core.
|
|
320
|
+
from pyedb.dotnet.edb_core.cell.terminal.pingroup_terminal import (
|
|
321
|
+
PinGroupTerminal,
|
|
322
|
+
)
|
|
322
323
|
|
|
323
324
|
term = PinGroupTerminal(self._pedb, self._edb_pin_group.GetPinGroupTerminal())
|
|
324
325
|
return term if not term.is_null else None
|
|
325
326
|
|
|
326
|
-
@pyedb_function_handler()
|
|
327
327
|
def _create_terminal(self, name=None):
|
|
328
328
|
"""Create a terminal on the pin group.
|
|
329
329
|
|
|
@@ -345,7 +345,6 @@ class PinGroup(object):
|
|
|
345
345
|
else:
|
|
346
346
|
return self.create_terminal(name)
|
|
347
347
|
|
|
348
|
-
@pyedb_function_handler()
|
|
349
348
|
def create_terminal(self, name=None):
|
|
350
349
|
"""Create a terminal.
|
|
351
350
|
|
|
@@ -356,50 +355,46 @@ class PinGroup(object):
|
|
|
356
355
|
"""
|
|
357
356
|
if not name:
|
|
358
357
|
name = generate_unique_name(self.name)
|
|
359
|
-
from pyedb.dotnet.edb_core.
|
|
358
|
+
from pyedb.dotnet.edb_core.cell.terminal.pingroup_terminal import (
|
|
359
|
+
PinGroupTerminal,
|
|
360
|
+
)
|
|
360
361
|
|
|
361
|
-
term = PinGroupTerminal(self._pedb)
|
|
362
|
+
term = PinGroupTerminal(self._pedb, self._edb_object)
|
|
362
363
|
term = term.create(name, self.net_name, self.name)
|
|
363
364
|
return term
|
|
364
365
|
|
|
365
|
-
@pyedb_function_handler()
|
|
366
366
|
def _json_format(self):
|
|
367
367
|
dict_out = {"component": self.component, "name": self.name, "net": self.net, "node_type": self.node_type}
|
|
368
368
|
return dict_out
|
|
369
369
|
|
|
370
|
-
@pyedb_function_handler()
|
|
371
370
|
def create_current_source_terminal(self, magnitude=1, phase=0):
|
|
372
|
-
terminal = self.
|
|
371
|
+
terminal = self.create_terminal()._edb_object
|
|
373
372
|
terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.kCurrentSource)
|
|
374
373
|
terminal.SetSourceAmplitude(self._pedb.edb_value(magnitude))
|
|
375
374
|
terminal.SetSourcePhase(self._pedb.edb_api.utility.value(phase))
|
|
376
375
|
return terminal
|
|
377
376
|
|
|
378
|
-
@pyedb_function_handler()
|
|
379
377
|
def create_voltage_source_terminal(self, magnitude=1, phase=0, impedance=0.001):
|
|
380
|
-
terminal = self.
|
|
378
|
+
terminal = self.create_terminal()._edb_object
|
|
381
379
|
terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageSource)
|
|
382
380
|
terminal.SetSourceAmplitude(self._pedb.edb_value(magnitude))
|
|
383
381
|
terminal.SetSourcePhase(self._pedb.edb_api.utility.value(phase))
|
|
384
382
|
terminal.SetImpedance(self._pedb.edb_value(impedance))
|
|
385
383
|
return terminal
|
|
386
384
|
|
|
387
|
-
@pyedb_function_handler()
|
|
388
385
|
def create_voltage_probe_terminal(self, impedance=1000000):
|
|
389
|
-
terminal = self.
|
|
386
|
+
terminal = self.create_terminal()._edb_object
|
|
390
387
|
terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageProbe)
|
|
391
388
|
terminal.SetImpedance(self._pedb.edb_value(impedance))
|
|
392
389
|
return terminal
|
|
393
390
|
|
|
394
|
-
@pyedb_function_handler()
|
|
395
391
|
def create_port_terminal(self, impedance=50):
|
|
396
|
-
terminal = self.
|
|
392
|
+
terminal = self.create_terminal()._edb_object
|
|
397
393
|
terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.PortBoundary)
|
|
398
394
|
terminal.SetImpedance(self._pedb.edb_value(impedance))
|
|
399
395
|
terminal.SetIsCircuitPort(True)
|
|
400
396
|
return terminal
|
|
401
397
|
|
|
402
|
-
@pyedb_function_handler()
|
|
403
398
|
def delete(self):
|
|
404
399
|
"""Delete active pin group.
|
|
405
400
|
|
pyedb/dotnet/edb_core/general.py
CHANGED
|
@@ -30,7 +30,7 @@ from __future__ import absolute_import # noreorder
|
|
|
30
30
|
import logging
|
|
31
31
|
|
|
32
32
|
from pyedb.dotnet.clr_module import Dictionary, List, Tuple
|
|
33
|
-
from pyedb.generic.general_methods import is_ironpython
|
|
33
|
+
from pyedb.generic.general_methods import is_ironpython
|
|
34
34
|
|
|
35
35
|
if not is_ironpython: # pragma: no cover
|
|
36
36
|
try:
|
|
@@ -43,7 +43,6 @@ else: # pragma: no cover
|
|
|
43
43
|
logger = logging.getLogger(__name__)
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
@pyedb_function_handler()
|
|
47
46
|
def convert_netdict_to_pydict(dict_in):
|
|
48
47
|
"""Convert a net dictionary to a Python dictionary.
|
|
49
48
|
|
|
@@ -64,7 +63,6 @@ def convert_netdict_to_pydict(dict_in):
|
|
|
64
63
|
return pydict
|
|
65
64
|
|
|
66
65
|
|
|
67
|
-
@pyedb_function_handler()
|
|
68
66
|
def convert_pytuple_to_nettuple(_tuple):
|
|
69
67
|
"""Convert a Python tuple into a .NET tuple.
|
|
70
68
|
Parameters
|
|
@@ -78,7 +76,6 @@ def convert_pytuple_to_nettuple(_tuple):
|
|
|
78
76
|
return Tuple.Create(_tuple[0], _tuple[1])
|
|
79
77
|
|
|
80
78
|
|
|
81
|
-
@pyedb_function_handler()
|
|
82
79
|
def convert_pydict_to_netdict(input_dict):
|
|
83
80
|
"""Convert a Python dictionary to a .NET dictionary.
|
|
84
81
|
|
|
@@ -100,7 +97,6 @@ def convert_pydict_to_netdict(input_dict):
|
|
|
100
97
|
# to be completed
|
|
101
98
|
|
|
102
99
|
|
|
103
|
-
@pyedb_function_handler()
|
|
104
100
|
def convert_py_list_to_net_list(pylist, list_type=None):
|
|
105
101
|
"""Convert a Python list to a Net list.
|
|
106
102
|
|
|
@@ -127,7 +123,6 @@ def convert_py_list_to_net_list(pylist, list_type=None):
|
|
|
127
123
|
return net_list
|
|
128
124
|
|
|
129
125
|
|
|
130
|
-
@pyedb_function_handler()
|
|
131
126
|
def convert_net_list_to_py_list(netlist):
|
|
132
127
|
"""Convert a Net list to a Python list.
|
|
133
128
|
|
|
@@ -22,7 +22,6 @@
|
|
|
22
22
|
|
|
23
23
|
from pyedb.dotnet.edb_core.geometry.point_data import PointData
|
|
24
24
|
from pyedb.dotnet.edb_core.utilities.obj_base import BBox
|
|
25
|
-
from pyedb.generic.general_methods import pyedb_function_handler
|
|
26
25
|
|
|
27
26
|
|
|
28
27
|
class PolygonData:
|
|
@@ -64,14 +63,12 @@ class PolygonData:
|
|
|
64
63
|
for i in list(self._edb_object.Points)
|
|
65
64
|
]
|
|
66
65
|
|
|
67
|
-
@pyedb_function_handler
|
|
68
66
|
def create_from_points(self, points, closed=True):
|
|
69
67
|
list_of_point_data = []
|
|
70
68
|
for pt in points:
|
|
71
69
|
list_of_point_data.append(PointData(self._pedb, x=pt[0], y=pt[1]))
|
|
72
70
|
return self._pedb.edb_api.geometry.api_class.PolygonData(list_of_point_data, closed)
|
|
73
71
|
|
|
74
|
-
@pyedb_function_handler
|
|
75
72
|
def create_from_bounding_box(self, points):
|
|
76
73
|
bbox = BBox(self._pedb, point_1=points[0], point_2=points[1])
|
|
77
74
|
return self._pedb.edb_api.geometry.api_class.PolygonData.CreateFromBBox(bbox._edb_object)
|
pyedb/dotnet/edb_core/hfss.py
CHANGED
|
@@ -36,11 +36,7 @@ from pyedb.dotnet.edb_core.general import (
|
|
|
36
36
|
convert_pytuple_to_nettuple,
|
|
37
37
|
)
|
|
38
38
|
from pyedb.generic.constants import RadiationBoxType, SweepType
|
|
39
|
-
from pyedb.generic.general_methods import
|
|
40
|
-
generate_unique_name,
|
|
41
|
-
is_ironpython,
|
|
42
|
-
pyedb_function_handler,
|
|
43
|
-
)
|
|
39
|
+
from pyedb.generic.general_methods import generate_unique_name, is_ironpython
|
|
44
40
|
from pyedb.modeler.geometry_operators import GeometryOperators
|
|
45
41
|
|
|
46
42
|
|
|
@@ -110,7 +106,6 @@ class EdbHfss(object):
|
|
|
110
106
|
def _get_edb_value(self, value):
|
|
111
107
|
return self._pedb.edb_value(value)
|
|
112
108
|
|
|
113
|
-
@pyedb_function_handler()
|
|
114
109
|
def _create_edge_terminal(self, prim_id, point_on_edge, terminal_name=None, is_ref=False):
|
|
115
110
|
"""Create an edge terminal.
|
|
116
111
|
|
|
@@ -148,7 +143,6 @@ class EdbHfss(object):
|
|
|
148
143
|
prim.GetLayout(), prim.GetNet(), terminal_name, pos_edge, isRef=is_ref
|
|
149
144
|
)
|
|
150
145
|
|
|
151
|
-
@pyedb_function_handler()
|
|
152
146
|
def get_trace_width_for_traces_with_ports(self):
|
|
153
147
|
"""Retrieve the trace width for traces with ports.
|
|
154
148
|
|
|
@@ -164,7 +158,6 @@ class EdbHfss(object):
|
|
|
164
158
|
nets[net] = self._pedb.nets[net].get_smallest_trace_width()
|
|
165
159
|
return nets
|
|
166
160
|
|
|
167
|
-
@pyedb_function_handler()
|
|
168
161
|
def create_circuit_port_on_pin(self, pos_pin, neg_pin, impedance=50, port_name=None):
|
|
169
162
|
"""Create Circuit Port on Pin.
|
|
170
163
|
|
|
@@ -192,7 +185,6 @@ class EdbHfss(object):
|
|
|
192
185
|
"""
|
|
193
186
|
return self._pedb.siwave.create_circuit_port_on_pin(pos_pin, neg_pin, impedance, port_name)
|
|
194
187
|
|
|
195
|
-
@pyedb_function_handler()
|
|
196
188
|
def create_voltage_source_on_pin(self, pos_pin, neg_pin, voltage_value=3.3, phase_value=0, source_name=""):
|
|
197
189
|
"""Create a voltage source.
|
|
198
190
|
|
|
@@ -224,7 +216,6 @@ class EdbHfss(object):
|
|
|
224
216
|
"""
|
|
225
217
|
return self._pedb.siwave.create_voltage_source_on_pin(pos_pin, neg_pin, voltage_value, phase_value, source_name)
|
|
226
218
|
|
|
227
|
-
@pyedb_function_handler()
|
|
228
219
|
def create_current_source_on_pin(self, pos_pin, neg_pin, current_value=0.1, phase_value=0, source_name=""):
|
|
229
220
|
"""Create a current source.
|
|
230
221
|
|
|
@@ -257,7 +248,6 @@ class EdbHfss(object):
|
|
|
257
248
|
|
|
258
249
|
return self._pedb.siwave.create_current_source_on_pin(pos_pin, neg_pin, current_value, phase_value, source_name)
|
|
259
250
|
|
|
260
|
-
@pyedb_function_handler()
|
|
261
251
|
def create_resistor_on_pin(self, pos_pin, neg_pin, rvalue=1, resistor_name=""):
|
|
262
252
|
"""Create a Resistor boundary between two given pins.
|
|
263
253
|
|
|
@@ -287,7 +277,6 @@ class EdbHfss(object):
|
|
|
287
277
|
"""
|
|
288
278
|
return self._pedb.siwave.create_resistor_on_pin(pos_pin, neg_pin, rvalue, resistor_name)
|
|
289
279
|
|
|
290
|
-
@pyedb_function_handler()
|
|
291
280
|
def create_circuit_port_on_net(
|
|
292
281
|
self,
|
|
293
282
|
positive_component_name,
|
|
@@ -336,7 +325,6 @@ class EdbHfss(object):
|
|
|
336
325
|
port_name,
|
|
337
326
|
)
|
|
338
327
|
|
|
339
|
-
@pyedb_function_handler()
|
|
340
328
|
def create_voltage_source_on_net(
|
|
341
329
|
self,
|
|
342
330
|
positive_component_name,
|
|
@@ -389,7 +377,6 @@ class EdbHfss(object):
|
|
|
389
377
|
source_name,
|
|
390
378
|
)
|
|
391
379
|
|
|
392
|
-
@pyedb_function_handler()
|
|
393
380
|
def create_current_source_on_net(
|
|
394
381
|
self,
|
|
395
382
|
positive_component_name,
|
|
@@ -442,7 +429,6 @@ class EdbHfss(object):
|
|
|
442
429
|
source_name,
|
|
443
430
|
)
|
|
444
431
|
|
|
445
|
-
@pyedb_function_handler()
|
|
446
432
|
def create_coax_port_on_component(self, ref_des_list, net_list):
|
|
447
433
|
"""Create a coaxial port on a component or component list on a net or net list.
|
|
448
434
|
The name of the new coaxial port is automatically assigned.
|
|
@@ -489,7 +475,6 @@ class EdbHfss(object):
|
|
|
489
475
|
coax.append(port_name)
|
|
490
476
|
return coax
|
|
491
477
|
|
|
492
|
-
@pyedb_function_handler()
|
|
493
478
|
def create_differential_wave_port(
|
|
494
479
|
self,
|
|
495
480
|
positive_primitive_id,
|
|
@@ -566,7 +551,6 @@ class EdbHfss(object):
|
|
|
566
551
|
pos_term._edb_object.SetName(port_name)
|
|
567
552
|
return port_name, BundleWavePort(self._pedb, _edb_boundle_terminal)
|
|
568
553
|
|
|
569
|
-
@pyedb_function_handler()
|
|
570
554
|
def create_bundle_wave_port(
|
|
571
555
|
self,
|
|
572
556
|
primitives_id,
|
|
@@ -628,7 +612,6 @@ class EdbHfss(object):
|
|
|
628
612
|
_edb_bundle_terminal = self._edb.cell.terminal.BundleTerminal.Create(edb_list)
|
|
629
613
|
return port_name, BundleWavePort(self._pedb, _edb_bundle_terminal)
|
|
630
614
|
|
|
631
|
-
@pyedb_function_handler()
|
|
632
615
|
def create_hfss_ports_on_padstack(self, pinpos, portname=None):
|
|
633
616
|
"""Create an HFSS port on a padstack.
|
|
634
617
|
|
|
@@ -657,7 +640,6 @@ class EdbHfss(object):
|
|
|
657
640
|
else:
|
|
658
641
|
return False
|
|
659
642
|
|
|
660
|
-
@pyedb_function_handler()
|
|
661
643
|
def create_edge_port_on_polygon(
|
|
662
644
|
self,
|
|
663
645
|
polygon=None,
|
|
@@ -767,7 +749,6 @@ class EdbHfss(object):
|
|
|
767
749
|
edge_term.SetReferenceTerminal(ref_edge_term)
|
|
768
750
|
return True
|
|
769
751
|
|
|
770
|
-
@pyedb_function_handler()
|
|
771
752
|
def create_wave_port(
|
|
772
753
|
self,
|
|
773
754
|
prim_id,
|
|
@@ -828,7 +809,6 @@ class EdbHfss(object):
|
|
|
828
809
|
else:
|
|
829
810
|
return False
|
|
830
811
|
|
|
831
|
-
@pyedb_function_handler()
|
|
832
812
|
def create_edge_port_vertical(
|
|
833
813
|
self,
|
|
834
814
|
prim_id,
|
|
@@ -901,7 +881,6 @@ class EdbHfss(object):
|
|
|
901
881
|
else:
|
|
902
882
|
return False
|
|
903
883
|
|
|
904
|
-
@pyedb_function_handler()
|
|
905
884
|
def create_edge_port_horizontal(
|
|
906
885
|
self,
|
|
907
886
|
prim_id,
|
|
@@ -957,7 +936,6 @@ class EdbHfss(object):
|
|
|
957
936
|
else:
|
|
958
937
|
return False
|
|
959
938
|
|
|
960
|
-
@pyedb_function_handler()
|
|
961
939
|
def create_lumped_port_on_net(
|
|
962
940
|
self, nets=None, reference_layer=None, return_points_only=False, digit_resolution=6, at_bounding_box=True
|
|
963
941
|
):
|
|
@@ -1073,7 +1051,6 @@ class EdbHfss(object):
|
|
|
1073
1051
|
return edges_pts
|
|
1074
1052
|
return port_created
|
|
1075
1053
|
|
|
1076
|
-
@pyedb_function_handler()
|
|
1077
1054
|
def create_vertical_circuit_port_on_clipped_traces(self, nets=None, reference_net=None, user_defined_extent=None):
|
|
1078
1055
|
"""Create an edge port on clipped signal traces.
|
|
1079
1056
|
|
|
@@ -1171,7 +1148,6 @@ class EdbHfss(object):
|
|
|
1171
1148
|
return terminal_info
|
|
1172
1149
|
return False
|
|
1173
1150
|
|
|
1174
|
-
@pyedb_function_handler()
|
|
1175
1151
|
def get_layout_bounding_box(self, layout=None, digit_resolution=6):
|
|
1176
1152
|
"""Evaluate the layout bounding box.
|
|
1177
1153
|
|
|
@@ -1204,7 +1180,6 @@ class EdbHfss(object):
|
|
|
1204
1180
|
]
|
|
1205
1181
|
return layout_bbox
|
|
1206
1182
|
|
|
1207
|
-
@pyedb_function_handler()
|
|
1208
1183
|
def configure_hfss_extents(self, simulation_setup=None):
|
|
1209
1184
|
"""Configure the HFSS extent box.
|
|
1210
1185
|
|
|
@@ -1255,7 +1230,6 @@ class EdbHfss(object):
|
|
|
1255
1230
|
self._layout.cell.SetHFSSExtentInfo(hfss_extent) # returns void
|
|
1256
1231
|
return True
|
|
1257
1232
|
|
|
1258
|
-
@pyedb_function_handler()
|
|
1259
1233
|
def configure_hfss_analysis_setup(self, simulation_setup=None):
|
|
1260
1234
|
"""
|
|
1261
1235
|
Configure HFSS analysis setup.
|
|
@@ -1383,7 +1357,6 @@ class EdbHfss(object):
|
|
|
1383
1357
|
freq = freq * math.pow(10, 1.0 / decade_cnt)
|
|
1384
1358
|
sweep.Frequencies.Add(str(freq))
|
|
1385
1359
|
|
|
1386
|
-
@pyedb_function_handler()
|
|
1387
1360
|
def trim_component_reference_size(self, simulation_setup=None, trim_to_terminals=False):
|
|
1388
1361
|
"""Trim the common component reference to the minimally acceptable size.
|
|
1389
1362
|
|
|
@@ -1453,7 +1426,6 @@ class EdbHfss(object):
|
|
|
1453
1426
|
comp.SetComponentProperty(cmp_prop)
|
|
1454
1427
|
return True
|
|
1455
1428
|
|
|
1456
|
-
@pyedb_function_handler()
|
|
1457
1429
|
def set_coax_port_attributes(self, simulation_setup=None):
|
|
1458
1430
|
"""Set coaxial port attribute with forcing default impedance to 50 Ohms and adjusting the coaxial extent radius.
|
|
1459
1431
|
|
|
@@ -1533,7 +1505,6 @@ class EdbHfss(object):
|
|
|
1533
1505
|
tt.SetProductSolverOption(self._edb.edb_api.ProductId.Designer, "HFSS", option)
|
|
1534
1506
|
return True
|
|
1535
1507
|
|
|
1536
|
-
@pyedb_function_handler()
|
|
1537
1508
|
def _get_terminals_bbox(self, comp, l_inst, terminals_only):
|
|
1538
1509
|
terms_loi = []
|
|
1539
1510
|
if terminals_only:
|
|
@@ -1572,7 +1543,6 @@ class EdbHfss(object):
|
|
|
1572
1543
|
)
|
|
1573
1544
|
return self._edb.geometry.polygon_data.get_bbox_of_polygons(terms_bbox)
|
|
1574
1545
|
|
|
1575
|
-
@pyedb_function_handler()
|
|
1576
1546
|
def get_ports_number(self):
|
|
1577
1547
|
"""Return the total number of excitation ports in a layout.
|
|
1578
1548
|
|
|
@@ -1589,7 +1559,6 @@ class EdbHfss(object):
|
|
|
1589
1559
|
terms = [term for term in self._layout.terminals if int(term.GetBoundaryType()) == 0]
|
|
1590
1560
|
return len([i for i in terms if not i.IsReferenceTerminal()])
|
|
1591
1561
|
|
|
1592
|
-
@pyedb_function_handler()
|
|
1593
1562
|
def layout_defeaturing(self, simulation_setup=None):
|
|
1594
1563
|
"""Defeature the layout by reducing the number of points for polygons based on surface deviation criteria.
|
|
1595
1564
|
|
|
@@ -1637,7 +1606,6 @@ class EdbHfss(object):
|
|
|
1637
1606
|
|
|
1638
1607
|
return True
|
|
1639
1608
|
|
|
1640
|
-
@pyedb_function_handler()
|
|
1641
1609
|
def create_rlc_boundary_on_pins(self, positive_pin=None, negative_pin=None, rvalue=0.0, lvalue=0.0, cvalue=0.0):
|
|
1642
1610
|
"""Create hfss rlc boundary on pins.
|
|
1643
1611
|
|
pyedb/dotnet/edb_core/layout.py
CHANGED
|
@@ -27,7 +27,6 @@ import math
|
|
|
27
27
|
import warnings
|
|
28
28
|
|
|
29
29
|
from pyedb.dotnet.edb_core.dotnet.primitive import (
|
|
30
|
-
BondwireDotNet,
|
|
31
30
|
CircleDotNet,
|
|
32
31
|
PathDotNet,
|
|
33
32
|
PolygonDotNet,
|
|
@@ -36,7 +35,6 @@ from pyedb.dotnet.edb_core.dotnet.primitive import (
|
|
|
36
35
|
from pyedb.dotnet.edb_core.edb_data.primitives_data import EDBPrimitives, cast
|
|
37
36
|
from pyedb.dotnet.edb_core.edb_data.utilities import EDBStatistics
|
|
38
37
|
from pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
|
|
39
|
-
from pyedb.generic.general_methods import pyedb_function_handler
|
|
40
38
|
|
|
41
39
|
|
|
42
40
|
class EdbLayout(object):
|
|
@@ -195,17 +193,6 @@ class EdbLayout(object):
|
|
|
195
193
|
"""
|
|
196
194
|
return [i for i in self.primitives if isinstance(i, PathDotNet)]
|
|
197
195
|
|
|
198
|
-
@property
|
|
199
|
-
def bondwires(self):
|
|
200
|
-
"""Bondwires.
|
|
201
|
-
|
|
202
|
-
Returns
|
|
203
|
-
-------
|
|
204
|
-
list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
|
|
205
|
-
List of bondwires.
|
|
206
|
-
"""
|
|
207
|
-
return [i for i in self.primitives if isinstance(i, BondwireDotNet)]
|
|
208
|
-
|
|
209
196
|
@property
|
|
210
197
|
def polygons(self):
|
|
211
198
|
"""Polygons.
|
|
@@ -217,7 +204,6 @@ class EdbLayout(object):
|
|
|
217
204
|
"""
|
|
218
205
|
return [i for i in self.primitives if isinstance(i, PolygonDotNet)]
|
|
219
206
|
|
|
220
|
-
@pyedb_function_handler()
|
|
221
207
|
def get_polygons_by_layer(self, layer_name, net_list=None):
|
|
222
208
|
"""Retrieve polygons by a layer.
|
|
223
209
|
|
|
@@ -245,7 +231,6 @@ class EdbLayout(object):
|
|
|
245
231
|
self._logger.warning(f"Failed to retrieve layer on polygon {el}")
|
|
246
232
|
return objinst
|
|
247
233
|
|
|
248
|
-
@pyedb_function_handler()
|
|
249
234
|
def get_primitive_by_layer_and_point(self, point=None, layer=None, nets=None):
|
|
250
235
|
"""Return primitive given coordinate point [x, y], layer name and nets.
|
|
251
236
|
|
|
@@ -304,7 +289,6 @@ class EdbLayout(object):
|
|
|
304
289
|
[returned_obj.append(p) for p in [obj for obj in self.primitives if obj.id == obj_id]]
|
|
305
290
|
return returned_obj
|
|
306
291
|
|
|
307
|
-
@pyedb_function_handler()
|
|
308
292
|
def get_polygon_bounding_box(self, polygon):
|
|
309
293
|
"""Retrieve a polygon bounding box.
|
|
310
294
|
|
|
@@ -336,7 +320,6 @@ class EdbLayout(object):
|
|
|
336
320
|
pass
|
|
337
321
|
return bounding
|
|
338
322
|
|
|
339
|
-
@pyedb_function_handler()
|
|
340
323
|
def get_polygon_points(self, polygon):
|
|
341
324
|
"""Retrieve polygon points.
|
|
342
325
|
|
|
@@ -384,7 +367,6 @@ class EdbLayout(object):
|
|
|
384
367
|
continue_iterate = False
|
|
385
368
|
return points
|
|
386
369
|
|
|
387
|
-
@pyedb_function_handler()
|
|
388
370
|
def parametrize_polygon(self, polygon, selection_polygon, offset_name="offsetx", origin=None):
|
|
389
371
|
"""Parametrize pieces of a polygon based on another polygon.
|
|
390
372
|
|
|
@@ -467,7 +449,6 @@ class EdbLayout(object):
|
|
|
467
449
|
polygon.SetPolygonData(poligon_data)
|
|
468
450
|
return True
|
|
469
451
|
|
|
470
|
-
@pyedb_function_handler()
|
|
471
452
|
def _create_path(
|
|
472
453
|
self,
|
|
473
454
|
path_list,
|
|
@@ -545,7 +526,6 @@ class EdbLayout(object):
|
|
|
545
526
|
return False
|
|
546
527
|
return cast(polygon, self._pedb)
|
|
547
528
|
|
|
548
|
-
@pyedb_function_handler()
|
|
549
529
|
def create_trace(
|
|
550
530
|
self,
|
|
551
531
|
path_list,
|
|
@@ -598,7 +578,6 @@ class EdbLayout(object):
|
|
|
598
578
|
|
|
599
579
|
return primitive
|
|
600
580
|
|
|
601
|
-
@pyedb_function_handler()
|
|
602
581
|
def create_polygon(self, main_shape, layer_name, voids=[], net_name=""):
|
|
603
582
|
"""Create a polygon based on a list of points and voids.
|
|
604
583
|
|
|
@@ -666,7 +645,6 @@ class EdbLayout(object):
|
|
|
666
645
|
else:
|
|
667
646
|
return cast(polygon, self._pedb)
|
|
668
647
|
|
|
669
|
-
@pyedb_function_handler()
|
|
670
648
|
def create_polygon_from_points(self, point_list, layer_name, net_name=""):
|
|
671
649
|
"""Create a new polygon from a point list.
|
|
672
650
|
|
|
@@ -695,7 +673,6 @@ class EdbLayout(object):
|
|
|
695
673
|
)
|
|
696
674
|
return self.create_polygon(point_list, layer_name, net_name=net_name)
|
|
697
675
|
|
|
698
|
-
@pyedb_function_handler()
|
|
699
676
|
def create_rectangle(
|
|
700
677
|
self,
|
|
701
678
|
layer_name,
|
|
@@ -773,7 +750,6 @@ class EdbLayout(object):
|
|
|
773
750
|
return cast(rect, self._pedb)
|
|
774
751
|
return False # pragma: no cover
|
|
775
752
|
|
|
776
|
-
@pyedb_function_handler()
|
|
777
753
|
def create_circle(self, layer_name, x, y, radius, net_name=""):
|
|
778
754
|
"""Create a circle on a specified layer.
|
|
779
755
|
|
|
@@ -810,7 +786,6 @@ class EdbLayout(object):
|
|
|
810
786
|
return cast(circle, self._pedb)
|
|
811
787
|
return False # pragma: no cover
|
|
812
788
|
|
|
813
|
-
@pyedb_function_handler()
|
|
814
789
|
def delete_primitives(self, net_names):
|
|
815
790
|
"""Delete primitives by net names.
|
|
816
791
|
|
|
@@ -837,7 +812,6 @@ class EdbLayout(object):
|
|
|
837
812
|
p.delete()
|
|
838
813
|
return True
|
|
839
814
|
|
|
840
|
-
@pyedb_function_handler()
|
|
841
815
|
def get_primitives(self, net_name=None, layer_name=None, prim_type=None, is_void=False):
|
|
842
816
|
"""Get primitives by conditions.
|
|
843
817
|
|
|
@@ -874,7 +848,6 @@ class EdbLayout(object):
|
|
|
874
848
|
prims.append(el)
|
|
875
849
|
return prims
|
|
876
850
|
|
|
877
|
-
@pyedb_function_handler()
|
|
878
851
|
def fix_circle_void_for_clipping(self):
|
|
879
852
|
"""Fix issues when circle void are clipped due to a bug in EDB.
|
|
880
853
|
|
|
@@ -906,7 +879,6 @@ class EdbLayout(object):
|
|
|
906
879
|
void_circle.Delete()
|
|
907
880
|
return True
|
|
908
881
|
|
|
909
|
-
@pyedb_function_handler()
|
|
910
882
|
def add_void(self, shape, void_shape):
|
|
911
883
|
"""Add a void into a shape.
|
|
912
884
|
|
|
@@ -931,7 +903,6 @@ class EdbLayout(object):
|
|
|
931
903
|
return flag
|
|
932
904
|
return True
|
|
933
905
|
|
|
934
|
-
@pyedb_function_handler()
|
|
935
906
|
def shape_to_polygon_data(self, shape):
|
|
936
907
|
"""Convert a shape to polygon data.
|
|
937
908
|
|
|
@@ -951,7 +922,6 @@ class EdbLayout(object):
|
|
|
951
922
|
)
|
|
952
923
|
return None
|
|
953
924
|
|
|
954
|
-
@pyedb_function_handler()
|
|
955
925
|
def _createPolygonDataFromPolygon(self, shape):
|
|
956
926
|
points = shape.points
|
|
957
927
|
if not self._validatePoint(points[0]):
|
|
@@ -1038,7 +1008,6 @@ class EdbLayout(object):
|
|
|
1038
1008
|
k += 1
|
|
1039
1009
|
return polygon
|
|
1040
1010
|
|
|
1041
|
-
@pyedb_function_handler()
|
|
1042
1011
|
def _validatePoint(self, point, allowArcs=True):
|
|
1043
1012
|
if len(point) == 2:
|
|
1044
1013
|
if not isinstance(point[0], (int, float, str)):
|
|
@@ -1137,7 +1106,6 @@ class EdbLayout(object):
|
|
|
1137
1106
|
self.points = points
|
|
1138
1107
|
self.properties = properties
|
|
1139
1108
|
|
|
1140
|
-
@pyedb_function_handler()
|
|
1141
1109
|
def parametrize_trace_width(
|
|
1142
1110
|
self,
|
|
1143
1111
|
nets_name,
|
|
@@ -1189,7 +1157,6 @@ class EdbLayout(object):
|
|
|
1189
1157
|
p.SetWidth(self._pedb.edb_value(parameter_name))
|
|
1190
1158
|
return True
|
|
1191
1159
|
|
|
1192
|
-
@pyedb_function_handler()
|
|
1193
1160
|
def unite_polygons_on_layer(self, layer_name=None, delete_padstack_gemometries=False, net_names_list=[]):
|
|
1194
1161
|
"""Try to unite all Polygons on specified layer.
|
|
1195
1162
|
|
|
@@ -1265,7 +1232,6 @@ class EdbLayout(object):
|
|
|
1265
1232
|
self._pedb.padstacks.remove_pads_from_padstack(pad)
|
|
1266
1233
|
return True
|
|
1267
1234
|
|
|
1268
|
-
@pyedb_function_handler()
|
|
1269
1235
|
def defeature_polygon(self, poly, tolerance=0.001):
|
|
1270
1236
|
"""Defeature the polygon based on the maximum surface deviation criteria.
|
|
1271
1237
|
|
|
@@ -1287,7 +1253,6 @@ class EdbLayout(object):
|
|
|
1287
1253
|
poly.polygon_data = new_poly
|
|
1288
1254
|
return True
|
|
1289
1255
|
|
|
1290
|
-
@pyedb_function_handler()
|
|
1291
1256
|
def get_layout_statistics(self, evaluate_area=False, net_list=None):
|
|
1292
1257
|
"""Return EDBStatistics object from a layout.
|
|
1293
1258
|
|