# Tuplex: Blazing Fast Python Data Science
[![Build Status](https://dev.azure.com/leonhardspiegelberg/Tuplex%20-%20Open%20Source/_apis/build/status/tuplex.tuplex?branchName=master)](https://dev.azure.com/leonhardspiegelberg/Tuplex%20-%20Open%20Source/_build/latest?definitionId=2&branchName=master)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
![Supported python versions](https://img.shields.io/badge/python-3.8%20%7C%203.9%20%7C%203.10%20%7C%203.11-blue)
[![PyPi Downloads](https://img.shields.io/pypi/dm/tuplex)](https://img.shields.io/pypi/dm/tuplex)
[Website](https://tuplex.cs.brown.edu/) [Documentation](https://tuplex.cs.brown.edu/python-api.html)
Tuplex is a parallel big data processing framework that runs data science pipelines written in Python at the speed of compiled code.
Tuplex has similar Python APIs to [Apache Spark](https://spark.apache.org/) or [Dask](https://dask.org/), but rather than invoking the Python interpreter, Tuplex generates optimized LLVM bytecode for the given pipeline and input data set. Under the hood, Tuplex is based on data-driven compilation and dual-mode processing, two key techniques that make it possible for Tuplex to provide speed comparable to a pipeline written in hand-optimized C++.
You can join the discussion on Tuplex on our [Gitter community](https://gitter.im/tuplex/community) or read up more on the background of Tuplex in our [SIGMOD'21 paper](https://dl.acm.org/doi/abs/10.1145/3448016.3457244).
Contributions welcome!
### Contents
+ [Example](#example)
+ [Quickstart](#quickstart)
+ [Installation](#installation)
- [Docker image](#docker)
- [Pypi](#pypi)
+ [Building](#building)
- [MacOS build from source](#macos-build-from-source)
- [Ubuntu build from source](#ubuntu-build-from-source)
- [Customizing the build](#customizing-the-build)
+ [License](#license)
### Example
Tuplex can be used in python interactive mode, a jupyter notebook or by copying the below code to a file. To try it out, run the following example:
```python
from tuplex import *
c = Context()
res = c.parallelize([1, 2, None, 4]).map(lambda x: (x, x * x)).collect()
# this prints [(1, 1), (2, 4), (4, 16)]
print(res)
```
### Quickstart
To try out Tuplex, simply try out the following starter notebooks using Google Colab:
| Name | Link | Description |
|--------------------------------|------------------|------------------------------------------------------------|
| 1. Intro to Tuplex | [Google Colab](https://colab.research.google.com/drive/1idqCRmvN-9_F2naJ6k1hbslbQT-2bAqa?usp=sharing) | Basic commands to manipulate columns and modify data with user code. |
| 2. Working with Files | [Google Colab](https://colab.research.google.com/drive/10gOYUpxK_Bjkw11WYupuaflATsBPRgU0?usp=sharing) | Loading and saving files, detecting types. |
More examples can be found [here](https://tuplex.cs.brown.edu/gettingstarted.html).
### Installation
To install Tuplex, you can use a PyPi package for Linux or MacOS(Intel), or a Docker container which will launch a jupyter notebook with Tuplex preinstalled.
#### Docker
```
docker run -p 8888:8888 tuplex/tuplex:v0.3.6
```
#### PyPI
```
pip install tuplex
```
### Building
Tuplex is available for MacOS and Linux. The current version has been tested under MacOS 10.13+ and Ubuntu 20.04/22.04 LTS.
To install Tuplex, simply install the dependencies first and then build the package.
#### MacOS build from source
To build Tuplex, you need several other packages first which can be easily installed via [brew](https://brew.sh/). If you want to build Tuplex with AWS support, you need `macOS 10.13+`. Python 3.9 or earlier requires an older cloudpickle version (1.6.0) whereas Python 3.10+ requires cloudpickle 2.1.0+.
```
brew install llvm@9 boost boost-python3 aws-sdk-cpp pcre2 antlr4-cpp-runtime googletest gflags yaml-cpp celero protobuf libmagic
python3 -m pip install 'cloudpickle<2.0' numpy
python3 setup.py install --user
```
#### Ubuntu build from source
To faciliate installing the dependencies for Ubuntu, we do provide two scripts (`scripts/ubuntu2004/install_reqs.sh` for Ubuntu 20.04, or `scripts/ubuntu2204/install_reqs.sh` for Ubuntu 22.04). To create an up to date version of Tuplex, simply run
```
./scripts/ubuntu2204/install_reqs.sh
python3 -m pip install cloudpickle numpy
python3 setup.py install --user
```
#### Customizing the build
Besides building a pip package, especially for development it may be more useful to invoke cmake directly. To create a development version of Tuplex and work with it like a regular cmake project, go to the folder `tuplex` and then use the standard workflow to compile the package via cmake (and not the top-level setup.py file):
```
mkdir build
cd build
cmake ..
make -j$(nproc)
```
The python package corresponding to Tuplex can be then found in `build/dist/python` with C++ test executables based on googletest in `build/dist/bin`. If you'd like to use a cmake-compatible IDE like CLion or VSCode you can simply open the `tuplex/` folder and import the `CMakeLists.txt` contained there.
To customize the cmake build, the following options are available to be passed via `-D<option>=<value>`:
| option | values | description |
| ------ |-------------------------------------------------------------------------| ----------- |
| `CMAKE_BUILD_TYPE` | `Release` (default), `Debug`, `RelWithDebInfo`, `tsan`, `asan`, `ubsan` | select compile mode. Tsan/Asan/Ubsan correspond to Google Sanitizers. |
| `BUILD_WITH_AWS` | `ON` (default), `OFF` | build with AWS SDK or not. On Ubuntu this will build the Lambda executor. |
| `BUILD_WITH_ORC` | `ON`, `OFF` (default) | build with ORC file format support. |
| `BUILD_NATIVE` | `ON`, `OFF` (default) | build with `-march=native` to target platform architecture. |
| `SKIP_AWS_TESTS` | `ON` (default), `OFF` | skip aws tests, helpful when no AWS credentials/AWS Tuplex chain is setup. |
| `GENERATE_PDFS` | `ON`, `OFF` (default) | output in Debug mode PDF files if graphviz is installed (e.g., `brew install graphviz`) for ASTs of UDFs, query plans, ...|
| `PYTHON3_VERSION` | `3.8`, ... | when trying to select a python3 version to build against, use this by specifying `major.minor`. To specify the python executable, use the options provided by [cmake](https://cmake.org/cmake/help/git-stage/module/FindPython3.html). |
| `LLVM_ROOT_DIR` | e.g. `/usr/lib/llvm-9` | specify which LLVM version to use |
| `BOOST_DIR` | e.g. `/opt/boost` | specify which Boost version to use. Note that the python component of boost has to be built against the python version used to build Tuplex |
For example, to create a debug build which outputs PDFs use the following snippet:
```
cmake -DCMAKE_BUILD_TYPE=Debug -DGENERATE_PDFS=ON ..
```
### License
Tuplex is available under Apache 2.0 License, to cite the paper use:
```bibtex
@inproceedings{10.1145/3448016.3457244,
author = {Spiegelberg, Leonhard and Yesantharao, Rahul and Schwarzkopf, Malte and Kraska, Tim},
title = {Tuplex: Data Science in Python at Native Code Speed},
year = {2021},
isbn = {9781450383431},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3448016.3457244},
doi = {10.1145/3448016.3457244},
booktitle = {Proceedings of the 2021 International Conference on Management of Data},
pages = {1718–1731},
numpages = {14},
location = {Virtual Event, China},
series = {SIGMOD/PODS '21}
}
```
---
(c) 2017-2023 Tuplex contributors
Raw data
{
"_id": null,
"home_page": "https://tuplex.cs.brown.edu",
"name": "tuplex",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8.0",
"maintainer_email": "",
"keywords": "ETL BigData Python LLVM UDF Data Analytics",
"author": "Leonhard Spiegelberg",
"author_email": "tuplex@cs.brown.edu",
"download_url": "",
"platform": null,
"description": "# Tuplex: Blazing Fast Python Data Science\n\n[![Build Status](https://dev.azure.com/leonhardspiegelberg/Tuplex%20-%20Open%20Source/_apis/build/status/tuplex.tuplex?branchName=master)](https://dev.azure.com/leonhardspiegelberg/Tuplex%20-%20Open%20Source/_build/latest?definitionId=2&branchName=master)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n![Supported python versions](https://img.shields.io/badge/python-3.8%20%7C%203.9%20%7C%203.10%20%7C%203.11-blue)\n[![PyPi Downloads](https://img.shields.io/pypi/dm/tuplex)](https://img.shields.io/pypi/dm/tuplex)\n\n[Website](https://tuplex.cs.brown.edu/) [Documentation](https://tuplex.cs.brown.edu/python-api.html)\n\nTuplex is a parallel big data processing framework that runs data science pipelines written in Python at the speed of compiled code.\nTuplex has similar Python APIs to [Apache Spark](https://spark.apache.org/) or [Dask](https://dask.org/), but rather than invoking the Python interpreter, Tuplex generates optimized LLVM bytecode for the given pipeline and input data set. Under the hood, Tuplex is based on data-driven compilation and dual-mode processing, two key techniques that make it possible for Tuplex to provide speed comparable to a pipeline written in hand-optimized C++.\n\nYou can join the discussion on Tuplex on our [Gitter community](https://gitter.im/tuplex/community) or read up more on the background of Tuplex in our [SIGMOD'21 paper](https://dl.acm.org/doi/abs/10.1145/3448016.3457244).\n\nContributions welcome!\n\n\n### Contents\n+ [Example](#example)\n+ [Quickstart](#quickstart)\n+ [Installation](#installation)\n - [Docker image](#docker)\n - [Pypi](#pypi)\n+ [Building](#building)\n - [MacOS build from source](#macos-build-from-source)\n - [Ubuntu build from source](#ubuntu-build-from-source)\n - [Customizing the build](#customizing-the-build)\n+ [License](#license)\n\n### Example\nTuplex can be used in python interactive mode, a jupyter notebook or by copying the below code to a file. To try it out, run the following example:\n\n```python\nfrom tuplex import *\nc = Context()\nres = c.parallelize([1, 2, None, 4]).map(lambda x: (x, x * x)).collect()\n# this prints [(1, 1), (2, 4), (4, 16)]\nprint(res)\n```\n### Quickstart\nTo try out Tuplex, simply try out the following starter notebooks using Google Colab:\n\n| Name | Link | Description |\n|--------------------------------|------------------|------------------------------------------------------------|\n| 1. Intro to Tuplex | [Google Colab](https://colab.research.google.com/drive/1idqCRmvN-9_F2naJ6k1hbslbQT-2bAqa?usp=sharing) | Basic commands to manipulate columns and modify data with user code. |\n| 2. Working with Files | [Google Colab](https://colab.research.google.com/drive/10gOYUpxK_Bjkw11WYupuaflATsBPRgU0?usp=sharing) | Loading and saving files, detecting types. |\n\n\nMore examples can be found [here](https://tuplex.cs.brown.edu/gettingstarted.html).\n\n### Installation\nTo install Tuplex, you can use a PyPi package for Linux or MacOS(Intel), or a Docker container which will launch a jupyter notebook with Tuplex preinstalled.\n#### Docker\n```\ndocker run -p 8888:8888 tuplex/tuplex:v0.3.6\n```\n#### PyPI\n```\npip install tuplex\n```\n\n### Building\n\nTuplex is available for MacOS and Linux. The current version has been tested under MacOS 10.13+ and Ubuntu 20.04/22.04 LTS.\nTo install Tuplex, simply install the dependencies first and then build the package.\n\n#### MacOS build from source\nTo build Tuplex, you need several other packages first which can be easily installed via [brew](https://brew.sh/). If you want to build Tuplex with AWS support, you need `macOS 10.13+`. Python 3.9 or earlier requires an older cloudpickle version (1.6.0) whereas Python 3.10+ requires cloudpickle 2.1.0+.\n```\nbrew install llvm@9 boost boost-python3 aws-sdk-cpp pcre2 antlr4-cpp-runtime googletest gflags yaml-cpp celero protobuf libmagic\npython3 -m pip install 'cloudpickle<2.0' numpy\npython3 setup.py install --user\n```\n\n#### Ubuntu build from source\nTo faciliate installing the dependencies for Ubuntu, we do provide two scripts (`scripts/ubuntu2004/install_reqs.sh` for Ubuntu 20.04, or `scripts/ubuntu2204/install_reqs.sh` for Ubuntu 22.04). To create an up to date version of Tuplex, simply run\n```\n./scripts/ubuntu2204/install_reqs.sh\npython3 -m pip install cloudpickle numpy\npython3 setup.py install --user\n```\n\n#### Customizing the build\n\nBesides building a pip package, especially for development it may be more useful to invoke cmake directly. To create a development version of Tuplex and work with it like a regular cmake project, go to the folder `tuplex` and then use the standard workflow to compile the package via cmake (and not the top-level setup.py file):\n```\nmkdir build\ncd build\ncmake ..\nmake -j$(nproc)\n```\nThe python package corresponding to Tuplex can be then found in `build/dist/python` with C++ test executables based on googletest in `build/dist/bin`. If you'd like to use a cmake-compatible IDE like CLion or VSCode you can simply open the `tuplex/` folder and import the `CMakeLists.txt` contained there.\n\nTo customize the cmake build, the following options are available to be passed via `-D<option>=<value>`:\n\n| option | values | description |\n| ------ |-------------------------------------------------------------------------| ----------- |\n| `CMAKE_BUILD_TYPE` | `Release` (default), `Debug`, `RelWithDebInfo`, `tsan`, `asan`, `ubsan` | select compile mode. Tsan/Asan/Ubsan correspond to Google Sanitizers. |\n| `BUILD_WITH_AWS` | `ON` (default), `OFF` | build with AWS SDK or not. On Ubuntu this will build the Lambda executor. |\n| `BUILD_WITH_ORC` | `ON`, `OFF` (default) | build with ORC file format support. |\n| `BUILD_NATIVE` | `ON`, `OFF` (default) | build with `-march=native` to target platform architecture. |\n| `SKIP_AWS_TESTS` | `ON` (default), `OFF` | skip aws tests, helpful when no AWS credentials/AWS Tuplex chain is setup. |\n| `GENERATE_PDFS` | `ON`, `OFF` (default) | output in Debug mode PDF files if graphviz is installed (e.g., `brew install graphviz`) for ASTs of UDFs, query plans, ...|\n| `PYTHON3_VERSION` | `3.8`, ... | when trying to select a python3 version to build against, use this by specifying `major.minor`. To specify the python executable, use the options provided by [cmake](https://cmake.org/cmake/help/git-stage/module/FindPython3.html). |\n| `LLVM_ROOT_DIR` | e.g. `/usr/lib/llvm-9` | specify which LLVM version to use |\n| `BOOST_DIR` | e.g. `/opt/boost` | specify which Boost version to use. Note that the python component of boost has to be built against the python version used to build Tuplex |\n\nFor example, to create a debug build which outputs PDFs use the following snippet:\n\n```\ncmake -DCMAKE_BUILD_TYPE=Debug -DGENERATE_PDFS=ON ..\n```\n\n### License\nTuplex is available under Apache 2.0 License, to cite the paper use:\n\n```bibtex\n@inproceedings{10.1145/3448016.3457244,\nauthor = {Spiegelberg, Leonhard and Yesantharao, Rahul and Schwarzkopf, Malte and Kraska, Tim},\ntitle = {Tuplex: Data Science in Python at Native Code Speed},\nyear = {2021},\nisbn = {9781450383431},\npublisher = {Association for Computing Machinery},\naddress = {New York, NY, USA},\nurl = {https://doi.org/10.1145/3448016.3457244},\ndoi = {10.1145/3448016.3457244},\nbooktitle = {Proceedings of the 2021 International Conference on Management of Data},\npages = {1718\u20131731},\nnumpages = {14},\nlocation = {Virtual Event, China},\nseries = {SIGMOD/PODS '21}\n}\n```\n\n---\n(c) 2017-2023 Tuplex contributors\n",
"bugtrack_url": null,
"license": "Apache 2.0",
"summary": "Tuplex is a novel big data analytics framework incorporating a Python UDF compiler based on LLVM together with a query compiler featuring whole-stage code generation and optimization.",
"version": "0.3.6",
"project_urls": {
"Bug Tracker": "https://github.com/tuplex",
"Documentation": "https://tuplex.cs.brown.edu/python-api.html",
"Homepage": "https://tuplex.cs.brown.edu",
"Source Code": "https://github.com/tuplex"
},
"split_keywords": [
"etl",
"bigdata",
"python",
"llvm",
"udf",
"data",
"analytics"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "f8a3e1462855f37c7caf8831fa69ac7806ff8cd07c22b8a019072d7006f9e40e",
"md5": "3f98a8b7ebd319ba9aeb80f1566466a2",
"sha256": "f9a67fb1edd9a86aa1cd1aaf589a193e6794c2bdbaf09d89812145424f489570"
},
"downloads": -1,
"filename": "tuplex-0.3.6-cp310-cp310-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "3f98a8b7ebd319ba9aeb80f1566466a2",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8.0",
"size": 29666571,
"upload_time": "2023-12-30T07:33:04",
"upload_time_iso_8601": "2023-12-30T07:33:04.680868Z",
"url": "https://files.pythonhosted.org/packages/f8/a3/e1462855f37c7caf8831fa69ac7806ff8cd07c22b8a019072d7006f9e40e/tuplex-0.3.6-cp310-cp310-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ffcf7d423da12f50bea18afeaed154bcf488e289b95a718996f00184cdacf68b",
"md5": "963873a16c6b27fa2d40ef347d4edf5b",
"sha256": "730b3e2dfc7a6db9b577316f640a79645fce48bdc0c7eb75ae98ad4dcac5954c"
},
"downloads": -1,
"filename": "tuplex-0.3.6-cp310-cp310-macosx_13_0_arm64.whl",
"has_sig": false,
"md5_digest": "963873a16c6b27fa2d40ef347d4edf5b",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8.0",
"size": 39122924,
"upload_time": "2023-12-30T07:33:10",
"upload_time_iso_8601": "2023-12-30T07:33:10.967039Z",
"url": "https://files.pythonhosted.org/packages/ff/cf/7d423da12f50bea18afeaed154bcf488e289b95a718996f00184cdacf68b/tuplex-0.3.6-cp310-cp310-macosx_13_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "41bad171412df402bb2970cd066dda6486e29a24d9c13ad176cf258b9a000ab9",
"md5": "43855e5d34071c5bc709dcde6f1cb457",
"sha256": "cb6c988b3f31a656e82d147a3c22c06e0d20489e1d0778cc7ff65f70c6564b57"
},
"downloads": -1,
"filename": "tuplex-0.3.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "43855e5d34071c5bc709dcde6f1cb457",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8.0",
"size": 163562884,
"upload_time": "2023-12-30T07:33:19",
"upload_time_iso_8601": "2023-12-30T07:33:19.421102Z",
"url": "https://files.pythonhosted.org/packages/41/ba/d171412df402bb2970cd066dda6486e29a24d9c13ad176cf258b9a000ab9/tuplex-0.3.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b2f47bfcf8de7acc2ac8806e59817e7c5ca54b02a2545e776ed3d19c7e453f70",
"md5": "8da5082f4502b7944ec4f59196f59f88",
"sha256": "0e77efa3dda2c204c1169f37dafde973825f28855645b5f437bac08dd0debe69"
},
"downloads": -1,
"filename": "tuplex-0.3.6-cp311-cp311-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "8da5082f4502b7944ec4f59196f59f88",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8.0",
"size": 29667095,
"upload_time": "2023-12-30T07:33:25",
"upload_time_iso_8601": "2023-12-30T07:33:25.682234Z",
"url": "https://files.pythonhosted.org/packages/b2/f4/7bfcf8de7acc2ac8806e59817e7c5ca54b02a2545e776ed3d19c7e453f70/tuplex-0.3.6-cp311-cp311-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6f656862ac0ed7ba43093b67cb578b46a22687c738ac7d6ef0167083a9812510",
"md5": "ef869d5b24e4672e1485a75280f2cc42",
"sha256": "980480f9e4d25cdc1b68b48a1cfdf5faaf69573bb5e9b3f5915f3f8ce1111254"
},
"downloads": -1,
"filename": "tuplex-0.3.6-cp311-cp311-macosx_13_0_arm64.whl",
"has_sig": false,
"md5_digest": "ef869d5b24e4672e1485a75280f2cc42",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8.0",
"size": 39123090,
"upload_time": "2023-12-30T07:33:29",
"upload_time_iso_8601": "2023-12-30T07:33:29.771092Z",
"url": "https://files.pythonhosted.org/packages/6f/65/6862ac0ed7ba43093b67cb578b46a22687c738ac7d6ef0167083a9812510/tuplex-0.3.6-cp311-cp311-macosx_13_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6cc0c50e90248abdb2bf03303b7ed13284a228d740ee7129544b589d0199fc0e",
"md5": "c1bfba3852dfdff59acbe3005cecdfc0",
"sha256": "f6c936d556efe2edaf80a66792773da674664a362ef39897ff1b83f86f57a3eb"
},
"downloads": -1,
"filename": "tuplex-0.3.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "c1bfba3852dfdff59acbe3005cecdfc0",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8.0",
"size": 178437603,
"upload_time": "2023-12-30T07:33:39",
"upload_time_iso_8601": "2023-12-30T07:33:39.922432Z",
"url": "https://files.pythonhosted.org/packages/6c/c0/c50e90248abdb2bf03303b7ed13284a228d740ee7129544b589d0199fc0e/tuplex-0.3.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3c3ca643cc3873e92940b5204e5b6cfef17ecad071563ae02337c9543979584d",
"md5": "553b13c5e22d1e41ac545f428d486e82",
"sha256": "dddb286ae2a9e68a17449d02500899bee5564e1f21419e7e584266a093912701"
},
"downloads": -1,
"filename": "tuplex-0.3.6-cp38-cp38-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "553b13c5e22d1e41ac545f428d486e82",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.0",
"size": 29667085,
"upload_time": "2023-12-30T07:33:46",
"upload_time_iso_8601": "2023-12-30T07:33:46.363937Z",
"url": "https://files.pythonhosted.org/packages/3c/3c/a643cc3873e92940b5204e5b6cfef17ecad071563ae02337c9543979584d/tuplex-0.3.6-cp38-cp38-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "14c4a05c8ecabf9a87a4adcce7d84dd4d12336cefaef9d4f0d50c9e896ef0afe",
"md5": "e06b929442ef177628c28fd3b8dee047",
"sha256": "576d6f9c8c88ae97dfcd928370b95dd346500860fd9dbf61c23e657648cd9ee9"
},
"downloads": -1,
"filename": "tuplex-0.3.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "e06b929442ef177628c28fd3b8dee047",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8.0",
"size": 136182141,
"upload_time": "2023-12-30T07:33:53",
"upload_time_iso_8601": "2023-12-30T07:33:53.307422Z",
"url": "https://files.pythonhosted.org/packages/14/c4/a05c8ecabf9a87a4adcce7d84dd4d12336cefaef9d4f0d50c9e896ef0afe/tuplex-0.3.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "67468dde6059817329ff7a9a578a5accc6f8ceacdcbe68c1800df89b6b89fcac",
"md5": "ffc476b0fe4668c9790f1b31263cfa65",
"sha256": "975c899d79bf77b3ef4d40606cf52e7420745ce714324b6438542a66218a9299"
},
"downloads": -1,
"filename": "tuplex-0.3.6-cp39-cp39-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "ffc476b0fe4668c9790f1b31263cfa65",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8.0",
"size": 29666217,
"upload_time": "2023-12-30T07:33:59",
"upload_time_iso_8601": "2023-12-30T07:33:59.017091Z",
"url": "https://files.pythonhosted.org/packages/67/46/8dde6059817329ff7a9a578a5accc6f8ceacdcbe68c1800df89b6b89fcac/tuplex-0.3.6-cp39-cp39-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "54459a52673fbf5644758fbab346431edb8b8f8a585e29c4fea9746d57c6c2d3",
"md5": "48c7b47e0285eec6b469e6c6cca9c7ba",
"sha256": "51e58163ddda4f9a8f1adfb93e4ccab4e3f826e2166df8d887dc62ece2a0b599"
},
"downloads": -1,
"filename": "tuplex-0.3.6-cp39-cp39-macosx_13_0_arm64.whl",
"has_sig": false,
"md5_digest": "48c7b47e0285eec6b469e6c6cca9c7ba",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8.0",
"size": 39122995,
"upload_time": "2023-12-30T07:34:05",
"upload_time_iso_8601": "2023-12-30T07:34:05.189267Z",
"url": "https://files.pythonhosted.org/packages/54/45/9a52673fbf5644758fbab346431edb8b8f8a585e29c4fea9746d57c6c2d3/tuplex-0.3.6-cp39-cp39-macosx_13_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "764625f0f6aa90d94012d23181fed46953acd577dd3288b0936d77256caf88f2",
"md5": "85c86dcd0e7a3eee19a0300ec237bd60",
"sha256": "3c6365e5fbf54773a9796f1a9de87fdfd0a25be65b4ecf98676162c989786652"
},
"downloads": -1,
"filename": "tuplex-0.3.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "85c86dcd0e7a3eee19a0300ec237bd60",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8.0",
"size": 158426536,
"upload_time": "2023-12-30T07:34:13",
"upload_time_iso_8601": "2023-12-30T07:34:13.671458Z",
"url": "https://files.pythonhosted.org/packages/76/46/25f0f6aa90d94012d23181fed46953acd577dd3288b0936d77256caf88f2/tuplex-0.3.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-30 07:33:04",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "tuplex"
}