<p>
<img src="https://github.com/Mstrutov/Desbordante/assets/88928096/d687809b-5a3b-420e-a192-a1a2b6697b2a"/>
</p>
---
# 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](#main-features)
- [Usage Examples](#usage-examples)
- [I still don't understand how to use Desbordante and patterns :(](#i-still-dont-understand-how-to-use-Desbordante-and-patterns-)
- [Installation](#installation)
- [Installation from sources](#installation-from-sources)
- [Troubleshooting](#troubleshooting)
- [Cite](#cite)
- [Contacts and Q&A](#contacts-and-qa)
# Main Features
[**Desbordante**](https://github.com/Desbordante/desbordante-core) 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 distiguishing 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 corellations), with $\rho$ metric (discovery and validation)
* Dynamic validation of exact and approximate ($g_1$) functional dependencies
* Numerical dependencies (validation)
* Graph functional dependencies (validation)
* Conditional functional dependencies (discovery)
* 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)
* 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)
* 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
1) Discover all exact functional dependencies in a table stored in a comma-separated file with a header row. In this example the default FD discovery algorithm (HyFD) is used.
```python
import desbordante
TABLE = 'examples/datasets/university_fd.csv'
algo = desbordante.fd.algorithms.Default()
algo.load_data(table=(TABLE, ',', True))
algo.execute()
result = algo.get_fds()
print('FDs:')
for fd in result:
print(fd)
```
```text
FDs:
[Course Classroom] -> Professor
[Classroom Semester] -> Professor
[Classroom Semester] -> Course
[Professor] -> Course
[Professor Semester] -> Classroom
[Course Semester] -> Classroom
[Course Semester] -> Professor
```
2) Discover all approximate functional dependencies with error less than or equal to 0.1 in a table represented by a
.csv file that uses a comma as the separator and has a header row. In this example the AFD discovery algorithm Pyro
is used.
```python
import desbordante
TABLE = 'examples/datasets/inventory_afd.csv'
ERROR = 0.1
algo = desbordante.afd.algorithms.Default()
algo.load_data(table=(TABLE, ',', True))
algo.execute(error=ERROR)
result = algo.get_fds()
print('AFDs:')
for fd in result:
print(fd)
```
```text
AFDs:
[Id] -> Price
[Id] -> ProductName
[ProductName] -> Price
```
3) Check whether metric functional dependency “Title -> Duration” with radius 5 (using the Euclidean metric) holds in a
table represented by a .csv file that uses a comma as the separator and has a header row. In this example the default
MFD validation algorithm (BRUTE) is used.
```python
import desbordante
TABLE = 'examples/datasets/theatres_mfd.csv'
METRIC = 'euclidean'
LHS_INDICES = [0]
RHS_INDICES = [2]
PARAMETER = 5
algo = desbordante.mfd_verification.algorithms.Default()
algo.load_data(table=(TABLE, ',', True))
algo.execute(lhs_indices=LHS_INDICES, metric=METRIC,
parameter=PARAMETER, rhs_indices=RHS_INDICES)
if algo.mfd_holds():
print('MFD holds')
else:
print('MFD does not hold')
```
```text
MFD holds
```
4) Discover approximate functional dependencies with various error thresholds. Here, we are using a pandas DataFrame to load data from a CSV file.
```python-repl
>>> import desbordante
>>> import pandas as pd
>>> pyro = desbordante.afd.algorithms.Pyro() # same as desbordante.afd.algorithms.Default()
>>> df = pd.read_csv('examples/datasets/iris.csv', sep=',', header=None)
>>> pyro.load_data(table=df)
>>> pyro.execute(error=0.0)
>>> print(f'[{", ".join(map(str, pyro.get_fds()))}]')
[[0 1 2] -> 4, [0 2 3] -> 4, [0 1 3] -> 4, [1 2 3] -> 4]
>>> pyro.execute(error=0.1)
>>> print(f'[{", ".join(map(str, pyro.get_fds()))}]')
[[2] -> 0, [2] -> 3, [2] -> 1, [0] -> 2, [3] -> 0, [0] -> 3, [0] -> 1, [1] -> 3, [1] -> 0, [3] -> 2, [3] -> 1, [1] -> 2, [2] -> 4, [3] -> 4, [0] -> 4, [1] -> 4]
>>> pyro.execute(error=0.2)
>>> print(f'[{", ".join(map(str, pyro.get_fds()))}]')
[[2] -> 0, [0] -> 2, [3] -> 2, [1] -> 2, [2] -> 4, [3] -> 4, [0] -> 4, [1] -> 4, [3] -> 0, [1] -> 0, [2] -> 3, [2] -> 1, [0] -> 3, [0] -> 1, [1] -> 3, [3] -> 1]
>>> pyro.execute(error=0.3)
>>> print(f'[{", ".join(map(str, pyro.get_fds()))}]')
[[2] -> 1, [0] -> 2, [2] -> 0, [2] -> 3, [0] -> 1, [3] -> 2, [3] -> 1, [1] -> 2, [3] -> 0, [0] -> 3, [4] -> 1, [1] -> 0, [1] -> 3, [4] -> 2, [4] -> 3, [2] -> 4, [3] -> 4, [0] -> 4, [1] -> 4]
```
More examples can be found in the [Desbordante repository](https://github.com/Desbordante/desbordante-core/tree/main/examples) on GitHub.
## 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](https://desbordante.unidata-platform.ru/papers). 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](https://github.com/Desbordante/desbordante-core/tree/main/examples).
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 the introduction and the example sections.
4) Finally, do not hesitate to ask questions in the mailing list (link below) or create an issue.
### Papers about patterns
Here is a list of papers about patterns, organized in the recommended reading order in each item:
* Exact functional dependencies
- [Thorsten Papenbrock et al. 2015. Functional dependency discovery: an experimental evaluation of seven algorithms. Proc. VLDB Endow. 8, 10 (June 2015), 1082–1093.](http://www.vldb.org/pvldb/vol8/p1082-papenbrock.pdf)
- [Thorsten Papenbrock and Felix Naumann. 2016. A Hybrid Approach to Functional Dependency Discovery. In Proceedings of the 2016 International Conference on Management of Data (SIGMOD '16). Association for Computing Machinery, New York, NY, USA, 821–833.](https://hpi.de/fileadmin/user_upload/fachgebiete/naumann/publications/PDFs/2016_papenbrock_a.pdf)
* Approximate functional dependencies ($g_{1}, \mu+, \tau, pdep, \rho$ metrics)
- [Marcel Parciak et al. 2024. Measuring Approximate Functional Dependencies: A Comparative Study. In Proceedings 2024 IEEE 40th International Conference on Data Engineering (ICDE), Utrecht, Netherlands, 2024, pp. 3505-3518](https://arxiv.org/abs/2312.06296)
- [Sebastian Kruse and Felix Naumann. 2018. Efficient discovery of approximate dependencies. Proc. VLDB Endow. 11, 7 (March 2018), 759–772.](https://www.vldb.org/pvldb/vol11/p759-kruse.pdf)
- [Yka Huhtala et al. 1999. TANE: An Efficient Algorithm for Discovering Functional and Approximate Dependencies. Comput. J. 42(2): 100-111](https://dm-gatech.github.io/CS8803-Fall2018-DML-Papers/tane.pdf)
* Probabilistic functional dependencies ($PerTuple$ and $PerValue$ metrics)
- [Daisy Zhe Wang et al. Functional Dependency Generation and Applications in Pay-As-You-Go Data Integration Systems. WebDB 2009](http://webdb09.cse.buffalo.edu/papers/Paper18/webdb09.pdf)
- [Daisy Zhe Wang et al. Discovering Functional Dependencies in Pay-As-You-Go Data Integration Systems. Tech Rep. UCB/EECS-2009-119.](https://www2.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS-2009-119.pdf)
* Classic soft functional dependencies ($\rho$ metric)
- [Ihab F. Ilyas et al. 2004. CORDS: automatic discovery of correlations and soft functional dependencies. In Proceedings of the 2004 ACM SIGMOD international conference on Management of data (SIGMOD '04). Association for Computing Machinery, New York, NY, USA, 647–658. ](https://cs.uwaterloo.ca/~ilyas/papers/cords.pdf)
* Numerical Dependencies
- [Paolo Ciaccia et al. 2013. Efficient derivation of numerical dependencies. Information Systems, Volume 38, Issue 3. Pages 410-429.](https://www.sciencedirect.com/science/article/abs/pii/S0306437912001044)
* Graph functional dependencies
- [Wenfei Fan, Yinghui Wu, and Jingbo Xu. 2016. Functional Dependencies for Graphs. In Proceedings of the 2016 International Conference on Management of Data (SIGMOD '16). Association for Computing Machinery, New York, NY, USA, 1843–1857.](https://dl.acm.org/doi/pdf/10.1145/2882903.2915232)
* Conditional functional dependencies
- [Rammelaere, J., Geerts, F. (2019). Revisiting Conditional Functional Dependency Discovery: Splitting the “C” from the “FD”. Machine Learning and Knowledge Discovery in Databases. ECML PKDD 2018. ](https://link.springer.com/chapter/10.1007/978-3-030-10928-8_33)
* Exact and approximate inclusion dependencies
- [Falco Dürsch et al. 2019. Inclusion Dependency Discovery: An Experimental Evaluation of Thirteen Algorithms. In Proceedings of the 28th ACM International Conference on Information and Knowledge Management (CIKM '19). Association for Computing Machinery, New York, NY, USA, 219–228.](https://hpi.de/fileadmin/user_upload/fachgebiete/naumann/publications/PDFs/2019_duersch_inclusion.pdf)
- [Sebastian Kruse, et al. Fast Approximate Discovery of Inclusion Dependencies. BTW 2017: 207-226](http://btw2017.informatik.uni-stuttgart.de/slidesandpapers/F4-10-47/paper_web.pdf)
- [Marchi, F.D., Lopes, S. & Petit, JM. Unary and n-ary inclusion dependency discovery in relational databases. J Intell Inf Syst 32, 53–73 (2009)](https://liris.cnrs.fr/Documents/Liris-3034.pdf)
* Order dependencies:
- [Jaroslaw Szlichta et al. 2017. Effective and complete discovery of order dependencies via set-based axiomatization. Proc. VLDB Endow. 10, 7 (March 2017), 721–732.](http://www.vldb.org/pvldb/vol10/p721-szlichta.pdf)
- [Langer, P., Naumann, F. Efficient order dependency detection. The VLDB Journal 25, 223–241 (2016)](https://link.springer.com/article/10.1007/s00778-015-0412-3)
* Metric functional dependencies
- [N. Koudas et al. "Metric Functional Dependencies," 2009 IEEE 25th International Conference on Data Engineering, Shanghai, China, 2009, pp. 1275-1278.](https://ieeexplore.ieee.org/document/4812519)
* Fuzzy algebraic constraints
- [Paul G. Brown and Peter J. Hass. 2003. BHUNT: automatic discovery of Fuzzy algebraic constraints in relational data. In Proceedings of the 29th international conference on Very large data bases - Volume 29 (VLDB '03), Vol. 29. VLDB Endowment, 668–679.](https://www.vldb.org/conf/2003/papers/S20P03.pdf)
* Differential dependencies
- [Shaoxu Song and Lei Chen. 2011. Differential dependencies: Reasoning and discovery. ACM Trans. Database Syst. 36, 3, Article 16 (August 2011), 41 pages.](https://sxsong.github.io/doc/11tods.pdf)
* Exact and approximate unique column combinations
- [Sebastian Kruse and Felix Naumann. 2018. Efficient discovery of approximate dependencies. Proc. VLDB Endow. 11, 7 (March 2018), 759–772.](https://www.vldb.org/pvldb/vol11/p759-kruse.pdf)
* Association rules
- [Charu C. Aggarwal, Jiawei Han. 2014. Frequent Pattern Mining. Springer Cham. pp 471.](https://link.springer.com/book/10.1007/978-3-319-07821-2)
* Numerical association rules
- [Minakshi Kaushik, Rahul Sharma, Iztok Fister Jr., and Dirk Draheim. 2023. Numerical Association Rule Mining: A Systematic Literature Review. 1, 1 (July 2023), 50 pages.](https://arxiv.org/abs/2307.00662)
- [Fister, Iztok & Fister jr, Iztok. 2020. uARMSolver: A framework for Association Rule Mining. 10.48550/arXiv.2010.10884.](https://doi.org/10.48550/arXiv.2010.10884)
* Matching dependencies
- [Philipp Schirmer, Thorsten Papenbrock, Ioannis Koumarelas, and Felix Naumann. 2020. Efficient Discovery of Matching Dependencies. ACM Trans. Database Syst. 45, 3, Article 13 (September 2020), 33 pages. https://doi.org/10.1145/3392778](https://dl.acm.org/doi/10.1145/3392778)
* Denial constraints
- [X. Chu, I. F. Ilyas and P. Papotti. Holistic data cleaning: Putting violations into context. 2013. IEEE 29th International Conference on Data Engineering (ICDE), Brisbane, QLD, Australia, 2013, pp. 458-469,](https://cs.uwaterloo.ca/~ilyas/papers/XuICDE2013.pdf)
- [Zifan Liu, Shaleen Deep, Anna Fariha, Fotis Psallidas, Ashish Tiwari, and Avrilia Floratou. 2024. Rapidash: Efficient Detection of Constraint Violations. Proc. VLDB Endow. 17, 8 (April 2024), 2009–2021.](https://arxiv.org/pdf/2309.12436)
- [Renjie Xiao, Zijing Tan, Haojin Wang, and Shuai Ma. 2022. Fast approximate denial constraint discovery. Proc. VLDB Endow. 16, 2 (October 2022), 269–281.](https://doi.org/10.14778/3565816.3565828)
## Installation
The source code is currently hosted on GitHub at https://github.com/Desbordante/desbordante-core
Wheels for all released version are available at the Python Package Index (PyPI) for **manylinux2014** (Ubuntu 20.04+, or any other linux distribution with gcc 10+) and **macOS 11.0+**.
```bash
$ pip install desbordante
```
## Installation from sources
Install all dependencies listed in [README.md](https://github.com/Desbordante/desbordante-core/blob/main/README.md).
Then, in the Desbordante directory (the same one that contains this file), execute:
```bash
./build.sh
python3 -m venv venv
source venv/bin/activate
python3 -m pip install .
```
## Troubleshooting
### No type hints in IDE
If type hints don't work for you in Visual Studio Code, for example, then install stubs using the command:
```sh
pip install desbordate-stubs
```
**NOTE**: Stubs may not fully support current version of `desbordante` package, as they are updated independently.
## Cite
If you use this software for research, please cite one of our papers:
1) George Chernishev, et al. Solving Data Quality Problems with Desbordante: a Demo. CoRR abs/2307.14935 (2023).
2) George Chernishev, et al. "Desbordante: from benchmarking suite to high-performance science-intensive data profiler (preprint)". CoRR abs/2301.05965. (2023).
3) M. Strutovskiy, N. Bobrov, K. Smirnov and G. Chernishev, "Desbordante: a Framework for Exploring Limits of Dependency Discovery Algorithms," 2021 29th Conference of Open Innovations Association (FRUCT), 2021, pp. 344-354, doi: 10.23919/FRUCT52173.2021.9435469.
4) A. Smirnov, A. Chizhov, I. Shchuckin, N. Bobrov and G. Chernishev, "Fast Discovery of Inclusion Dependencies with Desbordante," 2023 33rd Conference of Open Innovations Association (FRUCT), Zilina, Slovakia, 2023, pp. 264-275, doi: 10.23919/FRUCT58615.2023.10143047.
5) Y. Kuzin, D. Shcheka, M. Polyntsov, K. Stupakov, M. Firsov and G. Chernishev, "Order in Desbordante: Techniques for Efficient Implementation of Order Dependency Discovery Algorithms," 2024 35th Conference of Open Innovations Association (FRUCT), Tampere, Finland, 2024, pp. 413-424.
6) I. Barutkin, M. Fofanov, S. Belokonny, V. Makeev and G. Chernishev, "Extending Desbordante with Probabilistic Functional Dependency Discovery Support," 2024 35th Conference of Open Innovations Association (FRUCT), Tampere, Finland, 2024, pp. 158-169.
7) A. Shlyonskikh, M. Sinelnikov, D. Nikolaev, Y. Litvinov and G. Chernishev, "Lightning Fast Matching Dependency Discovery with Desbordante," 2024 36th Conference of Open Innovations Association (FRUCT), Lappeenranta, Finland, 2024, pp. 729-740.
# Contacts and Q&A
If you have any questions regarding the tool usage you can ask it in
our [google group](https://groups.google.com/g/desbordante). To contact dev team email George Chernishev, Maxim
Strutovsky or Nikita Bobrov.
Raw data
{
"_id": null,
"home_page": "https://desbordante.unidata-platform.ru/",
"name": "desbordante",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": null,
"author": null,
"author_email": null,
"download_url": null,
"platform": null,
"description": "<p>\n <img src=\"https://github.com/Mstrutov/Desbordante/assets/88928096/d687809b-5a3b-420e-a192-a1a2b6697b2a\"/>\n</p>\n\n---\n\n# Desbordante: high-performance data profiler\n\n## What is it?\n\n**Desbordante** is a high-performance data profiler oriented towards exploratory data analysis\n\nTry the web version at https://desbordante.unidata-platform.ru/\n\n## Table of Contents\n\n- [Main Features](#main-features)\n- [Usage Examples](#usage-examples)\n- [I still don't understand how to use Desbordante and patterns :(](#i-still-dont-understand-how-to-use-Desbordante-and-patterns-)\n- [Installation](#installation)\n- [Installation from sources](#installation-from-sources)\n- [Troubleshooting](#troubleshooting)\n- [Cite](#cite)\n- [Contacts and Q&A](#contacts-and-qa)\n\n# Main Features\n\n[**Desbordante**](https://github.com/Desbordante/desbordante-core) is a high-performance data profiler that is capable of discovering and validating many different patterns in data using various algorithms. \n\nThe **Discovery** task is designed to identify all instances of a specified pattern *type* of a given dataset.\n\nThe **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).\n\nFor some patterns Desbordante supports a **dynamic** task variant. The distiguishing 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.\n\nThe currently supported data patterns are:\n* Exact functional dependencies (discovery and validation)\n* Approximate functional dependencies, with \n - $g_1$ metric \u2014 classic AFDs (discovery and validation)\n - $\\mu+$ metric (discovery)\n - $\\tau$ metric (discovery)\n - $pdep$ metric (discovery)\n - $\\rho$ metric (discovery)\n* Probabilistic functional dependencies, with PerTuple and PerValue metrics (discovery and validation)\n* Classic soft functional dependencies (with corellations), with $\\rho$ metric (discovery and validation)\n* Dynamic validation of exact and approximate ($g_1$) functional dependencies\n* Numerical dependencies (validation)\n* Graph functional dependencies (validation)\n* Conditional functional dependencies (discovery)\n* Inclusion dependencies\n - Exact inclusion dependencies (discovery and validation)\n - Approximate inclusion dependencies, with $g^{'}_{3}$ metric (discovery and validation)\n* Order dependencies:\n - set-based axiomatization (discovery)\n - list-based axiomatization (discovery)\n* Metric functional dependencies (validation)\n* Fuzzy algebraic constraints (discovery)\n* Differential Dependencies (discovery)\n* Unique column combinations:\n - Exact unique column combination (discovery and validation)\n - Approximate unique column combination, with $g_1$ metric (discovery and validation)\n* Association rules (discovery)\n* Numerical association rules (discovery)\n* Matching dependencies (discovery)\n* Denial constraints\n - Exact denial constraints (discovery and validation)\n - Approximate denial constraints, with $g_1$ metric (discovery)\n\nThis 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.\n\n## Usage examples\n\n1) Discover all exact functional dependencies in a table stored in a comma-separated file with a header row. In this example the default FD discovery algorithm (HyFD) is used.\n\n\n```python\nimport desbordante\n\nTABLE = 'examples/datasets/university_fd.csv'\n\nalgo = desbordante.fd.algorithms.Default()\nalgo.load_data(table=(TABLE, ',', True))\nalgo.execute()\nresult = algo.get_fds()\nprint('FDs:')\nfor fd in result:\n print(fd)\n```\n\n```text\nFDs:\n[Course Classroom] -> Professor\n[Classroom Semester] -> Professor\n[Classroom Semester] -> Course\n[Professor] -> Course\n[Professor Semester] -> Classroom\n[Course Semester] -> Classroom\n[Course Semester] -> Professor\n```\n\n2) Discover all approximate functional dependencies with error less than or equal to 0.1 in a table represented by a\n .csv file that uses a comma as the separator and has a header row. In this example the AFD discovery algorithm Pyro\n is used.\n\n```python\nimport desbordante\n\nTABLE = 'examples/datasets/inventory_afd.csv'\nERROR = 0.1\n\nalgo = desbordante.afd.algorithms.Default()\nalgo.load_data(table=(TABLE, ',', True))\nalgo.execute(error=ERROR)\nresult = algo.get_fds()\nprint('AFDs:')\nfor fd in result:\n print(fd)\n```\n\n```text\nAFDs:\n[Id] -> Price\n[Id] -> ProductName\n[ProductName] -> Price\n```\n\n3) Check whether metric functional dependency \u201cTitle -> Duration\u201d with radius 5 (using the Euclidean metric) holds in a\n table represented by a .csv file that uses a comma as the separator and has a header row. In this example the default\n MFD validation algorithm (BRUTE) is used.\n\n```python\nimport desbordante\n\nTABLE = 'examples/datasets/theatres_mfd.csv'\nMETRIC = 'euclidean'\nLHS_INDICES = [0]\nRHS_INDICES = [2]\nPARAMETER = 5\n\nalgo = desbordante.mfd_verification.algorithms.Default()\nalgo.load_data(table=(TABLE, ',', True))\nalgo.execute(lhs_indices=LHS_INDICES, metric=METRIC,\n parameter=PARAMETER, rhs_indices=RHS_INDICES)\nif algo.mfd_holds():\n print('MFD holds')\nelse:\n print('MFD does not hold')\n```\n\n```text\nMFD holds\n```\n\n4) Discover approximate functional dependencies with various error thresholds. Here, we are using a pandas DataFrame to load data from a CSV file.\n\n```python-repl\n>>> import desbordante\n>>> import pandas as pd\n>>> pyro = desbordante.afd.algorithms.Pyro() # same as desbordante.afd.algorithms.Default()\n>>> df = pd.read_csv('examples/datasets/iris.csv', sep=',', header=None)\n>>> pyro.load_data(table=df)\n>>> pyro.execute(error=0.0)\n>>> print(f'[{\", \".join(map(str, pyro.get_fds()))}]')\n[[0 1 2] -> 4, [0 2 3] -> 4, [0 1 3] -> 4, [1 2 3] -> 4]\n>>> pyro.execute(error=0.1)\n>>> print(f'[{\", \".join(map(str, pyro.get_fds()))}]')\n[[2] -> 0, [2] -> 3, [2] -> 1, [0] -> 2, [3] -> 0, [0] -> 3, [0] -> 1, [1] -> 3, [1] -> 0, [3] -> 2, [3] -> 1, [1] -> 2, [2] -> 4, [3] -> 4, [0] -> 4, [1] -> 4]\n>>> pyro.execute(error=0.2)\n>>> print(f'[{\", \".join(map(str, pyro.get_fds()))}]')\n[[2] -> 0, [0] -> 2, [3] -> 2, [1] -> 2, [2] -> 4, [3] -> 4, [0] -> 4, [1] -> 4, [3] -> 0, [1] -> 0, [2] -> 3, [2] -> 1, [0] -> 3, [0] -> 1, [1] -> 3, [3] -> 1]\n>>> pyro.execute(error=0.3)\n>>> print(f'[{\", \".join(map(str, pyro.get_fds()))}]')\n[[2] -> 1, [0] -> 2, [2] -> 0, [2] -> 3, [0] -> 1, [3] -> 2, [3] -> 1, [1] -> 2, [3] -> 0, [0] -> 3, [4] -> 1, [1] -> 0, [1] -> 3, [4] -> 2, [4] -> 3, [2] -> 4, [3] -> 4, [0] -> 4, [1] -> 4]\n```\n\nMore examples can be found in the [Desbordante repository](https://github.com/Desbordante/desbordante-core/tree/main/examples) on GitHub.\n\n## I still don't understand how to use Desbordante and patterns :(\n\nNo 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\u2019s a step-by-step guide:\n\n1) First of all, explore the guides on our [website](https://desbordante.unidata-platform.ru/papers). Since our team currently does not include technical writers, it's possible that some guides may be missing.\n2) 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](https://github.com/Desbordante/desbordante-core/tree/main/examples).\n3) 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 the introduction and the example sections.\n4) Finally, do not hesitate to ask questions in the mailing list (link below) or create an issue.\n\n### Papers about patterns\n\nHere is a list of papers about patterns, organized in the recommended reading order in each item:\n\n* Exact functional dependencies\n - [Thorsten Papenbrock et al. 2015. Functional dependency discovery: an experimental evaluation of seven algorithms. Proc. VLDB Endow. 8, 10 (June 2015), 1082\u20131093.](http://www.vldb.org/pvldb/vol8/p1082-papenbrock.pdf)\n - [Thorsten Papenbrock and Felix Naumann. 2016. A Hybrid Approach to Functional Dependency Discovery. In Proceedings of the 2016 International Conference on Management of Data (SIGMOD '16). Association for Computing Machinery, New York, NY, USA, 821\u2013833.](https://hpi.de/fileadmin/user_upload/fachgebiete/naumann/publications/PDFs/2016_papenbrock_a.pdf)\n* Approximate functional dependencies ($g_{1}, \\mu+, \\tau, pdep, \\rho$ metrics)\n - [Marcel Parciak et al. 2024. Measuring Approximate Functional Dependencies: A Comparative Study. In Proceedings 2024 IEEE 40th International Conference on Data Engineering (ICDE), Utrecht, Netherlands, 2024, pp. 3505-3518](https://arxiv.org/abs/2312.06296)\n - [Sebastian Kruse and Felix Naumann. 2018. Efficient discovery of approximate dependencies. Proc. VLDB Endow. 11, 7 (March 2018), 759\u2013772.](https://www.vldb.org/pvldb/vol11/p759-kruse.pdf)\n - [Yka Huhtala et al. 1999. TANE: An Efficient Algorithm for Discovering Functional and Approximate Dependencies. Comput. J. 42(2): 100-111](https://dm-gatech.github.io/CS8803-Fall2018-DML-Papers/tane.pdf)\n* Probabilistic functional dependencies ($PerTuple$ and $PerValue$ metrics)\n - [Daisy Zhe Wang et al. Functional Dependency Generation and Applications in Pay-As-You-Go Data Integration Systems. WebDB 2009](http://webdb09.cse.buffalo.edu/papers/Paper18/webdb09.pdf)\n - [Daisy Zhe Wang et al. Discovering Functional Dependencies in Pay-As-You-Go Data Integration Systems. Tech Rep. UCB/EECS-2009-119.](https://www2.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS-2009-119.pdf)\n* Classic soft functional dependencies ($\\rho$ metric)\n - [Ihab F. Ilyas et al. 2004. CORDS: automatic discovery of correlations and soft functional dependencies. In Proceedings of the 2004 ACM SIGMOD international conference on Management of data (SIGMOD '04). Association for Computing Machinery, New York, NY, USA, 647\u2013658. ](https://cs.uwaterloo.ca/~ilyas/papers/cords.pdf)\n* Numerical Dependencies\n - [Paolo Ciaccia et al. 2013. Efficient derivation of numerical dependencies. Information Systems, Volume 38, Issue 3. Pages 410-429.](https://www.sciencedirect.com/science/article/abs/pii/S0306437912001044)\n* Graph functional dependencies\n - [Wenfei Fan, Yinghui Wu, and Jingbo Xu. 2016. Functional Dependencies for Graphs. In Proceedings of the 2016 International Conference on Management of Data (SIGMOD '16). Association for Computing Machinery, New York, NY, USA, 1843\u20131857.](https://dl.acm.org/doi/pdf/10.1145/2882903.2915232)\n* Conditional functional dependencies\n - [Rammelaere, J., Geerts, F. (2019). Revisiting Conditional Functional Dependency Discovery: Splitting the \u201cC\u201d from the \u201cFD\u201d. Machine Learning and Knowledge Discovery in Databases. ECML PKDD 2018. ](https://link.springer.com/chapter/10.1007/978-3-030-10928-8_33)\n* Exact and approximate inclusion dependencies\n - [Falco D\u00fcrsch et al. 2019. Inclusion Dependency Discovery: An Experimental Evaluation of Thirteen Algorithms. In Proceedings of the 28th ACM International Conference on Information and Knowledge Management (CIKM '19). Association for Computing Machinery, New York, NY, USA, 219\u2013228.](https://hpi.de/fileadmin/user_upload/fachgebiete/naumann/publications/PDFs/2019_duersch_inclusion.pdf)\n - [Sebastian Kruse, et al. Fast Approximate Discovery of Inclusion Dependencies. BTW 2017: 207-226](http://btw2017.informatik.uni-stuttgart.de/slidesandpapers/F4-10-47/paper_web.pdf)\n - [Marchi, F.D., Lopes, S. & Petit, JM. Unary and n-ary inclusion dependency discovery in relational databases. J Intell Inf Syst 32, 53\u201373 (2009)](https://liris.cnrs.fr/Documents/Liris-3034.pdf)\n* Order dependencies:\n - [Jaroslaw Szlichta et al. 2017. Effective and complete discovery of order dependencies via set-based axiomatization. Proc. VLDB Endow. 10, 7 (March 2017), 721\u2013732.](http://www.vldb.org/pvldb/vol10/p721-szlichta.pdf)\n - [Langer, P., Naumann, F. Efficient order dependency detection. The VLDB Journal 25, 223\u2013241 (2016)](https://link.springer.com/article/10.1007/s00778-015-0412-3)\n* Metric functional dependencies\n - [N. Koudas et al. \"Metric Functional Dependencies,\" 2009 IEEE 25th International Conference on Data Engineering, Shanghai, China, 2009, pp. 1275-1278.](https://ieeexplore.ieee.org/document/4812519)\n* Fuzzy algebraic constraints\n - [Paul G. Brown and Peter J. Hass. 2003. BHUNT: automatic discovery of Fuzzy algebraic constraints in relational data. In Proceedings of the 29th international conference on Very large data bases - Volume 29 (VLDB '03), Vol. 29. VLDB Endowment, 668\u2013679.](https://www.vldb.org/conf/2003/papers/S20P03.pdf)\n* Differential dependencies\n - [Shaoxu Song and Lei Chen. 2011. Differential dependencies: Reasoning and discovery. ACM Trans. Database Syst. 36, 3, Article 16 (August 2011), 41 pages.](https://sxsong.github.io/doc/11tods.pdf)\n* Exact and approximate unique column combinations\n - [Sebastian Kruse and Felix Naumann. 2018. Efficient discovery of approximate dependencies. Proc. VLDB Endow. 11, 7 (March 2018), 759\u2013772.](https://www.vldb.org/pvldb/vol11/p759-kruse.pdf)\n* Association rules\n - [Charu C. Aggarwal, Jiawei Han. 2014. Frequent Pattern Mining. Springer Cham. pp 471.](https://link.springer.com/book/10.1007/978-3-319-07821-2)\n* Numerical association rules\n - [Minakshi Kaushik, Rahul Sharma, Iztok Fister Jr., and Dirk Draheim. 2023. Numerical Association Rule Mining: A Systematic Literature Review. 1, 1 (July 2023), 50 pages.](https://arxiv.org/abs/2307.00662)\n - [Fister, Iztok & Fister jr, Iztok. 2020. uARMSolver: A framework for Association Rule Mining. 10.48550/arXiv.2010.10884.](https://doi.org/10.48550/arXiv.2010.10884)\n* Matching dependencies\n - [Philipp Schirmer, Thorsten Papenbrock, Ioannis Koumarelas, and Felix Naumann. 2020. Efficient Discovery of Matching Dependencies. ACM Trans. Database Syst. 45, 3, Article 13 (September 2020), 33 pages. https://doi.org/10.1145/3392778](https://dl.acm.org/doi/10.1145/3392778)\n* Denial constraints\n - [X. Chu, I. F. Ilyas and P. Papotti. Holistic data cleaning: Putting violations into context. 2013. IEEE 29th International Conference on Data Engineering (ICDE), Brisbane, QLD, Australia, 2013, pp. 458-469,](https://cs.uwaterloo.ca/~ilyas/papers/XuICDE2013.pdf)\n - [Zifan Liu, Shaleen Deep, Anna Fariha, Fotis Psallidas, Ashish Tiwari, and Avrilia Floratou. 2024. Rapidash: Efficient Detection of Constraint Violations. Proc. VLDB Endow. 17, 8 (April 2024), 2009\u20132021.](https://arxiv.org/pdf/2309.12436)\n - [Renjie Xiao, Zijing Tan, Haojin Wang, and Shuai Ma. 2022. Fast approximate denial constraint discovery. Proc. VLDB Endow. 16, 2 (October 2022), 269\u2013281.](https://doi.org/10.14778/3565816.3565828)\n\n## Installation\n\nThe source code is currently hosted on GitHub at https://github.com/Desbordante/desbordante-core\n\nWheels for all released version are available at the Python Package Index (PyPI) for **manylinux2014** (Ubuntu 20.04+, or any other linux distribution with gcc 10+) and **macOS 11.0+**.\n\n```bash\n$ pip install desbordante\n ```\n\n## Installation from sources\n\nInstall all dependencies listed in [README.md](https://github.com/Desbordante/desbordante-core/blob/main/README.md).\n\nThen, in the Desbordante directory (the same one that contains this file), execute:\n\n```bash\n./build.sh\npython3 -m venv venv\nsource venv/bin/activate\npython3 -m pip install .\n```\n\n## Troubleshooting\n### No type hints in IDE\nIf type hints don't work for you in Visual Studio Code, for example, then install stubs using the command:\n```sh\npip install desbordate-stubs\n```\n**NOTE**: Stubs may not fully support current version of `desbordante` package, as they are updated independently.\n\n## Cite\n\nIf you use this software for research, please cite one of our papers:\n\n1) George Chernishev, et al. Solving Data Quality Problems with Desbordante: a Demo. CoRR abs/2307.14935 (2023).\n2) George Chernishev, et al. \"Desbordante: from benchmarking suite to high-performance science-intensive data profiler (preprint)\". CoRR abs/2301.05965. (2023).\n3) M. Strutovskiy, N. Bobrov, K. Smirnov and G. Chernishev, \"Desbordante: a Framework for Exploring Limits of Dependency Discovery Algorithms,\" 2021 29th Conference of Open Innovations Association (FRUCT), 2021, pp. 344-354, doi: 10.23919/FRUCT52173.2021.9435469.\n4) A. Smirnov, A. Chizhov, I. Shchuckin, N. Bobrov and G. Chernishev, \"Fast Discovery of Inclusion Dependencies with Desbordante,\" 2023 33rd Conference of Open Innovations Association (FRUCT), Zilina, Slovakia, 2023, pp. 264-275, doi: 10.23919/FRUCT58615.2023.10143047.\n5) Y. Kuzin, D. Shcheka, M. Polyntsov, K. Stupakov, M. Firsov and G. Chernishev, \"Order in Desbordante: Techniques for Efficient Implementation of Order Dependency Discovery Algorithms,\" 2024 35th Conference of Open Innovations Association (FRUCT), Tampere, Finland, 2024, pp. 413-424.\n6) I. Barutkin, M. Fofanov, S. Belokonny, V. Makeev and G. Chernishev, \"Extending Desbordante with Probabilistic Functional Dependency Discovery Support,\" 2024 35th Conference of Open Innovations Association (FRUCT), Tampere, Finland, 2024, pp. 158-169.\n7) A. Shlyonskikh, M. Sinelnikov, D. Nikolaev, Y. Litvinov and G. Chernishev, \"Lightning Fast Matching Dependency Discovery with Desbordante,\" 2024 36th Conference of Open Innovations Association (FRUCT), Lappeenranta, Finland, 2024, pp. 729-740.\n\n\n# Contacts and Q&A\n\nIf you have any questions regarding the tool usage you can ask it in\nour [google group](https://groups.google.com/g/desbordante). To contact dev team email George Chernishev, Maxim\nStrutovsky or Nikita Bobrov.\n",
"bugtrack_url": null,
"license": "AGPL-3.0-only",
"summary": "Science-intensive high-performance data profiler",
"version": "2.3.1",
"project_urls": {
"Homepage": "https://desbordante.unidata-platform.ru/",
"Issues": "https://github.com/desbordante/desbordante-core/issues",
"Repository": "https://github.com/desbordante/desbordante-core"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "c35169c15457d02819b14807807b245b1a60f41d85fe77ffa779df6b84e34cce",
"md5": "1ac9257bbf70c6e648bcf0ee3fdb63f1",
"sha256": "f3638c4a26079f13538dac1d7228e323f6a55ac94418e64150d18ce0fd78903a"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "1ac9257bbf70c6e648bcf0ee3fdb63f1",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 2745775,
"upload_time": "2025-02-01T21:41:45",
"upload_time_iso_8601": "2025-02-01T21:41:45.403077Z",
"url": "https://files.pythonhosted.org/packages/c3/51/69c15457d02819b14807807b245b1a60f41d85fe77ffa779df6b84e34cce/desbordante-2.3.1-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2528be0399749a57181333e9b7f26ab394b755af0a714e955bdafaa595044d0e",
"md5": "200a0cc90f07d9d321469028d928915c",
"sha256": "c22c81bf290b4b034ee94becba34ddfecf9fe8465472d6d857d0116284ee975e"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp310-cp310-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "200a0cc90f07d9d321469028d928915c",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 3259299,
"upload_time": "2025-02-01T21:41:48",
"upload_time_iso_8601": "2025-02-01T21:41:48.147499Z",
"url": "https://files.pythonhosted.org/packages/25/28/be0399749a57181333e9b7f26ab394b755af0a714e955bdafaa595044d0e/desbordante-2.3.1-cp310-cp310-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "046b87ad2320088da5c5ee2f5a56648a2394a3114ea2ebed0732e99835e55879",
"md5": "fc87bb0a694f4094c983f2b65ea79fc3",
"sha256": "2a963e276b9d913715275a989c6c5162188b4040252fdb6beb46b3e543c7c8b2"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "fc87bb0a694f4094c983f2b65ea79fc3",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 3984860,
"upload_time": "2025-02-01T21:41:50",
"upload_time_iso_8601": "2025-02-01T21:41:50.621643Z",
"url": "https://files.pythonhosted.org/packages/04/6b/87ad2320088da5c5ee2f5a56648a2394a3114ea2ebed0732e99835e55879/desbordante-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2380015ca8cfdf560d2e106d07907480eb2d035a075dc4996de322a0a7ffa05f",
"md5": "145fd895cb66ad121deff0e913e4f9c5",
"sha256": "c2079879e70bdb0f1e35300417522b5255b9f17b3547e8109f1214c0dc8b3ce7"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "145fd895cb66ad121deff0e913e4f9c5",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 2746158,
"upload_time": "2025-02-01T21:41:53",
"upload_time_iso_8601": "2025-02-01T21:41:53.365359Z",
"url": "https://files.pythonhosted.org/packages/23/80/015ca8cfdf560d2e106d07907480eb2d035a075dc4996de322a0a7ffa05f/desbordante-2.3.1-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e09baeb818ddf3a6d110c4152f5b3d02713b7f3b83db71d3782bfe45fd3b4979",
"md5": "2d557c286b8d9e1803ddb9061c8615fb",
"sha256": "c6ebdb454e8ef5dbc652fbad680c40d2187b21d204e2950fd7199046bf717f5b"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp311-cp311-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "2d557c286b8d9e1803ddb9061c8615fb",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 3259460,
"upload_time": "2025-02-01T21:41:55",
"upload_time_iso_8601": "2025-02-01T21:41:55.038188Z",
"url": "https://files.pythonhosted.org/packages/e0/9b/aeb818ddf3a6d110c4152f5b3d02713b7f3b83db71d3782bfe45fd3b4979/desbordante-2.3.1-cp311-cp311-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1f97276cb726056c34e4c3e81cfcaa8ac879ed4ae40f78ee059027e1bbd4f3f9",
"md5": "457c3a3ce050c03d5f269da9393a10c1",
"sha256": "b281ea9661a4058d84296d59bece64c8862ba6143068bb3e2716bf8ffe49f588"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "457c3a3ce050c03d5f269da9393a10c1",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 3984675,
"upload_time": "2025-02-01T21:41:57",
"upload_time_iso_8601": "2025-02-01T21:41:57.461345Z",
"url": "https://files.pythonhosted.org/packages/1f/97/276cb726056c34e4c3e81cfcaa8ac879ed4ae40f78ee059027e1bbd4f3f9/desbordante-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1402f9441aad8dfb81a1052c7a1bbf4332c23d65221c7bc234766d66ea32e055",
"md5": "c2489b1ae2b08598e888fb960a14d950",
"sha256": "b52a594d16ad67684323ee3a35aceda1a313f25bfeb0d0e8b0a13d60e8029c40"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "c2489b1ae2b08598e888fb960a14d950",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 2752390,
"upload_time": "2025-02-01T21:42:00",
"upload_time_iso_8601": "2025-02-01T21:42:00.014650Z",
"url": "https://files.pythonhosted.org/packages/14/02/f9441aad8dfb81a1052c7a1bbf4332c23d65221c7bc234766d66ea32e055/desbordante-2.3.1-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8862faf9fffb2282abb613b78fd1bc9052a1c82bfcf6b2d3f914fe0e6e79817c",
"md5": "daea7207b6b36c50d256862e5aed3ccd",
"sha256": "1c2e5cc07d9caffdd3a3f78c16563191fee8b43709d04b3e850a4135dbd36318"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp312-cp312-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "daea7207b6b36c50d256862e5aed3ccd",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 3267625,
"upload_time": "2025-02-01T21:42:03",
"upload_time_iso_8601": "2025-02-01T21:42:03.470036Z",
"url": "https://files.pythonhosted.org/packages/88/62/faf9fffb2282abb613b78fd1bc9052a1c82bfcf6b2d3f914fe0e6e79817c/desbordante-2.3.1-cp312-cp312-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8bb5f0cddd43aee010a1f7977d00ae32b930d4322699e5ebd081e5f81bfa05a6",
"md5": "1cd0005de9a62e32ef0f278e7ec0408c",
"sha256": "fde8f324b135268824aaaa532cce6fc3dbd493d95425fb481d299e1ce7214169"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "1cd0005de9a62e32ef0f278e7ec0408c",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 3979912,
"upload_time": "2025-02-01T21:42:05",
"upload_time_iso_8601": "2025-02-01T21:42:05.862252Z",
"url": "https://files.pythonhosted.org/packages/8b/b5/f0cddd43aee010a1f7977d00ae32b930d4322699e5ebd081e5f81bfa05a6/desbordante-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "af72eba3f53eb045ff0e0f58f336b58af0b0432b0ac8bf55f7d555847a65407e",
"md5": "cde74859be46f5a9906ac5ccb06d1c0f",
"sha256": "b855d9c55d72c1cae6c978579164da0a6ccb1d72b34eb781a537a86d9c6da0f2"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "cde74859be46f5a9906ac5ccb06d1c0f",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 2752696,
"upload_time": "2025-02-01T21:42:08",
"upload_time_iso_8601": "2025-02-01T21:42:08.367738Z",
"url": "https://files.pythonhosted.org/packages/af/72/eba3f53eb045ff0e0f58f336b58af0b0432b0ac8bf55f7d555847a65407e/desbordante-2.3.1-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9506aac3cf0d20409f50e920234e6e6c6775881a809fefedc63a70bef8504a15",
"md5": "6456878d10f9fae98466f267114f2081",
"sha256": "04448e369094bfe2ddfa2ac42876c326fd97200bfdb81e77b08dbeb8bfe683a7"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp313-cp313-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "6456878d10f9fae98466f267114f2081",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 3267677,
"upload_time": "2025-02-01T21:42:10",
"upload_time_iso_8601": "2025-02-01T21:42:10.121293Z",
"url": "https://files.pythonhosted.org/packages/95/06/aac3cf0d20409f50e920234e6e6c6775881a809fefedc63a70bef8504a15/desbordante-2.3.1-cp313-cp313-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ef2aad323b3ee6488d34afe8006e91d9e83954ded0e6435ef0d3b14e49cad6da",
"md5": "67d9a5ac75f3ece5ae861ff48f35a86b",
"sha256": "9756449bb2fb6161925a3ffd50e2f4102fc199fc822ac0c7d306c75fe9ef8ffb"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "67d9a5ac75f3ece5ae861ff48f35a86b",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 3979666,
"upload_time": "2025-02-01T21:42:11",
"upload_time_iso_8601": "2025-02-01T21:42:11.850894Z",
"url": "https://files.pythonhosted.org/packages/ef/2a/ad323b3ee6488d34afe8006e91d9e83954ded0e6435ef0d3b14e49cad6da/desbordante-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e8141a83b8969f1c4e4e2209323b52c7f88e82aa93afa7fb7d5f37b68cc2dfcf",
"md5": "2ada4d4697912db9a1fda4510d362f8e",
"sha256": "04e9b2a1cf341d158a6bf413f91e6292cc033e68dc769e4064374123eaff3f8d"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp38-cp38-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "2ada4d4697912db9a1fda4510d362f8e",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 2745296,
"upload_time": "2025-02-01T21:42:14",
"upload_time_iso_8601": "2025-02-01T21:42:14.269890Z",
"url": "https://files.pythonhosted.org/packages/e8/14/1a83b8969f1c4e4e2209323b52c7f88e82aa93afa7fb7d5f37b68cc2dfcf/desbordante-2.3.1-cp38-cp38-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "23f75a86369d63d4dea4d902b2b3e793040b89e56b349ab13e477989c6895ab8",
"md5": "6b1474f005486fc5c4b3c26e889cf2b6",
"sha256": "f16389880f733fde6d0dc2cf561527befe8e191f59c7d4ccbd44e0d3d469bc34"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp38-cp38-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "6b1474f005486fc5c4b3c26e889cf2b6",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 3258943,
"upload_time": "2025-02-01T21:42:16",
"upload_time_iso_8601": "2025-02-01T21:42:16.683599Z",
"url": "https://files.pythonhosted.org/packages/23/f7/5a86369d63d4dea4d902b2b3e793040b89e56b349ab13e477989c6895ab8/desbordante-2.3.1-cp38-cp38-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "65b34854de94f4faf5f09d8f8ddc16aa4404943ddc533d66a8f7afea0ad51d0e",
"md5": "3b0e23c399448996ca1472895e2bc539",
"sha256": "667ed1b8a70fb57ffccce81bc43d426ad7602be374e6e9e93d3c9ae5e5f1dc33"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "3b0e23c399448996ca1472895e2bc539",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 3984224,
"upload_time": "2025-02-01T21:42:19",
"upload_time_iso_8601": "2025-02-01T21:42:19.438771Z",
"url": "https://files.pythonhosted.org/packages/65/b3/4854de94f4faf5f09d8f8ddc16aa4404943ddc533d66a8f7afea0ad51d0e/desbordante-2.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4dc0dad25fda72465db937ce952a7de0e65eb6ae89a7db17015985306e085df8",
"md5": "dde0755a29933874f4a901daf8a2235d",
"sha256": "059bbc39babe8f2e85a9f29744722e95b3b3e462c93e8171125e720af2be5013"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "dde0755a29933874f4a901daf8a2235d",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 2745663,
"upload_time": "2025-02-01T21:42:21",
"upload_time_iso_8601": "2025-02-01T21:42:21.189931Z",
"url": "https://files.pythonhosted.org/packages/4d/c0/dad25fda72465db937ce952a7de0e65eb6ae89a7db17015985306e085df8/desbordante-2.3.1-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5a6a4bd18587529c24df60e6e4bf5b8ef0c1ae4bb3a00d0275fd9bd9633ae4e0",
"md5": "63af12692a4da5a337736700a2d4b62e",
"sha256": "9a05a87f03d88d94b05fd37ce6fc148514a38549da33bf5183a154720f98319f"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp39-cp39-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "63af12692a4da5a337736700a2d4b62e",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 3259466,
"upload_time": "2025-02-01T21:42:22",
"upload_time_iso_8601": "2025-02-01T21:42:22.858172Z",
"url": "https://files.pythonhosted.org/packages/5a/6a/4bd18587529c24df60e6e4bf5b8ef0c1ae4bb3a00d0275fd9bd9633ae4e0/desbordante-2.3.1-cp39-cp39-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5a3fae4ac4dc832d84754e16166609e9fed5d76eefc2d8aaef97521370709f9f",
"md5": "bca27c2bdafd73fce423ce2fe19ffdab",
"sha256": "324cf68651890a909682b22a1a28328fed02684f8addecfa03147f6ef69233e9"
},
"downloads": -1,
"filename": "desbordante-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "bca27c2bdafd73fce423ce2fe19ffdab",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 3985191,
"upload_time": "2025-02-01T21:42:24",
"upload_time_iso_8601": "2025-02-01T21:42:24.541960Z",
"url": "https://files.pythonhosted.org/packages/5a/3f/ae4ac4dc832d84754e16166609e9fed5d76eefc2d8aaef97521370709f9f/desbordante-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1252958fef6f5a79887c61b3dc196b7d2caf248180c605706d0c784e563f0753",
"md5": "720bfbf72fca45ca6714fec7790301bd",
"sha256": "2a53c1cd02a69d856f29fceb64f5d16bcffcb6a436a33b50b3c69773d9a2da74"
},
"downloads": -1,
"filename": "desbordante-2.3.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "720bfbf72fca45ca6714fec7790301bd",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 2745624,
"upload_time": "2025-02-01T21:42:28",
"upload_time_iso_8601": "2025-02-01T21:42:28.245293Z",
"url": "https://files.pythonhosted.org/packages/12/52/958fef6f5a79887c61b3dc196b7d2caf248180c605706d0c784e563f0753/desbordante-2.3.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7cf2fe1034c7b1aa321d406e0d3ba62c5c918d4b3a22354a9af3a0ac01fb8670",
"md5": "70fdc51a01084f661422796b8d344bb9",
"sha256": "1681ba8808dc028d66ee704441f5c1f646ef59322fec2c5812cf5437ff14ddd3"
},
"downloads": -1,
"filename": "desbordante-2.3.1-pp310-pypy310_pp73-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "70fdc51a01084f661422796b8d344bb9",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 3259760,
"upload_time": "2025-02-01T21:42:30",
"upload_time_iso_8601": "2025-02-01T21:42:30.692278Z",
"url": "https://files.pythonhosted.org/packages/7c/f2/fe1034c7b1aa321d406e0d3ba62c5c918d4b3a22354a9af3a0ac01fb8670/desbordante-2.3.1-pp310-pypy310_pp73-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a71b7a1d45e44db665f9f1957116949a13104072fddde4c024e4ada06ce651cf",
"md5": "1b46e180f6aebea6c7b63cad0fc50e2c",
"sha256": "936c6880aefb4a0786d972a55c92b453c3fe7554c26a38b999d8119b5ca2a6b4"
},
"downloads": -1,
"filename": "desbordante-2.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "1b46e180f6aebea6c7b63cad0fc50e2c",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 3984839,
"upload_time": "2025-02-01T21:42:33",
"upload_time_iso_8601": "2025-02-01T21:42:33.921329Z",
"url": "https://files.pythonhosted.org/packages/a7/1b/7a1d45e44db665f9f1957116949a13104072fddde4c024e4ada06ce651cf/desbordante-2.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "756a0af6815105e37ae9b68982211c2c2a6887fb013b74ec1701952c2d602118",
"md5": "131bf9212944d2cb651743e22acbc9c8",
"sha256": "19a1b193dce2598f387c56c0c729226a6b8381b6749423a344c93222155fc707"
},
"downloads": -1,
"filename": "desbordante-2.3.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "131bf9212944d2cb651743e22acbc9c8",
"packagetype": "bdist_wheel",
"python_version": "pp38",
"requires_python": ">=3.8",
"size": 2745403,
"upload_time": "2025-02-01T21:42:35",
"upload_time_iso_8601": "2025-02-01T21:42:35.516694Z",
"url": "https://files.pythonhosted.org/packages/75/6a/0af6815105e37ae9b68982211c2c2a6887fb013b74ec1701952c2d602118/desbordante-2.3.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2ee6539a0c2a4a85520dd78f5e972e3e62e07d4d9f2ff0880229b6c82a7a3f3d",
"md5": "ce2400f538a858ac1bf92ca0cfd5cb9b",
"sha256": "3f96c5bf4d675be374d1b1b5c8c2ac0d6e92238207d8c497cf509c0410ff9d2a"
},
"downloads": -1,
"filename": "desbordante-2.3.1-pp38-pypy38_pp73-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "ce2400f538a858ac1bf92ca0cfd5cb9b",
"packagetype": "bdist_wheel",
"python_version": "pp38",
"requires_python": ">=3.8",
"size": 3259594,
"upload_time": "2025-02-01T21:42:37",
"upload_time_iso_8601": "2025-02-01T21:42:37.319585Z",
"url": "https://files.pythonhosted.org/packages/2e/e6/539a0c2a4a85520dd78f5e972e3e62e07d4d9f2ff0880229b6c82a7a3f3d/desbordante-2.3.1-pp38-pypy38_pp73-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6d6f7fdc27154e52b3336863006548daf294ba18dad735a06ba44d6022395c79",
"md5": "2a01865a1db01de83ec0dc31692036ea",
"sha256": "504321d0894dea558419f77bca63eb4528e15813b9a14df0a253e068475ab0f9"
},
"downloads": -1,
"filename": "desbordante-2.3.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "2a01865a1db01de83ec0dc31692036ea",
"packagetype": "bdist_wheel",
"python_version": "pp38",
"requires_python": ">=3.8",
"size": 3984601,
"upload_time": "2025-02-01T21:42:39",
"upload_time_iso_8601": "2025-02-01T21:42:39.501927Z",
"url": "https://files.pythonhosted.org/packages/6d/6f/7fdc27154e52b3336863006548daf294ba18dad735a06ba44d6022395c79/desbordante-2.3.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e1e9f989f10ecfd2f92f77d8c920a33236119b6c8e098a434766f6bcbacd1cdd",
"md5": "c72cdb84380168751ef42eb63bf5e7d5",
"sha256": "96979026f8c1b5308412fb3e5e244902a6e3771e9e62459566e5f06b213c4789"
},
"downloads": -1,
"filename": "desbordante-2.3.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "c72cdb84380168751ef42eb63bf5e7d5",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 2745484,
"upload_time": "2025-02-01T21:42:42",
"upload_time_iso_8601": "2025-02-01T21:42:42.140982Z",
"url": "https://files.pythonhosted.org/packages/e1/e9/f989f10ecfd2f92f77d8c920a33236119b6c8e098a434766f6bcbacd1cdd/desbordante-2.3.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "aa12450d36ee8b95379f2615af332a7591f25aacccf1139c4d203861f67091e7",
"md5": "eda6a12094bdaca826d41f3aa801fd2e",
"sha256": "9152b3ddd0a1db2f18fed27346e7ee8490d63195be71bb49ca9a58bc1e9f285e"
},
"downloads": -1,
"filename": "desbordante-2.3.1-pp39-pypy39_pp73-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "eda6a12094bdaca826d41f3aa801fd2e",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 3259653,
"upload_time": "2025-02-01T21:42:44",
"upload_time_iso_8601": "2025-02-01T21:42:44.586347Z",
"url": "https://files.pythonhosted.org/packages/aa/12/450d36ee8b95379f2615af332a7591f25aacccf1139c4d203861f67091e7/desbordante-2.3.1-pp39-pypy39_pp73-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "70f8b0e5ac1721730fef398ba62e6cd47030e8a48871412338bdf8dea6efc170",
"md5": "62d06349070f435abdee1b449bd7c19d",
"sha256": "51a65d745971bfce47395109931dda4c692c2dec9c6d98473417f34fcf6886d6"
},
"downloads": -1,
"filename": "desbordante-2.3.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "62d06349070f435abdee1b449bd7c19d",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 3985257,
"upload_time": "2025-02-01T21:42:47",
"upload_time_iso_8601": "2025-02-01T21:42:47.139707Z",
"url": "https://files.pythonhosted.org/packages/70/f8/b0e5ac1721730fef398ba62e6cd47030e8a48871412338bdf8dea6efc170/desbordante-2.3.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-01 21:41:45",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "desbordante",
"github_project": "desbordante-core",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "desbordante"
}