{ "info": { "author": null, "author_email": "Cormac Rynne ", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Scientific/Engineering :: Information Analysis", "Topic :: Scientific/Engineering :: Visualization", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "\n\n
\n\n

ABSplit

\nSplit your data into matching A/B/n groups\n\n![license](https://img.shields.io/badge/License-MIT-blue.svg)\n![version](https://img.shields.io/badge/version-1.4.5-blue.svg)\n![version](https://img.shields.io/badge/python-3-orange.svg)\n[![Downloads](https://static.pepy.tech/badge/absplit)](https://pepy.tech/project/absplit)\n[![Downloads](https://static.pepy.tech/badge/absplit/month)](https://pepy.tech/project/absplit)\n\n
\n\n
\n Table of Contents\n
    \n
  1. \n About The Project\n \n
  2. \n
  3. \n Getting Started\n \n
  4. \n
  5. Tutorials
  6. \n \n
  7. Usage
  8. \n
  9. API Reference
  10. \n
  11. Contributing
  12. \n
  13. License
  14. \n
  15. Contact
  16. \n
\n
\n\n## About the project\nABSplit is a python package that uses a genetic algorithm to generate as equal as possible A/B, A/B/C, or A/B/n test splits.\n\nThe project aims to provide a convenient and efficient way for splitting population data into distinct \ngroups (ABSplit), as well as and finding matching samples that closely resemble a given original sample (Match).\n\n\nWhether you have static population data or time series data, this Python package simplifies the process and allows you to \nanalyze and manipulate your population data.\n\nThis covers the following use cases:\n1. **ABSplit class**: Splitting an entire population into n groups by given proportions\n2. **Match class**: Finding a matching group in a population for a given sample\n\n### Calculation\n\nABSplit standardises the population data (so each metric is weighted as equally as possible), then pivots it into a \nthree-dimensional array, by metrics, individuals, and dates. \n\nThe selection from the genetic algorithm, along with its inverse, is applied across this array with broadcasting to \ncompute the dot products between the selection and the population data.\n\nAs a result, aggregated metrics for each group are calculated. The Mean Squared Error is calculated \nfor each metric within the groups and then summed for each metric. The objective of the cost function is to minimize the \noverall MSE between these two groups, ensuring the metrics of both groups track each other as similarly across time\nas possible.\n\n
\n \n
\n\n

(back to top)

\n\n## Getting Started\nUse the package manager [pip](https://pip.pypa.io/en/stable/) to install ABSplit and it's prerequisites.\n\nABSplit requires `pygad==3.0.1`\n\n### Installation\n\n```bash\npip install absplit\n```\n\n

(back to top)

\n\n## Tutorials\nPlease see [this colab](https://colab.research.google.com/drive/1gL7dxDJrtVoO5m1mSUWutdr7yas7sZwI?usp=sharing) for \na range of examples on how to use ABSplit and Match\n\n### Do it yourself\nSee [this colab](https://colab.research.google.com/drive/1SlCNnOtN4WCDTSJHsFrZtI7gKcXEl8-C?usp=sharing) to learn how \nABSplit works under the hood, and how to build your own group splitting tool using \n[PyGAD](https://pypi.org/project/pygad/),\n\n\n

(back to top)

\n\n## Usage\n\n```python\nfrom absplit import ABSplit\nimport pandas as pd\nimport datetime\nimport numpy as np\n\n# Synthetic data\ndata_dct = {\n 'date': [datetime.date(2030,4,1) + datetime.timedelta(days=x) for x in range(3)]*5,\n 'country': ['UK'] * 15,\n 'region': [item for sublist in [[x]*6 for x in ['z', 'y']] for item in sublist] + ['x']*3,\n 'city': [item for sublist in [[x]*3 for x in ['a', 'b', 'c', 'd', 'e']] for item in sublist],\n 'metric1': np.arange(0, 15, 1),\n 'metric2': np.arange(0, 150, 10)\n}\ndf = pd.DataFrame(data_dct)\n\n# Identify which columns are metrics, which is the time period, and what to split on\nkwargs = {\n 'metrics': ['metric1', 'metric2'],\n 'date_col': 'date',\n 'splitting': 'city'\n}\n\n# Initialise\nab = ABSplit(\n df=df,\n split=[.5, .5], # Split into 2 groups of equal size\n **kwargs,\n)\n\n# Generate split\nab.run()\n\n# Visualise generation fitness\nab.fitness()\n\n# Visualise data\nab.visualise()\n\n# Extract bin splits\ndf = ab.results\n\n# Extract data aggregated by bins\ndf_agg = ab.aggregations\n\n# Extract summary statistics\ndf_dist = ab.distributions # Population counts between groups\ndf_rmse = ab.rmse # RMSE between groups for each metric\ndf_mape = ab.mape # MAPE between groups for each metric\ndf_totals = ab.totals # Total sum of each metric for each group\n\n```\n

(back to top)

\n\n## API Reference\n### Absplit \n`ABSplit(df, metrics, splitting, date_col=None, ga_params={}, metric_weights={}, splits=[0.5, 0.5], size_penalty=0)`\n\nSplits population into n groups. Mutually exclusive, completely exhaustive\n\nArguments:\n* `df` (pd.DataFrame): Dataframe of population to be split\n* `metrics` (str, list): Name of, or list of names of, metric columns in DataFrame to be considered in split\n* `splitting` (str): Name of column that represents individuals in the population that is getting split. For example, if \nyou wanted to split a dataframe of US counties, this would be the county name column\n* `date_col` (str, optional): Name of column that represents time periods, if applicable. If left empty, it will\nperform a static split, i.e. not across timeseries, (default `None`)\n* `ga_params` (dict, optional): Parameters for the genetic algorithm `pygad.GA` module parameters, see \n[here](https://pygad.readthedocs.io/en/latest/README_pygad_ReadTheDocs.html#pygad-ga-class) for arguments you can pass\n(default: `{}`)\n* `splits` (list, optional): How many groups to split into, and relative size of the groups (default: `[0.5, 0.5]`,\n2 groups of equal size)\n* `size_penalty` (float, optional): Penalty weighting for differences in the population count between groups \n(default: `0`)\n* `sum_penalty` (float, optional): Penalty weighting for the sum of metrics over time. If this is greater than zero,\nit will add a penalty to the cost function that will try and make the sum of each metric the same for each group \n(default: `0`)\n* `cutoff_date` (str, optional): Cutoff date between fitting and validation data. For example, if you have data between \n2023-01-01 and 2023-03-01, and the cutoff date is 2023-02-01, the algorithm will only perform the fit on data between \n2023-01-01 and 2023-02-01. If `None`, it will fit on all available data. If cutoff date is provided, RMSE scores\n (gotten by using the `ab.rmse` attribute) will only be for validation period (i.e., from 2023-02-01 to end of \ntimeseries)\n* `missing_dates` (str, optional): How to deal with missing dates in time series data, options: `['drop_dates',\n'drop_population', '0', 'median']` (default: `median`)\n* `metric_weights` (dict, optional): Weights for each metric in the data. If you want the splitting to focus on \none metrics more than the other, you can prioritise this here (default: `{}`)\n\n\n### Match \n`Match(population, sample, metrics, splitting, date_col=None, ga_params={}, metric_weights={})`\n\nTakes DataFrame `sample` and finds a comparable group in `population`.\n\nArguments:\n* `population` (pd.DataFrame): Population to search for comparable group (**Must exclude sample data**)\n* `sample` (pd.DataFrame): Sample we are looking to find a match for.\n* `metrics` (str, list): Name of, or list of names of, metric columns in DataFrame\n* `splitting` (str): Name of column that represents individuals in the population that is getting split\n* `date_col` (str, optional): Name of column that represents time periods, if applicable. If left empty, it will\nperform a static split, i.e. not across timeseries, (default `None`)\n* `ga_params` (dict, optional): Parameters for the genetic algorithm `pygad.GA` module parameters, see \n[here](https://pygad.readthedocs.io/en/latest/README_pygad_ReadTheDocs.html#pygad-ga-class) for arguments you can pass\n(default: `{}`)\n* `splits` (list, optional): How many groups to split into, and relative size of the groups (default: `[0.5, 0.5]`,\n2 groups of equal size)\n* `metric_weights` (dict, optional): Weights for each metric in the data. If you want the splitting to focus on \none metrics more than the other, you can prioritise this here (default: `{}`)\n

(back to top)

\n\n## Contributing\n\nI welcome contributions to ABSplit! For major changes, please open an issue first\nto discuss what you would like to change.\n\nPlease make sure to update tests as appropriate.\n\n

(back to top)

\n\n## License\n\n[MIT](https://choosealicense.com/licenses/mit/)\n\n

(back to top)

\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": null, "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "dynamic": null, "home_page": null, "keywords": "absplit, a/b test, ab test, ab split, split, set formation, group formation", "license": null, "maintainer": null, "maintainer_email": null, "name": "absplit", "package_url": "https://pypi.org/project/absplit/", "platform": null, "project_url": "https://pypi.org/project/absplit/", "project_urls": { "Home": "https://github.com/cormac-rynne/absplit" }, "provides_extra": null, "release_url": "https://pypi.org/project/absplit/1.4.5/", "requires_dist": [ "pygad<=3.3.1", "scikit-learn", "numpy", "pandas", "seaborn" ], "requires_python": "<=3.11", "summary": "Generates A/B/n test groups", "version": "1.4.5", "yanked": false, "yanked_reason": null }, "last_serial": 23401809, "releases": { "0.1.2": [ { "comment_text": null, "digests": { "blake2b_256": "45b4df28da8aa2bd3660b41d70c05bfff4e27fb7e7c7f857bde92b39240123ac", "md5": "03439a85865d9c8d90b776205237fa70", "sha256": "52b7b78017b66318104e918bc3b4fc2bb0b4324a3704e27d4ce887147d663394" }, "downloads": -1, "filename": "absplit-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "03439a85865d9c8d90b776205237fa70", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.9.13", "size": 36640, "upload_time": "2023-02-05T15:27:13", "upload_time_iso_8601": "2023-02-05T15:27:13.088988Z", "url": "https://files.pythonhosted.org/packages/45/b4/df28da8aa2bd3660b41d70c05bfff4e27fb7e7c7f857bde92b39240123ac/absplit-0.1.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "52dadfaae37ae84ef46bc0d3515e587f488e97562d0e68de875d8a0887407595", "md5": "95dbe23c050058ac7456f6218281c6a3", "sha256": "e173154a39e5e6671a5fa65f861e6019a39ec31ff1618a2b09df70210e771dbc" }, "downloads": -1, "filename": "absplit-0.1.2.tar.gz", "has_sig": false, "md5_digest": "95dbe23c050058ac7456f6218281c6a3", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.9.13", "size": 42674, "upload_time": "2023-02-05T15:27:15", "upload_time_iso_8601": "2023-02-05T15:27:15.579061Z", "url": "https://files.pythonhosted.org/packages/52/da/dfaae37ae84ef46bc0d3515e587f488e97562d0e68de875d8a0887407595/absplit-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": null, "digests": { "blake2b_256": "30d631ff768865fc862ea721a59f07c441681c2e481ce7aa5c1d7f8030d0f305", "md5": "efeca5dade4cfb3e22032308840903fe", "sha256": "9bfdf00a4a1b52e5ba2ef513ebc508cf8ae35a07c2c7ef592abd428013ee1a68" }, "downloads": -1, "filename": "absplit-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "efeca5dade4cfb3e22032308840903fe", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.9.13", "size": 36539, "upload_time": "2023-02-05T16:15:26", "upload_time_iso_8601": "2023-02-05T16:15:26.229516Z", "url": "https://files.pythonhosted.org/packages/30/d6/31ff768865fc862ea721a59f07c441681c2e481ce7aa5c1d7f8030d0f305/absplit-0.1.3-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "c5c929f3aa317e7a7a0f84db82d08ebfa522b9a7a4d1c6c48c813c1c607cb9d9", "md5": "f2dce98b6b172a3253d92aa5e8daadf2", "sha256": "38a2b4ec0ac26aadd1e417e97a6fa2300f37e7550d4e4dc821b9a60b36ebd4d0" }, "downloads": -1, "filename": "absplit-0.1.3.tar.gz", "has_sig": false, "md5_digest": "f2dce98b6b172a3253d92aa5e8daadf2", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.9.13", "size": 42561, "upload_time": "2023-02-05T16:15:29", "upload_time_iso_8601": "2023-02-05T16:15:29.105670Z", "url": "https://files.pythonhosted.org/packages/c5/c9/29f3aa317e7a7a0f84db82d08ebfa522b9a7a4d1c6c48c813c1c607cb9d9/absplit-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.4": [ { "comment_text": null, "digests": { "blake2b_256": "b2eaafd67815cb488c01e980d73487c953ae6b0de7f44e6362db906ee0f00036", "md5": "f71452a5c421bef87a5ddbf33e756df1", "sha256": "113ce169a8cd65ae7d461a98c3407ae066e1c48fd4ee8ab84008db0d7bfc27cd" }, "downloads": -1, "filename": "absplit-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f71452a5c421bef87a5ddbf33e756df1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<3.11", "size": 36534, "upload_time": "2023-02-16T15:17:15", "upload_time_iso_8601": "2023-02-16T15:17:15.544708Z", "url": "https://files.pythonhosted.org/packages/b2/ea/afd67815cb488c01e980d73487c953ae6b0de7f44e6362db906ee0f00036/absplit-0.1.4-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "a0c960ba803f5196dd21a227c7b756fd6d54e936c9d604588f01f9f403484ace", "md5": "ded22b68517cb4d597d5da337f5c7ce5", "sha256": "cc325beaa046bf67f053d014bac37b3d6267a2fdfae92cc2c65dc2f9fa7b6e31" }, "downloads": -1, "filename": "absplit-0.1.4.tar.gz", "has_sig": false, "md5_digest": "ded22b68517cb4d597d5da337f5c7ce5", "packagetype": "sdist", "python_version": "source", "requires_python": "<3.11", "size": 42465, "upload_time": "2023-02-16T15:17:18", "upload_time_iso_8601": "2023-02-16T15:17:18.007626Z", "url": "https://files.pythonhosted.org/packages/a0/c9/60ba803f5196dd21a227c7b756fd6d54e936c9d604588f01f9f403484ace/absplit-0.1.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.5": [ { "comment_text": null, "digests": { "blake2b_256": "2dc354cf2c233af628828d2a5cf809d844914dc586796afdaab4e52a8aa6f7db", "md5": "7983112a8ad6bec68ac979fe1bd7e937", "sha256": "5f2b4bef1cc4fc87bdad1a787b53fb92994cd2a349d1f2982185c585339a503b" }, "downloads": -1, "filename": "absplit-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7983112a8ad6bec68ac979fe1bd7e937", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.11", "size": 37293, "upload_time": "2023-05-20T17:49:59", "upload_time_iso_8601": "2023-05-20T17:49:59.847460Z", "url": "https://files.pythonhosted.org/packages/2d/c3/54cf2c233af628828d2a5cf809d844914dc586796afdaab4e52a8aa6f7db/absplit-0.1.5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "bf570c1fa507f1cdebe8c7063d67b7ed13fb82fea0a48fe03f16e412c4a92cf5", "md5": "4129489eb7d354d4bee12c5f6e8cebc4", "sha256": "19ba5e212e3e022e9dbed58d7a6457c574890f3afe3db6a37f51173b3359249a" }, "downloads": -1, "filename": "absplit-0.1.5.tar.gz", "has_sig": false, "md5_digest": "4129489eb7d354d4bee12c5f6e8cebc4", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.11", "size": 43703, "upload_time": "2023-05-20T17:50:24", "upload_time_iso_8601": "2023-05-20T17:50:24.468653Z", "url": "https://files.pythonhosted.org/packages/bf/57/0c1fa507f1cdebe8c7063d67b7ed13fb82fea0a48fe03f16e412c4a92cf5/absplit-0.1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.0": [ { "comment_text": null, "digests": { "blake2b_256": "b9350c23a567df3b4b8f7b6aa9bf963fc87a754f6e2e0e2a5222dadafa8d6bf6", "md5": "7002600eb24e2abf083007e35ad5c709", "sha256": "dd6d52a64c3462610d420ae8115f06c822fb29565c9760c41c4cdc014c08f7a6" }, "downloads": -1, "filename": "absplit-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7002600eb24e2abf083007e35ad5c709", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.11", "size": 38155, "upload_time": "2023-06-05T23:19:29", "upload_time_iso_8601": "2023-06-05T23:19:29.120111Z", "url": "https://files.pythonhosted.org/packages/b9/35/0c23a567df3b4b8f7b6aa9bf963fc87a754f6e2e0e2a5222dadafa8d6bf6/absplit-1.0.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "be525ccd688712befe7f646a1a691797fe4108b58fcf71bb34a1bd840891eb4a", "md5": "71db21657827572981015046ef6159af", "sha256": "b1d25ddc493ef5af855212cc917e6ad0167344db3e2fc09c506921e47ad0a6bb" }, "downloads": -1, "filename": "absplit-1.0.0.tar.gz", "has_sig": false, "md5_digest": "71db21657827572981015046ef6159af", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.11", "size": 44587, "upload_time": "2023-06-05T23:19:47", "upload_time_iso_8601": "2023-06-05T23:19:47.814524Z", "url": "https://files.pythonhosted.org/packages/be/52/5ccd688712befe7f646a1a691797fe4108b58fcf71bb34a1bd840891eb4a/absplit-1.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.1": [ { "comment_text": null, "digests": { "blake2b_256": "df0bcbd7feba8643a56bbfdb8d9061d0e8e320cad2665254c9b94331ab447639", "md5": "807667e717c6af5b119e5871586441ee", "sha256": "7fc5bd5f5bf6a6f8756693a47426c058c7f062e13c75f0f689eda96b275c0ece" }, "downloads": -1, "filename": "absplit-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "807667e717c6af5b119e5871586441ee", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.11", "size": 38243, "upload_time": "2023-06-06T00:12:49", "upload_time_iso_8601": "2023-06-06T00:12:49.331469Z", "url": "https://files.pythonhosted.org/packages/df/0b/cbd7feba8643a56bbfdb8d9061d0e8e320cad2665254c9b94331ab447639/absplit-1.0.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "bb2825c1ee58672f7ae817b9653aafcbed0753a1a225379155940ad5adf57f59", "md5": "735d774169db927582eaffc24e66b275", "sha256": "7bfb45785447efc74570621a6050850de97fdaf72a88c47da5788d6466017855" }, "downloads": -1, "filename": "absplit-1.0.1.tar.gz", "has_sig": false, "md5_digest": "735d774169db927582eaffc24e66b275", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.11", "size": 44671, "upload_time": "2023-06-06T00:12:53", "upload_time_iso_8601": "2023-06-06T00:12:53.775041Z", "url": "https://files.pythonhosted.org/packages/bb/28/25c1ee58672f7ae817b9653aafcbed0753a1a225379155940ad5adf57f59/absplit-1.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.0": [ { "comment_text": null, "digests": { "blake2b_256": "37b28097966a1add8048680217334cda1945cfbfce2cddb4f9f240a3593d09ed", "md5": "a818aba15967784adc38763f2aec9c3e", "sha256": "f46d4ed5e2afdff67d15c67f068f68e5ead5512b930c5f8ad44aa387f7cbdbd9" }, "downloads": -1, "filename": "absplit-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a818aba15967784adc38763f2aec9c3e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.11", "size": 38511, "upload_time": "2023-06-12T08:40:50", "upload_time_iso_8601": "2023-06-12T08:40:50.472326Z", "url": "https://files.pythonhosted.org/packages/37/b2/8097966a1add8048680217334cda1945cfbfce2cddb4f9f240a3593d09ed/absplit-1.1.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "472b6fc8e9985b4b22ef0943efc22dedcde846d57354d7009d7a4c5d020b5827", "md5": "9a87ed331477f0aee52f4c08e0e1412c", "sha256": "4c8f4b457ce99ee671467cb43e89ddf52251af579ce77e8703219bee7035a5a5" }, "downloads": -1, "filename": "absplit-1.1.0.tar.gz", "has_sig": false, "md5_digest": "9a87ed331477f0aee52f4c08e0e1412c", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.11", "size": 45010, "upload_time": "2023-06-12T08:40:59", "upload_time_iso_8601": "2023-06-12T08:40:59.518218Z", "url": "https://files.pythonhosted.org/packages/47/2b/6fc8e9985b4b22ef0943efc22dedcde846d57354d7009d7a4c5d020b5827/absplit-1.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": null, "digests": { "blake2b_256": "1238d5f760093261aabc77c587e24ff8b98be2c36b9a6715eee0aa855ca18b10", "md5": "26b67bf0e31f98769346aa01ff7416cd", "sha256": "d4e66945fb95c3a0c1dc01d96cb8dc0e983fc43aebbf2721dac87c7ebe6b41e2" }, "downloads": -1, "filename": "absplit-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "26b67bf0e31f98769346aa01ff7416cd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.11", "size": 38852, "upload_time": "2023-06-14T16:59:47", "upload_time_iso_8601": "2023-06-14T16:59:47.674830Z", "url": "https://files.pythonhosted.org/packages/12/38/d5f760093261aabc77c587e24ff8b98be2c36b9a6715eee0aa855ca18b10/absplit-1.2.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "3e47e167ce310a7c25279a493f2c9cea6e6053026983d46e28ba17156fdc309b", "md5": "5a2e415d1a945a8981666be9fa0d7d06", "sha256": "9c4aa5759ceaaf1d7b15b65c4f6803fbc90bf78ae301b194e15644bb08466eae" }, "downloads": -1, "filename": "absplit-1.2.0.tar.gz", "has_sig": false, "md5_digest": "5a2e415d1a945a8981666be9fa0d7d06", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.11", "size": 45517, "upload_time": "2023-06-14T16:59:52", "upload_time_iso_8601": "2023-06-14T16:59:52.866835Z", "url": "https://files.pythonhosted.org/packages/3e/47/e167ce310a7c25279a493f2c9cea6e6053026983d46e28ba17156fdc309b/absplit-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.0": [ { "comment_text": null, "digests": { "blake2b_256": "18f51ff76c8e2c76d31f43538e3a7e2b3fd47bb533c4c968fde293afc0f08e39", "md5": "17189145432e98c72a2c9eeefce7b761", "sha256": "5ab3825403e1eb4a5e7a4896b8e7ca5cf33ecee07908948c751aad48dc4fa91e" }, "downloads": -1, "filename": "absplit-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "17189145432e98c72a2c9eeefce7b761", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.11", "size": 41289, "upload_time": "2023-06-18T23:20:34", "upload_time_iso_8601": "2023-06-18T23:20:34.907760Z", "url": "https://files.pythonhosted.org/packages/18/f5/1ff76c8e2c76d31f43538e3a7e2b3fd47bb533c4c968fde293afc0f08e39/absplit-1.3.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "f29966e14dd21c108e89da68dc4b84b403189caf9aef3b5941004f8abd94d62e", "md5": "17a468ec692ba602517bcf233773a139", "sha256": "a626bfd95cf96095b1766adabdeb6947aa1e1f9782dab85d9224f968880b036b" }, "downloads": -1, "filename": "absplit-1.3.0.tar.gz", "has_sig": false, "md5_digest": "17a468ec692ba602517bcf233773a139", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.11", "size": 47905, "upload_time": "2023-06-18T23:20:39", "upload_time_iso_8601": "2023-06-18T23:20:39.116321Z", "url": "https://files.pythonhosted.org/packages/f2/99/66e14dd21c108e89da68dc4b84b403189caf9aef3b5941004f8abd94d62e/absplit-1.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.1": [ { "comment_text": null, "digests": { "blake2b_256": "996fe9bb613ee7dbac54e72b6343177cd9b44e6e68720fbe2435b9b2b6b1fabf", "md5": "f8abe75162b041f91226407beb5da6e5", "sha256": "f8b3f8ce9ec30fc9e49abf15562b37b50f554001b8ac0a58b22034d12313fe78" }, "downloads": -1, "filename": "absplit-1.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f8abe75162b041f91226407beb5da6e5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.11", "size": 41291, "upload_time": "2023-06-18T23:25:23", "upload_time_iso_8601": "2023-06-18T23:25:23.927666Z", "url": "https://files.pythonhosted.org/packages/99/6f/e9bb613ee7dbac54e72b6343177cd9b44e6e68720fbe2435b9b2b6b1fabf/absplit-1.3.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "b0f0910c108fb20a572e6f4fd67837873e5831059077d81febf3617abcce6ce6", "md5": "d76ee79f1525791c99d15367839eadf6", "sha256": "5d41bab0132bd225fed75310e4f5033f9281dd3b6ff5789b5c35b20a0ed7f2c2" }, "downloads": -1, "filename": "absplit-1.3.1.tar.gz", "has_sig": false, "md5_digest": "d76ee79f1525791c99d15367839eadf6", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.11", "size": 47937, "upload_time": "2023-06-18T23:25:27", "upload_time_iso_8601": "2023-06-18T23:25:27.185335Z", "url": "https://files.pythonhosted.org/packages/b0/f0/910c108fb20a572e6f4fd67837873e5831059077d81febf3617abcce6ce6/absplit-1.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.0": [ { "comment_text": null, "digests": { "blake2b_256": "cadbbd31920d48e05f2e83921f3ef7e936efb94be25c4c8fe7a57050abfc66ad", "md5": "50adba9b4b105930578dc5da795c8efd", "sha256": "14104705a2938dc79ec64f19a943b16ee83f889841442311f42dd447946b6fa5" }, "downloads": -1, "filename": "absplit-1.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "50adba9b4b105930578dc5da795c8efd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.11", "size": 42551, "upload_time": "2023-07-01T23:01:07", "upload_time_iso_8601": "2023-07-01T23:01:07.941924Z", "url": "https://files.pythonhosted.org/packages/ca/db/bd31920d48e05f2e83921f3ef7e936efb94be25c4c8fe7a57050abfc66ad/absplit-1.4.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "688678f65e09776cc3eead6d191f5242147293de45bf7091b569789c7e63fe94", "md5": "64250b05f8b7c8b976120b9e208da893", "sha256": "b728afffa7d8a3cf4d86cd7b294fdd1de84bf523c3545574322a209915ed6f39" }, "downloads": -1, "filename": "absplit-1.4.0.tar.gz", "has_sig": false, "md5_digest": "64250b05f8b7c8b976120b9e208da893", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.11", "size": 49369, "upload_time": "2023-07-01T23:01:12", "upload_time_iso_8601": "2023-07-01T23:01:12.454436Z", "url": "https://files.pythonhosted.org/packages/68/86/78f65e09776cc3eead6d191f5242147293de45bf7091b569789c7e63fe94/absplit-1.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.1": [ { "comment_text": null, "digests": { "blake2b_256": "f8ea3a93dbaaf05bc460dab07fb9f017b57b06b3223e11de1fde07072b64b006", "md5": "231ddb398595db1007c91854b7c5b195", "sha256": "aef86f1e7202709142743e3aac606e51fc7a89d8aa079d22846fa5cb081dfbb5" }, "downloads": -1, "filename": "absplit-1.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "231ddb398595db1007c91854b7c5b195", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.11", "size": 42572, "upload_time": "2023-07-02T10:28:01", "upload_time_iso_8601": "2023-07-02T10:28:01.046274Z", "url": "https://files.pythonhosted.org/packages/f8/ea/3a93dbaaf05bc460dab07fb9f017b57b06b3223e11de1fde07072b64b006/absplit-1.4.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "81280b0c49eb8256278194b044696676b9e0d0378a0d0d9cdd8dee06d4bf7aad", "md5": "29ac1b0baf65f24e73a5b7d4a9b1f800", "sha256": "c556886d1f3390d639039d18125f0e3ce1df685e3c978ae2fd18e21f98ec08d4" }, "downloads": -1, "filename": "absplit-1.4.1.tar.gz", "has_sig": false, "md5_digest": "29ac1b0baf65f24e73a5b7d4a9b1f800", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.11", "size": 49385, "upload_time": "2023-07-02T10:28:05", "upload_time_iso_8601": "2023-07-02T10:28:05.056654Z", "url": "https://files.pythonhosted.org/packages/81/28/0b0c49eb8256278194b044696676b9e0d0378a0d0d9cdd8dee06d4bf7aad/absplit-1.4.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.2": [ { "comment_text": null, "digests": { "blake2b_256": "ed7e3a2eb488fc72994949de35b41e45a7ef27453a2aac08e2fcdcf39c7aa7ab", "md5": "8580a837946d141245e3853e2a753e56", "sha256": "0d92a980116c7d0669d9bd356a6dcc136cfff6481ed85aadc57d5bb5da2a7222" }, "downloads": -1, "filename": "absplit-1.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8580a837946d141245e3853e2a753e56", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.11", "size": 44726, "upload_time": "2023-07-02T21:48:01", "upload_time_iso_8601": "2023-07-02T21:48:01.335463Z", "url": "https://files.pythonhosted.org/packages/ed/7e/3a2eb488fc72994949de35b41e45a7ef27453a2aac08e2fcdcf39c7aa7ab/absplit-1.4.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "9b44e8f5506dd392629f4e14acb906e1eaf503367c7361e88805ebf047130db3", "md5": "dde7645bd9c79daaed7f4805f7a44b20", "sha256": "6fcb83d2679cb4e6663c581e3735f450b10b6a278d2b17011eba987f489a030c" }, "downloads": -1, "filename": "absplit-1.4.2.tar.gz", "has_sig": false, "md5_digest": "dde7645bd9c79daaed7f4805f7a44b20", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.11", "size": 52113, "upload_time": "2023-07-02T21:48:04", "upload_time_iso_8601": "2023-07-02T21:48:04.689952Z", "url": "https://files.pythonhosted.org/packages/9b/44/e8f5506dd392629f4e14acb906e1eaf503367c7361e88805ebf047130db3/absplit-1.4.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.4": [ { "comment_text": null, "digests": { "blake2b_256": "579683749e5a5905f120af2f1e552b0dbd874417a439d5f960a401e83eca1d72", "md5": "3915de92d6018e45f03dabc744941397", "sha256": "937d0188a193549f5f20ebe29c3bbc1cb5091ed6cabc7940a05d97e7abae25b4" }, "downloads": -1, "filename": "absplit-1.4.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3915de92d6018e45f03dabc744941397", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.11", "size": 314565, "upload_time": "2024-02-10T19:07:32", "upload_time_iso_8601": "2024-02-10T19:07:32.084659Z", "url": "https://files.pythonhosted.org/packages/57/96/83749e5a5905f120af2f1e552b0dbd874417a439d5f960a401e83eca1d72/absplit-1.4.4-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "9f021b86fb974a4ed9024063c9060aabd3beaf20c9d7997619786bf129b01ce3", "md5": "e093e5cfa83c878c886e2499fc8b7ec0", "sha256": "56343e5ead5d2cc4be78b72eed78ed95dc11393b9a8c55fb3ea9929fc10daf8e" }, "downloads": -1, "filename": "absplit-1.4.4.tar.gz", "has_sig": false, "md5_digest": "e093e5cfa83c878c886e2499fc8b7ec0", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.11", "size": 320943, "upload_time": "2024-02-10T19:07:34", "upload_time_iso_8601": "2024-02-10T19:07:34.819617Z", "url": "https://files.pythonhosted.org/packages/9f/02/1b86fb974a4ed9024063c9060aabd3beaf20c9d7997619786bf129b01ce3/absplit-1.4.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.5": [ { "comment_text": null, "digests": { "blake2b_256": "ca5ff0b80beeee6700472db3702691ffaaa3a7053b3209076d6f55ce482a57f7", "md5": "d179de9127314afd34d55ddef8ee2793", "sha256": "d9358797e41d964a2d2e9867f6a6af6677b785a89a6eeca6c6b80b7be69ca3b2" }, "downloads": -1, "filename": "absplit-1.4.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d179de9127314afd34d55ddef8ee2793", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.11", "size": 314609, "upload_time": "2024-05-27T20:58:39", "upload_time_iso_8601": "2024-05-27T20:58:39.693521Z", "url": "https://files.pythonhosted.org/packages/ca/5f/f0b80beeee6700472db3702691ffaaa3a7053b3209076d6f55ce482a57f7/absplit-1.4.5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "018e5c1fd4a088d2c81728eb90b2c79e9e4a672fd2af2c5d0f76db861847e505", "md5": "586aff21874603ea8008c0cab3e85d63", "sha256": "cb553a1135dce8238353ce1f4696289a03affa2e8d4082006a46501a8f14ad11" }, "downloads": -1, "filename": "absplit-1.4.5.tar.gz", "has_sig": false, "md5_digest": "586aff21874603ea8008c0cab3e85d63", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.11", "size": 321350, "upload_time": "2024-05-27T20:58:41", "upload_time_iso_8601": "2024-05-27T20:58:41.915938Z", "url": "https://files.pythonhosted.org/packages/01/8e/5c1fd4a088d2c81728eb90b2c79e9e4a672fd2af2c5d0f76db861847e505/absplit-1.4.5.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": null, "digests": { "blake2b_256": "ca5ff0b80beeee6700472db3702691ffaaa3a7053b3209076d6f55ce482a57f7", "md5": "d179de9127314afd34d55ddef8ee2793", "sha256": "d9358797e41d964a2d2e9867f6a6af6677b785a89a6eeca6c6b80b7be69ca3b2" }, "downloads": -1, "filename": "absplit-1.4.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d179de9127314afd34d55ddef8ee2793", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": "<=3.11", "size": 314609, "upload_time": "2024-05-27T20:58:39", "upload_time_iso_8601": "2024-05-27T20:58:39.693521Z", "url": "https://files.pythonhosted.org/packages/ca/5f/f0b80beeee6700472db3702691ffaaa3a7053b3209076d6f55ce482a57f7/absplit-1.4.5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": null, "digests": { "blake2b_256": "018e5c1fd4a088d2c81728eb90b2c79e9e4a672fd2af2c5d0f76db861847e505", "md5": "586aff21874603ea8008c0cab3e85d63", "sha256": "cb553a1135dce8238353ce1f4696289a03affa2e8d4082006a46501a8f14ad11" }, "downloads": -1, "filename": "absplit-1.4.5.tar.gz", "has_sig": false, "md5_digest": "586aff21874603ea8008c0cab3e85d63", "packagetype": "sdist", "python_version": "source", "requires_python": "<=3.11", "size": 321350, "upload_time": "2024-05-27T20:58:41", "upload_time_iso_8601": "2024-05-27T20:58:41.915938Z", "url": "https://files.pythonhosted.org/packages/01/8e/5c1fd4a088d2c81728eb90b2c79e9e4a672fd2af2c5d0f76db861847e505/absplit-1.4.5.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }