From e97b75566ef83f3718123cd08f7c2ae56cd683da Mon Sep 17 00:00:00 2001 From: Moritz Potthoff Date: Fri, 10 Jul 2026 15:39:10 +0200 Subject: [PATCH 1/8] init --- diffly/cli.py | 3 +- diffly/comparison.py | 30 ++++++++----- diffly/metrics.py | 16 ++++++- diffly/testing.py | 22 ++++++---- docs/api/metrics.rst | 9 +++- tests/cli/test_cli.py | 21 +++++++++ ...alse_sample_rows_False_sample_pk_False.txt | 28 ++++++++++++ ...False_sample_rows_True_sample_pk_False.txt | 28 ++++++++++++ ...True_sample_rows_False_sample_pk_False.txt | 16 +++++++ ..._True_sample_rows_True_sample_pk_False.txt | 16 +++++++ ...alse_sample_rows_False_sample_pk_False.txt | 33 ++++++++++++++ ..._False_sample_rows_True_sample_pk_True.txt | 33 ++++++++++++++ ...True_sample_rows_False_sample_pk_False.txt | 21 +++++++++ ...m_True_sample_rows_True_sample_pk_True.txt | 21 +++++++++ ...alse_sample_rows_False_sample_pk_False.txt | 28 ++++++++++++ ...False_sample_rows_True_sample_pk_False.txt | 28 ++++++++++++ ...True_sample_rows_False_sample_pk_False.txt | 16 +++++++ ..._True_sample_rows_True_sample_pk_False.txt | 16 +++++++ ...alse_sample_rows_False_sample_pk_False.txt | 33 ++++++++++++++ ..._False_sample_rows_True_sample_pk_True.txt | 33 ++++++++++++++ ...True_sample_rows_False_sample_pk_False.txt | 21 +++++++++ ...m_True_sample_rows_True_sample_pk_True.txt | 21 +++++++++ ...alse_sample_rows_False_sample_pk_False.txt | 28 ++++++++++++ ...False_sample_rows_True_sample_pk_False.txt | 28 ++++++++++++ ...True_sample_rows_False_sample_pk_False.txt | 16 +++++++ ..._True_sample_rows_True_sample_pk_False.txt | 16 +++++++ ...alse_sample_rows_False_sample_pk_False.txt | 33 ++++++++++++++ ..._False_sample_rows_True_sample_pk_True.txt | 33 ++++++++++++++ ...True_sample_rows_False_sample_pk_False.txt | 21 +++++++++ ...m_True_sample_rows_True_sample_pk_True.txt | 21 +++++++++ ...alse_sample_rows_False_sample_pk_False.txt | 28 ++++++++++++ ...False_sample_rows_True_sample_pk_False.txt | 28 ++++++++++++ ...True_sample_rows_False_sample_pk_False.txt | 16 +++++++ ..._True_sample_rows_True_sample_pk_False.txt | 16 +++++++ ...alse_sample_rows_False_sample_pk_False.txt | 33 ++++++++++++++ ..._False_sample_rows_True_sample_pk_True.txt | 33 ++++++++++++++ ...True_sample_rows_False_sample_pk_False.txt | 21 +++++++++ ...m_True_sample_rows_True_sample_pk_True.txt | 21 +++++++++ .../test_metrics_null_fraction.py | 44 +++++++++++++++++++ tests/test_metrics.py | 12 +++++ 40 files changed, 916 insertions(+), 25 deletions(-) create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt create mode 100644 tests/summary/fixtures/metrics_null_fraction/test_metrics_null_fraction.py diff --git a/diffly/cli.py b/diffly/cli.py index d3560eb..2f3b5d7 100644 --- a/diffly/cli.py +++ b/diffly/cli.py @@ -139,7 +139,8 @@ def main( list[str], typer.Option( help=( - "Metric presets to display per numerical column. Repeatable. " + "Metric presets to display per column. Repeatable. Most presets apply " + "to numerical columns only; ΔNull% applies to all columns. " f"Available: {', '.join(DEFAULT_METRICS)}." ) ), diff --git a/diffly/comparison.py b/diffly/comparison.py index 786c4c2..4ff9b29 100644 --- a/diffly/comparison.py +++ b/diffly/comparison.py @@ -25,7 +25,7 @@ lazy_len, make_and_validate_mapping, ) -from .metrics import MetricFn, _make_numeric_metric +from .metrics import Metric, MetricFn, _make_numeric_metric if TYPE_CHECKING: # pragma: no cover # NOTE: We cannot import at runtime as we're otherwise running into circular @@ -920,7 +920,7 @@ def summary( right_name: str = Side.RIGHT, slim: bool = False, hidden_columns: list[str] | None = None, - metrics: Mapping[str, MetricFn] | None = None, + metrics: Mapping[str, MetricFn | Metric] | None = None, ) -> Summary: """Generate a summary of all aspects of the comparison. @@ -950,16 +950,19 @@ def summary( advanced users who are familiar with the summary format. hidden_columns: Columns for which no values are printed, e.g. because they contain sensitive information. - metrics: Optional mapping from display label to a metric callable - ``(left_expr, right_expr) -> pl.Expr``. Each callable receives two + metrics: Optional mapping from display label to a metric. A value may be a + callable ``(left_expr, right_expr) -> pl.Expr`` or a + :class:`~diffly.metrics.Metric`. Each callable receives two :class:`polars.Expr` referring to the left and right values of a single - numerical column across all joined rows, and must return a scalar - aggregation expression. See :doc:`/api/metrics` for the full list of - presets and the :data:`~diffly.metrics.MetricFn` type. When ``None`` - (default), no metrics are computed; presets are not applied - automatically. Metrics are only computed for numerical columns. Prefer - short labels — the summary has a fixed width and many or long labels - degrade rendering. + column across all joined rows, and must return a scalar aggregation + expression. Bare callables are only computed for numerical columns; wrap + one in a :class:`~diffly.metrics.Metric` with a column selector to target + other column types (e.g. ``Metric(fn, selector=cs.all())`` for a + null-fraction metric across all columns). See :doc:`/api/metrics` for the + full list of presets and the :data:`~diffly.metrics.MetricFn` type. When + ``None`` (default), no metrics are computed; presets are not applied + automatically. Prefer short labels — the summary has a fixed width and + many or long labels degrade rendering. Returns: A summary which can be printed or written to a file. @@ -976,7 +979,10 @@ def summary( from .summary import Summary resolved_metrics = ( - {label: _make_numeric_metric(fn) for label, fn in metrics.items()} + { + label: v if isinstance(v, Metric) else _make_numeric_metric(v) + for label, v in metrics.items() + } if metrics is not None else None ) diff --git a/diffly/metrics.py b/diffly/metrics.py index 075536e..677ec83 100644 --- a/diffly/metrics.py +++ b/diffly/metrics.py @@ -14,7 +14,9 @@ class Metric: """A metric function paired with a column-applicability selector. - Internal only. + Pass an instance as a value in the ``metrics`` mapping to compute a metric only for + the columns matched by ``selector``. A bare :data:`MetricFn` passed instead defaults + to numerical columns only. """ fn: MetricFn @@ -70,6 +72,15 @@ def mean_relative_deviation(left: pl.Expr, right: pl.Expr) -> pl.Expr: return ((right - left) / left).abs().mean() +def null_fraction_change(left: pl.Expr, right: pl.Expr) -> pl.Expr: + """Change in the fraction of null entries, ``right - left``. + + A positive value means the right side has proportionally more nulls than the left. + Unlike the other presets, this applies to columns of any type. + """ + return right.is_null().mean() - left.is_null().mean() + + def quantile(q: float) -> MetricFn: """Factory returning a metric that computes the ``q``-quantile of ``right - left``.""" @@ -82,7 +93,7 @@ def _quantile(left: pl.Expr, right: pl.Expr) -> pl.Expr: return _quantile -DEFAULT_METRICS: dict[str, MetricFn] = { +DEFAULT_METRICS: dict[str, MetricFn | Metric] = { "Mean": mean, "Median": median, "Min": min, @@ -90,4 +101,5 @@ def _quantile(left: pl.Expr, right: pl.Expr) -> pl.Expr: "Std": std, "Mean absolute deviation": mean_absolute_deviation, "Mean relative deviation": mean_relative_deviation, + "ΔNull%": Metric(fn=null_fraction_change, selector=cs.all()), } diff --git a/diffly/testing.py b/diffly/testing.py index 367a304..9a36458 100644 --- a/diffly/testing.py +++ b/diffly/testing.py @@ -19,7 +19,7 @@ from ._compat import dy from .comparison import DataFrameComparison, compare_frames -from .metrics import MetricFn +from .metrics import Metric, MetricFn def assert_collection_equal( @@ -40,7 +40,7 @@ def assert_collection_equal( right_name: str = Side.RIGHT, slim: bool = False, hidden_columns: list[str] | None = None, - metrics: Mapping[str, MetricFn] | None = None, + metrics: Mapping[str, MetricFn | Metric] | None = None, ) -> None: """Assert that two :mod:`dataframely` collections are equal. @@ -85,9 +85,11 @@ def assert_collection_equal( hidden_columns: Columns for which no values are printed, e.g. because they contain sensitive information. metrics: Optional mapping from display label to a metric callable - ``(left_expr, right_expr) -> pl.Expr``. See :mod:`diffly.metrics` for - presets. When ``None`` (default), no metrics are computed; presets are - not applied automatically. + ``(left_expr, right_expr) -> pl.Expr`` or a :class:`~diffly.metrics.Metric`. + Bare callables are only computed for numerical columns; wrap one in a + :class:`~diffly.metrics.Metric` with a column selector to target other column + types. See :mod:`diffly.metrics` for presets. When ``None`` (default), no + metrics are computed; presets are not applied automatically. Raises: AssertionError: If the collections are not equal. @@ -174,7 +176,7 @@ def assert_frame_equal( right_name: str = Side.RIGHT, slim: bool = False, hidden_columns: list[str] | None = None, - metrics: Mapping[str, MetricFn] | None = None, + metrics: Mapping[str, MetricFn | Metric] | None = None, ) -> None: """Assert that two :mod:`polars` data frames are equal. @@ -226,9 +228,11 @@ def assert_frame_equal( hidden_columns: Columns for which no values are printed, e.g. because they contain sensitive information. metrics: Optional mapping from display label to a metric callable - ``(left_expr, right_expr) -> pl.Expr``. See :mod:`diffly.metrics` for - presets. When ``None`` (default), no metrics are computed; presets are - not applied automatically. + ``(left_expr, right_expr) -> pl.Expr`` or a :class:`~diffly.metrics.Metric`. + Bare callables are only computed for numerical columns; wrap one in a + :class:`~diffly.metrics.Metric` with a column selector to target other column + types. See :mod:`diffly.metrics` for presets. When ``None`` (default), no + metrics are computed; presets are not applied automatically. Raises: AssertionError: If the data frames are not equal. diff --git a/docs/api/metrics.rst b/docs/api/metrics.rst index 27df193..a90947b 100644 --- a/docs/api/metrics.rst +++ b/docs/api/metrics.rst @@ -4,15 +4,21 @@ Metrics .. currentmodule:: diffly.metrics -Metrics are scalar aggregations computed per numerical column when generating a +Metrics are scalar aggregations computed per column when generating a :meth:`~diffly.comparison.DataFrameComparison.summary`. Pass them via the ``metrics`` argument as a mapping from display label to a :data:`MetricFn` callable. :mod:`diffly.metrics` ships a set of presets; you can also supply your own callable ``(left_expr, right_expr) -> pl.Expr``. +A bare callable is only computed for numerical columns. To target other column +types, wrap it in a :class:`Metric` with a column selector, e.g. +``Metric(fn, selector=cs.string())`` or ``selector=cs.all()``. + .. autodata:: MetricFn :no-value: +.. autoclass:: Metric + Presets ======= @@ -26,4 +32,5 @@ Presets std mean_absolute_deviation mean_relative_deviation + null_fraction_change quantile diff --git a/tests/cli/test_cli.py b/tests/cli/test_cli.py index c65320c..e99f78b 100644 --- a/tests/cli/test_cli.py +++ b/tests/cli/test_cli.py @@ -80,6 +80,27 @@ def test_cli_hidden_columns_alias_warns(tmp_path: Path) -> None: assert result.exit_code == 0 +def test_cli_null_fraction_metric(tmp_path: Path) -> None: + left = pl.DataFrame({"id": [1, 2, 3], "status": ["a", "b", "c"]}) + right = pl.DataFrame({"id": [1, 2, 3], "status": ["a", None, "x"]}) + left.write_parquet(tmp_path / "left.parquet") + right.write_parquet(tmp_path / "right.parquet") + + result = runner.invoke( + app, + [ + str(tmp_path / "left.parquet"), + str(tmp_path / "right.parquet"), + "--primary-key", + "id", + "--metric", + "ΔNull%", + ], + ) + assert result.exit_code == 0 + assert "ΔNull%" in result.output + + def test_cli_unknown_metric(tmp_path: Path) -> None: left = pl.DataFrame({"id": [1, 2], "x": [1.0, 2.0]}) right = pl.DataFrame({"id": [1, 2], "x": [1.0, 3.0]}) diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..a36ced4 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,28 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃ Diffly Summary ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt new file mode 100644 index 0000000..a36ced4 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -0,0 +1,28 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃ Diffly Summary ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..ba87093 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,16 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt new file mode 100644 index 0000000..ba87093 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -0,0 +1,16 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..7a3ceda --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,33 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃ Diffly Summary ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ + │ │ │ │ │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt new file mode 100644 index 0000000..dd8877f --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -0,0 +1,33 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃ Diffly Summary ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..a1aea04 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,21 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ + │ │ │ │ │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt new file mode 100644 index 0000000..3c0645a --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -0,0 +1,21 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..a36ced4 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,28 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃ Diffly Summary ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt new file mode 100644 index 0000000..a36ced4 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -0,0 +1,28 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃ Diffly Summary ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..ba87093 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,16 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt new file mode 100644 index 0000000..ba87093 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -0,0 +1,16 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..7a3ceda --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,33 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃ Diffly Summary ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ + │ │ │ │ │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt new file mode 100644 index 0000000..dd8877f --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -0,0 +1,33 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃ Diffly Summary ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..a1aea04 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,21 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ + │ │ │ │ │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt new file mode 100644 index 0000000..3c0645a --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -0,0 +1,21 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..1c34136 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,28 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃  Diffly Summary  ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt new file mode 100644 index 0000000..1c34136 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -0,0 +1,28 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃  Diffly Summary  ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..2a0733f --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,16 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt new file mode 100644 index 0000000..2a0733f --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -0,0 +1,16 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..679be0b --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,33 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃  Diffly Summary  ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ + │ │ │ │ │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt new file mode 100644 index 0000000..0f9ee2d --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -0,0 +1,33 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃  Diffly Summary  ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..4e356b9 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,21 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ + │ │ │ │ │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt new file mode 100644 index 0000000..a129846 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -0,0 +1,21 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..1c34136 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,28 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃  Diffly Summary  ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt new file mode 100644 index 0000000..1c34136 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -0,0 +1,28 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃  Diffly Summary  ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..2a0733f --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,16 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt new file mode 100644 index 0000000..2a0733f --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -0,0 +1,16 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ + │ status │ 40.00% │ │ 0.4 │ 0 │ + └────────┴────────────┴──────┴────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..679be0b --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,33 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃  Diffly Summary  ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ + │ │ │ │ │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt new file mode 100644 index 0000000..0f9ee2d --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -0,0 +1,33 @@ +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +┃  Diffly Summary  ┃ +┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + Primary key: id + + Schemas + ▔▔▔▔▔▔▔ + Schemas match exactly (column count: 3). + + Rows + ▔▔▔▔ + Left count Right count + 5 (no change) 5 + + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt new file mode 100644 index 0000000..4e356b9 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -0,0 +1,21 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ + │ │ │ │ │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt new file mode 100644 index 0000000..a129846 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -0,0 +1,21 @@ + Rows + ▔▔▔▔ + ┏━┯━┯━┯━┯━┓╌╌╌┏━┯━┯━┯━┯━┓╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╮ + ┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃ 2 equal (40.00%) │ + ┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌├╴ 5 joined + ┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃ 3 unequal (60.00%) │ + ┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╯ + + Columns + ▔▔▔▔▔▔▔ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ + ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ + │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ + └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/test_metrics_null_fraction.py b/tests/summary/fixtures/metrics_null_fraction/test_metrics_null_fraction.py new file mode 100644 index 0000000..f8bd508 --- /dev/null +++ b/tests/summary/fixtures/metrics_null_fraction/test_metrics_null_fraction.py @@ -0,0 +1,44 @@ +# Copyright (c) QuantCo 2025-2026 +# SPDX-License-Identifier: BSD-3-Clause + +import polars as pl +import polars.selectors as cs +import pytest + +from diffly import compare_frames, metrics +from diffly.metrics import Metric +from tests.utils import generate_summaries + + +@pytest.mark.generate +def test_generate() -> None: + left = pl.DataFrame( + { + "id": [1, 2, 3, 4, 5], + "price": [10.0, 20.0, None, 40.0, 50.0], + "status": ["a", "b", "c", "d", "e"], + } + ) + right = pl.DataFrame( + { + "id": [1, 2, 3, 4, 5], + "price": [10.0, 21.0, 30.0, 42.0, 50.0], + "status": ["a", None, "x", None, "e"], + } + ) + comp = compare_frames(left, right, primary_key=["id"]) + generate_summaries( + comp, + metrics={ + # Numeric-only preset alongside a metric applied to all columns. + "Mean": metrics.mean, + "ΔNull%": metrics.DEFAULT_METRICS["ΔNull%"], + # A user-supplied metric with a custom (string-only) selector. + "str_len_delta": Metric( + fn=lambda left, right: ( + right.str.len_chars() - left.str.len_chars() + ).mean(), + selector=cs.string(), + ), + }, + ) diff --git a/tests/test_metrics.py b/tests/test_metrics.py index add8bd0..9a6a52c 100644 --- a/tests/test_metrics.py +++ b/tests/test_metrics.py @@ -64,6 +64,18 @@ def test_mean_relative_deviation_div_by_zero() -> None: assert math.isinf(_apply(metrics.mean_relative_deviation, frame)) +def test_null_fraction_change() -> None: + # left nulls: 1/3; right nulls: 2/3; change = 2/3 - 1/3 = 1/3 + frame = pl.DataFrame({"l": [1, None, 3], "r": [None, None, 3]}) + assert _apply(metrics.null_fraction_change, frame) == pytest.approx(1 / 3) + + +def test_null_fraction_change_non_numeric() -> None: + # Applies to any column type; here strings. left nulls: 0; right nulls: 1/2 + frame = pl.DataFrame({"l": ["a", "b"], "r": ["a", None]}) + assert _apply(metrics.null_fraction_change, frame) == pytest.approx(1 / 2) + + def test_quantile(frame: pl.DataFrame) -> None: # deltas [0, 0, 2]: p50 = 0, p100 = 2 assert _apply(metrics.quantile(0.5), frame) == 0 From 1e72823665a2510bca257c250e8475d3e953e73a Mon Sep 17 00:00:00 2001 From: Moritz Potthoff Date: Fri, 10 Jul 2026 15:46:46 +0200 Subject: [PATCH 2/8] better output --- diffly/metrics.py | 26 ++++++++++++++--- diffly/summary.py | 5 +++- ...alse_sample_rows_False_sample_pk_False.txt | 12 ++++---- ...False_sample_rows_True_sample_pk_False.txt | 12 ++++---- ...True_sample_rows_False_sample_pk_False.txt | 12 ++++---- ..._True_sample_rows_True_sample_pk_False.txt | 12 ++++---- ...alse_sample_rows_False_sample_pk_False.txt | 25 +++++++++-------- ..._False_sample_rows_True_sample_pk_True.txt | 28 +++++++++++-------- ...True_sample_rows_False_sample_pk_False.txt | 25 +++++++++-------- ...m_True_sample_rows_True_sample_pk_True.txt | 28 +++++++++++-------- ...alse_sample_rows_False_sample_pk_False.txt | 12 ++++---- ...False_sample_rows_True_sample_pk_False.txt | 12 ++++---- ...True_sample_rows_False_sample_pk_False.txt | 12 ++++---- ..._True_sample_rows_True_sample_pk_False.txt | 12 ++++---- ...alse_sample_rows_False_sample_pk_False.txt | 25 +++++++++-------- ..._False_sample_rows_True_sample_pk_True.txt | 28 +++++++++++-------- ...True_sample_rows_False_sample_pk_False.txt | 25 +++++++++-------- ...m_True_sample_rows_True_sample_pk_True.txt | 28 +++++++++++-------- ...alse_sample_rows_False_sample_pk_False.txt | 12 ++++---- ...False_sample_rows_True_sample_pk_False.txt | 12 ++++---- ...True_sample_rows_False_sample_pk_False.txt | 12 ++++---- ..._True_sample_rows_True_sample_pk_False.txt | 12 ++++---- ...alse_sample_rows_False_sample_pk_False.txt | 25 +++++++++-------- ..._False_sample_rows_True_sample_pk_True.txt | 28 +++++++++++-------- ...True_sample_rows_False_sample_pk_False.txt | 25 +++++++++-------- ...m_True_sample_rows_True_sample_pk_True.txt | 28 +++++++++++-------- ...alse_sample_rows_False_sample_pk_False.txt | 12 ++++---- ...False_sample_rows_True_sample_pk_False.txt | 12 ++++---- ...True_sample_rows_False_sample_pk_False.txt | 12 ++++---- ..._True_sample_rows_True_sample_pk_False.txt | 12 ++++---- ...alse_sample_rows_False_sample_pk_False.txt | 25 +++++++++-------- ..._False_sample_rows_True_sample_pk_True.txt | 28 +++++++++++-------- ...True_sample_rows_False_sample_pk_False.txt | 25 +++++++++-------- ...m_True_sample_rows_True_sample_pk_True.txt | 28 +++++++++++-------- tests/test_metrics.py | 16 +++++++---- 35 files changed, 381 insertions(+), 282 deletions(-) diff --git a/diffly/metrics.py b/diffly/metrics.py index 677ec83..4a696b7 100644 --- a/diffly/metrics.py +++ b/diffly/metrics.py @@ -72,13 +72,31 @@ def mean_relative_deviation(left: pl.Expr, right: pl.Expr) -> pl.Expr: return ((right - left) / left).abs().mean() +def _percentage_string(fraction: pl.Expr, *, signed: bool = False) -> pl.Expr: + """Format a fraction as a percentage string, optionally with an explicit sign.""" + pct = (fraction * 100).round(2) + body = pl.format("{}%", pct) + if signed: + return pl.when(pct >= 0).then(pl.format("+{}", body)).otherwise(body) + return body + + def null_fraction_change(left: pl.Expr, right: pl.Expr) -> pl.Expr: - """Change in the fraction of null entries, ``right - left``. + """Change in the fraction of null entries, rendered as `` -> ()``. - A positive value means the right side has proportionally more nulls than the left. - Unlike the other presets, this applies to columns of any type. + ``old`` and ``new`` are the null percentages of the left and right side, and + ``delta`` is their signed difference (``+`` when the right side has proportionally + more nulls, ``-`` when it has fewer). Unlike the other presets, this applies to + columns of any type. """ - return right.is_null().mean() - left.is_null().mean() + old = left.is_null().mean() + new = right.is_null().mean() + return pl.format( + "{} -> {} ({})", + _percentage_string(old), + _percentage_string(new), + _percentage_string(new - old, signed=True), + ) def quantile(q: float) -> MetricFn: diff --git a/diffly/summary.py b/diffly/summary.py index 3edf645..ac3dda7 100644 --- a/diffly/summary.py +++ b/diffly/summary.py @@ -1131,10 +1131,13 @@ def _format_value(value: Any, *, float_format: str | None = None) -> str: def _format_metric_value(value: Any) -> str: """Format a metric value for the column summary. - Blanks out ``None`` and renders floats with ``.4g`` precision. + Blanks out ``None``, renders string values verbatim, and renders floats with ``.4g`` + precision. """ if value is None: return "" + if isinstance(value, str): + return _yellow(value) return _format_value(value, float_format=".4g") diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt index a36ced4..68e90b8 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt index a36ced4..68e90b8 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt index ba87093..06fa7c7 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt index ba87093..06fa7c7 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt index 7a3ceda..89d0e11 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -20,14 +20,17 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ - │ │ │ │ │ │ "c" -> "x" (1x) │ - │ │ │ │ │ │ "b" -> None (1x) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ + │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt index dd8877f..59c4675 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -20,14 +20,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ + │ │ │ │ (-20.0%) │ │ e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ + │ │ │ │ │ │ e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ + │ │ │ │ │ │ e.g. 2) │ + ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0%) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt index a1aea04..d3f872c 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -8,14 +8,17 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ - │ │ │ │ │ │ "c" -> "x" (1x) │ - │ │ │ │ │ │ "b" -> None (1x) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ + │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt index 3c0645a..52dafd8 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -8,14 +8,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ + │ │ │ │ (-20.0%) │ │ e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ + │ │ │ │ │ │ e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ + │ │ │ │ │ │ e.g. 2) │ + ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0%) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt index a36ced4..68e90b8 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt index a36ced4..68e90b8 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt index ba87093..06fa7c7 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt index ba87093..06fa7c7 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt index 7a3ceda..89d0e11 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -20,14 +20,17 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ - │ │ │ │ │ │ "c" -> "x" (1x) │ - │ │ │ │ │ │ "b" -> None (1x) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ + │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt index dd8877f..59c4675 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -20,14 +20,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ + │ │ │ │ (-20.0%) │ │ e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ + │ │ │ │ │ │ e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ + │ │ │ │ │ │ e.g. 2) │ + ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0%) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt index a1aea04..d3f872c 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -8,14 +8,17 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ - │ │ │ │ │ │ "c" -> "x" (1x) │ - │ │ │ │ │ │ "b" -> None (1x) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ + │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt index 3c0645a..52dafd8 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -8,14 +8,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ + │ │ │ │ (-20.0%) │ │ e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ + │ │ │ │ │ │ e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ + │ │ │ │ │ │ e.g. 2) │ + ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0%) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt index 1c34136..5acc7c4 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt index 1c34136..5acc7c4 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt index 2a0733f..b8dc6db 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt index 2a0733f..b8dc6db 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt index 679be0b..ca296f4 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -20,14 +20,17 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ - │ │ │ │ │ │ "c" -> "x" (1x) │ - │ │ │ │ │ │ "b" -> None (1x) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ + │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt index 0f9ee2d..3096075 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -20,14 +20,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ + │ │ │ │ (-20.0%) │ │ e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ + │ │ │ │ │ │ e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ + │ │ │ │ │ │ e.g. 2) │ + ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0%) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt index 4e356b9..4a1aa9d 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -8,14 +8,17 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ - │ │ │ │ │ │ "c" -> "x" (1x) │ - │ │ │ │ │ │ "b" -> None (1x) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ + │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt index a129846..20e97f9 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -8,14 +8,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ + │ │ │ │ (-20.0%) │ │ e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ + │ │ │ │ │ │ e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ + │ │ │ │ │ │ e.g. 2) │ + ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0%) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt index 1c34136..5acc7c4 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt index 1c34136..5acc7c4 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt index 2a0733f..b8dc6db 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt index 2a0733f..b8dc6db 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ - │ status │ 40.00% │ │ 0.4 │ 0 │ - └────────┴────────────┴──────┴────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ + └────────┴────────────┴──────┴────────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt index 679be0b..ca296f4 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -20,14 +20,17 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ - │ │ │ │ │ │ "c" -> "x" (1x) │ - │ │ │ │ │ │ "b" -> None (1x) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ + │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt index 0f9ee2d..3096075 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -20,14 +20,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ + │ │ │ │ (-20.0%) │ │ e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ + │ │ │ │ │ │ e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ + │ │ │ │ │ │ e.g. 2) │ + ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0%) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt index 4e356b9..4a1aa9d 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -8,14 +8,17 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x) │ - │ │ │ │ │ │ "c" -> "x" (1x) │ - │ │ │ │ │ │ "b" -> None (1x) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ + │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ │ │ "b" -> None (1x) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt index a129846..20e97f9 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -8,14 +8,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃  Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ -0.2 │ │ None -> 30.0 (1x, e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, e.g. 2) │ - ├────────┼────────────┼──────┼────────┼───────────────┼───────────────────────────┤ - │ status │ 40.00% │ │ 0.4 │ 0 │ "d" -> None (1x, e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, e.g. 2) │ - └────────┴────────────┴──────┴────────┴───────────────┴───────────────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ + │ │ │ │ (-20.0%) │ │ e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ + │ │ │ │ │ │ e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ + │ │ │ │ │ │ e.g. 2) │ + ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0%) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ diff --git a/tests/test_metrics.py b/tests/test_metrics.py index 9a6a52c..b761ec1 100644 --- a/tests/test_metrics.py +++ b/tests/test_metrics.py @@ -65,15 +65,21 @@ def test_mean_relative_deviation_div_by_zero() -> None: def test_null_fraction_change() -> None: - # left nulls: 1/3; right nulls: 2/3; change = 2/3 - 1/3 = 1/3 - frame = pl.DataFrame({"l": [1, None, 3], "r": [None, None, 3]}) - assert _apply(metrics.null_fraction_change, frame) == pytest.approx(1 / 3) + # left nulls: 1/4 = 25%; right nulls: 3/4 = 75%; delta = +50% + frame = pl.DataFrame({"l": [1, None, 3, 4], "r": [None, None, 3, None]}) + assert _apply(metrics.null_fraction_change, frame) == "25.0% -> 75.0% (+50.0%)" + + +def test_null_fraction_change_negative_delta() -> None: + # left nulls: 1/2 = 50%; right nulls: 0%; delta = -50% + frame = pl.DataFrame({"l": [1, None], "r": [1, 2]}) + assert _apply(metrics.null_fraction_change, frame) == "50.0% -> 0.0% (-50.0%)" def test_null_fraction_change_non_numeric() -> None: - # Applies to any column type; here strings. left nulls: 0; right nulls: 1/2 + # Applies to any column type; here strings. left nulls: 0%; right nulls: 50% frame = pl.DataFrame({"l": ["a", "b"], "r": ["a", None]}) - assert _apply(metrics.null_fraction_change, frame) == pytest.approx(1 / 2) + assert _apply(metrics.null_fraction_change, frame) == "0.0% -> 50.0% (+50.0%)" def test_quantile(frame: pl.DataFrame) -> None: From 1d7bdeba4aecde4e90ef29de9063f23b46be5bf4 Mon Sep 17 00:00:00 2001 From: Moritz Potthoff Date: Fri, 10 Jul 2026 15:51:59 +0200 Subject: [PATCH 3/8] cleanup --- diffly/cli.py | 3 +-- diffly/comparison.py | 11 +++++------ diffly/metrics.py | 7 +------ 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/diffly/cli.py b/diffly/cli.py index 2f3b5d7..35db432 100644 --- a/diffly/cli.py +++ b/diffly/cli.py @@ -139,8 +139,7 @@ def main( list[str], typer.Option( help=( - "Metric presets to display per column. Repeatable. Most presets apply " - "to numerical columns only; ΔNull% applies to all columns. " + "Metric presets to display per column. Repeatable. " f"Available: {', '.join(DEFAULT_METRICS)}." ) ), diff --git a/diffly/comparison.py b/diffly/comparison.py index 4ff9b29..3d84832 100644 --- a/diffly/comparison.py +++ b/diffly/comparison.py @@ -957,12 +957,11 @@ def summary( column across all joined rows, and must return a scalar aggregation expression. Bare callables are only computed for numerical columns; wrap one in a :class:`~diffly.metrics.Metric` with a column selector to target - other column types (e.g. ``Metric(fn, selector=cs.all())`` for a - null-fraction metric across all columns). See :doc:`/api/metrics` for the - full list of presets and the :data:`~diffly.metrics.MetricFn` type. When - ``None`` (default), no metrics are computed; presets are not applied - automatically. Prefer short labels — the summary has a fixed width and - many or long labels degrade rendering. + other column types (e.g. ``Metric(fn, selector=cs.all())``. + See :doc:`/api/metrics` for the full list of presets and the + :data:`~diffly.metrics.MetricFn` type. When ``None`` (default), no metrics + are computed; presets are not applied automatically. Prefer short labels + — the summary has a fixed width and many or long labels degrade rendering. Returns: A summary which can be printed or written to a file. diff --git a/diffly/metrics.py b/diffly/metrics.py index 4a696b7..7722fca 100644 --- a/diffly/metrics.py +++ b/diffly/metrics.py @@ -12,12 +12,7 @@ @dataclass(frozen=True) class Metric: - """A metric function paired with a column-applicability selector. - - Pass an instance as a value in the ``metrics`` mapping to compute a metric only for - the columns matched by ``selector``. A bare :data:`MetricFn` passed instead defaults - to numerical columns only. - """ + """A metric function paired with a column-applicability selector.""" fn: MetricFn selector: cs.Selector From a74429fd5b2669d38cf4b740e3d28de80fd18f91 Mon Sep 17 00:00:00 2001 From: Moritz Potthoff Date: Fri, 10 Jul 2026 15:55:32 +0200 Subject: [PATCH 4/8] refactor --- diffly/comparison.py | 8 ++++---- diffly/metrics.py | 30 +++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/diffly/comparison.py b/diffly/comparison.py index 3d84832..e101fae 100644 --- a/diffly/comparison.py +++ b/diffly/comparison.py @@ -957,10 +957,10 @@ def summary( column across all joined rows, and must return a scalar aggregation expression. Bare callables are only computed for numerical columns; wrap one in a :class:`~diffly.metrics.Metric` with a column selector to target - other column types (e.g. ``Metric(fn, selector=cs.all())``. - See :doc:`/api/metrics` for the full list of presets and the - :data:`~diffly.metrics.MetricFn` type. When ``None`` (default), no metrics - are computed; presets are not applied automatically. Prefer short labels + other column types (e.g. ``Metric(fn, selector=cs.all())``. + See :doc:`/api/metrics` for the full list of presets and the + :data:`~diffly.metrics.MetricFn` type. When ``None`` (default), no metrics + are computed; presets are not applied automatically. Prefer short labels — the summary has a fixed width and many or long labels degrade rendering. Returns: diff --git a/diffly/metrics.py b/diffly/metrics.py index 7722fca..1594d9a 100644 --- a/diffly/metrics.py +++ b/diffly/metrics.py @@ -76,6 +76,25 @@ def _percentage_string(fraction: pl.Expr, *, signed: bool = False) -> pl.Expr: return body +def _render_change( + old: pl.Expr, + new: pl.Expr, + format_value: Callable[[pl.Expr, bool], pl.Expr], +) -> pl.Expr: + """Render a change as `` -> ()``. + + ``format_value(value, signed)`` formats a value for display; ``old`` and ``new`` are + rendered unsigned and the delta ``new - old`` is rendered signed (with an explicit + ``+`` or ``-`` prefix). + """ + return pl.format( + "{} -> {} ({})", + format_value(old, False), + format_value(new, False), + format_value(new - old, True), + ) + + def null_fraction_change(left: pl.Expr, right: pl.Expr) -> pl.Expr: """Change in the fraction of null entries, rendered as `` -> ()``. @@ -84,13 +103,10 @@ def null_fraction_change(left: pl.Expr, right: pl.Expr) -> pl.Expr: more nulls, ``-`` when it has fewer). Unlike the other presets, this applies to columns of any type. """ - old = left.is_null().mean() - new = right.is_null().mean() - return pl.format( - "{} -> {} ({})", - _percentage_string(old), - _percentage_string(new), - _percentage_string(new - old, signed=True), + return _render_change( + left.is_null().mean(), + right.is_null().mean(), + lambda value, signed: _percentage_string(value, signed=signed), ) From 71338c916bfecee271b5af7ad78ae07aa5949a23 Mon Sep 17 00:00:00 2001 From: Moritz Potthoff <160181542+MoritzPotthoffQC@users.noreply.github.com> Date: Fri, 10 Jul 2026 16:36:27 +0200 Subject: [PATCH 5/8] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- diffly/comparison.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/diffly/comparison.py b/diffly/comparison.py index e101fae..e0396c6 100644 --- a/diffly/comparison.py +++ b/diffly/comparison.py @@ -957,9 +957,8 @@ def summary( column across all joined rows, and must return a scalar aggregation expression. Bare callables are only computed for numerical columns; wrap one in a :class:`~diffly.metrics.Metric` with a column selector to target - other column types (e.g. ``Metric(fn, selector=cs.all())``. + other column types (e.g. ``Metric(fn, selector=cs.all())``). See :doc:`/api/metrics` for the full list of presets and the - :data:`~diffly.metrics.MetricFn` type. When ``None`` (default), no metrics are computed; presets are not applied automatically. Prefer short labels — the summary has a fixed width and many or long labels degrade rendering. From cd33f6a58c94912e7522741c1dfc2eb127f89214 Mon Sep 17 00:00:00 2001 From: Moritz Potthoff Date: Fri, 10 Jul 2026 16:39:25 +0200 Subject: [PATCH 6/8] fix --- diffly/metrics.py | 2 +- tests/cli/test_cli.py | 4 ++-- ...top_False_slim_False_sample_rows_False_sample_pk_False.txt | 2 +- ..._top_False_slim_False_sample_rows_True_sample_pk_False.txt | 2 +- ..._top_False_slim_True_sample_rows_False_sample_pk_False.txt | 2 +- ...e_top_False_slim_True_sample_rows_True_sample_pk_False.txt | 2 +- ..._top_True_slim_False_sample_rows_False_sample_pk_False.txt | 2 +- ...se_top_True_slim_False_sample_rows_True_sample_pk_True.txt | 2 +- ...e_top_True_slim_True_sample_rows_False_sample_pk_False.txt | 2 +- ...lse_top_True_slim_True_sample_rows_True_sample_pk_True.txt | 2 +- ...top_False_slim_False_sample_rows_False_sample_pk_False.txt | 2 +- ..._top_False_slim_False_sample_rows_True_sample_pk_False.txt | 2 +- ..._top_False_slim_True_sample_rows_False_sample_pk_False.txt | 2 +- ...e_top_False_slim_True_sample_rows_True_sample_pk_False.txt | 2 +- ..._top_True_slim_False_sample_rows_False_sample_pk_False.txt | 2 +- ...ue_top_True_slim_False_sample_rows_True_sample_pk_True.txt | 2 +- ...e_top_True_slim_True_sample_rows_False_sample_pk_False.txt | 2 +- ...rue_top_True_slim_True_sample_rows_True_sample_pk_True.txt | 2 +- ...top_False_slim_False_sample_rows_False_sample_pk_False.txt | 2 +- ..._top_False_slim_False_sample_rows_True_sample_pk_False.txt | 2 +- ..._top_False_slim_True_sample_rows_False_sample_pk_False.txt | 2 +- ...e_top_False_slim_True_sample_rows_True_sample_pk_False.txt | 2 +- ..._top_True_slim_False_sample_rows_False_sample_pk_False.txt | 2 +- ...se_top_True_slim_False_sample_rows_True_sample_pk_True.txt | 2 +- ...e_top_True_slim_True_sample_rows_False_sample_pk_False.txt | 2 +- ...lse_top_True_slim_True_sample_rows_True_sample_pk_True.txt | 2 +- ...top_False_slim_False_sample_rows_False_sample_pk_False.txt | 2 +- ..._top_False_slim_False_sample_rows_True_sample_pk_False.txt | 2 +- ..._top_False_slim_True_sample_rows_False_sample_pk_False.txt | 2 +- ...e_top_False_slim_True_sample_rows_True_sample_pk_False.txt | 2 +- ..._top_True_slim_False_sample_rows_False_sample_pk_False.txt | 2 +- ...ue_top_True_slim_False_sample_rows_True_sample_pk_True.txt | 2 +- ...e_top_True_slim_True_sample_rows_False_sample_pk_False.txt | 2 +- ...rue_top_True_slim_True_sample_rows_True_sample_pk_True.txt | 2 +- .../metrics_null_fraction/test_metrics_null_fraction.py | 2 +- tests/test_metrics.py | 3 ++- 36 files changed, 38 insertions(+), 37 deletions(-) diff --git a/diffly/metrics.py b/diffly/metrics.py index 1594d9a..32fbc4e 100644 --- a/diffly/metrics.py +++ b/diffly/metrics.py @@ -130,5 +130,5 @@ def _quantile(left: pl.Expr, right: pl.Expr) -> pl.Expr: "Std": std, "Mean absolute deviation": mean_absolute_deviation, "Mean relative deviation": mean_relative_deviation, - "ΔNull%": Metric(fn=null_fraction_change, selector=cs.all()), + "Null%": Metric(fn=null_fraction_change, selector=cs.all()), } diff --git a/tests/cli/test_cli.py b/tests/cli/test_cli.py index e99f78b..e49c5f0 100644 --- a/tests/cli/test_cli.py +++ b/tests/cli/test_cli.py @@ -94,11 +94,11 @@ def test_cli_null_fraction_metric(tmp_path: Path) -> None: "--primary-key", "id", "--metric", - "ΔNull%", + "Null%", ], ) assert result.exit_code == 0 - assert "ΔNull%" in result.output + assert "Null%" in result.output def test_cli_unknown_metric(tmp_path: Path) -> None: diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt index 68e90b8..c95c2df 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt index 68e90b8..c95c2df 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt index 06fa7c7..516ebb7 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt index 06fa7c7..516ebb7 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt index 89d0e11..5f90753 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ │ │ │ │ (-20.0%) │ │ (1x) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt index 59c4675..1958b0b 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ │ │ │ │ (-20.0%) │ │ e.g. 3) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt index d3f872c..c311e21 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ │ │ │ │ (-20.0%) │ │ (1x) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt index 52dafd8..c78adf7 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ │ │ │ │ (-20.0%) │ │ e.g. 3) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt index 68e90b8..c95c2df 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt index 68e90b8..c95c2df 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt index 06fa7c7..516ebb7 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt index 06fa7c7..516ebb7 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt index 89d0e11..5f90753 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ │ │ │ │ (-20.0%) │ │ (1x) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt index 59c4675..1958b0b 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ │ │ │ │ (-20.0%) │ │ e.g. 3) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt index d3f872c..c311e21 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ │ │ │ │ (-20.0%) │ │ (1x) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt index 52dafd8..c78adf7 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ ΔNull% ┃ str_len_delta ┃ Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ │ │ │ │ (-20.0%) │ │ e.g. 3) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt index 5acc7c4..bc15fb8 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt index 5acc7c4..bc15fb8 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt index b8dc6db..a9f6c0c 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt index b8dc6db..a9f6c0c 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt index ca296f4..d8c0d33 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ │ │ │ │ (-20.0%) │ │ (1x) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt index 3096075..f8593d7 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ │ │ │ │ (-20.0%) │ │ e.g. 3) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt index 4a1aa9d..d3279fe 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ │ │ │ │ (-20.0%) │ │ (1x) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt index 20e97f9..d86fbdc 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ │ │ │ │ (-20.0%) │ │ e.g. 3) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt index 5acc7c4..bc15fb8 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt index 5acc7c4..bc15fb8 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt index b8dc6db..a9f6c0c 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt index b8dc6db..a9f6c0c 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt index ca296f4..d8c0d33 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ │ │ │ │ (-20.0%) │ │ (1x) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt index 3096075..f8593d7 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -21,7 +21,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ │ │ │ │ (-20.0%) │ │ e.g. 3) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt index 4a1aa9d..d3279fe 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ │ │ │ │ (-20.0%) │ │ (1x) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt index 20e97f9..d86fbdc 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -9,7 +9,7 @@ Columns ▔▔▔▔▔▔▔ ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  ΔNull% ┃ str_len_delta ┃  Top Changes ┃ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ │ │ │ │ (-20.0%) │ │ e.g. 3) │ diff --git a/tests/summary/fixtures/metrics_null_fraction/test_metrics_null_fraction.py b/tests/summary/fixtures/metrics_null_fraction/test_metrics_null_fraction.py index f8bd508..a0a74d8 100644 --- a/tests/summary/fixtures/metrics_null_fraction/test_metrics_null_fraction.py +++ b/tests/summary/fixtures/metrics_null_fraction/test_metrics_null_fraction.py @@ -32,7 +32,7 @@ def test_generate() -> None: metrics={ # Numeric-only preset alongside a metric applied to all columns. "Mean": metrics.mean, - "ΔNull%": metrics.DEFAULT_METRICS["ΔNull%"], + "Null%": metrics.DEFAULT_METRICS["Null%"], # A user-supplied metric with a custom (string-only) selector. "str_len_delta": Metric( fn=lambda left, right: ( diff --git a/tests/test_metrics.py b/tests/test_metrics.py index b761ec1..c544cbf 100644 --- a/tests/test_metrics.py +++ b/tests/test_metrics.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: BSD-3-Clause import math +from typing import Any import polars as pl import pytest @@ -16,7 +17,7 @@ def frame() -> pl.DataFrame: return pl.DataFrame({"l": [1, 2, 3, None], "r": [1, 2, 5, 4]}) -def _apply(metric: MetricFn, frame: pl.DataFrame) -> float: +def _apply(metric: MetricFn, frame: pl.DataFrame) -> Any: return frame.select(metric(pl.col("l"), pl.col("r"))).item() From f66bfa05a759645285ab5010fb93cba4f5e84ca5 Mon Sep 17 00:00:00 2001 From: Moritz Potthoff Date: Fri, 10 Jul 2026 16:42:53 +0200 Subject: [PATCH 7/8] fix --- diffly/metrics.py | 10 ++++-- ...alse_sample_rows_False_sample_pk_False.txt | 12 +++---- ...False_sample_rows_True_sample_pk_False.txt | 12 +++---- ...True_sample_rows_False_sample_pk_False.txt | 12 +++---- ..._True_sample_rows_True_sample_pk_False.txt | 12 +++---- ...alse_sample_rows_False_sample_pk_False.txt | 4 +-- ..._False_sample_rows_True_sample_pk_True.txt | 34 +++++++++---------- ...True_sample_rows_False_sample_pk_False.txt | 4 +-- ...m_True_sample_rows_True_sample_pk_True.txt | 34 +++++++++---------- ...alse_sample_rows_False_sample_pk_False.txt | 12 +++---- ...False_sample_rows_True_sample_pk_False.txt | 12 +++---- ...True_sample_rows_False_sample_pk_False.txt | 12 +++---- ..._True_sample_rows_True_sample_pk_False.txt | 12 +++---- ...alse_sample_rows_False_sample_pk_False.txt | 4 +-- ..._False_sample_rows_True_sample_pk_True.txt | 34 +++++++++---------- ...True_sample_rows_False_sample_pk_False.txt | 4 +-- ...m_True_sample_rows_True_sample_pk_True.txt | 34 +++++++++---------- ...alse_sample_rows_False_sample_pk_False.txt | 12 +++---- ...False_sample_rows_True_sample_pk_False.txt | 12 +++---- ...True_sample_rows_False_sample_pk_False.txt | 12 +++---- ..._True_sample_rows_True_sample_pk_False.txt | 12 +++---- ...alse_sample_rows_False_sample_pk_False.txt | 4 +-- ..._False_sample_rows_True_sample_pk_True.txt | 34 +++++++++---------- ...True_sample_rows_False_sample_pk_False.txt | 4 +-- ...m_True_sample_rows_True_sample_pk_True.txt | 34 +++++++++---------- ...alse_sample_rows_False_sample_pk_False.txt | 12 +++---- ...False_sample_rows_True_sample_pk_False.txt | 12 +++---- ...True_sample_rows_False_sample_pk_False.txt | 12 +++---- ..._True_sample_rows_True_sample_pk_False.txt | 12 +++---- ...alse_sample_rows_False_sample_pk_False.txt | 4 +-- ..._False_sample_rows_True_sample_pk_True.txt | 34 +++++++++---------- ...True_sample_rows_False_sample_pk_False.txt | 4 +-- ...m_True_sample_rows_True_sample_pk_True.txt | 34 +++++++++---------- tests/test_metrics.py | 6 ++-- 34 files changed, 258 insertions(+), 254 deletions(-) diff --git a/diffly/metrics.py b/diffly/metrics.py index 32fbc4e..007f7cf 100644 --- a/diffly/metrics.py +++ b/diffly/metrics.py @@ -67,10 +67,12 @@ def mean_relative_deviation(left: pl.Expr, right: pl.Expr) -> pl.Expr: return ((right - left) / left).abs().mean() -def _percentage_string(fraction: pl.Expr, *, signed: bool = False) -> pl.Expr: +def _percentage_string( + fraction: pl.Expr, *, signed: bool = False, percent_sign: bool = True +) -> pl.Expr: """Format a fraction as a percentage string, optionally with an explicit sign.""" pct = (fraction * 100).round(2) - body = pl.format("{}%", pct) + body = pl.format("{}%", pct) if percent_sign else pl.format("{}", pct) if signed: return pl.when(pct >= 0).then(pl.format("+{}", body)).otherwise(body) return body @@ -106,7 +108,9 @@ def null_fraction_change(left: pl.Expr, right: pl.Expr) -> pl.Expr: return _render_change( left.is_null().mean(), right.is_null().mean(), - lambda value, signed: _percentage_string(value, signed=signed), + lambda value, signed: _percentage_string( + value, signed=signed, percent_sign=not signed + ), ) diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt index c95c2df..f3d3d5f 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt index c95c2df..f3d3d5f 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt index 516ebb7..2f849f9 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt index 516ebb7..2f849f9 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt index 5f90753..18568f4 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -24,13 +24,13 @@ ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ - │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ (-20.0) │ │ (1x) │ │ │ │ │ │ │ 40.0 -> 42.0 │ │ │ │ │ │ │ (1x) │ │ │ │ │ │ │ 20.0 -> 21.0 │ │ │ │ │ │ │ (1x) │ ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ - │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ (+40.0) │ │ "c" -> "x" (1x) │ │ │ │ │ │ │ "b" -> None (1x) │ └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt index 1958b0b..f2a498b 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -20,20 +20,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ - │ │ │ │ (-20.0%) │ │ e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ - │ │ │ │ │ │ e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ - │ │ │ │ │ │ e.g. 2) │ - ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ - │ │ │ │ (+40.0%) │ │ e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, │ - │ │ │ │ │ │ e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, │ - │ │ │ │ │ │ e.g. 2) │ - └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0) │ │ (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x, e.g. 2) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt index c311e21..06d07fe 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -12,13 +12,13 @@ ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ - │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ (-20.0) │ │ (1x) │ │ │ │ │ │ │ 40.0 -> 42.0 │ │ │ │ │ │ │ (1x) │ │ │ │ │ │ │ 20.0 -> 21.0 │ │ │ │ │ │ │ (1x) │ ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ - │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ (+40.0) │ │ "c" -> "x" (1x) │ │ │ │ │ │ │ "b" -> None (1x) │ └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt index c78adf7..01c654b 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -8,20 +8,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ - │ │ │ │ (-20.0%) │ │ e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ - │ │ │ │ │ │ e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ - │ │ │ │ │ │ e.g. 2) │ - ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ - │ │ │ │ (+40.0%) │ │ e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, │ - │ │ │ │ │ │ e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, │ - │ │ │ │ │ │ e.g. 2) │ - └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0) │ │ (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x, e.g. 2) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt index c95c2df..f3d3d5f 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt index c95c2df..f3d3d5f 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt index 516ebb7..2f849f9 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt index 516ebb7..2f849f9 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt index 5f90753..18568f4 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -24,13 +24,13 @@ ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ - │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ (-20.0) │ │ (1x) │ │ │ │ │ │ │ 40.0 -> 42.0 │ │ │ │ │ │ │ (1x) │ │ │ │ │ │ │ 20.0 -> 21.0 │ │ │ │ │ │ │ (1x) │ ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ - │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ (+40.0) │ │ "c" -> "x" (1x) │ │ │ │ │ │ │ "b" -> None (1x) │ └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt index 1958b0b..f2a498b 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -20,20 +20,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ - │ │ │ │ (-20.0%) │ │ e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ - │ │ │ │ │ │ e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ - │ │ │ │ │ │ e.g. 2) │ - ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ - │ │ │ │ (+40.0%) │ │ e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, │ - │ │ │ │ │ │ e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, │ - │ │ │ │ │ │ e.g. 2) │ - └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0) │ │ (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x, e.g. 2) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt index c311e21..06d07fe 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -12,13 +12,13 @@ ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ - │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ (-20.0) │ │ (1x) │ │ │ │ │ │ │ 40.0 -> 42.0 │ │ │ │ │ │ │ (1x) │ │ │ │ │ │ │ 20.0 -> 21.0 │ │ │ │ │ │ │ (1x) │ ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ - │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ (+40.0) │ │ "c" -> "x" (1x) │ │ │ │ │ │ │ "b" -> None (1x) │ └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt index c78adf7..01c654b 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -8,20 +8,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ - │ │ │ │ (-20.0%) │ │ e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ - │ │ │ │ │ │ e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ - │ │ │ │ │ │ e.g. 2) │ - ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ - │ │ │ │ (+40.0%) │ │ e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, │ - │ │ │ │ │ │ e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, │ - │ │ │ │ │ │ e.g. 2) │ - └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃ Null% ┃ str_len_delta ┃ Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0) │ │ (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x, e.g. 2) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt index bc15fb8..3a2a43b 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt index bc15fb8..3a2a43b 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt index a9f6c0c..1316f6b 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt index a9f6c0c..1316f6b 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt index d8c0d33..bdca125 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -24,13 +24,13 @@ ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ - │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ (-20.0) │ │ (1x) │ │ │ │ │ │ │ 40.0 -> 42.0 │ │ │ │ │ │ │ (1x) │ │ │ │ │ │ │ 20.0 -> 21.0 │ │ │ │ │ │ │ (1x) │ ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ - │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ (+40.0) │ │ "c" -> "x" (1x) │ │ │ │ │ │ │ "b" -> None (1x) │ └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt index f8593d7..cdd7114 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -20,20 +20,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ - │ │ │ │ (-20.0%) │ │ e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ - │ │ │ │ │ │ e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ - │ │ │ │ │ │ e.g. 2) │ - ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ - │ │ │ │ (+40.0%) │ │ e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, │ - │ │ │ │ │ │ e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, │ - │ │ │ │ │ │ e.g. 2) │ - └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0) │ │ (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x, e.g. 2) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt index d3279fe..370a2d3 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -12,13 +12,13 @@ ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ - │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ (-20.0) │ │ (1x) │ │ │ │ │ │ │ 40.0 -> 42.0 │ │ │ │ │ │ │ (1x) │ │ │ │ │ │ │ 20.0 -> 21.0 │ │ │ │ │ │ │ (1x) │ ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ - │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ (+40.0) │ │ "c" -> "x" (1x) │ │ │ │ │ │ │ "b" -> None (1x) │ └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt index d86fbdc..4a10c0c 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -8,20 +8,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ - │ │ │ │ (-20.0%) │ │ e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ - │ │ │ │ │ │ e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ - │ │ │ │ │ │ e.g. 2) │ - ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ - │ │ │ │ (+40.0%) │ │ e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, │ - │ │ │ │ │ │ e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, │ - │ │ │ │ │ │ e.g. 2) │ - └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0) │ │ (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x, e.g. 2) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt index bc15fb8..3a2a43b 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt index bc15fb8..3a2a43b 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt @@ -20,9 +20,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt index a9f6c0c..1316f6b 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt index a9f6c0c..1316f6b 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt @@ -8,9 +8,9 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0%) │ │ - │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0%) │ 0 │ - └────────┴────────────┴──────┴────────────────────────┴───────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% (-20.0) │ │ + │ status │ 40.00% │ │ 0.0% -> 40.0% (+40.0) │ 0 │ + └────────┴────────────┴──────┴───────────────────────┴───────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt index d8c0d33..bdca125 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt @@ -24,13 +24,13 @@ ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ - │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ (-20.0) │ │ (1x) │ │ │ │ │ │ │ 40.0 -> 42.0 │ │ │ │ │ │ │ (1x) │ │ │ │ │ │ │ 20.0 -> 21.0 │ │ │ │ │ │ │ (1x) │ ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ - │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ (+40.0) │ │ "c" -> "x" (1x) │ │ │ │ │ │ │ "b" -> None (1x) │ └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt index f8593d7..cdd7114 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt @@ -20,20 +20,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ - │ │ │ │ (-20.0%) │ │ e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ - │ │ │ │ │ │ e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ - │ │ │ │ │ │ e.g. 2) │ - ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ - │ │ │ │ (+40.0%) │ │ e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, │ - │ │ │ │ │ │ e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, │ - │ │ │ │ │ │ e.g. 2) │ - └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0) │ │ (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x, e.g. 2) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt index d3279fe..370a2d3 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt @@ -12,13 +12,13 @@ ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ - │ │ │ │ (-20.0%) │ │ (1x) │ + │ │ │ │ (-20.0) │ │ (1x) │ │ │ │ │ │ │ 40.0 -> 42.0 │ │ │ │ │ │ │ (1x) │ │ │ │ │ │ │ 20.0 -> 21.0 │ │ │ │ │ │ │ (1x) │ ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x) │ - │ │ │ │ (+40.0%) │ │ "c" -> "x" (1x) │ + │ │ │ │ (+40.0) │ │ "c" -> "x" (1x) │ │ │ │ │ │ │ "b" -> None (1x) │ └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt index d86fbdc..4a10c0c 100644 --- a/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt +++ b/tests/summary/fixtures/metrics_null_fraction/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt @@ -8,20 +8,20 @@ Columns ▔▔▔▔▔▔▔ - ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ - ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ - ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ - │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 (1x, │ - │ │ │ │ (-20.0%) │ │ e.g. 3) │ - │ │ │ │ │ │ 40.0 -> 42.0 (1x, │ - │ │ │ │ │ │ e.g. 4) │ - │ │ │ │ │ │ 20.0 -> 21.0 (1x, │ - │ │ │ │ │ │ e.g. 2) │ - ├────────┼────────────┼──────┼──────────────────┼───────────────┼───────────────────┤ - │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ - │ │ │ │ (+40.0%) │ │ e.g. 4) │ - │ │ │ │ │ │ "c" -> "x" (1x, │ - │ │ │ │ │ │ e.g. 3) │ - │ │ │ │ │ │ "b" -> None (1x, │ - │ │ │ │ │ │ e.g. 2) │ - └────────┴────────────┴──────┴──────────────────┴───────────────┴───────────────────┘ + ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓ + ┃ Column ┃ Match Rate ┃ Mean ┃  Null% ┃ str_len_delta ┃  Top Changes ┃ + ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩ + │ price  │ 40.00% │ 0.75 │ 20.0% -> 0.0% │ │ None -> 30.0 │ + │ │ │ │ (-20.0) │ │ (1x, e.g. 3) │ + │ │ │ │ │ │ 40.0 -> 42.0 │ + │ │ │ │ │ │ (1x, e.g. 4) │ + │ │ │ │ │ │ 20.0 -> 21.0 │ + │ │ │ │ │ │ (1x, e.g. 2) │ + ├────────┼────────────┼──────┼───────────────────┼───────────────┼──────────────────┤ + │ status │ 40.00% │ │ 0.0% -> 40.0% │ 0 │ "d" -> None (1x, │ + │ │ │ │ (+40.0) │ │ e.g. 4) │ + │ │ │ │ │ │ "c" -> "x" (1x, │ + │ │ │ │ │ │ e.g. 3) │ + │ │ │ │ │ │ "b" -> None (1x, │ + │ │ │ │ │ │ e.g. 2) │ + └────────┴────────────┴──────┴───────────────────┴───────────────┴──────────────────┘ diff --git a/tests/test_metrics.py b/tests/test_metrics.py index c544cbf..2bd3a14 100644 --- a/tests/test_metrics.py +++ b/tests/test_metrics.py @@ -68,19 +68,19 @@ def test_mean_relative_deviation_div_by_zero() -> None: def test_null_fraction_change() -> None: # left nulls: 1/4 = 25%; right nulls: 3/4 = 75%; delta = +50% frame = pl.DataFrame({"l": [1, None, 3, 4], "r": [None, None, 3, None]}) - assert _apply(metrics.null_fraction_change, frame) == "25.0% -> 75.0% (+50.0%)" + assert _apply(metrics.null_fraction_change, frame) == "25.0% -> 75.0% (+50.0)" def test_null_fraction_change_negative_delta() -> None: # left nulls: 1/2 = 50%; right nulls: 0%; delta = -50% frame = pl.DataFrame({"l": [1, None], "r": [1, 2]}) - assert _apply(metrics.null_fraction_change, frame) == "50.0% -> 0.0% (-50.0%)" + assert _apply(metrics.null_fraction_change, frame) == "50.0% -> 0.0% (-50.0)" def test_null_fraction_change_non_numeric() -> None: # Applies to any column type; here strings. left nulls: 0%; right nulls: 50% frame = pl.DataFrame({"l": ["a", "b"], "r": ["a", None]}) - assert _apply(metrics.null_fraction_change, frame) == "0.0% -> 50.0% (+50.0%)" + assert _apply(metrics.null_fraction_change, frame) == "0.0% -> 50.0% (+50.0)" def test_quantile(frame: pl.DataFrame) -> None: From db3b168bb5f75e418390ac295e231cb2dcc377f7 Mon Sep 17 00:00:00 2001 From: Moritz Potthoff <160181542+MoritzPotthoffQC@users.noreply.github.com> Date: Fri, 10 Jul 2026 17:15:05 +0200 Subject: [PATCH 8/8] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- diffly/comparison.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/diffly/comparison.py b/diffly/comparison.py index e0396c6..6976b9c 100644 --- a/diffly/comparison.py +++ b/diffly/comparison.py @@ -959,8 +959,9 @@ def summary( one in a :class:`~diffly.metrics.Metric` with a column selector to target other column types (e.g. ``Metric(fn, selector=cs.all())``). See :doc:`/api/metrics` for the full list of presets and the - are computed; presets are not applied automatically. Prefer short labels - — the summary has a fixed width and many or long labels degrade rendering. + :data:`~diffly.metrics.MetricFn` type. When ``None`` (default), no metrics + are computed; presets are not applied automatically. Prefer short labels — + the summary has a fixed width and many or long labels degrade rendering. Returns: A summary which can be printed or written to a file.