From e96ba14886af68431fbb469257f87d0701778d51 Mon Sep 17 00:00:00 2001 From: "Koefferlein Matthias (IFAG DES TCP FLP)" Date: Fri, 9 Dec 2022 13:35:47 +0100 Subject: [PATCH 01/10] Updated Changelog --- Changelog | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Changelog b/Changelog index 3d7eba745..10ebaa80e 100644 --- a/Changelog +++ b/Changelog @@ -1,4 +1,4 @@ -0.28 +0.28 (2022-12-09): Changes (list may not be complete): * Bugfix: %GITHUB%/issues/989 "Layout#convert_pcell_to_static" does not handle"defunct" cells * Bugfix: %GITHUB%/issues/991 Basic library not available in Python module @@ -7,10 +7,12 @@ Changes (list may not be complete): * Bugfix: %GITHUB%/issues/1138 Provide a way to suppress or redirect log output or disable warnings, specifically from file readers, in Python module * Bugfix: %GITHUB%/issues/1178 technology-data xml results in SEGV * Bugfix: %GITHUB%/issues/1190 General compatibility issue of Edges#extended/extended_* with deep mode -* Enhacnement: %GITHUB%/issues/1056 X2 net names -* Enhancement: %GITHUB%/issues/1052 Pdf documentation -* Enhancement: %GITHUB%/issues/1053 Lefdef enhancements -* Enhancement: Support for Qt6 +* Bugfix: %GITHUB%/issues/1216 DRC internal error on "moved" +* Bugfix: %GITHUB%/issues/1214 LEF via parser error +* Enhancement: %GITHUB%/issues/1056 X2 net names +* Enhancement: %GITHUB%/issues/1052 PDF documentation +* Enhancement: %GITHUB%/issues/1053 LEF/DEF enhancements +* Enhancement: Qt6 enabled * Enhancement: KLayout paths - $KLAYOUT_HOME can now be empty string (no home folder used) - $KLAYOUT_PATH can now be empty string (no further and implicit search paths) From c10cb86b68aae46f4a41f4b6f993405d2e177bff Mon Sep 17 00:00:00 2001 From: "Koefferlein Matthias (IFAG DES TCP FLP)" Date: Fri, 9 Dec 2022 16:07:31 +0100 Subject: [PATCH 02/10] Robust configuration of new ruler settings --- src/ant/ant/antConfig.cc | 2 +- src/ant/ant/antTemplate.cc | 102 +++++++++++-------------------------- 2 files changed, 31 insertions(+), 73 deletions(-) diff --git a/src/ant/ant/antConfig.cc b/src/ant/ant/antConfig.cc index ed5230023..f6f1347d7 100644 --- a/src/ant/ant/antConfig.cc +++ b/src/ant/ant/antConfig.cc @@ -298,7 +298,7 @@ const std::string cfg_ruler_snap_mode ("ruler-snap-mode"); const std::string cfg_ruler_obj_snap ("ruler-obj-snap"); const std::string cfg_ruler_grid_snap ("ruler-grid-snap"); const std::string cfg_ruler_grid_micron ("grid-micron"); -const std::string cfg_ruler_templates ("ruler-templates"); +const std::string cfg_ruler_templates ("ruler-templates-v2"); const std::string cfg_current_ruler_template ("current-ruler-template"); } // namespace ant diff --git a/src/ant/ant/antTemplate.cc b/src/ant/ant/antTemplate.cc index 572a84214..f73cc52c7 100644 --- a/src/ant/ant/antTemplate.cc +++ b/src/ant/ant/antTemplate.cc @@ -154,168 +154,126 @@ Template::from_string (const std::string &s) while (! ex.at_end ()) { - if (ex.test ("version=")) { + std::string key, s; + ex.read_word_or_quoted (key); + ex.expect ("="); + ex.read_word_or_quoted (s); + + if (key == "version") { int v = 0; - ex.read (v); + tl::from_string (s, v); r.back ().version (v); - ex.test (","); - } else if (ex.test ("mode=")) { + } else if (key == "mode") { - std::string s; - ex.read_word_or_quoted (s); ant::RulerModeConverter mc; ant::Template::ruler_mode_type mode; mc.from_string (s, mode); r.back ().set_mode (mode); - ex.test (","); - } else if (ex.test ("title=")) { + } else if (key == "title") { - std::string s; - ex.read_word_or_quoted (s); r.back ().title (s); - ex.test (","); - } else if (ex.test ("category=")) { + } else if (key == "category") { - std::string s; - ex.read_word_or_quoted (s); r.back ().category (s); - ex.test (","); - } else if (ex.test ("fmt=")) { + } else if (key == "fmt") { - std::string s; - ex.read_word_or_quoted (s); r.back ().fmt (s); - ex.test (","); - } else if (ex.test ("fmt_x=")) { + } else if (key == "fmt_x") { - std::string s; - ex.read_word_or_quoted (s); r.back ().fmt_x (s); - ex.test (","); - } else if (ex.test ("fmt_y=")) { + } else if (key == "fmt_y") { - std::string s; - ex.read_word_or_quoted (s); r.back ().fmt_y (s); - ex.test (","); - } else if (ex.test ("position=")) { + } else if (key == "position") { - std::string s; - ex.read_word (s); ant::PositionConverter pc; ant::Object::position_type pos; pc.from_string (s, pos); r.back ().set_main_position (pos); - ex.test (","); - } else if (ex.test ("xalign=")) { + } else if (key == "xalign") { - std::string s; - ex.read_word (s); ant::AlignmentConverter ac; ant::Object::alignment_type a; ac.from_string (s, a); r.back ().set_main_xalign (a); - ex.test (","); - } else if (ex.test ("yalign=")) { + } else if (key == "yalign") { - std::string s; - ex.read_word (s); ant::AlignmentConverter ac; ant::Object::alignment_type a; ac.from_string (s, a); r.back ().set_main_yalign (a); - ex.test (","); - } else if (ex.test ("xlabel_xalign=")) { + } else if (key == "xlabel_xalign") { - std::string s; - ex.read_word (s); ant::AlignmentConverter ac; ant::Object::alignment_type a; ac.from_string (s, a); r.back ().set_xlabel_xalign (a); - ex.test (","); - } else if (ex.test ("xlabel_yalign=")) { + } else if (key == "xlabel_yalign") { - std::string s; - ex.read_word (s); ant::AlignmentConverter ac; ant::Object::alignment_type a; ac.from_string (s, a); r.back ().set_xlabel_yalign (a); - ex.test (","); - } else if (ex.test ("ylabel_xalign=")) { + } else if (key == "ylabel_xalign") { - std::string s; - ex.read_word (s); ant::AlignmentConverter ac; ant::Object::alignment_type a; ac.from_string (s, a); r.back ().set_ylabel_xalign (a); - ex.test (","); - } else if (ex.test ("ylabel_yalign=")) { + } else if (key == "ylabel_yalign") { - std::string s; - ex.read_word (s); ant::AlignmentConverter ac; ant::Object::alignment_type a; ac.from_string (s, a); r.back ().set_ylabel_yalign (a); - ex.test (","); - } else if (ex.test ("style=")) { + } else if (key == "style") { - std::string s; - ex.read_word (s); ant::StyleConverter sc; ant::Object::style_type st; sc.from_string (s, st); r.back ().style (st); - ex.test (","); - } else if (ex.test ("outline=")) { + } else if (key == "outline") { - std::string s; - ex.read_word (s); ant::OutlineConverter oc; ant::Object::outline_type ot; oc.from_string (s, ot); r.back ().outline (ot); - ex.test (","); - } else if (ex.test ("snap=")) { + } else if (key == "snap") { bool f = false; - ex.read (f); + tl::from_string (s, f); r.back ().snap (f); - ex.test (","); - } else if (ex.test ("angle_constraint=")) { + } else if (key == "angle_constraint") { - std::string s; - ex.read_word (s); ant::ACConverter sc; lay::angle_constraint_type sm; sc.from_string (s, sm); r.back ().angle_constraint (sm); - ex.test (","); - } else { + } + + ex.test (","); + + if (ex.test (";")) { - ex.expect (";"); r.push_back (Template ()); r.back ().version (0); From ffe372200103b4dbdb263a04498d2469e479d162 Mon Sep 17 00:00:00 2001 From: "Koefferlein Matthias (IFAG DES TCP FLP)" Date: Fri, 9 Dec 2022 16:26:21 +0100 Subject: [PATCH 03/10] Better backward compatibility for ruler configuration --- src/ant/ant/antPlugin.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ant/ant/antPlugin.cc b/src/ant/ant/antPlugin.cc index 2c19ec65e..360e2769a 100644 --- a/src/ant/ant/antPlugin.cc +++ b/src/ant/ant/antPlugin.cc @@ -210,7 +210,7 @@ PluginDeclaration::initialized (lay::Dispatcher *root) // This provides a migration path from earlier versions (not having templates) to recent ones. std::map cat_names; for (auto i = m_templates.begin (); i != m_templates.end (); ++i) { - if (! i->category ().empty ()) { + if (! i->category ().empty () || i->category ().find ("_") == 0) { cat_names.insert (std::make_pair (i->category (), i.operator-> ())); } } From 78383c88f36d397b30229585078a68a6d27a8b42 Mon Sep 17 00:00:00 2001 From: "Koefferlein Matthias (IFAG DES TCP FLP)" Date: Fri, 9 Dec 2022 16:33:02 +0100 Subject: [PATCH 04/10] Grml .. fixed implementation of previous commit --- src/ant/ant/antPlugin.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ant/ant/antPlugin.cc b/src/ant/ant/antPlugin.cc index 360e2769a..4e9ac5cd0 100644 --- a/src/ant/ant/antPlugin.cc +++ b/src/ant/ant/antPlugin.cc @@ -210,7 +210,7 @@ PluginDeclaration::initialized (lay::Dispatcher *root) // This provides a migration path from earlier versions (not having templates) to recent ones. std::map cat_names; for (auto i = m_templates.begin (); i != m_templates.end (); ++i) { - if (! i->category ().empty () || i->category ().find ("_") == 0) { + if (i->category ().find ("_") == 0) { cat_names.insert (std::make_pair (i->category (), i.operator-> ())); } } From 048f7a0bffdb617f7bc87232d0f80dd279496f57 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 9 Dec 2022 19:04:01 +0100 Subject: [PATCH 05/10] Fixed unit tests --- testdata/ruby/antTest.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testdata/ruby/antTest.rb b/testdata/ruby/antTest.rb index 34677cd68..b5706f98b 100644 --- a/testdata/ruby/antTest.rb +++ b/testdata/ruby/antTest.rb @@ -626,7 +626,7 @@ class Ant_TestClass < TestBase def test_5 lv = RBA::LayoutView::new - lv.set_config("ruler-templates", "mode=normal,title=Ruler,category=_ruler,fmt=$D,fmt_x=$X,fmt_y=$Y,position=auto,xalign=auto,yalign=auto,xlabel_xalign=auto,xlabel_yalign=auto,ylabel_xalign=auto,ylabel_yalign=auto,style=ruler,outline=diag,snap=true,angle_constraint=global") + lv.set_config("ruler-templates-v2", "mode=normal,title=Ruler,category=_ruler,fmt=$D,fmt_x=$X,fmt_y=$Y,position=auto,xalign=auto,yalign=auto,xlabel_xalign=auto,xlabel_yalign=auto,ylabel_xalign=auto,ylabel_yalign=auto,style=ruler,outline=diag,snap=true,angle_constraint=global") tpl = lv.annotation_templates assert_equal(tpl.size, 1) From 88e960b7cfc986a5753cce326da17f959fee0617 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 9 Dec 2022 22:31:13 +0100 Subject: [PATCH 06/10] Regenerating doc. --- src/doc/doc/about/drc_ref_layer.xml | 72 +++++++++++++--------- src/doc/doc/manual/drc_runsets.xml | 8 ++- src/drc/drc/built-in-macros/_drc_engine.rb | 1 - 3 files changed, 49 insertions(+), 32 deletions(-) diff --git a/src/doc/doc/about/drc_ref_layer.xml b/src/doc/doc/about/drc_ref_layer.xml index 10321b4c6..b38c0543a 100644 --- a/src/doc/doc/about/drc_ref_layer.xml +++ b/src/doc/doc/about/drc_ref_layer.xml @@ -1351,34 +1351,6 @@ The following image shows the effect of the "in" method (input1: red, input2: bl

This method is equivalent to calling in and not_in, but more efficient as it delivers both results in a single call. -

-This method is available for polygon, text and edge layers. Edges can be selected -with respect to other edges or polygons. Texts can be selected with respect to -polygons. Polygons can be selected with respect to edges, texts and other polygons. -

-The following image shows the effect of the "interacting" method (input1: red, input2: blue): -

- - - - -
-

-If a single count is given, shapes from self are selected only if they do interact at least with the given -number of (different) shapes from the other layer. If a min and max count is given, shapes from -self are selected only if they interact with min_count or more, but a maximum of max_count different shapes -from the other layer. Two polygons overlapping or touching at two locations are counted as single interactions. -

- - - - - - - - - -

"insert" - Inserts one or many objects into the layer

@@ -1486,6 +1458,50 @@ method computing both inside and outside part in a single call.

+

"interacting" - Selects shapes or regions of self which touch or overlap shapes from the other region

+ +

Usage:

+
    +
  • layer.interacting(other)
  • +
  • layer.interacting(other, min_count)
  • +
  • layer.interacting(other, min_count, max_count)
  • +
  • layer.interacting(other, min_count .. max_count)
  • +
+

+This method selects all shapes or regions from self which touch or overlap shapes from the other +region. Unless self is in raw mode (see raw), coherent regions are selected from self, +otherwise individual shapes are selected. +It returns a new layer containing the selected shapes. A version which modifies self +is select_interacting. +

+This method is available for polygon, text and edge layers. Edges can be selected +with respect to other edges or polygons. Texts can be selected with respect to +polygons. Polygons can be selected with respect to edges, texts and other polygons. +

+The following image shows the effect of the "interacting" method (input1: red, input2: blue): +

+ + + + +
+

+If a single count is given, shapes from self are selected only if they do interact at least with the given +number of (different) shapes from the other layer. If a min and max count is given, shapes from +self are selected only if they interact with min_count or more, but a maximum of max_count different shapes +from the other layer. Two polygons overlapping or touching at two locations are counted as single interactions. +

+ + + + + + + + + +
+

"intersections" - Returns the intersection points of intersecting edge segments for two edge collections

Usage:

diff --git a/src/doc/doc/manual/drc_runsets.xml b/src/doc/doc/manual/drc_runsets.xml index 64b5422e8..cd37d3e2b 100644 --- a/src/doc/doc/manual/drc_runsets.xml +++ b/src/doc/doc/manual/drc_runsets.xml @@ -419,18 +419,20 @@ output(w, "width violations")
merged
  • Shape selections:
    + covering, in, inside, interacting, - pull_interacting, outside, - touching, overlapping
    + pull_inside, + pull_interacting, + pull_outside, These methods are available as in-place operations as well:
    + select_covering, select_interacting, select_inside, select_outside, - select_touching, select_overlapping
  • Filters:
    diff --git a/src/drc/drc/built-in-macros/_drc_engine.rb b/src/drc/drc/built-in-macros/_drc_engine.rb index 9a873be62..b4b850407 100644 --- a/src/drc/drc/built-in-macros/_drc_engine.rb +++ b/src/drc/drc/built-in-macros/_drc_engine.rb @@ -1917,7 +1917,6 @@ CODE select_not_overlapping select_outside select_overlapping - select_touching size sized smoothed From 3e9d66ea6d54d6f7f4255ea489e521c7ee157b2d Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 9 Dec 2022 23:21:09 +0100 Subject: [PATCH 07/10] Doc fixes --- scripts/drc_lvs_doc/extract_doc.rb | 6 +- src/doc/doc/about/drc_ref_drc.xml | 2 +- src/doc/doc/about/drc_ref_global.xml | 56 ++++++------ src/doc/doc/about/drc_ref_layer.xml | 40 ++++----- src/doc/doc/about/drc_ref_netter.xml | 4 +- src/doc/doc/manual/drc_runsets.xml | 14 +-- src/doc/doc/manual/lvs_compare.xml | 2 +- src/doc/doc/manual/lvs_io.xml | 2 +- .../drc/built-in-macros/_drc_complex_ops.rb | 2 +- .../built-in-macros/_drc_cop_integration.rb | 88 +++++++++---------- src/drc/drc/built-in-macros/_drc_layer.rb | 6 +- src/drc/drc/built-in-macros/_drc_netter.rb | 4 +- 12 files changed, 114 insertions(+), 112 deletions(-) diff --git a/scripts/drc_lvs_doc/extract_doc.rb b/scripts/drc_lvs_doc/extract_doc.rb index cbbc4f42f..533c5ea4f 100755 --- a/scripts/drc_lvs_doc/extract_doc.rb +++ b/scripts/drc_lvs_doc/extract_doc.rb @@ -51,9 +51,9 @@ def escape(mod, s) s.gsub("&", "&"). gsub("<", "<"). gsub(">", ">"). - gsub(/\\\\([\w:#]+)/) { create_link(mod, $1) }. - gsub(/\\([\w:#]+)/) { create_ref(mod, $1) }. - gsub(/RBA::([\w#]+)/) { create_class_doc_ref($1) } + gsub(/\\\\([\w:#\?]+)/) { create_link(mod, $1) }. + gsub(/\\([\w:#\?]+)/) { create_ref(mod, $1) }. + gsub(/RBA::([\w#\?]+)/) { create_class_doc_ref($1) } end def unescape(s) diff --git a/src/doc/doc/about/drc_ref_drc.xml b/src/doc/doc/about/drc_ref_drc.xml index add2a025c..06e59d450 100644 --- a/src/doc/doc/about/drc_ref_drc.xml +++ b/src/doc/doc/about/drc_ref_drc.xml @@ -36,7 +36,6 @@ The following global functions are relevant for the DRC expressions:
  • bbox_max
  • bbox_min
  • bbox_width
  • -
  • case
  • corners
  • covering
  • enc
  • @@ -71,6 +70,7 @@ The following global functions are relevant for the DRC expressions:
  • smoothed
  • space
  • squares
  • +
  • switch
  • width
  • with_holes
  • diff --git a/src/doc/doc/about/drc_ref_global.xml b/src/doc/doc/about/drc_ref_global.xml index 33d2ca14b..a42cc77f6 100644 --- a/src/doc/doc/about/drc_ref_global.xml +++ b/src/doc/doc/about/drc_ref_global.xml @@ -16,7 +16,7 @@

    "angle" represents the edge orientation filter on the primary shape edges in -DRC expressions (see Layer#drc and DRC#angle for more details). In this context, +DRC expressions (see Layer#drc and angle for more details). In this context, the operation acts similar to Layer#with_angle.

    "antenna_check" - Performs an antenna check

    @@ -41,7 +41,7 @@ is equivalent to "layer.area" (see
    Layer polygons in the layer.

    Without a layer argument, "area" represents an area filter for primary shapes in -DRC expressions (see Layer#drc and DRC#area for more details). +global expressions (see Layer#drc and area for more details).

    "area_ratio" - Selects primary shapes based on the ratio of bounding box and polygon area

    @@ -50,7 +50,7 @@ Without a layer argument, "area" represents an area filter for primary shapes in
  • area_ratio (in condition)
  • -See Layer#drc, area_ratio and DRC#area_ratio for more details. +See Layer#drc, area_ratio and area_ratio for more details.

    "bbox_aspect_ratio" - Selects primary shapes based on the aspect ratio of their bounding boxes

    @@ -59,7 +59,7 @@ See
    Layer#drc,
  • bbox_aspect_ratio (in condition)
  • -See Layer#drc, bbox_aspect_ratio and DRC#bbox_aspect_ratio for more details. +See Layer#drc, bbox_aspect_ratio and bbox_aspect_ratio for more details.

    "bbox_height" - Selects primary shapes based on their bounding box height

    @@ -73,7 +73,7 @@ bounding box height satisfies the condition. Conditions may be written as arithm against numeric values. For example, "bbox_height < 2.0" will select all primary shapes whose bounding box height is less than 2 micrometers. See
    Layer#drc for more details about comparison specs. Plain "bbox_min" is equivalent to "primary.bbox_min" - i.e. it is used on the primary -shape. Also see DRC#bbox_min. +shape. Also see bbox_min.

    "bbox_max" - Selects primary shapes based on their bounding box height or width, whichever is larger

    @@ -82,7 +82,7 @@ shape. Also see
    DRC#bbox_min.
  • bbox_max (in condition)
  • -See Layer#drc, bbox_max and DRC#bbox_max for more details. +See Layer#drc, bbox_max and bbox_max for more details.

    "bbox_min" - Selects primary shapes based on their bounding box height or width, whichever is smaller

    @@ -91,7 +91,7 @@ See
    Layer#drc, bb
  • bbox_max (in condition)
  • -See Layer#drc, bbox_min and DRC#bbox_min for more details. +See Layer#drc, bbox_min and bbox_min for more details.

    "bbox_width" - Selects primary shapes based on their bounding box width

    @@ -100,7 +100,7 @@ See
    Layer#drc, bb
  • bbox_max (in condition)
  • -See Layer#drc, bbox_height and DRC#bbox_height for more details. +See Layer#drc, bbox_height and bbox_height for more details.

    "bjt3" - Supplies the BJT3 transistor extractor class

    @@ -359,7 +359,7 @@ See
    Netter#connect_implicit This function can be used with a layer argument. In this case it is equivalent to "layer.corners" (see Layer#corners). Without a layer argument, "corners" represents the corner generator/filter in primary shapes for -DRC expressions (see Layer#drc and DRC#corners for more details). +DRC expressions (see Layer#drc and corners for more details).

    Like the layer-based version, the "corners" operator accepts the output type option: "as_dots" for dot-like edges, "as_boxes" for @@ -380,7 +380,7 @@ This operator represents the selector of primary shapes which entirely cover shapes from the other layer. This version can be put into a condition indicating how many shapes of the other layer need to be covered. Use this operator within DRC expressions (also see Layer#drc). If can be used -as method to an expression. See there for more details: DRC#covering. +as method to an expression. See there for more details: covering.

    "dbu" - Gets or sets the database unit to use

    @@ -721,7 +721,7 @@ See
    Source#extent for a descripti This function can be used with a layer argument. In this case it is equivalent to "layer.extent_refs" (see Layer#extent_refs). Without a layer argument, "extent_refs" represents the partial extents extractor on primary shapes within -DRC expressions (see Layer#drc and DRC#extent_refs for more details). +DRC expressions (see Layer#drc and extent_refs for more details).

    "extents" - Returns the bounding box of each input object

    @@ -734,7 +734,7 @@ argument, "extent_refs" represents the partial extents extractor on primary shap This function can be used with a layer argument. In this case it is equivalent to "layer.extents" (see
    Layer#extents). Without a layer argument, "extents" represents the extents generator on primary shapes within -DRC expressions (see Layer#drc and DRC#extents for more details). +DRC expressions (see Layer#drc and extents for more details).

    "extract_devices" - Extracts devices for a given device extractor and device layer selection

    @@ -813,7 +813,7 @@ argument, "holes" represents a hole extractor for primary shapes in This function can be used with a layer argument. In this case it is equivalent to "layer.hulls" (see
    Layer#hulls). Without a layer argument, "hulls" represents a hull contour extractor for primary shapes in -DRC expressions (see Layer#drc and DRC#hulls for more details). +DRC expressions (see Layer#drc and hulls for more details).

    "if_all" - Evaluates to the primary shape when all condition expression results are non-empty

    @@ -888,7 +888,7 @@ this method. This operator represents the selector of primary shapes which are inside shapes from the other layer. Use this operator within
    DRC expressions (also see Layer#drc). If can be used -as method to an expression. See there for more details: DRC#inside. +as method to an expression. See there for more details: inside.

    "interacting" - Selects shapes interacting with other shapes

    @@ -901,7 +901,7 @@ This operator represents the selector of primary shapes which interact with shapes from the other layer. This version can be put into a condition indicating how many shapes of the other layer need to be covered. Use this operator within
    DRC expressions (also see Layer#drc). If can be used -as method to an expression. See there for more details: DRC#interacting. +as method to an expression. See there for more details: interacting.

    "is_deep?" - Returns true, if in deep mode

    @@ -1049,7 +1049,7 @@ For further methods on the source object see
    Layer#length). Without a layer argument, "length" represents the edge length filter on the primary shape edges in -DRC expressions (see Layer#drc and DRC#length for more details). In this context, +DRC expressions (see Layer#drc and length for more details). In this context, the operation acts similar to Layer#with_length.

    "log" - Outputs as message to the logger window

    @@ -1136,7 +1136,7 @@ See also
    max_area_ratio for the other option affec This function can be used with a layer argument. In this case it is equivalent to "layer.middle" (see Layer#middle). Without a layer argument, "middle" represents the bounding box center marker generator on primary shapes within -DRC expressions (see Layer#drc and DRC#middle for more details). +DRC expressions (see Layer#drc and middle for more details).

    "mos3" - Supplies the MOS3 transistor extractor class

    @@ -1267,7 +1267,7 @@ layout if is report database. This operator represents the selector of primary shapes which are outside shapes from the other layer. Use this operator within
    DRC expressions (also see Layer#drc). If can be used -as method to an expression. See there for more details: DRC#outside. +as method to an expression. See there for more details: outside.

    "overlap" - Performs an overlap check

    @@ -1330,7 +1330,7 @@ This operator represents the selector of primary shapes which overlap shapes from the other layer. This version can be put into a condition indicating how many shapes of the other layer need to be covered. Use this operator within
    DRC expressions (also see Layer#drc). If can be used -as method to an expression. See there for more details: DRC#overlapping. +as method to an expression. See there for more details: overlapping.

    "p" - Creates a point object

    @@ -1370,7 +1370,7 @@ is equivalent to "layer.perimeter" (see
    DRC expressions (see Layer#drc and DRC#perimeter for more details). +DRC expressions (see Layer#drc and perimeter for more details).

    "polygon" - Creates a polygon object

    @@ -1424,7 +1424,7 @@ is called on. This function can be used with a layer argument. In this case it is equivalent to "layer.rectangles" (see
    Layer#rectangles). Without a layer argument, "rectangles" represents the rectangles filter for primary shapes in -DRC expressions (see Layer#drc and DRC#rectangles for more details). +DRC expressions (see Layer#drc and rectangles for more details).

    "rectilinear" - Selects all polygons which are rectilinear

    @@ -1437,7 +1437,7 @@ argument, "rectangles" represents the rectangles filter for primary shapes in This function can be used with a layer argument. In this case it is equivalent to "layer.rectilinear" (see
    Layer#rectilinear). Without a layer argument, "rectilinear" represents the rectilinear polygons filter for primary shapes in -DRC expressions (see Layer#drc and DRC#rectilinear for more details). +DRC expressions (see Layer#drc and rectilinear for more details).

    "region_overlap" - Specifies region selected input in "overlap mode"

    @@ -1486,7 +1486,7 @@ To remove this condition, call "region_touch" without any arguments.
  • relative_height (in condition)
  • -See Layer#drc, relative_height and DRC#relative_height for more details. +See Layer#drc, relative_height and relative_height for more details.

    "report" - Specifies a report database for output

    @@ -1570,7 +1570,7 @@ about this extractor. This function can be used with a layer argument. In this case it is equivalent to "layer.rounded_corners" (see
    Layer#rounded_corners). Without a layer argument, "rounded_corners" represents the corner rounding algorithm on primary shapes within -DRC expressions (see Layer#drc and DRC#rounded_corners for more details). +DRC expressions (see Layer#drc and rounded_corners for more details).

    "secondary" - Provides secondary input for the "drc" universal DRC function

    @@ -1703,7 +1703,7 @@ This function is equivalent to "verbose(false)" (see
    verbose< This function can be used with a layer argument. In this case it is equivalent to "layer.sized" (see Layer#sized). Without a layer argument, "sized" represents the polygon sizer on primary shapes within -DRC expressions (see Layer#drc and DRC#sized for more details). +DRC expressions (see Layer#drc and sized for more details).

    "smoothed" - Applies smoothing

    @@ -1716,7 +1716,7 @@ argument, "sized" represents the polygon sizer on primary shapes within This function can be used with a layer argument. In this case it is equivalent to "layer.smoothed" (see
    Layer#smoothed). Without a layer argument, "smoothed" represents the polygon smoother on primary shapes within -DRC expressions (see Layer#drc and DRC#smoothed for more details). +DRC expressions (see Layer#drc and smoothed for more details).

    "source" - Specifies a source layout

    @@ -1815,7 +1815,7 @@ See
    enclosing for more details about the various ways t This function can be used with a layer argument. In this case it is equivalent to "layer.squares" (see Layer#squares). Without a layer argument, "squares" represents the rectangles filter for primary shapes in -DRC expressions (see Layer#drc and DRC#squares for more details). +DRC expressions (see Layer#drc and squares for more details).

    "switch" - A conditional selector for the "drc" universal DRC function

    @@ -2056,7 +2056,7 @@ shape.

    "with_holes" represents a polygon selector for DRC expressions selecting polygons of the primary by their number of holes -(see Layer#drc and DRC#with_holes for more details). +(see Layer#drc and with_holes for more details).

    "write_spice" - Defines SPICE output format (with options)

    diff --git a/src/doc/doc/about/drc_ref_layer.xml b/src/doc/doc/about/drc_ref_layer.xml index b38c0543a..c9051e549 100644 --- a/src/doc/doc/about/drc_ref_layer.xml +++ b/src/doc/doc/about/drc_ref_layer.xml @@ -198,7 +198,7 @@ and EdgePair objects are accepted too and objects. Region, Edges and EdgePair objects are accepted as well and the corresponding content of that collections is inserted into the output layer.

    -Other versions are available that allow translation of objects into other types (collect_to_polygons, +Other versions are available that allow translation of objects into other types (collect_to_region, collect_to_edges and collect_to_edge_pairs).

    Because this method executes inside the interpreter, it's inherently slow. Tiling does not @@ -461,11 +461,11 @@ For the conversion of edges, edge pairs and polygons into other types, these methods are provided:

    The following example decomposes the primary polygons into edges: @@ -506,8 +506,8 @@ The "drc" framework supports the following edge and edge/polygon operations:

    Filters

    @@ -515,14 +515,14 @@ The "drc" framework supports the following edge and edge/polygon operations: Filter operators select input polygons or edges based on their properties. These filters are provided:

    For example, to select polygons with an area larger than one square micrometer, use: @@ -672,7 +672,7 @@ from the primary, it's neighborhood (secondaries) or from deriving shape sets. Obviously the primary is a simple one: it consists of a single shape, because this is how the loop operates. Derived shape sets however can be more complex. "Quantifiers" allow assessing properties of the complete, per-primary shape -set. A simple one is "DRC#count" which checks if the number of shapes within +set. A simple one is "count" which checks if the number of shapes within a shape set is within a given range.

    Obviously, "primary.count == 1" is always true. So using "count" primaries isn't @@ -1274,7 +1274,7 @@ regions or edges, with each cell counting once. A high count to hier_count (flat to hierarchical) ratio is an indication of a good hierarchical compression. "hier_count" applies only to original layers without clip regions or -cell filters and to layers in deep mode. Otherwise, hier_count gives +cell filters and to layers in deep mode. Otherwise, hier_count gives the same value than count.

    "holes" - Selects all polygon holes from the input

    @@ -1557,7 +1557,7 @@ See
    clean for a discussion of the clean state. This method will return true, if the polygons of this layer are merged, i.e. they don't overlap and form single continuous polygons. In clean mode, this is ensured implicitly. In raw mode (see raw), -merging can be achieved by using the merge method. is_merged? +merging can be achieved by using the merge method. is_merged? tells, whether calling merge is necessary.

    "is_raw?" - Returns true, if the layer is raw state

    @@ -2050,7 +2050,7 @@ The following image shows the effect of the notch check: Returns the parts of the polygons which are not orientable (i.e. "8" configuration) or self-overlapping. Merged semantics does not apply for this method. Always the raw polygons are taken (see
    raw).

    -The odd_polygons check is not available in deep mode currently. See deep_reject_odd_polygons for +The odd_polygons check is not available in deep mode currently. See deep_reject_odd_polygons for an alternative.

    "ongrid" - Checks for on-grid vertices

    diff --git a/src/doc/doc/about/drc_ref_netter.xml b/src/doc/doc/about/drc_ref_netter.xml index 7f4302dae..983268f9f 100644 --- a/src/doc/doc/about/drc_ref_netter.xml +++ b/src/doc/doc/about/drc_ref_netter.xml @@ -230,8 +230,8 @@ on these layers touching or overlapping other shapes on these layers will form bigger, electrically connected areas.

    Texts will be used to assign net names to the nets. The preferred -method is to use labels to create a text layer from a design -layer. When using input, text labels are carried implicitly +method is to use labels to create a text layer from a design +layer. When using input, text labels are carried implicitly with the polygons but at the cost of small dummy shapes (2x2 DBU marker polygons) and limited functionality.

    diff --git a/src/doc/doc/manual/drc_runsets.xml b/src/doc/doc/manual/drc_runsets.xml index cd37d3e2b..c73994011 100644 --- a/src/doc/doc/manual/drc_runsets.xml +++ b/src/doc/doc/manual/drc_runsets.xml @@ -396,7 +396,8 @@ output(w, "width violations") separation (sep), notch, isolated (iso), - enclosure (enc), + enclosing (enc), + enclosed, overlap

  • Universal DRC (see below):
    @@ -427,7 +428,7 @@ output(w, "width violations") overlapping
    pull_inside, pull_interacting, - pull_outside, + pull_overlapping, These methods are available as in-place operations as well:
    select_covering, select_interacting, @@ -608,10 +609,10 @@ output(w, "width violations")
    • Boolean AND with a polygon layer: will select those texts which are inside or at the border of a polygon. - interact is a synonym for this operation.
    • + interact is a synonym for this operation.
    • Boolean NOT with a polygon layer: will select those texts which are outside of any polygon. - not_interact is a synonym for this operation.
    • + not_interact is a synonym for this operation.
    • As second layer for region interact: this way, polygons can be selected which are tagged with certain texts.
    • Text filtering by string: texts can be filtered either @@ -737,7 +738,8 @@ overlaps = layer.size(0.2).raw.merged(2) separation (sep), notch, isolated (iso), - enclosure (enc) or + enclosing (enc) or + enclosed or overlap. Shielding is turned off using the "transparent" option or turned on using "shielded". The latter is only for clarity, but is not required as shielding is enabled by default. @@ -833,7 +835,7 @@ overlaps = layer.size(0.2).raw.merged(2)

    - "measurement" is "width", "notch", "isolated" ("iso"), "separation" ("sep"), "overlap" or "enclosure" ("enc"). + "measurement" is "width", "notch", "isolated" ("iso"), "separation" ("sep"), "overlap", "enclosed" or "enclosuring" ("enc"). The last three checks are two-layer checks which require a second layer. The second layer is specified together with the measurement like this:

    diff --git a/src/doc/doc/manual/lvs_compare.xml b/src/doc/doc/manual/lvs_compare.xml index 5593ddddc..f58319310 100644 --- a/src/doc/doc/manual/lvs_compare.xml +++ b/src/doc/doc/manual/lvs_compare.xml @@ -15,7 +15,7 @@ connectivity (connect, connect_global, connect_implicit) and - provided a reference netlist (schematic), + provided a reference netlist (schematic), this function will perform the actual compare:

    diff --git a/src/doc/doc/manual/lvs_io.xml b/src/doc/doc/manual/lvs_io.xml index 3e66a3624..3cc347f56 100644 --- a/src/doc/doc/manual/lvs_io.xml +++ b/src/doc/doc/manual/lvs_io.xml @@ -148,7 +148,7 @@ X$2 VSS IN OUT SUBSTRATE NMOS PARAMS: L=0.25 W=0.9 AS=0.405 AD=0.405 PS=2.7

    The main use case for reading netlists is for comparison in LVS. Reference netlists are read with the "schematic" function - (see schematic): + (see schematic):

    schematic("inverter.cir")
    diff --git a/src/drc/drc/built-in-macros/_drc_complex_ops.rb b/src/drc/drc/built-in-macros/_drc_complex_ops.rb index 5014cf5ef..8e4fbf4b6 100644 --- a/src/drc/drc/built-in-macros/_drc_complex_ops.rb +++ b/src/drc/drc/built-in-macros/_drc_complex_ops.rb @@ -35,7 +35,6 @@ module DRC # @li \global#bbox_max @/li # @li \global#bbox_min @/li # @li \global#bbox_width @/li -# @li \global#case @/li # @li \global#corners @/li # @li \global#covering @/li # @li \global#enc @/li @@ -70,6 +69,7 @@ module DRC # @li \global#smoothed @/li # @li \global#space @/li # @li \global#squares @/li +# @li \global#switch @/li # @li \global#width @/li # @li \global#with_holes @/li # @/ul diff --git a/src/drc/drc/built-in-macros/_drc_cop_integration.rb b/src/drc/drc/built-in-macros/_drc_cop_integration.rb index 2f47e052f..2cf5b9fa2 100644 --- a/src/drc/drc/built-in-macros/_drc_cop_integration.rb +++ b/src/drc/drc/built-in-macros/_drc_cop_integration.rb @@ -129,11 +129,11 @@ module DRC # methods are provided: # # @ul - # @li "\DRC#polygons": converts edge pairs to polygons @/li - # @li "\DRC#extended", "\DRC#extended_in", "\DRC#extended_out": converts edges to polygons @/li - # @li "\DRC#first_edges", \DRC#second_edges": extracts edges from edge pairs @/li - # @li "\DRC#edges": decomposes edge pairs and polygons into edges @/li - # @li "\DRC#corners": can extract corners from polygons @/li + # @li "\global#polygons": converts edge pairs to polygons @/li + # @li "\global#extended", "\global#extended_in", "\global#extended_out": converts edges to polygons @/li + # @li "\global#first_edges", \global#second_edges": extracts edges from edge pairs @/li + # @li "\global#edges": decomposes edge pairs and polygons into edges @/li + # @li "\global#corners": can extract corners from polygons @/li # @/ul # # The following example decomposes the primary polygons into edges: @@ -174,8 +174,8 @@ module DRC # # @ul # @li Edge vs. edge and edge vs. polygon booleans @/li - # @li Edge vs. polygon interactions ("\DRC#interacting", "\DRC#overlapping") @/li - # @li Edge sampling ("\DRC#start_segments", "\DRC#centers", "\DRC#end_segments") @/li + # @li Edge vs. polygon interactions ("\global#interacting", "\global#overlapping") @/li + # @li Edge sampling ("\global#start_segments", "\global#centers", "\global#end_segments") @/li # @/ul # # @h3 Filters @/h3 @@ -183,14 +183,14 @@ module DRC # Filter operators select input polygons or edges based on their properties. These filters are provided: # # @ul - # @li "\DRC#area": selects polygons based on their area @/li - # @li "\DRC#perimeter": selects polygons based on their perimeter @/li - # @li "\DRC#area_ratio": selects polygons based on their bounding box to polygon area ratio @/li - # @li "\DRC#bbox_aspect_ratio": selects polygons based on their bounding box aspect ratio @/li - # @li "\DRC#relative_height": selects polygons based on their relative height @/li - # @li "\DRC#bbox_min", "\global#bbox_max", "\global#bbox_width", "\global#bbox_height": selects polygons based on their bounding box properties @/li - # @li "\DRC#length": selects edges based on their length @/li - # @li "\DRC#angle": selects edges based on their orientation @/li + # @li "\global#area": selects polygons based on their area @/li + # @li "\global#perimeter": selects polygons based on their perimeter @/li + # @li "\global#area_ratio": selects polygons based on their bounding box to polygon area ratio @/li + # @li "\global#bbox_aspect_ratio": selects polygons based on their bounding box aspect ratio @/li + # @li "\global#relative_height": selects polygons based on their relative height @/li + # @li "\global#bbox_min", "\global#bbox_max", "\global#bbox_width", "\global#bbox_height": selects polygons based on their bounding box properties @/li + # @li "\global#length": selects edges based on their length @/li + # @li "\global#angle": selects edges based on their orientation @/li # @/ul # # For example, to select polygons with an area larger than one square micrometer, use: @@ -340,7 +340,7 @@ module DRC # Obviously the primary is a simple one: it consists of a single shape, because # this is how the loop operates. Derived shape sets however can be more complex. # "Quantifiers" allow assessing properties of the complete, per-primary shape - # set. A simple one is "\DRC#count" which checks if the number of shapes within + # set. A simple one is "\global#count" which checks if the number of shapes within # a shape set is within a given range. # # Obviously, "primary.count == 1" is always true. So using "count" primaries isn't @@ -596,49 +596,49 @@ CODE # against numeric values. For example, "bbox_height < 2.0" will select all primary shapes whose # bounding box height is less than 2 micrometers. See \Layer#drc for more details about comparison # specs. Plain "bbox_min" is equivalent to "primary.bbox_min" - i.e. it is used on the primary - # shape. Also see \DRC#bbox_min. + # shape. Also see \global#bbox_min. # %DRC% # @name bbox_width # @brief Selects primary shapes based on their bounding box width # @synopsis bbox_max (in condition) # - # See \Layer#drc, \bbox_height and \DRC#bbox_height for more details. + # See \Layer#drc, \bbox_height and \global#bbox_height for more details. # %DRC% # @name bbox_max # @brief Selects primary shapes based on their bounding box height or width, whichever is larger # @synopsis bbox_max (in condition) # - # See \Layer#drc, \bbox_max and \DRC#bbox_max for more details. + # See \Layer#drc, \bbox_max and \global#bbox_max for more details. # %DRC% # @name bbox_min # @brief Selects primary shapes based on their bounding box height or width, whichever is smaller # @synopsis bbox_max (in condition) # - # See \Layer#drc, \bbox_min and \DRC#bbox_min for more details. + # See \Layer#drc, \bbox_min and \global#bbox_min for more details. # %DRC% # @name bbox_aspect_ratio # @brief Selects primary shapes based on the aspect ratio of their bounding boxes # @synopsis bbox_aspect_ratio (in condition) # - # See \Layer#drc, \bbox_aspect_ratio and \DRC#bbox_aspect_ratio for more details. + # See \Layer#drc, \bbox_aspect_ratio and \global#bbox_aspect_ratio for more details. # %DRC% # @name relative_height # @brief Selects primary shapes based on the ratio of height and width of their bounding boxes # @synopsis relative_height (in condition) # - # See \Layer#drc, \relative_height and \DRC#relative_height for more details. + # See \Layer#drc, \relative_height and \global#relative_height for more details. # %DRC% # @name area_ratio # @brief Selects primary shapes based on the ratio of bounding box and polygon area # @synopsis area_ratio (in condition) # - # See \Layer#drc, \area_ratio and \DRC#area_ratio for more details. + # See \Layer#drc, \area_ratio and \global#area_ratio for more details. %w( bbox_height @@ -669,7 +669,7 @@ CODE # polygons in the layer. # # Without a layer argument, "area" represents an area filter for primary shapes in - # \DRC# expressions (see \Layer#drc and \DRC#area for more details). + # \global# expressions (see \Layer#drc and \global#area for more details). # %DRC% # @name hulls @@ -680,7 +680,7 @@ CODE # This function can be used with a layer argument. In this case it # is equivalent to "layer.hulls" (see \Layer#hulls). Without a layer # argument, "hulls" represents a hull contour extractor for primary shapes in - # \DRC# expressions (see \Layer#drc and \DRC#hulls for more details). + # \DRC# expressions (see \Layer#drc and \global#hulls for more details). # %DRC% # @name holes @@ -704,7 +704,7 @@ CODE # total perimeter of all polygons in the layer. # # Without a layer argument, "perimeter" represents a perimeter filter for primary shapes in - # \DRC# expressions (see \Layer#drc and \DRC#perimeter for more details). + # \DRC# expressions (see \Layer#drc and \global#perimeter for more details). # %DRC% # @name rectangles @@ -715,7 +715,7 @@ CODE # This function can be used with a layer argument. In this case it # is equivalent to "layer.rectangles" (see \Layer#rectangles). Without a layer # argument, "rectangles" represents the rectangles filter for primary shapes in - # \DRC# expressions (see \Layer#drc and \DRC#rectangles for more details). + # \DRC# expressions (see \Layer#drc and \global#rectangles for more details). # %DRC% # @name squares @@ -726,7 +726,7 @@ CODE # This function can be used with a layer argument. In this case it # is equivalent to "layer.squares" (see \Layer#squares). Without a layer # argument, "squares" represents the rectangles filter for primary shapes in - # \DRC# expressions (see \Layer#drc and \DRC#squares for more details). + # \DRC# expressions (see \Layer#drc and \global#squares for more details). # %DRC% # @name rectilinear @@ -737,7 +737,7 @@ CODE # This function can be used with a layer argument. In this case it # is equivalent to "layer.rectilinear" (see \Layer#rectilinear). Without a layer # argument, "rectilinear" represents the rectilinear polygons filter for primary shapes in - # \DRC# expressions (see \Layer#drc and \DRC#rectilinear for more details). + # \DRC# expressions (see \Layer#drc and \global#rectilinear for more details). # %DRC% # @name length (in condition) @@ -748,7 +748,7 @@ CODE # This function can be used with a layer argument. In this case it # is equivalent to "layer.length" (see \Layer#length). Without a layer # argument, "length" represents the edge length filter on the primary shape edges in - # \DRC# expressions (see \Layer#drc and \DRC#length for more details). In this context, + # \DRC# expressions (see \Layer#drc and \global#length for more details). In this context, # the operation acts similar to \Layer#with_length. # %DRC% @@ -757,7 +757,7 @@ CODE # @synopsis angle (in condition) # # "angle" represents the edge orientation filter on the primary shape edges in - # \DRC# expressions (see \Layer#drc and \DRC#angle for more details). In this context, + # \DRC# expressions (see \Layer#drc and \global#angle for more details). In this context, # the operation acts similar to \Layer#with_angle. %w( @@ -788,7 +788,7 @@ CODE # This function can be used with a layer argument. In this case it # is equivalent to "layer.corners" (see \Layer#corners). Without a layer # argument, "corners" represents the corner generator/filter in primary shapes for - # \DRC# expressions (see \Layer#drc and \DRC#corners for more details). + # \DRC# expressions (see \Layer#drc and \global#corners for more details). # # Like the layer-based version, the "corners" operator accepts the # output type option: "as_dots" for dot-like edges, "as_boxes" for @@ -812,7 +812,7 @@ CODE # This function can be used with a layer argument. In this case it # is equivalent to "layer.extent_refs" (see \Layer#extent_refs). Without a layer # argument, "extent_refs" represents the partial extents extractor on primary shapes within - # \DRC# expressions (see \Layer#drc and \DRC#extent_refs for more details). + # \DRC# expressions (see \Layer#drc and \global#extent_refs for more details). # %DRC% # @name extents @@ -823,7 +823,7 @@ CODE # This function can be used with a layer argument. In this case it # is equivalent to "layer.extents" (see \Layer#extents). Without a layer # argument, "extents" represents the extents generator on primary shapes within - # \DRC# expressions (see \Layer#drc and \DRC#extents for more details). + # \DRC# expressions (see \Layer#drc and \global#extents for more details). # %DRC% # @name middle @@ -834,7 +834,7 @@ CODE # This function can be used with a layer argument. In this case it # is equivalent to "layer.middle" (see \Layer#middle). Without a layer # argument, "middle" represents the bounding box center marker generator on primary shapes within - # \DRC# expressions (see \Layer#drc and \DRC#middle for more details). + # \DRC# expressions (see \Layer#drc and \global#middle for more details). # %DRC% # @name rounded_corners @@ -845,7 +845,7 @@ CODE # This function can be used with a layer argument. In this case it # is equivalent to "layer.rounded_corners" (see \Layer#rounded_corners). Without a layer # argument, "rounded_corners" represents the corner rounding algorithm on primary shapes within - # \DRC# expressions (see \Layer#drc and \DRC#rounded_corners for more details). + # \DRC# expressions (see \Layer#drc and \global#rounded_corners for more details). # %DRC% # @name sized @@ -858,7 +858,7 @@ CODE # This function can be used with a layer argument. In this case it # is equivalent to "layer.sized" (see \Layer#sized). Without a layer # argument, "sized" represents the polygon sizer on primary shapes within - # \DRC# expressions (see \Layer#drc and \DRC#sized for more details). + # \DRC# expressions (see \Layer#drc and \global#sized for more details). # %DRC% # @name smoothed @@ -869,7 +869,7 @@ CODE # This function can be used with a layer argument. In this case it # is equivalent to "layer.smoothed" (see \Layer#smoothed). Without a layer # argument, "smoothed" represents the polygon smoother on primary shapes within - # \DRC# expressions (see \Layer#drc and \DRC#smoothed for more details). + # \DRC# expressions (see \Layer#drc and \global#smoothed for more details). %w( extent_refs @@ -896,7 +896,7 @@ CODE # which entirely cover shapes from the other layer. This version can be put into # a condition indicating how many shapes of the other layer need to be covered. # Use this operator within \DRC# expressions (also see \Layer#drc). If can be used - # as method to an expression. See there for more details: \DRC#covering. + # as method to an expression. See there for more details: \global#covering. # %DRC% # @name interacting @@ -907,7 +907,7 @@ CODE # which interact with shapes from the other layer. This version can be put into # a condition indicating how many shapes of the other layer need to be covered. # Use this operator within \DRC# expressions (also see \Layer#drc). If can be used - # as method to an expression. See there for more details: \DRC#interacting. + # as method to an expression. See there for more details: \global#interacting. # %DRC% # @name overlapping @@ -918,7 +918,7 @@ CODE # which overlap shapes from the other layer. This version can be put into # a condition indicating how many shapes of the other layer need to be covered. # Use this operator within \DRC# expressions (also see \Layer#drc). If can be used - # as method to an expression. See there for more details: \DRC#overlapping. + # as method to an expression. See there for more details: \global#overlapping. # %DRC% # @name inside @@ -928,7 +928,7 @@ CODE # This operator represents the selector of primary shapes # which are inside shapes from the other layer. # Use this operator within \DRC# expressions (also see \Layer#drc). If can be used - # as method to an expression. See there for more details: \DRC#inside. + # as method to an expression. See there for more details: \global#inside. # %DRC% # @name outside @@ -938,7 +938,7 @@ CODE # This operator represents the selector of primary shapes # which are outside shapes from the other layer. # Use this operator within \DRC# expressions (also see \Layer#drc). If can be used - # as method to an expression. See there for more details: \DRC#outside. + # as method to an expression. See there for more details: \global#outside. %w( covering @@ -961,7 +961,7 @@ CODE # # "with_holes" represents a polygon selector for # \DRC# expressions selecting polygons of the primary by their number of holes - # (see \Layer#drc and \DRC#with_holes for more details). + # (see \Layer#drc and \global#with_holes for more details). def with_holes primary.with_holes diff --git a/src/drc/drc/built-in-macros/_drc_layer.rb b/src/drc/drc/built-in-macros/_drc_layer.rb index aef166151..af595de52 100644 --- a/src/drc/drc/built-in-macros/_drc_layer.rb +++ b/src/drc/drc/built-in-macros/_drc_layer.rb @@ -302,7 +302,7 @@ module DRC # A high \count to hier_count (flat to hierarchical) ratio is an indication # of a good hierarchical compression. # "hier_count" applies only to original layers without clip regions or - # cell filters and to layers in \deep mode. Otherwise, hier_count gives + # cell filters and to layers in \global#deep mode. Otherwise, hier_count gives # the same value than \count. def hier_count @@ -1567,7 +1567,7 @@ CODE # objects. RBA::Region, RBA::Edges and RBA::EdgePair objects are accepted as well and the corresponding # content of that collections is inserted into the output layer. # - # Other versions are available that allow translation of objects into other types (\collect_to_polygons, + # Other versions are available that allow translation of objects into other types (\collect_to_region, # \collect_to_edges and \collect_to_edge_pairs). # # Because this method executes inside the interpreter, it's inherently slow. Tiling does not @@ -1645,7 +1645,7 @@ CODE # Returns the parts of the polygons which are not orientable (i.e. "8" configuration) or self-overlapping. # Merged semantics does not apply for this method. Always the raw polygons are taken (see \raw). # - # The odd_polygons check is not available in deep mode currently. See \deep_reject_odd_polygons for + # The odd_polygons check is not available in deep mode currently. See \global#deep_reject_odd_polygons for # an alternative. def odd_polygons diff --git a/src/drc/drc/built-in-macros/_drc_netter.rb b/src/drc/drc/built-in-macros/_drc_netter.rb index 6b81ceb41..d56466183 100644 --- a/src/drc/drc/built-in-macros/_drc_netter.rb +++ b/src/drc/drc/built-in-macros/_drc_netter.rb @@ -83,8 +83,8 @@ module DRC # layers will form bigger, electrically connected areas. # # Texts will be used to assign net names to the nets. The preferred - # method is to use \labels to create a text layer from a design - # layer. When using \input, text labels are carried implicitly + # method is to use \global#labels to create a text layer from a design + # layer. When using \global#input, text labels are carried implicitly # with the polygons but at the cost of small dummy shapes (2x2 DBU # marker polygons) and limited functionality. # From 960759402029cfec1272af2bd2fb11670dff6702 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 9 Dec 2022 23:33:31 +0100 Subject: [PATCH 08/10] Doc updates --- src/doc/doc/about/drc_ref_global.xml | 22 +++---- src/doc/doc/about/drc_ref_layer.xml | 42 ++++++------ src/doc/doc/manual/drc_runsets.xml | 2 +- .../built-in-macros/_drc_cop_integration.rb | 64 +++++++++---------- 4 files changed, 65 insertions(+), 65 deletions(-) diff --git a/src/doc/doc/about/drc_ref_global.xml b/src/doc/doc/about/drc_ref_global.xml index a42cc77f6..c0f1d9966 100644 --- a/src/doc/doc/about/drc_ref_global.xml +++ b/src/doc/doc/about/drc_ref_global.xml @@ -16,7 +16,7 @@

    "angle" represents the edge orientation filter on the primary shape edges in -DRC expressions (see Layer#drc and angle for more details). In this context, +DRC expressions (see Layer#drc and DRC#angle for more details). In this context, the operation acts similar to Layer#with_angle.

    "antenna_check" - Performs an antenna check

    @@ -41,7 +41,7 @@ is equivalent to "layer.area" (see
    Layer polygons in the layer.

    Without a layer argument, "area" represents an area filter for primary shapes in -global expressions (see Layer#drc and area for more details). +global expressions (see Layer#drc and DRC#area for more details).

    "area_ratio" - Selects primary shapes based on the ratio of bounding box and polygon area

    @@ -50,7 +50,7 @@ Without a layer argument, "area" represents an area filter for primary shapes in
  • area_ratio (in condition)
  • -See Layer#drc, area_ratio and area_ratio for more details. +See Layer#drc, area_ratio and DRC#area_ratio for more details.

    "bbox_aspect_ratio" - Selects primary shapes based on the aspect ratio of their bounding boxes

    @@ -59,7 +59,7 @@ See
    Layer#drc,
  • bbox_aspect_ratio (in condition)
  • -See Layer#drc, bbox_aspect_ratio and bbox_aspect_ratio for more details. +See Layer#drc, bbox_aspect_ratio and DRC#bbox_aspect_ratio for more details.

    "bbox_height" - Selects primary shapes based on their bounding box height

    @@ -73,7 +73,7 @@ bounding box height satisfies the condition. Conditions may be written as arithm against numeric values. For example, "bbox_height < 2.0" will select all primary shapes whose bounding box height is less than 2 micrometers. See
    Layer#drc for more details about comparison specs. Plain "bbox_min" is equivalent to "primary.bbox_min" - i.e. it is used on the primary -shape. Also see bbox_min. +shape. Also see DRC#bbox_min.

    "bbox_max" - Selects primary shapes based on their bounding box height or width, whichever is larger

    @@ -82,7 +82,7 @@ shape. Also see
    bbox_min.
  • bbox_max (in condition)
  • -See Layer#drc, bbox_max and bbox_max for more details. +See Layer#drc, bbox_max and DRC#bbox_max for more details.

    "bbox_min" - Selects primary shapes based on their bounding box height or width, whichever is smaller

    @@ -91,7 +91,7 @@ See
    Layer#drc, bb
  • bbox_max (in condition)
  • -See Layer#drc, bbox_min and bbox_min for more details. +See Layer#drc, bbox_min and DRC#bbox_min for more details.

    "bbox_width" - Selects primary shapes based on their bounding box width

    @@ -100,7 +100,7 @@ See
    Layer#drc, bb
  • bbox_max (in condition)
  • -See Layer#drc, bbox_height and bbox_height for more details. +See Layer#drc, bbox_height and DRC#bbox_height for more details.

    "bjt3" - Supplies the BJT3 transistor extractor class

    @@ -1049,7 +1049,7 @@ For further methods on the source object see
    Layer#length). Without a layer argument, "length" represents the edge length filter on the primary shape edges in -DRC expressions (see Layer#drc and length for more details). In this context, +DRC expressions (see Layer#drc and DRC#length for more details). In this context, the operation acts similar to Layer#with_length.

    "log" - Outputs as message to the logger window

    @@ -1370,7 +1370,7 @@ is equivalent to "layer.perimeter" (see
    DRC expressions (see Layer#drc and perimeter for more details). +DRC expressions (see Layer#drc and DRC#perimeter for more details).

    "polygon" - Creates a polygon object

    @@ -1486,7 +1486,7 @@ To remove this condition, call "region_touch" without any arguments.
  • relative_height (in condition)
  • -See Layer#drc, relative_height and relative_height for more details. +See Layer#drc, relative_height and DRC#relative_height for more details.

    "report" - Specifies a report database for output

    diff --git a/src/doc/doc/about/drc_ref_layer.xml b/src/doc/doc/about/drc_ref_layer.xml index c9051e549..93ed42979 100644 --- a/src/doc/doc/about/drc_ref_layer.xml +++ b/src/doc/doc/about/drc_ref_layer.xml @@ -461,11 +461,11 @@ For the conversion of edges, edge pairs and polygons into other types, these methods are provided:

    The following example decomposes the primary polygons into edges: @@ -506,8 +506,8 @@ The "drc" framework supports the following edge and edge/polygon operations:

    Filters

    @@ -515,14 +515,14 @@ The "drc" framework supports the following edge and edge/polygon operations: Filter operators select input polygons or edges based on their properties. These filters are provided:

    For example, to select polygons with an area larger than one square micrometer, use: @@ -546,7 +546,7 @@ In the same fashion, "perimeter" applies to the perimeter of the polygon. use the respective dimension for filtering the polygon.

    Note that it's basically possible to use the polygon filters on any input - computed and secondaries. -In fact, plain "area" for example is a shortcut for "primary.area" indicating that +In fact, plain "area" for example is a shortcut for "DRC#primary.area" indicating that the area of primary shapes are supposed to be computed. However, any input other than the primary is not necessarily complete or it may consist of multiple polygons. Hence the computed values may be too big or too small. @@ -562,9 +562,9 @@ passes the polygons if the condition is met. The predicates available currently are:

    For the same reason as explained above, it's recommended to use these predicates @@ -656,7 +656,7 @@ Note that the precise form of the example above is out = l1.drc((primary & secondary(l2)).area > 1.0)

    -The "secondary" operator indicates that "l2" is to be used as secondary input to the "drc" function. Only +The "DRC#secondary" operator indicates that "l2" is to be used as secondary input to the "drc" function. Only in this form, the operators of the boolean AND can be reversed:

    @@ -672,7 +672,7 @@ from the primary, it's neighborhood (secondaries) or from deriving shape sets.
     Obviously the primary is a simple one: it consists of a single shape, because
     this is how the loop operates. Derived shape sets however can be more complex.
     "Quantifiers" allow assessing properties of the complete, per-primary shape
    -set. A simple one is "count" which checks if the number of shapes within
    +set. A simple one is "DRC#count" which checks if the number of shapes within
     a shape set is within a given range.
     

    Obviously, "primary.count == 1" is always true. So using "count" primaries isn't diff --git a/src/doc/doc/manual/drc_runsets.xml b/src/doc/doc/manual/drc_runsets.xml index c73994011..a8db5cb35 100644 --- a/src/doc/doc/manual/drc_runsets.xml +++ b/src/doc/doc/manual/drc_runsets.xml @@ -428,7 +428,7 @@ output(w, "width violations")

    overlapping
    pull_inside, pull_interacting, - pull_overlapping, + pull_overlapping, These methods are available as in-place operations as well:
    select_covering, select_interacting, diff --git a/src/drc/drc/built-in-macros/_drc_cop_integration.rb b/src/drc/drc/built-in-macros/_drc_cop_integration.rb index 2cf5b9fa2..0f97c3203 100644 --- a/src/drc/drc/built-in-macros/_drc_cop_integration.rb +++ b/src/drc/drc/built-in-macros/_drc_cop_integration.rb @@ -129,11 +129,11 @@ module DRC # methods are provided: # # @ul - # @li "\global#polygons": converts edge pairs to polygons @/li - # @li "\global#extended", "\global#extended_in", "\global#extended_out": converts edges to polygons @/li - # @li "\global#first_edges", \global#second_edges": extracts edges from edge pairs @/li - # @li "\global#edges": decomposes edge pairs and polygons into edges @/li - # @li "\global#corners": can extract corners from polygons @/li + # @li "\DRC#polygons": converts edge pairs to polygons @/li + # @li "\DRC#extended", "\DRC#extended_in", "\DRC#extended_out": converts edges to polygons @/li + # @li "\DRC#first_edges", \DRC#second_edges": extracts edges from edge pairs @/li + # @li "\DRC#edges": decomposes edge pairs and polygons into edges @/li + # @li "\DRC#corners": can extract corners from polygons @/li # @/ul # # The following example decomposes the primary polygons into edges: @@ -174,8 +174,8 @@ module DRC # # @ul # @li Edge vs. edge and edge vs. polygon booleans @/li - # @li Edge vs. polygon interactions ("\global#interacting", "\global#overlapping") @/li - # @li Edge sampling ("\global#start_segments", "\global#centers", "\global#end_segments") @/li + # @li Edge vs. polygon interactions ("\DRC#interacting", "\DRC#overlapping") @/li + # @li Edge sampling ("\DRC#start_segments", "\DRC#centers", "\DRC#end_segments") @/li # @/ul # # @h3 Filters @/h3 @@ -183,14 +183,14 @@ module DRC # Filter operators select input polygons or edges based on their properties. These filters are provided: # # @ul - # @li "\global#area": selects polygons based on their area @/li - # @li "\global#perimeter": selects polygons based on their perimeter @/li - # @li "\global#area_ratio": selects polygons based on their bounding box to polygon area ratio @/li - # @li "\global#bbox_aspect_ratio": selects polygons based on their bounding box aspect ratio @/li - # @li "\global#relative_height": selects polygons based on their relative height @/li - # @li "\global#bbox_min", "\global#bbox_max", "\global#bbox_width", "\global#bbox_height": selects polygons based on their bounding box properties @/li - # @li "\global#length": selects edges based on their length @/li - # @li "\global#angle": selects edges based on their orientation @/li + # @li "\DRC#area": selects polygons based on their area @/li + # @li "\DRC#perimeter": selects polygons based on their perimeter @/li + # @li "\DRC#area_ratio": selects polygons based on their bounding box to polygon area ratio @/li + # @li "\DRC#bbox_aspect_ratio": selects polygons based on their bounding box aspect ratio @/li + # @li "\DRC#relative_height": selects polygons based on their relative height @/li + # @li "\DRC#bbox_min", "\DRC#bbox_max", "\DRC#bbox_width", "\DRC#bbox_height": selects polygons based on their bounding box properties @/li + # @li "\DRC#length": selects edges based on their length @/li + # @li "\DRC#angle": selects edges based on their orientation @/li # @/ul # # For example, to select polygons with an area larger than one square micrometer, use: @@ -214,7 +214,7 @@ module DRC # use the respective dimension for filtering the polygon. # # Note that it's basically possible to use the polygon filters on any input - computed and secondaries. - # In fact, plain "area" for example is a shortcut for "\global#primary.area" indicating that + # In fact, plain "area" for example is a shortcut for "\DRC#primary.area" indicating that # the area of primary shapes are supposed to be computed. # However, any input other than the primary is not necessarily complete or it may # consist of multiple polygons. Hence the computed values may be too big or too small. @@ -230,9 +230,9 @@ module DRC # The predicates available currently are: # # @ul - # @li "\global#rectangles": Filters rectangles @/li - # @li "\global#squares": Filters squares @/li - # @li "\global#rectilinear": Filters rectilinear ("Manhattan") polygons @/li + # @li "\DRC#rectangles": Filters rectangles @/li + # @li "\DRC#squares": Filters squares @/li + # @li "\DRC#rectilinear": Filters rectilinear ("Manhattan") polygons @/li # @/ul # # For the same reason as explained above, it's recommended to use these predicates @@ -324,7 +324,7 @@ module DRC # out = l1.drc((primary & secondary(l2)).area > 1.0) # @/code # - # The "\global#secondary" operator indicates that "l2" is to be used as secondary input to the "drc" function. Only + # The "\DRC#secondary" operator indicates that "l2" is to be used as secondary input to the "drc" function. Only # in this form, the operators of the boolean AND can be reversed: # # @code @@ -340,7 +340,7 @@ module DRC # Obviously the primary is a simple one: it consists of a single shape, because # this is how the loop operates. Derived shape sets however can be more complex. # "Quantifiers" allow assessing properties of the complete, per-primary shape - # set. A simple one is "\global#count" which checks if the number of shapes within + # set. A simple one is "\DRC#count" which checks if the number of shapes within # a shape set is within a given range. # # Obviously, "primary.count == 1" is always true. So using "count" primaries isn't @@ -596,49 +596,49 @@ CODE # against numeric values. For example, "bbox_height < 2.0" will select all primary shapes whose # bounding box height is less than 2 micrometers. See \Layer#drc for more details about comparison # specs. Plain "bbox_min" is equivalent to "primary.bbox_min" - i.e. it is used on the primary - # shape. Also see \global#bbox_min. + # shape. Also see \DRC#bbox_min. # %DRC% # @name bbox_width # @brief Selects primary shapes based on their bounding box width # @synopsis bbox_max (in condition) # - # See \Layer#drc, \bbox_height and \global#bbox_height for more details. + # See \Layer#drc, \bbox_height and \DRC#bbox_height for more details. # %DRC% # @name bbox_max # @brief Selects primary shapes based on their bounding box height or width, whichever is larger # @synopsis bbox_max (in condition) # - # See \Layer#drc, \bbox_max and \global#bbox_max for more details. + # See \Layer#drc, \bbox_max and \DRC#bbox_max for more details. # %DRC% # @name bbox_min # @brief Selects primary shapes based on their bounding box height or width, whichever is smaller # @synopsis bbox_max (in condition) # - # See \Layer#drc, \bbox_min and \global#bbox_min for more details. + # See \Layer#drc, \bbox_min and \DRC#bbox_min for more details. # %DRC% # @name bbox_aspect_ratio # @brief Selects primary shapes based on the aspect ratio of their bounding boxes # @synopsis bbox_aspect_ratio (in condition) # - # See \Layer#drc, \bbox_aspect_ratio and \global#bbox_aspect_ratio for more details. + # See \Layer#drc, \bbox_aspect_ratio and \DRC#bbox_aspect_ratio for more details. # %DRC% # @name relative_height # @brief Selects primary shapes based on the ratio of height and width of their bounding boxes # @synopsis relative_height (in condition) # - # See \Layer#drc, \relative_height and \global#relative_height for more details. + # See \Layer#drc, \relative_height and \DRC#relative_height for more details. # %DRC% # @name area_ratio # @brief Selects primary shapes based on the ratio of bounding box and polygon area # @synopsis area_ratio (in condition) # - # See \Layer#drc, \area_ratio and \global#area_ratio for more details. + # See \Layer#drc, \area_ratio and \DRC#area_ratio for more details. %w( bbox_height @@ -669,7 +669,7 @@ CODE # polygons in the layer. # # Without a layer argument, "area" represents an area filter for primary shapes in - # \global# expressions (see \Layer#drc and \global#area for more details). + # \global# expressions (see \Layer#drc and \DRC#area for more details). # %DRC% # @name hulls @@ -704,7 +704,7 @@ CODE # total perimeter of all polygons in the layer. # # Without a layer argument, "perimeter" represents a perimeter filter for primary shapes in - # \DRC# expressions (see \Layer#drc and \global#perimeter for more details). + # \DRC# expressions (see \Layer#drc and \DRC#perimeter for more details). # %DRC% # @name rectangles @@ -748,7 +748,7 @@ CODE # This function can be used with a layer argument. In this case it # is equivalent to "layer.length" (see \Layer#length). Without a layer # argument, "length" represents the edge length filter on the primary shape edges in - # \DRC# expressions (see \Layer#drc and \global#length for more details). In this context, + # \DRC# expressions (see \Layer#drc and \DRC#length for more details). In this context, # the operation acts similar to \Layer#with_length. # %DRC% @@ -757,7 +757,7 @@ CODE # @synopsis angle (in condition) # # "angle" represents the edge orientation filter on the primary shape edges in - # \DRC# expressions (see \Layer#drc and \global#angle for more details). In this context, + # \DRC# expressions (see \Layer#drc and \DRC#angle for more details). In this context, # the operation acts similar to \Layer#with_angle. %w( From 43089f31e41a0f0c6574098210734cdfada80037 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 9 Dec 2022 23:53:41 +0100 Subject: [PATCH 09/10] Doc updates --- src/ant/ant/gsiDeclAnt.cc | 2 +- src/doc/doc/about/drc_ref_drc.xml | 6 +- src/doc/doc/about/drc_ref_global.xml | 14 +- src/doc/doc/about/drc_ref_layer.xml | 14 +- .../drc/built-in-macros/_drc_complex_ops.rb | 4 +- .../built-in-macros/_drc_cop_integration.rb | 8 +- src/drc/drc/built-in-macros/_drc_engine.rb | 10 +- src/drc/drc/built-in-macros/_drc_layer.rb | 10 +- .../laybasic/gsiDeclLayLayoutViewBase.cc | 8 +- src/pymod/distutils_src/klayout/dbcore.pyi | 1589 +++++++++++++++-- src/pymod/distutils_src/klayout/laycore.pyi | 372 ++-- src/pymod/distutils_src/klayout/rdbcore.pyi | 78 +- src/pymod/distutils_src/klayout/tlcore.pyi | 60 + 13 files changed, 1830 insertions(+), 345 deletions(-) diff --git a/src/ant/ant/gsiDeclAnt.cc b/src/ant/ant/gsiDeclAnt.cc index 032190b48..1defd733e 100644 --- a/src/ant/ant/gsiDeclAnt.cc +++ b/src/ant/ant/gsiDeclAnt.cc @@ -1226,7 +1226,7 @@ gsi::ClassExt layout_view_decl ( gsi::arg ("category"), "@brief Unregisters the template or templates with the given category string on this particular view\n" "\n" - "See \\Annotation#unregister_template for a method doing the same on application level." + "See \\Annotation#unregister_templates for a method doing the same on application level." "This method is hardly useful normally, but can be used when customizing layout views as " "individual widgets.\n" "\n" diff --git a/src/doc/doc/about/drc_ref_drc.xml b/src/doc/doc/about/drc_ref_drc.xml index 06e59d450..3fab7774b 100644 --- a/src/doc/doc/about/drc_ref_drc.xml +++ b/src/doc/doc/about/drc_ref_drc.xml @@ -31,7 +31,7 @@ The following global functions are relevant for the DRC expressions:
  • angle
  • area
  • area_ratio
  • -
  • bbox_area_ratio
  • +
  • bbox_aspect_ratio
  • bbox_height
  • bbox_max
  • bbox_min
  • @@ -358,8 +358,8 @@ The plain function is equivalent to "primary.bbox_width". This method acts on edge expressions and delivers a specific part of each edge. See layer#centers for details about this functionality.

    -

    "corners (in condition)" - Applies smoothing

    - +

    "corners" - Applies smoothing

    +

    Usage:

    • expression.corners
    • diff --git a/src/doc/doc/about/drc_ref_global.xml b/src/doc/doc/about/drc_ref_global.xml index c0f1d9966..089c1eb5c 100644 --- a/src/doc/doc/about/drc_ref_global.xml +++ b/src/doc/doc/about/drc_ref_global.xml @@ -8,8 +8,8 @@ DRC Reference: Global Functions -

      "angle (in condition)" - In universal DRC context: selects edges based on their orientation

      - +

      "angle" - In universal DRC context: selects edges based on their orientation

      +

      Usage:

      -This method can be applied to true text layers obtained with labels. +This method can be applied to true text layers obtained with labels. In this case, without specifying "as_dots" or "as_boxes" retains the text objects as such. Only text filtering is applied.

      @@ -3338,7 +3338,7 @@ on without_angle. This is because

      -The following images demonstrate some use cases of with_angle and without_angle: +The following images demonstrate some use cases of with_angle and without_angle :

      diff --git a/src/drc/drc/built-in-macros/_drc_complex_ops.rb b/src/drc/drc/built-in-macros/_drc_complex_ops.rb index 8e4fbf4b6..c3674e3d2 100644 --- a/src/drc/drc/built-in-macros/_drc_complex_ops.rb +++ b/src/drc/drc/built-in-macros/_drc_complex_ops.rb @@ -30,7 +30,7 @@ module DRC # @li \global#angle @/li # @li \global#area @/li # @li \global#area_ratio @/li -# @li \global#bbox_area_ratio @/li +# @li \global#bbox_aspect_ratio @/li # @li \global#bbox_height @/li # @li \global#bbox_max @/li # @li \global#bbox_min @/li @@ -755,7 +755,7 @@ CODE end # %DRC% - # @name corners (in condition) + # @name corners # @brief Applies smoothing # @synopsis expression.corners # @synopsis expression.corners(as_dots) diff --git a/src/drc/drc/built-in-macros/_drc_cop_integration.rb b/src/drc/drc/built-in-macros/_drc_cop_integration.rb index 0f97c3203..e0c4f2e32 100644 --- a/src/drc/drc/built-in-macros/_drc_cop_integration.rb +++ b/src/drc/drc/built-in-macros/_drc_cop_integration.rb @@ -214,7 +214,7 @@ module DRC # use the respective dimension for filtering the polygon. # # Note that it's basically possible to use the polygon filters on any input - computed and secondaries. - # In fact, plain "area" for example is a shortcut for "\DRC#primary.area" indicating that + # In fact, plain "area" for example is a shortcut for "\global#primary.area" indicating that # the area of primary shapes are supposed to be computed. # However, any input other than the primary is not necessarily complete or it may # consist of multiple polygons. Hence the computed values may be too big or too small. @@ -324,7 +324,7 @@ module DRC # out = l1.drc((primary & secondary(l2)).area > 1.0) # @/code # - # The "\DRC#secondary" operator indicates that "l2" is to be used as secondary input to the "drc" function. Only + # The "\global#secondary" operator indicates that "l2" is to be used as secondary input to the "drc" function. Only # in this form, the operators of the boolean AND can be reversed: # # @code @@ -740,7 +740,7 @@ CODE # \DRC# expressions (see \Layer#drc and \global#rectilinear for more details). # %DRC% - # @name length (in condition) + # @name length # @brief Computes the total edge length of an edge layer or in universal DRC context: selects edges based on a length condition # @synopsis length (in condition) # @synopsis length(layer) @@ -752,7 +752,7 @@ CODE # the operation acts similar to \Layer#with_length. # %DRC% - # @name angle (in condition) + # @name angle # @brief In universal DRC context: selects edges based on their orientation # @synopsis angle (in condition) # diff --git a/src/drc/drc/built-in-macros/_drc_engine.rb b/src/drc/drc/built-in-macros/_drc_engine.rb index b4b850407..0d645d351 100644 --- a/src/drc/drc/built-in-macros/_drc_engine.rb +++ b/src/drc/drc/built-in-macros/_drc_engine.rb @@ -783,9 +783,9 @@ module DRC # tile. In order words, when processing a tile, shapes within the border distance # participate in the operations. # - # For some operations such as booleans (\and, \or, ...), \size and the DRC functions (\width, \space, ...) - # a tile border is automatically established. For other operations such as \with_area - # or \edges, the exact distance is unknown, because such operations may have a long range. + # For some operations such as booleans (\Layer#and, \Layer#or, ...), \Layer#size and the DRC functions (\Layer#width, \Layer#space, ...) + # a tile border is automatically established. For other operations such as \Layer#with_area + # or \Layer#edges, the exact distance is unknown, because such operations may have a long range. # In that cases, no border is used. The tile_borders function may be used to specify a minimum border # which is used in that case. That allows taking into account at least shapes within the # given range, although not necessarily all. @@ -1936,7 +1936,7 @@ CODE with_area with_area_ratio with_bbox_area - with_bbox_area_ratio + with_bbox_aspect_ratio with_bbox_height with_bbox_max with_bbox_min @@ -1947,7 +1947,7 @@ CODE without_area without_area_ratio without_bbox - without_bbox_area_ratio + without_bbox_aspect_ratio without_bbox_height without_bbox_max without_bbox_min diff --git a/src/drc/drc/built-in-macros/_drc_layer.rb b/src/drc/drc/built-in-macros/_drc_layer.rb index af595de52..db04d00fb 100644 --- a/src/drc/drc/built-in-macros/_drc_layer.rb +++ b/src/drc/drc/built-in-macros/_drc_layer.rb @@ -901,7 +901,7 @@ CODE # one edge does not match the criterion. The logical opposite of "one edge matches" however is # "both edges do not match". # - # The following images demonstrate some use cases of \with_angle and \without_angle: + # The following images demonstrate some use cases of \with_angle and \without_angle : # # @table # @tr @@ -1107,14 +1107,14 @@ CODE # @synopsis layer.texts(p) # @synopsis layer.texts([ options ]) # This method can be applied to original layers - i.e. ones that have - # been created with \input. By default, a small box (2x2 DBU) will be produced on each + # been created with \global#input. By default, a small box (2x2 DBU) will be produced on each # selected text. By using the "as_dots" option, degenerated point-like edges will be # produced. # - # The preferred method however is to use true text layers created with \labels. + # The preferred method however is to use true text layers created with \global#labels. # In this case, without specifying "as_dots" or "as_boxes" retains the text # objects as such a text filtering is applied. In contrast to this, layers generated - # with \input cannot maintain the text nature of the selected objects and + # with \global#input cannot maintain the text nature of the selected objects and # produce dots or small polygon boxes in the \texts method. # # Texts can be selected either by exact match string or a pattern match with a @@ -1163,7 +1163,7 @@ CODE # @synopsis layer.texts_not(p) # @synopsis layer.texts_not([ options ]) # - # This method can be applied to true text layers obtained with \labels. + # This method can be applied to true text layers obtained with \global#labels. # In this case, without specifying "as_dots" or "as_boxes" retains the text # objects as such. Only text filtering is applied. # diff --git a/src/laybasic/laybasic/gsiDeclLayLayoutViewBase.cc b/src/laybasic/laybasic/gsiDeclLayLayoutViewBase.cc index db6c1c5d5..b23332e09 100644 --- a/src/laybasic/laybasic/gsiDeclLayLayoutViewBase.cc +++ b/src/laybasic/laybasic/gsiDeclLayLayoutViewBase.cc @@ -1977,7 +1977,7 @@ LAYBASIC_PUBLIC Class decl_LayoutViewBase ("lay", "LayoutVi "@brief Sends a mouse move event\n" "\n" "This method is intended to emulate the mouse move events sent by Qt normally in environments where Qt is not present. " - "The arguments follow the conventions used within \\Plugin#mouse_move_event for example.\n" + "The arguments follow the conventions used within \\Plugin#mouse_moved_event for example.\n" "\n" "This method was introduced in version 0.28." ) + @@ -1985,7 +1985,7 @@ LAYBASIC_PUBLIC Class decl_LayoutViewBase ("lay", "LayoutVi "@brief Sends a mouse button press event\n" "\n" "This method is intended to emulate the mouse button press events sent by Qt normally in environments where Qt is not present. " - "The arguments follow the conventions used within \\Plugin#mouse_move_event for example.\n" + "The arguments follow the conventions used within \\Plugin#mouse_moved_event for example.\n" "\n" "This method was introduced in version 0.28." ) + @@ -1993,7 +1993,7 @@ LAYBASIC_PUBLIC Class decl_LayoutViewBase ("lay", "LayoutVi "@brief Sends a mouse button double-click event\n" "\n" "This method is intended to emulate the mouse button double-click events sent by Qt normally in environments where Qt is not present. " - "The arguments follow the conventions used within \\Plugin#mouse_move_event for example.\n" + "The arguments follow the conventions used within \\Plugin#mouse_moved_event for example.\n" "\n" "This method was introduced in version 0.28." ) + @@ -2001,7 +2001,7 @@ LAYBASIC_PUBLIC Class decl_LayoutViewBase ("lay", "LayoutVi "@brief Sends a mouse button release event\n" "\n" "This method is intended to emulate the mouse button release events sent by Qt normally in environments where Qt is not present. " - "The arguments follow the conventions used within \\Plugin#mouse_move_event for example.\n" + "The arguments follow the conventions used within \\Plugin#mouse_moved_event for example.\n" "\n" "This method was introduced in version 0.28." ) + diff --git a/src/pymod/distutils_src/klayout/dbcore.pyi b/src/pymod/distutils_src/klayout/dbcore.pyi index b540711c7..fcf7dd1bf 100644 --- a/src/pymod/distutils_src/klayout/dbcore.pyi +++ b/src/pymod/distutils_src/klayout/dbcore.pyi @@ -94,6 +94,16 @@ class Box: """ @overload @classmethod + def new(cls, arg0: int) -> Box: + r""" + @brief Creates a square with the given dimensions centered around the origin + + Note that for integer-unit boxes, the dimension has to be an even number to avoid rounding. + + This convenience constructor has been introduced in version 0.28. + """ + @overload + @classmethod def new(cls, dbox: DBox) -> Box: r""" @brief Creates an integer coordinate box from a floating-point coordinate box @@ -102,6 +112,16 @@ class Box: """ @overload @classmethod + def new(cls, arg0: int, arg1: int) -> Box: + r""" + @brief Creates a rectangle with given width and height, centered around the origin + + Note that for integer-unit boxes, the dimensions have to be an even number to avoid rounding. + + This convenience constructor has been introduced in version 0.28. + """ + @overload + @classmethod def new(cls, lower_left: Point, upper_right: Point) -> Box: r""" @brief Creates a box from two points @@ -182,6 +202,10 @@ class Box: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Box: + r""" + @brief Creates a copy of self + """ def __eq__(self, box: object) -> bool: r""" @brief Returns true if this box is equal to the other box @@ -202,6 +226,15 @@ class Box: Empty boxes don't modify a box when joined with it. The intersection between an empty and any other box is also an empty box. The width, height, p1 and p2 attributes of an empty box are undefined. Use \empty? to get a value indicating whether the box is empty. """ @overload + def __init__(self, arg0: int) -> None: + r""" + @brief Creates a square with the given dimensions centered around the origin + + Note that for integer-unit boxes, the dimension has to be an even number to avoid rounding. + + This convenience constructor has been introduced in version 0.28. + """ + @overload def __init__(self, dbox: DBox) -> None: r""" @brief Creates an integer coordinate box from a floating-point coordinate box @@ -209,6 +242,15 @@ class Box: This constructor has been introduced in version 0.25 and replaces the previous static method 'from_dbox'. """ @overload + def __init__(self, arg0: int, arg1: int) -> None: + r""" + @brief Creates a rectangle with given width and height, centered around the origin + + Note that for integer-unit boxes, the dimensions have to be an even number to avoid rounding. + + This convenience constructor has been introduced in version 0.28. + """ + @overload def __init__(self, lower_left: Point, upper_right: Point) -> None: r""" @brief Creates a box from two points @@ -413,6 +455,16 @@ class Box: An empty box may be created with the default constructor for example. Such a box is neutral when combining it with other boxes and renders empty boxes if used in box intersections and false in geometrical relationship tests. """ @overload + def enlarge(self, d: int) -> Box: + r""" + @brief Enlarges the box by a certain amount on all sides. + + This is a convenience method which takes one values instead of two values. It will apply the given enlargement in both directions. + This method has been introduced in version 0.28. + + @return A reference to this box. + """ + @overload def enlarge(self, enlargement: Vector) -> Box: r""" @brief Enlarges the box by a certain amount. @@ -437,12 +489,22 @@ class Box: @brief Enlarges the box by a certain amount. - This is a convenience method which takes two values instead of a Point object. + This is a convenience method which takes two values instead of a Vector object. This method has been introduced in version 0.23. @return A reference to this box. """ @overload + def enlarged(self, d: int) -> Box: + r""" + @brief Enlarges the box by a certain amount on all sides. + + This is a convenience method which takes one values instead of two values. It will apply the given enlargement in both directions. + This method has been introduced in version 0.28. + + @return The enlarged box. + """ + @overload def enlarged(self, enlargement: Vector) -> Box: r""" @brief Returns the enlarged box. @@ -467,7 +529,7 @@ class Box: @brief Enlarges the box by a certain amount. - This is a convenience method which takes two values instead of a Point object. + This is a convenience method which takes two values instead of a Vector object. This method has been introduced in version 0.23. @return The enlarged box. @@ -547,7 +609,7 @@ class Box: This is a convenience method which takes two values instead of a Point object. This method has been introduced in version 0.23. - @return The enlarged box. + @return The moved box. """ def overlaps(self, box: Box) -> bool: r""" @@ -715,6 +777,16 @@ class DBox: """ @overload @classmethod + def new(cls, arg0: float) -> DBox: + r""" + @brief Creates a square with the given dimensions centered around the origin + + Note that for integer-unit boxes, the dimension has to be an even number to avoid rounding. + + This convenience constructor has been introduced in version 0.28. + """ + @overload + @classmethod def new(cls, box: Box) -> DBox: r""" @brief Creates a floating-point coordinate box from an integer coordinate box @@ -723,6 +795,16 @@ class DBox: """ @overload @classmethod + def new(cls, arg0: float, arg1: float) -> DBox: + r""" + @brief Creates a rectangle with given width and height, centered around the origin + + Note that for integer-unit boxes, the dimensions have to be an even number to avoid rounding. + + This convenience constructor has been introduced in version 0.28. + """ + @overload + @classmethod def new(cls, lower_left: DPoint, upper_right: DPoint) -> DBox: r""" @brief Creates a box from two points @@ -803,6 +885,10 @@ class DBox: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DBox: + r""" + @brief Creates a copy of self + """ def __eq__(self, box: object) -> bool: r""" @brief Returns true if this box is equal to the other box @@ -823,6 +909,15 @@ class DBox: Empty boxes don't modify a box when joined with it. The intersection between an empty and any other box is also an empty box. The width, height, p1 and p2 attributes of an empty box are undefined. Use \empty? to get a value indicating whether the box is empty. """ @overload + def __init__(self, arg0: float) -> None: + r""" + @brief Creates a square with the given dimensions centered around the origin + + Note that for integer-unit boxes, the dimension has to be an even number to avoid rounding. + + This convenience constructor has been introduced in version 0.28. + """ + @overload def __init__(self, box: Box) -> None: r""" @brief Creates a floating-point coordinate box from an integer coordinate box @@ -830,6 +925,15 @@ class DBox: This constructor has been introduced in version 0.25 and replaces the previous static method 'from_ibox'. """ @overload + def __init__(self, arg0: float, arg1: float) -> None: + r""" + @brief Creates a rectangle with given width and height, centered around the origin + + Note that for integer-unit boxes, the dimensions have to be an even number to avoid rounding. + + This convenience constructor has been introduced in version 0.28. + """ + @overload def __init__(self, lower_left: DPoint, upper_right: DPoint) -> None: r""" @brief Creates a box from two points @@ -1034,6 +1138,16 @@ class DBox: An empty box may be created with the default constructor for example. Such a box is neutral when combining it with other boxes and renders empty boxes if used in box intersections and false in geometrical relationship tests. """ @overload + def enlarge(self, d: float) -> DBox: + r""" + @brief Enlarges the box by a certain amount on all sides. + + This is a convenience method which takes one values instead of two values. It will apply the given enlargement in both directions. + This method has been introduced in version 0.28. + + @return A reference to this box. + """ + @overload def enlarge(self, enlargement: DVector) -> DBox: r""" @brief Enlarges the box by a certain amount. @@ -1058,12 +1172,22 @@ class DBox: @brief Enlarges the box by a certain amount. - This is a convenience method which takes two values instead of a Point object. + This is a convenience method which takes two values instead of a Vector object. This method has been introduced in version 0.23. @return A reference to this box. """ @overload + def enlarged(self, d: float) -> DBox: + r""" + @brief Enlarges the box by a certain amount on all sides. + + This is a convenience method which takes one values instead of two values. It will apply the given enlargement in both directions. + This method has been introduced in version 0.28. + + @return The enlarged box. + """ + @overload def enlarged(self, enlargement: DVector) -> DBox: r""" @brief Returns the enlarged box. @@ -1088,7 +1212,7 @@ class DBox: @brief Enlarges the box by a certain amount. - This is a convenience method which takes two values instead of a Point object. + This is a convenience method which takes two values instead of a Vector object. This method has been introduced in version 0.23. @return The enlarged box. @@ -1168,7 +1292,7 @@ class DBox: This is a convenience method which takes two values instead of a Point object. This method has been introduced in version 0.23. - @return The enlarged box. + @return The moved box. """ def overlaps(self, box: DBox) -> bool: r""" @@ -1320,6 +1444,14 @@ class Cell: This method will create a copy of the cell. The new cell will be member of the same layout the original cell was member of. The copy will inherit all shapes and instances, but get a different cell_index and a modified name as duplicate cell names are not allowed in the same layout. + This method has been introduced in version 0.27. + """ + def __deepcopy__(self) -> Cell: + r""" + @brief Creates a copy of the cell + + This method will create a copy of the cell. The new cell will be member of the same layout the original cell was member of. The copy will inherit all shapes and instances, but get a different cell_index and a modified name as duplicate cell names are not allowed in the same layout. + This method has been introduced in version 0.27. """ def __init__(self) -> None: @@ -2903,11 +3035,11 @@ class Instance: Starting with version 0.25 the displacement is of vector type. Setter: - @brief Sets the displacement vector for the 'b' axis + @brief Sets the displacement vector for the 'b' axis in micrometer units - If the instance was not an array instance before it is made one. + Like \b= with an integer displacement, this method will set the displacement vector but it accepts a vector in micrometer units that is of \DVector type. The vector will be translated to database units internally. - This method has been introduced in version 0.23. Starting with version 0.25 the displacement is of vector type. + This method has been introduced in version 0.25. """ cell: Cell r""" @@ -2939,10 +3071,10 @@ class Instance: Getter: @brief Gets the basic \CellInstArray object associated with this instance reference. Setter: - @brief Changes the \CellInstArray object to the given one. - This method replaces the instance by the given CellInstArray object. + @brief Returns the basic cell instance array object by giving a micrometer unit object. + This method replaces the instance by the given CellInstArray object and it internally transformed into database units. - This method has been introduced in version 0.22 + This method has been introduced in version 0.25 """ cplx_trans: ICplxTrans r""" @@ -3081,9 +3213,10 @@ class Instance: @brief Gets the transformation of the instance or the first instance in the array The transformation returned is only valid if the array does not represent a complex transformation array Setter: - @brief Sets the transformation of the instance or the first instance in the array + @brief Sets the transformation of the instance or the first instance in the array (in micrometer units) + This method sets the transformation the same way as \cplx_trans=, but the displacement of this transformation is given in micrometer units. It is internally translated into database units. - This method has been introduced in version 0.23. + This method has been introduced in version 0.25. """ @classmethod def new(cls) -> Instance: @@ -3094,6 +3227,10 @@ class Instance: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Instance: + r""" + @brief Creates a copy of self + """ def __eq__(self, b: object) -> bool: r""" @brief Tests for equality of two Instance objects @@ -3536,6 +3673,10 @@ class ParentInstArray: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> ParentInstArray: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -3604,6 +3745,12 @@ class ParentInstArray: This method returns true, if the object was destroyed, either explicitly or by the C++ side. The latter may happen, if the object is owned by a C++ object which got destroyed itself. """ + def dinst(self) -> DCellInstArray: + r""" + @brief Compute the inverse instance by which the parent is seen from the child in micrometer units + + This convenience method has been introduced in version 0.28. + """ def dup(self) -> ParentInstArray: r""" @brief Creates a copy of self @@ -3874,6 +4021,10 @@ class CellInstArray: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> CellInstArray: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Compares two arrays for equality @@ -4435,6 +4586,10 @@ class DCellInstArray: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DCellInstArray: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Compares two arrays for equality @@ -4845,6 +5000,10 @@ class CellMapping: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> CellMapping: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -5251,12 +5410,12 @@ class CompoundRegionOperationNode: @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares two enums for inequality + @brief Compares an enum with an integer for inequality """ @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer for inequality + @brief Compares two enums for inequality """ def __repr__(self) -> str: r""" @@ -5435,12 +5594,12 @@ class CompoundRegionOperationNode: @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares two enums for inequality + @brief Compares an enum with an integer for inequality """ @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer for inequality + @brief Compares two enums for inequality """ def __repr__(self) -> str: r""" @@ -5503,12 +5662,12 @@ class CompoundRegionOperationNode: @overload def __eq__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer value + @brief Compares two enums """ @overload def __eq__(self, other: object) -> bool: r""" - @brief Compares two enums + @brief Compares an enum with an integer value """ @overload def __init__(self, i: int) -> None: @@ -5533,12 +5692,12 @@ class CompoundRegionOperationNode: @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer for inequality + @brief Compares two enums for inequality """ @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares two enums for inequality + @brief Compares an enum with an integer for inequality """ def __repr__(self) -> str: r""" @@ -5593,12 +5752,12 @@ class CompoundRegionOperationNode: @overload def __eq__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer value + @brief Compares two enums """ @overload def __eq__(self, other: object) -> bool: r""" - @brief Compares two enums + @brief Compares an enum with an integer value """ @overload def __init__(self, i: int) -> None: @@ -6143,6 +6302,10 @@ class TrapezoidDecompositionMode: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> TrapezoidDecompositionMode: + r""" + @brief Creates a copy of self + """ @overload def __eq__(self, other: object) -> bool: r""" @@ -6176,12 +6339,12 @@ class TrapezoidDecompositionMode: @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares two enums for inequality + @brief Compares an enum with an integer for inequality """ @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer for inequality + @brief Compares two enums for inequality """ def __repr__(self) -> str: r""" @@ -6314,6 +6477,10 @@ class PreferredOrientation: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> PreferredOrientation: + r""" + @brief Creates a copy of self + """ @overload def __eq__(self, other: object) -> bool: r""" @@ -6569,6 +6736,10 @@ class Edge: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Edge: + r""" + @brief Creates a copy of self + """ def __eq__(self, e: object) -> bool: r""" @brief Equality test @@ -7275,6 +7446,10 @@ class DEdge: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DEdge: + r""" + @brief Creates a copy of self + """ def __eq__(self, e: object) -> bool: r""" @brief Equality test @@ -7926,6 +8101,10 @@ class EdgePair: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> EdgePair: + r""" + @brief Creates a copy of self + """ def __eq__(self, box: object) -> bool: r""" @brief Equality @@ -8020,6 +8199,12 @@ class EdgePair: Usually it's not required to call this method. It has been introduced in version 0.24. """ + def area(self) -> int: + r""" + @brief Gets the area between the edges of the edge pair + + This attribute has been introduced in version 0.28. + """ def assign(self, other: EdgePair) -> None: r""" @brief Assigns another object to self @@ -8082,6 +8267,14 @@ class EdgePair: This method normalized the edge pair such that when connecting the edges at their start and end points a closed loop is formed which is oriented clockwise. To achieve this, the points of the first and/or first and second edge are swapped. Normalization is a first step recommended before converting an edge pair to a polygon, because that way the polygons won't be self-overlapping and the enlargement parameter is applied properly. """ + def perimeter(self) -> int: + r""" + @brief Gets the perimeter of the edge pair + + The perimeter is defined as the sum of the lengths of both edges ('active perimeter'). + + This attribute has been introduced in version 0.28. + """ def polygon(self, e: int) -> Polygon: r""" @brief Convert an edge pair to a polygon @@ -8230,6 +8423,10 @@ class DEdgePair: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DEdgePair: + r""" + @brief Creates a copy of self + """ def __eq__(self, box: object) -> bool: r""" @brief Equality @@ -8324,6 +8521,12 @@ class DEdgePair: Usually it's not required to call this method. It has been introduced in version 0.24. """ + def area(self) -> float: + r""" + @brief Gets the area between the edges of the edge pair + + This attribute has been introduced in version 0.28. + """ def assign(self, other: DEdgePair) -> None: r""" @brief Assigns another object to self @@ -8386,6 +8589,14 @@ class DEdgePair: This method normalized the edge pair such that when connecting the edges at their start and end points a closed loop is formed which is oriented clockwise. To achieve this, the points of the first and/or first and second edge are swapped. Normalization is a first step recommended before converting an edge pair to a polygon, because that way the polygons won't be self-overlapping and the enlargement parameter is applied properly. """ + def perimeter(self) -> float: + r""" + @brief Gets the perimeter of the edge pair + + The perimeter is defined as the sum of the lengths of both edges ('active perimeter'). + + This attribute has been introduced in version 0.28. + """ def polygon(self, e: float) -> DPolygon: r""" @brief Convert an edge pair to a polygon @@ -8602,6 +8813,10 @@ class EdgePairs(ShapeCollection): r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> EdgePairs: + r""" + @brief Creates a copy of self + """ def __getitem__(self, n: int) -> EdgePair: r""" @brief Returns the nth edge pair @@ -9187,12 +9402,38 @@ class EdgePairs(ShapeCollection): This will filter edge pairs with at least one horizontal edge: @code - horizontal = edge_pairs.with_orientation(0, false) + horizontal = edge_pairs.with_angle(0, false) + @/code + + Note that the inverse @b result @/b of \with_angle is delivered by \with_angle_both with the inverse flag set as edge pairs are unselected when both edges fail to meet the criterion. + I.e + + @code + result = edge_pairs.with_angle(0, false) + others = edge_pairs.with_angle_both(0, true) @/code This method has been added in version 0.27.1. """ @overload + def with_angle(self, type: Edges.EdgeType, inverse: bool) -> EdgePairs: + r""" + @brief Filter the edge pairs by orientation of their edges + Filters the edge pairs in the edge pair collection by orientation. If "inverse" is false, only edge pairs with at least one edge having an angle of the given type are returned. If "inverse" is true, edge pairs not fulfilling this criterion are returned. + + This version allows specifying an edge type instead of an angle. Edge types include multiple distinct orientations and are specified using one of the \Edges#OrthoEdges, \Edges#DiagonalEdges or \Edges#OrthoDiagonalEdges types. + + Note that the inverse @b result @/b of \with_angle is delivered by \with_angle_both with the inverse flag set as edge pairs are unselected when both edges fail to meet the criterion. + I.e + + @code + result = edge_pairs.with_angle(RBA::Edges::Ortho, false) + others = edge_pairs.with_angle_both(RBA::Edges::Ortho, true) + @/code + + This method has been added in version 0.28. + """ + @overload def with_angle(self, min_angle: float, max_angle: float, inverse: bool, include_min_angle: Optional[bool] = ..., include_max_angle: Optional[bool] = ...) -> EdgePairs: r""" @brief Filter the edge pairs by orientation of their edges @@ -9200,6 +9441,14 @@ class EdgePairs(ShapeCollection): With "include_min_angle" set to true (the default), the minimum angle is included in the criterion while with false, the minimum angle itself is not included. Same for "include_max_angle" where the default is false, meaning the maximum angle is not included in the range. + Note that the inverse @b result @/b of \with_angle is delivered by \with_angle_both with the inverse flag set as edge pairs are unselected when both edges fail to meet the criterion. + I.e + + @code + result = edge_pairs.with_angle(0, 45, false) + others = edge_pairs.with_angle_both(0, 45, true) + @/code + This method has been added in version 0.27.1. """ @overload @@ -9211,12 +9460,38 @@ class EdgePairs(ShapeCollection): This will filter edge pairs with at least one horizontal edge: @code - horizontal = edge_pairs.with_orientation(0, false) + horizontal = edge_pairs.with_angle_both(0, false) + @/code + + Note that the inverse @b result @/b of \with_angle_both is delivered by \with_angle with the inverse flag set as edge pairs are unselected when one edge fails to meet the criterion. + I.e + + @code + result = edge_pairs.with_angle_both(0, false) + others = edge_pairs.with_angle(0, true) @/code This method has been added in version 0.27.1. """ @overload + def with_angle_both(self, type: Edges.EdgeType, inverse: bool) -> EdgePairs: + r""" + @brief Filter the edge pairs by orientation of their edges + Filters the edge pairs in the edge pair collection by orientation. If "inverse" is false, only edge pairs with both edges having an angle of the given type are returned. If "inverse" is true, edge pairs not fulfilling this criterion for both edges are returned. + + This version allows specifying an edge type instead of an angle. Edge types include multiple distinct orientations and are specified using one of the \Edges#OrthoEdges, \Edges#DiagonalEdges or \Edges#OrthoDiagonalEdges types. + + Note that the inverse @b result @/b of \with_angle_both is delivered by \with_angle with the inverse flag set as edge pairs are unselected when one edge fails to meet the criterion. + I.e + + @code + result = edge_pairs.with_angle_both(RBA::Edges::Ortho, false) + others = edge_pairs.with_angle(RBA::Edges::Ortho, true) + @/code + + This method has been added in version 0.28. + """ + @overload def with_angle_both(self, min_angle: float, max_angle: float, inverse: bool, include_min_angle: Optional[bool] = ..., include_max_angle: Optional[bool] = ...) -> EdgePairs: r""" @brief Filter the edge pairs by orientation of both of their edges @@ -9224,6 +9499,14 @@ class EdgePairs(ShapeCollection): With "include_min_angle" set to true (the default), the minimum angle is included in the criterion while with false, the minimum angle itself is not included. Same for "include_max_angle" where the default is false, meaning the maximum angle is not included in the range. + Note that the inverse @b result @/b of \with_angle_both is delivered by \with_angle with the inverse flag set as edge pairs are unselected when one edge fails to meet the criterion. + I.e + + @code + result = edge_pairs.with_angle_both(0, 45, false) + others = edge_pairs.with_angle(0, 45, true) + @/code + This method has been added in version 0.27.1. """ @overload @@ -9394,6 +9677,10 @@ class EdgeProcessor: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> EdgeProcessor: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -10244,6 +10531,100 @@ class Edges(ShapeCollection): This class has been introduced in version 0.23. """ + class EdgeType: + r""" + @brief This enum specifies the the edge type for edge angle filters. + + This enum was introduced in version 0.28. + """ + DiagonalEdges: ClassVar[Edges.EdgeType] + r""" + @brief Diagonal edges are selected (-45 and 45 degree) + """ + OrthoDiagonalEdges: ClassVar[Edges.EdgeType] + r""" + @brief Diagonal or orthogonal edges are selected (0, 90, -45 and 45 degree) + """ + OrthoEdges: ClassVar[Edges.EdgeType] + r""" + @brief Horizontal and vertical edges are selected + """ + @overload + @classmethod + def new(cls, i: int) -> Edges.EdgeType: + r""" + @brief Creates an enum from an integer value + """ + @overload + @classmethod + def new(cls, s: str) -> Edges.EdgeType: + r""" + @brief Creates an enum from a string value + """ + @overload + def __eq__(self, other: object) -> bool: + r""" + @brief Compares an enum with an integer value + """ + @overload + def __eq__(self, other: object) -> bool: + r""" + @brief Compares two enums + """ + @overload + def __init__(self, i: int) -> None: + r""" + @brief Creates an enum from an integer value + """ + @overload + def __init__(self, s: str) -> None: + r""" + @brief Creates an enum from a string value + """ + @overload + def __lt__(self, other: int) -> bool: + r""" + @brief Returns true if the enum is less (in the enum symbol order) than the integer value + """ + @overload + def __lt__(self, other: Edges.EdgeType) -> bool: + r""" + @brief Returns true if the first enum is less (in the enum symbol order) than the second + """ + @overload + def __ne__(self, other: object) -> bool: + r""" + @brief Compares an enum with an integer for inequality + """ + @overload + def __ne__(self, other: object) -> bool: + r""" + @brief Compares two enums for inequality + """ + def __repr__(self) -> str: + r""" + @brief Converts an enum to a visual string + """ + def __str__(self) -> str: + r""" + @brief Gets the symbolic string from an enum + """ + def inspect(self) -> str: + r""" + @brief Converts an enum to a visual string + """ + def to_i(self) -> int: + r""" + @brief Gets the integer value from the enum + """ + def to_s(self) -> str: + r""" + @brief Gets the symbolic string from an enum + """ + DiagonalEdges: ClassVar[Edges.EdgeType] + r""" + @brief Diagonal edges are selected (-45 and 45 degree) + """ Euclidian: ClassVar[Region.Metrics] r""" @brief Specifies Euclidian metrics for the check functions @@ -10255,6 +10636,14 @@ class Edges(ShapeCollection): All points within a circle with radius d around one point are considered to have a smaller distance than d. """ + OrthoDiagonalEdges: ClassVar[Edges.EdgeType] + r""" + @brief Diagonal or orthogonal edges are selected (0, 90, -45 and 45 degree) + """ + OrthoEdges: ClassVar[Edges.EdgeType] + r""" + @brief Horizontal and vertical edges are selected + """ Projection: ClassVar[Region.Metrics] r""" @brief Specifies projected distance metrics for the check functions @@ -10523,6 +10912,10 @@ class Edges(ShapeCollection): r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Edges: + r""" + @brief Creates a copy of self + """ def __getitem__(self, n: int) -> Edge: r""" @brief Returns the nth edge of the collection @@ -11144,6 +11537,13 @@ class Edges(ShapeCollection): @brief Returns all edges which are members of the other edge collection This method returns all edges in self which can be found in the other edge collection as well with exactly the same geometry. """ + def in_and_out(self, other: Edges) -> List[Edges]: + r""" + @brief Returns all polygons which are members and not members of the other region + This method is equivalent to calling \members_of and \not_members_of, but delivers both results at the same time and is more efficient than two separate calls. The first element returned is the \members_of part, the second is the \not_members_of part. + + This method has been introduced in version 0.28. + """ @overload def insert(self, box: Box) -> None: r""" @@ -12003,19 +12403,29 @@ class Edges(ShapeCollection): @overload def with_angle(self, angle: float, inverse: bool) -> Edges: r""" - @brief Filter the edges by orientation + @brief Filters the edges by orientation Filters the edges in the edge collection by orientation. If "inverse" is false, only edges which have the given angle to the x-axis are returned. If "inverse" is true, edges not having the given angle are returned. This will select horizontal edges: @code - horizontal = edges.with_orientation(0, false) + horizontal = edges.with_angle(0, false) @/code """ @overload + def with_angle(self, type: Edges.EdgeType, inverse: bool) -> Edges: + r""" + @brief Filters the edges by orientation type + Filters the edges in the edge collection by orientation. If "inverse" is false, only edges which have an angle of the given type are returned. If "inverse" is true, edges which do not conform to this criterion are returned. + + This version allows specifying an edge type instead of an angle. Edge types include multiple distinct orientations and are specified using one of the \OrthoEdges, \DiagonalEdges or \OrthoDiagonalEdges types. + + This method has been added in version 0.28. + """ + @overload def with_angle(self, min_angle: float, max_angle: float, inverse: bool, include_min_angle: Optional[bool] = ..., include_max_angle: Optional[bool] = ...) -> Edges: r""" - @brief Filter the edges by orientation + @brief Filters the edges by orientation Filters the edges in the edge collection by orientation. If "inverse" is false, only edges which have an angle to the x-axis larger or equal to "min_angle" (depending on "include_min_angle") and equal or less than "max_angle" (depending on "include_max_angle") are returned. If "inverse" is true, edges which do not conform to this criterion are returned. With "include_min_angle" set to true (the default), the minimum angle is included in the criterion while with false, the minimum angle itself is not included. Same for "include_max_angle" where the default is false, meaning the maximum angle is not included in the range. @@ -12025,13 +12435,13 @@ class Edges(ShapeCollection): @overload def with_length(self, length: int, inverse: bool) -> Edges: r""" - @brief Filter the edges by length + @brief Filters the edges by length Filters the edges in the edge collection by length. If "inverse" is false, only edges which have the given length are returned. If "inverse" is true, edges not having the given length are returned. """ @overload def with_length(self, min_length: Any, max_length: Any, inverse: bool) -> Edges: r""" - @brief Filter the edges by length + @brief Filters the edges by length Filters the edges in the edge collection by length. If "inverse" is false, only edges which have a length larger or equal to "min_length" and less than "max_length" are returned. If "inverse" is true, edges not having a length less than "min_length" or larger or equal than "max_length" are returned. If you don't want to specify a lower or upper limit, pass nil to that parameter. @@ -12079,6 +12489,10 @@ class InstElement: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> InstElement: + r""" + @brief Creates a copy of self + """ def __eq__(self, b: object) -> bool: r""" @brief Equality of two InstElement objects @@ -12273,6 +12687,10 @@ class LayerMapping: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> LayerMapping: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -12496,6 +12914,10 @@ class LayerInfo: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> LayerInfo: + r""" + @brief Creates a copy of self + """ def __eq__(self, b: object) -> bool: r""" @brief Compares two layer info objects @@ -12721,6 +13143,10 @@ class LayoutMetaInfo: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> LayoutMetaInfo: + r""" + @brief Creates a copy of self + """ def __init__(self, name: str, value: str, description: Optional[str] = ...) -> None: r""" @brief Creates a layout meta info object @@ -12906,6 +13332,10 @@ class Layout: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Layout: + r""" + @brief Creates a copy of self + """ @overload def __init__(self) -> None: r""" @@ -14800,6 +15230,10 @@ class SaveLayoutOptions: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> SaveLayoutOptions: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Default constructor @@ -15309,6 +15743,10 @@ class Library: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Library: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new, empty library @@ -15472,6 +15910,10 @@ class PCellDeclaration_Native: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> PCellDeclaration_Native: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -15517,10 +15959,13 @@ class PCellDeclaration_Native: r""" @brief Assigns another object to self """ - def can_create_from_shape(self, arg0: Layout, arg1: Shape, arg2: int) -> bool: + def callback(self, layout: Layout, name: str, states: PCellParameterStates) -> None: r""" """ - def coerce_parameters(self, arg0: Layout, arg1: Sequence[Any]) -> List[Any]: + def can_create_from_shape(self, layout: Layout, shape: Shape, layer: int) -> bool: + r""" + """ + def coerce_parameters(self, layout: Layout, parameters: Sequence[Any]) -> List[Any]: r""" """ def create(self) -> None: @@ -15540,14 +15985,14 @@ class PCellDeclaration_Native: This method returns true, if the object was destroyed, either explicitly or by the C++ side. The latter may happen, if the object is owned by a C++ object which got destroyed itself. """ - def display_text(self, arg0: Sequence[Any]) -> str: + def display_text(self, parameters: Sequence[Any]) -> str: r""" """ def dup(self) -> PCellDeclaration_Native: r""" @brief Creates a copy of self """ - def get_layers(self, arg0: Sequence[Any]) -> List[LayerInfo]: + def get_layers(self, parameters: Sequence[Any]) -> List[LayerInfo]: r""" """ def get_parameters(self) -> List[PCellParameterDeclaration]: @@ -15573,19 +16018,392 @@ class PCellDeclaration_Native: r""" @brief Gets the name of the PCell """ - def parameters_from_shape(self, arg0: Layout, arg1: Shape, arg2: int) -> List[Any]: + def parameters_from_shape(self, layout: Layout, shape: Shape, layer: int) -> List[Any]: r""" """ - def produce(self, arg0: Layout, arg1: Sequence[int], arg2: Sequence[Any], arg3: Cell) -> None: + def produce(self, layout: Layout, layers: Sequence[int], parameters: Sequence[Any], cell: Cell) -> None: r""" """ - def transformation_from_shape(self, arg0: Layout, arg1: Shape, arg2: int) -> Trans: + def transformation_from_shape(self, layout: Layout, shape: Shape, layer: int) -> Trans: r""" """ def wants_lazy_evaluation(self) -> bool: r""" """ +class PCellParameterState: + r""" + @brief Provides access to the attributes of a single parameter within \PCellParameterStates. + + See \PCellParameterStates for details about this feature. + + This class has been introduced in version 0.28. + """ + class ParameterStateIcon: + r""" + @brief This enum specifies the icon shown next to the parameter in PCell parameter list. + + This enum was introduced in version 0.28. + """ + ErrorIcon: ClassVar[PCellParameterState.ParameterStateIcon] + r""" + @brief An icon indicating an error is shown + """ + InfoIcon: ClassVar[PCellParameterState.ParameterStateIcon] + r""" + @brief A general 'information' icon is shown + """ + NoIcon: ClassVar[PCellParameterState.ParameterStateIcon] + r""" + @brief No icon is shown for the parameter + """ + WarningIcon: ClassVar[PCellParameterState.ParameterStateIcon] + r""" + @brief An icon indicating a warning is shown + """ + @overload + @classmethod + def new(cls, i: int) -> PCellParameterState.ParameterStateIcon: + r""" + @brief Creates an enum from an integer value + """ + @overload + @classmethod + def new(cls, s: str) -> PCellParameterState.ParameterStateIcon: + r""" + @brief Creates an enum from a string value + """ + @overload + def __eq__(self, other: object) -> bool: + r""" + @brief Compares an enum with an integer value + """ + @overload + def __eq__(self, other: object) -> bool: + r""" + @brief Compares two enums + """ + @overload + def __init__(self, i: int) -> None: + r""" + @brief Creates an enum from an integer value + """ + @overload + def __init__(self, s: str) -> None: + r""" + @brief Creates an enum from a string value + """ + @overload + def __lt__(self, other: int) -> bool: + r""" + @brief Returns true if the enum is less (in the enum symbol order) than the integer value + """ + @overload + def __lt__(self, other: PCellParameterState.ParameterStateIcon) -> bool: + r""" + @brief Returns true if the first enum is less (in the enum symbol order) than the second + """ + @overload + def __ne__(self, other: object) -> bool: + r""" + @brief Compares two enums for inequality + """ + @overload + def __ne__(self, other: object) -> bool: + r""" + @brief Compares an enum with an integer for inequality + """ + def __repr__(self) -> str: + r""" + @brief Converts an enum to a visual string + """ + def __str__(self) -> str: + r""" + @brief Gets the symbolic string from an enum + """ + def inspect(self) -> str: + r""" + @brief Converts an enum to a visual string + """ + def to_i(self) -> int: + r""" + @brief Gets the integer value from the enum + """ + def to_s(self) -> str: + r""" + @brief Gets the symbolic string from an enum + """ + ErrorIcon: ClassVar[PCellParameterState.ParameterStateIcon] + r""" + @brief An icon indicating an error is shown + """ + InfoIcon: ClassVar[PCellParameterState.ParameterStateIcon] + r""" + @brief A general 'information' icon is shown + """ + NoIcon: ClassVar[PCellParameterState.ParameterStateIcon] + r""" + @brief No icon is shown for the parameter + """ + WarningIcon: ClassVar[PCellParameterState.ParameterStateIcon] + r""" + @brief An icon indicating a warning is shown + """ + enabled: bool + r""" + Getter: + @brief Gets a value indicating whether the parameter is enabled in the parameter form + + Setter: + @brief Sets a value indicating whether the parameter is enabled in the parameter form + """ + @property + def icon(self) -> None: + r""" + WARNING: This variable can only be set, not retrieved. + @brief Sets the icon for the parameter + """ + readonly: bool + r""" + Getter: + @brief Gets a value indicating whether the parameter is read-only (not editable) in the parameter form + + Setter: + @brief Sets a value indicating whether the parameter is made read-only (not editable) in the parameter form + """ + tooltip: str + r""" + Getter: + @brief Gets the tool tip text + + Setter: + @brief Sets the tool tip text + + The tool tip is shown when hovering over the parameter label or edit field. + """ + value: Any + r""" + Getter: + @brief Gets the value of the parameter + + Setter: + @brief Sets the value of the parameter + """ + visible: bool + r""" + Getter: + @brief Gets a value indicating whether the parameter is visible in the parameter form + + Setter: + @brief Sets a value indicating whether the parameter is visible in the parameter form + """ + @classmethod + def new(cls) -> PCellParameterState: + r""" + @brief Creates a new object of this class + """ + def __copy__(self) -> PCellParameterState: + r""" + @brief Creates a copy of self + """ + def __deepcopy__(self) -> PCellParameterState: + r""" + @brief Creates a copy of self + """ + def __init__(self) -> None: + r""" + @brief Creates a new object of this class + """ + def _create(self) -> None: + r""" + @brief Ensures the C++ object is created + Use this method to ensure the C++ object is created, for example to ensure that resources are allocated. Usually C++ objects are created on demand and not necessarily when the script object is created. + """ + def _destroy(self) -> None: + r""" + @brief Explicitly destroys the object + Explicitly destroys the object on C++ side if it was owned by the script interpreter. Subsequent access to this object will throw an exception. + If the object is not owned by the script, this method will do nothing. + """ + def _destroyed(self) -> bool: + r""" + @brief Returns a value indicating whether the object was already destroyed + This method returns true, if the object was destroyed, either explicitly or by the C++ side. + The latter may happen, if the object is owned by a C++ object which got destroyed itself. + """ + def _is_const_object(self) -> bool: + r""" + @brief Returns a value indicating whether the reference is a const reference + This method returns true, if self is a const reference. + In that case, only const methods may be called on self. + """ + def _manage(self) -> None: + r""" + @brief Marks the object as managed by the script side. + After calling this method on an object, the script side will be responsible for the management of the object. This method may be called if an object is returned from a C++ function and the object is known not to be owned by any C++ instance. If necessary, the script side may delete the object if the script's reference is no longer required. + + Usually it's not required to call this method. It has been introduced in version 0.24. + """ + def _unmanage(self) -> None: + r""" + @brief Marks the object as no longer owned by the script side. + Calling this method will make this object no longer owned by the script's memory management. Instead, the object must be managed in some other way. Usually this method may be called if it is known that some C++ object holds and manages this object. Technically speaking, this method will turn the script's reference into a weak reference. After the script engine decides to delete the reference, the object itself will still exist. If the object is not managed otherwise, memory leaks will occur. + + Usually it's not required to call this method. It has been introduced in version 0.24. + """ + def assign(self, other: PCellParameterState) -> None: + r""" + @brief Assigns another object to self + """ + def create(self) -> None: + r""" + @brief Ensures the C++ object is created + Use this method to ensure the C++ object is created, for example to ensure that resources are allocated. Usually C++ objects are created on demand and not necessarily when the script object is created. + """ + def destroy(self) -> None: + r""" + @brief Explicitly destroys the object + Explicitly destroys the object on C++ side if it was owned by the script interpreter. Subsequent access to this object will throw an exception. + If the object is not owned by the script, this method will do nothing. + """ + def destroyed(self) -> bool: + r""" + @brief Returns a value indicating whether the object was already destroyed + This method returns true, if the object was destroyed, either explicitly or by the C++ side. + The latter may happen, if the object is owned by a C++ object which got destroyed itself. + """ + def dup(self) -> PCellParameterState: + r""" + @brief Creates a copy of self + """ + def is_const_object(self) -> bool: + r""" + @brief Returns a value indicating whether the reference is a const reference + This method returns true, if self is a const reference. + In that case, only const methods may be called on self. + """ + def is_enabled(self) -> bool: + r""" + @brief Gets a value indicating whether the parameter is enabled in the parameter form + """ + def is_readonly(self) -> bool: + r""" + @brief Gets a value indicating whether the parameter is read-only (not editable) in the parameter form + """ + def is_visible(self) -> bool: + r""" + @brief Gets a value indicating whether the parameter is visible in the parameter form + """ + +class PCellParameterStates: + r""" + @brief Provides access to the parameter states inside a 'callback' implementation of a PCell + + Example: enables or disables a parameter 'n' based on the value: + + @code + n_param = states.parameter("n") + n_param.enabled = n_param.value > 1.0 + @/code + + This class has been introduced in version 0.28. + """ + @classmethod + def new(cls) -> PCellParameterStates: + r""" + @brief Creates a new object of this class + """ + def __copy__(self) -> PCellParameterStates: + r""" + @brief Creates a copy of self + """ + def __deepcopy__(self) -> PCellParameterStates: + r""" + @brief Creates a copy of self + """ + def __init__(self) -> None: + r""" + @brief Creates a new object of this class + """ + def _create(self) -> None: + r""" + @brief Ensures the C++ object is created + Use this method to ensure the C++ object is created, for example to ensure that resources are allocated. Usually C++ objects are created on demand and not necessarily when the script object is created. + """ + def _destroy(self) -> None: + r""" + @brief Explicitly destroys the object + Explicitly destroys the object on C++ side if it was owned by the script interpreter. Subsequent access to this object will throw an exception. + If the object is not owned by the script, this method will do nothing. + """ + def _destroyed(self) -> bool: + r""" + @brief Returns a value indicating whether the object was already destroyed + This method returns true, if the object was destroyed, either explicitly or by the C++ side. + The latter may happen, if the object is owned by a C++ object which got destroyed itself. + """ + def _is_const_object(self) -> bool: + r""" + @brief Returns a value indicating whether the reference is a const reference + This method returns true, if self is a const reference. + In that case, only const methods may be called on self. + """ + def _manage(self) -> None: + r""" + @brief Marks the object as managed by the script side. + After calling this method on an object, the script side will be responsible for the management of the object. This method may be called if an object is returned from a C++ function and the object is known not to be owned by any C++ instance. If necessary, the script side may delete the object if the script's reference is no longer required. + + Usually it's not required to call this method. It has been introduced in version 0.24. + """ + def _unmanage(self) -> None: + r""" + @brief Marks the object as no longer owned by the script side. + Calling this method will make this object no longer owned by the script's memory management. Instead, the object must be managed in some other way. Usually this method may be called if it is known that some C++ object holds and manages this object. Technically speaking, this method will turn the script's reference into a weak reference. After the script engine decides to delete the reference, the object itself will still exist. If the object is not managed otherwise, memory leaks will occur. + + Usually it's not required to call this method. It has been introduced in version 0.24. + """ + def assign(self, other: PCellParameterStates) -> None: + r""" + @brief Assigns another object to self + """ + def create(self) -> None: + r""" + @brief Ensures the C++ object is created + Use this method to ensure the C++ object is created, for example to ensure that resources are allocated. Usually C++ objects are created on demand and not necessarily when the script object is created. + """ + def destroy(self) -> None: + r""" + @brief Explicitly destroys the object + Explicitly destroys the object on C++ side if it was owned by the script interpreter. Subsequent access to this object will throw an exception. + If the object is not owned by the script, this method will do nothing. + """ + def destroyed(self) -> bool: + r""" + @brief Returns a value indicating whether the object was already destroyed + This method returns true, if the object was destroyed, either explicitly or by the C++ side. + The latter may happen, if the object is owned by a C++ object which got destroyed itself. + """ + def dup(self) -> PCellParameterStates: + r""" + @brief Creates a copy of self + """ + def has_parameter(self, name: str) -> bool: + r""" + @brief Gets a value indicating whether a parameter with that name exists + """ + def is_const_object(self) -> bool: + r""" + @brief Returns a value indicating whether the reference is a const reference + This method returns true, if self is a const reference. + In that case, only const methods may be called on self. + """ + def parameter(self, name: str) -> PCellParameterState: + r""" + @brief Gets the parameter by name + + This will return a \PCellParameterState object that can be used to manipulate the parameter state. + """ + class PCellDeclaration(PCellDeclaration_Native): r""" @brief A PCell declaration providing the parameters and code to produce the PCell @@ -15656,6 +16474,10 @@ class PCellDeclaration(PCellDeclaration_Native): Usually it's not required to call this method. It has been introduced in version 0.24. """ + def callback(self, arg0: Layout, arg1: str, arg2: PCellParameterStates) -> None: + r""" + @hide + """ def can_create_from_shape(self, arg0: Layout, arg1: Shape, arg2: int) -> bool: r""" @hide @@ -15700,6 +16522,12 @@ class PCellParameterDeclaration: r""" @brief Type code: boolean data """ + TypeCallback: ClassVar[int] + r""" + @brief Type code: a button triggering a callback + + This code has been introduced in version 0.28. + """ TypeDouble: ClassVar[int] r""" @brief Type code: floating-point data @@ -15825,6 +16653,10 @@ class PCellParameterDeclaration: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> PCellParameterDeclaration: + r""" + @brief Creates a copy of self + """ @overload def __init__(self, name: str, type: int, description: str) -> None: r""" @@ -15961,6 +16793,10 @@ class Manager: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Manager: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -16184,6 +17020,10 @@ class Matrix2d: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Matrix2d: + r""" + @brief Creates a copy of self + """ @overload def __init__(self) -> None: r""" @@ -16544,6 +17384,10 @@ class IMatrix2d: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> IMatrix2d: + r""" + @brief Creates a copy of self + """ @overload def __init__(self) -> None: r""" @@ -16978,6 +17822,10 @@ class Matrix3d: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Matrix3d: + r""" + @brief Creates a copy of self + """ @overload def __init__(self) -> None: r""" @@ -17395,6 +18243,10 @@ class IMatrix3d: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> IMatrix3d: + r""" + @brief Creates a copy of self + """ @overload def __init__(self) -> None: r""" @@ -17829,6 +18681,10 @@ class Path: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Path: + r""" + @brief Creates a copy of self + """ def __eq__(self, p: object) -> bool: r""" @brief Equality test @@ -18310,6 +19166,10 @@ class DPath: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DPath: + r""" + @brief Creates a copy of self + """ def __eq__(self, p: object) -> bool: r""" @brief Equality test @@ -18720,6 +19580,10 @@ class DPoint: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DPoint: + r""" + @brief Creates a copy of self + """ def __eq__(self, p: object) -> bool: r""" @brief Equality test operator @@ -19047,6 +19911,10 @@ class Point: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Point: + r""" + @brief Creates a copy of self + """ def __eq__(self, p: object) -> bool: r""" @brief Equality test operator @@ -19388,6 +20256,10 @@ class SimplePolygon: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> SimplePolygon: + r""" + @brief Creates a copy of self + """ def __eq__(self, p: object) -> bool: r""" @brief Returns a value indicating whether self is equal to p @@ -20037,6 +20909,10 @@ class DSimplePolygon: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DSimplePolygon: + r""" + @brief Creates a copy of self + """ def __eq__(self, p: object) -> bool: r""" @brief Returns a value indicating whether self is equal to p @@ -20658,6 +21534,10 @@ class Polygon: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Polygon: + r""" + @brief Creates a copy of self + """ def __eq__(self, p: object) -> bool: r""" @brief Returns a value indicating whether the polygons are equal @@ -21592,6 +22472,10 @@ class DPolygon: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DPolygon: + r""" + @brief Creates a copy of self + """ def __eq__(self, p: object) -> bool: r""" @brief Returns a value indicating whether the polygons are equal @@ -22299,6 +23183,10 @@ class LayerMap: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> LayerMap: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -22648,12 +23536,12 @@ class LoadLayoutOptions: @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer for inequality + @brief Compares two enums for inequality """ @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares two enums for inequality + @brief Compares an enum with an integer for inequality """ def __repr__(self) -> str: r""" @@ -23419,6 +24307,10 @@ class LoadLayoutOptions: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> LoadLayoutOptions: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -23787,6 +24679,10 @@ class RecursiveInstanceIterator: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> RecursiveInstanceIterator: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Comparison of iterators - equality @@ -24396,6 +25292,10 @@ class RecursiveShapeIterator: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> RecursiveShapeIterator: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Comparison of iterators - equality @@ -24995,12 +25895,12 @@ class Region(ShapeCollection): @overload def __eq__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer value + @brief Compares two enums """ @overload def __eq__(self, other: object) -> bool: r""" - @brief Compares two enums + @brief Compares an enum with an integer value """ @overload def __init__(self, i: int) -> None: @@ -25025,12 +25925,12 @@ class Region(ShapeCollection): @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares two enums for inequality + @brief Compares an enum with an integer for inequality """ @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer for inequality + @brief Compares two enums for inequality """ def __repr__(self) -> str: r""" @@ -25085,12 +25985,12 @@ class Region(ShapeCollection): @overload def __eq__(self, other: object) -> bool: r""" - @brief Compares two enums + @brief Compares an enum with an integer value """ @overload def __eq__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer value + @brief Compares two enums """ @overload def __init__(self, i: int) -> None: @@ -25115,12 +26015,12 @@ class Region(ShapeCollection): @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer for inequality + @brief Compares two enums for inequality """ @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares two enums for inequality + @brief Compares an enum with an integer for inequality """ def __repr__(self) -> str: r""" @@ -25465,6 +26365,10 @@ class Region(ShapeCollection): r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Region: + r""" + @brief Creates a copy of self + """ def __getitem__(self, n: int) -> Polygon: r""" @brief Returns the nth polygon of the region @@ -25974,7 +26878,6 @@ class Region(ShapeCollection): If "whole_edges" is true, the resulting \EdgePairs collection will receive the whole edges which contribute in the width check. "metrics" can be one of the constants \Euclidian, \Square or \Projection. See there for a description of these constants. - Use nil for this value to select the default (Euclidian metrics). "ignore_angle" specifies the angle limit of two edges. If two edges form an angle equal or above the given value, they will not contribute in the check. Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check. Use nil for this value to select the default. @@ -26010,7 +26913,6 @@ class Region(ShapeCollection): If "whole_edges" is true, the resulting \EdgePairs collection will receive the whole edges which contribute in the width check. "metrics" can be one of the constants \Euclidian, \Square or \Projection. See there for a description of these constants. - Use nil for this value to select the default (Euclidian metrics). "ignore_angle" specifies the angle limit of two edges. If two edges form an angle equal or above the given value, they will not contribute in the check. Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check. Use nil for this value to select the default. @@ -26147,6 +27049,13 @@ class Region(ShapeCollection): @brief Returns all polygons which are members of the other region This method returns all polygons in self which can be found in the other region as well with exactly the same geometry. """ + def in_and_out(self, other: Region) -> List[Region]: + r""" + @brief Returns all polygons which are members and not members of the other region + This method is equivalent to calling \members_of and \not_members_of, but delivers both results at the same time and is more efficient than two separate calls. The first element returned is the \members_of part, the second is the \not_members_of part. + + This method has been introduced in version 0.28. + """ @overload def insert(self, array: Sequence[Polygon]) -> None: r""" @@ -26259,7 +27168,6 @@ class Region(ShapeCollection): If "whole_edges" is true, the resulting \EdgePairs collection will receive the whole edges which contribute in the width check. "metrics" can be one of the constants \Euclidian, \Square or \Projection. See there for a description of these constants. - Use nil for this value to select the default (Euclidian metrics). "ignore_angle" specifies the angle limit of two edges. If two edges form an angle equal or above the given value, they will not contribute in the check. Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check. Use nil for this value to select the default. @@ -26365,7 +27273,6 @@ class Region(ShapeCollection): If "whole_edges" is true, the resulting \EdgePairs collection will receive the whole edges which contribute in the width check. "metrics" can be one of the constants \Euclidian, \Square or \Projection. See there for a description of these constants. - Use nil for this value to select the default (Euclidian metrics). "ignore_angle" specifies the angle limit of two edges. If two edges form an angle equal or above the given value, they will not contribute in the check. Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check. Use nil for this value to select the default. @@ -26739,7 +27646,6 @@ class Region(ShapeCollection): If "whole_edges" is true, the resulting \EdgePairs collection will receive the whole edges which contribute in the space check. "metrics" can be one of the constants \Euclidian, \Square or \Projection. See there for a description of these constants. - Use nil for this value to select the default (Euclidian metrics). "ignore_angle" specifies the angle limit of two edges. If two edges form an angle equal or above the given value, they will not contribute in the check. Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check. Use nil for this value to select the default. @@ -26778,7 +27684,6 @@ class Region(ShapeCollection): If "whole_edges" is true, the resulting \EdgePairs collection will receive the whole edges which contribute in the width check. "metrics" can be one of the constants \Euclidian, \Square or \Projection. See there for a description of these constants. - Use nil for this value to select the default (Euclidian metrics). "ignore_angle" specifies the angle limit of two edges. If two edges form an angle equal or above the given value, they will not contribute in the check. Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check. Use nil for this value to select the default. @@ -27103,7 +28008,6 @@ class Region(ShapeCollection): If "whole_edges" is true, the resulting \EdgePairs collection will receive the whole edges which contribute in the width check. "metrics" can be one of the constants \Euclidian, \Square or \Projection. See there for a description of these constants. - Use nil for this value to select the default (Euclidian metrics). "ignore_angle" specifies the angle limit of two edges. If two edges form an angle equal or above the given value, they will not contribute in the check. Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check. Use nil for this value to select the default. @@ -27270,7 +28174,6 @@ class Region(ShapeCollection): If "whole_edges" is true, the resulting \EdgePairs collection will receive the whole edges which contribute in the width check. "metrics" can be one of the constants \Euclidian, \Square or \Projection. See there for a description of these constants. - Use nil for this value to select the default (Euclidian metrics). "ignore_angle" specifies the angle limit of two edges. If two edges form an angle equal or above the given value, they will not contribute in the check. Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check. Use nil for this value to select the default. @@ -27564,7 +28467,6 @@ class Region(ShapeCollection): If "whole_edges" is true, the resulting \EdgePairs collection will receive the whole edges which contribute in the width check. "metrics" can be one of the constants \Euclidian, \Square or \Projection. See there for a description of these constants. - Use nil for this value to select the default (Euclidian metrics). "ignore_angle" specifies the angle limit of two edges. If two edges form an angle equal or above the given value, they will not contribute in the check. Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check. Use nil for this value to select the default. @@ -27850,6 +28752,9 @@ class Shape: TPathRef: ClassVar[int] r""" """ + TPoint: ClassVar[int] + r""" + """ TPolygon: ClassVar[int] r""" """ @@ -27905,10 +28810,11 @@ class Shape: Starting with version 0.23, this method returns nil, if the shape does not represent a box. Setter: - @brief Replaces the shape by the given box (in micrometer units) - This method replaces the shape by the given box, like \box= with a \Box argument does. This version translates the box from micrometer units to database units internally. + @brief Replaces the shape by the given box + This method replaces the shape by the given box. This method can only be called for editable layouts. It does not change the user properties of the shape. + Calling this method will invalidate any iterators. It should not be called inside a loop iterating over shapes. - This method has been introduced in version 0.25. + This method has been introduced in version 0.22. """ box_center: Point r""" @@ -28040,12 +28946,11 @@ class Shape: This method has been introduced in version 0.23. Setter: - @brief Sets the lower left corner of the box with the point being given in micrometer units + @brief Sets the lower left point of the box Applies to boxes only. Changes the lower left point of the box and throws an exception if the shape is not a box. - Translation from micrometer units to database units is done internally. - This method has been introduced in version 0.25. + This method has been introduced in version 0.23. """ box_p2: Point r""" @@ -28057,12 +28962,11 @@ class Shape: This method has been introduced in version 0.23. Setter: - @brief Sets the upper right corner of the box with the point being given in micrometer units + @brief Sets the upper right point of the box Applies to boxes only. Changes the upper right point of the box and throws an exception if the shape is not a box. - Translation from micrometer units to database units is done internally. - This method has been introduced in version 0.25. + This method has been introduced in version 0.23. """ box_width: int r""" @@ -28151,6 +29055,20 @@ class Shape: This method has been introduced in version 0.25. """ + dpoint: Any + r""" + Getter: + @brief Returns the point object as a \DPoint object in micrometer units + See \point for a description of this method. This method returns the point after translation to micrometer units. + + This method has been introduced in version 0.28. + + Setter: + @brief Replaces the shape by the given point (in micrometer units) + This method replaces the shape by the given point, like \point= with a \Point argument does. This version translates the point from micrometer units to database units internally. + + This method has been introduced in version 0.28. + """ dpolygon: Any r""" Getter: @@ -28202,10 +29120,11 @@ class Shape: Starting with version 0.23, this method returns nil, if the shape does not represent an edge. Setter: - @brief Replaces the shape by the given edge (in micrometer units) - This method replaces the shape by the given edge, like \edge= with a \Edge argument does. This version translates the edge from micrometer units to database units internally. + @brief Replaces the shape by the given edge + This method replaces the shape by the given edge. This method can only be called for editable layouts. It does not change the user properties of the shape. + Calling this method will invalidate any iterators. It should not be called inside a loop iterating over shapes. - This method has been introduced in version 0.25. + This method has been introduced in version 0.22. """ edge_pair: Any r""" @@ -28214,8 +29133,9 @@ class Shape: This method has been introduced in version 0.26. Setter: - @brief Replaces the shape by the given edge pair (in micrometer units) - This method replaces the shape by the given edge pair, like \edge_pair= with a \EdgePair argument does. This version translates the edge pair from micrometer units to database units internally. + @brief Replaces the shape by the given edge pair + This method replaces the shape by the given edge pair. This method can only be called for editable layouts. It does not change the user properties of the shape. + Calling this method will invalidate any iterators. It should not be called inside a loop iterating over shapes. This method has been introduced in version 0.26. """ @@ -28341,6 +29261,20 @@ class Shape: This method has been introduced in version 0.23. """ + point: Any + r""" + Getter: + @brief Returns the point object + + This method has been introduced in version 0.28. + + Setter: + @brief Replaces the shape by the given point + This method replaces the shape by the given point. This method can only be called for editable layouts. It does not change the user properties of the shape. + Calling this method will invalidate any iterators. It should not be called inside a loop iterating over shapes. + + This method has been introduced in version 0.28. + """ polygon: Any r""" Getter: @@ -28351,11 +29285,10 @@ class Shape: Starting with version 0.23, this method returns nil, if the shape does not represent a geometrical primitive that can be converted to a polygon. Setter: - @brief Replaces the shape by the given polygon object - This method replaces the shape by the given polygon object. This method can only be called for editable layouts. It does not change the user properties of the shape. - Calling this method will invalidate any iterators. It should not be called inside a loop iterating over shapes. + @brief Replaces the shape by the given polygon (in micrometer units) + This method replaces the shape by the given polygon, like \polygon= with a \Polygon argument does. This version translates the polygon from micrometer units to database units internally. - This method has been introduced in version 0.22. + This method has been introduced in version 0.25. """ prop_id: int r""" @@ -28618,6 +29551,10 @@ class Shape: r""" """ @classmethod + def t_point(cls) -> int: + r""" + """ + @classmethod def t_polygon(cls) -> int: r""" """ @@ -28685,6 +29622,10 @@ class Shape: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Shape: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Equality operator @@ -28960,6 +29901,12 @@ class Shape: r""" @brief Returns true, if the shape is a path """ + def is_point(self) -> bool: + r""" + @brief Returns true, if the object is an point + + This method has been introduced in version 0.28. + """ def is_polygon(self) -> bool: r""" @brief Returns true, if the shape is a polygon @@ -29097,6 +30044,10 @@ class ShapeProcessor: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> ShapeProcessor: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -29506,6 +30457,11 @@ class Shapes: r""" @brief Indicates that paths shall be retrieved """ + SPoints: ClassVar[int] + r""" + @brief Indicates that points shall be retrieved + This constant has been added in version 0.28. + """ SPolygons: ClassVar[int] r""" @brief Indicates that polygons shall be retrieved @@ -29564,6 +30520,12 @@ class Shapes: @brief Indicates that paths shall be retrieved """ @classmethod + def s_points(cls) -> int: + r""" + @brief Indicates that points shall be retrieved + This constant has been added in version 0.28. + """ + @classmethod def s_polygons(cls) -> int: r""" @brief Indicates that polygons shall be retrieved @@ -29594,6 +30556,10 @@ class Shapes: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Shapes: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -29883,6 +30849,22 @@ class Shapes: Starting with version 0.16, this method returns a reference to the newly created shape """ @overload + def insert(self, point: DPoint) -> Shape: + r""" + @brief Inserts a micrometer-unit point into the shapes list + @return A reference to the new shape (a \Shape object) + This method behaves like the \insert version with a \Point argument, except that it will internally translate the point from micrometer to database units. + + This variant has been introduced in version 0.28. + """ + @overload + def insert(self, point: Point) -> Shape: + r""" + @brief Inserts an point into the shapes list + + This variant has been introduced in version 0.28. + """ + @overload def insert(self, polygon: DPolygon) -> Shape: r""" @brief Inserts a micrometer-unit polygon into the shapes list @@ -30396,6 +31378,12 @@ class Shapes: The property Id must be obtained from the \Layout object's property_id method which associates a property set with a property Id. Starting with version 0.16, this method returns a reference to the newly created shape """ + def insert_point(self, point: Point) -> Shape: + r""" + @brief Inserts an point into the shapes list + + This variant has been introduced in version 0.28. + """ def insert_polygon(self, polygon: Polygon) -> Shape: r""" @brief Inserts a polygon into the shapes list @@ -30539,6 +31527,24 @@ class Shapes: This method is permitted in editable mode only. """ @overload + def replace(self, shape: Shape, point: DPoint) -> Shape: + r""" + @brief Replaces the given shape with an point given in micrometer units + @return A reference to the new shape (a \Shape object) + + This method behaves like the \replace version with an \Point argument, except that it will internally translate the point from micrometer to database units. + + This variant has been introduced in version 0.28. + """ + @overload + def replace(self, shape: Shape, point: Point) -> Shape: + r""" + @brief Replaces the given shape with an point object + + This method replaces the given shape with the object specified. It does not change the property Id. To change the property Id, use the \replace_prop_id method. To replace a shape and discard the property Id, erase the shape and insert a new shape. + This variant has been introduced in version 0.28. + """ + @overload def replace(self, shape: Shape, polygon: DPolygon) -> Shape: r""" @brief Replaces the given shape with a polygon given in micrometer units @@ -30965,6 +31971,10 @@ class Technology: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Technology: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -31274,6 +32284,10 @@ class Text: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Text: + r""" + @brief Creates a copy of self + """ def __eq__(self, text: object) -> bool: r""" @brief Equality @@ -31640,8 +32654,7 @@ class DText: Setter: @brief Sets the vertical alignment - This property specifies how the text is aligned relative to the anchor point. - This property has been introduced in version 0.22 and extended to enums in 0.28. + This is the version accepting integer values. It's provided for backward compatibility. """ x: float r""" @@ -31724,6 +32737,10 @@ class DText: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DText: + r""" + @brief Creates a copy of self + """ def __eq__(self, text: object) -> bool: r""" @brief Equality @@ -32028,10 +33045,9 @@ class HAlign: r""" @brief Creates a copy of self """ - @overload - def __eq__(self, other: object) -> bool: + def __deepcopy__(self) -> HAlign: r""" - @brief Compares an enum with an integer value + @brief Creates a copy of self """ @overload def __eq__(self, other: object) -> bool: @@ -32039,6 +33055,11 @@ class HAlign: @brief Compares two enums """ @overload + def __eq__(self, other: object) -> bool: + r""" + @brief Compares an enum with an integer value + """ + @overload def __init__(self, i: int) -> None: r""" @brief Creates an enum from an integer value @@ -32194,6 +33215,10 @@ class VAlign: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> VAlign: + r""" + @brief Creates a copy of self + """ @overload def __eq__(self, other: object) -> bool: r""" @@ -32337,6 +33362,10 @@ class TileOutputReceiverBase: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> TileOutputReceiverBase: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -32581,6 +33610,10 @@ class TilingProcessor: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> TilingProcessor: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -32659,6 +33692,8 @@ class TilingProcessor: @brief Specifies input for the tiling processor This method will establish an input channel for the processor. This version receives input from an \EdgePairs object. Edge pair collections don't always come with a database unit, hence a database unit should be specified with the \dbu= method unless a layout object is specified as input too. + Caution: the EdgePairs object must stay valid during the lifetime of the tiling processor. Take care to store it in a variable to prevent early destruction of the EdgePairs object. Not doing so may crash the application. + The name specifies the variable under which the input can be used in the scripts. This variant has been introduced in version 0.27. """ @@ -32668,6 +33703,8 @@ class TilingProcessor: @brief Specifies input for the tiling processor This method will establish an input channel for the processor. This version receives input from an \Edges object. Edge collections don't always come with a database unit, hence a database unit should be specified with the \dbu= method unless a layout object is specified as input too. + Caution: the Edges object must stay valid during the lifetime of the tiling processor. Take care to store it in a variable to prevent early destruction of the Edges object. Not doing so may crash the application. + The name specifies the variable under which the input can be used in the scripts. """ @overload @@ -32684,6 +33721,8 @@ class TilingProcessor: @brief Specifies input for the tiling processor This method will establish an input channel for the processor. This version receives input from a \Region object. Regions don't always come with a database unit, hence a database unit should be specified with the \dbu= method unless a layout object is specified as input too. + Caution: the Region object must stay valid during the lifetime of the tiling processor. Take care to store it in a variable to prevent early destruction of the Region object. Not doing so may crash the application. + The name specifies the variable under which the input can be used in the scripts. """ @overload @@ -32692,6 +33731,8 @@ class TilingProcessor: @brief Specifies input for the tiling processor This method will establish an input channel for the processor. This version receives input from an \Texts object. Text collections don't always come with a database unit, hence a database unit should be specified with the \dbu= method unless a layout object is specified as input too. + Caution: the Texts object must stay valid during the lifetime of the tiling processor. Take care to store it in a variable to prevent early destruction of the Texts object. Not doing so may crash the application. + The name specifies the variable under which the input can be used in the scripts. This variant has been introduced in version 0.27. """ @@ -32701,6 +33742,8 @@ class TilingProcessor: @brief Specifies input for the tiling processor This method will establish an input channel for the processor. This version receives input from an \EdgePairs object. Edge pair collections don't always come with a database unit, hence a database unit should be specified with the \dbu= method unless a layout object is specified as input too. + Caution: the EdgePairs object must stay valid during the lifetime of the tiling processor. Take care to store it in a variable to prevent early destruction of the EdgePairs object. Not doing so may crash the application. + The name specifies the variable under which the input can be used in the scripts. This variant has been introduced in version 0.27. """ @@ -32710,6 +33753,8 @@ class TilingProcessor: @brief Specifies input for the tiling processor This method will establish an input channel for the processor. This version receives input from an \Edges object. Edge collections don't always come with a database unit, hence a database unit should be specified with the \dbu= method unless a layout object is specified as input too. + Caution: the Edges object must stay valid during the lifetime of the tiling processor. Take care to store it in a variable to prevent early destruction of the Edges object. Not doing so may crash the application. + The name specifies the variable under which the input can be used in the scripts. This variant allows one to specify an additional transformation too. It has been introduced in version 0.23.2. @@ -32729,6 +33774,8 @@ class TilingProcessor: @brief Specifies input for the tiling processor This method will establish an input channel for the processor. This version receives input from a \Region object. Regions don't always come with a database unit, hence a database unit should be specified with the \dbu= method unless a layout object is specified as input too. + Caution: the Region object must stay valid during the lifetime of the tiling processor. Take care to store it in a variable to prevent early destruction of the Region object. Not doing so may crash the application. + The name specifies the variable under which the input can be used in the scripts. This variant allows one to specify an additional transformation too. It has been introduced in version 0.23.2. """ @@ -32738,6 +33785,8 @@ class TilingProcessor: @brief Specifies input for the tiling processor This method will establish an input channel for the processor. This version receives input from an \Texts object. Text collections don't always come with a database unit, hence a database unit should be specified with the \dbu= method unless a layout object is specified as input too. + Caution: the Texts object must stay valid during the lifetime of the tiling processor. Take care to store it in a variable to prevent early destruction of the Texts object. Not doing so may crash the application. + The name specifies the variable under which the input can be used in the scripts. This variant has been introduced in version 0.27. """ @@ -33164,6 +34213,10 @@ class Trans: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Trans: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Tests for equality @@ -33909,6 +34962,10 @@ class DTrans: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DTrans: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Tests for equality @@ -34701,6 +35758,10 @@ class DCplxTrans: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DCplxTrans: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Tests for equality @@ -35603,6 +36664,10 @@ class CplxTrans: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> CplxTrans: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Tests for equality @@ -36523,6 +37588,10 @@ class ICplxTrans: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> ICplxTrans: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Tests for equality @@ -37415,6 +38484,10 @@ class VCplxTrans: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> VCplxTrans: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Tests for equality @@ -38122,6 +39195,10 @@ class Utils: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Utils: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -38274,6 +39351,10 @@ class DVector: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DVector: + r""" + @brief Creates a copy of self + """ def __eq__(self, v: object) -> bool: r""" @brief Equality test operator @@ -38618,6 +39699,10 @@ class Vector: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Vector: + r""" + @brief Creates a copy of self + """ def __eq__(self, v: object) -> bool: r""" @brief Equality test operator @@ -39022,6 +40107,17 @@ class LayoutDiff: @brief This signal indicates differences in the edges on the current layer The current layer is indicated by the \begin_layer_event signal or can be obtained from the diff object through \LayoutDiff#layer_info_a, \LayoutDiff#layer_index_a, \LayoutDiff#layer_info_b and \LayoutDiff#layer_index_b. In verbose mode (see \Verbose flag) more signals will be emitted for edges that are different between the two layouts. """ + on_begin_edge_pair_differences: None + r""" + Getter: + @brief This signal indicates differences in the edge pairs on the current layer + The current layer is indicated by the \begin_layer_event signal or can be obtained from the diff object through \LayoutDiff#layer_info_a, \LayoutDiff#layer_index_a, \LayoutDiff#layer_info_b and \LayoutDiff#layer_index_b. In verbose mode (see \Verbose flag) more signals will be emitted for edge pairs that are different between the two layouts. + This event has been introduced in version 0.28. + Setter: + @brief This signal indicates differences in the edge pairs on the current layer + The current layer is indicated by the \begin_layer_event signal or can be obtained from the diff object through \LayoutDiff#layer_info_a, \LayoutDiff#layer_index_a, \LayoutDiff#layer_info_b and \LayoutDiff#layer_index_b. In verbose mode (see \Verbose flag) more signals will be emitted for edge pairs that are different between the two layouts. + This event has been introduced in version 0.28. + """ on_begin_inst_differences: None r""" Getter: @@ -39128,6 +40224,24 @@ class LayoutDiff: Setter: @brief This signal indicates an edge that is present in the second layout only """ + on_edge_pair_in_a_only: None + r""" + Getter: + @brief This signal indicates an edge pair that is present in the first layout only + This event has been introduced in version 0.28. + Setter: + @brief This signal indicates an edge pair that is present in the first layout only + This event has been introduced in version 0.28. + """ + on_edge_pair_in_b_only: None + r""" + Getter: + @brief This signal indicates an edge pair that is present in the second layout only + This event has been introduced in version 0.28. + Setter: + @brief This signal indicates an edge pair that is present in the second layout only + This event has been introduced in version 0.28. + """ on_end_box_differences: None r""" Getter: @@ -39152,6 +40266,17 @@ class LayoutDiff: Setter: @brief This signal indicates the end of sequence of edge differences """ + on_end_edge_pair_differences: None + r""" + Getter: + @brief This signal indicates the end of sequence of edge pair differences + + This event has been introduced in version 0.28. + Setter: + @brief This signal indicates the end of sequence of edge pair differences + + This event has been introduced in version 0.28. + """ on_end_inst_differences: None r""" Getter: @@ -39295,6 +40420,10 @@ class LayoutDiff: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> LayoutDiff: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -39530,6 +40659,10 @@ class TextGenerator: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> TextGenerator: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -39711,6 +40844,10 @@ class NetlistObject: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> NetlistObject: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -39899,6 +41036,10 @@ class DeviceReconnectedTerminal: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DeviceReconnectedTerminal: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -40006,6 +41147,10 @@ class DeviceAbstractRef: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DeviceAbstractRef: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -40270,7 +41415,7 @@ class Device(NetlistObject): @overload def net_for_terminal(self, terminal_name: str) -> Net: r""" - @brief Gets the net connected to the specified terminal. + @brief Gets the net connected to the specified terminal (non-const version). If the terminal is not connected, nil is returned for the net. This convenience method has been introduced in version 0.27.3. @@ -40278,7 +41423,7 @@ class Device(NetlistObject): @overload def net_for_terminal(self, terminal_name: str) -> Net: r""" - @brief Gets the net connected to the specified terminal (non-const version). + @brief Gets the net connected to the specified terminal. If the terminal is not connected, nil is returned for the net. This convenience method has been introduced in version 0.27.3. @@ -40331,6 +41476,10 @@ class DeviceAbstract: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DeviceAbstract: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -40420,14 +41569,14 @@ class DeviceAbstract: @overload def netlist(self) -> Netlist: r""" - @brief Gets the netlist the device abstract lives in. + @brief Gets the netlist the device abstract lives in (non-const version). + + This constness variant has been introduced in version 0.26.8 """ @overload def netlist(self) -> Netlist: r""" - @brief Gets the netlist the device abstract lives in (non-const version). - - This constness variant has been introduced in version 0.26.8 + @brief Gets the netlist the device abstract lives in. """ class SubCircuit(NetlistObject): @@ -40513,16 +41662,16 @@ class SubCircuit(NetlistObject): @overload def circuit(self) -> Circuit: r""" - @brief Gets the circuit the subcircuit lives in (non-const version). + @brief Gets the circuit the subcircuit lives in. This is NOT the circuit which is referenced. For getting the circuit that the subcircuit references, use \circuit_ref. - - This constness variant has been introduced in version 0.26.8 """ @overload def circuit(self) -> Circuit: r""" - @brief Gets the circuit the subcircuit lives in. + @brief Gets the circuit the subcircuit lives in (non-const version). This is NOT the circuit which is referenced. For getting the circuit that the subcircuit references, use \circuit_ref. + + This constness variant has been introduced in version 0.26.8 """ @overload def circuit_ref(self) -> Circuit: @@ -40602,6 +41751,10 @@ class NetTerminalRef: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> NetTerminalRef: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -40667,16 +41820,16 @@ class NetTerminalRef: @overload def device(self) -> Device: r""" - @brief Gets the device reference (non-const version). + @brief Gets the device reference. Gets the device object that this connection is made to. - - This constness variant has been introduced in version 0.26.8 """ @overload def device(self) -> Device: r""" - @brief Gets the device reference. + @brief Gets the device reference (non-const version). Gets the device object that this connection is made to. + + This constness variant has been introduced in version 0.26.8 """ def device_class(self) -> DeviceClass: r""" @@ -40729,6 +41882,10 @@ class NetPinRef: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> NetPinRef: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -40838,6 +41995,10 @@ class NetSubcircuitPinRef: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> NetSubcircuitPinRef: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -41153,6 +42314,10 @@ class DeviceTerminalDefinition: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DeviceTerminalDefinition: + r""" + @brief Creates a copy of self + """ def __init__(self, name: str, description: Optional[str] = ...) -> None: r""" @brief Creates a new terminal definition. @@ -41284,6 +42449,10 @@ class DeviceParameterDefinition: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DeviceParameterDefinition: + r""" + @brief Creates a copy of self + """ def __init__(self, name: str, description: Optional[str] = ..., default_value: Optional[float] = ..., is_primary: Optional[bool] = ..., si_scaling: Optional[float] = ...) -> None: r""" @brief Creates a new parameter definition. @@ -41418,6 +42587,10 @@ class EqualDeviceParameters: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> EqualDeviceParameters: + r""" + @brief Creates a copy of self + """ def __iadd__(self, other: EqualDeviceParameters) -> EqualDeviceParameters: r""" @brief Combines two parameters for comparison (in-place). @@ -41580,6 +42753,10 @@ class GenericDeviceCombiner: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> GenericDeviceCombiner: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -41750,6 +42927,10 @@ class DeviceClass: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DeviceClass: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -42443,6 +43624,10 @@ class Netlist: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Netlist: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -42582,6 +43767,12 @@ class Netlist: The latter may happen, if the object is owned by a C++ object which got destroyed itself. """ @overload + def device_class_by_name(self, name: str) -> DeviceClass: + r""" + @brief Gets the device class for a given name. + If the name is not a valid device class name, nil is returned. + """ + @overload def device_class_by_name(self, name: str) -> DeviceClass: r""" @brief Gets the device class for a given name (const version). @@ -42589,17 +43780,16 @@ class Netlist: This constness variant has been introduced in version 0.26.8 """ - @overload - def device_class_by_name(self, name: str) -> DeviceClass: - r""" - @brief Gets the device class for a given name. - If the name is not a valid device class name, nil is returned. - """ def dup(self) -> Netlist: r""" @brief Creates a copy of self """ @overload + def each_circuit(self) -> Iterator[Circuit]: + r""" + @brief Iterates over the circuits of the netlist + """ + @overload def each_circuit(self) -> Iterator[Circuit]: r""" @brief Iterates over the circuits of the netlist (const version) @@ -42607,17 +43797,6 @@ class Netlist: This constness variant has been introduced in version 0.26.8 """ @overload - def each_circuit(self) -> Iterator[Circuit]: - r""" - @brief Iterates over the circuits of the netlist - """ - @overload - def each_circuit_bottom_up(self) -> Iterator[Circuit]: - r""" - @brief Iterates over the circuits bottom-up - Iterating bottom-up means the parent circuits come after the child circuits. This is the basically the reverse order as delivered by \each_circuit_top_down. - """ - @overload def each_circuit_bottom_up(self) -> Iterator[Circuit]: r""" @brief Iterates over the circuits bottom-up (const version) @@ -42626,6 +43805,12 @@ class Netlist: This constness variant has been introduced in version 0.26.8 """ @overload + def each_circuit_bottom_up(self) -> Iterator[Circuit]: + r""" + @brief Iterates over the circuits bottom-up + Iterating bottom-up means the parent circuits come after the child circuits. This is the basically the reverse order as delivered by \each_circuit_top_down. + """ + @overload def each_circuit_top_down(self) -> Iterator[Circuit]: r""" @brief Iterates over the circuits top-down @@ -42768,6 +43953,10 @@ class NetlistSpiceWriterDelegate: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> NetlistSpiceWriterDelegate: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -43045,6 +44234,10 @@ class NetlistSpiceWriter(NetlistWriter): r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> NetlistSpiceWriter: + r""" + @brief Creates a copy of self + """ @overload def __init__(self) -> None: r""" @@ -43210,6 +44403,10 @@ class ParseElementComponentsData: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> ParseElementComponentsData: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -43331,6 +44528,10 @@ class ParseElementData: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> ParseElementData: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -43422,6 +44623,10 @@ class NetlistSpiceReaderDelegate: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> NetlistSpiceReaderDelegate: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -44452,6 +45657,10 @@ class DeviceClassFactory: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DeviceClassFactory: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -44589,6 +45798,10 @@ class NetlistDeviceExtractorError: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> NetlistDeviceExtractorError: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -44680,6 +45893,10 @@ class NetlistDeviceExtractorLayerDefinition: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> NetlistDeviceExtractorLayerDefinition: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -44997,6 +46214,30 @@ class GenericDeviceExtractor(DeviceExtractorBase): specified in database units. """ @overload + def define_terminal(self, device: Device, terminal_name: str, layer_name: str, point: Point) -> None: + r""" + @brief Defines a device terminal using names for terminal and layer. + + This convenience version of the ID-based \define_terminal methods allows using names for terminal and layer. + It has been introduced in version 0.28. + """ + @overload + def define_terminal(self, device: Device, terminal_name: str, layer_name: str, shape: Box) -> None: + r""" + @brief Defines a device terminal using names for terminal and layer. + + This convenience version of the ID-based \define_terminal methods allows using names for terminal and layer. + It has been introduced in version 0.28. + """ + @overload + def define_terminal(self, device: Device, terminal_name: str, layer_name: str, shape: Polygon) -> None: + r""" + @brief Defines a device terminal using names for terminal and layer. + + This convenience version of the ID-based \define_terminal methods allows using names for terminal and layer. + It has been introduced in version 0.28. + """ + @overload def error(self, message: str) -> None: r""" @brief Issues an error with the given message @@ -45820,6 +47061,10 @@ class Connectivity: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Connectivity: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -45993,12 +47238,12 @@ class LayoutToNetlist: @overload def __eq__(self, other: object) -> bool: r""" - @brief Compares two enums + @brief Compares an enum with an integer value """ @overload def __eq__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer value + @brief Compares two enums """ @overload def __init__(self, i: int) -> None: @@ -47233,12 +48478,12 @@ class GenericNetlistCompareLogger(NetlistCompareLogger): @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares two enums for inequality + @brief Compares an enum with an integer for inequality """ @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer for inequality + @brief Compares two enums for inequality """ def __repr__(self) -> str: r""" @@ -48303,6 +49548,10 @@ class Texts(ShapeCollection): r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Texts: + r""" + @brief Creates a copy of self + """ def __getitem__(self, n: int) -> Text: r""" @brief Returns the nth text @@ -49585,6 +50834,10 @@ class LEFDEFReaderConfiguration: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> LEFDEFReaderConfiguration: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -49883,9 +51136,9 @@ class LEFDEFReaderConfiguration: Mask specific rules have been introduced in version 0.27. """ -class NetTracerTechnology(TechnologyComponent): +class NetTracerConnectivity: r""" - @brief A technology description for the net tracer + @brief A connectivity description for the net tracer This object represents the technology description for the net tracer (represented by the \NetTracer class). A technology description basically consists of connection declarations. @@ -49897,12 +51150,42 @@ class NetTracerTechnology(TechnologyComponent): For details about the expressions see the description of the net tracer feature. - This class has been introduced in version 0.25. + This class has been introduced in version 0.28 and replaces the 'NetTracerTechnology' class which has been generalized. """ - def __copy__(self) -> NetTracerTechnology: + description: str + r""" + Getter: + @brief Gets the description text of the connectivty definition + The description is an optional string giving a human-readable description for this definition. + Setter: + @brief Sets the description of the connectivty definition + """ + name: str + r""" + Getter: + @brief Gets the name of the connectivty definition + The name is an optional string defining the formal name for this definition. + + Setter: + @brief Sets the name of the connectivty definition + """ + @classmethod + def new(cls) -> NetTracerConnectivity: + r""" + @brief Creates a new object of this class + """ + def __copy__(self) -> NetTracerConnectivity: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> NetTracerConnectivity: + r""" + @brief Creates a copy of self + """ + def __init__(self) -> None: + r""" + @brief Creates a new object of this class + """ def _create(self) -> None: r""" @brief Ensures the C++ object is created @@ -49940,7 +51223,7 @@ class NetTracerTechnology(TechnologyComponent): Usually it's not required to call this method. It has been introduced in version 0.24. """ - def assign(self, other: TechnologyComponent) -> None: + def assign(self, other: NetTracerConnectivity) -> None: r""" @brief Assigns another object to self """ @@ -49956,10 +51239,33 @@ class NetTracerTechnology(TechnologyComponent): @brief Defines a connection between materials through a via See the class description for details about this method. """ - def dup(self) -> NetTracerTechnology: + def create(self) -> None: + r""" + @brief Ensures the C++ object is created + Use this method to ensure the C++ object is created, for example to ensure that resources are allocated. Usually C++ objects are created on demand and not necessarily when the script object is created. + """ + def destroy(self) -> None: + r""" + @brief Explicitly destroys the object + Explicitly destroys the object on C++ side if it was owned by the script interpreter. Subsequent access to this object will throw an exception. + If the object is not owned by the script, this method will do nothing. + """ + def destroyed(self) -> bool: + r""" + @brief Returns a value indicating whether the object was already destroyed + This method returns true, if the object was destroyed, either explicitly or by the C++ side. + The latter may happen, if the object is owned by a C++ object which got destroyed itself. + """ + def dup(self) -> NetTracerConnectivity: r""" @brief Creates a copy of self """ + def is_const_object(self) -> bool: + r""" + @brief Returns a value indicating whether the reference is a const reference + This method returns true, if self is a const reference. + In that case, only const methods may be called on self. + """ def symbol(self, name: str, expr: str) -> None: r""" @brief Defines a symbol for use in the material expressions. @@ -49989,6 +51295,10 @@ class NetElement: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> NetElement: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -50099,7 +51409,7 @@ class NetTracer: tracer = RBA::NetTracer::new - tech = RBA::NetTracerTechnology::new + tech = RBA::NetTracerConnectivity::new tech.connection("1/0", "2/0", "3/0") tracer.trace(tech, ly, ly.top_cell, RBA::Point::new(7000, 1500), ly.find_layer(1, 0)) @@ -50109,7 +51419,7 @@ class NetTracer: end @/code - This class has been introduced in version 0.25. + This class has been introduced in version 0.25. With version 0.28, the \NetTracerConnectivity class replaces the 'NetTracerTechnology' class. """ trace_depth: int r""" @@ -50136,6 +51446,10 @@ class NetTracer: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> NetTracer: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -50233,7 +51547,7 @@ class NetTracer: This attribute is useful only after the extraction has been performed. """ @overload - def trace(self, tech: NetTracerTechnology, layout: Layout, cell: Cell, start_point: Point, start_layer: int) -> None: + def trace(self, tech: NetTracerConnectivity, layout: Layout, cell: Cell, start_point: Point, start_layer: int) -> None: r""" @brief Runs a net extraction @@ -50242,7 +51556,7 @@ class NetTracer: This version runs a single extraction - i.e. it will extract all elements connected to the given seed point. A path extraction version is provided as well which will extract one (the presumably shortest) path between two points. - @param tech The technology definition + @param tech The connectivity definition @param layout The layout on which to run the extraction @param cell The cell on which to run the extraction (child cells will be included) @param start_point The start point from which to start extraction of the net @@ -50253,9 +51567,18 @@ class NetTracer: r""" @brief Runs a net extraction taking a predefined technology This method behaves identical as the version with a technology object, except that it will look for a technology with the given name to obtain the extraction setup. + The technology is looked up by technology name. A version of this method exists where it is possible to specify the name of the particular connectivity to use in case there are multiple definitions available. """ @overload - def trace(self, tech: NetTracerTechnology, layout: Layout, cell: Cell, start_point: Point, start_layer: int, stop_point: Point, stop_layer: int) -> None: + def trace(self, tech: str, connectivity_name: str, layout: Layout, cell: Cell, start_point: Point, start_layer: int) -> None: + r""" + @brief Runs a net extraction taking a predefined technology + This method behaves identical as the version with a technology object, except that it will look for a technology with the given name to obtain the extraction setup. This version allows specifying the name of the connecvitiy setup. + + This method variant has been introduced in version 0.28. + """ + @overload + def trace(self, tech: NetTracerConnectivity, layout: Layout, cell: Cell, start_point: Point, start_layer: int, stop_point: Point, stop_layer: int) -> None: r""" @brief Runs a path extraction @@ -50264,7 +51587,7 @@ class NetTracer: This version runs a path extraction and will deliver elements forming one path leading from the start to the end point. - @param tech The technology definition + @param tech The connectivity definition @param layout The layout on which to run the extraction @param cell The cell on which to run the extraction (child cells will be included) @param start_point The start point from which to start extraction of the net @@ -50278,4 +51601,12 @@ class NetTracer: @brief Runs a path extraction taking a predefined technology This method behaves identical as the version with a technology object, except that it will look for a technology with the given name to obtain the extraction setup. """ + @overload + def trace(self, tech: str, connectivity_name: str, layout: Layout, cell: Cell, start_point: Point, start_layer: int, stop_point: Point, stop_layer: int) -> None: + r""" + @brief Runs a path extraction taking a predefined technology + This method behaves identical as the version with a technology object, except that it will look for a technology with the given name to obtain the extraction setup.This version allows specifying the name of the connecvitiy setup. + + This method variant has been introduced in version 0.28. + """ diff --git a/src/pymod/distutils_src/klayout/laycore.pyi b/src/pymod/distutils_src/klayout/laycore.pyi index ce9f8b66e..c002720c6 100644 --- a/src/pymod/distutils_src/klayout/laycore.pyi +++ b/src/pymod/distutils_src/klayout/laycore.pyi @@ -55,6 +55,10 @@ class PixelBuffer: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> PixelBuffer: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Returns a value indicating whether self is identical to the other image @@ -239,6 +243,10 @@ class BitmapBuffer: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> BitmapBuffer: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Returns a value indicating whether self is identical to the other image @@ -395,6 +403,10 @@ class MacroExecutionContext: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> MacroExecutionContext: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -635,6 +647,10 @@ class MacroInterpreter: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> MacroInterpreter: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -1635,6 +1651,10 @@ class LayerProperties: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> LayerProperties: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Equality @@ -2221,6 +2241,11 @@ class LayerPropertiesNodeRef(LayerPropertiesNode): @brief Creates a \LayerPropertiesNode object as a copy of the content of this node. This method is mainly provided for backward compatibility with 0.24 and before. """ + def __deepcopy__(self) -> LayerPropertiesNode: + r""" + @brief Creates a \LayerPropertiesNode object as a copy of the content of this node. + This method is mainly provided for backward compatibility with 0.24 and before. + """ def _assign(self, other: LayerProperties) -> None: r""" @brief Assigns another object to self @@ -2271,14 +2296,14 @@ class LayerPropertiesNodeRef(LayerPropertiesNode): r""" @brief Assigns the contents of the 'other' object to self. - This version accepts a \LayerPropertiesNode object and allows modification of the layer node's hierarchy. Assignment will reconfigure the layer node in the view. + This version accepts a \LayerProperties object. Assignment will change the properties of the layer in the view. """ @overload def assign(self, other: LayerProperties) -> None: r""" @brief Assigns the contents of the 'other' object to self. - This version accepts a \LayerProperties object. Assignment will change the properties of the layer in the view. + This version accepts a \LayerPropertiesNode object and allows modification of the layer node's hierarchy. Assignment will reconfigure the layer node in the view. """ def delete(self) -> None: r""" @@ -2317,6 +2342,10 @@ class LayerPropertiesIterator: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> LayerPropertiesIterator: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Equality @@ -2562,12 +2591,12 @@ class LayoutViewBase: @overload def __eq__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer value + @brief Compares two enums """ @overload def __eq__(self, other: object) -> bool: r""" - @brief Compares two enums + @brief Compares an enum with an integer value """ @overload def __init__(self, i: int) -> None: @@ -2592,12 +2621,12 @@ class LayoutViewBase: @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares two enums for inequality + @brief Compares an enum with an integer for inequality """ @overload def __ne__(self, other: object) -> bool: r""" - @brief Compares an enum with an integer for inequality + @brief Compares two enums for inequality """ def __repr__(self) -> str: r""" @@ -2865,6 +2894,24 @@ class LayoutViewBase: @brief A event indicating that annotations have been added or removed This event has been added in version 0.25. """ + on_apply_technology: None + r""" + Getter: + @brief An event indicating that a cellview has requested a new technology + + If the technology of a cellview is changed, this event is triggered. + The integer parameter of this event will indicate the cellview that has changed. + + This event has been introduced in version 0.28. + + Setter: + @brief An event indicating that a cellview has requested a new technology + + If the technology of a cellview is changed, this event is triggered. + The integer parameter of this event will indicate the cellview that has changed. + + This event has been introduced in version 0.28. + """ on_cell_visibility_changed: None r""" Getter: @@ -3873,6 +3920,16 @@ class LayoutViewBase: r""" @brief Hides the given cell for the given cellview """ + def icon_for_layer(self, iter: LayerPropertiesIterator, w: int, h: int, dpr: float, di_off: Optional[int] = ..., no_state: Optional[bool] = ...) -> PixelBuffer: + r""" + @brief Creates an icon pixmap for the given layer. + + The icon will have size w times h pixels multiplied by the device pixel ratio (dpr). The dpr is The number of physical pixels per logical pixels on high-DPI displays. + + 'di_off' will shift the dither pattern by the given number of (physical) pixels. If 'no_state' is true, the icon will not reflect visibility or validity states but rather the display style. + + This method has been introduced in version 0.28. + """ def image(self, id: int) -> Image: r""" @brief Gets the image given by an ID @@ -4895,6 +4952,10 @@ class CellView: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> CellView: + r""" + @brief Creates a copy of self + """ def __eq__(self, other: object) -> bool: r""" @brief Equality: indicates whether the cellviews refer to the same one @@ -5677,11 +5738,11 @@ class ActionBase: def icon(self) -> None: r""" WARNING: This variable can only be set, not retrieved. - @brief Sets the icon to the given image file + @brief Sets the icon to the given \QIcon object - @param file The image file to load for the icon + @param qicon The QIcon object - Passing an empty string will reset the icon. + This variant has been added in version 0.28. """ icon_text: str r""" @@ -6398,6 +6459,10 @@ class Cursor: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Cursor: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -6516,6 +6581,10 @@ class ButtonState: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> ButtonState: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -6670,6 +6739,10 @@ class KeyCode: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> KeyCode: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -6900,6 +6973,10 @@ class DoubleValue: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> DoubleValue: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -7003,6 +7080,10 @@ class IntValue: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> IntValue: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -7106,6 +7187,10 @@ class StringValue: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> StringValue: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -7213,6 +7298,10 @@ class StringListValue: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> StringListValue: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -7516,6 +7605,10 @@ class BrowserSource_Native: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> BrowserSource_Native: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -7631,6 +7724,10 @@ class BrowserSource: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> BrowserSource: + r""" + @brief Creates a copy of self + """ def __init__(self, arg0: str) -> None: r""" @brief Constructs a BrowserSource object with a default HTML string @@ -8027,6 +8124,10 @@ class InputDialog: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> InputDialog: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -8224,6 +8325,10 @@ class FileDialog: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> FileDialog: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -8417,6 +8522,10 @@ class MessageBox(QMainWindow_Native): r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> MessageBox: + r""" + @brief Creates a copy of self + """ def _create(self) -> None: r""" @brief Ensures the C++ object is created @@ -8519,6 +8628,10 @@ class NetlistObjectPath: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> NetlistObjectPath: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -8615,6 +8728,10 @@ class NetlistObjectsPath: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> NetlistObjectsPath: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -9103,6 +9220,10 @@ class BasicAnnotation: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> BasicAnnotation: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -9305,6 +9426,13 @@ class Annotation(BasicAnnotation): @brief Gets the vertical angle code for use with the \angle_constraint method If this value is specified for the angle constraint, only vertical rulers are allowed. """ + OutlineAngle: ClassVar[int] + r""" + @brief Gets the angle measurement ruler outline code for use with the \outline method + When this outline style is specified, the ruler is drawn to indicate the angle between the first and last segment. + + This constant has been introduced in version 0.28. + """ OutlineBox: ClassVar[int] r""" @brief Gets the box outline code for use with the \outline method @@ -9333,6 +9461,13 @@ class Annotation(BasicAnnotation): This constant has been introduced in version 0.26. """ + OutlineRadius: ClassVar[int] + r""" + @brief Gets the radius measurement ruler outline code for use with the \outline method + When this outline style is specified, the ruler is drawn to indicate a radius defined by at least three points of the ruler. + + This constant has been introduced in version 0.28. + """ OutlineXY: ClassVar[int] r""" @brief Gets the xy outline code for use with the \outline method @@ -9375,6 +9510,7 @@ class Annotation(BasicAnnotation): r""" @brief Specifies auto-metric ruler mode for the \register_template method In auto-metric mode, a ruler can be placed with a single click and p1/p2 will be determined from the neighborhood. + This constant has been introduced in version 0.25 """ RulerModeNormal: ClassVar[int] @@ -9387,8 +9523,23 @@ class Annotation(BasicAnnotation): r""" @brief Specifies single-click ruler mode for the \register_template method In single click-mode, a ruler can be placed with a single click and p1 will be == p2. + This constant has been introduced in version 0.25 """ + RulerMultiSegment: ClassVar[int] + r""" + @brief Specifies multi-segment mode + In multi-segment mode, multiple segments can be created. The ruler is finished with a double click. + + This constant has been introduced in version 0.28 + """ + RulerThreeClicks: ClassVar[int] + r""" + @brief Specifies three-click ruler mode for the \register_template method + In this ruler mode, two segments are created for angle and circle radius measurements. Three mouse clicks are required. + + This constant has been introduced in version 0.28 + """ StyleArrowBoth: ClassVar[int] r""" @brief Gets the both arrow ends style code for use the \style method @@ -9543,22 +9694,47 @@ class Annotation(BasicAnnotation): Getter: @brief Gets the first point of the ruler or marker The points of the ruler or marker are always given in micron units in floating-point coordinates. + + This method is provided for backward compatibility. Starting with version 0.28, rulers can be multi-segmented. Use \points or \seg_p1 to retrieve the points of the ruler segments. + @return The first point Setter: @brief Sets the first point of the ruler or marker The points of the ruler or marker are always given in micron units in floating-point coordinates. + + This method is provided for backward compatibility. Starting with version 0.28, rulers can be multi-segmented. Use \points= to specify the ruler segments. """ p2: db.DPoint r""" Getter: @brief Gets the second point of the ruler or marker The points of the ruler or marker are always given in micron units in floating-point coordinates. + + This method is provided for backward compatibility. Starting with version 0.28, rulers can be multi-segmented. Use \points or \seg_p1 to retrieve the points of the ruler segments. + @return The second point Setter: @brief Sets the second point of the ruler or marker The points of the ruler or marker are always given in micron units in floating-point coordinates. + + This method is provided for backward compatibility. Starting with version 0.28, rulers can be multi-segmented. Use \points= to specify the ruler segments. + """ + points: List[db.DPoint] + r""" + Getter: + @brief Gets the points of the ruler + A single-segmented ruler has two points. Rulers with more points have more segments correspondingly. Note that the point list may have one point only (single-point ruler) or may even be empty. + + Use \points= to set the segment points. Use \segments to get the number of segments and \seg_p1 and \seg_p2 to get the first and second point of one segment. + + Multi-segmented rulers have been introduced in version 0.28 + Setter: + @brief Sets the points for a (potentially) multi-segmented ruler + See \points for a description of multi-segmented rulers. The list of points passed to this method is cleaned from duplicates before being stored inside the ruler. + + This method has been introduced in version 0.28. """ snap: bool r""" @@ -9631,85 +9807,12 @@ class Annotation(BasicAnnotation): This method has been introduced in version 0.25 """ @classmethod - def angle_any(cls) -> int: + def from_s(cls, s: str) -> Annotation: r""" - @brief Gets the any angle code for use with the \angle_constraint method - If this value is specified for the angle constraint, all angles will be allowed. - """ - @classmethod - def angle_diagonal(cls) -> int: - r""" - @brief Gets the diagonal angle code for use with the \angle_constraint method - If this value is specified for the angle constraint, only multiples of 45 degree are allowed. - """ - @classmethod - def angle_global(cls) -> int: - r""" - @brief Gets the global angle code for use with the \angle_constraint method. - This code will tell the ruler or marker to use the angle constraint defined globally. - """ - @classmethod - def angle_horizontal(cls) -> int: - r""" - @brief Gets the horizontal angle code for use with the \angle_constraint method - If this value is specified for the angle constraint, only horizontal rulers are allowed. - """ - @classmethod - def angle_ortho(cls) -> int: - r""" - @brief Gets the ortho angle code for use with the \angle_constraint method - If this value is specified for the angle constraint, only multiples of 90 degree are allowed. - """ - @classmethod - def angle_vertical(cls) -> int: - r""" - @brief Gets the vertical angle code for use with the \angle_constraint method - If this value is specified for the angle constraint, only vertical rulers are allowed. - """ - @classmethod - def outline_box(cls) -> int: - r""" - @brief Gets the box outline code for use with the \outline method - When this outline style is specified, a box is drawn with the corners specified by the start and end point. All box edges are drawn in the style specified with the \style attribute. - """ - @classmethod - def outline_diag(cls) -> int: - r""" - @brief Gets the diagonal output code for use with the \outline method - When this outline style is specified, a line connecting start and end points in the given style (ruler, arrow or plain line) is drawn. - """ - @classmethod - def outline_diag_xy(cls) -> int: - r""" - @brief Gets the xy plus diagonal outline code for use with the \outline method - @brief outline_xy code used by the \outline method - When this outline style is specified, three lines are drawn: one horizontal from left to right and attached to the end of that a line from the bottom to the top. Another line is drawn connecting the start and end points directly. The lines are drawn in the specified style (see \style method). - """ - @classmethod - def outline_diag_yx(cls) -> int: - r""" - @brief Gets the yx plus diagonal outline code for use with the \outline method - When this outline style is specified, three lines are drawn: one vertical from bottom to top and attached to the end of that a line from the left to the right. Another line is drawn connecting the start and end points directly. The lines are drawn in the specified style (see \style method). - """ - @classmethod - def outline_ellipse(cls) -> int: - r""" - @brief Gets the ellipse outline code for use with the \outline method - When this outline style is specified, an ellipse is drawn with the extensions specified by the start and end point. The contour drawn as a line. + @brief Creates a ruler from a string representation + This function creates a ruler from the string returned by \to_s. - This constant has been introduced in version 0.26. - """ - @classmethod - def outline_xy(cls) -> int: - r""" - @brief Gets the xy outline code for use with the \outline method - When this outline style is specified, two lines are drawn: one horizontal from left to right and attached to the end of that a line from the bottom to the top. The lines are drawn in the specified style (see \style method). - """ - @classmethod - def outline_yx(cls) -> int: - r""" - @brief Gets the yx outline code for use with the \outline method - When this outline style is specified, two lines are drawn: one vertical from bottom to top and attached to the end of that a line from the left to the right. The lines are drawn in the specified style (see \style method). + This method was introduced in version 0.28. """ @classmethod def register_template(cls, annotation: BasicAnnotation, title: str, mode: Optional[int] = ...) -> None: @@ -9728,60 +9831,6 @@ class Annotation(BasicAnnotation): This method has been added in version 0.25. """ @classmethod - def style_arrow_both(cls) -> int: - r""" - @brief Gets the both arrow ends style code for use the \style method - When this style is specified, a two-headed arrow is drawn. - """ - @classmethod - def style_arrow_end(cls) -> int: - r""" - @brief Gets the end arrow style code for use the \style method - When this style is specified, an arrow is drawn pointing from the start to the end point. - """ - @classmethod - def style_arrow_start(cls) -> int: - r""" - @brief Gets the start arrow style code for use the \style method - When this style is specified, an arrow is drawn pointing from the end to the start point. - """ - @classmethod - def style_cross_both(cls) -> int: - r""" - @brief Gets the line style code for use with the \style method - When this style is specified, a cross is drawn at both points. - - This constant has been added in version 0.26. - """ - @classmethod - def style_cross_end(cls) -> int: - r""" - @brief Gets the line style code for use with the \style method - When this style is specified, a cross is drawn at the end point. - - This constant has been added in version 0.26. - """ - @classmethod - def style_cross_start(cls) -> int: - r""" - @brief Gets the line style code for use with the \style method - When this style is specified, a cross is drawn at the start point. - - This constant has been added in version 0.26. - """ - @classmethod - def style_line(cls) -> int: - r""" - @brief Gets the line style code for use with the \style method - When this style is specified, a plain line is drawn. - """ - @classmethod - def style_ruler(cls) -> int: - r""" - @brief Gets the ruler style code for use the \style method - When this style is specified, the annotation will show a ruler with some ticks at distances indicating a decade of units and a suitable subdivision into minor ticks at intervals of 1, 2 or 5 units. - """ - @classmethod def unregister_templates(cls, category: str) -> None: r""" @brief Unregisters the template or templates with the given category string globally @@ -9883,17 +9932,42 @@ class Annotation(BasicAnnotation): This method was introduced in version 0.25. """ - def text(self) -> str: + def seg_p1(self, segment_index: int) -> db.DPoint: + r""" + @brief Gets the first point of the given segment. + The segment is indicated by the segment index which is a number between 0 and \segments-1. + + This method has been introduced in version 0.28. + """ + def seg_p2(self, segment_index: int) -> db.DPoint: + r""" + @brief Gets the second point of the given segment. + The segment is indicated by the segment index which is a number between 0 and \segments-1. + The second point of a segment is also the first point of the following segment if there is one. + + This method has been introduced in version 0.28. + """ + def segments(self) -> int: + r""" + @brief Gets the number of segments. + This method returns the number of segments the ruler is made up. Even though the ruler can be one or even zero points, the number of segments is at least 1. + + This method has been introduced in version 0.28. + """ + def text(self, index: Optional[int] = ...) -> str: r""" @brief Returns the formatted text for the main label + The index parameter indicates which segment to use (0 is the first one). It has been added in version 0.28. """ - def text_x(self) -> str: + def text_x(self, index: Optional[int] = ...) -> str: r""" @brief Returns the formatted text for the x-axis label + The index parameter indicates which segment to use (0 is the first one). It has been added in version 0.28. """ - def text_y(self) -> str: + def text_y(self, index: Optional[int] = ...) -> str: r""" @brief Returns the formatted text for the y-axis label + The index parameter indicates which segment to use (0 is the first one). It has been added in version 0.28. """ def to_s(self) -> str: r""" @@ -10088,6 +10162,10 @@ class ObjectInstPath: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> ObjectInstPath: + r""" + @brief Creates a copy of self + """ def __eq__(self, b: object) -> bool: r""" @brief Equality of two ObjectInstPath objects @@ -10419,6 +10497,10 @@ class ImageDataMapping: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> ImageDataMapping: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Create a new data mapping object with default settings @@ -10568,6 +10650,10 @@ class BasicImage: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> BasicImage: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class diff --git a/src/pymod/distutils_src/klayout/rdbcore.pyi b/src/pymod/distutils_src/klayout/rdbcore.pyi index a61683af3..39e5c6dbc 100644 --- a/src/pymod/distutils_src/klayout/rdbcore.pyi +++ b/src/pymod/distutils_src/klayout/rdbcore.pyi @@ -35,6 +35,10 @@ class RdbReference: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> RdbReference: + r""" + @brief Creates a copy of self + """ def __init__(self, trans: db.DCplxTrans, parent_cell_id: int) -> None: r""" @brief Creates a reference with a given transformation and parent cell ID @@ -378,23 +382,23 @@ class RdbCategory: @return The category ID """ @overload - def scan_collection(self, cell: RdbCell, trans: db.CplxTrans, edge_pairs: db.EdgePairs, flat: Optional[bool] = ...) -> None: + def scan_collection(self, cell: RdbCell, trans: db.CplxTrans, edge_pairs: db.EdgePairs, flat: Optional[bool] = ..., with_properties: Optional[bool] = ...) -> None: r""" @brief Turns the given edge pair collection into a hierarchical or flat report database This a another flavour of \scan_collection accepting an edge pair collection. - This method has been introduced in version 0.26. + This method has been introduced in version 0.26. The 'with_properties' argument has been added in version 0.28. """ @overload - def scan_collection(self, cell: RdbCell, trans: db.CplxTrans, edges: db.Edges, flat: Optional[bool] = ...) -> None: + def scan_collection(self, cell: RdbCell, trans: db.CplxTrans, edges: db.Edges, flat: Optional[bool] = ..., with_properties: Optional[bool] = ...) -> None: r""" @brief Turns the given edge collection into a hierarchical or flat report database This a another flavour of \scan_collection accepting an edge collection. - This method has been introduced in version 0.26. + This method has been introduced in version 0.26. The 'with_properties' argument has been added in version 0.28. """ @overload - def scan_collection(self, cell: RdbCell, trans: db.CplxTrans, region: db.Region, flat: Optional[bool] = ...) -> None: + def scan_collection(self, cell: RdbCell, trans: db.CplxTrans, region: db.Region, flat: Optional[bool] = ..., with_properties: Optional[bool] = ...) -> None: r""" @brief Turns the given region into a hierarchical or flat report database The exact behavior depends on the nature of the region. If the region is a hierarchical (original or deep) region and the 'flat' argument is false, this method will produce a hierarchical report database in the given category. The 'cell_id' parameter is ignored in this case. Sample references will be produced to supply minimal instantiation information. @@ -403,30 +407,19 @@ class RdbCategory: The transformation argument needs to supply the dbu-to-micron transformation. - This method has been introduced in version 0.26. - """ - @overload - def scan_layer(self, layout: db.Layout, layer: int) -> None: - r""" - @brief Scans a layer from a layout into this category - Creates RDB items for each polygon or edge shape read from the each cell in the layout on the given layer and puts them into this category. - New cells will be generated for every cell encountered in the layout. - Other settings like database unit, description, top cell etc. are not made in the RDB. + If 'with_properties' is true, user properties will be turned into tagged values as well. - This method has been introduced in version 0.23. + This method has been introduced in version 0.26. The 'with_properties' argument has been added in version 0.28. """ @overload - def scan_layer(self, layout: db.Layout, layer: int, cell: db.Cell) -> None: + def scan_collection(self, cell: RdbCell, trans: db.CplxTrans, texts: db.Texts, flat: Optional[bool] = ..., with_properties: Optional[bool] = ...) -> None: r""" - @brief Scans a layer from a layout into this category, starting with a given cell - Creates RDB items for each polygon or edge shape read from the cell and it's children in the layout on the given layer and puts them into this category. - New cells will be generated when required. - Other settings like database unit, description, top cell etc. are not made in the RDB. + @brief Turns the given edge pair collection into a hierarchical or flat report database + This a another flavour of \scan_collection accepting a text collection. - This method has been introduced in version 0.23. + This method has been introduced in version 0.28. """ - @overload - def scan_layer(self, layout: db.Layout, layer: int, cell: db.Cell, levels: int) -> None: + def scan_layer(self, layout: db.Layout, layer: int, cell: Optional[db.Cell] = ..., levels: Optional[int] = ..., with_properties: Optional[bool] = ...) -> None: r""" @brief Scans a layer from a layout into this category, starting with a given cell and a depth specification Creates RDB items for each polygon or edge shape read from the cell and it's children in the layout on the given layer and puts them into this category. @@ -434,16 +427,20 @@ class RdbCategory: "levels" is the number of hierarchy levels to take the child cells from. 0 means to use only "cell" and don't descend, -1 means "all levels". Other settings like database unit, description, top cell etc. are not made in the RDB. - This method has been introduced in version 0.23. + If 'with_properties' is true, user properties will be turned into tagged values as well. + + This method has been introduced in version 0.23. The 'with_properties' argument has been added in version 0.28. """ - def scan_shapes(self, iter: db.RecursiveShapeIterator, flat: Optional[bool] = ...) -> None: + def scan_shapes(self, iter: db.RecursiveShapeIterator, flat: Optional[bool] = ..., with_properties: Optional[bool] = ...) -> None: r""" @brief Scans the polygon or edge shapes from the shape iterator into the category Creates RDB items for each polygon or edge shape read from the iterator and puts them into this category. A similar, but lower-level method is \ReportDatabase#create_items with a \RecursiveShapeIterator argument. In contrast to \ReportDatabase#create_items, 'scan_shapes' can also produce hierarchical databases if the \flat argument is false. In this case, the hierarchy the recursive shape iterator traverses is copied into the report database using sample references. - This method has been introduced in version 0.23. The flat mode argument has been added in version 0.26. + If 'with_properties' is true, user properties will be turned into tagged values as well. + + This method has been introduced in version 0.23. The flat mode argument has been added in version 0.26. The 'with_properties' argument has been added in version 0.28. """ class RdbItemValue: @@ -533,6 +530,10 @@ class RdbItemValue: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> RdbItemValue: + r""" + @brief Creates a copy of self + """ @overload def __init__(self, b: db.DBox) -> None: r""" @@ -782,6 +783,10 @@ class RdbItem: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> RdbItem: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -1146,31 +1151,33 @@ class ReportDatabase: A more convenient method that takes cell and category objects instead of ID's is the other version of \create_item. """ @overload - def create_item(self, cell_id: int, category_id: int, trans: db.CplxTrans, shape: db.Shape) -> None: + def create_item(self, cell_id: int, category_id: int, trans: db.CplxTrans, shape: db.Shape, with_properties: Optional[bool] = ...) -> None: r""" @brief Creates a new item from a single shape This method produces an item from the given shape. It accepts various kind of shapes, such as texts, polygons, boxes and paths and converts them to a corresponding item. The transformation argument can be used to supply the transformation that applies the database unit for example. - This method has been introduced in version 0.25.3. + This method has been introduced in version 0.25.3. The 'with_properties' argument has been added in version 0.28. @param cell_id The ID of the cell to which the item is associated @param category_id The ID of the category to which the item is associated @param shape The shape to take the geometrical object from @param trans The transformation to apply + @param with_properties If true, user properties will be turned into tagged values as well """ @overload - def create_items(self, cell_id: int, category_id: int, iter: db.RecursiveShapeIterator) -> None: + def create_items(self, cell_id: int, category_id: int, iter: db.RecursiveShapeIterator, with_properties: Optional[bool] = ...) -> None: r""" @brief Creates new items from a shape iterator This method takes the shapes from the given iterator and produces items from them. It accepts various kind of shapes, such as texts, polygons, boxes and paths and converts them to corresponding items. This method will produce a flat version of the shapes iterated by the shape iterator. A similar method, which is intended for production of polygon or edge error layers and also provides hierarchical database construction is \RdbCategory#scan_shapes. - This method has been introduced in version 0.25.3. + This method has been introduced in version 0.25.3. The 'with_properties' argument has been added in version 0.28. @param cell_id The ID of the cell to which the item is associated @param category_id The ID of the category to which the item is associated @param iter The iterator (a \RecursiveShapeIterator object) from which to take the items + @param with_properties If true, user properties will be turned into tagged values as well """ @overload def create_items(self, cell_id: int, category_id: int, trans: db.CplxTrans, array: Sequence[db.EdgePair]) -> None: @@ -1223,7 +1230,7 @@ class ReportDatabase: This method will also produce a flat version of the edge pairs inside the edge pair collection. \RdbCategory#scan_collection is a similar method which also supports construction of hierarchical databases from deep edge pair collections. - This method has been introduced in version 0.23. + This method has been introduced in version 0.23. It has been deprecated in favor of \RdbCategory#scan_collection in version 0.28. @param cell_id The ID of the cell to which the item is associated @param category_id The ID of the category to which the item is associated @@ -1239,7 +1246,7 @@ class ReportDatabase: This method will also produce a flat version of the edges inside the edge collection. \RdbCategory#scan_collection is a similar method which also supports construction of hierarchical databases from deep edge collections. - This method has been introduced in version 0.23. + This method has been introduced in version 0.23. It has been deprecated in favor of \RdbCategory#scan_collection in version 0.28. @param cell_id The ID of the cell to which the item is associated @param category_id The ID of the category to which the item is associated @@ -1255,7 +1262,7 @@ class ReportDatabase: This method will also produce a flat version of the shapes inside the region. \RdbCategory#scan_collection is a similar method which also supports construction of hierarchical databases from deep regions. - This method has been introduced in version 0.23. + This method has been introduced in version 0.23. It has been deprecated in favor of \RdbCategory#scan_collection in version 0.28. @param cell_id The ID of the cell to which the item is associated @param category_id The ID of the category to which the item is associated @@ -1263,18 +1270,19 @@ class ReportDatabase: @param region The region (a \Region object) containing the polygons for which to create items """ @overload - def create_items(self, cell_id: int, category_id: int, trans: db.CplxTrans, shapes: db.Shapes) -> None: + def create_items(self, cell_id: int, category_id: int, trans: db.CplxTrans, shapes: db.Shapes, with_properties: Optional[bool] = ...) -> None: r""" @brief Creates new items from a shape container This method takes the shapes from the given container and produces items from them. It accepts various kind of shapes, such as texts, polygons, boxes and paths and converts them to corresponding items. The transformation argument can be used to supply the transformation that applies the database unit for example. - This method has been introduced in version 0.25.3. + This method has been introduced in version 0.25.3. The 'with_properties' argument has been added in version 0.28. @param cell_id The ID of the cell to which the item is associated @param category_id The ID of the category to which the item is associated @param shapes The shape container from which to take the items @param trans The transformation to apply + @param with_properties If true, user properties will be turned into tagged values as well """ def destroy(self) -> None: r""" diff --git a/src/pymod/distutils_src/klayout/tlcore.pyi b/src/pymod/distutils_src/klayout/tlcore.pyi index 018b5409b..c9d67ac96 100644 --- a/src/pymod/distutils_src/klayout/tlcore.pyi +++ b/src/pymod/distutils_src/klayout/tlcore.pyi @@ -12,6 +12,10 @@ class EmptyClass: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> EmptyClass: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -116,6 +120,10 @@ class Value: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Value: + r""" + @brief Creates a copy of self + """ @overload def __init__(self) -> None: r""" @@ -402,6 +410,10 @@ class ArgType: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> ArgType: + r""" + @brief Creates a copy of self + """ def __eq__(self, arg0: object) -> bool: r""" @brief Equality of two types @@ -568,6 +580,10 @@ class MethodOverload: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> MethodOverload: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -675,6 +691,10 @@ class Method: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Method: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -1012,6 +1032,10 @@ class Logger: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Logger: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -1119,6 +1143,10 @@ class Timer: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> Timer: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -1336,6 +1364,10 @@ class AbstractProgress(Progress): r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> AbstractProgress: + r""" + @brief Creates a copy of self + """ def __init__(self, desc: str) -> None: r""" @brief Creates an abstract progress reporter with the given description @@ -1446,6 +1478,10 @@ class RelativeProgress(Progress): r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> RelativeProgress: + r""" + @brief Creates a copy of self + """ @overload def __init__(self, desc: str, max_value: int) -> None: r""" @@ -1600,6 +1636,10 @@ class AbsoluteProgress(Progress): r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> AbsoluteProgress: + r""" + @brief Creates a copy of self + """ @overload def __init__(self, desc: str) -> None: r""" @@ -1691,6 +1731,10 @@ class ExpressionContext: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> ExpressionContext: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -1903,6 +1947,10 @@ class GlobPattern: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> GlobPattern: + r""" + @brief Creates a copy of self + """ def __init__(self, pattern: str) -> None: r""" @brief Creates a new glob pattern match object @@ -1995,6 +2043,10 @@ class ExecutableBase: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> ExecutableBase: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -2246,6 +2298,10 @@ class PythonGetterSetterPair: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> PythonGetterSetterPair: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class @@ -2340,6 +2396,10 @@ class PythonFunction: r""" @brief Creates a copy of self """ + def __deepcopy__(self) -> PythonFunction: + r""" + @brief Creates a copy of self + """ def __init__(self) -> None: r""" @brief Creates a new object of this class From 6369a1f993d6f9f059890b1c4e427dfd688f9547 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 10 Dec 2022 01:51:01 +0100 Subject: [PATCH 10/10] Updated Changelog, version for PyPI --- Changelog.Debian | 7 +++++++ version.sh | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Changelog.Debian b/Changelog.Debian index ce37ca054..f45486f6f 100644 --- a/Changelog.Debian +++ b/Changelog.Debian @@ -1,3 +1,10 @@ +klayout (0.28-1) unstable; urgency=low + + * New features and bugfixes + - See changelog + + -- Matthias Köfferlein Sat, 10 Dec 2022 01:49:33 +0100 + klayout (0.27.6-1) unstable; urgency=low * New features and bugfixes diff --git a/version.sh b/version.sh index 05b2ae51e..839961594 100644 --- a/version.sh +++ b/version.sh @@ -5,7 +5,7 @@ KLAYOUT_VERSION="0.28" # The version used for PyPI (don't use variables here!) -KLAYOUT_PYPI_VERSION="0.28" +KLAYOUT_PYPI_VERSION="0.28-1" # The build date KLAYOUT_VERSION_DATE=$(date "+%Y-%m-%d")