pyedb 0.42.0__py3-none-any.whl → 0.43.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_boundaries.py +148 -71
- pyedb/configuration/cfg_general.py +30 -14
- pyedb/configuration/cfg_modeler.py +161 -67
- pyedb/configuration/cfg_nets.py +33 -17
- pyedb/configuration/cfg_operations.py +63 -31
- pyedb/configuration/cfg_package_definition.py +72 -51
- pyedb/configuration/cfg_pin_groups.py +75 -33
- pyedb/configuration/cfg_s_parameter_models.py +95 -70
- pyedb/configuration/cfg_setup.py +229 -258
- pyedb/configuration/cfg_stackup.py +122 -90
- pyedb/configuration/configuration.py +342 -209
- pyedb/dotnet/database/edb_data/padstacks_data.py +7 -2
- pyedb/dotnet/database/sim_setup_data/data/sweep_data.py +63 -10
- pyedb/dotnet/database/utilities/simulation_setup.py +7 -13
- pyedb/dotnet/edb.py +75 -105
- {pyedb-0.42.0.dist-info → pyedb-0.43.0.dist-info}/METADATA +1 -1
- {pyedb-0.42.0.dist-info → pyedb-0.43.0.dist-info}/RECORD +20 -20
- {pyedb-0.42.0.dist-info → pyedb-0.43.0.dist-info}/LICENSE +0 -0
- {pyedb-0.42.0.dist-info → pyedb-0.43.0.dist-info}/WHEEL +0 -0
|
@@ -19,7 +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
|
+
import re
|
|
23
23
|
import warnings
|
|
24
24
|
|
|
25
25
|
|
|
@@ -524,23 +524,76 @@ class SweepData(object):
|
|
|
524
524
|
|
|
525
525
|
def add(self, sweep_type, start, stop, increment):
|
|
526
526
|
sweep_type = sweep_type.replace(" ", "_")
|
|
527
|
-
start =
|
|
528
|
-
stop =
|
|
529
|
-
|
|
530
|
-
if sweep_type
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
freqs = list(self._edb_object.SetLogFrequencies(start, stop, increment))
|
|
527
|
+
start = f"{self._pedb.edb_value(start).ToDouble() / 1e9}GHz"
|
|
528
|
+
stop = f"{self._pedb.edb_value(stop).ToDouble() / 1e9}GHz"
|
|
529
|
+
|
|
530
|
+
if sweep_type == "linear_scale":
|
|
531
|
+
increment = f"{self._pedb.edb_value(increment).ToDouble() / 1e9}GHz"
|
|
532
|
+
frequencty_string = f"LIN {start} {stop} {increment}"
|
|
534
533
|
else:
|
|
535
|
-
|
|
536
|
-
|
|
534
|
+
increment = int(increment)
|
|
535
|
+
if sweep_type == "log_scale":
|
|
536
|
+
frequencty_string = f"DEC {start} {stop} {increment}"
|
|
537
|
+
elif sweep_type == "linear_count":
|
|
538
|
+
frequencty_string = f"LINC {start} {stop} {increment}"
|
|
539
|
+
else:
|
|
540
|
+
raise ValueError("sweep_type must be either 'linear_count', 'linear_scale' or 'log_scale")
|
|
541
|
+
temp = self.frequency_string
|
|
542
|
+
temp.append(frequencty_string)
|
|
543
|
+
self.frequency_string = temp
|
|
544
|
+
return self.frequencies
|
|
545
|
+
|
|
546
|
+
@property
|
|
547
|
+
def frequency_string(self):
|
|
548
|
+
"""A string describing the frequency sweep. Below is an example.
|
|
549
|
+
['LIN 0GHz 20GHz 0.05GHz', 'LINC 20GHz 30GHz 10', 'DEC 40GHz 50GHz 10']
|
|
550
|
+
"""
|
|
551
|
+
pattern = r"(?:LIN[C]?|DEC) [^ ]+ [^ ]+ [^ ]+"
|
|
552
|
+
grouped = re.findall(pattern, self._edb_object.FrequencyString)
|
|
553
|
+
return grouped
|
|
554
|
+
|
|
555
|
+
@frequency_string.setter
|
|
556
|
+
def frequency_string(self, value):
|
|
557
|
+
value = value if isinstance(value, list) else [value]
|
|
558
|
+
temp = []
|
|
559
|
+
for i in value:
|
|
560
|
+
sweep_type, start, stop, increment = i.split(" ")
|
|
561
|
+
start = start.replace("k", "K").replace("h", "H").replace("Z", "z").replace("g", "G")
|
|
562
|
+
stop = stop.replace("k", "K").replace("h", "H").replace("Z", "z").replace("g", "G")
|
|
563
|
+
temp.append(" ".join([sweep_type, start, stop, increment]))
|
|
564
|
+
value = temp
|
|
565
|
+
self._edb_object.FrequencyString = " ".join(value)
|
|
566
|
+
|
|
567
|
+
frequencies = []
|
|
568
|
+
for i in value:
|
|
569
|
+
sweep_type, start, stop, increment = i.split(" ")
|
|
570
|
+
if sweep_type == "LIN":
|
|
571
|
+
frequencies.extend(self._edb_object.SetFrequencies(start, stop, increment))
|
|
572
|
+
else:
|
|
573
|
+
increment = int(increment)
|
|
574
|
+
if sweep_type == "DEC":
|
|
575
|
+
frequencies.extend(self._edb_object.SetLogFrequencies(start, stop, increment))
|
|
576
|
+
elif sweep_type == "LINC":
|
|
577
|
+
frequencies.extend(self._edb_object.SetFrequencies(start, stop, increment))
|
|
578
|
+
|
|
579
|
+
self.clear()
|
|
580
|
+
self.add_frequencies(frequencies)
|
|
537
581
|
|
|
538
582
|
def add_frequencies(self, frequencies):
|
|
539
583
|
if not isinstance(frequencies, list):
|
|
540
584
|
frequencies = [frequencies]
|
|
585
|
+
|
|
586
|
+
temp = []
|
|
587
|
+
for i in frequencies:
|
|
588
|
+
i = self._pedb.edb_value(i).ToDouble()
|
|
589
|
+
if i not in temp and i not in self.frequencies:
|
|
590
|
+
temp.append(i)
|
|
591
|
+
frequencies = temp
|
|
592
|
+
|
|
541
593
|
for i in frequencies:
|
|
542
594
|
i = self._pedb.edb_value(i).ToString()
|
|
543
595
|
self._edb_object.Frequencies.Add(i)
|
|
596
|
+
self._update_sweep()
|
|
544
597
|
return list(self._edb_object.Frequencies)
|
|
545
598
|
|
|
546
599
|
def clear(self):
|
|
@@ -268,22 +268,16 @@ class SimulationSetup(object):
|
|
|
268
268
|
setattr(sweep_data, k, v)
|
|
269
269
|
sweep_data.type = sweep_type
|
|
270
270
|
|
|
271
|
-
if frequency_set
|
|
271
|
+
if frequency_set in [None, []]:
|
|
272
272
|
sweep_type = "linear_scale"
|
|
273
273
|
start, stop, increment = "50MHz", "5GHz", "50MHz"
|
|
274
|
+
frequency_set = [[sweep_type, start, stop, increment]]
|
|
275
|
+
elif not isinstance(frequency_set[0], list):
|
|
276
|
+
frequency_set = [frequency_set]
|
|
277
|
+
|
|
278
|
+
for fs in frequency_set:
|
|
279
|
+
sweep_type, start, stop, increment = fs
|
|
274
280
|
sweep_data.add(sweep_type, start, stop, increment)
|
|
275
|
-
elif len(frequency_set) == 0:
|
|
276
|
-
pass
|
|
277
|
-
else:
|
|
278
|
-
if not isinstance(frequency_set[0], list):
|
|
279
|
-
frequency_set = [frequency_set]
|
|
280
|
-
for fs in frequency_set:
|
|
281
|
-
sweep_data.add(*fs)
|
|
282
|
-
|
|
283
|
-
ss_info = self.sim_setup_info
|
|
284
|
-
ss_info.add_sweep_data(sweep_data)
|
|
285
|
-
self.set_sim_setup_info(ss_info)
|
|
286
|
-
self._update_setup()
|
|
287
281
|
return sweep_data
|
|
288
282
|
|
|
289
283
|
def delete(self):
|
pyedb/dotnet/edb.py
CHANGED
|
@@ -32,7 +32,6 @@ import re
|
|
|
32
32
|
import shutil
|
|
33
33
|
import subprocess
|
|
34
34
|
import sys
|
|
35
|
-
import tempfile
|
|
36
35
|
import time
|
|
37
36
|
import traceback
|
|
38
37
|
from typing import Union
|
|
@@ -48,10 +47,7 @@ from pyedb.dotnet.database.cell.terminal.terminal import Terminal
|
|
|
48
47
|
from pyedb.dotnet.database.components import Components
|
|
49
48
|
import pyedb.dotnet.database.dotnet.database
|
|
50
49
|
from pyedb.dotnet.database.dotnet.database import Database
|
|
51
|
-
from pyedb.dotnet.database.edb_data.control_file import
|
|
52
|
-
ControlFile,
|
|
53
|
-
convert_technology_file,
|
|
54
|
-
)
|
|
50
|
+
from pyedb.dotnet.database.edb_data.control_file import convert_technology_file
|
|
55
51
|
from pyedb.dotnet.database.edb_data.design_options import EdbDesignOptions
|
|
56
52
|
from pyedb.dotnet.database.edb_data.edbvalue import EdbValue
|
|
57
53
|
from pyedb.dotnet.database.edb_data.ports import (
|
|
@@ -243,7 +239,7 @@ class Edb(Database):
|
|
|
243
239
|
else:
|
|
244
240
|
control_file = convert_technology_file(technology_file, edbversion=edbversion)
|
|
245
241
|
self.logger.info("Translating ODB++ to EDB...")
|
|
246
|
-
self.
|
|
242
|
+
self.import_layout_file(edbpath[:-4], working_dir, use_ppe=use_ppe, control_file=control_file)
|
|
247
243
|
if settings.enable_local_log_file and self.log_name:
|
|
248
244
|
self._logger.add_file_logger(self.log_name, "Edb")
|
|
249
245
|
self.logger.info("EDB %s was created correctly from %s file.", self.edbpath, edbpath)
|
|
@@ -256,7 +252,7 @@ class Edb(Database):
|
|
|
256
252
|
control_file = technology_file
|
|
257
253
|
else:
|
|
258
254
|
control_file = convert_technology_file(technology_file, edbversion=edbversion)
|
|
259
|
-
self.
|
|
255
|
+
self.import_layout_file(edbpath, working_dir, use_ppe=use_ppe, control_file=control_file)
|
|
260
256
|
if settings.enable_local_log_file and self.log_name:
|
|
261
257
|
self._logger.add_file_logger(self.log_name, "Edb")
|
|
262
258
|
self.logger.info("EDB %s was created correctly from %s file.", self.edbpath, edbpath[-2:])
|
|
@@ -610,9 +606,15 @@ class Edb(Database):
|
|
|
610
606
|
anstranslator_full_path="",
|
|
611
607
|
use_ppe=False,
|
|
612
608
|
control_file=None,
|
|
609
|
+
map_file=None,
|
|
610
|
+
tech_file=None,
|
|
611
|
+
layer_filter=None,
|
|
613
612
|
):
|
|
614
613
|
"""Import a board file and generate an ``edb.def`` file in the working directory.
|
|
615
614
|
|
|
615
|
+
.. deprecated:: 0.42.0
|
|
616
|
+
Use :func:`import_layout_file` method instead.
|
|
617
|
+
|
|
616
618
|
This function supports all AEDT formats, including DXF, GDS, SML (IPC2581), BRD, MCM, SIP, ZIP and TGZ.
|
|
617
619
|
|
|
618
620
|
Parameters
|
|
@@ -630,6 +632,65 @@ class Edb(Database):
|
|
|
630
632
|
Path to the XML file. The default is ``None``, in which case an attempt is made to find
|
|
631
633
|
the XML file in the same directory as the board file. To succeed, the XML file and board file
|
|
632
634
|
must have the same name. Only the extension differs.
|
|
635
|
+
tech_file : str, optional
|
|
636
|
+
Technology file. The file can be *.ircx, *.vlc.tech, or *.itf
|
|
637
|
+
map_file : str, optional
|
|
638
|
+
Layer map .map file.
|
|
639
|
+
layer_filter:str,optional
|
|
640
|
+
Layer filter .txt file.
|
|
641
|
+
|
|
642
|
+
Returns
|
|
643
|
+
-------
|
|
644
|
+
Full path to the AEDB file : str
|
|
645
|
+
"""
|
|
646
|
+
self.logger.warning("import_layout_pcb method is deprecated, use import_layout_file instead.")
|
|
647
|
+
return self.import_layout_file(
|
|
648
|
+
input_file,
|
|
649
|
+
working_dir,
|
|
650
|
+
anstranslator_full_path,
|
|
651
|
+
use_ppe,
|
|
652
|
+
control_file,
|
|
653
|
+
map_file,
|
|
654
|
+
tech_file,
|
|
655
|
+
layer_filter,
|
|
656
|
+
)
|
|
657
|
+
|
|
658
|
+
def import_layout_file(
|
|
659
|
+
self,
|
|
660
|
+
input_file,
|
|
661
|
+
working_dir="",
|
|
662
|
+
anstranslator_full_path="",
|
|
663
|
+
use_ppe=False,
|
|
664
|
+
control_file=None,
|
|
665
|
+
map_file=None,
|
|
666
|
+
tech_file=None,
|
|
667
|
+
layer_filter=None,
|
|
668
|
+
):
|
|
669
|
+
"""Import a board file and generate an ``edb.def`` file in the working directory.
|
|
670
|
+
|
|
671
|
+
This function supports all AEDT formats, including DXF, GDS, SML (IPC2581), BRD, MCM, SIP, ZIP and TGZ.
|
|
672
|
+
|
|
673
|
+
Parameters
|
|
674
|
+
----------
|
|
675
|
+
input_file : str
|
|
676
|
+
Full path to the board file.
|
|
677
|
+
working_dir : str, optional
|
|
678
|
+
Directory in which to create the ``aedb`` folder. The name given to the AEDB file
|
|
679
|
+
is the same as the name of the board file.
|
|
680
|
+
anstranslator_full_path : str, optional
|
|
681
|
+
Full path to the Ansys translator. The default is ``""``.
|
|
682
|
+
use_ppe : bool
|
|
683
|
+
Whether to use the PPE License. The default is ``False``.
|
|
684
|
+
control_file : str, optional
|
|
685
|
+
Path to the XML file. The default is ``None``, in which case an attempt is made to find
|
|
686
|
+
the XML file in the same directory as the board file. To succeed, the XML file and board file
|
|
687
|
+
must have the same name. Only the extension differs.
|
|
688
|
+
tech_file : str, optional
|
|
689
|
+
Technology file. The file can be *.ircx, *.vlc.tech, or *.itf
|
|
690
|
+
map_file : str, optional
|
|
691
|
+
Layer map .map file.
|
|
692
|
+
layer_filter:str,optional
|
|
693
|
+
Layer filter .txt file.
|
|
633
694
|
|
|
634
695
|
Returns
|
|
635
696
|
-------
|
|
@@ -666,6 +727,12 @@ class Edb(Database):
|
|
|
666
727
|
cmd_translator.append("-c={}".format(control_file))
|
|
667
728
|
else:
|
|
668
729
|
cmd_translator.append('-c="{}"'.format(control_file))
|
|
730
|
+
if map_file:
|
|
731
|
+
cmd_translator.append('-g="{}"'.format(map_file))
|
|
732
|
+
if tech_file:
|
|
733
|
+
cmd_translator.append('-t="{}"'.format(tech_file))
|
|
734
|
+
if layer_filter:
|
|
735
|
+
cmd_translator.append('-f="{}"'.format(layer_filter))
|
|
669
736
|
p = subprocess.Popen(cmd_translator)
|
|
670
737
|
p.wait()
|
|
671
738
|
if not os.path.exists(os.path.join(working_dir, aedb_name)):
|
|
@@ -1466,7 +1533,7 @@ class Edb(Database):
|
|
|
1466
1533
|
``True`` when successful, ``False`` when failed.
|
|
1467
1534
|
|
|
1468
1535
|
"""
|
|
1469
|
-
if self.
|
|
1536
|
+
if self.import_layout_file(
|
|
1470
1537
|
inputBrd,
|
|
1471
1538
|
working_dir=WorkDir,
|
|
1472
1539
|
anstranslator_full_path=anstranslator_full_path,
|
|
@@ -1476,103 +1543,6 @@ class Edb(Database):
|
|
|
1476
1543
|
else:
|
|
1477
1544
|
return False
|
|
1478
1545
|
|
|
1479
|
-
def import_gds_file(
|
|
1480
|
-
self,
|
|
1481
|
-
inputGDS,
|
|
1482
|
-
anstranslator_full_path="",
|
|
1483
|
-
use_ppe=False,
|
|
1484
|
-
control_file=None,
|
|
1485
|
-
tech_file=None,
|
|
1486
|
-
map_file=None,
|
|
1487
|
-
layer_filter=None,
|
|
1488
|
-
):
|
|
1489
|
-
"""Import a GDS file and generate an ``edb.def`` file in the working directory.
|
|
1490
|
-
|
|
1491
|
-
..note::
|
|
1492
|
-
`ANSYSLMD_LICENSE_FILE` is needed to run the translator.
|
|
1493
|
-
|
|
1494
|
-
Parameters
|
|
1495
|
-
----------
|
|
1496
|
-
inputGDS : str
|
|
1497
|
-
Full path to the GDS file.
|
|
1498
|
-
anstranslator_full_path : str, optional
|
|
1499
|
-
Full path to the Ansys translator.
|
|
1500
|
-
use_ppe : bool, optional
|
|
1501
|
-
Whether to use the PPE License. The default is ``False``.
|
|
1502
|
-
control_file : str, optional
|
|
1503
|
-
Path to the XML file. The default is ``None``, in which case an attempt is made to find
|
|
1504
|
-
the XML file in the same directory as the GDS file. To succeed, the XML file and GDS file must
|
|
1505
|
-
have the same name. Only the extension differs.
|
|
1506
|
-
tech_file : str, optional
|
|
1507
|
-
Technology file. For versions<2024.1 it uses Helic to convert tech file to xml and then imports
|
|
1508
|
-
the gds. Works on Linux only.
|
|
1509
|
-
For versions>=2024.1 it can directly parse through supported foundry tech files.
|
|
1510
|
-
map_file : str, optional
|
|
1511
|
-
Layer map file.
|
|
1512
|
-
layer_filter:str,optional
|
|
1513
|
-
Layer filter file.
|
|
1514
|
-
|
|
1515
|
-
"""
|
|
1516
|
-
control_file_temp = os.path.join(tempfile.gettempdir(), os.path.split(inputGDS)[-1][:-3] + "xml")
|
|
1517
|
-
if float(self.edbversion) < 2024.1:
|
|
1518
|
-
if not is_linux and tech_file:
|
|
1519
|
-
self.logger.error("Technology files are supported only in Linux. Use control file instead.")
|
|
1520
|
-
return False
|
|
1521
|
-
|
|
1522
|
-
ControlFile(xml_input=control_file, tecnhology=tech_file, layer_map=map_file).write_xml(control_file_temp)
|
|
1523
|
-
if self.import_layout_pcb(
|
|
1524
|
-
inputGDS,
|
|
1525
|
-
anstranslator_full_path=anstranslator_full_path,
|
|
1526
|
-
use_ppe=use_ppe,
|
|
1527
|
-
control_file=control_file_temp,
|
|
1528
|
-
):
|
|
1529
|
-
return True
|
|
1530
|
-
else:
|
|
1531
|
-
return False
|
|
1532
|
-
else:
|
|
1533
|
-
if anstranslator_full_path and os.path.exists(anstranslator_full_path):
|
|
1534
|
-
path = anstranslator_full_path
|
|
1535
|
-
else:
|
|
1536
|
-
path = os.path.join(self.base_path, "anstranslator")
|
|
1537
|
-
if is_windows:
|
|
1538
|
-
path += ".exe"
|
|
1539
|
-
|
|
1540
|
-
temp_map_file = os.path.splitext(inputGDS)[0] + ".map"
|
|
1541
|
-
temp_layermap_file = os.path.splitext(inputGDS)[0] + ".layermap"
|
|
1542
|
-
|
|
1543
|
-
if map_file is None:
|
|
1544
|
-
if os.path.isfile(temp_map_file):
|
|
1545
|
-
map_file = temp_map_file
|
|
1546
|
-
elif os.path.isfile(temp_layermap_file):
|
|
1547
|
-
map_file = temp_layermap_file
|
|
1548
|
-
else:
|
|
1549
|
-
self.logger.error("Unable to define map file.")
|
|
1550
|
-
|
|
1551
|
-
if tech_file is None:
|
|
1552
|
-
if control_file is None:
|
|
1553
|
-
temp_control_file = os.path.splitext(inputGDS)[0] + ".xml"
|
|
1554
|
-
if os.path.isfile(temp_control_file):
|
|
1555
|
-
control_file = temp_control_file
|
|
1556
|
-
else:
|
|
1557
|
-
self.logger.error("Unable to define control file.")
|
|
1558
|
-
|
|
1559
|
-
command = [path, inputGDS, f'-g="{map_file}"', f'-c="{control_file}"']
|
|
1560
|
-
else:
|
|
1561
|
-
command = [
|
|
1562
|
-
path,
|
|
1563
|
-
inputGDS,
|
|
1564
|
-
f'-o="{control_file_temp}"' f'-t="{tech_file}"',
|
|
1565
|
-
f'-g="{map_file}"',
|
|
1566
|
-
f'-f="{layer_filter}"',
|
|
1567
|
-
]
|
|
1568
|
-
|
|
1569
|
-
result = subprocess.run(command, capture_output=True, text=True, shell=True)
|
|
1570
|
-
print(result.stdout)
|
|
1571
|
-
print(command)
|
|
1572
|
-
temp_inputGDS = inputGDS.split(".gds")[0]
|
|
1573
|
-
self.edbpath = temp_inputGDS + ".aedb"
|
|
1574
|
-
return self.open_edb()
|
|
1575
|
-
|
|
1576
1546
|
def _create_extent(
|
|
1577
1547
|
self,
|
|
1578
1548
|
net_signals,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
pyedb/__init__.py,sha256=
|
|
1
|
+
pyedb/__init__.py,sha256=GC9LXioJO6laUhZ1hvSmcq1zNIarZUlhiX4J9qYaQyg,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
|
|
@@ -7,26 +7,26 @@ pyedb/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
7
7
|
pyedb/common/nets.py,sha256=a6w_U-dCrWA4l0GUC9mf1nio91BGGOKh3K6cqd4I5vM,17877
|
|
8
8
|
pyedb/component_libraries/ansys_components.py,sha256=O3ypt832IHY9zG2AD_yrRrbH2KH9P1yFaoi1EO6Zllw,4830
|
|
9
9
|
pyedb/configuration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
pyedb/configuration/cfg_boundaries.py,sha256=
|
|
10
|
+
pyedb/configuration/cfg_boundaries.py,sha256=xEJX47_HF3D0enQFwGLMArvH0mFOcmTy2tlgipT_f-Y,11012
|
|
11
11
|
pyedb/configuration/cfg_common.py,sha256=U45p2qksEwMY_woVFaSwn5qjib9QQJDShajZZ-IZV0Y,2575
|
|
12
12
|
pyedb/configuration/cfg_components.py,sha256=cvD3K2WJXXGz8GdHZ1jgZFuFIhqzGQDOuSP-IbSjAvA,26052
|
|
13
13
|
pyedb/configuration/cfg_data.py,sha256=sy1xUrfhRA3jorbR60qGExaMxQ1nQGGAbZYJ0xXYktE,3860
|
|
14
|
-
pyedb/configuration/cfg_general.py,sha256=
|
|
15
|
-
pyedb/configuration/cfg_modeler.py,sha256=
|
|
16
|
-
pyedb/configuration/cfg_nets.py,sha256=
|
|
17
|
-
pyedb/configuration/cfg_operations.py,sha256=
|
|
18
|
-
pyedb/configuration/cfg_package_definition.py,sha256=
|
|
14
|
+
pyedb/configuration/cfg_general.py,sha256=ss3EXj-l_FHYguEswx08c268hqYzTULe8Ri9W-nopr0,2774
|
|
15
|
+
pyedb/configuration/cfg_modeler.py,sha256=WiGWorw-nJYLAP7DMZCfM1fpWMew5sxLoq6gUCJy9OY,10143
|
|
16
|
+
pyedb/configuration/cfg_nets.py,sha256=vAtp3tTTuTDSDZw6uay4qXjbThqcCoyEXf7fNKW64DY,2900
|
|
17
|
+
pyedb/configuration/cfg_operations.py,sha256=jaujF-M7EiGPf_DoePoIwqk_qtGzcbC9qIF1-3sgsak,5802
|
|
18
|
+
pyedb/configuration/cfg_package_definition.py,sha256=FSSIr33lmg06vuspv587xejJGxTxAXkejJd-X_XtEBs,6108
|
|
19
19
|
pyedb/configuration/cfg_padstacks.py,sha256=r8sn2eQJweKbZbUnn26SfSkAHC9j26P5OllPS0qzHl8,20781
|
|
20
|
-
pyedb/configuration/cfg_pin_groups.py,sha256=
|
|
20
|
+
pyedb/configuration/cfg_pin_groups.py,sha256=FS0Mc5mi56s3XNyjWcdV7rNJVZTPm8hXsQK2NS-rWUg,5580
|
|
21
21
|
pyedb/configuration/cfg_ports_sources.py,sha256=Ym0l_J1pu3i3LVra-uIsTT4FS7GKFCJ3Eg8RqWi9BjM,33248
|
|
22
|
-
pyedb/configuration/cfg_s_parameter_models.py,sha256=
|
|
23
|
-
pyedb/configuration/cfg_setup.py,sha256=
|
|
22
|
+
pyedb/configuration/cfg_s_parameter_models.py,sha256=yq6jJT-vNw03ML-bbIRwdm5r7WVmXihAXoq0XbncqlU,6345
|
|
23
|
+
pyedb/configuration/cfg_setup.py,sha256=4a1FpNLeI1a52Ayifb6BFr7aw0RmBR-lcW917y8ePY0,11296
|
|
24
24
|
pyedb/configuration/cfg_spice_models.py,sha256=Q_5j2-V6cepSFcnijot8iypTqzanLp7HOz-agmnwKns,2570
|
|
25
|
-
pyedb/configuration/cfg_stackup.py,sha256=
|
|
26
|
-
pyedb/configuration/configuration.py,sha256=
|
|
25
|
+
pyedb/configuration/cfg_stackup.py,sha256=V3Hv6SqB4nNJMUgQxB2wgGa2oyiU1HL3WE94Q6q1R04,8688
|
|
26
|
+
pyedb/configuration/configuration.py,sha256=0_KHtgZHC8yAHLtKVb22FRlpNRQvQGC3YFdcmbrM-8c,22535
|
|
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=TiM3VWBZx5iCG2cBKcWLN-YMqGFXR1drIsZKz2BDBAc,186032
|
|
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=lC-jmg4ct8qLdQevUreEig5_7lK6f8qwFrOy7Ojf-rc,81811
|
|
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
|
|
@@ -100,14 +100,14 @@ pyedb/dotnet/database/sim_setup_data/data/settings.py,sha256=VuJaksqhiM--ROQY67d
|
|
|
100
100
|
pyedb/dotnet/database/sim_setup_data/data/sim_setup_info.py,sha256=hN2TeXa8dbtOmEtwobhKuwomJXYs8cSJum3HQofuW3Y,4479
|
|
101
101
|
pyedb/dotnet/database/sim_setup_data/data/simulation_settings.py,sha256=ag-nl1gwKlNJOb3y7fBMSoSEwbUG_rwLzM25jLp8ado,10727
|
|
102
102
|
pyedb/dotnet/database/sim_setup_data/data/siw_dc_ir_settings.py,sha256=FnvDY1oxpnPo0EYMVXT7yfW-e-W3_NOGnvUvQYta4Ls,8627
|
|
103
|
-
pyedb/dotnet/database/sim_setup_data/data/sweep_data.py,sha256=
|
|
103
|
+
pyedb/dotnet/database/sim_setup_data/data/sweep_data.py,sha256=9JdKRP6DrXeuMhd7XKLIzDSGZDUoBnevbfi88oiX2F8,20129
|
|
104
104
|
pyedb/dotnet/database/sim_setup_data/io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
105
105
|
pyedb/dotnet/database/sim_setup_data/io/siwave.py,sha256=92iEZrhA2CUTZ7wynL5nxVVwi2XKKqppx7AcvvoqK6E,31387
|
|
106
106
|
pyedb/dotnet/database/utilities/__init__.py,sha256=8jByHkoaowAYQTCww-zRrTQmN061fLz_OHjTLSrzQQY,58
|
|
107
107
|
pyedb/dotnet/database/utilities/heatsink.py,sha256=7G7Yx9TxbL5EAiR51MnhdRiAQBVf-d0hKsXDw5OYX2Q,2220
|
|
108
108
|
pyedb/dotnet/database/utilities/hfss_simulation_setup.py,sha256=1tlZ64rUNEtvRLLbVhN-gfuVduVCo8fT6IPKfQCEaDs,14074
|
|
109
109
|
pyedb/dotnet/database/utilities/obj_base.py,sha256=xSGTbfh4pbNIw3EjqtjFMiN8rWM2JhYZ2eU73qHAGlI,2883
|
|
110
|
-
pyedb/dotnet/database/utilities/simulation_setup.py,sha256=
|
|
110
|
+
pyedb/dotnet/database/utilities/simulation_setup.py,sha256=ZUxq_cETrvD-3YbFAUrNq_YCoMuwo6ohsPs2eEFNbcM,12436
|
|
111
111
|
pyedb/dotnet/database/utilities/siwave_simulation_setup.py,sha256=dQsU9IKJ2-erZvum40z1XrJULlohU1045hln3Bl_-nk,12764
|
|
112
112
|
pyedb/extensions/pre_layout_design_toolkit/via_design.py,sha256=b9pTM5Gi3S3O2epaSBp4cD5DEul-MP5gCvRw3E5GmpE,46734
|
|
113
113
|
pyedb/generic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -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.43.0.dist-info/LICENSE,sha256=qQWivZ12ETN5l3QxvTARY-QI5eoRRlyHdwLlAj0Bg5I,1089
|
|
286
|
+
pyedb-0.43.0.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
|
|
287
|
+
pyedb-0.43.0.dist-info/METADATA,sha256=OrweivayYXnFTyY66K6k1cnGjF8_edsbZ72_t09kv3I,8617
|
|
288
|
+
pyedb-0.43.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|