Skip to content

Commit ef8f393

Browse files
authored
FEATURE: Split up primitive and terminal modules into one module per class (#500)
1 parent cb0105f commit ef8f393

30 files changed

+2725
-2566
lines changed

doc/source/api/primitive.rst

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,31 @@ Primitives
44
Classes
55
-------
66

7-
.. currentmodule:: ansys.edb.core.primitive.primitive
7+
.. currentmodule:: ansys.edb.core.primitive
88

99
.. autosummary::
1010
:toctree: _autosummary
1111

12-
BoardBendDef
13-
Bondwire
14-
Circle
15-
PadstackInstance
16-
Path
17-
Primitive
18-
Polygon
19-
Rectangle
20-
Text
12+
board_bend_def.BoardBendDef
13+
bondwire.Bondwire
14+
circle.Circle
15+
padstack_instance.PadstackInstance
16+
path.Path
17+
primitive.Primitive
18+
polygon.Polygon
19+
rectangle.Rectangle
20+
text.Text
2121

2222
Enums
2323
-----
2424

2525
.. autosummary::
2626
:toctree: _autosummary
2727

28-
BondwireCrossSectionType
29-
BondwireType
30-
BackDrillType
31-
PathCornerType
32-
PathEndCapType
33-
PrimitiveType
34-
RectangleRepresentationType
28+
bondwire.BondwireCrossSectionType
29+
bondwire.BondwireType
30+
padstack_instance.BackDrillType
31+
path.PathCornerType
32+
path.PathEndCapType
33+
primitive.PrimitiveType
34+
rectangle.RectangleRepresentationType

doc/source/api/terminal.rst

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,24 @@ Terminals
44
Classes
55
-------
66

7-
.. currentmodule:: ansys.edb.core.terminal.terminals
7+
.. currentmodule:: ansys.edb.core.terminal
88

99
.. autosummary::
1010
:toctree: _autosummary
1111

12-
BoundaryType
13-
BundleTerminal
14-
Edge
15-
EdgeTerminal
16-
EdgeType
17-
HfssPIType
18-
PadEdge
19-
PadstackInstanceTerminal
20-
PinGroupTerminal
21-
PointTerminal
22-
PrimitiveEdge
23-
SourceTermToGroundType
24-
Terminal
25-
TerminalInstance
26-
TerminalInstanceTerminal
27-
TerminalType
12+
terminal.BoundaryType
13+
bundle_terminal.BundleTerminal
14+
edge_terminal.Edge
15+
edge_terminal.EdgeTerminal
16+
edge_terminal.EdgeType
17+
terminal.HfssPIType
18+
edge_terminal.PadEdge
19+
padstack_instance_terminal.PadstackInstanceTerminal
20+
pin_group_terminal.PinGroupTerminal
21+
point_terminal.PointTerminal
22+
edge_terminal.PrimitiveEdge
23+
terminal.SourceTermToGroundType
24+
terminal.Terminal
25+
terminal_instance.TerminalInstance
26+
terminal_instance_terminal.TerminalInstanceTerminal
27+
terminal.TerminalType

src/ansys/edb/core/hierarchy/cell_instance.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def term_instances(self):
9898
9999
This property is read-only.
100100
"""
101-
from ansys.edb.core.terminal.terminals import TerminalInstance
101+
from ansys.edb.core.terminal.terminal_instance import TerminalInstance
102102

103103
terms = self.__stub.GetTermInsts(self.msg).items
104104
return [TerminalInstance(ti) for ti in terms]

src/ansys/edb/core/hierarchy/pin_group.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
from ansys.edb.core.edb_defs import LayoutObjType
44
from ansys.edb.core.inner import messages
55
from ansys.edb.core.inner.conn_obj import ConnObj
6-
from ansys.edb.core.primitive.primitive import PadstackInstance
6+
from ansys.edb.core.primitive.padstack_instance import PadstackInstance
77
from ansys.edb.core.session import PinGroupServiceStub, StubAccessor, StubType
8-
from ansys.edb.core.terminal.terminals import PinGroupTerminal
8+
from ansys.edb.core.terminal.pin_group_terminal import PinGroupTerminal
99

1010

1111
class PinGroup(ConnObj):

src/ansys/edb/core/inner/factory.py

Lines changed: 89 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
from ansys.edb.core.inner.conn_obj import ConnObj
55

66
_type_creator_params_dict = None
7+
_primitive_type_creator_params_dict = None
8+
_terminal_type_creator_params_dict = None
79

810

911
class _CreatorParams:
@@ -23,8 +25,10 @@ def _initialize_type_creator_params_dict():
2325
from ansys.edb.core.net.extended_net import ExtendedNet
2426
from ansys.edb.core.net.net import Net
2527
from ansys.edb.core.net.net_class import NetClass
26-
from ansys.edb.core.primitive.primitive import PadstackInstance, Primitive
27-
from ansys.edb.core.terminal.terminals import Terminal, TerminalInstance
28+
from ansys.edb.core.primitive.padstack_instance import PadstackInstance
29+
from ansys.edb.core.primitive.primitive import Primitive
30+
from ansys.edb.core.terminal.terminal import Terminal
31+
from ansys.edb.core.terminal.terminal_instance import TerminalInstance
2832

2933
_type_creator_params_dict = {
3034
LayoutObjType.PRIMITIVE: _CreatorParams(Primitive, True),
@@ -40,12 +44,75 @@ def _initialize_type_creator_params_dict():
4044
LayoutObjType.DIFFERENTIAL_PAIR: _CreatorParams(DifferentialPair),
4145
LayoutObjType.NET: _CreatorParams(Net),
4246
}
47+
return _type_creator_params_dict
48+
49+
50+
def _initialize_primitive_type_creator_params_dict():
51+
global _primitive_type_creator_params_dict
52+
53+
from ansys.edb.core.primitive.board_bend_def import BoardBendDef
54+
from ansys.edb.core.primitive.bondwire import Bondwire
55+
from ansys.edb.core.primitive.circle import Circle
56+
from ansys.edb.core.primitive.path import Path
57+
from ansys.edb.core.primitive.polygon import Polygon
58+
from ansys.edb.core.primitive.primitive import PrimitiveType
59+
from ansys.edb.core.primitive.rectangle import Rectangle
60+
from ansys.edb.core.primitive.text import Text
61+
62+
_primitive_type_creator_params_dict = {
63+
PrimitiveType.BOARD_BEND: _CreatorParams(BoardBendDef),
64+
PrimitiveType.BONDWIRE: _CreatorParams(Bondwire),
65+
PrimitiveType.CIRCLE: _CreatorParams(Circle),
66+
PrimitiveType.PATH: _CreatorParams(Path),
67+
PrimitiveType.POLYGON: _CreatorParams(Polygon),
68+
PrimitiveType.RECTANGLE: _CreatorParams(Rectangle),
69+
PrimitiveType.TEXT: _CreatorParams(Text),
70+
}
71+
return _primitive_type_creator_params_dict
72+
73+
74+
def _initialize_terminal_type_creator_params_dict():
75+
global _terminal_type_creator_params_dict
76+
77+
from ansys.edb.core.terminal.bundle_terminal import BundleTerminal
78+
from ansys.edb.core.terminal.edge_terminal import EdgeTerminal
79+
from ansys.edb.core.terminal.padstack_instance_terminal import PadstackInstanceTerminal
80+
from ansys.edb.core.terminal.pin_group_terminal import PinGroupTerminal
81+
from ansys.edb.core.terminal.point_terminal import PointTerminal
82+
from ansys.edb.core.terminal.terminal import TerminalType
83+
from ansys.edb.core.terminal.terminal_instance_terminal import TerminalInstanceTerminal
84+
85+
_terminal_type_creator_params_dict = {
86+
TerminalType.BUNDLE: _CreatorParams(BundleTerminal),
87+
TerminalType.EDGE: _CreatorParams(EdgeTerminal),
88+
TerminalType.PADSTACK_INST: _CreatorParams(PadstackInstanceTerminal),
89+
TerminalType.PIN_GROUP: _CreatorParams(PinGroupTerminal),
90+
TerminalType.POINT: _CreatorParams(PointTerminal),
91+
TerminalType.TERM_INST: _CreatorParams(TerminalInstanceTerminal),
92+
}
93+
return _terminal_type_creator_params_dict
94+
95+
96+
def _initialize_and_get_creator_dict(initializer, creator_dict):
97+
return initializer() if creator_dict is None else creator_dict
4398

4499

45100
def _get_type_creator_dict():
46-
if _type_creator_params_dict is None:
47-
_initialize_type_creator_params_dict()
48-
return _type_creator_params_dict
101+
return _initialize_and_get_creator_dict(
102+
_initialize_type_creator_params_dict, _type_creator_params_dict
103+
)
104+
105+
106+
def _get_primitive_type_creator_dict():
107+
return _initialize_and_get_creator_dict(
108+
_initialize_primitive_type_creator_params_dict, _primitive_type_creator_params_dict
109+
)
110+
111+
112+
def _get_terminal_type_creator_dict():
113+
return _initialize_and_get_creator_dict(
114+
_initialize_terminal_type_creator_params_dict, _terminal_type_creator_params_dict
115+
)
49116

50117

51118
def create_obj(msg, obj_type, do_cast):
@@ -56,10 +123,25 @@ def create_obj(msg, obj_type, do_cast):
56123
return obj
57124

58125

126+
def create_obj_from_creator_dict(creator_dict, msg, obj_type):
127+
"""Create an object from the provided message of the type corresponding to the provided object type."""
128+
params = creator_dict[obj_type]
129+
return create_obj(msg, params.obj_type, params.do_cast)
130+
131+
59132
def create_lyt_obj(msg, lyt_obj_type):
60133
"""Create a layout object from the provided message of the type corresponding to the provided layout object type."""
61-
params = _get_type_creator_dict()[lyt_obj_type]
62-
return create_obj(msg, params.obj_type, params.do_cast)
134+
return create_obj_from_creator_dict(_get_type_creator_dict(), msg, lyt_obj_type)
135+
136+
137+
def create_primitive(msg, prim_type):
138+
"""Create a primitive from the provided message of the type corresponding to the provided primitive type."""
139+
return create_obj_from_creator_dict(_get_primitive_type_creator_dict(), msg, prim_type)
140+
141+
142+
def create_terminal(msg, term_type):
143+
"""Create a terminal from the provided message of the type corresponding to the provided terminal type."""
144+
return create_obj_from_creator_dict(_get_terminal_type_creator_dict(), msg, term_type)
63145

64146

65147
def create_conn_obj(msg):

src/ansys/edb/core/layout/layout.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
from ansys.edb.core.layer.layer_collection import LayerCollection
99
from ansys.edb.core.layout.mcad_model import McadModel
1010
from ansys.edb.core.layout_instance import layout_instance
11-
from ansys.edb.core.primitive.primitive import BoardBendDef, Primitive
11+
from ansys.edb.core.primitive.board_bend_def import BoardBendDef
12+
from ansys.edb.core.primitive.primitive import Primitive
1213
from ansys.edb.core.session import StubAccessor, StubType
1314

1415

src/ansys/edb/core/layout/voltage_regulator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from ansys.edb.core.edb_defs import LayoutObjType
55
from ansys.edb.core.inner import conn_obj, messages
6-
from ansys.edb.core.primitive.primitive import PadstackInstance
6+
from ansys.edb.core.primitive.padstack_instance import PadstackInstance
77
from ansys.edb.core.session import StubAccessor, StubType
88
from ansys.edb.core.utility.value import Value
99

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
"""Primitive classes."""
2+
3+
from ansys.api.edb.v1 import board_bend_def_pb2, board_bend_def_pb2_grpc
4+
5+
from ansys.edb.core.inner import messages, parser
6+
from ansys.edb.core.primitive.primitive import Primitive
7+
from ansys.edb.core.session import StubAccessor, StubType
8+
from ansys.edb.core.utility.value import Value
9+
10+
11+
class BoardBendDef(Primitive):
12+
"""Represents a board bend definition instance."""
13+
14+
__stub: board_bend_def_pb2_grpc.BoardBendDefServiceStub = StubAccessor(StubType.board_bend_def)
15+
16+
@classmethod
17+
def create(cls, layout, zone_prim, bend_middle, bend_radius, bend_angle):
18+
"""Create a board bend definition.
19+
20+
Parameters
21+
----------
22+
layout : :class:`.Layout`
23+
Layout to create the board bend definition in.
24+
zone_prim : :class:`.Primitive`
25+
Zone primitive to create the board bend definition on.
26+
bend_middle : (:term:`Point2DLike`, :term:`Point2DLike`)
27+
Tuple containing the starting and ending points of the line that represents
28+
the middle of the bend.
29+
bend_radius : :term:`ValueLike`
30+
Radius of the bend.
31+
bend_angle : :term:`ValueLike`
32+
Angle of the bend.
33+
34+
Returns
35+
-------
36+
BoardBendDef
37+
Board bend definition created.
38+
"""
39+
return BoardBendDef(
40+
cls.__stub.Create(
41+
board_bend_def_pb2.BoardBendDefCreateMessage(
42+
layout=layout.msg,
43+
zone_prim=zone_prim.msg,
44+
middle=messages.point_pair_message(bend_middle),
45+
radius=messages.value_message(bend_radius),
46+
angle=messages.value_message(bend_angle),
47+
)
48+
)
49+
)
50+
51+
@property
52+
def boundary_primitive(self):
53+
""":class:`.Primitive`: Zone primitive the board bend is placed on.
54+
55+
This property is read-only.
56+
"""
57+
return Primitive(self.__stub.GetBoundaryPrim(self.msg)).cast()
58+
59+
@property
60+
@parser.to_point_data_pair
61+
def bend_middle(self):
62+
"""(:term:`Point2DLike`, :term:`Point2DLike`): Tuple of the bend middle based on starting and ending points."""
63+
return self.__stub.GetBendMiddle(self.msg)
64+
65+
@bend_middle.setter
66+
def bend_middle(self, bend_middle):
67+
self.__stub.SetBendMiddle(messages.point_pair_property_message(self, bend_middle))
68+
69+
@property
70+
def radius(self):
71+
""":term:`ValueLike`: Radius of the bend."""
72+
return Value(self.__stub.GetRadius(self.msg))
73+
74+
@radius.setter
75+
def radius(self, val):
76+
self.__stub.SetRadius(messages.value_property_message(self, val))
77+
78+
@property
79+
def angle(self):
80+
""":term:`ValueLike`: Angle of the bend."""
81+
return Value(self.__stub.GetAngle(self.msg))
82+
83+
@angle.setter
84+
def angle(self, val):
85+
self.__stub.SetAngle(messages.value_property_message(self, val))
86+
87+
@property
88+
@parser.to_polygon_data_list
89+
def bent_regions(self):
90+
""":obj:`list` of :class:`.PolygonData`: Bent region polygons.
91+
92+
This list of a collection of polygon data represents the areas bent by the bend definition.
93+
94+
This property is read-only.
95+
"""
96+
return self.__stub.GetBentRegions(self.msg)

0 commit comments

Comments
 (0)