pyedb 0.13.dev0__py3-none-any.whl → 0.15.dev0__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.15.dev0.dist-info}/METADATA +2 -2
- {pyedb-0.13.dev0.dist-info → pyedb-0.15.dev0.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.15.dev0.dist-info}/LICENSE +0 -0
- {pyedb-0.13.dev0.dist-info → pyedb-0.15.dev0.dist-info}/WHEEL +0 -0
pyedb/dotnet/edb.py
CHANGED
|
@@ -39,6 +39,15 @@ import warnings
|
|
|
39
39
|
|
|
40
40
|
from pyedb.configuration.configuration import Configuration
|
|
41
41
|
from pyedb.dotnet.application.Variables import decompose_variable_value
|
|
42
|
+
from pyedb.dotnet.edb_core.cell.layout import Layout
|
|
43
|
+
from pyedb.dotnet.edb_core.cell.terminal.bundle_terminal import BundleTerminal
|
|
44
|
+
from pyedb.dotnet.edb_core.cell.terminal.edge_terminal import EdgeTerminal
|
|
45
|
+
from pyedb.dotnet.edb_core.cell.terminal.padstack_instance_terminal import (
|
|
46
|
+
PadstackInstanceTerminal,
|
|
47
|
+
)
|
|
48
|
+
from pyedb.dotnet.edb_core.cell.terminal.pingroup_terminal import PinGroupTerminal
|
|
49
|
+
from pyedb.dotnet.edb_core.cell.terminal.point_terminal import PointTerminal
|
|
50
|
+
from pyedb.dotnet.edb_core.cell.terminal.terminal import Terminal
|
|
42
51
|
from pyedb.dotnet.edb_core.components import Components
|
|
43
52
|
from pyedb.dotnet.edb_core.dotnet.database import Database
|
|
44
53
|
from pyedb.dotnet.edb_core.dotnet.layout import LayoutDotNet
|
|
@@ -51,9 +60,6 @@ from pyedb.dotnet.edb_core.edb_data.edbvalue import EdbValue
|
|
|
51
60
|
from pyedb.dotnet.edb_core.edb_data.hfss_pi_simulation_setup_data import (
|
|
52
61
|
HFSSPISimulationSetup,
|
|
53
62
|
)
|
|
54
|
-
from pyedb.dotnet.edb_core.edb_data.hfss_simulation_setup_data import (
|
|
55
|
-
HfssSimulationSetup,
|
|
56
|
-
)
|
|
57
63
|
from pyedb.dotnet.edb_core.edb_data.ports import (
|
|
58
64
|
BundleWavePort,
|
|
59
65
|
CircuitPort,
|
|
@@ -68,12 +74,7 @@ from pyedb.dotnet.edb_core.edb_data.raptor_x_simulation_setup_data import (
|
|
|
68
74
|
from pyedb.dotnet.edb_core.edb_data.simulation_configuration import (
|
|
69
75
|
SimulationConfiguration,
|
|
70
76
|
)
|
|
71
|
-
from pyedb.dotnet.edb_core.edb_data.siwave_simulation_setup_data import (
|
|
72
|
-
SiwaveDCSimulationSetup,
|
|
73
|
-
SiwaveSYZSimulationSetup,
|
|
74
|
-
)
|
|
75
77
|
from pyedb.dotnet.edb_core.edb_data.sources import SourceType
|
|
76
|
-
from pyedb.dotnet.edb_core.edb_data.terminals import Terminal
|
|
77
78
|
from pyedb.dotnet.edb_core.edb_data.variables import Variable
|
|
78
79
|
from pyedb.dotnet.edb_core.general import (
|
|
79
80
|
LayoutObjType,
|
|
@@ -81,7 +82,6 @@ from pyedb.dotnet.edb_core.general import (
|
|
|
81
82
|
convert_py_list_to_net_list,
|
|
82
83
|
)
|
|
83
84
|
from pyedb.dotnet.edb_core.hfss import EdbHfss
|
|
84
|
-
from pyedb.dotnet.edb_core.layout import EdbLayout
|
|
85
85
|
from pyedb.dotnet.edb_core.layout_validation import LayoutValidation
|
|
86
86
|
from pyedb.dotnet.edb_core.materials import Materials
|
|
87
87
|
from pyedb.dotnet.edb_core.net_class import (
|
|
@@ -93,6 +93,11 @@ from pyedb.dotnet.edb_core.nets import EdbNets
|
|
|
93
93
|
from pyedb.dotnet.edb_core.padstack import EdbPadstacks
|
|
94
94
|
from pyedb.dotnet.edb_core.siwave import EdbSiwave
|
|
95
95
|
from pyedb.dotnet.edb_core.stackup import Stackup
|
|
96
|
+
from pyedb.dotnet.edb_core.utilities.simulation_setup import (
|
|
97
|
+
HfssSimulationSetup,
|
|
98
|
+
SiwaveDCSimulationSetup,
|
|
99
|
+
SiwaveSYZSimulationSetup,
|
|
100
|
+
)
|
|
96
101
|
from pyedb.generic.constants import AEDT_UNITS, SolverType
|
|
97
102
|
from pyedb.generic.general_methods import (
|
|
98
103
|
generate_unique_name,
|
|
@@ -101,7 +106,6 @@ from pyedb.generic.general_methods import (
|
|
|
101
106
|
is_ironpython,
|
|
102
107
|
is_linux,
|
|
103
108
|
is_windows,
|
|
104
|
-
pyedb_function_handler,
|
|
105
109
|
)
|
|
106
110
|
from pyedb.generic.process import SiwaveSolve
|
|
107
111
|
from pyedb.generic.settings import settings
|
|
@@ -271,7 +275,6 @@ class Edb(Database):
|
|
|
271
275
|
if ex_type:
|
|
272
276
|
self.edb_exception(ex_value, ex_traceback)
|
|
273
277
|
|
|
274
|
-
@pyedb_function_handler()
|
|
275
278
|
def __getitem__(self, variable_name):
|
|
276
279
|
"""Get or Set a variable to the Edb project. The variable can be project using ``$`` prefix or
|
|
277
280
|
it can be a design variable, in which case the ``$`` is omitted.
|
|
@@ -289,7 +292,6 @@ class Edb(Database):
|
|
|
289
292
|
return self.variables[variable_name]
|
|
290
293
|
return
|
|
291
294
|
|
|
292
|
-
@pyedb_function_handler()
|
|
293
295
|
def __setitem__(self, variable_name, variable_value):
|
|
294
296
|
type_error_message = "Allowed values are str, numeric or two-item list with variable description."
|
|
295
297
|
if type(variable_value) in [
|
|
@@ -350,7 +352,6 @@ class Edb(Database):
|
|
|
350
352
|
self._layout = None
|
|
351
353
|
self._configuration = None
|
|
352
354
|
|
|
353
|
-
@pyedb_function_handler()
|
|
354
355
|
def _init_objects(self):
|
|
355
356
|
self._components = Components(self)
|
|
356
357
|
self._stackup = Stackup(self, self.layout.layer_collection)
|
|
@@ -358,7 +359,7 @@ class Edb(Database):
|
|
|
358
359
|
self._siwave = EdbSiwave(self)
|
|
359
360
|
self._hfss = EdbHfss(self)
|
|
360
361
|
self._nets = EdbNets(self)
|
|
361
|
-
self._core_primitives =
|
|
362
|
+
self._core_primitives = Layout(self, self._active_cell.GetLayout())
|
|
362
363
|
self._stackup2 = self._stackup
|
|
363
364
|
self._materials = Materials(self)
|
|
364
365
|
|
|
@@ -438,12 +439,18 @@ class Edb(Database):
|
|
|
438
439
|
"""
|
|
439
440
|
|
|
440
441
|
temp = {}
|
|
441
|
-
terminal_mapping = Terminal(self)._terminal_mapping
|
|
442
442
|
for i in self.layout.terminals:
|
|
443
443
|
terminal_type = i.ToString().split(".")[-1]
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
444
|
+
if terminal_type == "PinGroupTerminal":
|
|
445
|
+
temp[i.GetName()] = PinGroupTerminal(self, i)
|
|
446
|
+
elif terminal_type == "PadstackInstanceTerminal":
|
|
447
|
+
temp[i.GetName()] = PadstackInstanceTerminal(self, i)
|
|
448
|
+
elif terminal_type == "EdgeTerminal":
|
|
449
|
+
temp[i.GetName()] = EdgeTerminal(self, i)
|
|
450
|
+
elif terminal_type == "BundleTerminal":
|
|
451
|
+
temp[i.GetName()] = BundleTerminal(self, i)
|
|
452
|
+
elif terminal_type == "PointTerminal":
|
|
453
|
+
temp[i.GetName()] = PointTerminal(self, i)
|
|
447
454
|
return temp
|
|
448
455
|
|
|
449
456
|
@property
|
|
@@ -513,7 +520,6 @@ class Edb(Database):
|
|
|
513
520
|
temp[name] = val
|
|
514
521
|
return temp
|
|
515
522
|
|
|
516
|
-
@pyedb_function_handler()
|
|
517
523
|
def open_edb(self):
|
|
518
524
|
"""Open EDB.
|
|
519
525
|
|
|
@@ -556,7 +562,6 @@ class Edb(Database):
|
|
|
556
562
|
|
|
557
563
|
return True
|
|
558
564
|
|
|
559
|
-
@pyedb_function_handler()
|
|
560
565
|
def open_edb_inside_aedt(self):
|
|
561
566
|
"""Open EDB inside AEDT.
|
|
562
567
|
|
|
@@ -591,7 +596,6 @@ class Edb(Database):
|
|
|
591
596
|
self._active_cell = None
|
|
592
597
|
return None
|
|
593
598
|
|
|
594
|
-
@pyedb_function_handler()
|
|
595
599
|
def create_edb(self):
|
|
596
600
|
"""Create EDB.
|
|
597
601
|
|
|
@@ -618,7 +622,6 @@ class Edb(Database):
|
|
|
618
622
|
return True
|
|
619
623
|
return None
|
|
620
624
|
|
|
621
|
-
@pyedb_function_handler()
|
|
622
625
|
def import_layout_pcb(
|
|
623
626
|
self,
|
|
624
627
|
input_file,
|
|
@@ -692,7 +695,6 @@ class Edb(Database):
|
|
|
692
695
|
self.edbpath = os.path.join(working_dir, aedb_name)
|
|
693
696
|
return self.open_edb()
|
|
694
697
|
|
|
695
|
-
@pyedb_function_handler()
|
|
696
698
|
def export_to_ipc2581(self, ipc_path=None, units="MILLIMETER"):
|
|
697
699
|
"""Create an XML IPC2581 file from the active EDB.
|
|
698
700
|
|
|
@@ -1139,7 +1141,7 @@ class Edb(Database):
|
|
|
1139
1141
|
>>> top_prims = edbapp.modeler.primitives_by_layer["TOP"]
|
|
1140
1142
|
"""
|
|
1141
1143
|
if not self._core_primitives and self.active_db:
|
|
1142
|
-
self._core_primitives =
|
|
1144
|
+
self._core_primitives = Layout(self, self._active_cell.GetLayout())
|
|
1143
1145
|
return self._core_primitives
|
|
1144
1146
|
|
|
1145
1147
|
@property
|
|
@@ -1167,7 +1169,6 @@ class Edb(Database):
|
|
|
1167
1169
|
"""Edb Layout Instance."""
|
|
1168
1170
|
return self.layout.layout_instance
|
|
1169
1171
|
|
|
1170
|
-
@pyedb_function_handler()
|
|
1171
1172
|
def get_connected_objects(self, layout_object_instance):
|
|
1172
1173
|
"""Get connected objects.
|
|
1173
1174
|
|
|
@@ -1259,7 +1260,6 @@ class Edb(Database):
|
|
|
1259
1260
|
VoltageProbe,
|
|
1260
1261
|
) = range(0, 9)
|
|
1261
1262
|
|
|
1262
|
-
@pyedb_function_handler()
|
|
1263
1263
|
def edb_value(self, val):
|
|
1264
1264
|
"""Convert a value to an EDB value. Value can be a string, float or integer. Mainly used in internal calls.
|
|
1265
1265
|
|
|
@@ -1275,7 +1275,6 @@ class Edb(Database):
|
|
|
1275
1275
|
"""
|
|
1276
1276
|
return self.edb_api.utility.value(val)
|
|
1277
1277
|
|
|
1278
|
-
@pyedb_function_handler()
|
|
1279
1278
|
def point_3d(self, x, y, z=0.0):
|
|
1280
1279
|
"""Compute the Edb 3d Point Data.
|
|
1281
1280
|
|
|
@@ -1294,7 +1293,6 @@ class Edb(Database):
|
|
|
1294
1293
|
"""
|
|
1295
1294
|
return self.edb_api.geometry.point3d_data(x, y, z)
|
|
1296
1295
|
|
|
1297
|
-
@pyedb_function_handler()
|
|
1298
1296
|
def point_data(self, x, y=None):
|
|
1299
1297
|
"""Compute the Edb Point Data.
|
|
1300
1298
|
|
|
@@ -1315,7 +1313,6 @@ class Edb(Database):
|
|
|
1315
1313
|
else:
|
|
1316
1314
|
return self.edb_api.geometry.point_data(x, y)
|
|
1317
1315
|
|
|
1318
|
-
@pyedb_function_handler()
|
|
1319
1316
|
def _is_file_existing_and_released(self, filename):
|
|
1320
1317
|
if os.path.exists(filename):
|
|
1321
1318
|
try:
|
|
@@ -1327,14 +1324,12 @@ class Edb(Database):
|
|
|
1327
1324
|
else:
|
|
1328
1325
|
return False
|
|
1329
1326
|
|
|
1330
|
-
@pyedb_function_handler()
|
|
1331
1327
|
def _is_file_existing(self, filename):
|
|
1332
1328
|
if os.path.exists(filename):
|
|
1333
1329
|
return True
|
|
1334
1330
|
else:
|
|
1335
1331
|
return False
|
|
1336
1332
|
|
|
1337
|
-
@pyedb_function_handler()
|
|
1338
1333
|
def _wait_for_file_release(self, timeout=30, file_to_release=None):
|
|
1339
1334
|
if not file_to_release:
|
|
1340
1335
|
file_to_release = os.path.join(self.edbpath)
|
|
@@ -1347,7 +1342,6 @@ class Edb(Database):
|
|
|
1347
1342
|
else:
|
|
1348
1343
|
time.sleep(0.250)
|
|
1349
1344
|
|
|
1350
|
-
@pyedb_function_handler()
|
|
1351
1345
|
def _wait_for_file_exists(self, timeout=30, file_to_release=None, wait_count=4):
|
|
1352
1346
|
if not file_to_release:
|
|
1353
1347
|
file_to_release = os.path.join(self.edbpath)
|
|
@@ -1366,7 +1360,6 @@ class Edb(Database):
|
|
|
1366
1360
|
times = 0
|
|
1367
1361
|
time.sleep(0.250)
|
|
1368
1362
|
|
|
1369
|
-
@pyedb_function_handler()
|
|
1370
1363
|
def close_edb(self):
|
|
1371
1364
|
"""Close EDB and cleanup variables.
|
|
1372
1365
|
|
|
@@ -1387,7 +1380,6 @@ class Edb(Database):
|
|
|
1387
1380
|
self._clean_variables()
|
|
1388
1381
|
return True
|
|
1389
1382
|
|
|
1390
|
-
@pyedb_function_handler()
|
|
1391
1383
|
def save_edb(self):
|
|
1392
1384
|
"""Save the EDB file.
|
|
1393
1385
|
|
|
@@ -1404,7 +1396,6 @@ class Edb(Database):
|
|
|
1404
1396
|
self.logger.info("EDB file save time: {0:.2f}ms".format(elapsed_time * 1000.0))
|
|
1405
1397
|
return True
|
|
1406
1398
|
|
|
1407
|
-
@pyedb_function_handler()
|
|
1408
1399
|
def save_edb_as(self, fname):
|
|
1409
1400
|
"""Save the EDB file as another file.
|
|
1410
1401
|
|
|
@@ -1438,7 +1429,6 @@ class Edb(Database):
|
|
|
1438
1429
|
self._logger.remove_file_logger(origin_name)
|
|
1439
1430
|
return True
|
|
1440
1431
|
|
|
1441
|
-
@pyedb_function_handler()
|
|
1442
1432
|
def execute(self, func):
|
|
1443
1433
|
"""Execute a function.
|
|
1444
1434
|
|
|
@@ -1456,7 +1446,6 @@ class Edb(Database):
|
|
|
1456
1446
|
"""
|
|
1457
1447
|
return self.edb_api.utility.utility.Command.Execute(func)
|
|
1458
1448
|
|
|
1459
|
-
@pyedb_function_handler()
|
|
1460
1449
|
def import_cadence_file(self, inputBrd, WorkDir=None, anstranslator_full_path="", use_ppe=False):
|
|
1461
1450
|
"""Import a board file and generate an ``edb.def`` file in the working directory.
|
|
1462
1451
|
|
|
@@ -1489,7 +1478,6 @@ class Edb(Database):
|
|
|
1489
1478
|
else:
|
|
1490
1479
|
return False
|
|
1491
1480
|
|
|
1492
|
-
@pyedb_function_handler()
|
|
1493
1481
|
def import_gds_file(
|
|
1494
1482
|
self,
|
|
1495
1483
|
inputGDS,
|
|
@@ -1548,7 +1536,6 @@ class Edb(Database):
|
|
|
1548
1536
|
else:
|
|
1549
1537
|
return False
|
|
1550
1538
|
|
|
1551
|
-
@pyedb_function_handler()
|
|
1552
1539
|
def _create_extent(
|
|
1553
1540
|
self,
|
|
1554
1541
|
net_signals,
|
|
@@ -1624,7 +1611,6 @@ class Edb(Database):
|
|
|
1624
1611
|
_poly = self.edb_api.geometry.polygon_data.get_convex_hull_of_polygons(_poly_list)
|
|
1625
1612
|
return _poly
|
|
1626
1613
|
|
|
1627
|
-
@pyedb_function_handler()
|
|
1628
1614
|
def _create_conformal(
|
|
1629
1615
|
self,
|
|
1630
1616
|
net_signals,
|
|
@@ -1678,7 +1664,6 @@ class Edb(Database):
|
|
|
1678
1664
|
areas = [i.Area() for i in _poly_unite]
|
|
1679
1665
|
return _poly_unite[areas.index(max(areas))]
|
|
1680
1666
|
|
|
1681
|
-
@pyedb_function_handler()
|
|
1682
1667
|
def _smart_cut(self, reference_list=[], expansion_size=1e-12):
|
|
1683
1668
|
from pyedb.dotnet.clr_module import Tuple
|
|
1684
1669
|
|
|
@@ -1706,7 +1691,6 @@ class Edb(Database):
|
|
|
1706
1691
|
_polys.append(self.edb_api.geometry.polygon_data.create_from_bbox(points))
|
|
1707
1692
|
return _polys
|
|
1708
1693
|
|
|
1709
|
-
@pyedb_function_handler()
|
|
1710
1694
|
def _create_convex_hull(
|
|
1711
1695
|
self,
|
|
1712
1696
|
net_signals,
|
|
@@ -1741,7 +1725,6 @@ class Edb(Database):
|
|
|
1741
1725
|
_poly = _poly.Expand(expansion_size, tolerance, round_corner, round_extension)[0]
|
|
1742
1726
|
return _poly
|
|
1743
1727
|
|
|
1744
|
-
@pyedb_function_handler()
|
|
1745
1728
|
def cutout(
|
|
1746
1729
|
self,
|
|
1747
1730
|
signal_list=None,
|
|
@@ -1983,7 +1966,6 @@ class Edb(Database):
|
|
|
1983
1966
|
self.open_edb()
|
|
1984
1967
|
return result
|
|
1985
1968
|
|
|
1986
|
-
@pyedb_function_handler()
|
|
1987
1969
|
def _create_cutout_legacy(
|
|
1988
1970
|
self,
|
|
1989
1971
|
signal_list=[],
|
|
@@ -2098,7 +2080,6 @@ class Edb(Database):
|
|
|
2098
2080
|
self.components.refresh_components()
|
|
2099
2081
|
return [[pt.X.ToDouble(), pt.Y.ToDouble()] for pt in list(_poly.GetPolygonWithoutArcs().Points)]
|
|
2100
2082
|
|
|
2101
|
-
@pyedb_function_handler()
|
|
2102
2083
|
def create_cutout(
|
|
2103
2084
|
self,
|
|
2104
2085
|
signal_list=[],
|
|
@@ -2160,7 +2141,6 @@ class Edb(Database):
|
|
|
2160
2141
|
use_pyaedt_extent_computing=use_pyaedt_extent_computing,
|
|
2161
2142
|
)
|
|
2162
2143
|
|
|
2163
|
-
@pyedb_function_handler()
|
|
2164
2144
|
def _create_cutout_multithread(
|
|
2165
2145
|
self,
|
|
2166
2146
|
signal_list=[],
|
|
@@ -2399,7 +2379,6 @@ class Edb(Database):
|
|
|
2399
2379
|
self.logger.reset_timer()
|
|
2400
2380
|
return [[pt.X.ToDouble(), pt.Y.ToDouble()] for pt in list(_poly.GetPolygonWithoutArcs().Points)]
|
|
2401
2381
|
|
|
2402
|
-
@pyedb_function_handler()
|
|
2403
2382
|
def create_cutout_multithread(
|
|
2404
2383
|
self,
|
|
2405
2384
|
signal_list=[],
|
|
@@ -2508,7 +2487,6 @@ class Edb(Database):
|
|
|
2508
2487
|
return_extent=return_extent,
|
|
2509
2488
|
)
|
|
2510
2489
|
|
|
2511
|
-
@pyedb_function_handler()
|
|
2512
2490
|
def get_conformal_polygon_from_netlist(self, netlist=None):
|
|
2513
2491
|
"""Return an EDB conformal polygon based on a netlist.
|
|
2514
2492
|
|
|
@@ -2545,7 +2523,6 @@ class Edb(Database):
|
|
|
2545
2523
|
else:
|
|
2546
2524
|
return False
|
|
2547
2525
|
|
|
2548
|
-
@pyedb_function_handler()
|
|
2549
2526
|
def number_with_units(self, value, units=None):
|
|
2550
2527
|
"""Convert a number to a string with units. If value is a string, it's returned as is.
|
|
2551
2528
|
|
|
@@ -2569,7 +2546,6 @@ class Edb(Database):
|
|
|
2569
2546
|
else:
|
|
2570
2547
|
return "{0}{1}".format(value, units)
|
|
2571
2548
|
|
|
2572
|
-
@pyedb_function_handler()
|
|
2573
2549
|
def arg_with_dim(self, Value, sUnits):
|
|
2574
2550
|
"""Convert a number to a string with units. If value is a string, it's returned as is.
|
|
2575
2551
|
|
|
@@ -2599,7 +2575,6 @@ class Edb(Database):
|
|
|
2599
2575
|
else:
|
|
2600
2576
|
return val
|
|
2601
2577
|
|
|
2602
|
-
@pyedb_function_handler()
|
|
2603
2578
|
def _create_cutout_on_point_list(
|
|
2604
2579
|
self,
|
|
2605
2580
|
point_list,
|
|
@@ -2786,7 +2761,6 @@ class Edb(Database):
|
|
|
2786
2761
|
pass
|
|
2787
2762
|
return [[pt.X.ToDouble(), pt.Y.ToDouble()] for pt in list(polygonData.GetPolygonWithoutArcs().Points)]
|
|
2788
2763
|
|
|
2789
|
-
@pyedb_function_handler()
|
|
2790
2764
|
def create_cutout_on_point_list(
|
|
2791
2765
|
self,
|
|
2792
2766
|
point_list,
|
|
@@ -2840,7 +2814,6 @@ class Edb(Database):
|
|
|
2840
2814
|
keep_voids=keep_voids,
|
|
2841
2815
|
)
|
|
2842
2816
|
|
|
2843
|
-
@pyedb_function_handler()
|
|
2844
2817
|
def write_export3d_option_config_file(self, path_to_output, config_dictionaries=None):
|
|
2845
2818
|
"""Write the options for a 3D export to a configuration file.
|
|
2846
2819
|
|
|
@@ -2878,7 +2851,6 @@ class Edb(Database):
|
|
|
2878
2851
|
f.write(el + " " + str(val) + "\n")
|
|
2879
2852
|
return os.path.join(path_to_output, "options.config")
|
|
2880
2853
|
|
|
2881
|
-
@pyedb_function_handler()
|
|
2882
2854
|
def export_hfss(
|
|
2883
2855
|
self,
|
|
2884
2856
|
path_to_output,
|
|
@@ -2922,7 +2894,6 @@ class Edb(Database):
|
|
|
2922
2894
|
siwave_s = SiwaveSolve(self.edbpath, aedt_installer_path=self.base_path)
|
|
2923
2895
|
return siwave_s.export_3d_cad("HFSS", path_to_output, net_list, num_cores, aedt_file_name, hidden=hidden)
|
|
2924
2896
|
|
|
2925
|
-
@pyedb_function_handler()
|
|
2926
2897
|
def export_q3d(
|
|
2927
2898
|
self,
|
|
2928
2899
|
path_to_output,
|
|
@@ -2973,7 +2944,6 @@ class Edb(Database):
|
|
|
2973
2944
|
hidden=hidden,
|
|
2974
2945
|
)
|
|
2975
2946
|
|
|
2976
|
-
@pyedb_function_handler()
|
|
2977
2947
|
def export_maxwell(
|
|
2978
2948
|
self,
|
|
2979
2949
|
path_to_output,
|
|
@@ -3025,7 +2995,6 @@ class Edb(Database):
|
|
|
3025
2995
|
hidden=hidden,
|
|
3026
2996
|
)
|
|
3027
2997
|
|
|
3028
|
-
@pyedb_function_handler()
|
|
3029
2998
|
def solve_siwave(self):
|
|
3030
2999
|
"""Close EDB and solve it with Siwave.
|
|
3031
3000
|
|
|
@@ -3042,7 +3011,6 @@ class Edb(Database):
|
|
|
3042
3011
|
process.solve()
|
|
3043
3012
|
return self.edbpath[:-5] + ".siw"
|
|
3044
3013
|
|
|
3045
|
-
@pyedb_function_handler()
|
|
3046
3014
|
def export_siwave_dc_results(
|
|
3047
3015
|
self,
|
|
3048
3016
|
siwave_project,
|
|
@@ -3105,7 +3073,6 @@ class Edb(Database):
|
|
|
3105
3073
|
hidden=True,
|
|
3106
3074
|
)
|
|
3107
3075
|
|
|
3108
|
-
@pyedb_function_handler()
|
|
3109
3076
|
def variable_exists(self, variable_name):
|
|
3110
3077
|
"""Check if a variable exists or not.
|
|
3111
3078
|
|
|
@@ -3130,7 +3097,6 @@ class Edb(Database):
|
|
|
3130
3097
|
return True, var_server
|
|
3131
3098
|
return False, var_server
|
|
3132
3099
|
|
|
3133
|
-
@pyedb_function_handler()
|
|
3134
3100
|
def get_variable(self, variable_name):
|
|
3135
3101
|
"""Return Variable Value if variable exists.
|
|
3136
3102
|
|
|
@@ -3149,7 +3115,6 @@ class Edb(Database):
|
|
|
3149
3115
|
self.logger.info("Variable %s doesn't exists.", variable_name)
|
|
3150
3116
|
return None
|
|
3151
3117
|
|
|
3152
|
-
@pyedb_function_handler()
|
|
3153
3118
|
def add_project_variable(self, variable_name, variable_value):
|
|
3154
3119
|
"""Add a variable to edb database (project). The variable will have the prefix `$`.
|
|
3155
3120
|
|
|
@@ -3182,7 +3147,6 @@ class Edb(Database):
|
|
|
3182
3147
|
variable_name = "${}".format(variable_name)
|
|
3183
3148
|
return self.add_design_variable(variable_name=variable_name, variable_value=variable_value)
|
|
3184
3149
|
|
|
3185
|
-
@pyedb_function_handler()
|
|
3186
3150
|
def add_design_variable(self, variable_name, variable_value, is_parameter=False):
|
|
3187
3151
|
"""Add a variable to edb. The variable can be a design one or a project variable (using ``$`` prefix).
|
|
3188
3152
|
|
|
@@ -3225,7 +3189,6 @@ class Edb(Database):
|
|
|
3225
3189
|
self.logger.error("Variable %s already exists.", variable_name)
|
|
3226
3190
|
return False, var_server[1]
|
|
3227
3191
|
|
|
3228
|
-
@pyedb_function_handler()
|
|
3229
3192
|
def change_design_variable_value(self, variable_name, variable_value):
|
|
3230
3193
|
"""Change a variable value.
|
|
3231
3194
|
|
|
@@ -3260,7 +3223,6 @@ class Edb(Database):
|
|
|
3260
3223
|
self.logger.error("Variable %s does not exists.", variable_name)
|
|
3261
3224
|
return False, var_server[1]
|
|
3262
3225
|
|
|
3263
|
-
@pyedb_function_handler()
|
|
3264
3226
|
def get_bounding_box(self):
|
|
3265
3227
|
"""Get the layout bounding box.
|
|
3266
3228
|
|
|
@@ -3275,7 +3237,6 @@ class Edb(Database):
|
|
|
3275
3237
|
[bbox.Item2.X.ToDouble(), bbox.Item2.Y.ToDouble()],
|
|
3276
3238
|
]
|
|
3277
3239
|
|
|
3278
|
-
@pyedb_function_handler()
|
|
3279
3240
|
def build_simulation_project(self, simulation_setup):
|
|
3280
3241
|
# type: (SimulationConfiguration) -> bool
|
|
3281
3242
|
"""Build a ready-to-solve simulation project.
|
|
@@ -3466,7 +3427,6 @@ class Edb(Database):
|
|
|
3466
3427
|
except:
|
|
3467
3428
|
return False
|
|
3468
3429
|
|
|
3469
|
-
@pyedb_function_handler()
|
|
3470
3430
|
def get_statistics(self, compute_area=False):
|
|
3471
3431
|
"""Get the EDBStatistics object.
|
|
3472
3432
|
|
|
@@ -3476,7 +3436,6 @@ class Edb(Database):
|
|
|
3476
3436
|
"""
|
|
3477
3437
|
return self.modeler.get_layout_statistics(evaluate_area=compute_area, net_list=None)
|
|
3478
3438
|
|
|
3479
|
-
@pyedb_function_handler()
|
|
3480
3439
|
def are_port_reference_terminals_connected(self, common_reference=None):
|
|
3481
3440
|
"""Check if all terminal references in design are connected.
|
|
3482
3441
|
If the reference nets are different, there is no hope for the terminal references to be connected.
|
|
@@ -3566,7 +3525,6 @@ class Edb(Database):
|
|
|
3566
3525
|
# If the intersections are non-zero, the terminal references are connected.
|
|
3567
3526
|
return True if len(iDintersection) > 0 else False
|
|
3568
3527
|
|
|
3569
|
-
@pyedb_function_handler()
|
|
3570
3528
|
def new_simulation_configuration(self, filename=None):
|
|
3571
3529
|
# type: (str) -> SimulationConfiguration
|
|
3572
3530
|
"""New SimulationConfiguration Object.
|
|
@@ -3713,7 +3671,6 @@ class Edb(Database):
|
|
|
3713
3671
|
return False
|
|
3714
3672
|
return HFSSPISimulationSetup(self).create(name)
|
|
3715
3673
|
|
|
3716
|
-
@pyedb_function_handler()
|
|
3717
3674
|
def create_siwave_syz_setup(self, name=None):
|
|
3718
3675
|
"""Create a setup from a template.
|
|
3719
3676
|
|
|
@@ -3744,7 +3701,6 @@ class Edb(Database):
|
|
|
3744
3701
|
SiwaveSYZSimulationSetup(self).create(name)
|
|
3745
3702
|
return self.setups[name]
|
|
3746
3703
|
|
|
3747
|
-
@pyedb_function_handler()
|
|
3748
3704
|
def create_siwave_dc_setup(self, name=None):
|
|
3749
3705
|
"""Create a setup from a template.
|
|
3750
3706
|
|
|
@@ -3772,7 +3728,6 @@ class Edb(Database):
|
|
|
3772
3728
|
setup = SiwaveDCSimulationSetup(self).create(name)
|
|
3773
3729
|
return setup
|
|
3774
3730
|
|
|
3775
|
-
@pyedb_function_handler()
|
|
3776
3731
|
def calculate_initial_extent(self, expansion_factor):
|
|
3777
3732
|
"""Compute a float representing the larger number between the dielectric thickness or trace width
|
|
3778
3733
|
multiplied by the nW factor. The trace width search is limited to nets with ports attached.
|
|
@@ -3805,7 +3760,6 @@ class Edb(Database):
|
|
|
3805
3760
|
self.logger.info("The W factor is {}, The initial extent = {:e}".format(expansion_factor, max_width))
|
|
3806
3761
|
return max_width
|
|
3807
3762
|
|
|
3808
|
-
@pyedb_function_handler()
|
|
3809
3763
|
def copy_zones(self, working_directory=None):
|
|
3810
3764
|
"""Copy multizone EDB project to one new edb per zone.
|
|
3811
3765
|
|
|
@@ -3854,7 +3808,6 @@ class Edb(Database):
|
|
|
3854
3808
|
edb_zones[edb_zone_path] = (-1, poly_data)
|
|
3855
3809
|
return edb_zones
|
|
3856
3810
|
|
|
3857
|
-
@pyedb_function_handler()
|
|
3858
3811
|
def cutout_multizone_layout(self, zone_dict, common_reference_net=None):
|
|
3859
3812
|
"""Create a multizone project cutout.
|
|
3860
3813
|
|
|
@@ -3915,7 +3868,6 @@ class Edb(Database):
|
|
|
3915
3868
|
edb.close_edb()
|
|
3916
3869
|
return defined_ports, project_connexions
|
|
3917
3870
|
|
|
3918
|
-
@pyedb_function_handler()
|
|
3919
3871
|
def _get_connected_ports_from_multizone_cutout(self, terminal_info_dict):
|
|
3920
3872
|
"""Return connected port list from clipped multizone layout.
|
|
3921
3873
|
|
|
@@ -3989,7 +3941,6 @@ class Edb(Database):
|
|
|
3989
3941
|
connected_ports_list.append((port1_connexion, port2_connexion))
|
|
3990
3942
|
return connected_ports_list
|
|
3991
3943
|
|
|
3992
|
-
@pyedb_function_handler
|
|
3993
3944
|
def create_port(self, terminal, ref_terminal=None, is_circuit_port=False, name=None):
|
|
3994
3945
|
"""Create a port.
|
|
3995
3946
|
|
|
@@ -4026,7 +3977,6 @@ class Edb(Database):
|
|
|
4026
3977
|
terminal.name = name
|
|
4027
3978
|
return self.ports[terminal.name]
|
|
4028
3979
|
|
|
4029
|
-
@pyedb_function_handler
|
|
4030
3980
|
def create_voltage_probe(self, terminal, ref_terminal):
|
|
4031
3981
|
"""Create a voltage probe.
|
|
4032
3982
|
|
|
@@ -4056,7 +4006,6 @@ class Edb(Database):
|
|
|
4056
4006
|
term.ref_terminal = ref_terminal
|
|
4057
4007
|
return self.probes[term.name]
|
|
4058
4008
|
|
|
4059
|
-
@pyedb_function_handler
|
|
4060
4009
|
def create_voltage_source(self, terminal, ref_terminal):
|
|
4061
4010
|
"""Create a voltage source.
|
|
4062
4011
|
|
|
@@ -4086,7 +4035,6 @@ class Edb(Database):
|
|
|
4086
4035
|
term.ref_terminal = ref_terminal
|
|
4087
4036
|
return self.sources[term.name]
|
|
4088
4037
|
|
|
4089
|
-
@pyedb_function_handler
|
|
4090
4038
|
def create_current_source(self, terminal, ref_terminal):
|
|
4091
4039
|
"""Create a current source.
|
|
4092
4040
|
|
|
@@ -4116,7 +4064,6 @@ class Edb(Database):
|
|
|
4116
4064
|
term.ref_terminal = ref_terminal
|
|
4117
4065
|
return self.sources[term.name]
|
|
4118
4066
|
|
|
4119
|
-
@pyedb_function_handler
|
|
4120
4067
|
def get_point_terminal(self, name, net_name, location, layer):
|
|
4121
4068
|
"""Place a voltage probe between two points.
|
|
4122
4069
|
|
|
@@ -4135,12 +4082,11 @@ class Edb(Database):
|
|
|
4135
4082
|
-------
|
|
4136
4083
|
:class:`legacy.edb_core.edb_data.terminals.PointTerminal`
|
|
4137
4084
|
"""
|
|
4138
|
-
from pyedb.dotnet.edb_core.
|
|
4085
|
+
from pyedb.dotnet.edb_core.cell.terminal.point_terminal import PointTerminal
|
|
4139
4086
|
|
|
4140
4087
|
point_terminal = PointTerminal(self)
|
|
4141
4088
|
return point_terminal.create(name, net_name, location, layer)
|
|
4142
4089
|
|
|
4143
|
-
@pyedb_function_handler
|
|
4144
4090
|
def auto_parametrize_design(
|
|
4145
4091
|
self,
|
|
4146
4092
|
layers=True,
|
|
@@ -4319,7 +4265,6 @@ class Edb(Database):
|
|
|
4319
4265
|
parameters.append(antipad_size_variable_y)
|
|
4320
4266
|
return parameters
|
|
4321
4267
|
|
|
4322
|
-
@pyedb_function_handler
|
|
4323
4268
|
def _clean_string_for_variable_name(self, variable_name):
|
|
4324
4269
|
"""Remove forbidden character for variable name.
|
|
4325
4270
|
Parameters
|