pyedb 0.40.0__py3-none-any.whl → 0.41.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/dotnet/database/edb_data/padstacks_data.py +80 -3
- pyedb/dotnet/edb.py +18 -0
- pyedb/grpc/edb.py +18 -0
- {pyedb-0.40.0.dist-info → pyedb-0.41.0.dist-info}/METADATA +1 -1
- {pyedb-0.40.0.dist-info → pyedb-0.41.0.dist-info}/RECORD +8 -8
- {pyedb-0.40.0.dist-info → pyedb-0.41.0.dist-info}/LICENSE +0 -0
- {pyedb-0.40.0.dist-info → pyedb-0.41.0.dist-info}/WHEEL +0 -0
pyedb/__init__.py
CHANGED
|
@@ -510,7 +510,7 @@ class EDBPadstack(object):
|
|
|
510
510
|
list
|
|
511
511
|
List of layers.
|
|
512
512
|
"""
|
|
513
|
-
return self._padstack_def_data.GetLayerNames()
|
|
513
|
+
return list(self._padstack_def_data.GetLayerNames())
|
|
514
514
|
|
|
515
515
|
@property
|
|
516
516
|
def via_start_layer(self):
|
|
@@ -521,7 +521,7 @@ class EDBPadstack(object):
|
|
|
521
521
|
str
|
|
522
522
|
Name of the starting layer.
|
|
523
523
|
"""
|
|
524
|
-
return
|
|
524
|
+
return self.via_layers[0]
|
|
525
525
|
|
|
526
526
|
@property
|
|
527
527
|
def via_stop_layer(self):
|
|
@@ -532,7 +532,7 @@ class EDBPadstack(object):
|
|
|
532
532
|
str
|
|
533
533
|
Name of the stopping layer.
|
|
534
534
|
"""
|
|
535
|
-
return
|
|
535
|
+
return self.via_layers[-1]
|
|
536
536
|
|
|
537
537
|
@property
|
|
538
538
|
def hole_params(self):
|
|
@@ -2141,3 +2141,80 @@ class EDBPadstackInstance(Primitive):
|
|
|
2141
2141
|
max_limit=max_limit,
|
|
2142
2142
|
component_only=component_only,
|
|
2143
2143
|
)
|
|
2144
|
+
|
|
2145
|
+
def split(self):
|
|
2146
|
+
"""Split padstack instance into multiple instances. The new instances only connect adjacent layers."""
|
|
2147
|
+
pdef_name = self.padstack_definition
|
|
2148
|
+
position = self.position
|
|
2149
|
+
net_name = self.net_name
|
|
2150
|
+
name = self.name
|
|
2151
|
+
stackup_layer_range = list(self._pedb.stackup.signal_layers.keys())
|
|
2152
|
+
start_idx = stackup_layer_range.index(self.start_layer)
|
|
2153
|
+
stop_idx = stackup_layer_range.index(self.stop_layer)
|
|
2154
|
+
for idx, (l1, l2) in enumerate(
|
|
2155
|
+
list(zip(stackup_layer_range[start_idx:stop_idx], stackup_layer_range[start_idx + 1 : stop_idx + 1]))
|
|
2156
|
+
):
|
|
2157
|
+
self._pedb.padstacks.place(position, pdef_name, net_name, f"{name}_{idx}", fromlayer=l1, tolayer=l2)
|
|
2158
|
+
self.delete()
|
|
2159
|
+
|
|
2160
|
+
def convert_hole_to_conical_shape(self, angle=75):
|
|
2161
|
+
"""Convert actual padstack instance to microvias 3D Objects with a given aspect ratio.
|
|
2162
|
+
|
|
2163
|
+
Parameters
|
|
2164
|
+
----------
|
|
2165
|
+
angle : float, optional
|
|
2166
|
+
Angle of laser penetration in degrees. The angle defines the lowest hole diameter with this formula:
|
|
2167
|
+
HoleDiameter -2*tan(laser_angle* Hole depth). Hole depth is the height of the via (dielectric thickness).
|
|
2168
|
+
The default is ``75``.
|
|
2169
|
+
The lowest hole is ``0.75*HoleDepth/HoleDiam``.
|
|
2170
|
+
|
|
2171
|
+
Returns
|
|
2172
|
+
-------
|
|
2173
|
+
"""
|
|
2174
|
+
pos = self.position
|
|
2175
|
+
stackup_layers = self._pedb.stackup.stackup_layers
|
|
2176
|
+
signal_layers = self._pedb.stackup.signal_layers
|
|
2177
|
+
layer_idx = list(signal_layers.keys()).index(self.start_layer)
|
|
2178
|
+
|
|
2179
|
+
_layer_idx = list(stackup_layers.keys()).index(self.start_layer)
|
|
2180
|
+
diel_layer_idx = list(stackup_layers.keys())[_layer_idx + 1]
|
|
2181
|
+
diel_thickness = stackup_layers[diel_layer_idx].thickness
|
|
2182
|
+
|
|
2183
|
+
rad_large = self.definition.hole_diameter / 2
|
|
2184
|
+
rad_small = rad_large - diel_thickness * 1 / math.tan(math.radians(angle))
|
|
2185
|
+
|
|
2186
|
+
if layer_idx + 1 < len(signal_layers) / 2: # upper half of stack
|
|
2187
|
+
rad_u = rad_large
|
|
2188
|
+
rad_l = rad_small
|
|
2189
|
+
else:
|
|
2190
|
+
rad_u = rad_small
|
|
2191
|
+
rad_l = rad_large
|
|
2192
|
+
|
|
2193
|
+
layout = self._pedb.active_layout
|
|
2194
|
+
cloned_circle = self._edb.cell.primitive.circle.create(
|
|
2195
|
+
layout,
|
|
2196
|
+
self.start_layer,
|
|
2197
|
+
self._edb_padstackinstance.GetNet(),
|
|
2198
|
+
self._pedb.edb_value(pos[0]),
|
|
2199
|
+
self._pedb.edb_value(pos[1]),
|
|
2200
|
+
self._pedb.edb_value(rad_u),
|
|
2201
|
+
)
|
|
2202
|
+
cloned_circle2 = self._edb.cell.primitive.circle.create(
|
|
2203
|
+
layout,
|
|
2204
|
+
self.stop_layer,
|
|
2205
|
+
self._edb_padstackinstance.GetNet(),
|
|
2206
|
+
self._pedb.edb_value(pos[0]),
|
|
2207
|
+
self._pedb.edb_value(pos[1]),
|
|
2208
|
+
self._pedb.edb_value(rad_l),
|
|
2209
|
+
)
|
|
2210
|
+
s3d = self._pedb._edb.Cell.Hierarchy.Structure3D.Create(
|
|
2211
|
+
layout, generate_unique_name("via3d_" + self.aedt_name.replace("via_", ""), n=3)
|
|
2212
|
+
)
|
|
2213
|
+
s3d.AddMember(cloned_circle.prim_obj)
|
|
2214
|
+
s3d.AddMember(cloned_circle2.prim_obj)
|
|
2215
|
+
s3d.SetMaterial(self.definition.material)
|
|
2216
|
+
s3d.SetMeshClosureProp(self._pedb._edb.Cell.Hierarchy.Structure3D.TClosure.EndsClosed)
|
|
2217
|
+
|
|
2218
|
+
hole_override_enabled = True
|
|
2219
|
+
hole_override_diam = 0
|
|
2220
|
+
self._edb_object.SetHoleOverride(hole_override_enabled, self._pedb.edb_value(hole_override_diam))
|
pyedb/dotnet/edb.py
CHANGED
|
@@ -46,6 +46,7 @@ from pyedb.dotnet.database.Variables import decompose_variable_value
|
|
|
46
46
|
from pyedb.dotnet.database.cell.layout import Layout
|
|
47
47
|
from pyedb.dotnet.database.cell.terminal.terminal import Terminal
|
|
48
48
|
from pyedb.dotnet.database.components import Components
|
|
49
|
+
import pyedb.dotnet.database.dotnet.database
|
|
49
50
|
from pyedb.dotnet.database.dotnet.database import Database
|
|
50
51
|
from pyedb.dotnet.database.edb_data.control_file import (
|
|
51
52
|
ControlFile,
|
|
@@ -761,6 +762,23 @@ class Edb(Database):
|
|
|
761
762
|
"""Active cell."""
|
|
762
763
|
return self._active_cell
|
|
763
764
|
|
|
765
|
+
@active_cell.setter
|
|
766
|
+
def active_cell(self, value):
|
|
767
|
+
if isinstance(value, str):
|
|
768
|
+
_cell = [cell for cell in self.circuit_cells if cell.GetName() == value]
|
|
769
|
+
if _cell:
|
|
770
|
+
self._active_cell = _cell[0]
|
|
771
|
+
self._init_objects()
|
|
772
|
+
self.logger.info(f"Cell {value} set as active")
|
|
773
|
+
else:
|
|
774
|
+
raise f"Design {value} not found in database."
|
|
775
|
+
elif isinstance(value, pyedb.dotnet.database.dotnet.database.CellClassDotNet):
|
|
776
|
+
self._active_cell = value
|
|
777
|
+
self._init_objects()
|
|
778
|
+
self.logger.info(f"Cell {value.GetName()} set as active")
|
|
779
|
+
else:
|
|
780
|
+
raise "No valid design."
|
|
781
|
+
|
|
764
782
|
@property
|
|
765
783
|
def core_components(self): # pragma: no cover
|
|
766
784
|
"""Edb Components methods and properties.
|
pyedb/grpc/edb.py
CHANGED
|
@@ -39,6 +39,7 @@ import warnings
|
|
|
39
39
|
from zipfile import ZipFile as zpf
|
|
40
40
|
|
|
41
41
|
from ansys.edb.core.geometry.polygon_data import PolygonData as GrpcPolygonData
|
|
42
|
+
import ansys.edb.core.layout.cell
|
|
42
43
|
from ansys.edb.core.simulation_setup.siwave_dcir_simulation_setup import (
|
|
43
44
|
SIWaveDCIRSimulationSetup as GrpcSIWaveDCIRSimulationSetup,
|
|
44
45
|
)
|
|
@@ -801,6 +802,23 @@ class Edb(EdbInit):
|
|
|
801
802
|
"""
|
|
802
803
|
return self._active_cell
|
|
803
804
|
|
|
805
|
+
@active_cell.setter
|
|
806
|
+
def active_cell(self, value):
|
|
807
|
+
if isinstance(value, str):
|
|
808
|
+
_cell = [cell for cell in self.circuit_cells if cell.name == value]
|
|
809
|
+
if _cell:
|
|
810
|
+
self._active_cell = _cell[0]
|
|
811
|
+
self._init_objects()
|
|
812
|
+
self.logger.info(f"Design {value} set as active")
|
|
813
|
+
else:
|
|
814
|
+
raise f"Design {value} not found in database."
|
|
815
|
+
elif isinstance(value, ansys.edb.core.layout.cell.Cell):
|
|
816
|
+
self._active_cell = value
|
|
817
|
+
self._init_objects()
|
|
818
|
+
self.logger.info(f"Design {value.name} set as active")
|
|
819
|
+
else:
|
|
820
|
+
raise "No valid design."
|
|
821
|
+
|
|
804
822
|
@property
|
|
805
823
|
def components(self):
|
|
806
824
|
"""Edb Components methods and properties.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
pyedb/__init__.py,sha256=
|
|
1
|
+
pyedb/__init__.py,sha256=Qc2173U4sGWExvgzT-kHd0vwCC5_K3U7xmq5j8dcwU4,1525
|
|
2
2
|
pyedb/edb_logger.py,sha256=7KXPvAMCKzlzJ5zioiNO5A3zkqbpCHhWHB4aXKfgu5Y,14959
|
|
3
3
|
pyedb/exceptions.py,sha256=n94xluzUks6BA24vd_L6HkrvoP_H_l6__hQmqzdCyPo,111
|
|
4
4
|
pyedb/siwave.py,sha256=Mgg5ZGzOUOtNdlePHcnrgN3rletQ7jrqRi3WfxF58uU,17727
|
|
@@ -26,7 +26,7 @@ pyedb/configuration/cfg_stackup.py,sha256=nrjbjArkV4edkgbmpfm4FBWizM7qlN6DKTiNFR
|
|
|
26
26
|
pyedb/configuration/configuration.py,sha256=c6SViP7I0Ex7cH12ueDow0DPVKXHIvkg3RZX9qSgnFA,16751
|
|
27
27
|
pyedb/dotnet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
28
|
pyedb/dotnet/clr_module.py,sha256=EabqZgZgBZOhJD9_V8Ll8sEKgBFj9xe9zARNYIvYM_s,5304
|
|
29
|
-
pyedb/dotnet/edb.py,sha256=
|
|
29
|
+
pyedb/dotnet/edb.py,sha256=UjdXZQhrhctGAzVKPl7VW-2U1eKThXFI6fN9wh9C1JE,187519
|
|
30
30
|
pyedb/dotnet/database/Variables.py,sha256=CX12X6u-2tbcgjYJU643TVjIJEGB58a2nM4f4wMVTR8,77687
|
|
31
31
|
pyedb/dotnet/database/__init__.py,sha256=nIRLJ8VZLcMAp12zmGsnZ5x2BEEl7q_Kj_KAOXxVjpQ,52
|
|
32
32
|
pyedb/dotnet/database/components.py,sha256=9HldXwn2xV7RPD-C9u_zpHTd6b5SKZkDled-NKrbweo,109471
|
|
@@ -81,7 +81,7 @@ pyedb/dotnet/database/edb_data/edbvalue.py,sha256=Vj_11HXsQUNavizKp5FicORm6cjhXR
|
|
|
81
81
|
pyedb/dotnet/database/edb_data/hfss_extent_info.py,sha256=Ydzle6moatP89kQdjnzyNabsCW0KXE4WYqDv7sFyLb8,13040
|
|
82
82
|
pyedb/dotnet/database/edb_data/layer_data.py,sha256=4Z_eaHSfGfwQBKETEmGSwMvwGzvirtwYw4G4TwonNiA,34314
|
|
83
83
|
pyedb/dotnet/database/edb_data/nets_data.py,sha256=siq2w5CT5D5PeK9tC_vaGM54UOyqnYkcP4kUts459es,10009
|
|
84
|
-
pyedb/dotnet/database/edb_data/padstacks_data.py,sha256=
|
|
84
|
+
pyedb/dotnet/database/edb_data/padstacks_data.py,sha256=cdnJg5uiZIXRyTAMZ0-YVvkH-bOF6HTFvoDJKYx1MPs,81692
|
|
85
85
|
pyedb/dotnet/database/edb_data/ports.py,sha256=ycOETLruRl4wwL372Jftm_rFg2vfluyb_Rv39C5OSKA,7061
|
|
86
86
|
pyedb/dotnet/database/edb_data/primitives_data.py,sha256=gBW7GiaPxDWBUj1wgOIiNHJ3QKM2ZDU0SJh0JWUlFHc,16826
|
|
87
87
|
pyedb/dotnet/database/edb_data/raptor_x_simulation_setup_data.py,sha256=f_09VvuDHeaIuTivSi2OiAEv8aJ52vBasuBoSS9sCQE,20953
|
|
@@ -119,7 +119,7 @@ pyedb/generic/general_methods.py,sha256=Lg4k53Ny9LraiU6AQX5WwBiPFqtvGaZ3Ik7LcWil
|
|
|
119
119
|
pyedb/generic/plot.py,sha256=4zCA5lpk-FhPmWR7xi6yecc5lZtRpxJdd3B8FLGXmxE,4705
|
|
120
120
|
pyedb/generic/process.py,sha256=i0poMbEnFFAsnNOPWN-myMnUaG7hMClKi9kGPMFyvCM,11148
|
|
121
121
|
pyedb/generic/settings.py,sha256=QTX5OVZ8sVPIy_QaSxRODUWvoXkYkVpzh3l6pQPseKQ,9220
|
|
122
|
-
pyedb/grpc/edb.py,sha256=
|
|
122
|
+
pyedb/grpc/edb.py,sha256=pi9uENpgwm5fs1mVBD4iRkSEwujc4VPWKiFYD768UZI,160232
|
|
123
123
|
pyedb/grpc/edb_init.py,sha256=7uhG2VjHvS9N8CU-zDyW8jh_dWe8MWkfyU2k4-B8sX8,14513
|
|
124
124
|
pyedb/grpc/rpc_session.py,sha256=UvxDSXuJFvemFJbQQtbI6nhYI9KBN366fw-jjoWysmE,6979
|
|
125
125
|
pyedb/grpc/database/__init__.py,sha256=nIRLJ8VZLcMAp12zmGsnZ5x2BEEl7q_Kj_KAOXxVjpQ,52
|
|
@@ -282,7 +282,7 @@ pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py,sha256=YmYI6WTQulL5Uf8Wx
|
|
|
282
282
|
pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py,sha256=KHa-UqcXuabiVfT2CV-UvWl5Q2qGYHF2Ye9azcAlnXc,3966
|
|
283
283
|
pyedb/modeler/geometry_operators.py,sha256=YhR-QE0dvIkbp4SsjWp309KDE1OZa6wUzr8a634MuJ4,74195
|
|
284
284
|
pyedb/siwave_core/icepak.py,sha256=WnZ-t8mik7LDY06V8hZFV-TxRZJQWK7bu_8Ichx-oBs,5206
|
|
285
|
-
pyedb-0.
|
|
286
|
-
pyedb-0.
|
|
287
|
-
pyedb-0.
|
|
288
|
-
pyedb-0.
|
|
285
|
+
pyedb-0.41.0.dist-info/LICENSE,sha256=qQWivZ12ETN5l3QxvTARY-QI5eoRRlyHdwLlAj0Bg5I,1089
|
|
286
|
+
pyedb-0.41.0.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
|
|
287
|
+
pyedb-0.41.0.dist-info/METADATA,sha256=IswncXth5JHws3hiVReYJSdvSlC6gyHpyQ2g9KzQn4s,8617
|
|
288
|
+
pyedb-0.41.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|