deepdiff-rs 0.6.1__tar.gz → 0.6.2__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 (69) hide show
  1. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/Cargo.lock +4 -4
  2. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/Cargo.toml +1 -1
  3. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/PKG-INFO +2 -1
  4. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/README.md +1 -0
  5. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/array.rs +3 -3
  6. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/lcs.rs +4 -3
  7. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-arrow/Cargo.toml +0 -0
  8. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-arrow/examples/type_stack_cost.rs +0 -0
  9. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-arrow/src/error.rs +0 -0
  10. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-arrow/src/lib.rs +0 -0
  11. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-arrow/src/options.rs +0 -0
  12. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-arrow/src/schema.rs +0 -0
  13. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-arrow/src/table_diff.rs +0 -0
  14. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/Cargo.toml +0 -0
  15. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/examples/stack_frame_cost.rs +0 -0
  16. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/datetime.rs +0 -0
  17. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/datetime_tests.rs +0 -0
  18. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/dispatch.rs +0 -0
  19. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/mod.rs +0 -0
  20. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/object.rs +0 -0
  21. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/options.rs +0 -0
  22. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/scalar.rs +0 -0
  23. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/set.rs +0 -0
  24. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/tests.rs +0 -0
  25. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/error.rs +0 -0
  26. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/ignore_order/distance.rs +0 -0
  27. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/ignore_order/fxhash.rs +0 -0
  28. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/ignore_order/hash.rs +0 -0
  29. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/ignore_order/memo.rs +0 -0
  30. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/ignore_order/mod.rs +0 -0
  31. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/ignore_order/pairing.rs +0 -0
  32. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/ignore_order/tests.rs +0 -0
  33. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/lcs_tests.rs +0 -0
  34. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/lib.rs +0 -0
  35. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/path.rs +0 -0
  36. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/report.rs +0 -0
  37. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/report_tests.rs +0 -0
  38. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/test_support.rs +0 -0
  39. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/unified_diff.rs +0 -0
  40. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/unified_diff_tests.rs +0 -0
  41. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/value.rs +0 -0
  42. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/value_tests.rs +0 -0
  43. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/tests/golden.rs +0 -0
  44. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/tests/ignore_order_memory.rs +0 -0
  45. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/tests/memory_footprint.rs +0 -0
  46. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/tests/proptest_diff.rs +0 -0
  47. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/tests/proptest_ignore_order.rs +0 -0
  48. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/Cargo.toml +0 -0
  49. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/benchmarks/bench_bindings.py +0 -0
  50. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/src/arrow.rs +0 -0
  51. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/src/convert.rs +0 -0
  52. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/src/deepdiff.rs +0 -0
  53. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/src/errors.rs +0 -0
  54. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/src/fast_path.rs +0 -0
  55. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/src/guard.rs +0 -0
  56. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/src/lib.rs +0 -0
  57. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_bindings_memory.py +0 -0
  58. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_conversions.py +0 -0
  59. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_datetimes.py +0 -0
  60. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_depth_guard.py +0 -0
  61. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_differential_fuzz.py +0 -0
  62. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_golden_parity.py +0 -0
  63. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_sets.py +0 -0
  64. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_signed_zero.py +0 -0
  65. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_smoke.py +0 -0
  66. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_suite_hygiene.py +0 -0
  67. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_table_diff.py +0 -0
  68. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_tuples.py +0 -0
  69. {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/pyproject.toml +0 -0
@@ -605,7 +605,7 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
605
605
 
606
606
  [[package]]
607
607
  name = "onix-arrow"
608
- version = "0.6.1"
608
+ version = "0.6.2"
609
609
  dependencies = [
610
610
  "arrow-array",
611
611
  "arrow-schema",
@@ -615,7 +615,7 @@ dependencies = [
615
615
 
616
616
  [[package]]
617
617
  name = "onix-cli"
618
- version = "0.6.1"
618
+ version = "0.6.2"
619
619
  dependencies = [
620
620
  "onix-core",
621
621
  "serde_json",
@@ -623,7 +623,7 @@ dependencies = [
623
623
 
624
624
  [[package]]
625
625
  name = "onix-core"
626
- version = "0.6.1"
626
+ version = "0.6.2"
627
627
  dependencies = [
628
628
  "proptest",
629
629
  "serde",
@@ -633,7 +633,7 @@ dependencies = [
633
633
 
634
634
  [[package]]
635
635
  name = "onix-py"
636
- version = "0.6.1"
636
+ version = "0.6.2"
637
637
  dependencies = [
638
638
  "arrow-array",
639
639
  "arrow-schema",
@@ -3,7 +3,7 @@ resolver = "3"
3
3
  members = ["crates/onix-core", "crates/onix-py", "crates/onix-arrow"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.6.1"
6
+ version = "0.6.2"
7
7
  edition = "2024"
8
8
  license = "MIT"
9
9
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepdiff-rs
3
- Version: 0.6.1
3
+ Version: 0.6.2
4
4
  Classifier: Programming Language :: Python :: 3
5
5
  Classifier: Programming Language :: Rust
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -162,6 +162,7 @@ Type comparison uses the full logical Arrow type (timestamp unit and timezone, d
162
162
  - Adversarially deep input raises `MaxDepthError` instead of crashing: the default `max_depth` is 512 and the hard ceiling is `MAX_DEPTH_CEILING` (20,000). See [`crates/onix-py/src/guard.rs`](crates/onix-py/src/guard.rs).
163
163
  - `ignore_order` pairing is `O(N^2)` in unpaired elements per side and carries a polynomial cost in both time and memory with input depth; it has no `max_passes`/`max_diffs` cutoff, so bound the size and depth of untrusted input yourself. See [`crates/onix-core/src/ignore_order/mod.rs`](crates/onix-core/src/ignore_order/mod.rs).
164
164
  - A `values_changed` between two multi-line strings runs a `difflib`-style `O(N*M)` line diff on the default path with no opt-out, worst when changes are spread evenly through the text (about 35 s for a heavily edited 1 MB string and growing quadratically, so a few megabytes is minutes), so bound the size of untrusted strings yourself. See [`crates/onix-core/src/unified_diff.rs`](crates/onix-core/src/unified_diff.rs).
165
+ - Ordered sequences (`list` or `tuple`) of scalars (null, bool, number, string, datetime, date) run a `difflib`-style `O(N*M)` matcher on the default path with its popular-element (autojunk) purge disabled for `DeepDiff` parity, worst for sequences of a few repeated values with dense edits (about 620 s for two 8,000-element lists of two repeated values with every other element changed, growing faster than quadratically), so bound the size of untrusted sequences yourself. See [`crates/onix-core/src/lcs.rs`](crates/onix-core/src/lcs.rs).
165
166
  - In `diff_tables`, a column name containing an embedded NUL byte (`\0`) arrives truncated at the NUL through the Arrow C Data Interface, and the report shows the truncated name; such names are rare in practice.
166
167
  - In `diff_tables`, a list of structs named exactly `key`/`value` with a nullable key and a real map are not distinguished, so a migration between the two is not reported as a type change (polars exports both as the same Arrow type); see `map_entries` in [`crates/onix-arrow/src/schema.rs`](crates/onix-arrow/src/schema.rs).
167
168
  - In `diff_tables`, DuckDB labels a `TIMESTAMP WITH TIME ZONE` column with the connection's *session* time zone when it exports to Arrow (a UTC session as `Timestamp(µs, "UTC")`, an `America/New_York` session as `Timestamp(µs, "America/New_York")`), so on a non-UTC machine such a column can be reported as a type change against a UTC column from another library. Run `SET TimeZone='UTC'` on the DuckDB connection first for a deterministic, machine-independent result.
@@ -144,6 +144,7 @@ Type comparison uses the full logical Arrow type (timestamp unit and timezone, d
144
144
  - Adversarially deep input raises `MaxDepthError` instead of crashing: the default `max_depth` is 512 and the hard ceiling is `MAX_DEPTH_CEILING` (20,000). See [`crates/onix-py/src/guard.rs`](crates/onix-py/src/guard.rs).
145
145
  - `ignore_order` pairing is `O(N^2)` in unpaired elements per side and carries a polynomial cost in both time and memory with input depth; it has no `max_passes`/`max_diffs` cutoff, so bound the size and depth of untrusted input yourself. See [`crates/onix-core/src/ignore_order/mod.rs`](crates/onix-core/src/ignore_order/mod.rs).
146
146
  - A `values_changed` between two multi-line strings runs a `difflib`-style `O(N*M)` line diff on the default path with no opt-out, worst when changes are spread evenly through the text (about 35 s for a heavily edited 1 MB string and growing quadratically, so a few megabytes is minutes), so bound the size of untrusted strings yourself. See [`crates/onix-core/src/unified_diff.rs`](crates/onix-core/src/unified_diff.rs).
147
+ - Ordered sequences (`list` or `tuple`) of scalars (null, bool, number, string, datetime, date) run a `difflib`-style `O(N*M)` matcher on the default path with its popular-element (autojunk) purge disabled for `DeepDiff` parity, worst for sequences of a few repeated values with dense edits (about 620 s for two 8,000-element lists of two repeated values with every other element changed, growing faster than quadratically), so bound the size of untrusted sequences yourself. See [`crates/onix-core/src/lcs.rs`](crates/onix-core/src/lcs.rs).
147
148
  - In `diff_tables`, a column name containing an embedded NUL byte (`\0`) arrives truncated at the NUL through the Arrow C Data Interface, and the report shows the truncated name; such names are rare in practice.
148
149
  - In `diff_tables`, a list of structs named exactly `key`/`value` with a nullable key and a real map are not distinguished, so a migration between the two is not reported as a type change (polars exports both as the same Arrow type); see `map_entries` in [`crates/onix-arrow/src/schema.rs`](crates/onix-arrow/src/schema.rs).
149
150
  - In `diff_tables`, DuckDB labels a `TIMESTAMP WITH TIME ZONE` column with the connection's *session* time zone when it exports to Arrow (a UTC session as `Timestamp(µs, "UTC")`, an `America/New_York` session as `Timestamp(µs, "America/New_York")`), so on a non-UTC machine such a column can be reported as a type change against a UTC column from another library. Run `SET TimeZone='UTC'` on the DuckDB connection first for a deterministic, machine-independent result.
@@ -22,9 +22,9 @@ use super::{
22
22
  /// `_diff_iterable_in_order` dispatch exactly (see the parent `diff` module's
23
23
  /// "List diffing" doc section for the full, empirically-verified spec):
24
24
  ///
25
- /// - **When every element of *both* `a` and `b` is a JSON scalar** (null,
26
- /// bool, number, or string — `DeepDiff`'s "basic hashable" check, see
27
- /// [`crate::lcs::all_basic_scalars`]), an LCS/`difflib`-style "cheapest
25
+ /// - **When every element of *both* `a` and `b` is a scalar** (null, bool,
26
+ /// number, string, plus datetime and date — `DeepDiff`'s "basic hashable"
27
+ /// check, see [`crate::lcs::all_basic_scalars`]), an LCS/`difflib`-style "cheapest
28
28
  /// edit" match ([`lcs_array_diff`]) is tried first. `DeepDiff` only trusts
29
29
  /// that match unconditionally when it produces at most one finding;
30
30
  /// otherwise it *also* computes the plain index-aligned result below and
@@ -20,9 +20,10 @@
20
20
  //!
21
21
  //! `DeepDiff`'s default (non-`ignore_order`) list comparison is *not*
22
22
  //! always a simple index-aligned scan: when
23
- //! every element of *both* lists is a JSON scalar (`DeepDiff`'s own
24
- //! `_all_values_basic_hashable` check — null/bool/number/string; a dict or
25
- //! list anywhere in either list disqualifies the whole comparison), it
23
+ //! every element of *both* lists is a scalar (`DeepDiff`'s own
24
+ //! `_all_values_basic_hashable` check — null/bool/number/string, plus
25
+ //! datetime and date from `helper.basic_types`; a dict or list anywhere in
26
+ //! either list disqualifies the whole comparison), it
26
27
  //! additionally runs a `difflib.SequenceMatcher`-based "cheapest edit"
27
28
  //! match and, only when that produces more than one finding, compares its
28
29
  //! finding *count* against the plain index-aligned algorithm's, keeping
File without changes