# obliquetree
`obliquetree` is an advanced decision tree implementation designed to provide high-performance and interpretable models. It supports both classification and regression tasks, enabling a wide range of applications. By offering traditional and oblique splits, it ensures flexibility and improved generalization with shallow trees. This makes it a powerful alternative to regular decision trees.
![Tree Visualization](docs/source/_static/tree_visual.png)
----
## Getting Started
`obliquetree` combines advanced capabilities with efficient performance. It supports **oblique splits**, leveraging **L-BFGS optimization** to determine the best linear weights for splits, ensuring both speed and accuracy.
In **traditional mode**, without oblique splits, `obliquetree` outperforms `scikit-learn` in terms of speed and adds support for **categorical variables**, providing a significant advantage over many traditional decision tree implementations.
When the **oblique feature** is enabled, `obliquetree` dynamically selects the optimal split type between oblique and traditional splits. If no weights can be found to reduce impurity, it defaults to an **axis-aligned split**, ensuring robustness and adaptability in various scenarios.
In very large trees (e.g., depth 10 or more), the performance of `obliquetree` may converge closely with **traditional trees**. The true strength of `obliquetree` lies in their ability to perform exceptionally well at **shallower depths**, offering improved generalization with fewer splits. Moreover, thanks to linear projections, `obliquetree` significantly outperform traditional trees when working with datasets that exhibit **linear relationships**.
-----
## Installation
To install `obliquetree`, use the following pip command:
```bash
pip install obliquetree
```
Using the `obliquetree` library is simple and intuitive. Here's a more generic example that works for both classification and regression:
```python
from obliquetree import Classifier, Regressor
# Initialize the model (Classifier or Regressor)
model = Classifier( # Replace "Classifier" with "Regressor" if performing regression
use_oblique=True, # Enable oblique splits
max_depth=2, # Set the maximum depth of the tree
n_pair=2, # Number of feature pairs for optimization
random_state=42, # Set a random state for reproducibility
categories=[0, 10, 32], # Specify which features are categorical
)
# Train the model on the training dataset
model.fit(X_train, y_train)
# Predict on the test dataset
y_pred = model.predict(X_test)
```
-----
## Documentation
For example usage, API details, comparisons with axis-aligned trees, and in-depth insights into the algorithmic foundation, we **strongly recommend** referring to the full [documentation](https://obliquetree.readthedocs.io/en/latest/).
---
## Key Features
- **Oblique Splits**
Perform oblique splits using linear combinations of features to capture complex patterns in data. Supports both linear and soft decision tree objectives for flexible and accurate modeling.
- **Axis-Aligned Splits**
Offers conventional (axis-aligned) splits, enabling users to leverage standard decision tree behavior for simplicity and interpretability.
- **Feature Constraints**
Limit the number of features used in oblique splits with the `n_pair` parameter, promoting simpler, more interpretable tree structures while retaining predictive power.
- **Seamless Categorical Feature Handling**
Natively supports categorical columns with minimal preprocessing. Only label encoding is required, removing the need for extensive data transformation.
- **Robust Handling of Missing Values**
Automatically assigns `NaN` values to the optimal leaf for axis-aligned splits.
- **Customizable Tree Structures**
The flexible API empowers users to design their own tree architectures easily.
- **Exact Equivalence with `scikit-learn`**
Guarantees results identical to `scikit-learn`'s decision trees when oblique and categorical splitting are disabled.
- **Optimized Performance**
Outperforms `scikit-learn` in terms of speed and efficiency when oblique and categorical splitting are disabled:
- Up to **50% faster** for datasets with float columns.
- Up to **200% faster** for datasets with integer columns.
![Performance Comparison (Float)](docs/source/_static/sklearn_perf/performance_comparison_float.png)
![Performance Comparison (Integer)](docs/source/_static/sklearn_perf/performance_comparison_int.png)
----
### Contributing
Contributions are welcome! If you'd like to improve `obliquetree` or suggest new features, feel free to fork the repository and submit a pull request.
-----
### License
`obliquetree` is released under the MIT License. See the LICENSE file for more details.
Raw data
{
"_id": null,
"home_page": null,
"name": "obliquetree",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "python, data-science, machine-learning, machine-learning-library, explainable-ai, decision-tree, oblique-tree",
"author": null,
"author_email": "Samet Copur <sametcopur@yahoo.com>",
"download_url": null,
"platform": null,
"description": "# obliquetree\n\n`obliquetree` is an advanced decision tree implementation designed to provide high-performance and interpretable models. It supports both classification and regression tasks, enabling a wide range of applications. By offering traditional and oblique splits, it ensures flexibility and improved generalization with shallow trees. This makes it a powerful alternative to regular decision trees.\n\n\n![Tree Visualization](docs/source/_static/tree_visual.png)\n\n\n----\n\n## Getting Started\n\n`obliquetree` combines advanced capabilities with efficient performance. It supports **oblique splits**, leveraging **L-BFGS optimization** to determine the best linear weights for splits, ensuring both speed and accuracy.\n\nIn **traditional mode**, without oblique splits, `obliquetree` outperforms `scikit-learn` in terms of speed and adds support for **categorical variables**, providing a significant advantage over many traditional decision tree implementations.\n\nWhen the **oblique feature** is enabled, `obliquetree` dynamically selects the optimal split type between oblique and traditional splits. If no weights can be found to reduce impurity, it defaults to an **axis-aligned split**, ensuring robustness and adaptability in various scenarios.\n\nIn very large trees (e.g., depth 10 or more), the performance of `obliquetree` may converge closely with **traditional trees**. The true strength of `obliquetree` lies in their ability to perform exceptionally well at **shallower depths**, offering improved generalization with fewer splits. Moreover, thanks to linear projections, `obliquetree` significantly outperform traditional trees when working with datasets that exhibit **linear relationships**.\n\n-----\n## Installation\nTo install `obliquetree`, use the following pip command:\n```bash\npip install obliquetree\n```\n\nUsing the `obliquetree` library is simple and intuitive. Here's a more generic example that works for both classification and regression:\n\n\n```python\nfrom obliquetree import Classifier, Regressor\n\n# Initialize the model (Classifier or Regressor)\nmodel = Classifier( # Replace \"Classifier\" with \"Regressor\" if performing regression\n use_oblique=True, # Enable oblique splits\n max_depth=2, # Set the maximum depth of the tree\n n_pair=2, # Number of feature pairs for optimization\n random_state=42, # Set a random state for reproducibility\n categories=[0, 10, 32], # Specify which features are categorical\n)\n\n# Train the model on the training dataset\nmodel.fit(X_train, y_train)\n\n# Predict on the test dataset\ny_pred = model.predict(X_test)\n```\n-----\n\n## Documentation\nFor example usage, API details, comparisons with axis-aligned trees, and in-depth insights into the algorithmic foundation, we **strongly recommend** referring to the full [documentation](https://obliquetree.readthedocs.io/en/latest/).\n\n---\n## Key Features\n\n- **Oblique Splits** \n Perform oblique splits using linear combinations of features to capture complex patterns in data. Supports both linear and soft decision tree objectives for flexible and accurate modeling.\n\n- **Axis-Aligned Splits** \n Offers conventional (axis-aligned) splits, enabling users to leverage standard decision tree behavior for simplicity and interpretability.\n\n- **Feature Constraints** \n Limit the number of features used in oblique splits with the `n_pair` parameter, promoting simpler, more interpretable tree structures while retaining predictive power.\n\n- **Seamless Categorical Feature Handling** \n Natively supports categorical columns with minimal preprocessing. Only label encoding is required, removing the need for extensive data transformation.\n\n- **Robust Handling of Missing Values** \n Automatically assigns `NaN` values to the optimal leaf for axis-aligned splits.\n\n- **Customizable Tree Structures** \n The flexible API empowers users to design their own tree architectures easily.\n\n- **Exact Equivalence with `scikit-learn`** \n Guarantees results identical to `scikit-learn`'s decision trees when oblique and categorical splitting are disabled.\n\n- **Optimized Performance** \n Outperforms `scikit-learn` in terms of speed and efficiency when oblique and categorical splitting are disabled:\n - Up to **50% faster** for datasets with float columns.\n - Up to **200% faster** for datasets with integer columns.\n\n ![Performance Comparison (Float)](docs/source/_static/sklearn_perf/performance_comparison_float.png)\n\n ![Performance Comparison (Integer)](docs/source/_static/sklearn_perf/performance_comparison_int.png)\n\n\n----\n### Contributing\nContributions are welcome! If you'd like to improve `obliquetree` or suggest new features, feel free to fork the repository and submit a pull request.\n\n-----\n### License\n`obliquetree` is released under the MIT License. See the LICENSE file for more details.\n",
"bugtrack_url": null,
"license": "MIT License",
"summary": "Traditional and Oblique Decision Tree",
"version": "1.0.1",
"project_urls": {
"Documentation": "https://obliquetree.readthedocs.io/en/latest/",
"Repository": "https://github.com/sametcopur/obliquetree",
"Tracker": "https://github.com/sametcopur/obliquetree/issues"
},
"split_keywords": [
"python",
" data-science",
" machine-learning",
" machine-learning-library",
" explainable-ai",
" decision-tree",
" oblique-tree"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "da003da10be0ce8a7e7022897aa2d67e662c79ed66b9586f00b368a806b4f2f3",
"md5": "086bd581a5983cc8972dbec6212dcb35",
"sha256": "605fda8bce9d1a00a454d6b0931ed37b67590bb9d015a9044d49034e58155418"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "086bd581a5983cc8972dbec6212dcb35",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 1419487,
"upload_time": "2025-01-09T10:38:00",
"upload_time_iso_8601": "2025-01-09T10:38:00.779842Z",
"url": "https://files.pythonhosted.org/packages/da/00/3da10be0ce8a7e7022897aa2d67e662c79ed66b9586f00b368a806b4f2f3/obliquetree-1.0.1-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "91c5bd5d8f286fe127ffade67f76818c64baa8ed4a24bdd9f99dfbe326e84e21",
"md5": "48490dd98c1dc736e800b46ad1c03f08",
"sha256": "197f990b0f5db42ee52d1640c89e97e1d87df939964393f1a8ccd8f51dc89c8e"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "48490dd98c1dc736e800b46ad1c03f08",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 4043241,
"upload_time": "2025-01-09T10:45:28",
"upload_time_iso_8601": "2025-01-09T10:45:28.284309Z",
"url": "https://files.pythonhosted.org/packages/91/c5/bd5d8f286fe127ffade67f76818c64baa8ed4a24bdd9f99dfbe326e84e21/obliquetree-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5710cd885dedef9a8f914b896e9d5c47e3e86be882bcbb29d7e75bbf0d391f91",
"md5": "f2b40c841da55d21508c0f80df82c8be",
"sha256": "b1bbeac51aa3fc9c165946ce5910b6a2c11d7ff39c355a906f9499603d644636"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp310-cp310-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "f2b40c841da55d21508c0f80df82c8be",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 5216123,
"upload_time": "2025-01-09T10:45:31",
"upload_time_iso_8601": "2025-01-09T10:45:31.252640Z",
"url": "https://files.pythonhosted.org/packages/57/10/cd885dedef9a8f914b896e9d5c47e3e86be882bcbb29d7e75bbf0d391f91/obliquetree-1.0.1-cp310-cp310-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b0e2fd27adb7f63d021e8042b61a6e9b02ba951de1dbcdd0837d8217d9624616",
"md5": "93cb40cdaff370311fa65ef61f37ce4a",
"sha256": "d31be8fa900223f90475e1d9c4928b42d43f7fc556e0a17caae2ad1d2ccfc465"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "93cb40cdaff370311fa65ef61f37ce4a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 1378241,
"upload_time": "2025-01-09T10:40:55",
"upload_time_iso_8601": "2025-01-09T10:40:55.616141Z",
"url": "https://files.pythonhosted.org/packages/b0/e2/fd27adb7f63d021e8042b61a6e9b02ba951de1dbcdd0837d8217d9624616/obliquetree-1.0.1-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d2e16f4d5896754172708c870e119d5419fd9c048c860b391906624972d1d118",
"md5": "a7806e90644b901d6259b6783fef3d53",
"sha256": "dd2c524a809c31ffba48c4196b7fe090dd68fa50b56ef3a186032bd4c0b3fab7"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "a7806e90644b901d6259b6783fef3d53",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 1418158,
"upload_time": "2025-01-09T10:38:02",
"upload_time_iso_8601": "2025-01-09T10:38:02.368853Z",
"url": "https://files.pythonhosted.org/packages/d2/e1/6f4d5896754172708c870e119d5419fd9c048c860b391906624972d1d118/obliquetree-1.0.1-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6b12d373488ff0fa2f6bbab78e1caac5b89f901270ae6301ae73e38fae8deac0",
"md5": "3d189e456b903a975514e36711a7c07a",
"sha256": "73a8faa418783f2b0daefd2d79889201ead46b776fe3d77028a80e4ab9c234bf"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "3d189e456b903a975514e36711a7c07a",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 4272877,
"upload_time": "2025-01-09T10:45:32",
"upload_time_iso_8601": "2025-01-09T10:45:32.887703Z",
"url": "https://files.pythonhosted.org/packages/6b/12/d373488ff0fa2f6bbab78e1caac5b89f901270ae6301ae73e38fae8deac0/obliquetree-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3d6c5a0df639a2950203da314f03411ce1f8628e68d0712ab98e675b68d310fd",
"md5": "c5d3368298a556fec0bd28f2f40077c2",
"sha256": "e1244079656cf8ddde55097698692073dea5ad4974a812632da7fceb69117737"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp311-cp311-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "c5d3368298a556fec0bd28f2f40077c2",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 5459373,
"upload_time": "2025-01-09T10:45:35",
"upload_time_iso_8601": "2025-01-09T10:45:35.691960Z",
"url": "https://files.pythonhosted.org/packages/3d/6c/5a0df639a2950203da314f03411ce1f8628e68d0712ab98e675b68d310fd/obliquetree-1.0.1-cp311-cp311-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "56244b7d35b004bcbb2c073923bd555b813af6a484d5eb4183c5aa56e90dbf39",
"md5": "f5c097f90c0f70c7cc2cf7c9bd665203",
"sha256": "77477b5c1ccfb7f05c54880f446a0c975eaedbb7f4a44f0c1fa33a9a7e0d8481"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "f5c097f90c0f70c7cc2cf7c9bd665203",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 1379137,
"upload_time": "2025-01-09T10:40:58",
"upload_time_iso_8601": "2025-01-09T10:40:58.339117Z",
"url": "https://files.pythonhosted.org/packages/56/24/4b7d35b004bcbb2c073923bd555b813af6a484d5eb4183c5aa56e90dbf39/obliquetree-1.0.1-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6d04bd10a3b40b8a62a260973f2585d95b1f3112910142ffea386c943dbedafc",
"md5": "5fa4f040b16ab9ee71345735ecead311",
"sha256": "bc3b834ddbf9114d54bd1fb0031eeaedbc4c762b4457eb516efdf1383f1ceaad"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "5fa4f040b16ab9ee71345735ecead311",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 1421519,
"upload_time": "2025-01-09T10:38:03",
"upload_time_iso_8601": "2025-01-09T10:38:03.668975Z",
"url": "https://files.pythonhosted.org/packages/6d/04/bd10a3b40b8a62a260973f2585d95b1f3112910142ffea386c943dbedafc/obliquetree-1.0.1-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6aadb89c1b2b4e609ac08ee3e5382ffc7e73969dad74efc2d666d1dadcdeeda4",
"md5": "cf9c5aad805b4d66911e1aa95f75e008",
"sha256": "60bf536aec2d89e18d5157e135d085d52d6ea82a8606a244b83a7867f241c9be"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "cf9c5aad805b4d66911e1aa95f75e008",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 4200347,
"upload_time": "2025-01-09T10:45:37",
"upload_time_iso_8601": "2025-01-09T10:45:37.487479Z",
"url": "https://files.pythonhosted.org/packages/6a/ad/b89c1b2b4e609ac08ee3e5382ffc7e73969dad74efc2d666d1dadcdeeda4/obliquetree-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "cf73e6fc81a6f7a6fadf7c7805ce19e85f664cfecad14d229600794c1d8743b6",
"md5": "06756b9cedb3362d72c7b5846467a64a",
"sha256": "0bb0bf8a4a1d922ee44133be55ad83b57ac700801495348f3f959f723325bc5c"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp312-cp312-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "06756b9cedb3362d72c7b5846467a64a",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 5394532,
"upload_time": "2025-01-09T10:45:40",
"upload_time_iso_8601": "2025-01-09T10:45:40.459325Z",
"url": "https://files.pythonhosted.org/packages/cf/73/e6fc81a6f7a6fadf7c7805ce19e85f664cfecad14d229600794c1d8743b6/obliquetree-1.0.1-cp312-cp312-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7e932d909823290ede0038f48fa1220f50aeccb37f1f20c36d1b8d5f3b3ec0cd",
"md5": "f88018a245d220c9b4eaf5d6c6d71d6e",
"sha256": "e2fca35fc4ed3405fc5e92372abddf9b1e71c950ef1717094b1858d11e524415"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "f88018a245d220c9b4eaf5d6c6d71d6e",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 1378720,
"upload_time": "2025-01-09T10:40:59",
"upload_time_iso_8601": "2025-01-09T10:40:59.599031Z",
"url": "https://files.pythonhosted.org/packages/7e/93/2d909823290ede0038f48fa1220f50aeccb37f1f20c36d1b8d5f3b3ec0cd/obliquetree-1.0.1-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "bb38b2173f19517ae6e028192f4f5e6fdef25585e6bb7747a7251443003ec678",
"md5": "e330f449fbb627537821c94bfd2d9d1a",
"sha256": "4cbfd81bb85dcc3c37be850b420d498c81bc4520b7ba4761ed67c7c87b72e16c"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "e330f449fbb627537821c94bfd2d9d1a",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 1415183,
"upload_time": "2025-01-09T10:38:06",
"upload_time_iso_8601": "2025-01-09T10:38:06.132752Z",
"url": "https://files.pythonhosted.org/packages/bb/38/b2173f19517ae6e028192f4f5e6fdef25585e6bb7747a7251443003ec678/obliquetree-1.0.1-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "071951bcb55e293d64c7a089477820dd9f6737d5ea0fbc7676c47e5469067eb3",
"md5": "4f11de76d2d4c69fa4460e5b40968176",
"sha256": "6d264a9f2cab341a8519443b3a5e8d176e2a5b9c7a39847c990d462b3ec38efd"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "4f11de76d2d4c69fa4460e5b40968176",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 4186257,
"upload_time": "2025-01-09T10:45:44",
"upload_time_iso_8601": "2025-01-09T10:45:44.280566Z",
"url": "https://files.pythonhosted.org/packages/07/19/51bcb55e293d64c7a089477820dd9f6737d5ea0fbc7676c47e5469067eb3/obliquetree-1.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9eaf74f0a0dba87f0214aa339b00280ec7d92fc48bba27add8004c327d4fe5df",
"md5": "44ae49312bc3e9a594b945528d354f78",
"sha256": "05feacca3fdbf834bd3dfffd23d494ad9981a11769c7d09a55d8fd3934b7dd29"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp313-cp313-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "44ae49312bc3e9a594b945528d354f78",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 5377400,
"upload_time": "2025-01-09T10:45:45",
"upload_time_iso_8601": "2025-01-09T10:45:45.993257Z",
"url": "https://files.pythonhosted.org/packages/9e/af/74f0a0dba87f0214aa339b00280ec7d92fc48bba27add8004c327d4fe5df/obliquetree-1.0.1-cp313-cp313-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3e1807d9c8de8386d47c696b4bedb4373389255a9ef222cb9891a47d6216eeda",
"md5": "5b8b03884f978b8f0ded6e4176377a40",
"sha256": "3283f9ba8d18f2787c0ace2e6cba3c5100929fdcc75843f3cceb4c9c8fe2b333"
},
"downloads": -1,
"filename": "obliquetree-1.0.1-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "5b8b03884f978b8f0ded6e4176377a40",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 1377400,
"upload_time": "2025-01-09T10:41:02",
"upload_time_iso_8601": "2025-01-09T10:41:02.096449Z",
"url": "https://files.pythonhosted.org/packages/3e/18/07d9c8de8386d47c696b4bedb4373389255a9ef222cb9891a47d6216eeda/obliquetree-1.0.1-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-09 10:38:00",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "sametcopur",
"github_project": "obliquetree",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "obliquetree"
}