# 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.3",
"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": "c26b85cbe1a6859f4bd7d9e8be7b6881d9ef62db029d00a656445c253097c960",
"md5": "93a5d61fb32b3e54d8b3734e7bd0bec0",
"sha256": "0b00d2514aa71c20edbcf77088d2356bd106638ea2345f0852b303020fae2dc4"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "93a5d61fb32b3e54d8b3734e7bd0bec0",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 1418043,
"upload_time": "2025-07-29T07:50:26",
"upload_time_iso_8601": "2025-07-29T07:50:26.497410Z",
"url": "https://files.pythonhosted.org/packages/c2/6b/85cbe1a6859f4bd7d9e8be7b6881d9ef62db029d00a656445c253097c960/obliquetree-1.0.3-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3d665a4d5a5fd11eaa7d39f34519adddcc43395542c9dea52f688a2efdf6d4f2",
"md5": "9c689c0cd74ea10c739b9d73fe2cf3f7",
"sha256": "43873d70675fb5eff9f90c690117315248710f35da724934231d70c44dce83fe"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "9c689c0cd74ea10c739b9d73fe2cf3f7",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 4334300,
"upload_time": "2025-07-29T07:58:03",
"upload_time_iso_8601": "2025-07-29T07:58:03.995718Z",
"url": "https://files.pythonhosted.org/packages/3d/66/5a4d5a5fd11eaa7d39f34519adddcc43395542c9dea52f688a2efdf6d4f2/obliquetree-1.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5523033a331c53e73e040cb2da1fae68bb96eb9e4202b86fd17ea8dee26036af",
"md5": "67be817c93bdcd37d4c4ea5b06f0cee4",
"sha256": "810b0db84d00b842c59edc996a98acec5c4c937cdc4473faee97f6af86a97f95"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp310-cp310-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "67be817c93bdcd37d4c4ea5b06f0cee4",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 5385048,
"upload_time": "2025-07-29T07:58:05",
"upload_time_iso_8601": "2025-07-29T07:58:05.294835Z",
"url": "https://files.pythonhosted.org/packages/55/23/033a331c53e73e040cb2da1fae68bb96eb9e4202b86fd17ea8dee26036af/obliquetree-1.0.3-cp310-cp310-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e5e6d92d07eb54b1a19c3cf161f012ee5f78a95373bad55e96f449b13ac46ab7",
"md5": "aec5726f9415add16286f939227469ae",
"sha256": "5e1a067448bfe509e5445e35de7e5718b32c281d77304ef2bb53dbbbb720dedf"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "aec5726f9415add16286f939227469ae",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 1378987,
"upload_time": "2025-07-29T07:52:49",
"upload_time_iso_8601": "2025-07-29T07:52:49.530288Z",
"url": "https://files.pythonhosted.org/packages/e5/e6/d92d07eb54b1a19c3cf161f012ee5f78a95373bad55e96f449b13ac46ab7/obliquetree-1.0.3-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0a3dd2c77819821acf58bd72570b54fb23c91534b5a55f0cd576d363827dfbef",
"md5": "ac76795363870a97d31d3431b70a46ac",
"sha256": "2a68e8ff877f4f406af62c7531a6d50eceb45d8487dc0bde8d15d5eba8577484"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "ac76795363870a97d31d3431b70a46ac",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 1416273,
"upload_time": "2025-07-29T07:50:27",
"upload_time_iso_8601": "2025-07-29T07:50:27.936704Z",
"url": "https://files.pythonhosted.org/packages/0a/3d/d2c77819821acf58bd72570b54fb23c91534b5a55f0cd576d363827dfbef/obliquetree-1.0.3-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "04a10bf6e502d6b2d1c6ed84c0ebf42632baf63482a9aa3a161a65a6bafbfa6d",
"md5": "70996efc378174e7ece8a3a917a506ca",
"sha256": "7c7d755111dd64a1230dcfab7633656435e27e88a460caf101b9ee4b26d5233c"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "70996efc378174e7ece8a3a917a506ca",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 4506352,
"upload_time": "2025-07-29T07:58:06",
"upload_time_iso_8601": "2025-07-29T07:58:06.505324Z",
"url": "https://files.pythonhosted.org/packages/04/a1/0bf6e502d6b2d1c6ed84c0ebf42632baf63482a9aa3a161a65a6bafbfa6d/obliquetree-1.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c5b1279b0ded4459c9bd585c27805828dbc40fb3a4078618c846a5c3b48229c1",
"md5": "3ee8bdbcb67f84800a67743e8452fcb3",
"sha256": "a4381bec80cd864934c7629b25064b89b01ee1e4724e66efd05b2769e36e70da"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp311-cp311-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "3ee8bdbcb67f84800a67743e8452fcb3",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 5555922,
"upload_time": "2025-07-29T07:58:07",
"upload_time_iso_8601": "2025-07-29T07:58:07.692928Z",
"url": "https://files.pythonhosted.org/packages/c5/b1/279b0ded4459c9bd585c27805828dbc40fb3a4078618c846a5c3b48229c1/obliquetree-1.0.3-cp311-cp311-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e18c8e47585ccb63b08e6463805e8a03353aa7cea3f2e735de702a9844c57751",
"md5": "5e6a74b13561b14a05ce82dcb44f24b2",
"sha256": "610a464cf0a364bcbff53fe455d917e2f04cbb2ed429bb01270d59744fd6e7e3"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "5e6a74b13561b14a05ce82dcb44f24b2",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 1377678,
"upload_time": "2025-07-29T07:52:50",
"upload_time_iso_8601": "2025-07-29T07:52:50.504668Z",
"url": "https://files.pythonhosted.org/packages/e1/8c/8e47585ccb63b08e6463805e8a03353aa7cea3f2e735de702a9844c57751/obliquetree-1.0.3-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "17001c6bc5c450291c94f8f9061df30a117d21e8279a6cb18a0b8096dfd41382",
"md5": "47464b24f81ea4fb53c05dbaf5f94d04",
"sha256": "e9457aacef5401b3e5ab84f119832cbd6dd8dbec7549801ea80db1e634844c12"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "47464b24f81ea4fb53c05dbaf5f94d04",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 1413388,
"upload_time": "2025-07-29T07:50:29",
"upload_time_iso_8601": "2025-07-29T07:50:29.365232Z",
"url": "https://files.pythonhosted.org/packages/17/00/1c6bc5c450291c94f8f9061df30a117d21e8279a6cb18a0b8096dfd41382/obliquetree-1.0.3-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d39b227b240322b21db7c9f7ded1ae5ca26f5d9784d337573d7740a0fb322716",
"md5": "db47b6b7d2546462913b4b894c368795",
"sha256": "217895f6063d7d5087d31d731778363875a3b17d97da536d7a391bffdebc6a6a"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "db47b6b7d2546462913b4b894c368795",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 4453938,
"upload_time": "2025-07-29T07:58:08",
"upload_time_iso_8601": "2025-07-29T07:58:08.913539Z",
"url": "https://files.pythonhosted.org/packages/d3/9b/227b240322b21db7c9f7ded1ae5ca26f5d9784d337573d7740a0fb322716/obliquetree-1.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b809cee4c98382e2a59c07dd847a17a69adf3bf9d4de33ba2c5e63572f9568b6",
"md5": "88e42ce4e11aa1b527d977972439f485",
"sha256": "bb5fa6e3b24310dd39fc2c88d1c31503f51dd3dff45336ca89539a08d9e52dbc"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp312-cp312-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "88e42ce4e11aa1b527d977972439f485",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 5477867,
"upload_time": "2025-07-29T07:58:10",
"upload_time_iso_8601": "2025-07-29T07:58:10.527611Z",
"url": "https://files.pythonhosted.org/packages/b8/09/cee4c98382e2a59c07dd847a17a69adf3bf9d4de33ba2c5e63572f9568b6/obliquetree-1.0.3-cp312-cp312-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "956b245621199ac5d5d87dd10fdb6e846d6bfae4ed8ed9c403babe34494883c6",
"md5": "dd7e7018a753b51c4675a8c7cf306eec",
"sha256": "9740893212d65bbe0c17bbd8519d416e2c9ae2a51c74ab1188935fcef1e595fe"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "dd7e7018a753b51c4675a8c7cf306eec",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 1379179,
"upload_time": "2025-07-29T07:52:52",
"upload_time_iso_8601": "2025-07-29T07:52:52.167957Z",
"url": "https://files.pythonhosted.org/packages/95/6b/245621199ac5d5d87dd10fdb6e846d6bfae4ed8ed9c403babe34494883c6/obliquetree-1.0.3-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "41824dfee3ec0abec63a2d72e907bc0bd9dd33de66a2710fe3943f0d91d4a59d",
"md5": "766bcb0e4809a24525487bdcb031c7f5",
"sha256": "b981b22bf2125f2c93c2802b773c73b2d025635422bf24813ef2dd69948dfe56"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "766bcb0e4809a24525487bdcb031c7f5",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 1408454,
"upload_time": "2025-07-29T07:50:30",
"upload_time_iso_8601": "2025-07-29T07:50:30.335860Z",
"url": "https://files.pythonhosted.org/packages/41/82/4dfee3ec0abec63a2d72e907bc0bd9dd33de66a2710fe3943f0d91d4a59d/obliquetree-1.0.3-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bf2d84d0ba0b02a97a829e8b0a9f53d7f6dcd14fdd9ba5329839861e5c441a14",
"md5": "a595e2a1018b80916b8e0e13c769b2aa",
"sha256": "b1fd597c8785f7367e235be990f3bf8968eefe86988308f4ec19337a6ae4f10f"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "a595e2a1018b80916b8e0e13c769b2aa",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 4445686,
"upload_time": "2025-07-29T07:58:11",
"upload_time_iso_8601": "2025-07-29T07:58:11.711700Z",
"url": "https://files.pythonhosted.org/packages/bf/2d/84d0ba0b02a97a829e8b0a9f53d7f6dcd14fdd9ba5329839861e5c441a14/obliquetree-1.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "59e5333875d9017921b4cef10942c6a6a868ab3ca48be94620a8cc12f056b590",
"md5": "9c11a3c88f9f8820062da258921f4f09",
"sha256": "4f75f07807cfa338d503ebd965af72dd91f7f1b1df4577fb832d8949c3287a96"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp313-cp313-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "9c11a3c88f9f8820062da258921f4f09",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 5464166,
"upload_time": "2025-07-29T07:58:12",
"upload_time_iso_8601": "2025-07-29T07:58:12.884223Z",
"url": "https://files.pythonhosted.org/packages/59/e5/333875d9017921b4cef10942c6a6a868ab3ca48be94620a8cc12f056b590/obliquetree-1.0.3-cp313-cp313-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6ba62ef255b87b7c4124f8434bba2e97d5a2bf37af5dd5b6c93a5f005fb886ea",
"md5": "9864124089d3638c9072dc95bafb5194",
"sha256": "f93572212c974881531dd1e6640106bbefdef998898556804bf91b3f25113259"
},
"downloads": -1,
"filename": "obliquetree-1.0.3-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "9864124089d3638c9072dc95bafb5194",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 1377758,
"upload_time": "2025-07-29T07:52:53",
"upload_time_iso_8601": "2025-07-29T07:52:53.702799Z",
"url": "https://files.pythonhosted.org/packages/6b/a6/2ef255b87b7c4124f8434bba2e97d5a2bf37af5dd5b6c93a5f005fb886ea/obliquetree-1.0.3-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-29 07:50:26",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "sametcopur",
"github_project": "obliquetree",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "obliquetree"
}