transform-tree 0.0.3__tar.gz → 0.0.4__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 (115) hide show
  1. {transform_tree-0.0.3 → transform_tree-0.0.4}/Cargo.toml +6 -6
  2. {transform_tree-0.0.3 → transform_tree-0.0.4}/PKG-INFO +1 -1
  3. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/Cargo.toml +25 -6
  4. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/README.md +5 -3
  5. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/src/lib.rs +12 -0
  6. transform_tree-0.0.4/crates/tf_tree/src/open.rs +1719 -0
  7. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/src/tree.rs +379 -25
  8. transform_tree-0.0.4/crates/tf_tree/tests/rendezvous.rs +3037 -0
  9. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/README.md +4 -2
  10. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/src/check.rs +15 -0
  11. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/README.md +4 -2
  12. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/loom_tests.rs +239 -1
  13. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/participant.rs +120 -0
  14. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/tests.rs +119 -0
  15. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/README.md +4 -2
  16. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_py/Cargo.lock +6 -6
  17. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_py/Cargo.toml +4 -4
  18. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_py/src/errors.rs +8 -5
  19. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_py/src/offline.rs +1 -1
  20. {transform_tree-0.0.3 → transform_tree-0.0.4}/pyproject.toml +1 -1
  21. transform_tree-0.0.3/crates/tf_tree/src/open.rs +0 -799
  22. transform_tree-0.0.3/crates/tf_tree/tests/rendezvous.rs +0 -1421
  23. {transform_tree-0.0.3 → transform_tree-0.0.4}/LICENSE-APACHE +0 -0
  24. {transform_tree-0.0.3 → transform_tree-0.0.4}/LICENSE-MIT +0 -0
  25. {transform_tree-0.0.3 → transform_tree-0.0.4}/NOTICE +0 -0
  26. {transform_tree-0.0.3 → transform_tree-0.0.4}/README.md +0 -0
  27. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/LICENSE-APACHE +0 -0
  28. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/LICENSE-MIT +0 -0
  29. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/NOTICE +0 -0
  30. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/src/bin/rendezvous_child.rs +0 -0
  31. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/src/cache.rs +0 -0
  32. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/src/cbor.rs +0 -0
  33. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/src/frozen.rs +0 -0
  34. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/src/unstable.rs +0 -0
  35. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/await_frames.rs +0 -0
  36. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/batch.rs +0 -0
  37. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/behavior.rs +0 -0
  38. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/common/mod.rs +0 -0
  39. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/construction.rs +0 -0
  40. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/counters.rs +0 -0
  41. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/derivatives.rs +0 -0
  42. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/enumeration.rs +0 -0
  43. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/feature_gates.rs +0 -0
  44. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/frozen.rs +0 -0
  45. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/lookup.rs +0 -0
  46. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/math_reexports.rs +0 -0
  47. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/owned_writer.rs +0 -0
  48. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/plan_cache_identity.rs +0 -0
  49. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/tsan.rs +0 -0
  50. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/Cargo.toml +0 -0
  51. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/LICENSE-APACHE +0 -0
  52. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/LICENSE-MIT +0 -0
  53. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/NOTICE +0 -0
  54. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/src/frozen.rs +0 -0
  55. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/src/header.rs +0 -0
  56. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/src/heap.rs +0 -0
  57. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/src/layout.rs +0 -0
  58. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/src/lib.rs +0 -0
  59. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/src/mapped.rs +0 -0
  60. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/tests/heap_alignment.rs +0 -0
  61. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/Cargo.toml +0 -0
  62. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/LICENSE-APACHE +0 -0
  63. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/LICENSE-MIT +0 -0
  64. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/NOTICE +0 -0
  65. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/arena_view.rs +0 -0
  66. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/bench_probe.rs +0 -0
  67. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/buffer.rs +0 -0
  68. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/counters.rs +0 -0
  69. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/edge.rs +0 -0
  70. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/error.rs +0 -0
  71. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/frame.rs +0 -0
  72. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/layout.rs +0 -0
  73. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/lib.rs +0 -0
  74. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/plan.rs +0 -0
  75. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/sample.rs +0 -0
  76. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/sync.rs +0 -0
  77. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/topology.rs +0 -0
  78. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/Cargo.toml +0 -0
  79. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/LICENSE-APACHE +0 -0
  80. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/LICENSE-MIT +0 -0
  81. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/NOTICE +0 -0
  82. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/bin/ipc_child.rs +0 -0
  83. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/client.rs +0 -0
  84. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/error.rs +0 -0
  85. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/fork.rs +0 -0
  86. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/identity.rs +0 -0
  87. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/lib.rs +0 -0
  88. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/lockfile.rs +0 -0
  89. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/ofd.rs +0 -0
  90. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/open.rs +0 -0
  91. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/procstat.rs +0 -0
  92. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/rendezvous.rs +0 -0
  93. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/runtime_dir.rs +0 -0
  94. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/server.rs +0 -0
  95. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/wire.rs +0 -0
  96. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/tests/multiprocess.rs +0 -0
  97. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/Cargo.toml +0 -0
  98. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/LICENSE-APACHE +0 -0
  99. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/LICENSE-MIT +0 -0
  100. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/NOTICE +0 -0
  101. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/README.md +0 -0
  102. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/src/dualquat.rs +0 -0
  103. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/src/interp.rs +0 -0
  104. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/src/iso3.rs +0 -0
  105. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/src/lib.rs +0 -0
  106. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/src/quat.rs +0 -0
  107. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/src/reference.rs +0 -0
  108. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/src/twist.rs +0 -0
  109. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/tests/proptests.rs +0 -0
  110. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/tests/slerp_public.rs +0 -0
  111. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_py/src/lib.rs +0 -0
  112. {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_py/src/tree.rs +0 -0
  113. {transform_tree-0.0.3 → transform_tree-0.0.4}/python/tf_tree/__init__.py +0 -0
  114. {transform_tree-0.0.3 → transform_tree-0.0.4}/python/tf_tree/_core.pyi +0 -0
  115. {transform_tree-0.0.3 → transform_tree-0.0.4}/python/tf_tree/py.typed +0 -0
@@ -45,7 +45,7 @@ exclude = [
45
45
  # an MSRV raise reaches nobody who did not opt into it by editing a manifest.
46
46
  # The rule comes back into force at 0.1.0, where a minor slot exists again.
47
47
  # `SUPPORT.md`'s MSRV section carries the same statement in its own voice.
48
- version = "0.0.3"
48
+ version = "0.0.4"
49
49
  edition = "2021"
50
50
  # **1.87, and each step was forced by a dependency rather than chosen.**
51
51
  #
@@ -122,8 +122,8 @@ unexpected_cfgs = { level = "warn", check-cfg = ['cfg(loom)'] }
122
122
  [workspace.dependencies]
123
123
  # Intra-workspace crates (version pinned so publishable crates carry a real
124
124
  # requirement, not a path wildcard).
125
- tf_tree_math = { path = "crates/tf_tree_math", version = "0.0.3" }
126
- tf_tree_arena = { path = "crates/tf_tree_arena", version = "0.0.3" }
125
+ tf_tree_math = { path = "crates/tf_tree_math", version = "0.0.4" }
126
+ tf_tree_arena = { path = "crates/tf_tree_arena", version = "0.0.4" }
127
127
  # Phase 2 shared memory (see docs/PHASE2.md §2). Linux-only, opt-in via the
128
128
  # `shm` feature; `linux_raw` backend so there is no libc crate and no C build.
129
129
  # Only `tf_tree_ipc`, and only for `fcntl(F_OFD_*)`: rustix has no OFD locking
@@ -138,9 +138,9 @@ rustix = { version = "1.1", default-features = false, features = ["mm", "fs", "s
138
138
  # measurement — the "counters off" row was measuring the counters-on engine.
139
139
  # Every crate that wants them re-enables them through its own `counters`
140
140
  # feature, which is what makes the switch actually switch.
141
- tf_tree_core = { path = "crates/tf_tree_core", version = "0.0.3", default-features = false }
142
- tf_tree_ipc = { path = "crates/tf_tree_ipc", version = "0.0.3" }
143
- tf_tree = { path = "crates/tf_tree", version = "0.0.3", default-features = false }
141
+ tf_tree_core = { path = "crates/tf_tree_core", version = "0.0.4", default-features = false }
142
+ tf_tree_ipc = { path = "crates/tf_tree_ipc", version = "0.0.4" }
143
+ tf_tree = { path = "crates/tf_tree", version = "0.0.4", default-features = false }
144
144
  # publish = false crates, wired by path only (no version requirement published).
145
145
  # **`default-features = false` for the same load-bearing reason as `tf_tree`
146
146
  # above, and it is easy to miss here.** `tf_tree_bench` has its own
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: transform_tree
3
- Version: 0.0.3
3
+ Version: 0.0.4
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Programming Language :: Python :: 3.10
6
6
  Classifier: Programming Language :: Python :: 3.13
@@ -75,12 +75,31 @@ shm = ["tf_tree_arena/shm", "dep:tf_tree_ipc"]
75
75
  # rustdoc — but it is no longer the only thing standing between this feature
76
76
  # split and a compile error nobody sees.
77
77
  unstable = []
78
- # A single injection point inside `Tree::claim`, between the arena CAS and the
79
- # lease `SETLK` (`docs/decisions/0005` §5). Off by default and absent from the
80
- # API entirely unless enabled: the window it exposes is one syscall wide and
81
- # there is no other way to place a reaper inside it deterministically, but a
82
- # published hook that runs arbitrary code mid-claim is not something a shipped
83
- # build should carry. Enabled by `just shm-rendezvous`.
78
+ # **Two seams a test cannot otherwise stand in.** Off by default and absent from
79
+ # the API entirely unless enabled; both are `#[doc(hidden)]`.
80
+ #
81
+ # 1. `CLAIM_WINDOW_HOOK` — a single injection point inside `Tree::claim`,
82
+ # between the arena CAS and the lease `SETLK` (`docs/decisions/0005` §5). The
83
+ # window it exposes is one syscall wide and there is no other way to place a
84
+ # reaper inside it deterministically, but a published hook that runs
85
+ # arbitrary code mid-claim is not something a shipped build should carry.
86
+ # 2. `reclamation_verdict_for_test` — `docs/decisions/0028` plan step 2's
87
+ # reclamation predicate, which is private and whose two production callers
88
+ # both act on a verdict without reporting one: the owner's slot assigner
89
+ # (that record's step 3) stops at the first grantable slot, and
90
+ # `Tree::reap_participants` (step 5) reports a slot count — so `Live` and
91
+ # `Unknown`, the two verdicts that collect nothing for opposite reasons, are
92
+ # indistinguishable through either. The five multiprocess tests around it
93
+ # turn on facts
94
+ # only the kernel produces (a `SIGSTOP`ped process keeps its lock byte, a
95
+ # `SIGKILL`ed one loses it, a read-only joiner holds one and writes no arena
96
+ # record), so they cannot be unit tests inside the crate, and nothing outside
97
+ # it can name a private function. The same feature adds the probe counter the
98
+ # seam reports, which is the only part of the predicate's read order a
99
+ # multiprocess test can observe.
100
+ #
101
+ # Enabled by `just shm-rendezvous`, and linted by `just shm-check`'s
102
+ # `--features shm,test-hooks,unstable` clippy pass.
84
103
  test-hooks = []
85
104
 
86
105
  [dependencies]
@@ -115,11 +115,13 @@ exception — it is a private read-only mapping and a child inherits it intact.
115
115
 
116
116
  ## Version
117
117
 
118
- **0.0.1, and `0.0.x` promises nothing.** Cargo treats every `0.0.x` release as
118
+ **`0.0.x` promises nothing.** Cargo treats every `0.0.x` release as
119
119
  incompatible with every other — `tf_tree = "0.0.1"` means `^0.0.1`, which
120
120
  matches `0.0.1` and nothing else — so a later release reaches no existing
121
- dependant through `cargo update`. That is the intended signal for a first
122
- publish: pin exactly, and expect a later release to break. The reasoning is
121
+ dependant through `cargo update`. That is the intended signal: pin exactly, and
122
+ expect a later release to break. The current number is deliberately not repeated
123
+ here — this line said `0.0.1` for three releases, because nothing gates a
124
+ version in prose. The reasoning is
123
125
  written out in the repository's
124
126
  [`Cargo.toml`](https://github.com/NoeFontana/tf_tree/blob/main/Cargo.toml) under
125
127
  `[workspace.package] version`, and the release notes are in
@@ -315,6 +315,18 @@ mod open;
315
315
  #[cfg(all(feature = "shm", target_os = "linux"))]
316
316
  pub use open::{open, CreatePolicy, Open, OpenError};
317
317
 
318
+ /// Test scaffolding for `docs/decisions/0028` plan step 2's reclamation
319
+ /// predicate, which is private. Its two production callers are the owner's
320
+ /// slot assigner (that record's step 3) and [`Tree::reap_participants`] (step
321
+ /// 5); both act on the verdict without reporting one — the assigner stops at
322
+ /// the first grantable slot, the sweep reports a count — and neither a grant
323
+ /// nor a count can separate the two verdicts that collect nothing. Absent
324
+ /// unless `--features test-hooks`; see
325
+ /// [`open::reclamation_verdict_for_test`].
326
+ #[cfg(all(feature = "test-hooks", feature = "shm", target_os = "linux"))]
327
+ #[doc(hidden)]
328
+ pub use open::reclamation_verdict_for_test;
329
+
318
330
  /// **The unstable tier — `docs/API.md` §2.6.** Enabling the `unstable` feature
319
331
  /// is the waiver; read the module's own documentation for what it waives.
320
332
  #[cfg(feature = "unstable")]