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
|
@@ -24,9 +24,38 @@ from pyedb.configuration.cfg_common import CfgBase
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class CfgCutout(CfgBase):
|
|
27
|
+
class Grpc:
|
|
28
|
+
def __init__(self, parent):
|
|
29
|
+
self.parent = parent
|
|
30
|
+
self._pedb = parent._pedb
|
|
31
|
+
|
|
32
|
+
def get_parameters_from_edb(self):
|
|
33
|
+
if "pyedb_cutout" in self._pedb.stackup.all_layers:
|
|
34
|
+
polygons = self._pedb.layout.find_primitive(layer_name="pyedb_cutout")
|
|
35
|
+
if polygons:
|
|
36
|
+
poly = polygons[0]
|
|
37
|
+
self.parent.custom_extent = poly.polygon_data.points
|
|
38
|
+
net_names = []
|
|
39
|
+
for name, obj in self._pedb.nets.nets.items():
|
|
40
|
+
if obj.primitives:
|
|
41
|
+
if obj.primitives[0].layer.name == "pyedb_cutout":
|
|
42
|
+
continue
|
|
43
|
+
else:
|
|
44
|
+
net_names.append(name)
|
|
45
|
+
self.parent.reference_list = []
|
|
46
|
+
self.parent.signal_list = net_names
|
|
47
|
+
return self.parent.export_properties()
|
|
48
|
+
|
|
49
|
+
class DotNet(Grpc):
|
|
50
|
+
def __init__(self, parent):
|
|
51
|
+
super().__init__(parent)
|
|
52
|
+
|
|
27
53
|
def __init__(self, pedb, **kwargs):
|
|
28
54
|
self._pedb = pedb
|
|
29
|
-
|
|
55
|
+
if self._pedb.grpc:
|
|
56
|
+
self.api = self.Grpc(self)
|
|
57
|
+
else:
|
|
58
|
+
self.api = self.DotNet(self)
|
|
30
59
|
self.signal_list = kwargs.get("signal_list")
|
|
31
60
|
self.reference_list = kwargs.get("reference_list")
|
|
32
61
|
self.extent_type = kwargs.get("extent_type")
|
|
@@ -52,23 +81,7 @@ class CfgCutout(CfgBase):
|
|
|
52
81
|
self.keep_lines_as_path = kwargs.get("keep_lines_as_path")
|
|
53
82
|
|
|
54
83
|
def get_data_from_db(self):
|
|
55
|
-
|
|
56
|
-
polygons = self._pedb.layout.find_primitive(layer_name="pyedb_cutout")
|
|
57
|
-
if polygons:
|
|
58
|
-
poly = polygons[0]
|
|
59
|
-
self.custom_extent = poly.polygon_data.points
|
|
60
|
-
|
|
61
|
-
net_names = []
|
|
62
|
-
for name, obj in self._pedb.nets.nets.items():
|
|
63
|
-
if obj.primitives:
|
|
64
|
-
if obj.primitives[0].layer.name == "pyedb_cutout":
|
|
65
|
-
continue
|
|
66
|
-
else:
|
|
67
|
-
net_names.append(name)
|
|
68
|
-
|
|
69
|
-
self.reference_list = []
|
|
70
|
-
self.signal_list = net_names
|
|
71
|
-
return self.export_properties()
|
|
84
|
+
return self.api.get_parameters_from_edb()
|
|
72
85
|
|
|
73
86
|
def export_properties(self):
|
|
74
87
|
return {
|
|
@@ -79,24 +92,43 @@ class CfgCutout(CfgBase):
|
|
|
79
92
|
|
|
80
93
|
|
|
81
94
|
class CfgOperations(CfgBase):
|
|
95
|
+
class Grpc:
|
|
96
|
+
def __init__(self, parent):
|
|
97
|
+
self.parent = parent
|
|
98
|
+
self._pedb = parent._pedb
|
|
99
|
+
|
|
100
|
+
def apply_on_edb(self):
|
|
101
|
+
if self.parent.op_cutout:
|
|
102
|
+
polygon_points = self._pedb.cutout(**self.parent.op_cutout.get_attributes())
|
|
103
|
+
if "pyedb_cutout" not in self._pedb.stackup.all_layers:
|
|
104
|
+
self._pedb.stackup.add_document_layer(name="pyedb_cutout")
|
|
105
|
+
self._pedb.modeler.create_polygon(
|
|
106
|
+
polygon_points, layer_name="pyedb_cutout", net_name="pyedb_cutout"
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
def get_parameter_from_edb(self):
|
|
110
|
+
self.parent.op_cutout = CfgCutout(self._pedb)
|
|
111
|
+
data_from_db = self.parent.op_cutout.get_data_from_db()
|
|
112
|
+
if data_from_db:
|
|
113
|
+
return {"cutout": data_from_db}
|
|
114
|
+
else:
|
|
115
|
+
return {}
|
|
116
|
+
|
|
117
|
+
class DotNet(Grpc):
|
|
118
|
+
def __init__(self, parent):
|
|
119
|
+
super().__init__(parent)
|
|
120
|
+
|
|
82
121
|
def __init__(self, pedb, data):
|
|
83
122
|
self._pedb = pedb
|
|
123
|
+
if self._pedb.grpc:
|
|
124
|
+
self.api = self.Grpc(self)
|
|
125
|
+
else:
|
|
126
|
+
self.api = self.DotNet(self)
|
|
84
127
|
self.op_cutout = CfgCutout(pedb, **data["cutout"]) if "cutout" in data else None
|
|
85
128
|
|
|
86
129
|
def apply(self):
|
|
87
130
|
"""Imports operation information from JSON."""
|
|
88
|
-
|
|
89
|
-
polygon_points = self._pedb.cutout(**self.op_cutout.get_attributes())
|
|
90
|
-
if "pyedb_cutout" not in self._pedb.stackup.all_layers:
|
|
91
|
-
self._pedb.stackup.add_document_layer(name="pyedb_cutout")
|
|
92
|
-
self._pedb.modeler.create_polygon(polygon_points, layer_name="pyedb_cutout", net_name="pyedb_cutout")
|
|
93
|
-
|
|
94
|
-
# create a polygon on pyedb layer
|
|
131
|
+
self.api.apply_on_edb()
|
|
95
132
|
|
|
96
133
|
def get_data_from_db(self):
|
|
97
|
-
self.
|
|
98
|
-
data_from_db = self.op_cutout.get_data_from_db()
|
|
99
|
-
if data_from_db:
|
|
100
|
-
return {"cutout": data_from_db}
|
|
101
|
-
else:
|
|
102
|
-
return {}
|
|
134
|
+
return self.api.get_parameter_from_edb()
|
|
@@ -64,61 +64,82 @@ class CfgHeatSink(CfgBase):
|
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
class CfgPackageDefinitions:
|
|
67
|
+
class Grpc:
|
|
68
|
+
def __init__(self, parent):
|
|
69
|
+
self.parent = parent
|
|
70
|
+
self._pedb = parent._pedb
|
|
71
|
+
|
|
72
|
+
def set_parameter_to_edb(self):
|
|
73
|
+
for pkg in self.parent.packages:
|
|
74
|
+
comp_def_from_db = self._pedb.definitions.component[pkg.component_definition]
|
|
75
|
+
if pkg.name in self._pedb.definitions.package:
|
|
76
|
+
self._pedb.definitions.package[pkg.name].delete()
|
|
77
|
+
|
|
78
|
+
if pkg.extent_bounding_box:
|
|
79
|
+
package_def = PackageDef(self._pedb, name=pkg.name, extent_bounding_box=pkg.extent_bounding_box)
|
|
80
|
+
else:
|
|
81
|
+
package_def = PackageDef(self._pedb, name=pkg.name, component_part_name=pkg.component_definition)
|
|
82
|
+
pkg.set_attributes(package_def)
|
|
83
|
+
|
|
84
|
+
if pkg.heatsink:
|
|
85
|
+
attrs = pkg.heatsink.get_attributes()
|
|
86
|
+
for attr, value in attrs.items():
|
|
87
|
+
package_def.set_heatsink(**attrs)
|
|
88
|
+
|
|
89
|
+
comp_list = dict()
|
|
90
|
+
if pkg.apply_to_all:
|
|
91
|
+
comp_list.update(
|
|
92
|
+
{
|
|
93
|
+
refdes: comp
|
|
94
|
+
for refdes, comp in comp_def_from_db.components.items()
|
|
95
|
+
if refdes not in pkg.components
|
|
96
|
+
}
|
|
97
|
+
)
|
|
98
|
+
else:
|
|
99
|
+
comp_list.update(
|
|
100
|
+
{
|
|
101
|
+
refdes: comp
|
|
102
|
+
for refdes, comp in comp_def_from_db.components.items()
|
|
103
|
+
if refdes in pkg.components
|
|
104
|
+
}
|
|
105
|
+
)
|
|
106
|
+
for _, i in comp_list.items():
|
|
107
|
+
i.package_def = pkg.name
|
|
108
|
+
|
|
109
|
+
def get_parameter_from_edb(self):
|
|
110
|
+
package_definitions = []
|
|
111
|
+
for pkg_name, pkg_obj in self._pedb.definitions.package.items():
|
|
112
|
+
pkg = {}
|
|
113
|
+
pkg_attrs = [i for i in dir(pkg_obj) if not i.startswith("_")]
|
|
114
|
+
pkg_attrs = {i for i in pkg_attrs if i in CfgPackage().__dict__}
|
|
115
|
+
for pkg_attr_name in pkg_attrs:
|
|
116
|
+
pkg[pkg_attr_name] = getattr(pkg_obj, pkg_attr_name)
|
|
117
|
+
hs_obj = pkg_obj.heatsink
|
|
118
|
+
if hs_obj:
|
|
119
|
+
hs = {}
|
|
120
|
+
hs_attrs = [i for i in dir(hs_obj) if not i.startswith("_")]
|
|
121
|
+
hs_attrs = [i for i in hs_attrs if i in CfgHeatSink().__dict__]
|
|
122
|
+
for hs_attr_name in hs_attrs:
|
|
123
|
+
hs[hs_attr_name] = getattr(hs_obj, hs_attr_name)
|
|
124
|
+
pkg["heatsink"] = hs
|
|
125
|
+
package_definitions.append(pkg)
|
|
126
|
+
|
|
127
|
+
return package_definitions
|
|
128
|
+
|
|
129
|
+
class DotNet(Grpc):
|
|
130
|
+
def __init__(self, parent):
|
|
131
|
+
super().__init__(parent)
|
|
132
|
+
|
|
67
133
|
def __init__(self, pedb, data):
|
|
68
134
|
self._pedb = pedb
|
|
135
|
+
if self._pedb.grpc:
|
|
136
|
+
self.api = self.Grpc(self)
|
|
137
|
+
else:
|
|
138
|
+
self.api = self.DotNet(self)
|
|
69
139
|
self.packages = [CfgPackage(**package) for package in data]
|
|
70
140
|
|
|
71
141
|
def apply(self):
|
|
72
|
-
|
|
73
|
-
comp_def_from_db = self._pedb.definitions.component[pkg.component_definition]
|
|
74
|
-
if pkg.name in self._pedb.definitions.package:
|
|
75
|
-
self._pedb.definitions.package[pkg.name].delete()
|
|
76
|
-
|
|
77
|
-
if pkg.extent_bounding_box:
|
|
78
|
-
package_def = PackageDef(self._pedb, name=pkg.name, extent_bounding_box=pkg.extent_bounding_box)
|
|
79
|
-
else:
|
|
80
|
-
package_def = PackageDef(self._pedb, name=pkg.name, component_part_name=pkg.component_definition)
|
|
81
|
-
pkg.set_attributes(package_def)
|
|
82
|
-
|
|
83
|
-
if pkg.heatsink:
|
|
84
|
-
attrs = pkg.heatsink.get_attributes()
|
|
85
|
-
for attr, value in attrs.items():
|
|
86
|
-
package_def.set_heatsink(**attrs)
|
|
87
|
-
|
|
88
|
-
comp_list = dict()
|
|
89
|
-
if pkg.apply_to_all:
|
|
90
|
-
comp_list.update(
|
|
91
|
-
{
|
|
92
|
-
refdes: comp
|
|
93
|
-
for refdes, comp in comp_def_from_db.components.items()
|
|
94
|
-
if refdes not in pkg.components
|
|
95
|
-
}
|
|
96
|
-
)
|
|
97
|
-
else:
|
|
98
|
-
comp_list.update(
|
|
99
|
-
{refdes: comp for refdes, comp in comp_def_from_db.components.items() if refdes in pkg.components}
|
|
100
|
-
)
|
|
101
|
-
for _, i in comp_list.items():
|
|
102
|
-
i.package_def = pkg.name
|
|
142
|
+
self.api.set_parameter_to_edb()
|
|
103
143
|
|
|
104
144
|
def get_data_from_db(self):
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
for pkg_name, pkg_obj in self._pedb.definitions.package.items():
|
|
108
|
-
pkg = {}
|
|
109
|
-
pkg_attrs = [i for i in dir(pkg_obj) if not i.startswith("_")]
|
|
110
|
-
pkg_attrs = {i for i in pkg_attrs if i in CfgPackage().__dict__}
|
|
111
|
-
for pkg_attr_name in pkg_attrs:
|
|
112
|
-
pkg[pkg_attr_name] = getattr(pkg_obj, pkg_attr_name)
|
|
113
|
-
|
|
114
|
-
hs_obj = pkg_obj.heatsink
|
|
115
|
-
if hs_obj:
|
|
116
|
-
hs = {}
|
|
117
|
-
hs_attrs = [i for i in dir(hs_obj) if not i.startswith("_")]
|
|
118
|
-
hs_attrs = [i for i in hs_attrs if i in CfgHeatSink().__dict__]
|
|
119
|
-
for hs_attr_name in hs_attrs:
|
|
120
|
-
hs[hs_attr_name] = getattr(hs_obj, hs_attr_name)
|
|
121
|
-
pkg["heatsink"] = hs
|
|
122
|
-
package_definitions.append(pkg)
|
|
123
|
-
|
|
124
|
-
return package_definitions
|
|
145
|
+
return self.api.get_parameter_from_edb()
|
|
@@ -26,28 +26,40 @@ from pyedb.configuration.cfg_common import CfgBase
|
|
|
26
26
|
class CfgPinGroups:
|
|
27
27
|
"""Manage configuration pin group class."""
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
self
|
|
31
|
-
|
|
29
|
+
class Grpc:
|
|
30
|
+
def __init__(self, parent):
|
|
31
|
+
self.parent = parent
|
|
32
|
+
self._pedb = parent._pedb
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
def set_pingroup_to_edb(self):
|
|
35
|
+
for pg in self.parent.pin_groups:
|
|
36
|
+
pg.create()
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
38
|
+
def get_data_from_edb(self):
|
|
39
|
+
self.parent.pin_groups = []
|
|
40
|
+
layout_pin_groups = self._pedb.siwave.pin_groups
|
|
41
|
+
for pg_name, pg_obj in layout_pin_groups.items():
|
|
42
|
+
if self._pedb.grpc:
|
|
43
|
+
pins = pg_obj.pins
|
|
44
|
+
refdes = pins[0].component.name
|
|
45
|
+
cfg_pg = CfgPinGroup(
|
|
46
|
+
self._pedb,
|
|
47
|
+
name=pg_name,
|
|
48
|
+
reference_designator=refdes,
|
|
49
|
+
pins=[pin.component_pin for pin in pins],
|
|
50
|
+
)
|
|
51
|
+
self.parent.pin_groups.append(cfg_pg)
|
|
52
|
+
return self.parent.export_properties()
|
|
53
|
+
|
|
54
|
+
class DotNet(Grpc):
|
|
55
|
+
def __init__(self, parent):
|
|
56
|
+
self.parent = parent
|
|
57
|
+
super().__init__(parent)
|
|
58
|
+
|
|
59
|
+
def get_data_from_edb(self):
|
|
60
|
+
self.parent.pin_groups = []
|
|
61
|
+
layout_pin_groups = self._pedb.siwave.pin_groups
|
|
62
|
+
for pg_name, pg_obj in layout_pin_groups.items():
|
|
51
63
|
pins = list(pg_obj.pins.keys())
|
|
52
64
|
refdes = list(pg_obj.pins.values())[0].component.name
|
|
53
65
|
cfg_pg = CfgPinGroup(
|
|
@@ -56,8 +68,22 @@ class CfgPinGroups:
|
|
|
56
68
|
reference_designator=refdes,
|
|
57
69
|
pins=pins,
|
|
58
70
|
)
|
|
59
|
-
|
|
60
|
-
|
|
71
|
+
self.parent.pin_groups.append(cfg_pg)
|
|
72
|
+
return self.parent.export_properties()
|
|
73
|
+
|
|
74
|
+
def __init__(self, pedb, pingroup_data):
|
|
75
|
+
self._pedb = pedb
|
|
76
|
+
if self._pedb.grpc:
|
|
77
|
+
self.api = self.Grpc(self)
|
|
78
|
+
else:
|
|
79
|
+
self.api = self.DotNet(self)
|
|
80
|
+
self.pin_groups = [CfgPinGroup(self._pedb, **pg) for pg in pingroup_data]
|
|
81
|
+
|
|
82
|
+
def apply(self):
|
|
83
|
+
self.api.set_pingroup_to_edb()
|
|
84
|
+
|
|
85
|
+
def get_data_from_db(self):
|
|
86
|
+
return self.api.get_data_from_edb()
|
|
61
87
|
|
|
62
88
|
def export_properties(self):
|
|
63
89
|
pin_groups = []
|
|
@@ -67,8 +93,34 @@ class CfgPinGroups:
|
|
|
67
93
|
|
|
68
94
|
|
|
69
95
|
class CfgPinGroup(CfgBase):
|
|
96
|
+
class Grpc:
|
|
97
|
+
def __init__(self, parent):
|
|
98
|
+
self.parent = parent
|
|
99
|
+
self._pedb = parent._pedb
|
|
100
|
+
|
|
101
|
+
def create(self):
|
|
102
|
+
if self.parent.pins:
|
|
103
|
+
pins = self.parent.pins if isinstance(self.parent.pins, list) else [self.parent.pins]
|
|
104
|
+
self._pedb.siwave.create_pin_group(self.parent.reference_designator, pins, self.parent.name)
|
|
105
|
+
elif self.parent.net:
|
|
106
|
+
nets = self.parent.net if isinstance(self.parent.net, list) else [self.parent.net]
|
|
107
|
+
comp = self._pedb.components.instances[self.parent.reference_designator]
|
|
108
|
+
pins = [p for p, obj in comp.pins.items() if obj.net_name in nets]
|
|
109
|
+
if not self._pedb.siwave.create_pin_group(self.parent.reference_designator, pins, self.parent.name):
|
|
110
|
+
raise RuntimeError(f"Failed to create pin group {self.parent.name}")
|
|
111
|
+
else:
|
|
112
|
+
raise RuntimeError(f"No net and pins defined for defining pin group {self.parent.name}")
|
|
113
|
+
|
|
114
|
+
class DotNet(Grpc):
|
|
115
|
+
def __init__(self, parent):
|
|
116
|
+
super().__init__(parent)
|
|
117
|
+
|
|
70
118
|
def __init__(self, pedb, **kwargs):
|
|
71
119
|
self._pedb = pedb
|
|
120
|
+
if self._pedb.grpc:
|
|
121
|
+
self.api = self.Grpc(self)
|
|
122
|
+
else:
|
|
123
|
+
self.api = self.DotNet(self)
|
|
72
124
|
self.name = kwargs["name"]
|
|
73
125
|
self.reference_designator = kwargs.get("reference_designator")
|
|
74
126
|
self.pins = kwargs.get("pins")
|
|
@@ -76,17 +128,7 @@ class CfgPinGroup(CfgBase):
|
|
|
76
128
|
|
|
77
129
|
def create(self):
|
|
78
130
|
"""Apply pin group on layout."""
|
|
79
|
-
|
|
80
|
-
pins = self.pins if isinstance(self.pins, list) else [self.pins]
|
|
81
|
-
self._pedb.siwave.create_pin_group(self.reference_designator, pins, self.name)
|
|
82
|
-
elif self.net:
|
|
83
|
-
nets = self.net if isinstance(self.net, list) else [self.net]
|
|
84
|
-
comp = self._pedb.components.instances[self.reference_designator]
|
|
85
|
-
pins = [p for p, obj in comp.pins.items() if obj.net_name in nets]
|
|
86
|
-
if not self._pedb.siwave.create_pin_group(self.reference_designator, pins, self.name):
|
|
87
|
-
raise RuntimeError(f"Failed to create pin group {self.name}")
|
|
88
|
-
else:
|
|
89
|
-
raise RuntimeError(f"No net and pins defined for defining pin group {self.name}")
|
|
131
|
+
self.api.create()
|
|
90
132
|
|
|
91
133
|
def export_properties(self):
|
|
92
134
|
if self.pins:
|
|
@@ -36,81 +36,106 @@ class CfgSParameterModel:
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
class CfgSParameters:
|
|
39
|
+
class Grpc:
|
|
40
|
+
def __init__(self, parent):
|
|
41
|
+
self.parent = parent
|
|
42
|
+
self._pedb = parent._pedb
|
|
43
|
+
|
|
44
|
+
def apply(self):
|
|
45
|
+
for s_param in self.parent.s_parameters_models:
|
|
46
|
+
fpath = s_param.file_path
|
|
47
|
+
if not Path(fpath).anchor:
|
|
48
|
+
fpath = str(Path(self.parent.path_libraries) / fpath)
|
|
49
|
+
comp_def = self._pedb.definitions.component[s_param.component_definition]
|
|
50
|
+
if s_param.pin_order:
|
|
51
|
+
comp_def.set_properties(pin_order=s_param.pin_order)
|
|
52
|
+
comp_def.add_n_port_model(fpath, s_param.name)
|
|
53
|
+
comp_list = dict()
|
|
54
|
+
if s_param.apply_to_all:
|
|
55
|
+
comp_list.update(
|
|
56
|
+
{
|
|
57
|
+
refdes: comp
|
|
58
|
+
for refdes, comp in comp_def.components.items()
|
|
59
|
+
if refdes not in s_param.components
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
else:
|
|
63
|
+
comp_list.update(
|
|
64
|
+
{refdes: comp for refdes, comp in comp_def.components.items() if refdes in s_param.components}
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
for refdes, comp in comp_list.items():
|
|
68
|
+
if refdes in s_param.reference_net_per_component:
|
|
69
|
+
ref_net = s_param.reference_net_per_component[refdes]
|
|
70
|
+
else:
|
|
71
|
+
ref_net = s_param.reference_net
|
|
72
|
+
comp.use_s_parameter_model(s_param.name, reference_net=ref_net)
|
|
73
|
+
|
|
74
|
+
def get_data_from_db(self, cfg_components):
|
|
75
|
+
db_comp_def = self._pedb.definitions.component
|
|
76
|
+
for name, compdef_obj in db_comp_def.items():
|
|
77
|
+
nport_models = compdef_obj.component_models
|
|
78
|
+
if not nport_models:
|
|
79
|
+
continue
|
|
80
|
+
else:
|
|
81
|
+
pin_order = compdef_obj.get_properties()["pin_order"]
|
|
82
|
+
temp_comps = [i for i in cfg_components if i["definition"] == name]
|
|
83
|
+
for model_name, model_obj in nport_models.items():
|
|
84
|
+
temp_comp_list = []
|
|
85
|
+
reference_net_per_component = {}
|
|
86
|
+
for i in temp_comps:
|
|
87
|
+
s_param_model = i.get("s_parameter_model")
|
|
88
|
+
if s_param_model:
|
|
89
|
+
if s_param_model["model_name"] == model_name:
|
|
90
|
+
temp_comp_list.append(i["reference_designator"])
|
|
91
|
+
reference_net_per_component[i["reference_designator"]] = s_param_model[
|
|
92
|
+
"reference_net"
|
|
93
|
+
]
|
|
94
|
+
else:
|
|
95
|
+
continue
|
|
96
|
+
|
|
97
|
+
self.parent.s_parameters_models.append(
|
|
98
|
+
CfgSParameterModel(
|
|
99
|
+
name=model_name,
|
|
100
|
+
component_definition=name,
|
|
101
|
+
file_path=model_obj.reference_file,
|
|
102
|
+
apply_to_all=False,
|
|
103
|
+
components=temp_comp_list,
|
|
104
|
+
reference_net_per_component=reference_net_per_component,
|
|
105
|
+
pin_order=pin_order,
|
|
106
|
+
)
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
data = []
|
|
110
|
+
for i in self.parent.s_parameters_models:
|
|
111
|
+
data.append(
|
|
112
|
+
{
|
|
113
|
+
"name": i.name,
|
|
114
|
+
"component_definition": i.component_definition,
|
|
115
|
+
"file_path": i.file_path,
|
|
116
|
+
"apply_to_all": i.apply_to_all,
|
|
117
|
+
"components": i.components,
|
|
118
|
+
"reference_net_per_component": i.reference_net_per_component,
|
|
119
|
+
"pin_order": i.pin_order,
|
|
120
|
+
}
|
|
121
|
+
)
|
|
122
|
+
return data
|
|
123
|
+
|
|
124
|
+
class DotNet(Grpc):
|
|
125
|
+
def __init__(self, parent):
|
|
126
|
+
super().__init__(parent)
|
|
127
|
+
|
|
39
128
|
def __init__(self, pedb, data, path_lib=None):
|
|
40
129
|
self._pedb = pedb
|
|
130
|
+
if self._pedb.grpc:
|
|
131
|
+
self.api = self.Grpc(self)
|
|
132
|
+
else:
|
|
133
|
+
self.api = self.DotNet(self)
|
|
41
134
|
self.path_libraries = path_lib
|
|
42
135
|
self.s_parameters_models = [CfgSParameterModel(**i) for i in data]
|
|
43
136
|
|
|
44
137
|
def apply(self):
|
|
45
|
-
|
|
46
|
-
fpath = s_param.file_path
|
|
47
|
-
if not Path(fpath).anchor:
|
|
48
|
-
fpath = str(Path(self.path_libraries) / fpath)
|
|
49
|
-
comp_def = self._pedb.definitions.component[s_param.component_definition]
|
|
50
|
-
if s_param.pin_order:
|
|
51
|
-
comp_def.set_properties(pin_order=s_param.pin_order)
|
|
52
|
-
comp_def.add_n_port_model(fpath, s_param.name)
|
|
53
|
-
comp_list = dict()
|
|
54
|
-
if s_param.apply_to_all:
|
|
55
|
-
comp_list.update(
|
|
56
|
-
{refdes: comp for refdes, comp in comp_def.components.items() if refdes not in s_param.components}
|
|
57
|
-
)
|
|
58
|
-
else:
|
|
59
|
-
comp_list.update(
|
|
60
|
-
{refdes: comp for refdes, comp in comp_def.components.items() if refdes in s_param.components}
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
for refdes, comp in comp_list.items():
|
|
64
|
-
if refdes in s_param.reference_net_per_component:
|
|
65
|
-
ref_net = s_param.reference_net_per_component[refdes]
|
|
66
|
-
else:
|
|
67
|
-
ref_net = s_param.reference_net
|
|
68
|
-
comp.use_s_parameter_model(s_param.name, reference_net=ref_net)
|
|
138
|
+
self.api.apply()
|
|
69
139
|
|
|
70
140
|
def get_data_from_db(self, cfg_components):
|
|
71
|
-
|
|
72
|
-
for name, compdef_obj in db_comp_def.items():
|
|
73
|
-
nport_models = compdef_obj.component_models
|
|
74
|
-
if not nport_models:
|
|
75
|
-
continue
|
|
76
|
-
else:
|
|
77
|
-
pin_order = compdef_obj.get_properties()["pin_order"]
|
|
78
|
-
temp_comps = [i for i in cfg_components if i["definition"] == name]
|
|
79
|
-
for model_name, model_obj in nport_models.items():
|
|
80
|
-
temp_comp_list = []
|
|
81
|
-
reference_net_per_component = {}
|
|
82
|
-
for i in temp_comps:
|
|
83
|
-
s_param_model = i.get("s_parameter_model")
|
|
84
|
-
if s_param_model:
|
|
85
|
-
if s_param_model["model_name"] == model_name:
|
|
86
|
-
temp_comp_list.append(i["reference_designator"])
|
|
87
|
-
reference_net_per_component[i["reference_designator"]] = s_param_model["reference_net"]
|
|
88
|
-
else:
|
|
89
|
-
continue
|
|
90
|
-
|
|
91
|
-
self.s_parameters_models.append(
|
|
92
|
-
CfgSParameterModel(
|
|
93
|
-
name=model_name,
|
|
94
|
-
component_definition=name,
|
|
95
|
-
file_path=model_obj.reference_file,
|
|
96
|
-
apply_to_all=False,
|
|
97
|
-
components=temp_comp_list,
|
|
98
|
-
reference_net_per_component=reference_net_per_component,
|
|
99
|
-
pin_order=pin_order,
|
|
100
|
-
)
|
|
101
|
-
)
|
|
102
|
-
|
|
103
|
-
data = []
|
|
104
|
-
for i in self.s_parameters_models:
|
|
105
|
-
data.append(
|
|
106
|
-
{
|
|
107
|
-
"name": i.name,
|
|
108
|
-
"component_definition": i.component_definition,
|
|
109
|
-
"file_path": i.file_path,
|
|
110
|
-
"apply_to_all": i.apply_to_all,
|
|
111
|
-
"components": i.components,
|
|
112
|
-
"reference_net_per_component": i.reference_net_per_component,
|
|
113
|
-
"pin_order": i.pin_order,
|
|
114
|
-
}
|
|
115
|
-
)
|
|
116
|
-
return data
|
|
141
|
+
return self.api.get_data_from_db(cfg_components)
|