MCPcopy Create free account
hub / github.com/Desbordante/desbordante-core

github.com/Desbordante/desbordante-core @v2.4.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.4.1 ↗ · + Follow
4,579 symbols 10,848 edges 905 files 270 documented · 6% updated 11d agov2.4.1 · 2025-10-26★ 49035 open issues

Browse by type

Functions 3,851 Types & classes 727 Endpoints 1
What it actually does AI analysis from the code graph — generated when you open this
loading…
README


Desbordante: high-performance data profiler

What is it?

Desbordante is a high-performance data profiler oriented towards exploratory data analysis

Try the web version at https://desbordante.unidata-platform.ru/

Table of Contents

Main Features

Desbordante is a high-performance data profiler that is capable of discovering and validating many different patterns in data using various algorithms.

The Discovery task is designed to identify all instances of a specified pattern type of a given dataset.

The Validation task is different: it is designed to check whether a specified pattern instance is present in a given dataset. This task not only returns True or False, but it also explains why the instance does not hold (e.g. it can list table rows with conflicting values).

For some patterns Desbordante supports a dynamic task variant. The distinguishing feature of dynamic algorithms compared to classic (static) algorithms is that after a result is obtained, the table can be changed and a dynamic algorithm will update the result based just on those changes instead of processing the whole table again. As a result, they can be up to several orders of magnitude faster than classic (static) ones in some situations.

The currently supported data patterns are: * Exact functional dependencies (discovery and validation) * Approximate functional dependencies, with - $g_1$ metric — classic AFDs (discovery and validation) - $\mu+$ metric (discovery) - $\tau$ metric (discovery) - $pdep$ metric (discovery) - $\rho$ metric (discovery) * Probabilistic functional dependencies, with PerTuple and PerValue metrics (discovery and validation) * Classic soft functional dependencies (with correlations), with $\rho$ metric (discovery and validation) * Dynamic validation of exact and approximate ($g_1$) functional dependencies * Numerical dependencies (validation) * Graph functional dependencies (discovery and validation) * Conditional functional dependencies (discovery and validation) * Inclusion dependencies - Exact inclusion dependencies (discovery and validation) - Approximate inclusion dependencies, with $g^{'}_{3}$ metric (discovery and validation) * Order dependencies: - set-based axiomatization (discovery) - list-based axiomatization (discovery) * Metric functional dependencies (validation) * Fuzzy algebraic constraints (discovery) * Differential Dependencies (discovery and validation) * Unique column combinations: - Exact unique column combination (discovery and validation) - Approximate unique column combination, with $g_1$ metric (discovery and validation) * Association rules (discovery) * Numerical association rules (discovery) * Matching dependencies (discovery and validation) * Denial constraints - Exact denial constraints (discovery and validation) - Approximate denial constraints, with $g_1$ metric (discovery)

This package uses the library of the Desbordante platform, which is written in C++. This means that depending on the algorithm and dataset, the runtimes may be cut by 2-10 times compared to the alternatives.

Usage examples

Desbordante features can be accessed from within Python programs by employing the Desbordante Python library. The library is implemented in the form of Python bindings to the interface of the Desbordante C++ core library, using pybind11. Apart from discovery and validation of patterns, this interface is capable of providing valuable additional information which can, for example, describe why a given pattern does not hold.

We want to demonstrate the power of Desbordante through examples where some patterns are extracted from tabular data, providing non-trivial insights. The patterns are quite complex and require detailed explanations, as well as a significant amount of code. This takes up quite a bit of space. Therefore, we do not include the actual code here; instead, we provide a clear (albeit simplified) definition and a link to a Colab notebook with interactive examples. The examples themselves are very detailed and allow users to understand the pattern and how to extract it using Desbordante.

1) Differential Dependencies (DD). DD is a statement of the form X -> Y, where X and Y are sets of attributes. It indicates that for any two rows, $t$ and $s$, if the attributes in $X$ are similar, then the attributes in $Y$ will also be similar. The similarity for each attribute is defined as: $diff(t[X_i], s[X_i]) \in [val_1, val_2]$, where $t[X_i]$ is the value of attribute $X_i$ in row $t$, $val$ is a constant, and $diff$ is a function that typically calculates the difference, often through simple subtraction. A live Python example that provides insight into the definition and demonstrates how to use this pattern in Desbordante is available here. 2) Numeric Association Rules (NAR). NAR is a statement of the form X -> Y, where X and Y are conditions, specified on disjoint sets of attributes. Each condition takes a form of $A_1 \wedge A_2 \wedge \ldots \wedge A_n$, where $A_i$ is either $Attribute_i \in$ $[constant_{i}^{1}; constant_{i}^{2}]$ or $Attribute_i$ = $constant_i^3$. Furthermore, the statement includes the support (sup) and confidence (conf) values, which lie in $[0; 1]$. The rule can be interpreted as follows: 1) the supp share of rows in the dataset satisfies both the X and Y conditions, and 2) the conf share of rows that satisfy the X also satisfies Y. A live Python example that provides insight into the definition and demonstrates how to use this pattern in Desbordante is available here. 3) Matching Dependencies (MD). MD is a statement of the form X -> Y, where X and Y are sets of so-called column matches. Each column match includes: 1) a metric (e.g., Levenshtein distance, Jaccard similarity, etc.), 2) a left column, and 3) a right column. Note that this pattern may involve two tables in its column matches. Finally, each match has its own threshold, which is applied to the corresponding metric and lies in the $[0; 1]$ range. The dependency can be interpreted as follows: any two records that satisfy X will also satisfy Y. A live Python example that provides insight into the definition and demonstrates how to use this pattern in Desbordante is available here. 4) Denial Constraints (DC). A denial constraint is a statement that says: "For all pairs of rows in a table, it should never happen that some condition is true". Formally, DC $\varphi$ is a conjunction of predicates of the following form: $\forall s,t \in R, s \neq t: \textlnot (p_1 \wedge \ldots \wedge p_m)$. Each $p_k$ has the form $column_i$ $op$ $column_j$, where $op \in {>, <, \leq, \geq, =, \neq}$. A live Python example that provides insight into the definition and demonstrates how to use this pattern in Desbordante is available here

Desbordante offers examples for each supported pattern, sometimes several if the pattern is complex or needs to highlight its unique characteristics compared to others in the same family. We have mentioned only a small portion here, which is available in Colab. The rest can be found in our example folder.

Finally, Desbordante allows end users to solve various data quality problems by constructing ad-hoc Python programs, incorporating different Python libraries, and utilizing the search and validation of various patterns. To demonstrate the power of this approach, we have implemented several demo scenarios:

1) Typo detection 2) Data deduplication 3) Anomaly detection

There is also an interactive demo for all of them, and all of these python scripts are here. The ideas behind them are briefly discussed in this preprint (Section 3).

I still don't understand how to use Desbordante and patterns :(

No worries! Desbordante offers a novel type of data profiling, which may require that you first familiarize yourself with its concepts and usage. The most challenging part of Desbordante are the primitives: their definitions and applications in practice. To help you get started, here’s a step-by-step guide:

1) First of all, explore the guides on our website. Since our team currently does not include technical writers, it's possible that some guides may be missing. 2) To compensate for the lack of guides, we provide several examples for each supported pattern. These examples illustrate both the pattern itself and how to use it in Python. You can check them out here. 3) Each of our patterns was introduced in a research paper. These papers typically provide a formal definition of the pattern, examples of use, and its application scope. We recommend at least skimming through them. Don't be discouraged by the complexity of the papers! To effectively use the patterns, you only need to read the more accessible parts, such as t

Core symbols most depended-on inside this repo

Shape

Method 3,193
Class 710
Function 658
Enum 17
Route 1

Languages

C++95%
Python5%

Modules by API surface

src/core/model/types/bitset.h127 symbols
src/core/algorithms/statistics/data_stats.cpp67 symbols
src/core/algorithms/md/hymd/lattice/md_lattice.cpp50 symbols
src/python_bindings/test_pybind_data_stats.py43 symbols
src/core/algorithms/md/hymd/validator.cpp42 symbols
src/core/algorithms/md/hymd/record_pair_inferrer.cpp41 symbols
src/core/model/table/vertical_map.cpp39 symbols
src/core/algorithms/gfd/gfd_validator/egfd_validator.cpp38 symbols
src/core/algorithms/gfd/gfd_miner/gfd_miner.cpp34 symbols
src/core/algorithms/dd/split/split.cpp33 symbols
src/core/algorithms/od/fastod/model/attribute_set.h31 symbols
src/core/model/types/numeric_type.h28 symbols

For agents

$ claude mcp add desbordante-core \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page