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.

Files changed (208) hide show
  1. pyedb/__init__.py +1 -1
  2. pyedb/common/nets.py +53 -139
  3. pyedb/configuration/cfg_common.py +1 -1
  4. pyedb/configuration/cfg_components.py +229 -201
  5. pyedb/configuration/cfg_data.py +3 -1
  6. pyedb/configuration/cfg_general.py +4 -2
  7. pyedb/configuration/cfg_modeler.py +7 -7
  8. pyedb/configuration/cfg_package_definition.py +1 -1
  9. pyedb/configuration/cfg_padstacks.py +346 -290
  10. pyedb/configuration/cfg_ports_sources.py +243 -65
  11. pyedb/configuration/configuration.py +23 -3
  12. pyedb/dotnet/{application → database}/Variables.py +21 -21
  13. pyedb/dotnet/{edb_core → database}/cell/connectable.py +5 -5
  14. pyedb/dotnet/{edb_core → database}/cell/hierarchy/component.py +11 -11
  15. pyedb/dotnet/{edb_core → database}/cell/hierarchy/hierarchy_obj.py +1 -1
  16. pyedb/dotnet/{edb_core → database}/cell/hierarchy/model.py +1 -1
  17. pyedb/dotnet/{edb_core → database}/cell/layout.py +19 -19
  18. pyedb/dotnet/{edb_core → database}/cell/layout_obj.py +3 -3
  19. pyedb/dotnet/{edb_core → database}/cell/primitive/bondwire.py +1 -1
  20. pyedb/dotnet/{edb_core → database}/cell/primitive/path.py +4 -4
  21. pyedb/dotnet/{edb_core → database}/cell/primitive/primitive.py +14 -14
  22. pyedb/dotnet/{edb_core → database}/cell/terminal/bundle_terminal.py +2 -2
  23. pyedb/dotnet/{edb_core → database}/cell/terminal/edge_terminal.py +4 -4
  24. pyedb/dotnet/{edb_core → database}/cell/terminal/padstack_instance_terminal.py +2 -2
  25. pyedb/dotnet/{edb_core → database}/cell/terminal/pingroup_terminal.py +2 -2
  26. pyedb/dotnet/{edb_core → database}/cell/terminal/point_terminal.py +2 -2
  27. pyedb/dotnet/{edb_core → database}/cell/terminal/terminal.py +11 -11
  28. pyedb/dotnet/{edb_core → database}/cell/voltage_regulator.py +2 -2
  29. pyedb/dotnet/{edb_core → database}/components.py +101 -124
  30. pyedb/dotnet/{edb_core → database}/definition/component_def.py +5 -5
  31. pyedb/dotnet/{edb_core → database}/definition/component_model.py +1 -1
  32. pyedb/dotnet/{edb_core → database}/definition/definition_obj.py +1 -1
  33. pyedb/dotnet/{edb_core → database}/definition/definitions.py +2 -2
  34. pyedb/dotnet/{edb_core → database}/definition/package_def.py +4 -4
  35. pyedb/dotnet/{edb_core → database}/dotnet/database.py +8 -8
  36. pyedb/dotnet/{edb_core → database}/dotnet/primitive.py +9 -9
  37. pyedb/dotnet/{edb_core → database}/edb_data/control_file.py +12 -12
  38. pyedb/dotnet/{edb_core → database}/edb_data/hfss_extent_info.py +7 -7
  39. pyedb/dotnet/{edb_core → database}/edb_data/nets_data.py +10 -13
  40. pyedb/dotnet/{edb_core → database}/edb_data/padstacks_data.py +60 -73
  41. pyedb/dotnet/{edb_core → database}/edb_data/ports.py +4 -4
  42. pyedb/dotnet/{edb_core → database}/edb_data/primitives_data.py +5 -5
  43. pyedb/dotnet/{edb_core → database}/edb_data/raptor_x_simulation_setup_data.py +4 -4
  44. pyedb/dotnet/{edb_core → database}/edb_data/simulation_configuration.py +10 -10
  45. pyedb/dotnet/{edb_core → database}/edb_data/sources.py +4 -4
  46. pyedb/dotnet/{edb_core → database}/edb_data/variables.py +1 -1
  47. pyedb/dotnet/{edb_core → database}/geometry/polygon_data.py +4 -4
  48. pyedb/dotnet/{edb_core → database}/hfss.py +8 -8
  49. pyedb/dotnet/{edb_core → database}/layout_obj_instance.py +1 -1
  50. pyedb/dotnet/{edb_core → database}/layout_validation.py +2 -2
  51. pyedb/dotnet/{edb_core → database}/materials.py +23 -8
  52. pyedb/dotnet/{edb_core → database}/modeler.py +27 -27
  53. pyedb/dotnet/{edb_core → database}/net_class.py +8 -8
  54. pyedb/dotnet/{edb_core → database}/nets.py +12 -12
  55. pyedb/dotnet/{edb_core → database}/padstack.py +17 -16
  56. pyedb/dotnet/{edb_core → database}/sim_setup_data/data/mesh_operation.py +1 -1
  57. pyedb/dotnet/{edb_core → database}/sim_setup_data/data/settings.py +18 -3
  58. pyedb/dotnet/{edb_core → database}/sim_setup_data/data/sim_setup_info.py +2 -2
  59. pyedb/dotnet/{edb_core → database}/sim_setup_data/data/simulation_settings.py +1 -1
  60. pyedb/dotnet/{edb_core → database}/sim_setup_data/data/siw_dc_ir_settings.py +1 -1
  61. pyedb/dotnet/{edb_core → database}/sim_setup_data/data/sweep_data.py +4 -4
  62. pyedb/dotnet/{edb_core → database}/siwave.py +10 -10
  63. pyedb/dotnet/{edb_core → database}/stackup.py +12 -12
  64. pyedb/dotnet/{edb_core → database}/utilities/hfss_simulation_setup.py +15 -15
  65. pyedb/dotnet/{edb_core → database}/utilities/obj_base.py +1 -1
  66. pyedb/dotnet/{edb_core → database}/utilities/simulation_setup.py +4 -3
  67. pyedb/dotnet/{edb_core → database}/utilities/siwave_simulation_setup.py +6 -6
  68. pyedb/dotnet/edb.py +118 -113
  69. pyedb/extensions/pre_layout_design_toolkit/via_design.py +1151 -0
  70. pyedb/generic/design_types.py +26 -19
  71. pyedb/generic/general_methods.py +1 -1
  72. pyedb/generic/plot.py +0 -2
  73. pyedb/grpc/database/__init__.py +1 -0
  74. pyedb/grpc/database/components.py +2354 -0
  75. pyedb/grpc/database/control_file.py +1277 -0
  76. pyedb/grpc/database/definition/component_def.py +218 -0
  77. pyedb/grpc/database/definition/component_model.py +39 -0
  78. pyedb/grpc/database/definition/component_pin.py +32 -0
  79. pyedb/grpc/database/definition/materials.py +1207 -0
  80. pyedb/grpc/database/definition/n_port_component_model.py +34 -0
  81. pyedb/grpc/database/definition/package_def.py +227 -0
  82. pyedb/grpc/database/definition/padstack_def.py +842 -0
  83. pyedb/grpc/database/definitions.py +70 -0
  84. pyedb/grpc/database/general.py +43 -0
  85. pyedb/grpc/database/geometry/__init__.py +0 -0
  86. pyedb/grpc/database/geometry/arc_data.py +93 -0
  87. pyedb/grpc/database/geometry/point_3d_data.py +79 -0
  88. pyedb/grpc/database/geometry/point_data.py +30 -0
  89. pyedb/grpc/database/geometry/polygon_data.py +133 -0
  90. pyedb/grpc/database/hfss.py +1279 -0
  91. pyedb/grpc/database/hierarchy/__init__.py +0 -0
  92. pyedb/grpc/database/hierarchy/component.py +1301 -0
  93. pyedb/grpc/database/hierarchy/model.py +31 -0
  94. pyedb/grpc/database/hierarchy/netlist_model.py +30 -0
  95. pyedb/grpc/database/hierarchy/pin_pair_model.py +128 -0
  96. pyedb/grpc/database/hierarchy/pingroup.py +245 -0
  97. pyedb/grpc/database/hierarchy/s_parameter_model.py +33 -0
  98. pyedb/grpc/database/hierarchy/spice_model.py +48 -0
  99. pyedb/grpc/database/layers/__init__.py +0 -0
  100. pyedb/grpc/database/layers/layer.py +57 -0
  101. pyedb/grpc/database/layers/stackup_layer.py +410 -0
  102. pyedb/grpc/database/layout/__init__.py +0 -0
  103. pyedb/grpc/database/layout/cell.py +30 -0
  104. pyedb/grpc/database/layout/layout.py +196 -0
  105. pyedb/grpc/database/layout/voltage_regulator.py +149 -0
  106. pyedb/grpc/database/layout_validation.py +319 -0
  107. pyedb/grpc/database/modeler.py +1468 -0
  108. pyedb/grpc/database/net/__init__.py +0 -0
  109. pyedb/grpc/database/net/differential_pair.py +138 -0
  110. pyedb/grpc/database/net/extended_net.py +340 -0
  111. pyedb/grpc/database/net/net.py +198 -0
  112. pyedb/grpc/database/net/net_class.py +93 -0
  113. pyedb/grpc/database/nets.py +633 -0
  114. pyedb/grpc/database/padstacks.py +1500 -0
  115. pyedb/grpc/database/ports/__init__.py +0 -0
  116. pyedb/grpc/database/ports/ports.py +396 -0
  117. pyedb/grpc/database/primitive/__init__.py +3 -0
  118. pyedb/grpc/database/primitive/bondwire.py +181 -0
  119. pyedb/grpc/database/primitive/circle.py +75 -0
  120. pyedb/grpc/database/primitive/padstack_instance.py +1116 -0
  121. pyedb/grpc/database/primitive/path.py +346 -0
  122. pyedb/grpc/database/primitive/polygon.py +276 -0
  123. pyedb/grpc/database/primitive/primitive.py +739 -0
  124. pyedb/grpc/database/primitive/rectangle.py +146 -0
  125. pyedb/grpc/database/simulation_setup/__init__.py +0 -0
  126. pyedb/grpc/database/simulation_setup/adaptive_frequency.py +33 -0
  127. pyedb/grpc/database/simulation_setup/hfss_advanced_meshing_settings.py +32 -0
  128. pyedb/grpc/database/simulation_setup/hfss_advanced_settings.py +59 -0
  129. pyedb/grpc/database/simulation_setup/hfss_dcr_settings.py +35 -0
  130. pyedb/grpc/database/simulation_setup/hfss_general_settings.py +61 -0
  131. pyedb/grpc/database/simulation_setup/hfss_settings_options.py +78 -0
  132. pyedb/grpc/database/simulation_setup/hfss_simulation_settings.py +118 -0
  133. pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +355 -0
  134. pyedb/grpc/database/simulation_setup/hfss_solver_settings.py +34 -0
  135. pyedb/grpc/database/simulation_setup/mesh_operation.py +34 -0
  136. pyedb/grpc/database/simulation_setup/raptor_x_advanced_settings.py +34 -0
  137. pyedb/grpc/database/simulation_setup/raptor_x_general_settings.py +33 -0
  138. pyedb/grpc/database/simulation_setup/raptor_x_simulation_settings.py +64 -0
  139. pyedb/grpc/database/simulation_setup/raptor_x_simulation_setup.py +125 -0
  140. pyedb/grpc/database/simulation_setup/siwave_dcir_simulation_setup.py +34 -0
  141. pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +119 -0
  142. pyedb/grpc/database/simulation_setup/sweep_data.py +32 -0
  143. pyedb/grpc/database/siwave.py +1023 -0
  144. pyedb/grpc/database/source_excitations.py +2572 -0
  145. pyedb/grpc/database/stackup.py +2574 -0
  146. pyedb/grpc/database/terminal/__init__.py +0 -0
  147. pyedb/grpc/database/terminal/bundle_terminal.py +218 -0
  148. pyedb/grpc/database/terminal/edge_terminal.py +51 -0
  149. pyedb/grpc/database/terminal/padstack_instance_terminal.py +171 -0
  150. pyedb/grpc/database/terminal/pingroup_terminal.py +162 -0
  151. pyedb/grpc/database/terminal/point_terminal.py +99 -0
  152. pyedb/grpc/database/terminal/terminal.py +470 -0
  153. pyedb/grpc/database/utility/__init__.py +3 -0
  154. pyedb/grpc/database/utility/constants.py +25 -0
  155. pyedb/grpc/database/utility/heat_sink.py +124 -0
  156. pyedb/grpc/database/utility/hfss_extent_info.py +448 -0
  157. pyedb/grpc/database/utility/layout_statistics.py +277 -0
  158. pyedb/grpc/database/utility/rlc.py +80 -0
  159. pyedb/grpc/database/utility/simulation_configuration.py +3305 -0
  160. pyedb/grpc/database/utility/sources.py +388 -0
  161. pyedb/grpc/database/utility/sweep_data_distribution.py +83 -0
  162. pyedb/grpc/database/utility/xml_control_file.py +1277 -0
  163. pyedb/grpc/edb.py +4151 -0
  164. pyedb/grpc/edb_init.py +481 -0
  165. pyedb/grpc/rpc_session.py +177 -0
  166. pyedb/ipc2581/ecad/cad_data/assembly_drawing.py +3 -2
  167. pyedb/ipc2581/ecad/cad_data/feature.py +4 -3
  168. pyedb/ipc2581/ecad/cad_data/layer_feature.py +32 -20
  169. pyedb/ipc2581/ecad/cad_data/outline.py +3 -2
  170. pyedb/ipc2581/ecad/cad_data/package.py +4 -3
  171. pyedb/ipc2581/ecad/cad_data/path.py +82 -31
  172. pyedb/ipc2581/ecad/cad_data/polygon.py +122 -60
  173. pyedb/ipc2581/ecad/cad_data/profile.py +13 -12
  174. pyedb/ipc2581/ecad/cad_data/step.py +52 -20
  175. pyedb/ipc2581/ipc2581.py +47 -49
  176. pyedb/modeler/geometry_operators.py +1 -1
  177. {pyedb-0.37.0.dist-info → pyedb-0.39.0.dist-info}/METADATA +9 -6
  178. pyedb-0.39.0.dist-info/RECORD +288 -0
  179. pyedb-0.37.0.dist-info/RECORD +0 -194
  180. /pyedb/dotnet/{edb_core → database}/__init__.py +0 -0
  181. /pyedb/dotnet/{application → database/cell}/__init__.py +0 -0
  182. /pyedb/dotnet/{edb_core/cell → database/cell/hierarchy}/__init__.py +0 -0
  183. /pyedb/dotnet/{edb_core → database}/cell/hierarchy/netlist_model.py +0 -0
  184. /pyedb/dotnet/{edb_core → database}/cell/hierarchy/pin_pair_model.py +0 -0
  185. /pyedb/dotnet/{edb_core → database}/cell/hierarchy/s_parameter_model.py +0 -0
  186. /pyedb/dotnet/{edb_core → database}/cell/hierarchy/spice_model.py +0 -0
  187. /pyedb/dotnet/{edb_core → database}/cell/primitive/__init__.py +0 -0
  188. /pyedb/dotnet/{edb_core/cell/hierarchy → database/cell/terminal}/__init__.py +0 -0
  189. /pyedb/dotnet/{edb_core/cell/terminal → database/definition}/__init__.py +0 -0
  190. /pyedb/dotnet/{edb_core/definition → database/dotnet}/__init__.py +0 -0
  191. /pyedb/dotnet/{edb_core/dotnet → database/edb_data}/__init__.py +0 -0
  192. /pyedb/dotnet/{edb_core → database}/edb_data/design_options.py +0 -0
  193. /pyedb/dotnet/{edb_core → database}/edb_data/edbvalue.py +0 -0
  194. /pyedb/dotnet/{edb_core → database}/edb_data/layer_data.py +0 -0
  195. /pyedb/dotnet/{edb_core → database}/edb_data/utilities.py +0 -0
  196. /pyedb/dotnet/{edb_core → database}/general.py +0 -0
  197. /pyedb/dotnet/{edb_core/edb_data → database/geometry}/__init__.py +0 -0
  198. /pyedb/dotnet/{edb_core → database}/geometry/point_data.py +0 -0
  199. /pyedb/dotnet/{edb_core → database}/sim_setup_data/__init__.py +0 -0
  200. /pyedb/dotnet/{edb_core → database}/sim_setup_data/data/__init__.py +0 -0
  201. /pyedb/dotnet/{edb_core → database}/sim_setup_data/data/adaptive_frequency_data.py +0 -0
  202. /pyedb/dotnet/{edb_core/geometry → database/sim_setup_data/io}/__init__.py +0 -0
  203. /pyedb/dotnet/{edb_core → database}/sim_setup_data/io/siwave.py +0 -0
  204. /pyedb/dotnet/{edb_core → database}/utilities/__init__.py +0 -0
  205. /pyedb/dotnet/{edb_core → database}/utilities/heatsink.py +0 -0
  206. /pyedb/{dotnet/edb_core/sim_setup_data/io → grpc/database/definition}/__init__.py +0 -0
  207. {pyedb-0.37.0.dist-info → pyedb-0.39.0.dist-info}/LICENSE +0 -0
  208. {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
- net_pins = list(net._edb_object.PadstackInstances)
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
- new_pin_ref.pin = pin.GetName()
96
- new_pin_ref.component_ref = pin.GetComponent().GetName()
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
- geometry_type, pad_parameters, pos_x, pos_y, rot = self._pedb.padstacks.get_pad_parameters(
150
- pin._edb_padstackinstance, component.placement_layer, 0
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
- pass
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
- start_layer_name = start_layer.GetName()
197
- stop_layer_name = stop_layer.GetName()
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
- _, start_layer, stop_layer = padstack_instance._edb_padstackinstance.GetLayerRange()
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
- comp_name = padstack_instance._edb_object.GetComponent().GetName()
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
- via_diameter = via.pin.GetPadstackDef().GetData().GetHoleParameters()[2][0]
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
- pass
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 padstackdef.hole_properties:
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.hole_properties[0], self.units
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.parameters_values:
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.parameters_values:
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
- self.design_name = self._pedb.layout.cell.GetName()
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]._edb_layer.GetMaterial()
268
- edb_material = self._pedb.edb_api.definition.MaterialDef.FindByName(self._pedb.active_db, material_name)
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
- permitivity = edb_material.GetProperty(self._pedb.edb_api.definition.MaterialPropertyId.Permittivity)[1]
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 = edb_material.GetProperty(self._pedb.edb_api.definition.MaterialPropertyId.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=self._pedb.stackup.layers[layer_name]._edb_layer.GetMaterial(),
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 isinstance(value, str):
355
- value = float(value)
356
- if isinstance(value, list):
357
- returned_list = []
358
- for val in value:
359
- if isinstance(val, str):
360
- val = float(val)
361
- if units.lower() == "mm":
362
- returned_list.append(round(val * 1000, 4))
363
- if units.lower() == "um":
364
- returned_list.append(round(val * 1e6, 4))
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
- returned_list.append(round(val * 39370.079, 4))
376
+ return round(value * 39370.079, 4)
367
377
  if units.lower() == "inch":
368
- returned_list.append(round(val * 39.370079, 4))
369
- if units.lower() == "cm":
370
- returned_list.append(round(val * 100, 4))
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.application.Variables.VariableManager`, optional
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.37.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-sphinx-theme>=0.10.0,<1.1 ; extra == "doc"
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.10 ; extra == "doc"
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.15 ; extra == "doc"
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.10 ; extra == "full"
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.10 ; extra == "tests"
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"