pyedb 0.6.0__py3-none-any.whl → 0.7.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/dotnet/clr_module.py +1 -1
- pyedb/dotnet/edb.py +15 -16
- pyedb/dotnet/edb_core/cell/hierarchy/model.py +17 -0
- pyedb/dotnet/edb_core/components.py +11 -11
- pyedb/dotnet/edb_core/configuration.py +346 -77
- pyedb/dotnet/edb_core/definition/component_def.py +9 -0
- pyedb/dotnet/edb_core/definition/package_def.py +27 -0
- pyedb/dotnet/edb_core/edb_data/components_data.py +8 -3
- pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +14 -13
- pyedb/dotnet/edb_core/edb_data/hfss_simulation_setup_data.py +2 -2
- pyedb/dotnet/edb_core/edb_data/layer_data.py +8 -3
- pyedb/dotnet/edb_core/edb_data/padstacks_data.py +26 -5
- pyedb/dotnet/edb_core/edb_data/primitives_data.py +12 -11
- pyedb/dotnet/edb_core/edb_data/siwave_simulation_setup_data.py +1 -1
- pyedb/dotnet/edb_core/edb_data/sources.py +10 -0
- pyedb/dotnet/edb_core/hfss.py +1 -1
- pyedb/dotnet/edb_core/layout.py +94 -31
- pyedb/dotnet/edb_core/materials.py +637 -541
- pyedb/dotnet/edb_core/nets.py +5 -5
- pyedb/dotnet/edb_core/padstack.py +57 -6
- pyedb/dotnet/edb_core/siwave.py +9 -2
- pyedb/dotnet/edb_core/stackup.py +108 -94
- pyedb/dotnet/edb_core/utilities/__init__.py +3 -0
- pyedb/dotnet/edb_core/utilities/heatsink.py +69 -0
- pyedb/exceptions.py +6 -0
- pyedb/generic/filesystem.py +7 -3
- pyedb/generic/general_methods.py +4 -0
- pyedb/generic/process.py +4 -1
- pyedb/generic/settings.py +10 -0
- {pyedb-0.6.0.dist-info → pyedb-0.7.1.dist-info}/METADATA +31 -53
- {pyedb-0.6.0.dist-info → pyedb-0.7.1.dist-info}/RECORD +35 -32
- /pyedb/dotnet/edb_core/{edb_data → utilities}/simulation_setup.py +0 -0
- {pyedb-0.6.0.dist-info → pyedb-0.7.1.dist-info}/LICENSE +0 -0
- {pyedb-0.6.0.dist-info → pyedb-0.7.1.dist-info}/WHEEL +0 -0
pyedb/__init__.py
CHANGED
pyedb/dotnet/clr_module.py
CHANGED
|
@@ -83,7 +83,7 @@ except ImportError: # pragma: no cover
|
|
|
83
83
|
)
|
|
84
84
|
edb_initialized = False
|
|
85
85
|
elif sys.version[0] == 3 and sys.version[1] < 7:
|
|
86
|
-
warnings.warn("EDB requires Linux Python 3.
|
|
86
|
+
warnings.warn("EDB requires Linux Python 3.8 or later.")
|
|
87
87
|
_clr = None
|
|
88
88
|
String = None
|
|
89
89
|
Double = None
|
pyedb/dotnet/edb.py
CHANGED
|
@@ -848,12 +848,11 @@ class Edb(Database):
|
|
|
848
848
|
Examples
|
|
849
849
|
--------
|
|
850
850
|
>>> from pyedb.dotnet.edb import Edb
|
|
851
|
-
>>> edbapp = Edb(
|
|
852
|
-
>>> edbapp.materials
|
|
853
|
-
>>> edbapp.materials.add_debye_material("
|
|
854
|
-
>>> edbapp.materials.add_djordjevicsarkar_material("
|
|
851
|
+
>>> edbapp = Edb()
|
|
852
|
+
>>> edbapp.materials.add_material("air", permittivity=1.0)
|
|
853
|
+
>>> edbapp.materials.add_debye_material("debye_mat", 5, 3, 0.02, 0.05, 1e5, 1e9)
|
|
854
|
+
>>> edbapp.materials.add_djordjevicsarkar_material("djord_mat", 3.3, 0.02, 3.3)
|
|
855
855
|
"""
|
|
856
|
-
|
|
857
856
|
if not self._materials and self.active_db:
|
|
858
857
|
self._materials = Materials(self)
|
|
859
858
|
return self._materials
|
|
@@ -4142,8 +4141,8 @@ class Edb(Database):
|
|
|
4142
4141
|
loss_tg_variable = "$loss_tangent_{}".format(mat_name)
|
|
4143
4142
|
loss_tg_variable = self._clean_string_for_variable_name(loss_tg_variable)
|
|
4144
4143
|
if not loss_tg_variable in self.variables:
|
|
4145
|
-
self.add_design_variable(loss_tg_variable, material.
|
|
4146
|
-
material.
|
|
4144
|
+
self.add_design_variable(loss_tg_variable, material.dielectric_loss_tangent)
|
|
4145
|
+
material.dielectric_loss_tangent = loss_tg_variable
|
|
4147
4146
|
parameters.append(loss_tg_variable)
|
|
4148
4147
|
else:
|
|
4149
4148
|
sigma_variable = "$sigma_{}".format(mat_name)
|
|
@@ -4176,7 +4175,7 @@ class Edb(Database):
|
|
|
4176
4175
|
if via_holes: # pragma no cover
|
|
4177
4176
|
hole_variable = self._clean_string_for_variable_name("$hole_diam_{}".format(def_name))
|
|
4178
4177
|
if hole_variable not in self.variables:
|
|
4179
|
-
self.add_design_variable(hole_variable, padstack_def.
|
|
4178
|
+
self.add_design_variable(hole_variable, padstack_def.hole_diameter_string)
|
|
4180
4179
|
padstack_def.hole_properties = hole_variable
|
|
4181
4180
|
parameters.append(hole_variable)
|
|
4182
4181
|
if pads:
|
|
@@ -4186,7 +4185,7 @@ class Edb(Database):
|
|
|
4186
4185
|
"$pad_diam_{}_{}".format(def_name, layer)
|
|
4187
4186
|
)
|
|
4188
4187
|
if pad_diameter_variable not in self.variables:
|
|
4189
|
-
self.add_design_variable(pad_diameter_variable, pad.
|
|
4188
|
+
self.add_design_variable(pad_diameter_variable, pad.parameters_values_string[0])
|
|
4190
4189
|
pad.parameters = {"Diameter": pad_diameter_variable}
|
|
4191
4190
|
parameters.append(pad_diameter_variable)
|
|
4192
4191
|
if pad.geometry_type == 2: # pragma no cover
|
|
@@ -4194,7 +4193,7 @@ class Edb(Database):
|
|
|
4194
4193
|
"$pad_size_{}_{}".format(def_name, layer)
|
|
4195
4194
|
)
|
|
4196
4195
|
if pad_size_variable not in self.variables:
|
|
4197
|
-
self.add_design_variable(pad_size_variable, pad.
|
|
4196
|
+
self.add_design_variable(pad_size_variable, pad.parameters_values_string[0])
|
|
4198
4197
|
pad.parameters = {"Size": pad_size_variable}
|
|
4199
4198
|
parameters.append(pad_size_variable)
|
|
4200
4199
|
elif pad.geometry_type == 3: # pragma no cover
|
|
@@ -4205,8 +4204,8 @@ class Edb(Database):
|
|
|
4205
4204
|
"$pad_size_y_{}_{}".format(def_name, layer)
|
|
4206
4205
|
)
|
|
4207
4206
|
if pad_size_variable_x not in self.variables and pad_size_variable_y not in self.variables:
|
|
4208
|
-
self.add_design_variable(pad_size_variable_x, pad.
|
|
4209
|
-
self.add_design_variable(pad_size_variable_y, pad.
|
|
4207
|
+
self.add_design_variable(pad_size_variable_x, pad.parameters_values_string[0])
|
|
4208
|
+
self.add_design_variable(pad_size_variable_y, pad.parameters_values_string[1])
|
|
4210
4209
|
pad.parameters = {"XSize": pad_size_variable_x, "YSize": pad_size_variable_y}
|
|
4211
4210
|
parameters.append(pad_size_variable_x)
|
|
4212
4211
|
parameters.append(pad_size_variable_y)
|
|
@@ -4217,7 +4216,7 @@ class Edb(Database):
|
|
|
4217
4216
|
"$antipad_diam_{}_{}".format(def_name, layer)
|
|
4218
4217
|
)
|
|
4219
4218
|
if antipad_diameter_variable not in self.variables: # pragma no cover
|
|
4220
|
-
self.add_design_variable(antipad_diameter_variable, antipad.
|
|
4219
|
+
self.add_design_variable(antipad_diameter_variable, antipad.parameters_values_string[0])
|
|
4221
4220
|
antipad.parameters = {"Diameter": antipad_diameter_variable}
|
|
4222
4221
|
parameters.append(antipad_diameter_variable)
|
|
4223
4222
|
if antipad.geometry_type == 2: # pragma no cover
|
|
@@ -4225,7 +4224,7 @@ class Edb(Database):
|
|
|
4225
4224
|
"$antipad_size_{}_{}".format(def_name, layer)
|
|
4226
4225
|
)
|
|
4227
4226
|
if antipad_size_variable not in self.variables: # pragma no cover
|
|
4228
|
-
self.add_design_variable(antipad_size_variable, antipad.
|
|
4227
|
+
self.add_design_variable(antipad_size_variable, antipad.parameters_values_string[0])
|
|
4229
4228
|
antipad.parameters = {"Size": antipad_size_variable}
|
|
4230
4229
|
parameters.append(antipad_size_variable)
|
|
4231
4230
|
elif antipad.geometry_type == 3: # pragma no cover
|
|
@@ -4239,8 +4238,8 @@ class Edb(Database):
|
|
|
4239
4238
|
antipad_size_variable_x not in self.variables
|
|
4240
4239
|
and antipad_size_variable_y not in self.variables
|
|
4241
4240
|
): # pragma no cover
|
|
4242
|
-
self.add_design_variable(antipad_size_variable_x, antipad.
|
|
4243
|
-
self.add_design_variable(antipad_size_variable_y, antipad.
|
|
4241
|
+
self.add_design_variable(antipad_size_variable_x, antipad.parameters_values_string[0])
|
|
4242
|
+
self.add_design_variable(antipad_size_variable_y, antipad.parameters_values_string[1])
|
|
4244
4243
|
antipad.parameters = {"XSize": antipad_size_variable_x, "YSize": antipad_size_variable_y}
|
|
4245
4244
|
parameters.append(antipad_size_variable_x)
|
|
4246
4245
|
parameters.append(antipad_size_variable_y)
|
|
@@ -86,3 +86,20 @@ class SParameterModel(Model):
|
|
|
86
86
|
|
|
87
87
|
def component_model_name(self):
|
|
88
88
|
self._edb_object.GetComponentModelName()
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
class SPICEModel(Model):
|
|
92
|
+
"""Manages SPICE model class."""
|
|
93
|
+
|
|
94
|
+
def __init__(self, pedb, edb_object=None):
|
|
95
|
+
super().__init__(pedb, edb_object)
|
|
96
|
+
|
|
97
|
+
@property
|
|
98
|
+
def model_name(self):
|
|
99
|
+
"""SPICE model name."""
|
|
100
|
+
return self._edb_object.GetModelName()
|
|
101
|
+
|
|
102
|
+
@property
|
|
103
|
+
def spice_file_path(self):
|
|
104
|
+
"""SPICE file path."""
|
|
105
|
+
return self._edb_object.GetSPICEFilePath()
|
|
@@ -1408,7 +1408,7 @@ class Components(object):
|
|
|
1408
1408
|
|
|
1409
1409
|
@pyedb_function_handler()
|
|
1410
1410
|
def create_rlc_component(
|
|
1411
|
-
self, pins, component_name="", r_value=
|
|
1411
|
+
self, pins, component_name="", r_value=None, c_value=None, l_value=None, is_parallel=False
|
|
1412
1412
|
): # pragma: no cover
|
|
1413
1413
|
"""Create physical Rlc component.
|
|
1414
1414
|
|
|
@@ -1454,9 +1454,9 @@ class Components(object):
|
|
|
1454
1454
|
placement_layer=None,
|
|
1455
1455
|
component_part_name=None,
|
|
1456
1456
|
is_rlc=False,
|
|
1457
|
-
r_value=
|
|
1458
|
-
c_value=
|
|
1459
|
-
l_value=
|
|
1457
|
+
r_value=None,
|
|
1458
|
+
c_value=None,
|
|
1459
|
+
l_value=None,
|
|
1460
1460
|
is_parallel=False,
|
|
1461
1461
|
):
|
|
1462
1462
|
"""Create a component from pins.
|
|
@@ -1523,21 +1523,21 @@ class Components(object):
|
|
|
1523
1523
|
if is_rlc and len(pins) == 2:
|
|
1524
1524
|
rlc = self._edb.utility.utility.Rlc()
|
|
1525
1525
|
rlc.IsParallel = is_parallel
|
|
1526
|
-
if r_value:
|
|
1526
|
+
if r_value is None:
|
|
1527
|
+
rlc.REnabled = False
|
|
1528
|
+
else:
|
|
1527
1529
|
rlc.REnabled = True
|
|
1528
1530
|
rlc.R = self._get_edb_value(r_value)
|
|
1531
|
+
if l_value is None:
|
|
1532
|
+
rlc.LEnabled = False
|
|
1529
1533
|
else:
|
|
1530
|
-
rlc.REnabled = False
|
|
1531
|
-
if l_value:
|
|
1532
1534
|
rlc.LEnabled = True
|
|
1533
1535
|
rlc.L = self._get_edb_value(l_value)
|
|
1536
|
+
if c_value is None:
|
|
1537
|
+
rlc.CEnabled = False
|
|
1534
1538
|
else:
|
|
1535
|
-
rlc.LEnabled = False
|
|
1536
|
-
if c_value:
|
|
1537
1539
|
rlc.CEnabled = True
|
|
1538
1540
|
rlc.C = self._get_edb_value(c_value)
|
|
1539
|
-
else:
|
|
1540
|
-
rlc.CEnabled = False
|
|
1541
1541
|
if rlc.REnabled and not rlc.CEnabled and not rlc.CEnabled:
|
|
1542
1542
|
new_cmp.SetComponentType(self._edb.definition.ComponentType.Resistor)
|
|
1543
1543
|
elif rlc.CEnabled and not rlc.REnabled and not rlc.LEnabled:
|