yoga-python 0.1.3__tar.gz → 0.1.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. {yoga_python-0.1.3 → yoga_python-0.1.5}/.github/workflows/release.yml +13 -1
  2. {yoga_python-0.1.3 → yoga_python-0.1.5}/.gitignore +1 -0
  3. {yoga_python-0.1.3 → yoga_python-0.1.5}/PKG-INFO +1 -1
  4. {yoga_python-0.1.3 → yoga_python-0.1.5}/pyproject.toml +1 -1
  5. {yoga_python-0.1.3 → yoga_python-0.1.5}/src/yoga/yoga.cpp +6 -1
  6. {yoga_python-0.1.3 → yoga_python-0.1.5}/uv.lock +1 -1
  7. {yoga_python-0.1.3 → yoga_python-0.1.5}/.github/workflows/create-release.yml +0 -0
  8. {yoga_python-0.1.3 → yoga_python-0.1.5}/.github/workflows/quality.yml +0 -0
  9. {yoga_python-0.1.3 → yoga_python-0.1.5}/.python-version +0 -0
  10. {yoga_python-0.1.3 → yoga_python-0.1.5}/CMakeLists.txt +0 -0
  11. {yoga_python-0.1.3 → yoga_python-0.1.5}/LICENSE +0 -0
  12. {yoga_python-0.1.3 → yoga_python-0.1.5}/README.md +0 -0
  13. {yoga_python-0.1.3 → yoga_python-0.1.5}/benchmarks/bench_bindings.py +0 -0
  14. {yoga_python-0.1.3 → yoga_python-0.1.5}/pyrightconfig.json +0 -0
  15. {yoga_python-0.1.3 → yoga_python-0.1.5}/src/yoga/__init__.py +0 -0
  16. {yoga_python-0.1.3 → yoga_python-0.1.5}/src/yoga/__init__.pyi +0 -0
  17. {yoga_python-0.1.3 → yoga_python-0.1.5}/src/yoga/py.typed +0 -0
  18. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/conftest.py +0 -0
  19. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_absolute_position.py +0 -0
  20. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_align_content.py +0 -0
  21. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_align_items.py +0 -0
  22. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_align_self.py +0 -0
  23. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_android_news_feed.py +0 -0
  24. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_aspect_ratio.py +0 -0
  25. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_auto.py +0 -0
  26. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_baseline.py +0 -0
  27. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_baseline_func.py +0 -0
  28. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_border.py +0 -0
  29. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_box_sizing.py +0 -0
  30. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_clone_node.py +0 -0
  31. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_clone_nofree.py +0 -0
  32. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_computed_margin.py +0 -0
  33. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_computed_padding.py +0 -0
  34. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_config.py +0 -0
  35. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_default_values.py +0 -0
  36. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_dimension.py +0 -0
  37. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_dirtied.py +0 -0
  38. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_dirty_marking.py +0 -0
  39. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_display.py +0 -0
  40. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_display_contents.py +0 -0
  41. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_edge.py +0 -0
  42. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_events.py +0 -0
  43. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_flex.py +0 -0
  44. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_flex_direction.py +0 -0
  45. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_flex_gap.py +0 -0
  46. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_flex_wrap.py +0 -0
  47. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_float_optional.py +0 -0
  48. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_free_order.py +0 -0
  49. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_gap.py +0 -0
  50. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_had_overflow.py +0 -0
  51. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_intrinsic_size.py +0 -0
  52. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_justify_content.py +0 -0
  53. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_layoutable_children.py +0 -0
  54. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_margin.py +0 -0
  55. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_measure.py +0 -0
  56. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_measure_cache.py +0 -0
  57. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_measure_mode.py +0 -0
  58. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_min_max_dimension.py +0 -0
  59. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_no_free.py +0 -0
  60. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_node_callback.py +0 -0
  61. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_node_child.py +0 -0
  62. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_ordinals.py +0 -0
  63. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_padding.py +0 -0
  64. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_percentage.py +0 -0
  65. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_persistence.py +0 -0
  66. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_persistent_node_cloning.py +0 -0
  67. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_relayout.py +0 -0
  68. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_rounding.py +0 -0
  69. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_rounding_function.py +0 -0
  70. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_rounding_measure.py +0 -0
  71. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_scale_change.py +0 -0
  72. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_size_overflow.py +0 -0
  73. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_small_value_buffer.py +0 -0
  74. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_static_position.py +0 -0
  75. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_style.py +0 -0
  76. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_style_value_pool.py +0 -0
  77. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_tree_mutation.py +0 -0
  78. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_value.py +0 -0
  79. {yoga_python-0.1.3 → yoga_python-0.1.5}/tests/test_zero_out_layout.py +0 -0
@@ -24,6 +24,8 @@ jobs:
24
24
  include:
25
25
  - os: linux
26
26
  runs-on: ubuntu-22.04
27
+ - os: linux-arm
28
+ runs-on: ubuntu-22.04-arm
27
29
  - os: windows
28
30
  runs-on: windows-latest
29
31
  - os: macos
@@ -42,8 +44,18 @@ jobs:
42
44
  env:
43
45
  CIBW_BUILD: "cp312-* cp313-* cp314-*"
44
46
  CIBW_SKIP: "*-win32 *-manylinux_i686 *-musllinux_*"
45
- # Use manylinux_2_28 so pip can use ninja's wheel (no compatible wheel on manylinux2014)
47
+ # Use manylinux_2_28 so pip can use ninja's wheel (no compatible wheel on manylinux2014).
48
+ # Set both arches explicitly — cibuildwheel's aarch64 default
49
+ # is manylinux2014_aarch64 (CentOS 7, uses yum). Pin to _2_28
50
+ # so the dnf-based CIBW_BEFORE_ALL_LINUX below works on both.
46
51
  CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28
52
+ CIBW_MANYLINUX_AARCH64_IMAGE: manylinux_2_28
53
+ # Build both macOS arches from the single arm64 macos-latest
54
+ # runner via cross-compile. Replaces a separate macos-13 (Intel)
55
+ # runner — macos-13 is on GitHub's deprecation track and has slow
56
+ # queue capacity. Cross-built x86_64 wheel skips tests
57
+ # (cibuildwheel default); arm64 wheel still runs the full suite.
58
+ CIBW_ARCHS_MACOS: "arm64 x86_64"
47
59
  # CMake FetchContent clones Yoga from GitHub (dnf for manylinux_2_28)
48
60
  CIBW_BEFORE_ALL_LINUX: "dnf install -y git"
49
61
  # Test built wheels before shipping
@@ -20,6 +20,7 @@ wheels/
20
20
  CMakeFiles/
21
21
  CMakeCache.txt
22
22
  build_test/
23
+ build_manual/
23
24
  src/yoga/*.so
24
25
  src/yoga/CMakeInit.txt
25
26
  src/yoga/install_manifest.txt
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yoga-python
3
- Version: 0.1.3
3
+ Version: 0.1.5
4
4
  Summary: Python bindings for Facebook Yoga layout engine (CSS Flexbox)
5
5
  Keywords: yoga,flexbox,layout,css,react-native
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "yoga-python"
3
- version = "0.1.3"
3
+ version = "0.1.5"
4
4
  description = "Python bindings for Facebook Yoga layout engine (CSS Flexbox)"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -568,11 +568,13 @@ NB_MODULE(yoga, m) {
568
568
  .def("__init__", [](yoga::Node *t) {
569
569
  new (t) yoga::Node();
570
570
  nanobindManagedNodes.insert(t);
571
+ node_cache_.erase(t); // evict stale cache from address reuse
571
572
  yoga::Event::publish<yoga::Event::NodeAllocation>(t, {YGNodeGetConfig(t)});
572
573
  })
573
574
  .def("__init__", [](yoga::Node *t, yoga::Config* config) {
574
575
  new (t) yoga::Node(config);
575
576
  nanobindManagedNodes.insert(t);
577
+ node_cache_.erase(t); // evict stale cache from address reuse
576
578
  yoga::Event::publish<yoga::Event::NodeAllocation>(t, {YGNodeGetConfig(t)});
577
579
  }, nb::arg("config"))
578
580
  .def("__len__", [](yoga::Node& self) { return YGNodeGetChildCount(&self); })
@@ -586,7 +588,10 @@ NB_MODULE(yoga, m) {
586
588
  })
587
589
  .def("free", [](yoga::Node& self) { safeNodeFree(self); })
588
590
  .def("free_recursive", [](yoga::Node& self) { safeNodeFreeRecursive(self); })
589
- .def("reset", [](yoga::Node& self) { YGNodeReset(&self); })
591
+ .def("reset", [](yoga::Node& self) {
592
+ node_cache_.erase(&self); // reset clears all styles; cache must follow
593
+ YGNodeReset(&self);
594
+ })
590
595
  .def("copy_style", [](yoga::Node& self, const yoga::Node& src) { YGNodeCopyStyle(&self, &src); })
591
596
  .def("set_context", [](yoga::Node& self, nb::object context) {
592
597
  if (context.is_none()) {
@@ -219,7 +219,7 @@ wheels = [
219
219
 
220
220
  [[package]]
221
221
  name = "yoga-python"
222
- version = "0.1.2"
222
+ version = "0.1.3"
223
223
  source = { editable = "." }
224
224
 
225
225
  [package.optional-dependencies]
File without changes
File without changes
File without changes
File without changes