Skip to content

feat: Add per-column metrics to summary#34

Merged
EgeKaraismailogluQC merged 26 commits into
mainfrom
numerics
May 22, 2026
Merged

feat: Add per-column metrics to summary#34
EgeKaraismailogluQC merged 26 commits into
mainfrom
numerics

Conversation

@EgeKaraismailogluQC
Copy link
Copy Markdown
Collaborator

@EgeKaraismailogluQC EgeKaraismailogluQC commented Apr 30, 2026

Motivation

Closes #15. Users comparing data frames with numerical columns have asked for aggregate statistics (mean, quantiles, deviations) alongside the existing "Match Rate" and "Top Changes" per column. Until now the summary only showed where columns differ; this adds by how much.

The feature is optional: passing no metrics argument preserves today's output.

Changes

  • New diffly.metrics module: preset callables mean, median, min, max, std, mean_absolute_deviation, mean_relative_deviation, and a quantile(q) factory. Each computes an aggregation over left, right across all joined rows.
  • New metrics argument on summary(): accepts Mapping[str, Callable[[pl.Expr, pl.Expr], pl.Expr]]. Dict keys become column headers; values can be presets, quantile(q), or user lambdas.
  • Forwarded through assert_frame_equal, assert_collection_equal, and exposed in the CLI via repeatable --metric <preset-name>.
  • Rendering: new metric columns appear between "Match Rate" and "Top Changes". Headers are shown only when metrics are present (preserving existing look otherwise). Float values use .4g formatting. Non-numerical columns get blank cells.
  • Internals: column applicability is driven by a Polars selector per metric.
  • Docs: new section in the Summary guide, API reference listing for diffly.metrics, and a Key Features bullet on the landing page.

Example

Specifying metrics:

from diffly import compare_frames, metrics

comp = compare_frames(left, right, primary_key="id")
print(
    comp.summary(
        top_k_column_changes=3,
        metrics={
            "mean": metrics.mean,
            "max": metrics.max,
        },
    )
)

Output (Columns section):

 Columns
 ▔▔▔▔▔▔▔
   ┏━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━┳━━━━━┳━━━━━━━━━━━━━━━━━━━┓
   ┃ Column ┃ Match Rate ┃ mean ┃ max ┃       Top Changes ┃
   ┡━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━╇━━━━━╇━━━━━━━━━━━━━━━━━━━┩
   │ price  │     60.00% │  0.6 │   2 │ 40.0 -> 42.0 (1x) │
   │        │            │      │     │ 20.0 -> 21.0 (1x) │
   ├────────┼────────────┼──────┼─────┼───────────────────┤
   │ qty    │     80.00% │  0.2 │   1 │       4 -> 5 (1x) │
   ├────────┼────────────┼──────┼─────┼───────────────────┤
   │ status │     80.00% │      │     │   "c" -> "x" (1x) │
   └────────┴────────────┴──────┴─────┴───────────────────┘

Custom metrics are equally easy:

metrics={"max_abs": lambda left, right: (right - left).abs().max()}

@github-actions github-actions Bot added the enhancement New feature or request label Apr 30, 2026
@EgeKaraismailogluQC EgeKaraismailogluQC marked this pull request as ready for review April 30, 2026 16:01
Copilot AI review requested due to automatic review settings April 30, 2026 16:01
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 30, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (ef4c5e9) to head (a8051a8).

Additional details and impacted files
@@            Coverage Diff            @@
##              main       #34   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           10        11    +1     
  Lines          930      1014   +84     
=========================================
+ Hits           930      1014   +84     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds optional per-column numeric aggregation metrics to DataFrameComparison.summary() output (and JSON), with presets exposed via a new diffly.metrics module and a repeatable CLI flag. This addresses requests for “how much” numeric columns differ, not just “where”.

Changes:

  • Introduce diffly.metrics with preset metric callables and a quantile(q) factory.
  • Thread a new optional metrics mapping through summary(), testing helpers, and the CLI (--metric).
  • Add unit + golden/fixture tests and update docs to describe/auto-document metrics.

Reviewed changes

Copilot reviewed 142 out of 142 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
tests/test_metrics.py New unit tests validating metric preset computations (mean/std/quantile/etc.).
tests/summary/test_summary.py Extends summary JSON-shape assertions to include per-column metrics and adds a metrics-enabled scenario.
tests/summary/fixtures/metrics_presets_many/test_metrics_presets_many.py Fixture generator for many preset metrics in summary output.
tests/summary/fixtures/metrics_presets_many/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt Updated golden output for “many presets” rendering (pretty ANSI).
tests/summary/fixtures/metrics_presets_many/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for “many presets” rendering (pretty ANSI).
tests/summary/fixtures/metrics_presets_many/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt Updated golden output for “many presets” rendering (pretty ANSI).
tests/summary/fixtures/metrics_presets_many/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for “many presets” rendering (pretty ANSI).
tests/summary/fixtures/metrics_presets_many/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt Updated golden output for “many presets” rendering (plain).
tests/summary/fixtures/metrics_presets_many/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for “many presets” rendering (plain).
tests/summary/fixtures/metrics_presets_many/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for “many presets” rendering (plain).
tests/summary/fixtures/metrics_presets_many/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt Updated golden output for “many presets” rendering (plain).
tests/summary/fixtures/metrics_presets_many/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for “many presets” rendering (plain).
tests/summary/fixtures/metrics_presets_many/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt Updated golden output for “many presets” rendering (plain).
tests/summary/fixtures/metrics_presets_many/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for “many presets” rendering (plain).
tests/summary/fixtures/metrics_presets_many/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt Updated golden output for “many presets” rendering when perfect matches hidden (plain).
tests/summary/fixtures/metrics_presets_many/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for “many presets” rendering when perfect matches hidden (plain).
tests/summary/fixtures/metrics_presets_many/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for “many presets” rendering when perfect matches hidden (plain).
tests/summary/fixtures/metrics_presets_many/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt Updated golden output for “many presets” rendering (plain, no top changes).
tests/summary/fixtures/metrics_presets_many/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for “many presets” rendering (plain, no top changes).
tests/summary/fixtures/metrics_presets_many/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt Updated golden output for “many presets” rendering (plain, full header).
tests/summary/fixtures/metrics_presets_many/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for “many presets” rendering (plain, full header).
tests/summary/fixtures/metrics_presets_few/test_metrics_presets_few.py Fixture generator for a smaller set of preset metrics.
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt Updated golden output for “few presets” rendering (pretty ANSI).
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering (pretty ANSI).
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt Updated golden output for “few presets” rendering (pretty ANSI, full header).
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering (pretty ANSI, full header).
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt Updated golden output for “few presets” rendering without Top Changes (pretty ANSI).
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering without Top Changes (pretty ANSI).
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt Updated golden output for “few presets” rendering without Top Changes (pretty ANSI, full header).
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering without Top Changes (pretty ANSI, full header).
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt Updated golden output for “few presets” rendering w/ imperfect-only columns (pretty ANSI).
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering w/ imperfect-only columns (pretty ANSI).
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering w/ imperfect-only columns (pretty ANSI, full header).
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt Updated golden output for “few presets” rendering w/ imperfect-only columns (pretty ANSI, no top changes).
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering w/ imperfect-only columns (pretty ANSI, no top changes).
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt Updated golden output for “few presets” rendering w/ imperfect-only columns (pretty ANSI, full header, no top changes).
tests/summary/fixtures/metrics_presets_few/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering w/ imperfect-only columns (pretty ANSI, full header, no top changes).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt Updated golden output for “few presets” rendering (plain).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering (plain).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt Updated golden output for “few presets” rendering (plain, full header).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering (plain, full header).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt Updated golden output for “few presets” rendering without Top Changes (plain).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering without Top Changes (plain).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt Updated golden output for “few presets” rendering without Top Changes (plain, full header).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering without Top Changes (plain, full header).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt Updated golden output for “few presets” rendering w/ imperfect-only columns (plain).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering w/ imperfect-only columns (plain).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt Updated golden output for “few presets” rendering w/ imperfect-only columns (plain, full header).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering w/ imperfect-only columns (plain, full header).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt Updated golden output for “few presets” rendering w/ imperfect-only columns and no top changes (plain).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering w/ imperfect-only columns and no top changes (plain).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt Updated golden output for “few presets” rendering w/ imperfect-only columns and no top changes (plain, full header).
tests/summary/fixtures/metrics_presets_few/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for “few presets” rendering w/ imperfect-only columns and no top changes (plain, full header).
tests/summary/fixtures/metrics_long_labels/test_metrics_long_labels.py Fixture generator to stress-test rendering with long metric labels.
tests/summary/fixtures/metrics_long_labels/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt Updated golden output for long-label metrics rendering (plain).
tests/summary/fixtures/metrics_long_labels/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for long-label metrics rendering (plain).
tests/summary/fixtures/metrics_long_labels/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt Updated golden output for long-label metrics rendering (plain, full header).
tests/summary/fixtures/metrics_long_labels/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for long-label metrics rendering (plain, full header).
tests/summary/fixtures/metrics_long_labels/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt Updated golden output for long-label metrics rendering w/ imperfect-only columns (plain).
tests/summary/fixtures/metrics_long_labels/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for long-label metrics rendering w/ imperfect-only columns (plain).
tests/summary/fixtures/metrics_long_labels/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt Updated golden output for long-label metrics rendering w/ imperfect-only columns (plain, full header).
tests/summary/fixtures/metrics_long_labels/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for long-label metrics rendering w/ imperfect-only columns (plain, full header).
tests/summary/fixtures/metrics_custom/test_metrics_custom.py Fixture generator demonstrating a quantile metric + a user lambda metric.
tests/summary/fixtures/metrics_custom/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt Updated golden output for custom metrics rendering (pretty ANSI).
tests/summary/fixtures/metrics_custom/gen/pretty_True_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for custom metrics rendering (pretty ANSI).
tests/summary/fixtures/metrics_custom/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt Updated golden output for custom metrics rendering without Top Changes (pretty ANSI).
tests/summary/fixtures/metrics_custom/gen/pretty_True_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for custom metrics rendering without Top Changes (pretty ANSI).
tests/summary/fixtures/metrics_custom/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt Updated golden output for custom metrics rendering without Top Changes (pretty ANSI, full header).
tests/summary/fixtures/metrics_custom/gen/pretty_True_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for custom metrics rendering without Top Changes (pretty ANSI, full header).
tests/summary/fixtures/metrics_custom/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt Updated golden output for custom metrics rendering w/ imperfect-only columns (pretty ANSI).
tests/summary/fixtures/metrics_custom/gen/pretty_True_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for custom metrics rendering w/ imperfect-only columns (pretty ANSI).
tests/summary/fixtures/metrics_custom/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt Updated golden output for custom metrics rendering w/ imperfect-only columns and no Top Changes (pretty ANSI).
tests/summary/fixtures/metrics_custom/gen/pretty_True_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for custom metrics rendering w/ imperfect-only columns and no Top Changes (pretty ANSI).
tests/summary/fixtures/metrics_custom/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt Updated golden output for custom metrics rendering w/ imperfect-only columns and no Top Changes (pretty ANSI, full header).
tests/summary/fixtures/metrics_custom/gen/pretty_True_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for custom metrics rendering w/ imperfect-only columns and no Top Changes (pretty ANSI, full header).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_True_sample_pk_True.txt Updated golden output for custom metrics rendering (plain).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_True_top_True_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for custom metrics rendering (plain).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_True_sample_pk_True.txt Updated golden output for custom metrics rendering (plain, full header).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_True_top_True_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for custom metrics rendering (plain, full header).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_True_sample_pk_False.txt Updated golden output for custom metrics rendering without Top Changes (plain).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_True_top_False_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for custom metrics rendering without Top Changes (plain).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_True_sample_pk_False.txt Updated golden output for custom metrics rendering without Top Changes (plain, full header).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_True_top_False_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for custom metrics rendering without Top Changes (plain, full header).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_True_sample_pk_True.txt Updated golden output for custom metrics rendering w/ imperfect-only columns (plain).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_False_top_True_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for custom metrics rendering w/ imperfect-only columns (plain).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_True_sample_pk_True.txt Updated golden output for custom metrics rendering w/ imperfect-only columns (plain, full header).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_False_top_True_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for custom metrics rendering w/ imperfect-only columns (plain, full header).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_True_sample_pk_False.txt Updated golden output for custom metrics rendering w/ imperfect-only columns and no Top Changes (plain).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_False_top_False_slim_True_sample_rows_False_sample_pk_False.txt Updated golden output for custom metrics rendering w/ imperfect-only columns and no Top Changes (plain).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_True_sample_pk_False.txt Updated golden output for custom metrics rendering w/ imperfect-only columns and no Top Changes (plain, full header).
tests/summary/fixtures/metrics_custom/gen/pretty_False_perfect_False_top_False_slim_False_sample_rows_False_sample_pk_False.txt Updated golden output for custom metrics rendering w/ imperfect-only columns and no Top Changes (plain, full header).
docs/index.md Adds a “Per-column metrics” bullet to the landing page feature list.
docs/api/summary.rst Documents the metrics API and auto-documents diffly.metrics presets/factory.
diffly/testing.py Adds metrics passthrough to assert_frame_equal / assert_collection_equal and documents it.
diffly/metrics.py New metrics module: metric type alias, presets, and quantile() factory.
diffly/comparison.py Adds metrics parameter to DataFrameComparison.summary() and passes it into Summary.
diffly/cli.py Adds repeatable --metric option and wires presets into summary rendering.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread diffly/cli.py Outdated
Comment thread diffly/metrics.py Outdated
Comment thread diffly/comparison.py Outdated
@EED85
Copy link
Copy Markdown

Hi EgeKaraismailogluQC ,

looks very nice, I'd like to try it out!
As there is no developement section in the readme:

uv pip install -e . in an `uv environment should do the trick?

Eric

@EgeKaraismailogluQC
Copy link
Copy Markdown
Collaborator Author

Hi Eric Brahmann (@EED85)! You can find the development guide here.

Comment thread diffly/cli.py
Comment thread diffly/summary.py Outdated
Comment thread diffly/summary.py Outdated
Comment thread diffly/summary.py
Comment thread diffly/summary.py Outdated
Comment thread docs/api/summary.rst Outdated
Comment thread docs/guides/features/summary.ipynb
Comment thread tests/summary/test_summary.py Outdated
Comment thread tests/summary/test_summary.py Outdated
Comment thread diffly/metrics.py Outdated
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR, this will be useful :)

Comment thread diffly/metrics.py Outdated
Comment thread diffly/metrics.py Outdated
Comment thread diffly/metrics.py Outdated
Comment thread diffly/comparison.py
Comment thread diffly/summary.py
Comment thread diffly/summary.py Outdated
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just one more open thread from my end, otherwise good to go, thank you! :)

@EgeKaraismailogluQC EgeKaraismailogluQC self-assigned this May 21, 2026
@EgeKaraismailogluQC EgeKaraismailogluQC merged commit 11dbd13 into main May 22, 2026
18 checks passed
@EgeKaraismailogluQC EgeKaraismailogluQC deleted the numerics branch May 22, 2026 13:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature Request: Can you add a comparison mode for numerical data?

5 participants