# 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.

----
## 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.


----
### 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\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 \n\n \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.4",
"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": null,
"digests": {
"blake2b_256": "0fd01b04db702d35f095299426ec1350d9fa8a6802759650bd1046522a4a8364",
"md5": "d78f837b35a7c32a944b7f8c28b2deb7",
"sha256": "61a55ade9be381c6712883d2b18286ba8026611fadfeda5be62c454b15857394"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "d78f837b35a7c32a944b7f8c28b2deb7",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 1454499,
"upload_time": "2025-11-01T09:43:48",
"upload_time_iso_8601": "2025-11-01T09:43:48.197328Z",
"url": "https://files.pythonhosted.org/packages/0f/d0/1b04db702d35f095299426ec1350d9fa8a6802759650bd1046522a4a8364/obliquetree-1.0.4-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1b6009a764b1419dde010eeba1d360dc8b80d9bdb5f02c1c9c2dd96e3dd15059",
"md5": "25399af19f12998a648198e61486c86c",
"sha256": "d4354532bb969f3f94e31b9faf439d92abafb6d4e991359e19487194cf7dd3f3"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "25399af19f12998a648198e61486c86c",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 4334731,
"upload_time": "2025-11-01T09:51:23",
"upload_time_iso_8601": "2025-11-01T09:51:23.954710Z",
"url": "https://files.pythonhosted.org/packages/1b/60/09a764b1419dde010eeba1d360dc8b80d9bdb5f02c1c9c2dd96e3dd15059/obliquetree-1.0.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9144258c58b1799d67cee68cc3c9343d615429ce257be892861b78b7aeb6ff21",
"md5": "e014f5de754c809b0f13fd4fd92ee116",
"sha256": "85e6489b7b24f462d0d5ebe1f17627236d198ccb20837c6b2dd75fbbcbcd76b5"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp310-cp310-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "e014f5de754c809b0f13fd4fd92ee116",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 5385291,
"upload_time": "2025-11-01T09:51:25",
"upload_time_iso_8601": "2025-11-01T09:51:25.784255Z",
"url": "https://files.pythonhosted.org/packages/91/44/258c58b1799d67cee68cc3c9343d615429ce257be892861b78b7aeb6ff21/obliquetree-1.0.4-cp310-cp310-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0f137c109f12a713e28a3fe885138dc56ba2a758a0f0b1c9e0784217f86b4ecf",
"md5": "f45f277e1805891833dd51dc83718310",
"sha256": "23b0bbc059807941370b47792c19b76a1a849a68177b34404a78e73a33c0798f"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "f45f277e1805891833dd51dc83718310",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 1381075,
"upload_time": "2025-11-01T09:46:30",
"upload_time_iso_8601": "2025-11-01T09:46:30.869570Z",
"url": "https://files.pythonhosted.org/packages/0f/13/7c109f12a713e28a3fe885138dc56ba2a758a0f0b1c9e0784217f86b4ecf/obliquetree-1.0.4-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "87631c9c04f83572c51685b9f635babf1beed569ba50ac9b2de177ec5c6cff6e",
"md5": "338dbe520be83e9f65a014d9a13a2d81",
"sha256": "070327b269c10c89f9bb2b2f54ef4fc6ac17fa17469347f25c1c626a71d7cec3"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "338dbe520be83e9f65a014d9a13a2d81",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 1452409,
"upload_time": "2025-11-01T09:43:49",
"upload_time_iso_8601": "2025-11-01T09:43:49.514162Z",
"url": "https://files.pythonhosted.org/packages/87/63/1c9c04f83572c51685b9f635babf1beed569ba50ac9b2de177ec5c6cff6e/obliquetree-1.0.4-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6200414078fbb5b90de84fc5a6f847e21526878257faf8302520a655d18416ff",
"md5": "d614d1e8f7e510255f07e94100d1a8f6",
"sha256": "b75c693dc671bc9539ec4c8127d47e57c37bc9d48660c83279d657a7ced78901"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "d614d1e8f7e510255f07e94100d1a8f6",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 4505353,
"upload_time": "2025-11-01T09:51:27",
"upload_time_iso_8601": "2025-11-01T09:51:27.540562Z",
"url": "https://files.pythonhosted.org/packages/62/00/414078fbb5b90de84fc5a6f847e21526878257faf8302520a655d18416ff/obliquetree-1.0.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bc32f4d8b7575ab639db8f2dd09151bef95a11aaab95a483983ee81ba5b10e40",
"md5": "fa70c7590c17d4182f29ef5d4a6a9d90",
"sha256": "71cc211ca03a55e8a94945cd18943f10f42d4da44b0c65980c12333715d2273f"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp311-cp311-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "fa70c7590c17d4182f29ef5d4a6a9d90",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 5555273,
"upload_time": "2025-11-01T09:51:29",
"upload_time_iso_8601": "2025-11-01T09:51:29.507398Z",
"url": "https://files.pythonhosted.org/packages/bc/32/f4d8b7575ab639db8f2dd09151bef95a11aaab95a483983ee81ba5b10e40/obliquetree-1.0.4-cp311-cp311-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "01d3bb2c3d974d409d6b77d17f95907b2910294056202c0565149940f8523736",
"md5": "b553fea1b082b8b6a36df1bbd874a8f7",
"sha256": "a809224cfbf03ebd53e1899bf08b597011e474b5f0e65a000dd4d963036e428c"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "b553fea1b082b8b6a36df1bbd874a8f7",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 1379699,
"upload_time": "2025-11-01T09:46:32",
"upload_time_iso_8601": "2025-11-01T09:46:32.189659Z",
"url": "https://files.pythonhosted.org/packages/01/d3/bb2c3d974d409d6b77d17f95907b2910294056202c0565149940f8523736/obliquetree-1.0.4-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1d5358566acbf457e2fc3e73f256427ec18f01c047ca28d2a807c4b68071c499",
"md5": "2aab9cd7e4ee2c4aac88ce9153677d50",
"sha256": "55d8df15672d6e027c0e0d0e9bd5b0ed45b0c33a334c858f666ab5eb40d8a745"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "2aab9cd7e4ee2c4aac88ce9153677d50",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 1452601,
"upload_time": "2025-11-01T09:43:50",
"upload_time_iso_8601": "2025-11-01T09:43:50.896470Z",
"url": "https://files.pythonhosted.org/packages/1d/53/58566acbf457e2fc3e73f256427ec18f01c047ca28d2a807c4b68071c499/obliquetree-1.0.4-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c2134455be0ec3fb08db6e18d32b4a765e4f54c5b799ee447ca05fc8cf941039",
"md5": "780e36fb0263932b3fb973cec417a0be",
"sha256": "b5527da7a947be034969b269077f61e9067386d7b5775ea4f66ad45a80b99320"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "780e36fb0263932b3fb973cec417a0be",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 4456248,
"upload_time": "2025-11-01T09:51:31",
"upload_time_iso_8601": "2025-11-01T09:51:31.339307Z",
"url": "https://files.pythonhosted.org/packages/c2/13/4455be0ec3fb08db6e18d32b4a765e4f54c5b799ee447ca05fc8cf941039/obliquetree-1.0.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9313d0ce1099c9f4c710d080eb89af2ee88f3800b2d577dc6d20d022809fcda8",
"md5": "e64d2a1278190c3105aa1d79b980a064",
"sha256": "84a7317d6313e4346777a62f56a9d5424888de8bfe120e0e392fbcac026023c4"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp312-cp312-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "e64d2a1278190c3105aa1d79b980a064",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 5480520,
"upload_time": "2025-11-01T09:51:33",
"upload_time_iso_8601": "2025-11-01T09:51:33.046790Z",
"url": "https://files.pythonhosted.org/packages/93/13/d0ce1099c9f4c710d080eb89af2ee88f3800b2d577dc6d20d022809fcda8/obliquetree-1.0.4-cp312-cp312-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "280c6a2ab50d0e86ce216b9199c0e1d4431bde023cacd2ee38f4ee3509571fc6",
"md5": "58279e53e21609563301b589c2ebdde2",
"sha256": "13543ef82309bf2a76c70ea20e86a9f77aaa09d4b0ac7c7d01136d292e61c9ac"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "58279e53e21609563301b589c2ebdde2",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 1381737,
"upload_time": "2025-11-01T09:46:33",
"upload_time_iso_8601": "2025-11-01T09:46:33.503700Z",
"url": "https://files.pythonhosted.org/packages/28/0c/6a2ab50d0e86ce216b9199c0e1d4431bde023cacd2ee38f4ee3509571fc6/obliquetree-1.0.4-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cedf0f7ebe60781ec19fc87029248bf140d10011efb259fbf4fdd113ba38d853",
"md5": "71e2beeff562f4c0241c24fe62c7ac92",
"sha256": "e36ef77f8e715047e13dcb9986ef093e3bdb6e3d7dfb7daecf614614d105df8a"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "71e2beeff562f4c0241c24fe62c7ac92",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 1447946,
"upload_time": "2025-11-01T09:43:51",
"upload_time_iso_8601": "2025-11-01T09:43:51.912449Z",
"url": "https://files.pythonhosted.org/packages/ce/df/0f7ebe60781ec19fc87029248bf140d10011efb259fbf4fdd113ba38d853/obliquetree-1.0.4-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9343a3367190590f7f5611d2d6eb584f3287acc09b5bbe18fdefe80c35b6dda7",
"md5": "82ec81e4792078600d6a875b993d7a57",
"sha256": "e924ad695cf8a5e688edfc7f9e1664714300ad874934f2d6af6530958dac4968"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "82ec81e4792078600d6a875b993d7a57",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 4447720,
"upload_time": "2025-11-01T09:51:34",
"upload_time_iso_8601": "2025-11-01T09:51:34.782191Z",
"url": "https://files.pythonhosted.org/packages/93/43/a3367190590f7f5611d2d6eb584f3287acc09b5bbe18fdefe80c35b6dda7/obliquetree-1.0.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1fec03c7c535966f85ffc964e352f8b2a33366522bc286020eabf40abb91e02d",
"md5": "efd802183d05dc36ad77689899fbb50b",
"sha256": "0058211c22a8a9ba4fc9eeecee74c9ad9d582d8dfa0300fe12dbf03bae7c1e2f"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp313-cp313-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "efd802183d05dc36ad77689899fbb50b",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 5466905,
"upload_time": "2025-11-01T09:51:36",
"upload_time_iso_8601": "2025-11-01T09:51:36.203822Z",
"url": "https://files.pythonhosted.org/packages/1f/ec/03c7c535966f85ffc964e352f8b2a33366522bc286020eabf40abb91e02d/obliquetree-1.0.4-cp313-cp313-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b2ac91425693b99d41a8cbe59c72d3d5639b8886ed42e28bac1fc9eaf7527529",
"md5": "a93d35425da53e86b389cc56d3502009",
"sha256": "9df34c4ce88d3aae07d2d7d49316de570ff118c6e7bbf695710d8fa8eff79e90"
},
"downloads": -1,
"filename": "obliquetree-1.0.4-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "a93d35425da53e86b389cc56d3502009",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 1380310,
"upload_time": "2025-11-01T09:46:34",
"upload_time_iso_8601": "2025-11-01T09:46:34.513427Z",
"url": "https://files.pythonhosted.org/packages/b2/ac/91425693b99d41a8cbe59c72d3d5639b8886ed42e28bac1fc9eaf7527529/obliquetree-1.0.4-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-11-01 09:43:48",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "sametcopur",
"github_project": "obliquetree",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "obliquetree"
}