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.

@@ -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
- if "pyedb_cutout" in self._pedb.stackup.all_layers:
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
- if self.op_cutout:
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.op_cutout = CfgCutout(self._pedb)
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
- for pkg in self.packages:
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
- package_definitions = []
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
- def __init__(self, pedb, pingroup_data):
30
- self._pedb = pedb
31
- self.pin_groups = [CfgPinGroup(self._pedb, **pg) for pg in pingroup_data]
29
+ class Grpc:
30
+ def __init__(self, parent):
31
+ self.parent = parent
32
+ self._pedb = parent._pedb
32
33
 
33
- def apply(self):
34
- for pg in self.pin_groups:
35
- pg.create()
34
+ def set_pingroup_to_edb(self):
35
+ for pg in self.parent.pin_groups:
36
+ pg.create()
36
37
 
37
- def get_data_from_db(self):
38
- self.pin_groups = []
39
- layout_pin_groups = self._pedb.siwave.pin_groups
40
- for pg_name, pg_obj in layout_pin_groups.items():
41
- if self._pedb.grpc:
42
- pins = pg_obj.pins
43
- refdes = pins[0].component.name
44
- cfg_pg = CfgPinGroup(
45
- self._pedb,
46
- name=pg_name,
47
- reference_designator=refdes,
48
- pins=[pin.component_pin for pin in pins],
49
- )
50
- else:
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
- self.pin_groups.append(cfg_pg)
60
- return self.export_properties()
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
- if self.pins:
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
- for s_param in self.s_parameters_models:
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
- db_comp_def = self._pedb.definitions.component
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)