pyedb 0.6.0__tar.gz → 0.7.0__tar.gz
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-0.6.0 → pyedb-0.7.0}/PKG-INFO +1 -1
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/__init__.py +1 -1
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb.py +9 -9
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/model.py +17 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/configuration.py +152 -58
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/components_data.py +6 -2
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/padstacks_data.py +20 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/hfss.py +1 -1
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/layout.py +35 -31
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/nets.py +5 -5
- {pyedb-0.6.0 → pyedb-0.7.0}/LICENSE +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/README.md +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/pyproject.toml +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/application/Variables.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/application/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/clr_module.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/cell/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/cell/hierarchy/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/components.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/definition/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/definition/component_def.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/definition/component_model.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/definition/definition_obj.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/definition/definitions.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/definition/package_def.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/dotnet/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/dotnet/database.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/dotnet/layout.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/dotnet/primitive.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/connectable.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/control_file.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/design_options.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/edbvalue.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/hfss_extent_info.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/hfss_simulation_setup_data.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/layer_data.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/nets_data.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/obj_base.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/ports.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/primitives_data.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/simulation_configuration.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/simulation_setup.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/siwave_simulation_setup_data.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/sources.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/terminals.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/utilities.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/variables.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/general.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/layout_validation.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/materials.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/net_class.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/padstack.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/siwave.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/stackup.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/edb_logger.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/generic/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/generic/constants.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/generic/data_handlers.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/generic/design_types.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/generic/filesystem.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/generic/general_methods.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/generic/plot.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/generic/process.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/generic/settings.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/bom/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/bom/bom.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/bom/bom_item.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/bom/characteristics.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/bom/refdes.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/content/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/content/color.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/content/content.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/content/dictionary_color.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/content/dictionary_fill.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/content/dictionary_line.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/content/entry_color.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/content/entry_line.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/content/fill.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/content/layer_ref.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/content/standard_geometries_dictionary.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/cad_data.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/component.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/drill.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/feature.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/layer.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/layer_feature.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/logical_net.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/outline.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/package.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_def.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_hole_def.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_instance.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/padstack_pad_def.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/path.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/phy_net.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/pin.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/polygon.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/profile.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/stackup.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_group.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/stackup_layer.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_data/step.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/cad_header.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/ecad.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ecad/spec.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/history_record.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/ipc2581.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/ipc2581/logistic_header.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/misc/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/misc/aedtlib_personalib_install.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/misc/downloads.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/misc/misc.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/misc/pyedb.runtimeconfig.json +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/misc/siw_feature_config/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/misc/siw_feature_config/emc/__init__.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/misc/siw_feature_config/emc/component_tags.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/misc/siw_feature_config/emc/net_tags.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/misc/siw_feature_config/emc/tag_library.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/misc/siw_feature_config/emc/xml_generic.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/misc/siw_feature_config/emc_rule_checker_settings.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/misc/utilities.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/modeler/geometry_operators.py +0 -0
- {pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/siwave.py +0 -0
|
@@ -4176,7 +4176,7 @@ class Edb(Database):
|
|
|
4176
4176
|
if via_holes: # pragma no cover
|
|
4177
4177
|
hole_variable = self._clean_string_for_variable_name("$hole_diam_{}".format(def_name))
|
|
4178
4178
|
if hole_variable not in self.variables:
|
|
4179
|
-
self.add_design_variable(hole_variable, padstack_def.
|
|
4179
|
+
self.add_design_variable(hole_variable, padstack_def.hole_diameter_string)
|
|
4180
4180
|
padstack_def.hole_properties = hole_variable
|
|
4181
4181
|
parameters.append(hole_variable)
|
|
4182
4182
|
if pads:
|
|
@@ -4186,7 +4186,7 @@ class Edb(Database):
|
|
|
4186
4186
|
"$pad_diam_{}_{}".format(def_name, layer)
|
|
4187
4187
|
)
|
|
4188
4188
|
if pad_diameter_variable not in self.variables:
|
|
4189
|
-
self.add_design_variable(pad_diameter_variable, pad.
|
|
4189
|
+
self.add_design_variable(pad_diameter_variable, pad.parameters_values_string[0])
|
|
4190
4190
|
pad.parameters = {"Diameter": pad_diameter_variable}
|
|
4191
4191
|
parameters.append(pad_diameter_variable)
|
|
4192
4192
|
if pad.geometry_type == 2: # pragma no cover
|
|
@@ -4194,7 +4194,7 @@ class Edb(Database):
|
|
|
4194
4194
|
"$pad_size_{}_{}".format(def_name, layer)
|
|
4195
4195
|
)
|
|
4196
4196
|
if pad_size_variable not in self.variables:
|
|
4197
|
-
self.add_design_variable(pad_size_variable, pad.
|
|
4197
|
+
self.add_design_variable(pad_size_variable, pad.parameters_values_string[0])
|
|
4198
4198
|
pad.parameters = {"Size": pad_size_variable}
|
|
4199
4199
|
parameters.append(pad_size_variable)
|
|
4200
4200
|
elif pad.geometry_type == 3: # pragma no cover
|
|
@@ -4205,8 +4205,8 @@ class Edb(Database):
|
|
|
4205
4205
|
"$pad_size_y_{}_{}".format(def_name, layer)
|
|
4206
4206
|
)
|
|
4207
4207
|
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.
|
|
4208
|
+
self.add_design_variable(pad_size_variable_x, pad.parameters_values_string[0])
|
|
4209
|
+
self.add_design_variable(pad_size_variable_y, pad.parameters_values_string[1])
|
|
4210
4210
|
pad.parameters = {"XSize": pad_size_variable_x, "YSize": pad_size_variable_y}
|
|
4211
4211
|
parameters.append(pad_size_variable_x)
|
|
4212
4212
|
parameters.append(pad_size_variable_y)
|
|
@@ -4217,7 +4217,7 @@ class Edb(Database):
|
|
|
4217
4217
|
"$antipad_diam_{}_{}".format(def_name, layer)
|
|
4218
4218
|
)
|
|
4219
4219
|
if antipad_diameter_variable not in self.variables: # pragma no cover
|
|
4220
|
-
self.add_design_variable(antipad_diameter_variable, antipad.
|
|
4220
|
+
self.add_design_variable(antipad_diameter_variable, antipad.parameters_values_string[0])
|
|
4221
4221
|
antipad.parameters = {"Diameter": antipad_diameter_variable}
|
|
4222
4222
|
parameters.append(antipad_diameter_variable)
|
|
4223
4223
|
if antipad.geometry_type == 2: # pragma no cover
|
|
@@ -4225,7 +4225,7 @@ class Edb(Database):
|
|
|
4225
4225
|
"$antipad_size_{}_{}".format(def_name, layer)
|
|
4226
4226
|
)
|
|
4227
4227
|
if antipad_size_variable not in self.variables: # pragma no cover
|
|
4228
|
-
self.add_design_variable(antipad_size_variable, antipad.
|
|
4228
|
+
self.add_design_variable(antipad_size_variable, antipad.parameters_values_string[0])
|
|
4229
4229
|
antipad.parameters = {"Size": antipad_size_variable}
|
|
4230
4230
|
parameters.append(antipad_size_variable)
|
|
4231
4231
|
elif antipad.geometry_type == 3: # pragma no cover
|
|
@@ -4239,8 +4239,8 @@ class Edb(Database):
|
|
|
4239
4239
|
antipad_size_variable_x not in self.variables
|
|
4240
4240
|
and antipad_size_variable_y not in self.variables
|
|
4241
4241
|
): # pragma no cover
|
|
4242
|
-
self.add_design_variable(antipad_size_variable_x, antipad.
|
|
4243
|
-
self.add_design_variable(antipad_size_variable_y, antipad.
|
|
4242
|
+
self.add_design_variable(antipad_size_variable_x, antipad.parameters_values_string[0])
|
|
4243
|
+
self.add_design_variable(antipad_size_variable_y, antipad.parameters_values_string[1])
|
|
4244
4244
|
antipad.parameters = {"XSize": antipad_size_variable_x, "YSize": antipad_size_variable_y}
|
|
4245
4245
|
parameters.append(antipad_size_variable_x)
|
|
4246
4246
|
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()
|
|
@@ -41,6 +41,8 @@ class Configuration:
|
|
|
41
41
|
self._pedb = pedb
|
|
42
42
|
self._components = self._pedb.components.components
|
|
43
43
|
self.data = {}
|
|
44
|
+
self._s_parameter_library = ""
|
|
45
|
+
self._spice_model_library = ""
|
|
44
46
|
|
|
45
47
|
@pyedb_function_handler
|
|
46
48
|
def load(self, config_file, append=True, apply_file=False, output_file=None, open_at_the_end=True):
|
|
@@ -92,9 +94,22 @@ class Configuration:
|
|
|
92
94
|
self._pedb.logger.error("No data loaded. Please load a configuration file.")
|
|
93
95
|
return False
|
|
94
96
|
|
|
97
|
+
# Configure general settings
|
|
98
|
+
if "general" in self.data:
|
|
99
|
+
self._load_general()
|
|
100
|
+
|
|
101
|
+
# Configure nets
|
|
102
|
+
if "nets" in self.data:
|
|
103
|
+
self._load_nets()
|
|
104
|
+
|
|
105
|
+
# Configure components
|
|
95
106
|
if "components" in self.data:
|
|
96
107
|
self._load_components()
|
|
97
108
|
|
|
109
|
+
# Configure pin groups
|
|
110
|
+
if "pin_groups" in self.data:
|
|
111
|
+
self._load_pin_groups()
|
|
112
|
+
|
|
98
113
|
# Configure ports
|
|
99
114
|
if "ports" in self.data:
|
|
100
115
|
self._load_ports()
|
|
@@ -115,6 +130,10 @@ class Configuration:
|
|
|
115
130
|
if "s_parameters" in self.data:
|
|
116
131
|
self._load_s_parameter()
|
|
117
132
|
|
|
133
|
+
# Configure SPICE models
|
|
134
|
+
if "spice_models" in self.data:
|
|
135
|
+
self._load_spice_models()
|
|
136
|
+
|
|
118
137
|
return True
|
|
119
138
|
|
|
120
139
|
@pyedb_function_handler
|
|
@@ -122,7 +141,7 @@ class Configuration:
|
|
|
122
141
|
"""Imports component information from json."""
|
|
123
142
|
|
|
124
143
|
for comp in self.data["components"]:
|
|
125
|
-
|
|
144
|
+
ref_designator = comp["reference_designator"]
|
|
126
145
|
part_type = comp["part_type"].lower()
|
|
127
146
|
if part_type == "resistor":
|
|
128
147
|
part_type = "Resistor"
|
|
@@ -137,7 +156,7 @@ class Configuration:
|
|
|
137
156
|
else:
|
|
138
157
|
part_type = "Other"
|
|
139
158
|
|
|
140
|
-
comp_layout = self._components[
|
|
159
|
+
comp_layout = self._components[ref_designator]
|
|
141
160
|
comp_layout.type = part_type
|
|
142
161
|
|
|
143
162
|
if part_type in ["Resistor", "Capacitor", "Inductor"]:
|
|
@@ -213,7 +232,7 @@ class Configuration:
|
|
|
213
232
|
height = solder_ball_properties["height"]
|
|
214
233
|
|
|
215
234
|
self._pedb.components.set_solder_ball(
|
|
216
|
-
component=
|
|
235
|
+
component=ref_designator,
|
|
217
236
|
sball_diam=diameter,
|
|
218
237
|
sball_mid_diam=mid_diameter,
|
|
219
238
|
sball_height=height,
|
|
@@ -229,38 +248,48 @@ class Configuration:
|
|
|
229
248
|
"""Imports port information from json."""
|
|
230
249
|
for port in self.data["ports"]:
|
|
231
250
|
port_type = port["type"]
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
if "
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
if
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
pos_terminal =
|
|
246
|
-
else: #
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
+
|
|
252
|
+
positive_terminal_json = port["positive_terminal"]
|
|
253
|
+
pos_terminal = ""
|
|
254
|
+
if "pin_group" in positive_terminal_json:
|
|
255
|
+
pin_group = self._pedb.siwave.pin_groups[positive_terminal_json["pin_group"]]
|
|
256
|
+
pos_terminal = pin_group.get_terminal(pin_group.name, True)
|
|
257
|
+
else:
|
|
258
|
+
ref_designator = port["reference_designator"]
|
|
259
|
+
comp_layout = self._components[ref_designator]
|
|
260
|
+
|
|
261
|
+
if "pin" in positive_terminal_json:
|
|
262
|
+
pin_name = positive_terminal_json["pin"]
|
|
263
|
+
port_name = "{}_{}".format(ref_designator, pin_name)
|
|
264
|
+
pos_terminal = comp_layout.pins[pin_name].get_terminal(port_name, True)
|
|
265
|
+
else: # Net
|
|
266
|
+
net_name = positive_terminal_json["net"]
|
|
267
|
+
port_name = "{}_{}".format(ref_designator, net_name)
|
|
268
|
+
if port_type == "circuit":
|
|
269
|
+
pg_name = "pg_{}".format(port_name)
|
|
270
|
+
_, pg = self._pedb.siwave.create_pin_group_on_net(ref_designator, net_name, pg_name)
|
|
271
|
+
pos_terminal = pg.get_terminal(port_name, True)
|
|
272
|
+
else: # Coax port
|
|
273
|
+
for _, p in comp_layout.pins.items():
|
|
274
|
+
if p.net_name == net_name:
|
|
275
|
+
pos_terminal = p.get_terminal(port_name, True)
|
|
276
|
+
break
|
|
251
277
|
|
|
252
278
|
if port_type == "circuit":
|
|
253
|
-
|
|
254
|
-
if "
|
|
255
|
-
|
|
256
|
-
|
|
279
|
+
negative_terminal_json = port["negative_terminal"]
|
|
280
|
+
if "pin_group" in negative_terminal_json:
|
|
281
|
+
pin_group = self._pedb.siwave.pin_groups[negative_terminal_json["pin_group"]]
|
|
282
|
+
neg_terminal = pin_group.get_terminal(pin_group.name + "_ref", True)
|
|
283
|
+
elif "pin" in negative_terminal_json:
|
|
284
|
+
pin_name = negative_terminal_json["pin"]
|
|
285
|
+
port_name = "{}_{}_ref".format(ref_designator, pin_name)
|
|
257
286
|
neg_terminal = comp_layout.pins[pin_name].get_terminal(port_name, True)
|
|
258
287
|
else:
|
|
259
|
-
net_name =
|
|
260
|
-
port_name = "{}_{}_ref".format(
|
|
288
|
+
net_name = negative_terminal_json["net"]
|
|
289
|
+
port_name = "{}_{}_ref".format(ref_designator, net_name)
|
|
261
290
|
pg_name = "pg_{}".format(port_name)
|
|
262
291
|
if pg_name not in self._pedb.siwave.pin_groups:
|
|
263
|
-
_, pg = self._pedb.siwave.create_pin_group_on_net(
|
|
292
|
+
_, pg = self._pedb.siwave.create_pin_group_on_net(ref_designator, net_name, pg_name)
|
|
264
293
|
else:
|
|
265
294
|
pg = self._pedb.siwave.pin_groups[pg_name]
|
|
266
295
|
neg_terminal = pg.get_terminal(port_name, True)
|
|
@@ -275,36 +304,47 @@ class Configuration:
|
|
|
275
304
|
|
|
276
305
|
for src in self.data["sources"]:
|
|
277
306
|
src_type = src["type"]
|
|
278
|
-
refdes = src["reference_designator"]
|
|
279
307
|
name = src["name"]
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
+
|
|
309
|
+
positive_terminal_json = src["positive_terminal"]
|
|
310
|
+
if "pin_group" in positive_terminal_json:
|
|
311
|
+
pin_group = self._pedb.siwave.pin_groups[positive_terminal_json["pin_group"]]
|
|
312
|
+
pos_terminal = pin_group.get_terminal(pin_group.name, True)
|
|
313
|
+
else:
|
|
314
|
+
ref_designator = src["reference_designator"]
|
|
315
|
+
comp_layout = self._components[ref_designator]
|
|
316
|
+
|
|
317
|
+
if "pin" in positive_terminal_json:
|
|
318
|
+
pin_name = positive_terminal_json["pin"]
|
|
319
|
+
src_name = name
|
|
320
|
+
pos_terminal = comp_layout.pins[pin_name].get_terminal(src_name, True)
|
|
321
|
+
elif "net" in positive_terminal_json: # Net
|
|
322
|
+
net_name = positive_terminal_json["net"]
|
|
323
|
+
src_name = "{}_{}".format(ref_designator, net_name)
|
|
324
|
+
pg_name = "pg_{}".format(src_name)
|
|
325
|
+
_, pg = self._pedb.siwave.create_pin_group_on_net(ref_designator, net_name, pg_name)
|
|
326
|
+
pos_terminal = pg.get_terminal(src_name, True)
|
|
327
|
+
|
|
328
|
+
negative_terminal_json = src["negative_terminal"]
|
|
329
|
+
if "pin_group" in negative_terminal_json:
|
|
330
|
+
pin_group = self._pedb.siwave.pin_groups[negative_terminal_json["pin_group"]]
|
|
331
|
+
neg_terminal = pin_group.get_terminal(pin_group.name + "_ref", True)
|
|
332
|
+
else:
|
|
333
|
+
ref_designator = src["reference_designator"]
|
|
334
|
+
comp_layout = self._components[ref_designator]
|
|
335
|
+
if "pin" in negative_terminal_json:
|
|
336
|
+
pin_name = negative_terminal_json["pin"]
|
|
337
|
+
src_name = name + "_ref"
|
|
338
|
+
neg_terminal = comp_layout.pins[pin_name].get_terminal(src_name, True)
|
|
339
|
+
elif "net" in negative_terminal_json:
|
|
340
|
+
net_name = negative_terminal_json["net"]
|
|
341
|
+
src_name = name + "_ref"
|
|
342
|
+
pg_name = "pg_{}".format(src_name)
|
|
343
|
+
if pg_name not in self._pedb.siwave.pin_groups:
|
|
344
|
+
_, pg = self._pedb.siwave.create_pin_group_on_net(ref_designator, net_name, pg_name)
|
|
345
|
+
else: # pragma no cover
|
|
346
|
+
pg = self._pedb.siwave.pin_groups[pg_name]
|
|
347
|
+
neg_terminal = pg.get_terminal(src_name, True)
|
|
308
348
|
|
|
309
349
|
if src_type == "voltage":
|
|
310
350
|
src_obj = self._pedb.create_voltage_source(pos_terminal, neg_terminal)
|
|
@@ -430,6 +470,8 @@ class Configuration:
|
|
|
430
470
|
|
|
431
471
|
for sp in self.data["s_parameters"]:
|
|
432
472
|
fpath = sp["file_path"]
|
|
473
|
+
if not Path(fpath).anchor:
|
|
474
|
+
fpath = str(Path(self._s_parameter_library) / fpath)
|
|
433
475
|
sp_name = sp["name"]
|
|
434
476
|
comp_def_name = sp["component_definition"]
|
|
435
477
|
comp_def = self._pedb.definitions.component[comp_def_name]
|
|
@@ -442,3 +484,55 @@ class Configuration:
|
|
|
442
484
|
for refdes, comp in comp_def.components.items():
|
|
443
485
|
if refdes in sp["components"]:
|
|
444
486
|
comp.use_s_parameter_model(sp_name)
|
|
487
|
+
|
|
488
|
+
@pyedb_function_handler
|
|
489
|
+
def _load_spice_models(self):
|
|
490
|
+
"""Imports SPICE information from json."""
|
|
491
|
+
|
|
492
|
+
for sp in self.data["spice_models"]:
|
|
493
|
+
fpath = sp["file_path"]
|
|
494
|
+
if not Path(fpath).anchor:
|
|
495
|
+
fpath = str(Path(self._spice_model_library) / fpath)
|
|
496
|
+
sp_name = sp["name"]
|
|
497
|
+
sub_circuit_name = sp.get("sub_circuit_name", None)
|
|
498
|
+
comp_def_name = sp["component_definition"]
|
|
499
|
+
comp_def = self._pedb.definitions.component[comp_def_name]
|
|
500
|
+
comps = comp_def.components
|
|
501
|
+
if sp["apply_to_all"]:
|
|
502
|
+
for refdes, comp in comps.items():
|
|
503
|
+
if refdes not in sp["components"]:
|
|
504
|
+
comp.assign_spice_model(fpath, sp_name, sub_circuit_name)
|
|
505
|
+
else:
|
|
506
|
+
for refdes, comp in comps.items():
|
|
507
|
+
if refdes in sp["components"]:
|
|
508
|
+
comp.assign_spice_model(fpath, sp_name, sub_circuit_name)
|
|
509
|
+
|
|
510
|
+
@pyedb_function_handler
|
|
511
|
+
def _load_pin_groups(self):
|
|
512
|
+
"""Imports pin groups information from JSON."""
|
|
513
|
+
for pg in self.data["pin_groups"]:
|
|
514
|
+
name = pg["name"]
|
|
515
|
+
ref_designator = pg["reference_designator"]
|
|
516
|
+
if "pins" in pg:
|
|
517
|
+
self._pedb.siwave.create_pin_group(ref_designator, pg["pins"], name)
|
|
518
|
+
elif "net" in pg:
|
|
519
|
+
self._pedb.siwave.create_pin_group_on_net(ref_designator, pg["net"], name)
|
|
520
|
+
|
|
521
|
+
@pyedb_function_handler
|
|
522
|
+
def _load_nets(self):
|
|
523
|
+
"""Imports nets information from JSON."""
|
|
524
|
+
nets = self._pedb.nets.nets
|
|
525
|
+
for i in self.data["nets"]["power_ground_nets"]:
|
|
526
|
+
nets[i].is_power_ground = True
|
|
527
|
+
|
|
528
|
+
for i in self.data["nets"]["signal_nets"]:
|
|
529
|
+
nets[i].is_power_ground = False
|
|
530
|
+
|
|
531
|
+
@pyedb_function_handler
|
|
532
|
+
def _load_general(self):
|
|
533
|
+
"""Imports general information from JSON."""
|
|
534
|
+
general = self.data["general"]
|
|
535
|
+
if "s_parameter_library" in general:
|
|
536
|
+
self._s_parameter_library = general["s_parameter_library"]
|
|
537
|
+
if "spice_model_library" in general:
|
|
538
|
+
self._spice_model_library = general["spice_model_library"]
|
|
@@ -24,7 +24,7 @@ import logging
|
|
|
24
24
|
import re
|
|
25
25
|
import warnings
|
|
26
26
|
|
|
27
|
-
from pyedb.dotnet.edb_core.cell.hierarchy.model import PinPairModel
|
|
27
|
+
from pyedb.dotnet.edb_core.cell.hierarchy.model import PinPairModel, SPICEModel
|
|
28
28
|
from pyedb.dotnet.edb_core.definition.package_def import PackageDef
|
|
29
29
|
from pyedb.dotnet.edb_core.edb_data.padstacks_data import EDBPadstackInstance
|
|
30
30
|
from pyedb.generic.general_methods import is_ironpython
|
|
@@ -222,6 +222,8 @@ class EDBComponent(object):
|
|
|
222
222
|
model_type = edb_object.ToString().split(".")[-1]
|
|
223
223
|
if model_type == "PinPairModel":
|
|
224
224
|
return PinPairModel(self._pedb, edb_object)
|
|
225
|
+
elif model_type == "SPICEModel":
|
|
226
|
+
return SPICEModel(self._pedb, edb_object)
|
|
225
227
|
|
|
226
228
|
@model.setter
|
|
227
229
|
def model(self, value):
|
|
@@ -912,7 +914,7 @@ class EDBComponent(object):
|
|
|
912
914
|
return True
|
|
913
915
|
|
|
914
916
|
@pyedb_function_handler()
|
|
915
|
-
def assign_spice_model(self, file_path, name=None):
|
|
917
|
+
def assign_spice_model(self, file_path, name=None, sub_circuit_name=None):
|
|
916
918
|
"""Assign Spice model to this component.
|
|
917
919
|
|
|
918
920
|
Parameters
|
|
@@ -940,6 +942,8 @@ class EDBComponent(object):
|
|
|
940
942
|
model = self._edb.cell.hierarchy._hierarchy.SPICEModel()
|
|
941
943
|
model.SetModelPath(file_path)
|
|
942
944
|
model.SetModelName(name)
|
|
945
|
+
if sub_circuit_name:
|
|
946
|
+
model.SetSubCkt(sub_circuit_name)
|
|
943
947
|
terminal = 1
|
|
944
948
|
for pn in pinNames:
|
|
945
949
|
model.AddTerminalPinPair(pn, str(terminal))
|
|
@@ -144,6 +144,11 @@ class EDBPadProperties(object):
|
|
|
144
144
|
"""
|
|
145
145
|
return [i.tofloat for i in self.parameters.values()]
|
|
146
146
|
|
|
147
|
+
@property
|
|
148
|
+
def parameters_values_string(self):
|
|
149
|
+
"""Parameters value in string format."""
|
|
150
|
+
return [i.tostring for i in self.parameters.values()]
|
|
151
|
+
|
|
147
152
|
@property
|
|
148
153
|
def polygon_data(self):
|
|
149
154
|
"""Parameters.
|
|
@@ -499,6 +504,21 @@ class EDBPadstack(object):
|
|
|
499
504
|
self._hole_parameters = self.hole_params[2]
|
|
500
505
|
return self._hole_parameters
|
|
501
506
|
|
|
507
|
+
@property
|
|
508
|
+
def hole_diameter(self):
|
|
509
|
+
"""Hole diameter."""
|
|
510
|
+
return list(self.hole_params[2])[0].ToDouble()
|
|
511
|
+
|
|
512
|
+
@hole_diameter.setter
|
|
513
|
+
def hole_diameter(self, value):
|
|
514
|
+
params = convert_py_list_to_net_list([self._get_edb_value(value)])
|
|
515
|
+
self._update_hole_parameters(params=params)
|
|
516
|
+
|
|
517
|
+
@property
|
|
518
|
+
def hole_diameter_string(self):
|
|
519
|
+
"""Hole diameter in string format."""
|
|
520
|
+
return list(self.hole_params[2])[0].ToString()
|
|
521
|
+
|
|
502
522
|
@pyedb_function_handler()
|
|
503
523
|
def _update_hole_parameters(self, hole_type=None, params=None, offsetx=None, offsety=None, rotation=None):
|
|
504
524
|
"""Update hole parameters.
|
|
@@ -1165,7 +1165,7 @@ class EdbHfss(object):
|
|
|
1165
1165
|
if not ref_prim:
|
|
1166
1166
|
self._logger.error("Failed to collect valid reference primitives for terminal")
|
|
1167
1167
|
if ref_prim:
|
|
1168
|
-
reference_layer = ref_prim[0].layer
|
|
1168
|
+
reference_layer = ref_prim[0].layer._edb_layer
|
|
1169
1169
|
if term.SetReferenceLayer(reference_layer): # pragma no cover
|
|
1170
1170
|
self._logger.info("Port {} created".format(port_name))
|
|
1171
1171
|
return terminal_info
|
|
@@ -1126,7 +1126,7 @@ class EdbLayout(object):
|
|
|
1126
1126
|
return True
|
|
1127
1127
|
|
|
1128
1128
|
@pyedb_function_handler()
|
|
1129
|
-
def unite_polygons_on_layer(self, layer_name=None, delete_padstack_gemometries=False,
|
|
1129
|
+
def unite_polygons_on_layer(self, layer_name=None, delete_padstack_gemometries=False, net_names_list=[]):
|
|
1130
1130
|
"""Try to unite all Polygons on specified layer.
|
|
1131
1131
|
|
|
1132
1132
|
Parameters
|
|
@@ -1135,8 +1135,8 @@ class EdbLayout(object):
|
|
|
1135
1135
|
Name of layer name to unite objects on. The default is ``None``, in which case all layers are taken.
|
|
1136
1136
|
delete_padstack_gemometries : bool, optional
|
|
1137
1137
|
Whether to delete all padstack geometries. The default is ``False``.
|
|
1138
|
-
|
|
1139
|
-
Net list filter. The default is ``[]``, in which case all nets are taken.
|
|
1138
|
+
net_names_list : list[str] : optional
|
|
1139
|
+
Net names list filter. The default is ``[]``, in which case all nets are taken.
|
|
1140
1140
|
|
|
1141
1141
|
Returns
|
|
1142
1142
|
-------
|
|
@@ -1151,6 +1151,9 @@ class EdbLayout(object):
|
|
|
1151
1151
|
for lay in layer_name:
|
|
1152
1152
|
self._logger.info("Uniting Objects on layer %s.", lay)
|
|
1153
1153
|
poly_by_nets = {}
|
|
1154
|
+
all_voids = []
|
|
1155
|
+
list_polygon_data = []
|
|
1156
|
+
delete_list = []
|
|
1154
1157
|
if lay in list(self.polygons_by_layer.keys()):
|
|
1155
1158
|
for poly in self.polygons_by_layer[lay]:
|
|
1156
1159
|
if not poly.GetNet().GetName() in list(poly_by_nets.keys()):
|
|
@@ -1160,34 +1163,35 @@ class EdbLayout(object):
|
|
|
1160
1163
|
if poly.GetNet().GetName():
|
|
1161
1164
|
poly_by_nets[poly.GetNet().GetName()].append(poly)
|
|
1162
1165
|
for net in poly_by_nets:
|
|
1163
|
-
if net in
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1166
|
+
if net in net_names_list or not net_names_list:
|
|
1167
|
+
for i in poly_by_nets[net]:
|
|
1168
|
+
list_polygon_data.append(i.GetPolygonData())
|
|
1169
|
+
delete_list.append(i)
|
|
1170
|
+
all_voids.append(i.Voids)
|
|
1171
|
+
a = self._edb.geometry.polygon_data.unite(convert_py_list_to_net_list(list_polygon_data))
|
|
1172
|
+
for item in a:
|
|
1173
|
+
for v in all_voids:
|
|
1174
|
+
for void in v:
|
|
1175
|
+
if int(item.GetIntersectionType(void.GetPolygonData())) == 2:
|
|
1176
|
+
item.AddHole(void.GetPolygonData())
|
|
1177
|
+
poly = self._edb.cell.primitive.polygon.create(
|
|
1178
|
+
self._active_layout,
|
|
1179
|
+
lay,
|
|
1180
|
+
self._pedb.nets.nets[net],
|
|
1181
|
+
item,
|
|
1182
|
+
)
|
|
1183
|
+
for v in all_voids:
|
|
1184
|
+
for void in v:
|
|
1185
|
+
for poly in poly_by_nets[net]: # pragma no cover
|
|
1186
|
+
if int(void.GetPolygonData().GetIntersectionType(poly.GetPolygonData())) >= 2:
|
|
1187
|
+
try:
|
|
1188
|
+
id = delete_list.index(poly)
|
|
1189
|
+
except ValueError:
|
|
1190
|
+
id = -1
|
|
1191
|
+
if id >= 0:
|
|
1192
|
+
delete_list.pop(id)
|
|
1193
|
+
for poly in delete_list:
|
|
1194
|
+
poly.Delete()
|
|
1191
1195
|
|
|
1192
1196
|
if delete_padstack_gemometries:
|
|
1193
1197
|
self._logger.info("Deleting Padstack Definitions")
|
|
@@ -1218,12 +1218,12 @@ class EdbNets(object):
|
|
|
1218
1218
|
)
|
|
1219
1219
|
|
|
1220
1220
|
@pyedb_function_handler()
|
|
1221
|
-
def merge_nets_polygons(self,
|
|
1221
|
+
def merge_nets_polygons(self, net_names_list):
|
|
1222
1222
|
"""Convert paths from net into polygons, evaluate all connected polygons and perform the merge.
|
|
1223
1223
|
|
|
1224
1224
|
Parameters
|
|
1225
1225
|
----------
|
|
1226
|
-
|
|
1226
|
+
net_names_list : str or list[str]
|
|
1227
1227
|
Net name of list of net name.
|
|
1228
1228
|
|
|
1229
1229
|
Returns
|
|
@@ -1232,6 +1232,6 @@ class EdbNets(object):
|
|
|
1232
1232
|
``True`` when successful, ``False`` when failed.
|
|
1233
1233
|
|
|
1234
1234
|
"""
|
|
1235
|
-
if isinstance(
|
|
1236
|
-
|
|
1237
|
-
return self._pedb.modeler.unite_polygons_on_layer(
|
|
1235
|
+
if isinstance(net_names_list, str):
|
|
1236
|
+
net_names_list = [net_names_list]
|
|
1237
|
+
return self._pedb.modeler.unite_polygons_on_layer(net_names_list=net_names_list)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/hfss_simulation_setup_data.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyedb-0.6.0 → pyedb-0.7.0}/src/pyedb/dotnet/edb_core/edb_data/siwave_simulation_setup_data.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|