pyedb 0.55.0__py3-none-any.whl → 0.56.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/configuration/cfg_operations.py +2 -2
- pyedb/configuration/cfg_ports_sources.py +1 -1
- pyedb/dotnet/database/Variables.py +26 -19
- pyedb/dotnet/database/components.py +41 -36
- pyedb/dotnet/database/padstack.py +87 -0
- pyedb/dotnet/edb.py +2 -2
- pyedb/extensions/create_cell_array.py +394 -0
- pyedb/generic/data_handlers.py +6 -7
- pyedb/generic/design_types.py +16 -3
- pyedb/generic/filesystem.py +5 -2
- pyedb/generic/general_methods.py +2 -2
- pyedb/generic/settings.py +4 -0
- pyedb/grpc/database/components.py +24 -4
- pyedb/grpc/database/layout/layout.py +74 -1
- pyedb/grpc/database/layout_validation.py +2 -2
- pyedb/grpc/database/modeler.py +15 -12
- pyedb/grpc/database/padstacks.py +87 -0
- pyedb/grpc/database/primitive/polygon.py +2 -2
- pyedb/grpc/database/simulation_setup/siwave_cpa_simulation_setup.py +3 -2
- pyedb/grpc/database/source_excitations.py +10 -1
- pyedb/grpc/database/utility/value.py +1 -0
- pyedb/grpc/edb.py +9 -5
- pyedb/grpc/rpc_session.py +4 -3
- pyedb/modeler/geometry_operators.py +6 -6
- pyedb/siwave.py +4 -6
- pyedb/siwave_core/__init__.py +0 -0
- pyedb/siwave_core/cpa/__init__.py +0 -0
- {pyedb-0.55.0.dist-info → pyedb-0.56.0.dist-info}/METADATA +1 -1
- {pyedb-0.55.0.dist-info → pyedb-0.56.0.dist-info}/RECORD +32 -29
- {pyedb-0.55.0.dist-info → pyedb-0.56.0.dist-info}/WHEEL +0 -0
- {pyedb-0.55.0.dist-info → pyedb-0.56.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"""
|
|
24
24
|
This module contains these classes: `EdbLayout` and `Shape`.
|
|
25
25
|
"""
|
|
26
|
-
from typing import Dict, Union
|
|
26
|
+
from typing import Dict, List, Union
|
|
27
27
|
|
|
28
28
|
from ansys.edb.core.layout.layout import Layout as GrpcLayout
|
|
29
29
|
import ansys.edb.core.primitive.bondwire
|
|
@@ -243,3 +243,76 @@ class Layout(GrpcLayout):
|
|
|
243
243
|
prims = [i for i in prims if i.layer_name in layer_name] if layer_name is not None else prims
|
|
244
244
|
prims = [i for i in prims if i.net_name in net_name] if net_name is not None else prims
|
|
245
245
|
return prims
|
|
246
|
+
|
|
247
|
+
def find_padstack_instances(
|
|
248
|
+
self,
|
|
249
|
+
aedt_name: Union[str, List[str]] = None,
|
|
250
|
+
component_name: Union[str, List[str]] = None,
|
|
251
|
+
component_pin_name: Union[str, List[str]] = None,
|
|
252
|
+
net_name: Union[str, List[str]] = None,
|
|
253
|
+
instance_id: Union[int, List[int]] = None,
|
|
254
|
+
) -> List:
|
|
255
|
+
"""
|
|
256
|
+
Finds padstack instances matching the specified criteria.
|
|
257
|
+
|
|
258
|
+
This method filters the available padstack instances based on specified attributes such as
|
|
259
|
+
`aedt_name`, `component_name`, `component_pin_name`, `net_name`, or `instance_id`. Criteria
|
|
260
|
+
can be passed as individual values or as a list of values. If no padstack instances match
|
|
261
|
+
the criteria, an error is raised.
|
|
262
|
+
|
|
263
|
+
Parameters
|
|
264
|
+
----------
|
|
265
|
+
aedt_name : Union[str, List[str]], optional
|
|
266
|
+
Name(s) of the AEDT padstack instance(s) to filter.
|
|
267
|
+
component_name : Union[str, List[str]], optional
|
|
268
|
+
Name(s) of the component(s) to filter padstack instances by.
|
|
269
|
+
component_pin_name : Union[str, List[str]], optional
|
|
270
|
+
Name(s) of the component pin(s) to filter padstack instances by.
|
|
271
|
+
net_name : Union[str, List[str]], optional
|
|
272
|
+
Name(s) of the net(s) to filter padstack instances by.
|
|
273
|
+
instance_id : Union[int, List[int]], optional
|
|
274
|
+
ID(s) of the padstack instance(s) to filter.
|
|
275
|
+
|
|
276
|
+
Returns
|
|
277
|
+
-------
|
|
278
|
+
List
|
|
279
|
+
A list of padstack instances matching the specified criteria.
|
|
280
|
+
"""
|
|
281
|
+
padstacks = self.padstack_instances
|
|
282
|
+
instances_found = []
|
|
283
|
+
if instance_id is not None:
|
|
284
|
+
instance_ids = instance_id if isinstance(instance_id, list) else [instance_id]
|
|
285
|
+
if instance_id in instance_ids:
|
|
286
|
+
instances_found.append(padstacks[instance_id])
|
|
287
|
+
|
|
288
|
+
if aedt_name is not None:
|
|
289
|
+
name = aedt_name if isinstance(aedt_name, list) else [aedt_name]
|
|
290
|
+
[instances_found.append(i) for i in list(padstacks.values()) if i.aedt_name in name]
|
|
291
|
+
|
|
292
|
+
if component_name is not None:
|
|
293
|
+
value = component_name if isinstance(component_name, list) else [component_name]
|
|
294
|
+
for inst in padstacks.values():
|
|
295
|
+
if inst.component:
|
|
296
|
+
if inst.component.name in value:
|
|
297
|
+
instances_found.append(inst)
|
|
298
|
+
|
|
299
|
+
if net_name is not None:
|
|
300
|
+
value = net_name if isinstance(net_name, list) else [net_name]
|
|
301
|
+
for inst in padstacks.values():
|
|
302
|
+
if inst.net:
|
|
303
|
+
if inst.net.name in value:
|
|
304
|
+
instances_found.append(inst)
|
|
305
|
+
|
|
306
|
+
if component_pin_name is not None:
|
|
307
|
+
value = component_pin_name if isinstance(component_name, list) else [component_pin_name]
|
|
308
|
+
for inst in padstacks.values():
|
|
309
|
+
if inst.component:
|
|
310
|
+
if hasattr(inst, "name"):
|
|
311
|
+
if inst.name in value:
|
|
312
|
+
instances_found.append(inst)
|
|
313
|
+
if not instances_found: # pragma: no cover
|
|
314
|
+
raise ValueError(
|
|
315
|
+
f"Failed to find padstack instances with aedt_name={aedt_name}, component_name={component_name}, "
|
|
316
|
+
f"net_name={net_name}, component_pin_name={component_pin_name}"
|
|
317
|
+
)
|
|
318
|
+
return instances_found
|
|
@@ -354,7 +354,7 @@ class LayoutValidation:
|
|
|
354
354
|
temp = []
|
|
355
355
|
for k, v in inductors.items():
|
|
356
356
|
model = v.component_property.model
|
|
357
|
-
if not len(model.pin_pairs): # pragma: no cover
|
|
357
|
+
if not len(model.pin_pairs()): # pragma: no cover
|
|
358
358
|
temp.append(k)
|
|
359
359
|
if fix:
|
|
360
360
|
v.rlc_values = [0, 1, 0]
|
|
@@ -373,7 +373,7 @@ class LayoutValidation:
|
|
|
373
373
|
>>> # Automatically assign names to unnamed padstacks
|
|
374
374
|
>>> edb.layout_validation.padstacks_no_name(fix=True)
|
|
375
375
|
"""
|
|
376
|
-
pds = self._pedb.layout.padstack_instances
|
|
376
|
+
pds = list(self._pedb.layout.padstack_instances.values())
|
|
377
377
|
counts = 0
|
|
378
378
|
via_count = 1
|
|
379
379
|
for obj in pds:
|
pyedb/grpc/database/modeler.py
CHANGED
|
@@ -603,17 +603,20 @@ class Modeler(object):
|
|
|
603
603
|
else:
|
|
604
604
|
corner_style = GrpcPathCornerType.MITER
|
|
605
605
|
_points = []
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
coord
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
606
|
+
if isinstance(points, list):
|
|
607
|
+
for pt in points:
|
|
608
|
+
_pt = []
|
|
609
|
+
for coord in pt:
|
|
610
|
+
coord = Value(coord, self._pedb.active_cell)
|
|
611
|
+
_pt.append(coord)
|
|
612
|
+
_points.append(_pt)
|
|
613
|
+
points = _points
|
|
614
|
+
width = Value(width, self._pedb.active_cell)
|
|
615
|
+
polygon_data = GrpcPolygonData(points)
|
|
616
|
+
elif isinstance(points, GrpcPolygonData):
|
|
617
|
+
polygon_data = points
|
|
618
|
+
else:
|
|
619
|
+
raise TypeError("Points must be a list of points or a PolygonData object.")
|
|
617
620
|
path = Path.create(
|
|
618
621
|
layout=self._active_layout,
|
|
619
622
|
layer=layer_name,
|
|
@@ -631,7 +634,7 @@ class Modeler(object):
|
|
|
631
634
|
|
|
632
635
|
def create_trace(
|
|
633
636
|
self,
|
|
634
|
-
path_list: List[List[float]],
|
|
637
|
+
path_list: Union[List[List[float]], GrpcPolygonData],
|
|
635
638
|
layer_name: str,
|
|
636
639
|
width: float = 1,
|
|
637
640
|
net_name: str = "",
|
pyedb/grpc/database/padstacks.py
CHANGED
|
@@ -1853,3 +1853,90 @@ class Padstacks(object):
|
|
|
1853
1853
|
clusters[int(label)].append(padstack_ids[i])
|
|
1854
1854
|
|
|
1855
1855
|
return dict(clusters)
|
|
1856
|
+
|
|
1857
|
+
def reduce_via_by_density(
|
|
1858
|
+
self, padstacks: List[int], cell_size_x: float = 1e-3, cell_size_y: float = 1e-3, delete: bool = False
|
|
1859
|
+
) -> tuple[List[int], List[List[List[float]]]]:
|
|
1860
|
+
"""
|
|
1861
|
+
Reduce the number of vias by density. Keep only one via which is closest to the center of the cell. The cells
|
|
1862
|
+
are automatically populated based on the input vias.
|
|
1863
|
+
|
|
1864
|
+
Parameters
|
|
1865
|
+
----------
|
|
1866
|
+
padstacks: List[int]
|
|
1867
|
+
List of padstack ids to be reduced.
|
|
1868
|
+
|
|
1869
|
+
cell_size_x : float
|
|
1870
|
+
Width of each grid cell (default is 1e-3).
|
|
1871
|
+
|
|
1872
|
+
cell_size_y : float
|
|
1873
|
+
Height of each grid cell (default is 1e-3).
|
|
1874
|
+
|
|
1875
|
+
delete: bool
|
|
1876
|
+
If True, delete vias that are not kept (default is False).
|
|
1877
|
+
|
|
1878
|
+
Returns
|
|
1879
|
+
-------
|
|
1880
|
+
List[int]
|
|
1881
|
+
IDs of vias kept after reduction.
|
|
1882
|
+
|
|
1883
|
+
List[List[float]]
|
|
1884
|
+
coordinates for grid lines (for plotting).
|
|
1885
|
+
|
|
1886
|
+
"""
|
|
1887
|
+
to_keep = set()
|
|
1888
|
+
|
|
1889
|
+
all_instances = self.instances
|
|
1890
|
+
positions = np.array([all_instances[_id].position for _id in padstacks])
|
|
1891
|
+
|
|
1892
|
+
x_coords, y_coords = positions[:, 0], positions[:, 1]
|
|
1893
|
+
x_min, x_max = np.min(x_coords), np.max(x_coords)
|
|
1894
|
+
y_min, y_max = np.min(y_coords), np.max(y_coords)
|
|
1895
|
+
|
|
1896
|
+
padstacks_array = np.array(padstacks)
|
|
1897
|
+
cell_map = {} # {(cell_x, cell_y): [(id1, [x1, y1]), (id2, [x2, y2), ...]}
|
|
1898
|
+
grid = []
|
|
1899
|
+
|
|
1900
|
+
for idx, pos in enumerate(positions):
|
|
1901
|
+
i = int((pos[0] - x_min) // cell_size_x)
|
|
1902
|
+
j = int((pos[1] - y_min) // cell_size_y)
|
|
1903
|
+
cell_key = (i, j)
|
|
1904
|
+
cell_map.setdefault(cell_key, []).append((padstacks_array[idx], pos))
|
|
1905
|
+
|
|
1906
|
+
for (i, j), items in cell_map.items():
|
|
1907
|
+
# cell center
|
|
1908
|
+
cell_x_min = x_min + i * cell_size_x
|
|
1909
|
+
cell_y_min = y_min + j * cell_size_y
|
|
1910
|
+
cell_x_mid = cell_x_min + 0.5 * cell_size_x
|
|
1911
|
+
cell_y_mid = cell_y_min + 0.5 * cell_size_y
|
|
1912
|
+
|
|
1913
|
+
grid.append(
|
|
1914
|
+
[
|
|
1915
|
+
[
|
|
1916
|
+
cell_x_min,
|
|
1917
|
+
cell_x_min + cell_size_x,
|
|
1918
|
+
cell_x_min + cell_size_x,
|
|
1919
|
+
cell_x_min,
|
|
1920
|
+
cell_x_min,
|
|
1921
|
+
],
|
|
1922
|
+
[
|
|
1923
|
+
cell_y_min,
|
|
1924
|
+
cell_y_min,
|
|
1925
|
+
cell_y_min + cell_size_y,
|
|
1926
|
+
cell_y_min + cell_size_y,
|
|
1927
|
+
cell_y_min,
|
|
1928
|
+
],
|
|
1929
|
+
]
|
|
1930
|
+
)
|
|
1931
|
+
|
|
1932
|
+
# Find closest via to cell center
|
|
1933
|
+
distances = [np.linalg.norm(pos - [cell_x_mid, cell_y_mid]) for _, pos in items]
|
|
1934
|
+
closest_idx = np.argmin(distances)
|
|
1935
|
+
to_keep.add(items[closest_idx][0])
|
|
1936
|
+
|
|
1937
|
+
if delete:
|
|
1938
|
+
to_delete = set(padstacks) - to_keep
|
|
1939
|
+
for _id in to_delete:
|
|
1940
|
+
all_instances[_id].delete()
|
|
1941
|
+
|
|
1942
|
+
return list(to_keep), grid
|
|
@@ -271,6 +271,6 @@ class Polygon(GrpcPolygon, Primitive):
|
|
|
271
271
|
return False
|
|
272
272
|
|
|
273
273
|
def add_void(self, polygon):
|
|
274
|
-
if isinstance(polygon, list):
|
|
274
|
+
if isinstance(polygon, list) or isinstance(polygon, GrpcPolygonData):
|
|
275
275
|
polygon = self._pedb.modeler.create_polygon(points=polygon, layer_name=self.layer.name)
|
|
276
|
-
return self._edb_object.add_void(polygon
|
|
276
|
+
return self._edb_object.add_void(polygon)
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from ansys.edb.core.database import ProductIdType as GrpcProductIdType
|
|
2
2
|
from ansys.edb.core.utility.value import Value as GrpcValue
|
|
3
3
|
|
|
4
|
-
import pyedb.siwave_core.cpa.simulation_setup_data_model
|
|
5
4
|
from pyedb.siwave_core.cpa.simulation_setup_data_model import SIwaveCpaSetup, Vrm
|
|
6
5
|
from pyedb.siwave_core.product_properties import SIwaveProperties
|
|
7
6
|
|
|
@@ -190,11 +189,13 @@ class ChannelSetup:
|
|
|
190
189
|
Raises:
|
|
191
190
|
ValueError: If the input is not a list.
|
|
192
191
|
"""
|
|
192
|
+
from pyedb.siwave_core.cpa.simulation_setup_data_model import Vrm
|
|
193
|
+
|
|
193
194
|
if not isinstance(value, list):
|
|
194
195
|
raise ValueError("vrm setter must have list as input.")
|
|
195
196
|
vrm_str = ""
|
|
196
197
|
for vrm in value:
|
|
197
|
-
if isinstance(vrm,
|
|
198
|
+
if isinstance(vrm, Vrm):
|
|
198
199
|
if vrm_str:
|
|
199
200
|
vrm_str += "*"
|
|
200
201
|
vrm_str += vrm.name
|
|
@@ -2799,11 +2799,15 @@ class SourceExcitation:
|
|
|
2799
2799
|
self,
|
|
2800
2800
|
terminal: Union[PadstackInstanceTerminal, EdgeTerminal],
|
|
2801
2801
|
ref_terminal: Union[PadstackInstanceTerminal, EdgeTerminal],
|
|
2802
|
+
magnitude: Union[int, float] = 1,
|
|
2803
|
+
phase: Union[int, float] = 0,
|
|
2802
2804
|
) -> bool:
|
|
2803
2805
|
"""Create a voltage source.
|
|
2804
2806
|
|
|
2805
2807
|
Parameters
|
|
2806
2808
|
----------
|
|
2809
|
+
name : str, optional
|
|
2810
|
+
Voltage source name
|
|
2807
2811
|
terminal : :class:`EdgeTerminal <pyedb.grpc.database.terminals.EdgeTerminal>`,
|
|
2808
2812
|
:class:`PadstackInstanceTerminal <pyedb.grpc.database.terminals.PadstackInstanceTerminal>`,
|
|
2809
2813
|
:class:`PointTerminal <pyedb.grpc.database.terminals.PointTerminal>`,
|
|
@@ -2814,6 +2818,10 @@ class SourceExcitation:
|
|
|
2814
2818
|
:class:`PadstackInstanceTerminal <pyedb.grpc.database.terminals.PointTerminal>`,
|
|
2815
2819
|
:class:`PinGroupTerminal <pyedb.grpc.database.terminals.PinGroupTerminal>`,
|
|
2816
2820
|
Negative terminal of the source.
|
|
2821
|
+
magnitude : int, float, optional
|
|
2822
|
+
Magnitude of the source.
|
|
2823
|
+
phase : int, float, optional
|
|
2824
|
+
Phase of the source
|
|
2817
2825
|
|
|
2818
2826
|
Returns
|
|
2819
2827
|
-------
|
|
@@ -2832,7 +2840,8 @@ class SourceExcitation:
|
|
|
2832
2840
|
|
|
2833
2841
|
ref_term = Terminal(self._pedb, ref_terminal)
|
|
2834
2842
|
ref_term.boundary_type = "voltage_source"
|
|
2835
|
-
|
|
2843
|
+
term.magnitude = self._pedb.value(magnitude)
|
|
2844
|
+
term.phase = self._pedb.value(phase)
|
|
2836
2845
|
term.ref_terminal = ref_terminal
|
|
2837
2846
|
return term
|
|
2838
2847
|
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
# SOFTWARE.
|
|
22
|
+
|
|
22
23
|
import ansys.edb.core.utility.value
|
|
23
24
|
from ansys.edb.core.utility.value import Value as GrpcValue
|
|
24
25
|
|
pyedb/grpc/edb.py
CHANGED
|
@@ -371,6 +371,10 @@ class Edb(EdbInit):
|
|
|
371
371
|
"""Ansys Edb Core module."""
|
|
372
372
|
return ansys.edb.core
|
|
373
373
|
|
|
374
|
+
@property
|
|
375
|
+
def ansys_em_path(self):
|
|
376
|
+
return self.base_path
|
|
377
|
+
|
|
374
378
|
def _check_remove_project_files(self, edbpath: str, remove_existing_aedt: bool) -> None:
|
|
375
379
|
aedt_file = os.path.splitext(edbpath)[0] + ".aedt"
|
|
376
380
|
files = [aedt_file, aedt_file + ".lock"]
|
|
@@ -2490,7 +2494,7 @@ class Edb(EdbInit):
|
|
|
2490
2494
|
>>> # Export to HFSS project:
|
|
2491
2495
|
>>> edb.export_hfss(r"C:/output", net_list=["SignalNet"])
|
|
2492
2496
|
"""
|
|
2493
|
-
siwave_s = SiwaveSolve(self
|
|
2497
|
+
siwave_s = SiwaveSolve(self)
|
|
2494
2498
|
return siwave_s.export_3d_cad("HFSS", path_to_output, net_list, num_cores, aedt_file_name, hidden=hidden)
|
|
2495
2499
|
|
|
2496
2500
|
def export_q3d(
|
|
@@ -2526,7 +2530,7 @@ class Edb(EdbInit):
|
|
|
2526
2530
|
>>> # Export to Q3D project:
|
|
2527
2531
|
>>> edb.export_q3d(r"C:/output")
|
|
2528
2532
|
"""
|
|
2529
|
-
siwave_s = SiwaveSolve(self
|
|
2533
|
+
siwave_s = SiwaveSolve(self)
|
|
2530
2534
|
return siwave_s.export_3d_cad(
|
|
2531
2535
|
"Q3D",
|
|
2532
2536
|
path_to_output,
|
|
@@ -2569,7 +2573,7 @@ class Edb(EdbInit):
|
|
|
2569
2573
|
>>> # Export to Maxwell project:
|
|
2570
2574
|
>>> edb.export_maxwell(r"C:/output")
|
|
2571
2575
|
"""
|
|
2572
|
-
siwave_s = SiwaveSolve(self
|
|
2576
|
+
siwave_s = SiwaveSolve(self)
|
|
2573
2577
|
return siwave_s.export_3d_cad(
|
|
2574
2578
|
"Maxwell",
|
|
2575
2579
|
path_to_output,
|
|
@@ -2592,7 +2596,7 @@ class Edb(EdbInit):
|
|
|
2592
2596
|
>>> # Solve with SIwave:
|
|
2593
2597
|
>>> edb.solve_siwave()
|
|
2594
2598
|
"""
|
|
2595
|
-
process = SiwaveSolve(self
|
|
2599
|
+
process = SiwaveSolve(self)
|
|
2596
2600
|
try:
|
|
2597
2601
|
self.close()
|
|
2598
2602
|
except:
|
|
@@ -2643,7 +2647,7 @@ class Edb(EdbInit):
|
|
|
2643
2647
|
list[str]
|
|
2644
2648
|
Generated report files.
|
|
2645
2649
|
"""
|
|
2646
|
-
process = SiwaveSolve(self
|
|
2650
|
+
process = SiwaveSolve(self)
|
|
2647
2651
|
try:
|
|
2648
2652
|
self.close()
|
|
2649
2653
|
except:
|
pyedb/grpc/rpc_session.py
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
# SOFTWARE.
|
|
22
22
|
|
|
23
23
|
import os
|
|
24
|
-
|
|
24
|
+
import secrets
|
|
25
25
|
import sys
|
|
26
26
|
import time
|
|
27
27
|
|
|
@@ -170,11 +170,12 @@ class RpcSession:
|
|
|
170
170
|
@staticmethod
|
|
171
171
|
def __get_random_free_port():
|
|
172
172
|
""""""
|
|
173
|
-
|
|
173
|
+
secure_random = secrets.SystemRandom()
|
|
174
|
+
port = secure_random.randint(49152, 65535)
|
|
174
175
|
while True:
|
|
175
176
|
used_ports = [conn.laddr[1] for conn in psutil.net_connections()]
|
|
176
177
|
if port in used_ports:
|
|
177
|
-
port = randint(49152, 65535)
|
|
178
|
+
port = secure_random.randint(49152, 65535)
|
|
178
179
|
else:
|
|
179
180
|
break
|
|
180
181
|
return port
|
|
@@ -1456,9 +1456,8 @@ class GeometryOperators(object):
|
|
|
1456
1456
|
cross = GeometryOperators.v_cross(va, vb)
|
|
1457
1457
|
if GeometryOperators.v_norm(cross) < tol:
|
|
1458
1458
|
return math.pi
|
|
1459
|
-
|
|
1460
|
-
"vn must be the normal to the
|
|
1461
|
-
) # pragma: no cover
|
|
1459
|
+
if not GeometryOperators.is_collinear(cross, vn):
|
|
1460
|
+
raise ValueError("vn must be the normal to the plane containing va and vb") # pragma: no cover
|
|
1462
1461
|
|
|
1463
1462
|
vnn = GeometryOperators.normalize_vector(vn)
|
|
1464
1463
|
if right_handed:
|
|
@@ -1672,10 +1671,11 @@ class GeometryOperators(object):
|
|
|
1672
1671
|
float
|
|
1673
1672
|
``True`` if the segment intersect the polygon. ``False`` otherwise.
|
|
1674
1673
|
"""
|
|
1675
|
-
|
|
1676
|
-
|
|
1674
|
+
if len(a) != 2 or len(b) != 2:
|
|
1675
|
+
raise ValueError("Point must be a list in the form [x, y]")
|
|
1677
1676
|
pl = len(polygon[0])
|
|
1678
|
-
|
|
1677
|
+
if len(polygon[1]) != pl:
|
|
1678
|
+
raise ValueError("The two sublists in polygon must have the same length")
|
|
1679
1679
|
|
|
1680
1680
|
a_in = GeometryOperators.is_point_in_polygon(a, polygon)
|
|
1681
1681
|
b_in = GeometryOperators.is_point_in_polygon(b, polygon)
|
pyedb/siwave.py
CHANGED
|
@@ -129,17 +129,15 @@ class Siwave(object): # pragma no cover
|
|
|
129
129
|
self._main.AEDTVersion = self._main.oSiwave.GetVersion()[0:6]
|
|
130
130
|
self._main.oSiwave.RestoreWindow()
|
|
131
131
|
specified_version = self.current_version
|
|
132
|
-
|
|
133
|
-
specified_version
|
|
134
|
-
)
|
|
132
|
+
if specified_version not in self.version_keys:
|
|
133
|
+
raise ValueError("Specified version {} is not known.".format(specified_version))
|
|
135
134
|
version_key = specified_version
|
|
136
135
|
base_path = os.getenv(self._version_ids[specified_version])
|
|
137
136
|
self._main.sDesktopinstallDirectory = base_path
|
|
138
137
|
else:
|
|
139
138
|
if specified_version:
|
|
140
|
-
|
|
141
|
-
specified_version
|
|
142
|
-
)
|
|
139
|
+
if specified_version not in self.version_keys:
|
|
140
|
+
raise ValueError("Specified version {} is not known.".format(specified_version))
|
|
143
141
|
version_key = specified_version
|
|
144
142
|
else:
|
|
145
143
|
version_key = self.current_version
|
|
File without changes
|
|
File without changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
pyedb/__init__.py,sha256=
|
|
1
|
+
pyedb/__init__.py,sha256=oDyw4iwQKc-EmBOQttTARkZ_Gh37Sq52BVcQdWG4C2w,1327
|
|
2
2
|
pyedb/edb_logger.py,sha256=ySZ_cZFJ09s1k3n3ft2q-MjaxH5pUwq18HNdiikTJNM,14497
|
|
3
3
|
pyedb/exceptions.py,sha256=n94xluzUks6BA24vd_L6HkrvoP_H_l6__hQmqzdCyPo,111
|
|
4
|
-
pyedb/siwave.py,sha256=
|
|
4
|
+
pyedb/siwave.py,sha256=4ttgMbOBnnCMtyNmU8SbOxkA7Cf0c_lV9cawEtq6V1k,17736
|
|
5
5
|
pyedb/workflow.py,sha256=Y0ya4FUHwlSmoLP45zjdYLsSpyKduHUSpT9GGK9MGd8,814
|
|
6
6
|
pyedb/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
pyedb/common/nets.py,sha256=a6w_U-dCrWA4l0GUC9mf1nio91BGGOKh3K6cqd4I5vM,17877
|
|
@@ -14,11 +14,11 @@ pyedb/configuration/cfg_data.py,sha256=4NYAMEQM4bvSz6dyqwuF889H_gR2jRq6gBaha7P_V
|
|
|
14
14
|
pyedb/configuration/cfg_general.py,sha256=K8IZemdHYDj-nAI3Y0FA3KydDqTwsmDZXjcT3-mpYOc,2273
|
|
15
15
|
pyedb/configuration/cfg_modeler.py,sha256=St71toCcS_4V5zHkHU7sZ285dIbDjs7JS-FH1Y9Z0Vs,6411
|
|
16
16
|
pyedb/configuration/cfg_nets.py,sha256=ZBs6OWlrUPRM1KFLsPx7_3wXzewQ6czoOzZcySCuvMA,2405
|
|
17
|
-
pyedb/configuration/cfg_operations.py,sha256=
|
|
17
|
+
pyedb/configuration/cfg_operations.py,sha256=2PPa02p_l5Mk0B5dHvl9fiXtarr5SUZFuwxWVapVhGY,2016
|
|
18
18
|
pyedb/configuration/cfg_package_definition.py,sha256=uO1ARgQCm7glVoaSs-sjVlEbI4rGJtfpNXT2vn1pMRQ,5460
|
|
19
19
|
pyedb/configuration/cfg_padstacks.py,sha256=6LjPtjGQPVAJQ2GhWHvA9BxHc9H_rMnO_VswhveLC-s,18551
|
|
20
20
|
pyedb/configuration/cfg_pin_groups.py,sha256=7w1xbzppRTP_RU6TEBAX3AUZvzvTFY4llqHIVIJpp2w,3818
|
|
21
|
-
pyedb/configuration/cfg_ports_sources.py,sha256=
|
|
21
|
+
pyedb/configuration/cfg_ports_sources.py,sha256=aBU2URwY1Wc0qei5r5mgStbtTicNMNuv-CQbx9sQDA4,34395
|
|
22
22
|
pyedb/configuration/cfg_s_parameter_models.py,sha256=jssa4oEktpR0p5-QqkczaToQLowTB16Xj0d3C1Z-pAg,5356
|
|
23
23
|
pyedb/configuration/cfg_setup.py,sha256=tLemymxB5XAPeBowD26v8w95VyMJBIhUVJjnk3ql6c0,9306
|
|
24
24
|
pyedb/configuration/cfg_spice_models.py,sha256=Q_5j2-V6cepSFcnijot8iypTqzanLp7HOz-agmnwKns,2570
|
|
@@ -26,10 +26,10 @@ pyedb/configuration/cfg_stackup.py,sha256=EF7Ni_ejxaI-zru1j9mf80AWC_Q2MklxPYmIlf
|
|
|
26
26
|
pyedb/configuration/configuration.py,sha256=Ert3D4n_IMaoJV0nHC4gkgSzatb6y6fBCnzIUXHOKlM,25910
|
|
27
27
|
pyedb/dotnet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
28
|
pyedb/dotnet/clr_module.py,sha256=RNdHGF5lzx_f68xtdeIRgyrbeKj10JrI0kAp73H4EM4,5490
|
|
29
|
-
pyedb/dotnet/edb.py,sha256=
|
|
30
|
-
pyedb/dotnet/database/Variables.py,sha256=
|
|
29
|
+
pyedb/dotnet/edb.py,sha256=Jh58VStr5XDBHDY9IKvyqqWvmzS6-p8qGrbbaWYDans,192860
|
|
30
|
+
pyedb/dotnet/database/Variables.py,sha256=8_tcbmJNQQemeKdeeU_9gl5Fcg4Hul3NsdrQIwfE7dE,78020
|
|
31
31
|
pyedb/dotnet/database/__init__.py,sha256=nIRLJ8VZLcMAp12zmGsnZ5x2BEEl7q_Kj_KAOXxVjpQ,52
|
|
32
|
-
pyedb/dotnet/database/components.py,sha256=
|
|
32
|
+
pyedb/dotnet/database/components.py,sha256=IurIqI-O_L4YqsT6jvwYrT1erKbneKXPiBGI_LgIU7M,112344
|
|
33
33
|
pyedb/dotnet/database/general.py,sha256=k2Bcr5VV-QUzEZlYorqYCX1ZchHBH7WqUvc8maMxId0,4716
|
|
34
34
|
pyedb/dotnet/database/hfss.py,sha256=k9D6UVXXRTc37ciIWHFr6vXwtFyZgESUhSsfeBtZjaE,69066
|
|
35
35
|
pyedb/dotnet/database/layout_obj_instance.py,sha256=se6eJ2kfQOAZfAwObCBdr0A7CCD3st4aiPPVJR9eQoA,1407
|
|
@@ -38,7 +38,7 @@ pyedb/dotnet/database/materials.py,sha256=ibzEq4fJM6b3Re9olHlllhhI5jdGQlpWa3h1aP
|
|
|
38
38
|
pyedb/dotnet/database/modeler.py,sha256=r9ukkBRix33-3lZ46ZvAJgCCQdJatMNt3hgYLBXrnd8,57353
|
|
39
39
|
pyedb/dotnet/database/net_class.py,sha256=NxRX8feIaJyf3NmRfSzZ08ItDbZOucOyAnTHZh-LkUI,11354
|
|
40
40
|
pyedb/dotnet/database/nets.py,sha256=91wCr1cUXHELcwzBbi3Y5nw9XGVEHU97DJEhFITielQ,25538
|
|
41
|
-
pyedb/dotnet/database/padstack.py,sha256=
|
|
41
|
+
pyedb/dotnet/database/padstack.py,sha256=au42Grt7iF7P8HmhLibUtlo5RVwppkIMv9P_Km9NI8o,78981
|
|
42
42
|
pyedb/dotnet/database/siwave.py,sha256=MDVHPqAzTTfmny13qg6cdJq1W64arNt0ppmlq45Lyug,64770
|
|
43
43
|
pyedb/dotnet/database/stackup.py,sha256=R-SrRZTKIyuVsAwkDTsXGLSkYKCoXHukDhYDBuvPxIc,119826
|
|
44
44
|
pyedb/dotnet/database/cell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -112,33 +112,34 @@ pyedb/dotnet/database/utilities/siwave_cpa_simulation_setup.py,sha256=epqPFxqsmi
|
|
|
112
112
|
pyedb/dotnet/database/utilities/siwave_simulation_setup.py,sha256=ShE-3AtgbINCiryPtnkm83YhpM8I9MirzsqaccgGUAs,14309
|
|
113
113
|
pyedb/dotnet/database/utilities/value.py,sha256=AOafTWhjNF3TbM_r72vi0fxiv_8ldAhF-p9Xqh5L_eI,4821
|
|
114
114
|
pyedb/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
115
|
+
pyedb/extensions/create_cell_array.py,sha256=8RUP4x8DmWZrohdnk3D20tSO7K4G4Pi3qJzzSEBH8lc,14860
|
|
115
116
|
pyedb/extensions/via_design_backend.py,sha256=hpofcNP2s-qw17_FaJeJESxRQoUrjqsdBtGbyJEPQdQ,24481
|
|
116
117
|
pyedb/generic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
117
118
|
pyedb/generic/constants.py,sha256=prWLZH0-SeBIVK6LHZ4SGZFQCofuym2TuQYfdqwhuSQ,28956
|
|
118
|
-
pyedb/generic/data_handlers.py,sha256=
|
|
119
|
-
pyedb/generic/design_types.py,sha256=
|
|
120
|
-
pyedb/generic/filesystem.py,sha256=
|
|
121
|
-
pyedb/generic/general_methods.py,sha256=
|
|
119
|
+
pyedb/generic/data_handlers.py,sha256=ebQXCaelvQlQ_EVyY1FZh7K9Outd92U1X0mSq2yNco4,6876
|
|
120
|
+
pyedb/generic/design_types.py,sha256=DYVaVaJbdZvnFmOhz3QLXDjF4xzsh6X6IFnRwmBbP9Y,11769
|
|
121
|
+
pyedb/generic/filesystem.py,sha256=8ycVoybFTZM2jZQwMt8gVhgeJtI1sI3kDOmofhFzQao,3765
|
|
122
|
+
pyedb/generic/general_methods.py,sha256=uz7sEfwqjgAu-WgBY3lyA7SSTIvKG8O1NULfMWLPU7E,38064
|
|
122
123
|
pyedb/generic/grpc_warnings.py,sha256=YYW5NhypV8AeeRmV7NZ7ej7Z1n-44z2FPGfQQue3D_Q,277
|
|
123
124
|
pyedb/generic/plot.py,sha256=4zCA5lpk-FhPmWR7xi6yecc5lZtRpxJdd3B8FLGXmxE,4705
|
|
124
125
|
pyedb/generic/process.py,sha256=UqogTaWKxFPiJjA0ba8qJVweQZqeA5o0tIHiSZxcZWM,9332
|
|
125
|
-
pyedb/generic/settings.py,sha256=
|
|
126
|
+
pyedb/generic/settings.py,sha256=nTVTEvZJOrMSXpIYmmHKKCiVUvECL_aiHcQ3BSX2HMw,12122
|
|
126
127
|
pyedb/grpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
127
|
-
pyedb/grpc/edb.py,sha256=
|
|
128
|
+
pyedb/grpc/edb.py,sha256=PLByHxrjUouuUEj8C_35GhfX38fbU0HM-nW1XChDklc,150655
|
|
128
129
|
pyedb/grpc/edb_init.py,sha256=TqJcK_C81Hepkd8GvjGQ1V0joJqNM3TlBPl6zCyJrUs,15740
|
|
129
|
-
pyedb/grpc/rpc_session.py,sha256=
|
|
130
|
+
pyedb/grpc/rpc_session.py,sha256=espO-OFMeGi4Gms4DZAhnef7LaSvzpLmRI0kQu3ul4c,7157
|
|
130
131
|
pyedb/grpc/database/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
131
|
-
pyedb/grpc/database/components.py,sha256=
|
|
132
|
+
pyedb/grpc/database/components.py,sha256=CSmftq0MW4zw7lBst27MX56ynCQ9lgv-X56takSPdrQ,82914
|
|
132
133
|
pyedb/grpc/database/control_file.py,sha256=Hu_BOEtSt0KZWbaxvTjwnNhlT4Z6eeynFQnt7eb0swM,63758
|
|
133
134
|
pyedb/grpc/database/definitions.py,sha256=W8-pHfEyNfhpoaA0KeXN_HuJ2Pk2KvybTFvITq6l6ag,4412
|
|
134
135
|
pyedb/grpc/database/general.py,sha256=QBZlMO4Tzec00HcaLVQ8fDTLox-pHjOcH2wpWge2sZw,1633
|
|
135
136
|
pyedb/grpc/database/hfss.py,sha256=GuYxGJjeAdcnQBf7CvRgQNbEbdnNGzwlRpOus9X7Jw0,42799
|
|
136
|
-
pyedb/grpc/database/layout_validation.py,sha256=
|
|
137
|
-
pyedb/grpc/database/modeler.py,sha256=
|
|
137
|
+
pyedb/grpc/database/layout_validation.py,sha256=QnqVLHDz1KOK41grN7g22rX1aoYePW3IYgKuC8BXxG4,15701
|
|
138
|
+
pyedb/grpc/database/modeler.py,sha256=gLEOh4ymTLqa_cFB4ywh6vmZVc2hcBgBSfVczcTsU20,54761
|
|
138
139
|
pyedb/grpc/database/nets.py,sha256=ZRSOtEiiPodT-tBtDEe64zPRlY4ilwyDkJbC7iw_-_U,31130
|
|
139
|
-
pyedb/grpc/database/padstacks.py,sha256=
|
|
140
|
+
pyedb/grpc/database/padstacks.py,sha256=gNmdaezOi8raAWbW6xbbZa265VCGjmMNEbXgSDH41oE,75976
|
|
140
141
|
pyedb/grpc/database/siwave.py,sha256=L3uY95bTpqNV1n5s8McjdImUSXcJxG3DmkQoeoEAlcs,36847
|
|
141
|
-
pyedb/grpc/database/source_excitations.py,sha256=
|
|
142
|
+
pyedb/grpc/database/source_excitations.py,sha256=Cq-uQ1Kqthb46HUfeyp8EtP7AAbi6ViwIiYg7tp7pVo,129378
|
|
142
143
|
pyedb/grpc/database/stackup.py,sha256=GQ6XmxABoRZABJnvf2BxfrrMILYLeySseY_hrP6ZkKI,114598
|
|
143
144
|
pyedb/grpc/database/definition/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
144
145
|
pyedb/grpc/database/definition/component_def.py,sha256=2c5Xz98bdOAdOAX5kat2PY5N9-BiA1T6yw6TsWYRUmg,7579
|
|
@@ -166,7 +167,7 @@ pyedb/grpc/database/layers/layer.py,sha256=bPieGISKPGZ_jY8GOq9L6Ywoqcmv_Sq-cM3AS
|
|
|
166
167
|
pyedb/grpc/database/layers/stackup_layer.py,sha256=Hwceiu-ZZhejgPUKASEOXL8O2HyntQHjy81Y30clpDU,27481
|
|
167
168
|
pyedb/grpc/database/layout/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
168
169
|
pyedb/grpc/database/layout/cell.py,sha256=5qMqEBvIruIE3Ru1JBYMkGlS31uOJShWm3J3OMd8HiQ,1379
|
|
169
|
-
pyedb/grpc/database/layout/layout.py,sha256=
|
|
170
|
+
pyedb/grpc/database/layout/layout.py,sha256=iQ4R5s3rTuLgUVfgFXKApzlnVHjJ_on-hqlreX6tn9A,12904
|
|
170
171
|
pyedb/grpc/database/layout/voltage_regulator.py,sha256=RIqcZlxYTRDdq9CFe3BFiIqKWLnVcyF-kUraTAJ76MA,5183
|
|
171
172
|
pyedb/grpc/database/net/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
172
173
|
pyedb/grpc/database/net/differential_pair.py,sha256=68rP66PlS02e3vHs8t6vdk4Qq5TxjoVJXW_KIM3v7Xg,4716
|
|
@@ -180,7 +181,7 @@ pyedb/grpc/database/primitive/bondwire.py,sha256=NqST7jhIfooRFV8AubY_meh4ZCrO1lr
|
|
|
180
181
|
pyedb/grpc/database/primitive/circle.py,sha256=u8AIRUkAb4GXyyBALL80lzgdQPHBrwH8dkmVKQ-ypWc,2527
|
|
181
182
|
pyedb/grpc/database/primitive/padstack_instance.py,sha256=4rNi2zPenuxP9iyQhmCJ8g9ZJyMaEDFg-ASDza3K2R4,44753
|
|
182
183
|
pyedb/grpc/database/primitive/path.py,sha256=VoDcV2Vn58QvnAJ-YXDPkNau7vFNc8BbDeX8LvMtXvY,12077
|
|
183
|
-
pyedb/grpc/database/primitive/polygon.py,sha256=
|
|
184
|
+
pyedb/grpc/database/primitive/polygon.py,sha256=PPxIYwtAmX0vq1CS_xl374g6jIUEAzy365FPMzcrd2E,9560
|
|
184
185
|
pyedb/grpc/database/primitive/primitive.py,sha256=W-4CcO9EjdQCRxfou2cqEsBWeVGhn5kvOvGmD6MAeLw,25096
|
|
185
186
|
pyedb/grpc/database/primitive/rectangle.py,sha256=JW4N_31TNRDTaQphXd4CWYVnSV4l3wHwSkdJrO-uVI8,5340
|
|
186
187
|
pyedb/grpc/database/simulation_setup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -198,7 +199,7 @@ pyedb/grpc/database/simulation_setup/raptor_x_advanced_settings.py,sha256=mo2zHB
|
|
|
198
199
|
pyedb/grpc/database/simulation_setup/raptor_x_general_settings.py,sha256=Sp-r6W87FjsWZYY1ugqTCGZ-KMXzCZ96FMl1fj3mdrU,1499
|
|
199
200
|
pyedb/grpc/database/simulation_setup/raptor_x_simulation_settings.py,sha256=sgyYyVCm6kzURojfGvr8n7bBSsvKeljrD8mQKSGL_wo,2412
|
|
200
201
|
pyedb/grpc/database/simulation_setup/raptor_x_simulation_setup.py,sha256=31ELFhO6TFB4-tg3rqTsfGkTsozEPq-4gCZucIO061c,4791
|
|
201
|
-
pyedb/grpc/database/simulation_setup/siwave_cpa_simulation_setup.py,sha256=
|
|
202
|
+
pyedb/grpc/database/simulation_setup/siwave_cpa_simulation_setup.py,sha256=UTMYM9NCJQ2FTg8LGlziAGD3Ej-Kizb93CdGQcJ_0Mk,35974
|
|
202
203
|
pyedb/grpc/database/simulation_setup/siwave_dcir_simulation_setup.py,sha256=--LrmRx54PkvgzKEc7HbmVtttir3uOAjJaehilasMaA,1524
|
|
203
204
|
pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py,sha256=8VLOKyM5h-PfzsbSMi6PFGDxlw-ikgJ4UYJ1IEYN99I,6902
|
|
204
205
|
pyedb/grpc/database/simulation_setup/sweep_data.py,sha256=NfoUdUdgRFTw9SqR0UZhxaFA13MLpicDa7JXhgkBsug,1897
|
|
@@ -217,7 +218,7 @@ pyedb/grpc/database/utility/layout_statistics.py,sha256=NFoHEWzGbrkThosROCeZCjBS
|
|
|
217
218
|
pyedb/grpc/database/utility/rlc.py,sha256=H0vzzxYPzr-6CTEDjlAs9fEY5emu4ugseKklfnHWO54,2185
|
|
218
219
|
pyedb/grpc/database/utility/sources.py,sha256=sSU14NaMA9mDBUvwXIx7hNpwmGz4mmwtq92w1urusuk,10448
|
|
219
220
|
pyedb/grpc/database/utility/sweep_data_distribution.py,sha256=ClGfo8MNH2LPWWZ-swsSpvc_yLxI-GVxLBkjn5-WS0U,3760
|
|
220
|
-
pyedb/grpc/database/utility/value.py,sha256=
|
|
221
|
+
pyedb/grpc/database/utility/value.py,sha256=m7gRElH3qGywByTGmm-FgS6ebMGsca5wbiyrapRujTg,4816
|
|
221
222
|
pyedb/grpc/database/utility/xml_control_file.py,sha256=Uyvb1YyzrdFOhAlXjk3Xo32hWngerhGpqBiJXAfDVWo,48231
|
|
222
223
|
pyedb/ipc2581/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
223
224
|
pyedb/ipc2581/history_record.py,sha256=s1GjcIgnZHlNCBOeEERBDX7xDuqhXmh2Ctt3ccFDWso,2739
|
|
@@ -290,11 +291,13 @@ pyedb/misc/siw_feature_config/xtalk_scan/net.py,sha256=iQBB2iIyvymLzJP4MTiyo_HTf
|
|
|
290
291
|
pyedb/misc/siw_feature_config/xtalk_scan/pins.py,sha256=NBZLWFoDLGfBj-zGCcZGHzcuANrlfDu4XSbTeC5F8tU,2237
|
|
291
292
|
pyedb/misc/siw_feature_config/xtalk_scan/scan_config.py,sha256=YmYI6WTQulL5Uf8WxeUI_sfpcVVPnFAjjygUNNhGMdo,3599
|
|
292
293
|
pyedb/misc/siw_feature_config/xtalk_scan/td_xtalk_config.py,sha256=KHa-UqcXuabiVfT2CV-UvWl5Q2qGYHF2Ye9azcAlnXc,3966
|
|
293
|
-
pyedb/modeler/geometry_operators.py,sha256=
|
|
294
|
+
pyedb/modeler/geometry_operators.py,sha256=iEIi0BzhJEiRzV5yVgC2m9Pg_9Sc7ZqVktOpg8C3Tgo,74202
|
|
295
|
+
pyedb/siwave_core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
294
296
|
pyedb/siwave_core/icepak.py,sha256=WnZ-t8mik7LDY06V8hZFV-TxRZJQWK7bu_8Ichx-oBs,5206
|
|
295
297
|
pyedb/siwave_core/product_properties.py,sha256=m7HIMeYKJZqfzWbJklEOKqi3KJHwhj7W0SRbkRCng_c,5660
|
|
298
|
+
pyedb/siwave_core/cpa/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
296
299
|
pyedb/siwave_core/cpa/simulation_setup_data_model.py,sha256=hQsDCvfSDGv3kdDdkTjJYlQqrP1mT4_-_sR0_iQFxi8,5577
|
|
297
|
-
pyedb-0.
|
|
298
|
-
pyedb-0.
|
|
299
|
-
pyedb-0.
|
|
300
|
-
pyedb-0.
|
|
300
|
+
pyedb-0.56.0.dist-info/licenses/LICENSE,sha256=qQWivZ12ETN5l3QxvTARY-QI5eoRRlyHdwLlAj0Bg5I,1089
|
|
301
|
+
pyedb-0.56.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
302
|
+
pyedb-0.56.0.dist-info/METADATA,sha256=12eyDiggUZbey0FCyXT_3qBpOm-BD32gvxFVR5fe_1Y,8698
|
|
303
|
+
pyedb-0.56.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|