issue module#
Design issues#
Experimental
This API is experimental and may change significantly without notice.
The physical-design issue list (“design checks”) reported by the runtime for a
submitted design. Query it with design.issues() on a runtime design, which
returns an IssueReport.
Issues form a class hierarchy, so a report can be filtered by any level of it,
for example report.of(SignalIntegrityIssue). An issue of a type this
version of JITX does not know is reported as its nearest known ancestor class,
down to DesignIssue itself, and always carries its text, severity,
the objects it references and any shapes.
- class IssueCategory(*values)[source]#
Bases:
IntEnumThe runtime’s issue categories. A report is partitioned by category; categories do not classify issues (use the issue classes for that).
- SIGNAL_CONSTRAINT = 1#
- TOPOLOGY = 2#
- GEOMETRY = 3#
- REALIZATION = 4#
- ROUTING = 5#
- LENGTH_TUNING = 6#
- GENERAL = 7#
- class Severity(*values)[source]#
Bases:
IntEnumSeverity of an issue.
- UNSPECIFIED = 0#
- ERROR = 1#
- WARNING = 2#
- INFO = 3#
- class CategoryStatus(*values)[source]#
Bases:
IntEnumWhether a category’s issues are final.
PENDINGmeans background tasks were still running when the report was taken, so the list may be incomplete.- UNKNOWN = 0#
- PENDING = 1#
- COMPLETE = 2#
- class IssueObject(role, ref, instance)[source]#
Bases:
objectA design object referenced by an issue.
- Variables:
role (
str) – What the object is to the issue, for example"pad","pin","route"or"route-segment".ref (
str) – Human-readable reference, possibly empty.instance (
object|None) – The Python object, or None if it could not be resolved, for example because the design was not submitted by this process.
- Parameters:
- class IssueShape(role, shape, layers)[source]#
Bases:
objectGeometry carried by an issue.
- Variables:
- Parameters:
- class IssuePath(ref, pads, pins, route_segments)[source]#
Bases:
objectA constrained path referenced by an issue.
- Parameters:
ref (str)
pads (tuple[IssueObject, ...])
pins (tuple[IssueObject, ...])
route_segments (tuple[IssueObject, ...])
- pads: tuple[IssueObject, ...]#
- pins: tuple[IssueObject, ...]#
- route_segments: tuple[IssueObject, ...]#
- class IssuePinPad(pads, pin)[source]#
Bases:
objectA pin, and the pads realizing it.
- Parameters:
pads (tuple[IssueObject, ...])
pin (IssueObject)
- pads: tuple[IssueObject, ...]#
- pin: IssueObject#
- class IssueIncidentStructure(proposed_path, structure)[source]#
Bases:
objectA routing structure that could apply at a point, with the path it would apply to.
- Parameters:
proposed_path (IssuePath)
structure (IssueStructure)
- structure: IssueStructure#
- class IssueRoute(route, pads)[source]#
Bases:
objectA route and its terminal pads.
- Parameters:
route (IssueObject)
pads (tuple[IssueObject, ...])
- route: IssueObject#
- pads: tuple[IssueObject, ...]#
- class DesignIssue[source]#
Bases:
objectAn issue reported by the runtime. Instances of this exact class are issues of a type this version of JITX does not recognize.
- Variables:
text (
str) – Human-readable description; always present.category (
IssueCategory|int) – The category it was reported in, anIssueCategoryor, for a category this version does not know, its number.type (
str) – The runtime’s name for the issue type, even when no class here matches it. For display only.source (
FileInfo|None) – Where in the design source the issue originates, if known.objects (
tuple[IssueObject,...]) – Every design object the issue references.shapes (
tuple[IssueShape,...]) – Every shape the issue carries.group (
IssueGroup) – The group the issue belongs to.depth (
int) – How many levels of the runtime’s hierarchy were understood.details (
Sequence[IssueDetail]) – The raw per-level detail sequence;details[depth:]is the part this version could not interpret.
- category: IssueCategory | int#
- objects: tuple[IssueObject, ...]#
- shapes: tuple[IssueShape, ...]#
- group: IssueGroup#
- class ConnectivityIssue[source]#
Bases:
DesignIssueA constrained path or requested route is not (correctly) connected.
- class MissingRoute[source]#
Bases:
ConnectivityIssueA topology segment has no route.
- Variables:
path_ref (
str) – The constrained path, possibly empty.pads (
tuple[IssueObject,...]) – Pads at the segment ends.pins (
tuple[IssueObject,...]) – Pins at the segment ends.
- pads: tuple[IssueObject, ...]#
- pins: tuple[IssueObject, ...]#
- class DuplicateRoute[source]#
Bases:
ConnectivityIssueA topology segment has more than one route.
- Variables:
path_ref (
str) – The constrained path, possibly empty.pads (
tuple[IssueObject,...]) – Pads at the segment ends.pins (
tuple[IssueObject,...]) – Pins at the segment ends.route_segments (
tuple[IssueObject,...]) – The competing route segments.
- pads: tuple[IssueObject, ...]#
- pins: tuple[IssueObject, ...]#
- route_segments: tuple[IssueObject, ...]#
- class UnconnectedTopology[source]#
Bases:
ConnectivityIssueThe ends of a topology segment are not connected.
- Variables:
path_ref (
str) – The constrained path, possibly empty.pads (
tuple[IssueObject,...]) – Pads at the segment ends.pins (
tuple[IssueObject,...]) – Pins at the segment ends.
- pads: tuple[IssueObject, ...]#
- pins: tuple[IssueObject, ...]#
- class UnassignedPin[source]#
Bases:
ConnectivityIssueA pin on a constrained path has no pin assignment.
- Variables:
path_ref (
str) – The constrained path, possibly empty.pin (
IssueObject) – The unassigned pin.
- pin: IssueObject#
- class BlockedPath[source]#
Bases:
ConnectivityIssueNo path could be found for a requested route.
- Variables:
route (
IssueRoute|None) – The requested route and its terminal pads.
- route: IssueRoute | None#
- class DroppedRoute[source]#
Bases:
ConnectivityIssueA code route was dropped without being made.
- Variables:
route (
IssueRoute|None) – The dropped route and its terminal pads.cause – Why it was dropped:
"not-on-layer"(an end is not on the route’s layer),"not-in-topology"(the ends are on one net, but its declared topology does not join them directly),"different-nets","never-connectable"(any other reason the ends can never be joined) or"conflicting"(other connections prevent it).
- route: IssueRoute | None#
- class UnmodelledVirtualConnection[source]#
Bases:
ConnectivityIssueA virtual connection joins the two ends of a topology segment, so no route is expected there, but it carries no pin model and the signal check cannot time the step.
- Variables:
path_ref (
str) – The constrained path, possibly empty.pads (
tuple[IssueObject,...]) – Pads at the segment ends.pins (
tuple[IssueObject,...]) – Pins at the segment ends.
- pads: tuple[IssueObject, ...]#
- pins: tuple[IssueObject, ...]#
- class SignalIntegrityIssue[source]#
Bases:
DesignIssueA signal constraint measurement. Measurements are reported for satisfied constraints too; check
satisfied.- Variables:
- class TimingIssue[source]#
Bases:
SignalIntegrityIssueA timing measurement; ranges are in seconds.
- class UnmetTime[source]#
Bases:
TimingIssueA delay constraint measurement along one path.
- class UnmetTimeDiff[source]#
Bases:
TimingIssueA skew constraint measurement between two paths.
- Variables:
- class LossIssue[source]#
Bases:
SignalIntegrityIssueA loss measurement; ranges are in dB.
- class RoutingStructureIssue[source]#
Bases:
DesignIssueA problem with the routing structures or structure models of a path.
- class OverlappingStructure[source]#
Bases:
RoutingStructureIssueRouting structures overlap along a path.
- Variables:
active (
IssueStructure|None) – The structure in effect.overlaps (
tuple[IssueStructure,...]) – The structures it overlaps.
- active: IssueStructure | None#
- overlaps: tuple[IssueStructure, ...]#
- class AmbiguousTouchingStructure[source]#
Bases:
RoutingStructureIssueSeveral routing structures meet at a point and it is ambiguous which applies.
- Variables:
common_point (
IssuePinPad|None) – Where the structures meet.alternatives (
tuple[IssueIncidentStructure,...]) – The candidate structures.
- common_point: IssuePinPad | None#
- alternatives: tuple[IssueIncidentStructure, ...]#
- class MissingRoutingStructure[source]#
Bases:
RoutingStructureIssueA route segment on a constrained path has no routing structure.
- Variables:
path_ref (
str) – The constrained path, possibly empty.pads (
tuple[IssueObject,...]) – Pads at the segment ends.pins (
tuple[IssueObject,...]) – Pins at the segment ends.route_segments (
tuple[IssueObject,...]) – The route segments without a structure.
- pads: tuple[IssueObject, ...]#
- pins: tuple[IssueObject, ...]#
- route_segments: tuple[IssueObject, ...]#
- class MissingStructureModel[source]#
Bases:
RoutingStructureIssueA feature on a constrained path has no structure model; a placeholder model was used.
- Variables:
path_ref (
str) – The constrained path, possibly empty.cause (
str) – The runtime’s reason code, for example"NoDefForTraversedLayers".error_point (
IssuePinPad|None) – The feature without a model.entry_layers (
tuple[int,...]) – Layers the path enters the feature on.exit_layers (
tuple[int,...]) – Layers the path leaves the feature on.via_def_name (
str|None) – The configured via definition, if any.
- error_point: IssuePinPad | None#
- class RealizationIssue[source]#
Bases:
DesignIssueA route could not be turned into final copper.
- class UnrealizedRoute[source]#
Bases:
RealizationIssueA route could not be realized. Its geometry is in
shapes.- Variables:
cause (
str) – Why it could not be realized.route_segments (
tuple[IssueObject,...]) – The affected route segments.
- route_segments: tuple[IssueObject, ...]#
- class UnsquiggledRoute[source]#
Bases:
RealizationIssueLength tuning could not generate a serpentine trace for a route.
- Variables:
route (
IssueRoute|None) – The route and its terminal pads.cause (
str) – Why, when known, e.g. a route end shaped to its pad; empty otherwise.
- route: IssueRoute | None#
- class GeometryIssue[source]#
Bases:
DesignIssueA problem with copper geometry.
- class GeometricOverlap[source]#
Bases:
GeometryIssueCopper overlaps where it must not. The overlapping shapes and their layers are in
shapes.
- class TopologyIssue[source]#
Bases:
DesignIssueA problem in the topology definition. Subclasses carry the pins the problem is about; an instance of this exact class is described by
textonly.
- class AmbiguousTopology[source]#
Bases:
TopologyIssueThe signal path crosses a net whose connection points are joined in more than one way, so the path through them cannot be inferred.
- Variables:
ends (
tuple[IssueObject,...]) – The two ends of the signal constraint.net_pins (
tuple[IssueObject,...]) – The net’s connection points.
- ends: tuple[IssueObject, ...]#
- net_pins: tuple[IssueObject, ...]#
- class UnroutedTopology[source]#
Bases:
TopologyIssueThe signal path needs two points of a net that no route joins yet.
- Variables:
ends (
tuple[IssueObject,...]) – The two ends of the signal constraint.gap (
tuple[IssueObject,...]) – The two pins no route joins.
- ends: tuple[IssueObject, ...]#
- gap: tuple[IssueObject, ...]#
- class MissingPinModel[source]#
Bases:
TopologyIssueThe signal path would pass through a part that has no pin model between the two pins named, so the signal cannot be followed through it.
- Variables:
ends (
tuple[IssueObject,...]) – The two ends of the signal constraint.part (
tuple[IssueObject,...]) – The two pins of the part lacking a model.
- ends: tuple[IssueObject, ...]#
- part: tuple[IssueObject, ...]#
- class EquivalentPaths[source]#
Bases:
TopologyIssueTwo paths of equal length run between the constraint’s ends. The constraint is checked over
chosen;alternativeis the other. Reported as a warning: the constraint still resolves.- Variables:
ends (
tuple[IssueObject,...]) – The two ends of the signal constraint.chosen (
tuple[IssueObject,...]) – The pins of the path taken, end to end.alternative (
tuple[IssueObject,...]) – The pins of the other path, end to end.
- ends: tuple[IssueObject, ...]#
- chosen: tuple[IssueObject, ...]#
- alternative: tuple[IssueObject, ...]#
- class GeneralIssue[source]#
Bases:
DesignIssueA general design-check message. Described by
textonly.
- class IssueGroup(group_id, category, satisfied, text, issues=())[source]#
Bases:
objectA group of related issues, for example every issue found checking one signal constraint.
- Variables:
group_id (
int) – The runtime’s identifier, stable for the same subject.category (
IssueCategory|int) – The category the group was reported in.satisfied (
bool) – True if the check behind the group passed.text (
str) – Human-readable summary; always present.issues (
tuple[DesignIssue,...]) – The issues in the group.
- Parameters:
group_id (int)
category (IssueCategory | int)
satisfied (bool)
text (str)
issues (tuple[DesignIssue, ...])
- category: IssueCategory | int#
- issues: tuple[DesignIssue, ...] = ()#
- class CategoryEntry(category, status, groups)[source]#
Bases:
objectThe reported state of one category.
- Parameters:
category (IssueCategory | int)
status (CategoryStatus | int)
groups (tuple[IssueGroup, ...])
- category: IssueCategory | int#
- status: CategoryStatus | int#
- groups: tuple[IssueGroup, ...]#
- class IssueReport(generation, categories, _by_instance=dict())[source]#
Bases:
objectThe design issues of a design, as reported by the runtime.
Iterating yields every issue. The report is true if it contains any error-severity issue, so it can be used directly as a pass/fail check.
- Variables:
generation (
str) – Opaque token naming the runtime’s design generation the report was computed on.categories (
Mapping[IssueCategory|int,CategoryEntry]) – Every reported category, including empty ones.
- Parameters:
generation (str)
categories (Mapping[IssueCategory | int, CategoryEntry])
_by_instance (dict[int, list[DesignIssue]])
- categories: Mapping[IssueCategory | int, CategoryEntry]#
- property errors: tuple[DesignIssue, ...]#
All error-severity issues.
- groups(category=None)[source]#
The groups of one category, or of all categories.
- Parameters:
category (
IssueCategory|int|None) – The category, or None for all.- Return type:
- of[T: DesignIssue](cls)[source]#
Issues that are instances of
cls, including its subclasses.>>> report.of(SignalIntegrityIssue)
- referencing(obj)[source]#
Issues that reference
obj(by identity), for example a component or pad of the submitted design.- Return type:
- Parameters:
obj (object)
- status(category)[source]#
Status of a category;
UNKNOWNif it was not reported.- Return type:
- Parameters:
category (IssueCategory | int)