Skip to content

FEATURE: Split up primitive and terminal modules into one module per class #500

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Mar 14, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 17 additions & 17 deletions doc/source/api/primitive.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,31 @@ Primitives
Classes
-------

.. currentmodule:: ansys.edb.core.primitive.primitive
.. currentmodule:: ansys.edb.core.primitive

.. autosummary::
:toctree: _autosummary

BoardBendDef
Bondwire
Circle
PadstackInstance
Path
Primitive
Polygon
Rectangle
Text
board_bend_def.BoardBendDef
bondwire.Bondwire
circle.Circle
padstack_instance.PadstackInstance
path.Path
primitive.Primitive
polygon.Polygon
rectangle.Rectangle
text.Text

Enums
-----

.. autosummary::
:toctree: _autosummary

BondwireCrossSectionType
BondwireType
BackDrillType
PathCornerType
PathEndCapType
PrimitiveType
RectangleRepresentationType
bondwire.BondwireCrossSectionType
bondwire.BondwireType
padstack_instance.BackDrillType
path.PathCornerType
path.PathEndCapType
primitive.PrimitiveType
rectangle.RectangleRepresentationType
34 changes: 17 additions & 17 deletions doc/source/api/terminal.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,24 @@ Terminals
Classes
-------

.. currentmodule:: ansys.edb.core.terminal.terminals
.. currentmodule:: ansys.edb.core.terminal

.. autosummary::
:toctree: _autosummary

BoundaryType
BundleTerminal
Edge
EdgeTerminal
EdgeType
HfssPIType
PadEdge
PadstackInstanceTerminal
PinGroupTerminal
PointTerminal
PrimitiveEdge
SourceTermToGroundType
Terminal
TerminalInstance
TerminalInstanceTerminal
TerminalType
terminal.BoundaryType
bundle_terminal.BundleTerminal
edge_terminal.Edge
edge_terminal.EdgeTerminal
edge_terminal.EdgeType
terminal.HfssPIType
edge_terminal.PadEdge
padstack_instance_terminal.PadstackInstanceTerminal
pin_group_terminal.PinGroupTerminal
point_terminal.PointTerminal
edge_terminal.PrimitiveEdge
terminal.SourceTermToGroundType
terminal.Terminal
terminal_instance.TerminalInstance
terminal_instance_terminal.TerminalInstanceTerminal
terminal.TerminalType
2 changes: 1 addition & 1 deletion src/ansys/edb/core/hierarchy/cell_instance.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ def term_instances(self):

This property is read-only.
"""
from ansys.edb.core.terminal.terminals import TerminalInstance
from ansys.edb.core.terminal.terminal_instance import TerminalInstance

terms = self.__stub.GetTermInsts(self.msg).items
return [TerminalInstance(ti) for ti in terms]
Expand Down
4 changes: 2 additions & 2 deletions src/ansys/edb/core/hierarchy/pin_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
from ansys.edb.core.edb_defs import LayoutObjType
from ansys.edb.core.inner import messages
from ansys.edb.core.inner.conn_obj import ConnObj
from ansys.edb.core.primitive.primitive import PadstackInstance
from ansys.edb.core.primitive.padstack_instance import PadstackInstance
from ansys.edb.core.session import PinGroupServiceStub, StubAccessor, StubType
from ansys.edb.core.terminal.terminals import PinGroupTerminal
from ansys.edb.core.terminal.pin_group_terminal import PinGroupTerminal


class PinGroup(ConnObj):
Expand Down
96 changes: 89 additions & 7 deletions src/ansys/edb/core/inner/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
from ansys.edb.core.inner.conn_obj import ConnObj

_type_creator_params_dict = None
_primitive_type_creator_params_dict = None
_terminal_type_creator_params_dict = None


class _CreatorParams:
Expand All @@ -23,8 +25,10 @@ def _initialize_type_creator_params_dict():
from ansys.edb.core.net.extended_net import ExtendedNet
from ansys.edb.core.net.net import Net
from ansys.edb.core.net.net_class import NetClass
from ansys.edb.core.primitive.primitive import PadstackInstance, Primitive
from ansys.edb.core.terminal.terminals import Terminal, TerminalInstance
from ansys.edb.core.primitive.padstack_instance import PadstackInstance
from ansys.edb.core.primitive.primitive import Primitive
from ansys.edb.core.terminal.terminal import Terminal
from ansys.edb.core.terminal.terminal_instance import TerminalInstance

_type_creator_params_dict = {
LayoutObjType.PRIMITIVE: _CreatorParams(Primitive, True),
Expand All @@ -40,12 +44,75 @@ def _initialize_type_creator_params_dict():
LayoutObjType.DIFFERENTIAL_PAIR: _CreatorParams(DifferentialPair),
LayoutObjType.NET: _CreatorParams(Net),
}
return _type_creator_params_dict


def _initialize_primitive_type_creator_params_dict():
global _primitive_type_creator_params_dict

from ansys.edb.core.primitive.board_bend_def import BoardBendDef
from ansys.edb.core.primitive.bondwire import Bondwire
from ansys.edb.core.primitive.circle import Circle
from ansys.edb.core.primitive.path import Path
from ansys.edb.core.primitive.polygon import Polygon
from ansys.edb.core.primitive.primitive import PrimitiveType
from ansys.edb.core.primitive.rectangle import Rectangle
from ansys.edb.core.primitive.text import Text

_primitive_type_creator_params_dict = {
PrimitiveType.BOARD_BEND: _CreatorParams(BoardBendDef),
PrimitiveType.BONDWIRE: _CreatorParams(Bondwire),
PrimitiveType.CIRCLE: _CreatorParams(Circle),
PrimitiveType.PATH: _CreatorParams(Path),
PrimitiveType.POLYGON: _CreatorParams(Polygon),
PrimitiveType.RECTANGLE: _CreatorParams(Rectangle),
PrimitiveType.TEXT: _CreatorParams(Text),
}
return _primitive_type_creator_params_dict


def _initialize_terminal_type_creator_params_dict():
global _terminal_type_creator_params_dict

from ansys.edb.core.terminal.bundle_terminal import BundleTerminal
from ansys.edb.core.terminal.edge_terminal import EdgeTerminal
from ansys.edb.core.terminal.padstack_instance_terminal import PadstackInstanceTerminal
from ansys.edb.core.terminal.pin_group_terminal import PinGroupTerminal
from ansys.edb.core.terminal.point_terminal import PointTerminal
from ansys.edb.core.terminal.terminal import TerminalType
from ansys.edb.core.terminal.terminal_instance_terminal import TerminalInstanceTerminal

_terminal_type_creator_params_dict = {
TerminalType.BUNDLE: _CreatorParams(BundleTerminal),
TerminalType.EDGE: _CreatorParams(EdgeTerminal),
TerminalType.PADSTACK_INST: _CreatorParams(PadstackInstanceTerminal),
TerminalType.PIN_GROUP: _CreatorParams(PinGroupTerminal),
TerminalType.POINT: _CreatorParams(PointTerminal),
TerminalType.TERM_INST: _CreatorParams(TerminalInstanceTerminal),
}
return _terminal_type_creator_params_dict


def _initialize_and_get_creator_dict(initializer, creator_dict):
return initializer() if creator_dict is None else creator_dict


def _get_type_creator_dict():
if _type_creator_params_dict is None:
_initialize_type_creator_params_dict()
return _type_creator_params_dict
return _initialize_and_get_creator_dict(
_initialize_type_creator_params_dict, _type_creator_params_dict
)


def _get_primitive_type_creator_dict():
return _initialize_and_get_creator_dict(
_initialize_primitive_type_creator_params_dict, _primitive_type_creator_params_dict
)


def _get_terminal_type_creator_dict():
return _initialize_and_get_creator_dict(
_initialize_terminal_type_creator_params_dict, _terminal_type_creator_params_dict
)


def create_obj(msg, obj_type, do_cast):
Expand All @@ -56,10 +123,25 @@ def create_obj(msg, obj_type, do_cast):
return obj


def create_obj_from_creator_dict(creator_dict, msg, obj_type):
"""Create an object from the provided message of the type corresponding to the provided object type."""
params = creator_dict[obj_type]
return create_obj(msg, params.obj_type, params.do_cast)


def create_lyt_obj(msg, lyt_obj_type):
"""Create a layout object from the provided message of the type corresponding to the provided layout object type."""
params = _get_type_creator_dict()[lyt_obj_type]
return create_obj(msg, params.obj_type, params.do_cast)
return create_obj_from_creator_dict(_get_type_creator_dict(), msg, lyt_obj_type)


def create_primitive(msg, prim_type):
"""Create a primitive from the provided message of the type corresponding to the provided primitive type."""
return create_obj_from_creator_dict(_get_primitive_type_creator_dict(), msg, prim_type)


def create_terminal(msg, term_type):
"""Create a terminal from the provided message of the type corresponding to the provided terminal type."""
return create_obj_from_creator_dict(_get_terminal_type_creator_dict(), msg, term_type)


def create_conn_obj(msg):
Expand Down
3 changes: 2 additions & 1 deletion src/ansys/edb/core/layout/layout.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
from ansys.edb.core.layer.layer_collection import LayerCollection
from ansys.edb.core.layout.mcad_model import McadModel
from ansys.edb.core.layout_instance import layout_instance
from ansys.edb.core.primitive.primitive import BoardBendDef, Primitive
from ansys.edb.core.primitive.board_bend_def import BoardBendDef
from ansys.edb.core.primitive.primitive import Primitive
from ansys.edb.core.session import StubAccessor, StubType


Expand Down
2 changes: 1 addition & 1 deletion src/ansys/edb/core/layout/voltage_regulator.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from ansys.edb.core.edb_defs import LayoutObjType
from ansys.edb.core.inner import conn_obj, messages
from ansys.edb.core.primitive.primitive import PadstackInstance
from ansys.edb.core.primitive.padstack_instance import PadstackInstance
from ansys.edb.core.session import StubAccessor, StubType
from ansys.edb.core.utility.value import Value

Expand Down
96 changes: 96 additions & 0 deletions src/ansys/edb/core/primitive/board_bend_def.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
"""Primitive classes."""

from ansys.api.edb.v1 import board_bend_def_pb2, board_bend_def_pb2_grpc

from ansys.edb.core.inner import messages, parser
from ansys.edb.core.primitive.primitive import Primitive
from ansys.edb.core.session import StubAccessor, StubType
from ansys.edb.core.utility.value import Value


class BoardBendDef(Primitive):
"""Represents a board bend definition instance."""

__stub: board_bend_def_pb2_grpc.BoardBendDefServiceStub = StubAccessor(StubType.board_bend_def)

@classmethod
def create(cls, layout, zone_prim, bend_middle, bend_radius, bend_angle):
"""Create a board bend definition.

Parameters
----------
layout : :class:`.Layout`
Layout to create the board bend definition in.
zone_prim : :class:`.Primitive`
Zone primitive to create the board bend definition on.
bend_middle : (:term:`Point2DLike`, :term:`Point2DLike`)
Tuple containing the starting and ending points of the line that represents
the middle of the bend.
bend_radius : :term:`ValueLike`
Radius of the bend.
bend_angle : :term:`ValueLike`
Angle of the bend.

Returns
-------
BoardBendDef
Board bend definition created.
"""
return BoardBendDef(
cls.__stub.Create(
board_bend_def_pb2.BoardBendDefCreateMessage(
layout=layout.msg,
zone_prim=zone_prim.msg,
middle=messages.point_pair_message(bend_middle),
radius=messages.value_message(bend_radius),
angle=messages.value_message(bend_angle),
)
)
)

@property
def boundary_primitive(self):
""":class:`.Primitive`: Zone primitive the board bend is placed on.

This property is read-only.
"""
return Primitive(self.__stub.GetBoundaryPrim(self.msg)).cast()

@property
@parser.to_point_data_pair
def bend_middle(self):
"""(:term:`Point2DLike`, :term:`Point2DLike`): Tuple of the bend middle based on starting and ending points."""
return self.__stub.GetBendMiddle(self.msg)

@bend_middle.setter
def bend_middle(self, bend_middle):
self.__stub.SetBendMiddle(messages.point_pair_property_message(self, bend_middle))

@property
def radius(self):
""":term:`ValueLike`: Radius of the bend."""
return Value(self.__stub.GetRadius(self.msg))

@radius.setter
def radius(self, val):
self.__stub.SetRadius(messages.value_property_message(self, val))

@property
def angle(self):
""":term:`ValueLike`: Angle of the bend."""
return Value(self.__stub.GetAngle(self.msg))

@angle.setter
def angle(self, val):
self.__stub.SetAngle(messages.value_property_message(self, val))

@property
@parser.to_polygon_data_list
def bent_regions(self):
""":obj:`list` of :class:`.PolygonData`: Bent region polygons.

This list of a collection of polygon data represents the areas bent by the bend definition.

This property is read-only.
"""
return self.__stub.GetBentRegions(self.msg)
Loading
Loading