From 6143d49a3cc2be1dee73a33b1b2fa503d0ea4ca2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Dec 2024 21:08:06 +0000 Subject: [PATCH 1/6] Bump pypa/cibuildwheel from 2.21.3 to 2.22.0 Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 2.21.3 to 2.22.0. - [Release notes](https://github.com/pypa/cibuildwheel/releases) - [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md) - [Commits](https://github.com/pypa/cibuildwheel/compare/v2.21.3...v2.22.0) --- updated-dependencies: - dependency-name: pypa/cibuildwheel dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9f8b43be0..9504fadbd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,7 +56,7 @@ jobs: HOST_CCACHE_DIR="$(ccache -k cache_dir)" mkdir -p $HOST_CCACHE_DIR - name: Build wheels # check https://cibuildwheel.readthedocs.io/en/stable/setup/#github-actions - uses: pypa/cibuildwheel@v2.21.3 + uses: pypa/cibuildwheel@v2.22.0 # to supply options, put them in 'env', like: # env: # CIBW_SOME_OPTION: value From 58376b339167ec0d535f10276ca06ab8a3bd2197 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 8 Dec 2024 19:36:37 +0100 Subject: [PATCH 2/6] Fixing issue #1948 (crash on dragging a cell) - problem was the popup which Qt does not like during drag-and-drop operations. --- src/laybasic/laybasic/layViewObject.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/laybasic/laybasic/layViewObject.cc b/src/laybasic/laybasic/layViewObject.cc index 31caade5b..87938ff10 100644 --- a/src/laybasic/laybasic/layViewObject.cc +++ b/src/laybasic/laybasic/layViewObject.cc @@ -293,7 +293,8 @@ public: } - END_PROTECTED + // Note: Qt does not like popups during drag-and-drop operations ... + END_PROTECTED_SILENT } void dragLeaveEvent (QDragLeaveEvent * /*event*/) @@ -309,7 +310,8 @@ public: svc = next; } - END_PROTECTED + // Note: Qt does not like popups during drag-and-drop operations ... + END_PROTECTED_SILENT } void dragMoveEvent (QDragMoveEvent *event) @@ -332,7 +334,8 @@ public: } - END_PROTECTED + // Note: Qt does not like popups during drag-and-drop operations ... + END_PROTECTED_SILENT } void dropEvent (QDropEvent *event) @@ -355,7 +358,8 @@ public: } - END_PROTECTED + // Note: Qt does not like popups during drag-and-drop operations ... + END_PROTECTED_SILENT } void mouseMoveEvent (QMouseEvent *e) From 5e2f4eb243d84a7c3b4e0fc96a8075b5a51b4976 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Mon, 16 Dec 2024 22:58:48 +0100 Subject: [PATCH 3/6] Fixing bug #1955 Problem was caused by a leaking PolygonIteratorDelegate that locked the DSS layout object. Solved by wrapping in PolygonIterator and changing the interface such that PolygonIteratorDelegegate is no longer useful. --- src/db/db/dbAsIfFlatRegion.cc | 8 ++++---- src/db/db/dbDeepRegion.cc | 1 - src/db/db/dbGenericShapeIterator.h | 9 +++++++++ testdata/ruby/dbRegionTest.rb | 30 ++++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/db/db/dbAsIfFlatRegion.cc b/src/db/db/dbAsIfFlatRegion.cc index a62894e47..9005de616 100644 --- a/src/db/db/dbAsIfFlatRegion.cc +++ b/src/db/db/dbAsIfFlatRegion.cc @@ -1298,7 +1298,7 @@ AsIfFlatRegion::sized (coord_type dx, coord_type dy, unsigned int mode) const // simplified handling for a box db::Box b = bbox ().enlarged (db::Vector (dx, dy)); - return region_from_box (b, properties_repository (), begin ()->prop_id ()); + return region_from_box (b, properties_repository (), db::RegionIterator (begin ()).prop_id ()); } else if (! merged_semantics () || is_merged ()) { @@ -1478,13 +1478,13 @@ AsIfFlatRegion::and_with (const Region &other, PropertyConstraint property_const } else if (is_box () && other.is_box ()) { - if (pc_skip (property_constraint) || pc_match (property_constraint, begin ()->prop_id (), other.begin ().prop_id ())) { + if (pc_skip (property_constraint) || pc_match (property_constraint, db::RegionIterator (begin ()).prop_id (), other.begin ().prop_id ())) { // Simplified handling for boxes db::Box b = bbox (); b &= other.bbox (); - db::properties_id_type prop_id_out = pc_norm (property_constraint, begin ()->prop_id ()); + db::properties_id_type prop_id_out = pc_norm (property_constraint, db::RegionIterator (begin ()).prop_id ()); return region_from_box (b, properties_repository (), prop_id_out); @@ -1494,7 +1494,7 @@ AsIfFlatRegion::and_with (const Region &other, PropertyConstraint property_const } else if (is_box () && ! other.strict_handling ()) { - db::properties_id_type self_prop_id = pc_skip (property_constraint) ? 0 : begin ()->prop_id (); + db::properties_id_type self_prop_id = pc_skip (property_constraint) ? 0 : db::RegionIterator (begin ()).prop_id (); // map AND with box to clip .. db::Box b = bbox (); diff --git a/src/db/db/dbDeepRegion.cc b/src/db/db/dbDeepRegion.cc index 5acb010f8..b9b954408 100644 --- a/src/db/db/dbDeepRegion.cc +++ b/src/db/db/dbDeepRegion.cc @@ -784,7 +784,6 @@ RegionDelegate * DeepRegion::and_with (const Region &other, PropertyConstraint property_constraint) const { const DeepRegion *other_deep = dynamic_cast (other.delegate ()); - if (empty ()) { return clone ()->remove_properties (pc_remove (property_constraint)); diff --git a/src/db/db/dbGenericShapeIterator.h b/src/db/db/dbGenericShapeIterator.h index c4abf65a7..0867dc009 100644 --- a/src/db/db/dbGenericShapeIterator.h +++ b/src/db/db/dbGenericShapeIterator.h @@ -31,6 +31,9 @@ namespace db { +template +class generic_shape_iterator; + template class DB_PUBLIC generic_shape_iterator_delegate_base { @@ -40,6 +43,9 @@ public: generic_shape_iterator_delegate_base () { } virtual ~generic_shape_iterator_delegate_base () { } +protected: + friend class generic_shape_iterator; + virtual void do_reset (const db::Box & /*region*/, bool /*overlapping*/) { } virtual db::Box bbox () const { return db::Box::world (); } virtual bool is_addressable () const = 0; @@ -62,6 +68,7 @@ public: : m_iter (from), m_from (from), m_to (to) { } +protected: virtual bool is_addressable () const { return addressable; @@ -122,6 +129,7 @@ public: : m_iter (from), m_from (from) { } +protected: virtual bool is_addressable () const { return addressable; @@ -185,6 +193,7 @@ public: set (); } +protected: virtual bool is_addressable () const { return m_is_addressable; diff --git a/testdata/ruby/dbRegionTest.rb b/testdata/ruby/dbRegionTest.rb index 149c23171..a59478a11 100644 --- a/testdata/ruby/dbRegionTest.rb +++ b/testdata/ruby/dbRegionTest.rb @@ -1498,6 +1498,36 @@ class DBRegion_TestClass < TestBase end + # issue #1955 (locking of layout object inside DSS) + def test_issue1955 + + ly = RBA::Layout::new + top = ly.create_cell("TOP") + l1 = ly.layer(1, 0) + + dss = RBA::DeepShapeStore::new + + rr = RBA::Region::new(RBA::Box::new(100, 100, 1100, 1100)) + + r = RBA::Region::new(top.begin_shapes_rec(l1), dss) + r += RBA::Region::new(RBA::Box::new(0, 0, 1000, 1000)) + + # this spoils the dss object, if + # 1. the first region is a deep region + # 2. the second region is a flat region + # 3. both regions are boxes + # after this operation, bounding boxes are no + # longer updated inside the DSS. + randrr = r & rr + assert_equal(randrr.to_s, "(100,100;100,1000;1000,1000;1000,100)") + + r += RBA::Region::new(RBA::Box::new(1000, 1000, 2000, 2000)) + + assert_equal(r.to_s, "(0,0;0,1000;1000,1000;1000,0);(1000,1000;1000,2000;2000,2000;2000,1000)") + assert_equal(r.bbox.to_s, "(0,0;2000,2000)") + + end + end load("test_epilogue.rb") From d9048f79763919b2253585b836d13fb7b7996543 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Wed, 18 Dec 2024 22:12:58 +0100 Subject: [PATCH 4/6] Fixing bug #1953 (inconsistent behavior of callback) maybe Problem was that the final callback coming (two times) from "apply" was not updating the widget states (visibility etc.) --- src/edt/edt/edtPCellParametersPage.cc | 10 +++++----- src/edt/edt/edtPCellParametersPage.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/edt/edt/edtPCellParametersPage.cc b/src/edt/edt/edtPCellParametersPage.cc index 762b13799..e199c7ca3 100644 --- a/src/edt/edt/edtPCellParametersPage.cc +++ b/src/edt/edt/edtPCellParametersPage.cc @@ -614,7 +614,7 @@ PCellParametersPage::setup (lay::LayoutViewBase *view, int cv_index, const db::P m_initial_states = m_states; mp_error_frame->hide (); - update_widgets_from_states (m_states); + update_widgets_from_states (m_states, lazy_evaluation ()); mp_parameters_area->setWidget (mp_main_frame); mp_main_frame->show (); @@ -713,7 +713,7 @@ PCellParametersPage::do_parameter_changed () db::ParameterStates states = m_states; get_parameters (states, &ok); // includes coerce if (ok) { - update_widgets_from_states (states); + update_widgets_from_states (states, lazy_evaluation ()); if (! lazy_evaluation ()) { emit edited (); } @@ -959,11 +959,11 @@ PCellParametersPage::set_parameters (const std::vector ¶meters) m_initial_states = m_states; mp_error_frame->hide (); - set_parameters_internal (m_states, false); + update_widgets_from_states (m_states, false); } void -PCellParametersPage::update_widgets_from_states (const db::ParameterStates &states) +PCellParametersPage::update_widgets_from_states (const db::ParameterStates &states, bool tentatively) { if (! mp_pcell_decl) { return; @@ -1031,7 +1031,7 @@ PCellParametersPage::update_widgets_from_states (const db::ParameterStates &stat } - set_parameters_internal (states, lazy_evaluation ()); + set_parameters_internal (states, tentatively); // QGridLayouts are bad in handling nested QFrame (or QGroupBox) with their own layouts, // so we help a little here: diff --git a/src/edt/edt/edtPCellParametersPage.h b/src/edt/edt/edtPCellParametersPage.h index a7b528371..5feacba0f 100644 --- a/src/edt/edt/edtPCellParametersPage.h +++ b/src/edt/edt/edtPCellParametersPage.h @@ -177,7 +177,7 @@ private: bool lazy_evaluation (); void set_parameters_internal (const db::ParameterStates &states, bool tentatively); bool update_current_parameters (); - void update_widgets_from_states (const db::ParameterStates &states); + void update_widgets_from_states (const db::ParameterStates &states, bool tentatively); void get_parameters_internal (db::ParameterStates &states, bool &edit_error); std::vector parameter_from_states (const db::ParameterStates &states) const; void states_from_parameters (db::ParameterStates &states, const std::vector ¶meters); From 86d2ee6efe6cf2e03c541c7e5e97608c268720a4 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 20 Dec 2024 00:43:29 +0100 Subject: [PATCH 5/6] Fixing issue #1959 Problem was an overflow (inf) that got converted to 0 by "ceil". --- src/tl/tl/tlDataMapping.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/tl/tl/tlDataMapping.cc b/src/tl/tl/tlDataMapping.cc index 74130d580..8f4545eb5 100644 --- a/src/tl/tl/tlDataMapping.cc +++ b/src/tl/tl/tlDataMapping.cc @@ -404,13 +404,13 @@ DataMappingLookupTable::update_table (double xmin, double xmax, double delta_y, double dx = fabs (t->first - t[-1].first); double dy = fabs (t->second - t[-1].second); - if (dx * delta_y < delta_x * dy) { + if (dx > 1e-10 && dy > 1e-10 && dx * delta_y < delta_x * dy) { delta_x = dx / dy * delta_y; } } - size_t nsteps = size_t (ceil((xmax - xmin) / delta_x - 1e-6)); + size_t nsteps = size_t (ceil ((xmax - xmin) / delta_x - 1e-6)); // Limit the number of interpolation points (this is an arbitrary number - it could be somewhat else) nsteps = std::min (size_t (16384), nsteps); @@ -422,7 +422,9 @@ DataMappingLookupTable::update_table (double xmin, double xmax, double delta_y, std::vector< std::pair >::const_iterator t = table.begin (); size_t i = 0; - for (double x = xmin; i < nsteps; ++i, x += delta_x) { + double x; + for ( ; i < nsteps; ++i) { + x = xmin + i * delta_x; while (t != table.end () && t->first <= x) { ++t; } From d6167ca1263165303e52bb1cff69f762d04f2874 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Jan 2025 21:43:18 +0000 Subject: [PATCH 6/6] Bump pypa/gh-action-pypi-publish from 1.11.0 to 1.12.3 Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.11.0 to 1.12.3. - [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases) - [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.11.0...v1.12.3) --- updated-dependencies: - dependency-name: pypa/gh-action-pypi-publish dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9f8b43be0..d541778b8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -103,7 +103,7 @@ jobs: name: artifact path: dist - - uses: pypa/gh-action-pypi-publish@v1.11.0 + - uses: pypa/gh-action-pypi-publish@v1.12.3 continue-on-error: true # might fail if we don't bump the version with: user: __token__ @@ -120,7 +120,7 @@ jobs: name: artifact path: dist - - uses: pypa/gh-action-pypi-publish@v1.11.0 + - uses: pypa/gh-action-pypi-publish@v1.12.3 with: user: __token__ password: ${{ secrets.pypi_password }}