pyedb 0.37.0__py3-none-any.whl → 0.39.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyedb might be problematic. Click here for more details.
- pyedb/__init__.py +1 -1
- pyedb/common/nets.py +53 -139
- pyedb/configuration/cfg_common.py +1 -1
- pyedb/configuration/cfg_components.py +229 -201
- pyedb/configuration/cfg_data.py +3 -1
- pyedb/configuration/cfg_general.py +4 -2
- pyedb/configuration/cfg_modeler.py +7 -7
- pyedb/configuration/cfg_package_definition.py +1 -1
- pyedb/configuration/cfg_padstacks.py +346 -290
- pyedb/configuration/cfg_ports_sources.py +243 -65
- pyedb/configuration/configuration.py +23 -3
- pyedb/dotnet/{application → database}/Variables.py +21 -21
- pyedb/dotnet/{edb_core → database}/cell/connectable.py +5 -5
- pyedb/dotnet/{edb_core → database}/cell/hierarchy/component.py +11 -11
- pyedb/dotnet/{edb_core → database}/cell/hierarchy/hierarchy_obj.py +1 -1
- pyedb/dotnet/{edb_core → database}/cell/hierarchy/model.py +1 -1
- pyedb/dotnet/{edb_core → database}/cell/layout.py +19 -19
- pyedb/dotnet/{edb_core → database}/cell/layout_obj.py +3 -3
- pyedb/dotnet/{edb_core → database}/cell/primitive/bondwire.py +1 -1
- pyedb/dotnet/{edb_core → database}/cell/primitive/path.py +4 -4
- pyedb/dotnet/{edb_core → database}/cell/primitive/primitive.py +14 -14
- pyedb/dotnet/{edb_core → database}/cell/terminal/bundle_terminal.py +2 -2
- pyedb/dotnet/{edb_core → database}/cell/terminal/edge_terminal.py +4 -4
- pyedb/dotnet/{edb_core → database}/cell/terminal/padstack_instance_terminal.py +2 -2
- pyedb/dotnet/{edb_core → database}/cell/terminal/pingroup_terminal.py +2 -2
- pyedb/dotnet/{edb_core → database}/cell/terminal/point_terminal.py +2 -2
- pyedb/dotnet/{edb_core → database}/cell/terminal/terminal.py +11 -11
- pyedb/dotnet/{edb_core → database}/cell/voltage_regulator.py +2 -2
- pyedb/dotnet/{edb_core → database}/components.py +101 -124
- pyedb/dotnet/{edb_core → database}/definition/component_def.py +5 -5
- pyedb/dotnet/{edb_core → database}/definition/component_model.py +1 -1
- pyedb/dotnet/{edb_core → database}/definition/definition_obj.py +1 -1
- pyedb/dotnet/{edb_core → database}/definition/definitions.py +2 -2
- pyedb/dotnet/{edb_core → database}/definition/package_def.py +4 -4
- pyedb/dotnet/{edb_core → database}/dotnet/database.py +8 -8
- pyedb/dotnet/{edb_core → database}/dotnet/primitive.py +9 -9
- pyedb/dotnet/{edb_core → database}/edb_data/control_file.py +12 -12
- pyedb/dotnet/{edb_core → database}/edb_data/hfss_extent_info.py +7 -7
- pyedb/dotnet/{edb_core → database}/edb_data/nets_data.py +10 -13
- pyedb/dotnet/{edb_core → database}/edb_data/padstacks_data.py +60 -73
- pyedb/dotnet/{edb_core → database}/edb_data/ports.py +4 -4
- pyedb/dotnet/{edb_core → database}/edb_data/primitives_data.py +5 -5
- pyedb/dotnet/{edb_core → database}/edb_data/raptor_x_simulation_setup_data.py +4 -4
- pyedb/dotnet/{edb_core → database}/edb_data/simulation_configuration.py +10 -10
- pyedb/dotnet/{edb_core → database}/edb_data/sources.py +4 -4
- pyedb/dotnet/{edb_core → database}/edb_data/variables.py +1 -1
- pyedb/dotnet/{edb_core → database}/geometry/polygon_data.py +4 -4
- pyedb/dotnet/{edb_core → database}/hfss.py +8 -8
- pyedb/dotnet/{edb_core → database}/layout_obj_instance.py +1 -1
- pyedb/dotnet/{edb_core → database}/layout_validation.py +2 -2
- pyedb/dotnet/{edb_core → database}/materials.py +23 -8
- pyedb/dotnet/{edb_core → database}/modeler.py +27 -27
- pyedb/dotnet/{edb_core → database}/net_class.py +8 -8
- pyedb/dotnet/{edb_core → database}/nets.py +12 -12
- pyedb/dotnet/{edb_core → database}/padstack.py +17 -16
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/mesh_operation.py +1 -1
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/settings.py +18 -3
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/sim_setup_info.py +2 -2
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/simulation_settings.py +1 -1
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/siw_dc_ir_settings.py +1 -1
- pyedb/dotnet/{edb_core → database}/sim_setup_data/data/sweep_data.py +4 -4
- pyedb/dotnet/{edb_core → database}/siwave.py +10 -10
- pyedb/dotnet/{edb_core → database}/stackup.py +12 -12
- pyedb/dotnet/{edb_core → database}/utilities/hfss_simulation_setup.py +15 -15
- pyedb/dotnet/{edb_core → database}/utilities/obj_base.py +1 -1
- pyedb/dotnet/{edb_core → database}/utilities/simulation_setup.py +4 -3
- pyedb/dotnet/{edb_core → database}/utilities/siwave_simulation_setup.py +6 -6
- pyedb/dotnet/edb.py +118 -113
- pyedb/extensions/pre_layout_design_toolkit/via_design.py +1151 -0
- pyedb/generic/design_types.py +26 -19
- pyedb/generic/general_methods.py +1 -1
- pyedb/generic/plot.py +0 -2
- pyedb/grpc/database/__init__.py +1 -0
- pyedb/grpc/database/components.py +2354 -0
- pyedb/grpc/database/control_file.py +1277 -0
- pyedb/grpc/database/definition/component_def.py +218 -0
- pyedb/grpc/database/definition/component_model.py +39 -0
- pyedb/grpc/database/definition/component_pin.py +32 -0
- pyedb/grpc/database/definition/materials.py +1207 -0
- pyedb/grpc/database/definition/n_port_component_model.py +34 -0
- pyedb/grpc/database/definition/package_def.py +227 -0
- pyedb/grpc/database/definition/padstack_def.py +842 -0
- pyedb/grpc/database/definitions.py +70 -0
- pyedb/grpc/database/general.py +43 -0
- pyedb/grpc/database/geometry/__init__.py +0 -0
- pyedb/grpc/database/geometry/arc_data.py +93 -0
- pyedb/grpc/database/geometry/point_3d_data.py +79 -0
- pyedb/grpc/database/geometry/point_data.py +30 -0
- pyedb/grpc/database/geometry/polygon_data.py +133 -0
- pyedb/grpc/database/hfss.py +1279 -0
- pyedb/grpc/database/hierarchy/__init__.py +0 -0
- pyedb/grpc/database/hierarchy/component.py +1301 -0
- pyedb/grpc/database/hierarchy/model.py +31 -0
- pyedb/grpc/database/hierarchy/netlist_model.py +30 -0
- pyedb/grpc/database/hierarchy/pin_pair_model.py +128 -0
- pyedb/grpc/database/hierarchy/pingroup.py +245 -0
- pyedb/grpc/database/hierarchy/s_parameter_model.py +33 -0
- pyedb/grpc/database/hierarchy/spice_model.py +48 -0
- pyedb/grpc/database/layers/__init__.py +0 -0
- pyedb/grpc/database/layers/layer.py +57 -0
- pyedb/grpc/database/layers/stackup_layer.py +410 -0
- pyedb/grpc/database/layout/__init__.py +0 -0
- pyedb/grpc/database/layout/cell.py +30 -0
- pyedb/grpc/database/layout/layout.py +196 -0
- pyedb/grpc/database/layout/voltage_regulator.py +149 -0
- pyedb/grpc/database/layout_validation.py +319 -0
- pyedb/grpc/database/modeler.py +1468 -0
- pyedb/grpc/database/net/__init__.py +0 -0
- pyedb/grpc/database/net/differential_pair.py +138 -0
- pyedb/grpc/database/net/extended_net.py +340 -0
- pyedb/grpc/database/net/net.py +198 -0
- pyedb/grpc/database/net/net_class.py +93 -0
- pyedb/grpc/database/nets.py +633 -0
- pyedb/grpc/database/padstacks.py +1500 -0
- pyedb/grpc/database/ports/__init__.py +0 -0
- pyedb/grpc/database/ports/ports.py +396 -0
- pyedb/grpc/database/primitive/__init__.py +3 -0
- pyedb/grpc/database/primitive/bondwire.py +181 -0
- pyedb/grpc/database/primitive/circle.py +75 -0
- pyedb/grpc/database/primitive/padstack_instance.py +1116 -0
- pyedb/grpc/database/primitive/path.py +346 -0
- pyedb/grpc/database/primitive/polygon.py +276 -0
- pyedb/grpc/database/primitive/primitive.py +739 -0
- pyedb/grpc/database/primitive/rectangle.py +146 -0
- pyedb/grpc/database/simulation_setup/__init__.py +0 -0
- pyedb/grpc/database/simulation_setup/adaptive_frequency.py +33 -0
- pyedb/grpc/database/simulation_setup/hfss_advanced_meshing_settings.py +32 -0
- pyedb/grpc/database/simulation_setup/hfss_advanced_settings.py +59 -0
- pyedb/grpc/database/simulation_setup/hfss_dcr_settings.py +35 -0
- pyedb/grpc/database/simulation_setup/hfss_general_settings.py +61 -0
- pyedb/grpc/database/simulation_setup/hfss_settings_options.py +78 -0
- pyedb/grpc/database/simulation_setup/hfss_simulation_settings.py +118 -0
- pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +355 -0
- pyedb/grpc/database/simulation_setup/hfss_solver_settings.py +34 -0
- pyedb/grpc/database/simulation_setup/mesh_operation.py +34 -0
- pyedb/grpc/database/simulation_setup/raptor_x_advanced_settings.py +34 -0
- pyedb/grpc/database/simulation_setup/raptor_x_general_settings.py +33 -0
- pyedb/grpc/database/simulation_setup/raptor_x_simulation_settings.py +64 -0
- pyedb/grpc/database/simulation_setup/raptor_x_simulation_setup.py +125 -0
- pyedb/grpc/database/simulation_setup/siwave_dcir_simulation_setup.py +34 -0
- pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +119 -0
- pyedb/grpc/database/simulation_setup/sweep_data.py +32 -0
- pyedb/grpc/database/siwave.py +1023 -0
- pyedb/grpc/database/source_excitations.py +2572 -0
- pyedb/grpc/database/stackup.py +2574 -0
- pyedb/grpc/database/terminal/__init__.py +0 -0
- pyedb/grpc/database/terminal/bundle_terminal.py +218 -0
- pyedb/grpc/database/terminal/edge_terminal.py +51 -0
- pyedb/grpc/database/terminal/padstack_instance_terminal.py +171 -0
- pyedb/grpc/database/terminal/pingroup_terminal.py +162 -0
- pyedb/grpc/database/terminal/point_terminal.py +99 -0
- pyedb/grpc/database/terminal/terminal.py +470 -0
- pyedb/grpc/database/utility/__init__.py +3 -0
- pyedb/grpc/database/utility/constants.py +25 -0
- pyedb/grpc/database/utility/heat_sink.py +124 -0
- pyedb/grpc/database/utility/hfss_extent_info.py +448 -0
- pyedb/grpc/database/utility/layout_statistics.py +277 -0
- pyedb/grpc/database/utility/rlc.py +80 -0
- pyedb/grpc/database/utility/simulation_configuration.py +3305 -0
- pyedb/grpc/database/utility/sources.py +388 -0
- pyedb/grpc/database/utility/sweep_data_distribution.py +83 -0
- pyedb/grpc/database/utility/xml_control_file.py +1277 -0
- pyedb/grpc/edb.py +4151 -0
- pyedb/grpc/edb_init.py +481 -0
- pyedb/grpc/rpc_session.py +177 -0
- pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +3 -2
- pyedb/ipc2581/ecad/cad_data/feature.py +4 -3
- pyedb/ipc2581/ecad/cad_data/layer_feature.py +32 -20
- pyedb/ipc2581/ecad/cad_data/outline.py +3 -2
- pyedb/ipc2581/ecad/cad_data/package.py +4 -3
- pyedb/ipc2581/ecad/cad_data/path.py +82 -31
- pyedb/ipc2581/ecad/cad_data/polygon.py +122 -60
- pyedb/ipc2581/ecad/cad_data/profile.py +13 -12
- pyedb/ipc2581/ecad/cad_data/step.py +52 -20
- pyedb/ipc2581/ipc2581.py +47 -49
- pyedb/modeler/geometry_operators.py +1 -1
- {pyedb-0.37.0.dist-info → pyedb-0.39.0.dist-info}/METADATA +9 -6
- pyedb-0.39.0.dist-info/RECORD +288 -0
- pyedb-0.37.0.dist-info/RECORD +0 -194
- /pyedb/dotnet/{edb_core → database}/__init__.py +0 -0
- /pyedb/dotnet/{application → database/cell}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/cell → database/cell/hierarchy}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/hierarchy/netlist_model.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/hierarchy/pin_pair_model.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/hierarchy/s_parameter_model.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/hierarchy/spice_model.py +0 -0
- /pyedb/dotnet/{edb_core → database}/cell/primitive/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/cell/hierarchy → database/cell/terminal}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/cell/terminal → database/definition}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/definition → database/dotnet}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core/dotnet → database/edb_data}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/edb_data/design_options.py +0 -0
- /pyedb/dotnet/{edb_core → database}/edb_data/edbvalue.py +0 -0
- /pyedb/dotnet/{edb_core → database}/edb_data/layer_data.py +0 -0
- /pyedb/dotnet/{edb_core → database}/edb_data/utilities.py +0 -0
- /pyedb/dotnet/{edb_core → database}/general.py +0 -0
- /pyedb/dotnet/{edb_core/edb_data → database/geometry}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/geometry/point_data.py +0 -0
- /pyedb/dotnet/{edb_core → database}/sim_setup_data/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/sim_setup_data/data/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/sim_setup_data/data/adaptive_frequency_data.py +0 -0
- /pyedb/dotnet/{edb_core/geometry → database/sim_setup_data/io}/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/sim_setup_data/io/siwave.py +0 -0
- /pyedb/dotnet/{edb_core → database}/utilities/__init__.py +0 -0
- /pyedb/dotnet/{edb_core → database}/utilities/heatsink.py +0 -0
- /pyedb/{dotnet/edb_core/sim_setup_data/io → grpc/database/definition}/__init__.py +0 -0
- {pyedb-0.37.0.dist-info → pyedb-0.39.0.dist-info}/LICENSE +0 -0
- {pyedb-0.37.0.dist-info → pyedb-0.39.0.dist-info}/WHEEL +0 -0
|
@@ -89,11 +89,21 @@ class Step(object):
|
|
|
89
89
|
net_name = net.name
|
|
90
90
|
logical_net = LogicalNet()
|
|
91
91
|
logical_net.name = net_name
|
|
92
|
-
|
|
92
|
+
if not self._pedb.grpc:
|
|
93
|
+
net_pins = list(net._edb_object.PadstackInstances)
|
|
94
|
+
else:
|
|
95
|
+
net_pins = net.padstack_instances
|
|
93
96
|
for pin in net_pins:
|
|
94
97
|
new_pin_ref = logical_net.get_pin_ref_def()
|
|
95
|
-
|
|
96
|
-
|
|
98
|
+
if not self._pedb.grpc:
|
|
99
|
+
new_pin_ref.pin = pin.GetName()
|
|
100
|
+
new_pin_ref.component_ref = pin.GetComponent().GetName()
|
|
101
|
+
else:
|
|
102
|
+
new_pin_ref.pin = pin.name
|
|
103
|
+
if pin.component:
|
|
104
|
+
new_pin_ref.component_ref = pin.component.name
|
|
105
|
+
else:
|
|
106
|
+
new_pin_ref.component_ref = ""
|
|
97
107
|
logical_net.pin_ref.append(new_pin_ref)
|
|
98
108
|
self.logical_nets.append(logical_net)
|
|
99
109
|
|
|
@@ -139,16 +149,21 @@ class Step(object):
|
|
|
139
149
|
# adding component add package in Step
|
|
140
150
|
if component:
|
|
141
151
|
if not component.part_name in self._packages:
|
|
142
|
-
package = Package(self._ipc)
|
|
152
|
+
package = Package(self._ipc, self._pedb)
|
|
143
153
|
package.add_component_outline(component)
|
|
144
154
|
package.name = component.part_name
|
|
145
155
|
package.height = ""
|
|
146
156
|
package.type = component.type
|
|
147
157
|
pin_number = 0
|
|
148
158
|
for _, pin in component.pins.items():
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
159
|
+
if not self._pedb.grpc:
|
|
160
|
+
geometry_type, pad_parameters, pos_x, pos_y, rot = self._pedb.padstacks.get_pad_parameters(
|
|
161
|
+
pin._edb_padstackinstance, component.placement_layer, 0
|
|
162
|
+
)
|
|
163
|
+
else:
|
|
164
|
+
geometry_type, pad_parameters, pos_x, pos_y, rot = self._pedb.padstacks.get_pad_parameters(
|
|
165
|
+
pin, component.placement_layer, 0
|
|
166
|
+
)
|
|
152
167
|
if pad_parameters:
|
|
153
168
|
position = pin._position if pin._position else pin.position
|
|
154
169
|
pin_pos_x = self._ipc.from_meter_to_units(position[0], self.units)
|
|
@@ -173,9 +188,9 @@ class Step(object):
|
|
|
173
188
|
ipc_component = Component()
|
|
174
189
|
ipc_component.type = component.type
|
|
175
190
|
try:
|
|
176
|
-
ipc_component.value = component.value
|
|
191
|
+
ipc_component.value = str(component.value)
|
|
177
192
|
except:
|
|
178
|
-
|
|
193
|
+
self._pedb.logger.error(f"IPC export, failed loading component {component.refdes} value.")
|
|
179
194
|
ipc_component.refdes = component.refdes
|
|
180
195
|
center = component.center
|
|
181
196
|
ipc_component.location = [
|
|
@@ -193,8 +208,12 @@ class Step(object):
|
|
|
193
208
|
stop_layer,
|
|
194
209
|
): # pragma no cover
|
|
195
210
|
started = False
|
|
196
|
-
|
|
197
|
-
|
|
211
|
+
if not self._pedb.grpc:
|
|
212
|
+
start_layer_name = start_layer.GetName()
|
|
213
|
+
stop_layer_name = stop_layer.GetName()
|
|
214
|
+
else:
|
|
215
|
+
start_layer_name = start_layer.name
|
|
216
|
+
stop_layer_name = stop_layer.name
|
|
198
217
|
layer_list = []
|
|
199
218
|
for layer_name in self._ipc.layers_name:
|
|
200
219
|
if started:
|
|
@@ -215,7 +234,7 @@ class Step(object):
|
|
|
215
234
|
|
|
216
235
|
def add_layer_feature(self, layer, polys): # pragma no cover
|
|
217
236
|
layer_name = layer.name
|
|
218
|
-
layer_feature = LayerFeature(self._ipc)
|
|
237
|
+
layer_feature = LayerFeature(self._ipc, self._pedb)
|
|
219
238
|
layer_feature.layer_name = layer_name
|
|
220
239
|
layer_feature.color = layer.color
|
|
221
240
|
|
|
@@ -225,7 +244,7 @@ class Step(object):
|
|
|
225
244
|
self._ipc.ecad.cad_data.cad_data_step.layer_features.append(layer_feature)
|
|
226
245
|
|
|
227
246
|
def add_profile(self, poly): # pragma no cover
|
|
228
|
-
profile = LayerFeature(self._ipc)
|
|
247
|
+
profile = LayerFeature(self._ipc, self._pedb)
|
|
229
248
|
profile.layer_name = "profile"
|
|
230
249
|
if poly:
|
|
231
250
|
if not poly.is_void:
|
|
@@ -235,14 +254,18 @@ class Step(object):
|
|
|
235
254
|
def add_padstack_instances(self, padstack_instances, padstack_defs): # pragma no cover
|
|
236
255
|
top_bottom_layers = self._ipc.top_bottom_layers
|
|
237
256
|
layers = {j.layer_name: j for j in self._ipc.ecad.cad_data.cad_data_step.layer_features}
|
|
238
|
-
|
|
257
|
+
layer_colors = {i: j.color for i, j in self._ipc._pedb.stackup.layers.items()}
|
|
239
258
|
for padstack_instance in padstack_instances:
|
|
240
|
-
|
|
259
|
+
if not self._pedb.grpc:
|
|
260
|
+
_, start_layer, stop_layer = padstack_instance._edb_padstackinstance.GetLayerRange()
|
|
261
|
+
else:
|
|
262
|
+
start_layer, stop_layer = padstack_instance.get_layer_range()
|
|
241
263
|
for layer_name in self.layer_ranges(start_layer, stop_layer):
|
|
242
264
|
if layer_name not in layers:
|
|
243
265
|
layer_feature = LayerFeature(self._ipc)
|
|
244
266
|
layer_feature.layer_name = layer_name
|
|
245
|
-
layer_feature.color = self._ipc._pedb.stackup[layer_name].color
|
|
267
|
+
# layer_feature.color = self._ipc._pedb.stackup[layer_name].color
|
|
268
|
+
layer_feature.color = layer_colors[layer_name]
|
|
246
269
|
self._ipc.ecad.cad_data.cad_data_step.layer_features.append(layer_feature)
|
|
247
270
|
layers[layer_name] = self._ipc.ecad.cad_data.cad_data_step.layer_features[-1]
|
|
248
271
|
pdef_name = (
|
|
@@ -250,7 +273,13 @@ class Step(object):
|
|
|
250
273
|
)
|
|
251
274
|
if pdef_name in padstack_defs:
|
|
252
275
|
padstack_def = padstack_defs[pdef_name]
|
|
253
|
-
|
|
276
|
+
if not self._pedb.grpc:
|
|
277
|
+
comp_name = padstack_instance._edb_object.GetComponent().GetName()
|
|
278
|
+
else:
|
|
279
|
+
if padstack_instance.component:
|
|
280
|
+
comp_name = padstack_instance.component.name
|
|
281
|
+
else:
|
|
282
|
+
comp_name = ""
|
|
254
283
|
if padstack_instance.is_pin and comp_name:
|
|
255
284
|
component_inst = self._pedb.components.instances[comp_name]
|
|
256
285
|
layers[layer_name].add_component_padstack_instance_feature(
|
|
@@ -261,15 +290,18 @@ class Step(object):
|
|
|
261
290
|
|
|
262
291
|
def add_drill_layer_feature(self, via_list=None, layer_feature_name=""): # pragma no cover
|
|
263
292
|
if via_list:
|
|
264
|
-
drill_layer_feature = LayerFeature(self._ipc)
|
|
293
|
+
drill_layer_feature = LayerFeature(self._ipc, self._pedb.grpc)
|
|
265
294
|
drill_layer_feature.is_drill_feature = True
|
|
266
295
|
drill_layer_feature.layer_name = layer_feature_name
|
|
267
296
|
for via in via_list:
|
|
268
297
|
try:
|
|
269
|
-
|
|
298
|
+
if not self._pedb.grpc:
|
|
299
|
+
via_diameter = via.pin.GetPadstackDef().GetData().GetHoleParameters()[2][0]
|
|
300
|
+
else:
|
|
301
|
+
via_diameter = via.definition.hole_diameter
|
|
270
302
|
drill_layer_feature.add_drill_feature(via, via_diameter)
|
|
271
303
|
except:
|
|
272
|
-
|
|
304
|
+
self._pedb.logger.warning(f"Failed adding ipc drill on via {via.name}")
|
|
273
305
|
self.layer_features.append(drill_layer_feature)
|
|
274
306
|
|
|
275
307
|
def write_xml(self, cad_data): # pragma no cover
|
pyedb/ipc2581/ipc2581.py
CHANGED
|
@@ -73,9 +73,14 @@ class Ipc2581(object):
|
|
|
73
73
|
padstack_def = PadstackDef()
|
|
74
74
|
padstack_def.name = padstack_name
|
|
75
75
|
padstack_def.padstack_hole_def.name = padstack_name
|
|
76
|
-
if
|
|
76
|
+
if not self._pedb.grpc:
|
|
77
|
+
if padstackdef.hole_properties:
|
|
78
|
+
padstack_def.padstack_hole_def.diameter = self.from_meter_to_units(
|
|
79
|
+
padstackdef.hole_properties[0], self.units
|
|
80
|
+
)
|
|
81
|
+
else:
|
|
77
82
|
padstack_def.padstack_hole_def.diameter = self.from_meter_to_units(
|
|
78
|
-
padstackdef.
|
|
83
|
+
padstackdef.hole_diameter, self.units
|
|
79
84
|
)
|
|
80
85
|
for layer, pad in padstackdef.pad_by_layer.items():
|
|
81
86
|
if pad.parameters_values:
|
|
@@ -124,7 +129,7 @@ class Ipc2581(object):
|
|
|
124
129
|
primitive_ref = "Default"
|
|
125
130
|
padstack_def.add_padstack_pad_def(layer=layer, pad_use="REGULAR", primitive_ref=primitive_ref)
|
|
126
131
|
for layer, antipad in padstackdef.antipad_by_layer.items():
|
|
127
|
-
if antipad
|
|
132
|
+
if antipad:
|
|
128
133
|
if antipad.geometry_type == 1:
|
|
129
134
|
primitive_ref = "CIRCLE_{}".format(
|
|
130
135
|
self.from_meter_to_units(antipad.parameters_values[0], self.units)
|
|
@@ -169,7 +174,7 @@ class Ipc2581(object):
|
|
|
169
174
|
primitive_ref = "Default"
|
|
170
175
|
padstack_def.add_padstack_pad_def(layer=layer, pad_use="ANTIPAD", primitive_ref=primitive_ref)
|
|
171
176
|
for layer, thermalpad in padstackdef.thermalpad_by_layer.items():
|
|
172
|
-
if thermalpad
|
|
177
|
+
if thermalpad:
|
|
173
178
|
if thermalpad.geometry_type == 1:
|
|
174
179
|
primitive_ref = "CIRCLE_{}".format(
|
|
175
180
|
self.from_meter_to_units(thermalpad.parameters_values[0], self.units)
|
|
@@ -240,7 +245,10 @@ class Ipc2581(object):
|
|
|
240
245
|
self.bom.bom_items.append(bom_item)
|
|
241
246
|
|
|
242
247
|
def add_layers_info(self):
|
|
243
|
-
|
|
248
|
+
if not self._pedb.grpc:
|
|
249
|
+
self.design_name = self._pedb.layout.cell.GetName()
|
|
250
|
+
else:
|
|
251
|
+
self.design_name = self._pedb.layout.cell.name
|
|
244
252
|
self.ecad.design_name = self.design_name
|
|
245
253
|
self.ecad.cad_header.units = self.units
|
|
246
254
|
self.ecad.cad_data.stackup.total_thickness = self.from_meter_to_units(
|
|
@@ -264,31 +272,20 @@ class Ipc2581(object):
|
|
|
264
272
|
loss_tg = 0
|
|
265
273
|
embedded = "NOT_EMBEDDED"
|
|
266
274
|
# try:
|
|
267
|
-
material_name = self._pedb.stackup.layers[layer_name].
|
|
268
|
-
|
|
275
|
+
material_name = self._pedb.stackup.layers[layer_name].material
|
|
276
|
+
material = self._pedb.materials[material_name]
|
|
269
277
|
material_type = "CONDUCTOR"
|
|
270
278
|
if self._pedb.stackup.layers[layer_name].type == "dielectric":
|
|
271
279
|
layer_type = "DIELPREG"
|
|
272
280
|
material_type = "DIELECTRIC"
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
if not isinstance(permitivity, float):
|
|
276
|
-
permitivity = permitivity.ToDouble()
|
|
277
|
-
loss_tg = edb_material.GetProperty(
|
|
278
|
-
self._pedb.edb_api.definition.MaterialPropertyId.DielectricLossTangent
|
|
279
|
-
)[1]
|
|
280
|
-
if not isinstance(loss_tg, float):
|
|
281
|
-
loss_tg = loss_tg.ToDouble()
|
|
281
|
+
permitivity = material.permittivity
|
|
282
|
+
loss_tg = material.loss_tangent
|
|
282
283
|
conductivity = 0
|
|
283
284
|
if layer_type == "CONDUCTOR":
|
|
284
|
-
conductivity =
|
|
285
|
-
1
|
|
286
|
-
]
|
|
287
|
-
if not isinstance(conductivity, float):
|
|
288
|
-
conductivity = conductivity.ToDouble()
|
|
285
|
+
conductivity = material.conductivity
|
|
289
286
|
self.ecad.cad_header.add_spec(
|
|
290
287
|
name=layer_name,
|
|
291
|
-
material=
|
|
288
|
+
material=material_name,
|
|
292
289
|
layer_type=material_type,
|
|
293
290
|
conductivity=str(conductivity),
|
|
294
291
|
dielectric_constant=str(permitivity),
|
|
@@ -351,35 +348,36 @@ class Ipc2581(object):
|
|
|
351
348
|
self.ecad.cad_data.cad_data_step.add_drill_layer_feature(via_list, "DRILL_1-{}".format(l1))
|
|
352
349
|
|
|
353
350
|
def from_meter_to_units(self, value, units):
|
|
354
|
-
if
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
351
|
+
if value:
|
|
352
|
+
if isinstance(value, str):
|
|
353
|
+
value = float(value)
|
|
354
|
+
if isinstance(value, list):
|
|
355
|
+
returned_list = []
|
|
356
|
+
for val in value:
|
|
357
|
+
if isinstance(val, str):
|
|
358
|
+
val = float(val)
|
|
359
|
+
if units.lower() == "mm":
|
|
360
|
+
returned_list.append(round(val * 1000, 4))
|
|
361
|
+
if units.lower() == "um":
|
|
362
|
+
returned_list.append(round(val * 1e6, 4))
|
|
363
|
+
if units.lower() == "mils":
|
|
364
|
+
returned_list.append(round(val * 39370.079, 4))
|
|
365
|
+
if units.lower() == "inch":
|
|
366
|
+
returned_list.append(round(val * 39.370079, 4))
|
|
367
|
+
if units.lower() == "cm":
|
|
368
|
+
returned_list.append(round(val * 100, 4))
|
|
369
|
+
return returned_list
|
|
370
|
+
else:
|
|
371
|
+
if units.lower() == "millimeter":
|
|
372
|
+
return round(value * 1000, 4)
|
|
373
|
+
if units.lower() == "micrometer":
|
|
374
|
+
return round(value * 1e6, 4)
|
|
365
375
|
if units.lower() == "mils":
|
|
366
|
-
|
|
376
|
+
return round(value * 39370.079, 4)
|
|
367
377
|
if units.lower() == "inch":
|
|
368
|
-
|
|
369
|
-
if units.lower() == "
|
|
370
|
-
|
|
371
|
-
return returned_list
|
|
372
|
-
else:
|
|
373
|
-
if units.lower() == "millimeter":
|
|
374
|
-
return round(value * 1000, 4)
|
|
375
|
-
if units.lower() == "micrometer":
|
|
376
|
-
return round(value * 1e6, 4)
|
|
377
|
-
if units.lower() == "mils":
|
|
378
|
-
return round(value * 39370.079, 4)
|
|
379
|
-
if units.lower() == "inch":
|
|
380
|
-
return round(value * 39.370079, 4)
|
|
381
|
-
if units.lower() == "centimeter":
|
|
382
|
-
return round(value * 100, 4)
|
|
378
|
+
return round(value * 39.370079, 4)
|
|
379
|
+
if units.lower() == "centimeter":
|
|
380
|
+
return round(value * 100, 4)
|
|
383
381
|
|
|
384
382
|
def write_xml(self):
|
|
385
383
|
if self.file_path:
|
|
@@ -48,7 +48,7 @@ class GeometryOperators(object):
|
|
|
48
48
|
String to convert. For example, ``"2mm"``. The default is ``None``.
|
|
49
49
|
scale_to_unit : str, optional
|
|
50
50
|
Units for the value to convert. For example, ``"mm"``.
|
|
51
|
-
variable_manager : :class:`pyedb.dotnet.
|
|
51
|
+
variable_manager : :class:`pyedb.dotnet.database.Variables.VariableManager`, optional
|
|
52
52
|
Try to parse formula and returns numeric value.
|
|
53
53
|
The default is ``None``.
|
|
54
54
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pyedb
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.39.0
|
|
4
4
|
Summary: Higher-Level Pythonic Ansys Electronics Data Base
|
|
5
5
|
Author-email: "ANSYS, Inc." <pyansys.core@ansys.com>
|
|
6
6
|
Maintainer-email: PyEDB developers <simon.vandenbrouck@ansys.com>
|
|
@@ -25,16 +25,19 @@ Requires-Dist: pydantic>=2.6.4,<2.11
|
|
|
25
25
|
Requires-Dist: Rtree >= 1.2.0
|
|
26
26
|
Requires-Dist: toml == 0.10.2
|
|
27
27
|
Requires-Dist: scikit-rf
|
|
28
|
-
Requires-Dist: ansys-
|
|
28
|
+
Requires-Dist: ansys-edb-core
|
|
29
|
+
Requires-Dist: ansys-api-edb
|
|
30
|
+
Requires-Dist: psutil
|
|
31
|
+
Requires-Dist: ansys-sphinx-theme>=0.10.0,<1.4 ; extra == "doc"
|
|
29
32
|
Requires-Dist: imageio>=2.30.0,<2.37 ; extra == "doc"
|
|
30
33
|
Requires-Dist: ipython>=8.13.0,<8.32 ; extra == "doc"
|
|
31
34
|
Requires-Dist: jupyterlab>=4.0.0,<4.4 ; extra == "doc"
|
|
32
35
|
Requires-Dist: jupytext>=1.16.0,<1.17 ; extra == "doc"
|
|
33
|
-
Requires-Dist: matplotlib>=3.5.0,<3.
|
|
36
|
+
Requires-Dist: matplotlib>=3.5.0,<3.11 ; extra == "doc"
|
|
34
37
|
Requires-Dist: nbsphinx>=0.9.0,<0.10 ; extra == "doc"
|
|
35
38
|
Requires-Dist: nbconvert < 7.17 ; extra == "doc"
|
|
36
39
|
Requires-Dist: numpydoc>=1.5.0,<1.9 ; extra == "doc"
|
|
37
|
-
Requires-Dist: pypandoc>=1.10.0,<1.
|
|
40
|
+
Requires-Dist: pypandoc>=1.10.0,<1.16 ; extra == "doc"
|
|
38
41
|
Requires-Dist: recommonmark ; extra == "doc"
|
|
39
42
|
Requires-Dist: Sphinx>=7.1.0,<8.2 ; extra == "doc"
|
|
40
43
|
Requires-Dist: sphinx-autobuild==2021.3.14 ; extra == "doc" and ( python_version == '3.8')
|
|
@@ -43,9 +46,9 @@ Requires-Dist: sphinx-copybutton>=0.5.0,<0.6 ; extra == "doc"
|
|
|
43
46
|
Requires-Dist: sphinx-gallery>=0.14.0,<0.19 ; extra == "doc"
|
|
44
47
|
Requires-Dist: sphinx_design>=0.4.0,<0.7 ; extra == "doc"
|
|
45
48
|
Requires-Dist: shapely ; extra == "doc"
|
|
46
|
-
Requires-Dist: matplotlib>=3.5.0,<3.
|
|
49
|
+
Requires-Dist: matplotlib>=3.5.0,<3.11 ; extra == "full"
|
|
47
50
|
Requires-Dist: shapely ; extra == "full"
|
|
48
|
-
Requires-Dist: matplotlib>=3.5.0,<3.
|
|
51
|
+
Requires-Dist: matplotlib>=3.5.0,<3.11 ; extra == "tests"
|
|
49
52
|
Requires-Dist: mock>=5.1.0,<5.2 ; extra == "tests"
|
|
50
53
|
Requires-Dist: pytest>=7.4.0,<8.4 ; extra == "tests"
|
|
51
54
|
Requires-Dist: pytest-cov>=4.0.0,<6.1 ; extra == "tests"
|