{ "info": { "author": "MIT Data To AI Lab", "author_email": "dailabmit@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "

\n\u201cCopulas\u201d\nAn open source project from Data to AI Lab at MIT.\n

\n\n\n\n[![PyPi Shield](https://img.shields.io/pypi/v/copulas.svg)](https://pypi.python.org/pypi/copulas)\n[![Travis CI Shield](https://travis-ci.org/DAI-Lab/Copulas.svg?branch=master)](https://travis-ci.org/DAI-Lab/Copulas)\n[![Coverage Status](https://codecov.io/gh/DAI-Lab/Copulas/branch/master/graph/badge.svg)](https://codecov.io/gh/DAI-Lab/Copulas)\n[![Downloads](https://pepy.tech/badge/copulas)](https://pepy.tech/project/copulas)\n\n\n# Copulas\n\n* Free software: MIT license\n* Documentation: https://DAI-Lab.github.io/Copulas\n* Homepage: https://github.com/DAI-Lab/Copulas\n\n# Overview\n\nCopulas is a python library for building multivariate distributuions using\n[copulas](https://en.wikipedia.org/wiki/Copula_%28probability_theory%29) and using them\nfor sampling. In short, you give a table of numerical data without missing values as a\n2-dimensional `numpy.ndarray` and copulas models its distribution and using it to generate\nnew records, or analyze its statistical properties.\n\nThis repository contains multiple implementations of bivariate and multivariate copulas,\nfurther functionality include:\n\n* Most usual statistical functions from the underlying distribution.\n* Built-in inverse-transform sampling method.\n* Easy save and load of models.\n* Create copulas directly from their parameters.\n\n## Supported Copulas\n\n### Bivariate copulas\n\n* Clayton\n* Frank\n* Gumbel\n* Independence\n\n### Multivariate\n\n* Gaussian [[+ info]](https://en.wikipedia.org/wiki/Copula_%28probability_theory%29#Gaussian_copula)\n* D-Vine\n* C-Vine\n* R-Vine\n\n# Install\n\n## Requirements\n\n**Copulas** has been developed and tested on [Python 3.5, and 3.6](https://www.python.org/downloads/)\n\nAlso, although it is not strictly required, the usage of a [virtualenv](https://virtualenv.pypa.io/en/latest/)\nis highly recommended in order to avoid interfering with other software installed in the system where **Copulas**\nis run.\n\nThese are the minimum commands needed to create a virtualenv using python3.6 for **Copulas**:\n\n```bash\npip install virtualenv\nvirtualenv -p $(which python3.6) copulas-venv\n```\n\nAfterwards, you have to execute this command to have the virtualenv activated:\n\n```bash\nsource copulas-venv/bin/activate\n```\n\nRemember about executing it every time you start a new console to work on **Copulas**!\n\n\n## Install with pip\n\nAfter creating the virtualenv and activating it, we recommend using\n[pip](https://pip.pypa.io/en/stable/) in order to install **Copulas**:\n\n```bash\npip install copulas\n```\n\nThis will pull and install the latest stable release from [PyPi](https://pypi.org/).\n\n## Install from source\n\nAlternatively, with your virtualenv activated, you can clone the repository and install it from\nsource by running `make install` on the `stable` branch:\n\n```bash\ngit clone git@github.com:DAI-Lab/Copulas.git\ncd Copulas\ngit checkout stable\nmake install\n```\n\n## Install for Development\n\nIf you want to contribute to the project, a few more steps are required to make the project ready\nfor development.\n\nFirst, please head to [the GitHub page of the project](https://github.com/DAI-Lab/Copulas)\nand make a fork of the project under you own username by clicking on the **fork** button on the\nupper right corner of the page.\n\nAfterwards, clone your fork and create a branch from master with a descriptive name that includes\nthe number of the issue that you are going to work on:\n\n```bash\ngit clone git@github.com:{your username}/Copulas.git\ncd Copulas\ngit branch issue-xx-cool-new-feature master\ngit checkout issue-xx-cool-new-feature\n```\n\nFinally, install the project with the following command, which will install some additional\ndependencies for code linting and testing.\n\n```bash\nmake install-develop\n```\n\nMake sure to use them regularly while developing by running the commands `make lint` and\n`make test`.\n\n\n# Concepts\n\n## Probability\n\nWe call **probability** `P` to the measure assigned to the chance of an event happening.\nFor example, in a dice, there are 6 sides, each with the same chance of being on top.\n\nIf we consider `0` to be **impossible** and `1` **absolute certain**, we can explain\nits probability like this:\n\n```text\nTable of values for probability P\n\n \u00b7 -> 1/6\n : -> 1/6\n :\u00b7 -> 1/6\n :: -> 1/6\n :\u00b7: -> 1/6\n ::: -> 1/6\n```\n\n## Random variable\n\nA **random variable** `X` is a function mapping elements from the sample space\n(in our case, the dice sides) into \u211d.\n\nIn our case we have:\n\n```text\nTable of values for random variable X and their probability P\n X P\n \u00b7 -> 1 -> 1/6\n : -> 2 -> 1/6\n :\u00b7 -> 3 -> 1/6\n :: -> 4 -> 1/6\n :\u00b7: -> 5 -> 1/6\n ::: -> 6 -> 1/6\n```\n\n## Distribution\n\nA **distribution** is a function that describes the behavior of a **random variable**,\nlike rolling a dice, and the probability of events related to them.\n\nUsually a distribution is presented as a function F: \u211d -> [0, 1], called the\n**cumulative distribution function** or **cdf**, that has the following properties:\n\n* Is strictly **non-decreasing**\n* Is **right-continous**\n* It's limit to negative infinity exists and is 0.\n* It's limit to positive infinite exists and is 1.\n\nBelow we can see the cdf of the distribution of rolling a standard, 6 sided, dice:\n\n\"CDF\n\nWe can see as the cumulative probability raises by steps of 1/6 at each integer between 1 and 6,\nas those are the only values that can appear.\n\n## Types of distributions\n\nThere are as many different distributions as different random phenomenon, but usually we classify\nthem using this three aspects:\n\n* Continuity: We call a random variable a **continous random variable** if it's `cdf` is\n continuous, that it have no steps. Otherwise, we call it **discrete random variable**.\n In the example of the dice, we have discrete random variable.\n* Dimensionality: When a random variable represents the behavior of a single random phenomenon,\n we call it a **univariate distribution**, analogously we define **bivariate** and\n **multivariate** distributions.\n* Type: Most distribution have a type, defined by its behavior, some of the most common types of\n distributions are: **uniform**, **gaussian**, **exponential**,...\n\n## Copulas\n\nCopulas are multivariate distributions whose marginals are uniform. Using them with distributions\nto model the marginals they allow us to generate **multivariate random variables** for any kind\nof phenomena.\n\n# Quickstart\n\nIn this short tutorial we will guide you through the a series of steps that will help you getting\nstarted with the most basic usage of **Copulas** in order to generate samples from a simple\ndataset.\n\n**NOTE:** To be able to run this demo you will need to install the package from its sources.\n\n## 1. Load the data\n\nThe first step is to load the data we will use to fit **Copulas**. In order to do so, we will\nfirst import the module `pandas` and call its function `read_csv` with the path to our\nexample dataset.\n\nIn this case, we will load the `iris` dataset into a `pandas.DataFrame`.\n\n```python\nimport pandas as pd\ndata = pd.read_csv('data/iris.data.csv')\n```\n\nThis will be return us a dataframe with 4 columns:\n\n```\n 0 1 2\nfeature_01 5.1 4.9 4.7\nfeature_02 3.5 3.0 3.2\nfeature_03 1.4 1.4 1.3\nfeature_04 0.2 0.2 0.2\n```\n\n## 2. Create a Copula instance\n\nThe next step is to import Copulas and create an instance of the desired copulas.\n\nTo do so, we need to import the `copulas.multivariate.GaussianMultivariate` and call it, in order\nto create a GaussianMultivariate instance with the default arguments:\n\n```python\nfrom copulas.multivariate import GaussianMultivariate\ncopula = GaussianMultivariate()\n```\n\n## 3. Fit the model\n\nOnce we have a **Copulas** instance, we can proceed to call its `fit` method passing the `data`\nthat we loaded bfore in order to start the fitting process:\n\n```python\ncopula.fit(data)\n```\n\n## 4. Sample new data\n\nAfter the model has been fitted, we are ready to generate new samples by calling the `sample`\nmethod of the `Copulas` instance passing it the desired amount of samples:\n\n```python\nnum_samples = 1000\nsamples = copula.sample(num_samples)\n```\n\nThis will return a DataFrame with the same number of columns as the original data.\n\n```\n 0 1 2\nfeature_01 7.534814 7.255292 5.723322\nfeature_02 2.723615 2.959855 3.282245\nfeature_03 6.465199 6.896618 2.658393\nfeature_04 2.267646 2.442479 1.109811\n```\n\nThe returned object, `samples`, is a `pandas.DataFrame` containing a table of synthetic data with\nthe same format as the input data and 1000 rows as we requested.\n\n## 5. Load and save a model\n\nFor some copula models the fitting process can take a lot of time, so we probably would like to\navoid having to fit every we want to generate samples. Instead we can fit a model once, save it,\nand load it every time we want to sample new data.\n\nIf we have a fitted model, we can save it by calling it's `save` method, that only takes\nas argument the path where the model will be stored. Similarly, the `load` allows to load\na model stored on disk by passing as argument the path where the model is stored.\n\n```python\nmodel_path = 'mymodel.pkl'\ncopula.save(model_path)\n```\n\nOnce the model is saved, it can be loaded back as a **Copulas** instance by using the `load`\nmethod:\n\n**NOTE**: In order to load a saved model, you need to load it using the same class that was used to save it.\n\n```python\nnew_copula = GaussianMultivariate.load(model_path)\n```\n\nAt this point we could use this model instance to generate more samples.\n\n```python\nnew_samples = new_copula.sample(num_samples)\n```\n\n## 6. Extract and set parameters\n\nIn some cases it's more useful to obtain the parameters from a fitted copula than to save\nand load from disk.\n\nOnce our copula is fitted, we can extract it's parameters using the `to_dict` method:\n\n```python\ncopula_params = copula.to_dict()\n```\n\nThis will return a dictionary containing all the copula parameters:\n\n```\n{'covariance': [[1.006711409395973,\n -0.11010327176239859,\n 0.877604856347186,\n 0.8234432550696282],\n [-0.11010327176239859,\n 1.006711409395972,\n -0.4233383520816992,\n -0.3589370029669185],\n [0.877604856347186,\n -0.4233383520816992,\n 1.006711409395973,\n 0.9692185540781538],\n [0.8234432550696282,\n -0.3589370029669185,\n 0.9692185540781538,\n 1.006711409395974]],\n 'distribs': {'feature_01': {'type': 'copulas.univariate.gaussian.GaussianUnivariate',\n 'fitted': True,\n 'constant_value': None,\n 'mean': 5.843333333333334,\n 'std': 0.8253012917851409},\n 'feature_02': {'type': 'copulas.univariate.gaussian.GaussianUnivariate',\n 'fitted': True,\n 'constant_value': None,\n 'mean': 3.0540000000000003,\n 'std': 0.4321465800705435},\n 'feature_03': {'type': 'copulas.univariate.gaussian.GaussianUnivariate',\n 'fitted': True,\n 'constant_value': None,\n 'mean': 3.758666666666666,\n 'std': 1.7585291834055212},\n 'feature_04': {'type': 'copulas.univariate.gaussian.GaussianUnivariate',\n 'fitted': True,\n 'constant_value': None,\n 'mean': 1.1986666666666668,\n 'std': 0.7606126185881716}},\n 'type': 'copulas.multivariate.gaussian.GaussianMultivariate',\n 'fitted': True,\n 'distribution': 'copulas.univariate.gaussian.GaussianUnivariate'}\n```\n\nOnce we have all the parameters we can create a new identical **Copula** instance by using the method `from_dict`:\n\n```python\nnew_copula = GaussianMultivariate.from_dict(copula_params)\n```\n\nAt this point we could use this model instance to generate more samples.\n\n```python\nnew_samples = new_copula.sample(num_samples)\n```\n\n# What's next?\n\nFor more details about **Copulas** and all its possibilities and features, please check the\n[documentation site](https://dai-lab.github.io/Copulas/).\n\nThere you can learn more about [how to contribute to Copulas](https://dai-lab.github.io/Copulas/contributing.html)\nin order to help us developing new features or cool ideas.\n\n# Credits\n\nCopulas is an open source project from the Data to AI Lab at MIT which has been built and maintained\nover the years by the following team:\n\n* Manuel Alvarez \n* Carles Sala \n* Jos\u00e9 David P\u00e9rez \n* (Alicia)Yi Sun \n* Andrew Montanez \n* Kalyan Veeramachaneni \n* paulolimac \n\n\n## Related Projects\n\n### SDV\n\n[SDV](https://github.com/HDI-Project/SDV), for Synthetic Data Vault, is the end-user library for\nsynthesizing data in development under the [HDI Project](https://hdi-dai.lids.mit.edu/).\nSDV allows you to easily model and sample relational datasets using Copulas thought a simple API.\nOther features include anonymization of Personal Identifiable Information (PII) and preserving\nrelational integrity on sampled records.\n\n### TGAN\n\n[TGAN](https://github.com/DAI-Lab/TGAN) is a GAN based model for synthesizing tabular data.\nIt's also developed by the [MIT's Data to AI Lab](https://dai-lab.github.io/) and is under\nactive development.\n\n\n# History\n\n## 0.2.3 (2019-09-17)\n\n### New Features\n\n* Add support to Python 3.7 - Issue [#53](https://github.com/DAI-Lab/Copulas/issues/53) by @JDTheRipperPC\n\n### General Improvements\n\n* Document RELEASE workflow - Issue [#105](https://github.com/DAI-Lab/Copulas/issues/105) by @JDTheRipperPC\n\n* Improve serialization of univariate distributions - Issue [#99](https://github.com/DAI-Lab/Copulas/issues/99) by @ManuelAlvarezC and @JDTheRipperPC\n\n### Bugs fixed\n\n* The method 'select_copula' of Bivariate return wrong CopulaType - Issue [#101](https://github.com/DAI-Lab/Copulas/issues/101) by @JDTheRipperPC\n\n## 0.2.2 (2019-07-31)\n\n### New Features\n\n* `truncnorm` distribution and a generic wrapper for `scipy.rv_continous` distributions - Issue [#27](https://github.com/DAI-Lab/Copulas/issues/27) by @amontanez, @csala and @ManuelAlvarezC\n* `Independence` bivariate copulas - Issue [#46](https://github.com/DAI-Lab/Copulas/issues/46) by @aliciasun, @csala and @ManuelAlvarezC\n* Option to select seed on random number generator - Issue [#63](https://github.com/DAI-Lab/Copulas/issues/63) by @echo66 and @ManuelAlvarezC\n* Option on Vine copulas to select number of rows to sample - Issue [#77](https://github.com/DAI-Lab/Copulas/issues/77) by @ManuelAlvarezC\n* Make copulas accept both scalars and arrays as arguments - Issues [#85](https://github.com/DAI-Lab/Copulas/issues/85) and [#90](https://github.com/DAI-Lab/Copulas/issues/90) by @ManuelAlvarezC\n\n### General Improvements\n\n* Ability to properly handle constant data - Issues [#57](https://github.com/DAI-Lab/Copulas/issues/57) and [#82](https://github.com/DAI-Lab/Copulas/issues/82) by @csala and @ManuelAlvarezC\n* Tests for analytics properties of copulas - Issue [#61](https://github.com/DAI-Lab/Copulas/issues/61) by @ManuelAlvarezC\n* Improved documentation - Issue [#96](https://github.com/DAI-Lab/Copulas/issues/96) by @ManuelAlvarezC\n\n### Bugs fixed\n\n* Fix bug on Vine copulas, that made it crash during the bivariate copula selection - Issue [#64](https://github.com/DAI-Lab/Copulas/issues/64) by @echo66 and @ManuelAlvarezC\n\n## 0.2.1 - Vine serialization\n\n* Add serialization to Vine copulas.\n* Add `distribution` as argument for the Gaussian Copula.\n* Improve Bivariate Copulas code structure to remove code duplication.\n* Fix bug in Vine Copulas sampling: 'Edge' object has no attribute 'index'\n* Improve code documentation.\n* Improve code style and linting tools configuration.\n\n## 0.2.0 - Unified API\n\n* New API for stats methods.\n* Standarize input and output to `numpy.ndarray`.\n* Increase unittest coverage to 90%.\n* Add methods to load/save copulas.\n* Improve Gaussian copula sampling accuracy.\n\n## 0.1.1 - Minor Improvements\n\n* Different Copula types separated in subclasses\n* Extensive Unit Testing\n* More pythonic names in the public API.\n* Stop using third party elements that will be deprected soon.\n* Add methods to sample new data on bivariate copulas.\n* New KDE Univariate copula\n* Improved examples with additional demo data.\n\n## 0.1.0 - First Release\n\n* First release on PyPI.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/DAI-Lab/Copulas", "keywords": "copulas", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "copulas", "package_url": "https://pypi.org/project/copulas/", "platform": "", "project_url": "https://pypi.org/project/copulas/", "project_urls": { "Homepage": "https://github.com/DAI-Lab/Copulas" }, "release_url": "https://pypi.org/project/copulas/0.2.3/", "requires_dist": [ "numpy (<1.17,>=1.13.1)", "pandas (<0.25,>=0.22.0)", "scipy (<1.3,>=0.19.1)", "exrex (<0.11,>=0.10.5)", "matplotlib (<4,>=2.2.2)", "boto3 (<1.10,>=1.7.47)", "docutils (<0.15,>=0.10)", "pytest (>=3.4.2) ; extra == 'dev'", "pytest-cov (>=2.6.0) ; extra == 'dev'", "bumpversion (>=0.5.3) ; extra == 'dev'", "pip (>=9.0.1) ; extra == 'dev'", "watchdog (>=0.8.3) ; extra == 'dev'", "m2r (>=0.2.0) ; extra == 'dev'", "Sphinx (>=1.7.1) ; extra == 'dev'", "sphinx-rtd-theme (>=0.2.4) ; extra == 'dev'", "flake8 (>=3.7.7) ; extra == 'dev'", "isort (>=4.3.4) ; extra == 'dev'", "autoflake (>=1.1) ; extra == 'dev'", "autopep8 (>=1.4.3) ; extra == 'dev'", "twine (>=1.10.0) ; extra == 'dev'", "wheel (>=0.30.0) ; extra == 'dev'", "coverage (>=4.5.1) ; extra == 'dev'", "tox (>=2.9.1) ; extra == 'dev'", "doc8 (==0.8.0) ; extra == 'dev'", "pydocstyle (==3.0.0) ; extra == 'dev'", "pytest (>=3.4.2) ; extra == 'test'", "pytest-cov (>=2.6.0) ; extra == 'test'" ], "requires_python": ">=3.5", "summary": "A python library for building different types of copulas and using them for sampling.", "version": "0.2.3" }, "last_serial": 5841820, "releases": { "0.0.0": [ { "comment_text": "", "digests": { "md5": "2b81670e4a13449f7c012e9eefd54e99", "sha256": "3385d453cf8786f386575dfe2d764683b91b5d17d15c30ebaa10c7e074dea1c0" }, "downloads": -1, "filename": "copulas-0.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2b81670e4a13449f7c012e9eefd54e99", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.4", "size": 3285, "upload_time": "2018-06-12T23:50:46", "url": "https://files.pythonhosted.org/packages/69/39/d4fd781238a17d7ed91bd9405bb644553e067d4bddcbbb682a86d8ca386a/copulas-0.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "802943802648ba78ca9fde1de207599f", "sha256": "66446e84332ec1ea3a493ac3025e299859aabb846247da5ee983d5b3385c59df" }, "downloads": -1, "filename": "copulas-0.0.0.tar.gz", "has_sig": false, "md5_digest": "802943802648ba78ca9fde1de207599f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 4898, "upload_time": "2018-06-12T23:50:48", "url": "https://files.pythonhosted.org/packages/06/8b/65bff94b212c69f7469c811c5f2b2fcf7f191e217c9d8c1c53d3999b7eb4/copulas-0.0.0.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "685e5f5330ddf180b3d4535233cecf90", "sha256": "05a6d011928daaad989d661d5a85992fa80c3bad7c09b77a03e87d3e299106e8" }, "downloads": -1, "filename": "copulas-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "685e5f5330ddf180b3d4535233cecf90", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22962, "upload_time": "2018-06-26T17:09:47", "url": "https://files.pythonhosted.org/packages/5a/e3/5ef2b9798e3f344d004d600edb13ffda7769d2c9595bd9784957c64e0ad5/copulas-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7d8ef2ccf07fca10d42e535db4d34297", "sha256": "9d19bdfed6ca8b8192189eefbd3245d33e5bed6ae6081386dbb7b1b6933a3a76" }, "downloads": -1, "filename": "copulas-0.1.0.tar.gz", "has_sig": false, "md5_digest": "7d8ef2ccf07fca10d42e535db4d34297", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29747, "upload_time": "2018-06-26T17:09:49", "url": "https://files.pythonhosted.org/packages/86/f1/c845784b508daf6ab8d66c723cbc231945616d4023f363d9967830c126a4/copulas-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "fbd1bb3305b0b70f59b3fe5990b7ad76", "sha256": "7c368486b7fff8cbd67ae7d896097dbab99268d2a0f32a246dd244a2c04f7df3" }, "downloads": -1, "filename": "copulas-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fbd1bb3305b0b70f59b3fe5990b7ad76", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.4", "size": 20557, "upload_time": "2018-08-23T14:38:55", "url": "https://files.pythonhosted.org/packages/77/9d/e1717bd9935c51d46570372e347eaacf37b6a6c5a14d2485a62b6e3bcede/copulas-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "139c5df5767586c4bc58f6d0a7bc60a8", "sha256": "d25166d91b1f2c90c4e4edcc4533f7357798c712d0e8bec321d91eae1a295e79" }, "downloads": -1, "filename": "copulas-0.1.1.tar.gz", "has_sig": false, "md5_digest": "139c5df5767586c4bc58f6d0a7bc60a8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 28593, "upload_time": "2018-08-23T14:38:57", "url": "https://files.pythonhosted.org/packages/96/21/af9707c9d175ed54a30d0194d10aeed1f9b37148596edbfb041ea11a8933/copulas-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "00ba9db4fce0721f72f3f91d2c61f383", "sha256": "8f77e35d181c61d10e59aed750a9178eb6df575547079a2c2d0dc101c1ad7a80" }, "downloads": -1, "filename": "copulas-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "00ba9db4fce0721f72f3f91d2c61f383", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.4", "size": 24689, "upload_time": "2018-09-14T12:53:16", "url": "https://files.pythonhosted.org/packages/1f/12/cd798e51fc433a387e58cc51f3ab180833d3abb84760782b50a1ececf6e3/copulas-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f7129c915aa26a1acf150862c2292307", "sha256": "4fca87d8a57265b19954412a0faa438ff83b9dad346f4ee495893ae33452ad3f" }, "downloads": -1, "filename": "copulas-0.2.0.tar.gz", "has_sig": false, "md5_digest": "f7129c915aa26a1acf150862c2292307", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 37999, "upload_time": "2018-09-14T12:53:18", "url": "https://files.pythonhosted.org/packages/9d/29/1e530bec44c80ccd381f50ff449a7c59ac758814def49caae5be43f64e4c/copulas-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "cf3930a462a0921261128713cf88397c", "sha256": "5089d65dfcc5f39af5a9b2e0de812176516170fa5b5a9b7e997cd1f82eed2596" }, "downloads": -1, "filename": "copulas-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cf3930a462a0921261128713cf88397c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.4", "size": 27413, "upload_time": "2019-01-17T12:35:30", "url": "https://files.pythonhosted.org/packages/23/7a/5360e88ca1b49178c2143195d23bbf7f2e4a9ab6a321439a09c9d84fa61e/copulas-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d61ff6886b638f68f7f07a7782ad318f", "sha256": "10c33ce3ab0348b385d15c3fb51ed085b9565c415a96055caf2b43d4163fdd28" }, "downloads": -1, "filename": "copulas-0.2.1.tar.gz", "has_sig": false, "md5_digest": "d61ff6886b638f68f7f07a7782ad318f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 39577, "upload_time": "2019-01-17T12:35:35", "url": "https://files.pythonhosted.org/packages/5e/ee/fee8146b60064dfaa9dddd2382fe16ccf546d6aa23cb9cd0141653a5dc9d/copulas-0.2.1.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "882e0181142b7bb00cd01e14a340e368", "sha256": "1856d88ab87cfb5c9c6f30e070efb8ab1d2f94829338dd9a312943ef43250d29" }, "downloads": -1, "filename": "copulas-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "882e0181142b7bb00cd01e14a340e368", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 42555, "upload_time": "2019-09-17T13:46:40", "url": "https://files.pythonhosted.org/packages/1a/12/0664b9019ba798636b8d06a09000cd94f04130b7f289ef1c01d3d33c021a/copulas-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "75f66f1ae7da40ca9774e9a3f4031f42", "sha256": "0754266ad332cbc391c23eab10893fa04ef257f55c13c225be6e44962e082045" }, "downloads": -1, "filename": "copulas-0.2.3.tar.gz", "has_sig": false, "md5_digest": "75f66f1ae7da40ca9774e9a3f4031f42", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 109392, "upload_time": "2019-09-17T13:46:42", "url": "https://files.pythonhosted.org/packages/1f/a9/79ba2921770e308ff505dc4b65faf54d4a0696de542358d3ad816eafcd1b/copulas-0.2.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "882e0181142b7bb00cd01e14a340e368", "sha256": "1856d88ab87cfb5c9c6f30e070efb8ab1d2f94829338dd9a312943ef43250d29" }, "downloads": -1, "filename": "copulas-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "882e0181142b7bb00cd01e14a340e368", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 42555, "upload_time": "2019-09-17T13:46:40", "url": "https://files.pythonhosted.org/packages/1a/12/0664b9019ba798636b8d06a09000cd94f04130b7f289ef1c01d3d33c021a/copulas-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "75f66f1ae7da40ca9774e9a3f4031f42", "sha256": "0754266ad332cbc391c23eab10893fa04ef257f55c13c225be6e44962e082045" }, "downloads": -1, "filename": "copulas-0.2.3.tar.gz", "has_sig": false, "md5_digest": "75f66f1ae7da40ca9774e9a3f4031f42", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 109392, "upload_time": "2019-09-17T13:46:42", "url": "https://files.pythonhosted.org/packages/1f/a9/79ba2921770e308ff505dc4b65faf54d4a0696de542358d3ad816eafcd1b/copulas-0.2.3.tar.gz" } ] }