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.
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/Cargo.lock +4 -4
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/Cargo.toml +1 -1
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/PKG-INFO +2 -1
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/README.md +1 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/array.rs +3 -3
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/lcs.rs +4 -3
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-arrow/Cargo.toml +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-arrow/examples/type_stack_cost.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-arrow/src/error.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-arrow/src/lib.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-arrow/src/options.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-arrow/src/schema.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-arrow/src/table_diff.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/Cargo.toml +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/examples/stack_frame_cost.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/datetime.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/datetime_tests.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/dispatch.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/mod.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/object.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/options.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/scalar.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/set.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/diff/tests.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/error.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/ignore_order/distance.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/ignore_order/fxhash.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/ignore_order/hash.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/ignore_order/memo.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/ignore_order/mod.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/ignore_order/pairing.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/ignore_order/tests.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/lcs_tests.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/lib.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/path.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/report.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/report_tests.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/test_support.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/unified_diff.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/unified_diff_tests.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/value.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/src/value_tests.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/tests/golden.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/tests/ignore_order_memory.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/tests/memory_footprint.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/tests/proptest_diff.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-core/tests/proptest_ignore_order.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/Cargo.toml +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/benchmarks/bench_bindings.py +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/src/arrow.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/src/convert.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/src/deepdiff.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/src/errors.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/src/fast_path.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/src/guard.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/src/lib.rs +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_bindings_memory.py +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_conversions.py +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_datetimes.py +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_depth_guard.py +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_differential_fuzz.py +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_golden_parity.py +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_sets.py +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_signed_zero.py +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_smoke.py +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_suite_hygiene.py +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_table_diff.py +0 -0
- {deepdiff_rs-0.6.1 → deepdiff_rs-0.6.2}/crates/onix-py/tests/test_tuples.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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.
|
|
636
|
+
version = "0.6.2"
|
|
637
637
|
dependencies = [
|
|
638
638
|
"arrow-array",
|
|
639
639
|
"arrow-schema",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepdiff-rs
|
|
3
|
-
Version: 0.6.
|
|
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
|
|
26
|
-
///
|
|
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
|
|
24
|
-
//! `_all_values_basic_hashable` check — null/bool/number/string
|
|
25
|
-
//!
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|