ndscape 0.1.3__tar.gz → 0.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. {ndscape-0.1.3 → ndscape-0.1.4}/CITATION.cff +18 -2
  2. {ndscape-0.1.3 → ndscape-0.1.4}/PKG-INFO +4 -4
  3. {ndscape-0.1.3 → ndscape-0.1.4}/README.md +3 -1
  4. {ndscape-0.1.3 → ndscape-0.1.4}/ndscape/README.md +1 -1
  5. {ndscape-0.1.3 → ndscape-0.1.4}/ndscape.egg-info/PKG-INFO +4 -4
  6. ndscape-0.1.4/ndscape.egg-info/scm_version.json +8 -0
  7. {ndscape-0.1.3 → ndscape-0.1.4}/pyproject.toml +2 -2
  8. ndscape-0.1.3/ndscape.egg-info/scm_version.json +0 -8
  9. {ndscape-0.1.3 → ndscape-0.1.4}/.gitattributes +0 -0
  10. {ndscape-0.1.3 → ndscape-0.1.4}/.github/workflows/release.yml +0 -0
  11. {ndscape-0.1.3 → ndscape-0.1.4}/.gitignore +0 -0
  12. {ndscape-0.1.3 → ndscape-0.1.4}/LICENSE +0 -0
  13. {ndscape-0.1.3 → ndscape-0.1.4}/MANIFEST.in +0 -0
  14. {ndscape-0.1.3 → ndscape-0.1.4}/config.py +0 -0
  15. {ndscape-0.1.3 → ndscape-0.1.4}/configs/artifacts.yml +0 -0
  16. {ndscape-0.1.3 → ndscape-0.1.4}/core.py +0 -0
  17. {ndscape-0.1.3 → ndscape-0.1.4}/nd/ACND.py +0 -0
  18. {ndscape-0.1.3 → ndscape-0.1.4}/nd/BBoK.py +0 -0
  19. {ndscape-0.1.3 → ndscape-0.1.4}/nd/BestOfK.py +0 -0
  20. {ndscape-0.1.3 → ndscape-0.1.4}/nd/CBND.py +0 -0
  21. {ndscape-0.1.3 → ndscape-0.1.4}/nd/NDC.py +0 -0
  22. {ndscape-0.1.3 → ndscape-0.1.4}/nd/NestedDichotomy.py +0 -0
  23. {ndscape-0.1.3 → ndscape-0.1.4}/nd/RPND.py +0 -0
  24. {ndscape-0.1.3 → ndscape-0.1.4}/nd/RandomGeneration.py +0 -0
  25. {ndscape-0.1.3 → ndscape-0.1.4}/nd/__init__.py +0 -0
  26. {ndscape-0.1.3 → ndscape-0.1.4}/ndscape/__init__.py +0 -0
  27. {ndscape-0.1.3 → ndscape-0.1.4}/ndscape/api.py +0 -0
  28. {ndscape-0.1.3 → ndscape-0.1.4}/ndscape/plot.py +0 -0
  29. {ndscape-0.1.3 → ndscape-0.1.4}/ndscape.egg-info/SOURCES.txt +0 -0
  30. {ndscape-0.1.3 → ndscape-0.1.4}/ndscape.egg-info/dependency_links.txt +0 -0
  31. {ndscape-0.1.3 → ndscape-0.1.4}/ndscape.egg-info/requires.txt +0 -0
  32. {ndscape-0.1.3 → ndscape-0.1.4}/ndscape.egg-info/scm_file_list.json +0 -0
  33. {ndscape-0.1.3 → ndscape-0.1.4}/ndscape.egg-info/top_level.txt +0 -0
  34. {ndscape-0.1.3 → ndscape-0.1.4}/paper_artifact.md +0 -0
  35. {ndscape-0.1.3 → ndscape-0.1.4}/pytest.ini +0 -0
  36. {ndscape-0.1.3 → ndscape-0.1.4}/reproduce.py +0 -0
  37. {ndscape-0.1.3 → ndscape-0.1.4}/requirements.txt +0 -0
  38. {ndscape-0.1.3 → ndscape-0.1.4}/run_datasets.py +0 -0
  39. {ndscape-0.1.3 → ndscape-0.1.4}/run_simulations.py +0 -0
  40. {ndscape-0.1.3 → ndscape-0.1.4}/scripts/csv_to_configs.py +0 -0
  41. {ndscape-0.1.3 → ndscape-0.1.4}/scripts/download_zenodo.py +0 -0
  42. {ndscape-0.1.3 → ndscape-0.1.4}/scripts/make_ablation_summaries.py +0 -0
  43. {ndscape-0.1.3 → ndscape-0.1.4}/scripts/make_ablation_tables.py +0 -0
  44. {ndscape-0.1.3 → ndscape-0.1.4}/scripts/make_artifacts.py +0 -0
  45. {ndscape-0.1.3 → ndscape-0.1.4}/scripts/make_dataset_plots.py +0 -0
  46. {ndscape-0.1.3 → ndscape-0.1.4}/scripts/make_dataset_tables.py +0 -0
  47. {ndscape-0.1.3 → ndscape-0.1.4}/scripts/make_paper_tables.py +0 -0
  48. {ndscape-0.1.3 → ndscape-0.1.4}/scripts/make_simulation_plots.py +0 -0
  49. {ndscape-0.1.3 → ndscape-0.1.4}/scripts/make_simulation_tables.py +0 -0
  50. {ndscape-0.1.3 → ndscape-0.1.4}/scripts/moran_simulation_analysis.py +0 -0
  51. {ndscape-0.1.3 → ndscape-0.1.4}/scripts/verify_artifacts.py +0 -0
  52. {ndscape-0.1.3 → ndscape-0.1.4}/setup.cfg +0 -0
  53. {ndscape-0.1.3 → ndscape-0.1.4}/zenodo/art_1_C10_N15000_s0_d2.joblib +0 -0
  54. {ndscape-0.1.3 → ndscape-0.1.4}/zenodo/art_1_C19_N15000_s0_d2.joblib +0 -0
  55. {ndscape-0.1.3 → ndscape-0.1.4}/zenodo/art_1_C6_N945_s0_d2.joblib +0 -0
  56. {ndscape-0.1.3 → ndscape-0.1.4}/zenodo/art_1_C7_N10395_s0_d2.joblib +0 -0
  57. {ndscape-0.1.3 → ndscape-0.1.4}/zenodo/art_1_C8_N15000_s0_d2.joblib +0 -0
  58. {ndscape-0.1.3 → ndscape-0.1.4}/zenodo/art_1_C9_N15000_s0_d2.joblib +0 -0
  59. {ndscape-0.1.3 → ndscape-0.1.4}/zenodo/bow_1_C6_N945_s0_d2.joblib +0 -0
  60. {ndscape-0.1.3 → ndscape-0.1.4}/zenodo/bow_1_C7_N10395_s0_d2.joblib +0 -0
  61. {ndscape-0.1.3 → ndscape-0.1.4}/zenodo/manifest.csv +0 -0
  62. {ndscape-0.1.3 → ndscape-0.1.4}/zenodo/rf_1_C6_N945_s0_d2.joblib +0 -0
  63. {ndscape-0.1.3 → ndscape-0.1.4}/zenodo/rf_1_C7_N10395_s0_d2.joblib +0 -0
  64. {ndscape-0.1.3 → ndscape-0.1.4}/zenodo/simulation_configs.csv +0 -0
  65. {ndscape-0.1.3 → ndscape-0.1.4}/zenodo/simulation_configs_dt.csv +0 -0
@@ -1,7 +1,7 @@
1
- cff-version: 1.1.0
1
+ cff-version: 1.2.0
2
2
  message: "If you use this software, please cite it as below."
3
3
  type: software
4
- title: "Nested-Dichotomy Tree-Space Embedding"
4
+ title: "ndscape: nested dichotomy tree-space embedding"
5
5
  abstract: >
6
6
  Code for scoring nested-dichotomy (ND) tree structures on
7
7
  multiclass datasets, embedding the tree space via metric MDS, and running
@@ -18,14 +18,30 @@ authors:
18
18
  orcid: "https://orcid.org/0000-0002-5959-1808"
19
19
 
20
20
  repository-code: "https://github.com/res-lucid/ndscape"
21
+ url: "https://res-lucid.github.io/ndscape-plots/"
21
22
  license: MIT
22
23
  doi: "10.5281/zenodo.20456943"
23
24
  version: "0.1.3"
24
25
  date-released: "2026-06-17"
25
26
  keywords:
27
+ - nested dichotomies
26
28
  - nested-dichotomy
29
+ - multiclass classification
27
30
  - tree-space
28
31
  - bias-variance
29
32
  - MDS
30
33
  - spatial-autocorrelation
31
34
  - machine-learning
35
+ preferred-citation:
36
+ type: article
37
+ title: "ndscape: a structural map of the nested dichotomy space"
38
+ authors:
39
+ - family-names: "Dix-Matthews"
40
+ given-names: "Maxwell"
41
+ - family-names: "Hodkiewicz"
42
+ given-names: "Melinda"
43
+ - family-names: "Polpo"
44
+ given-names: "Adriano"
45
+ year: 2026
46
+ doi: "10.48550/arXiv.2610.18050"
47
+ url: "https://arxiv.org/abs/2610.18050"
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ndscape
3
- Version: 0.1.3
4
- Summary: Fit, score, and embed nested-dichotomy (ND) trees for multiclass classification.
3
+ Version: 0.1.4
4
+ Summary: Nested dichotomies in Python: fit, score and map nested dichotomy trees for multiclass classification.
5
5
  Author: Maxwell Dix-Matthews
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/res-lucid/ndscape
@@ -10,7 +10,7 @@ Project-URL: Paper, https://arxiv.org/abs/2610.18050
10
10
  Project-URL: Issues, https://github.com/res-lucid/ndscape/issues
11
11
  Project-URL: Interactive maps, https://res-lucid.github.io/ndscape-plots/
12
12
  Project-URL: Data archive, https://doi.org/10.5281/zenodo.20456943
13
- Keywords: nested-dichotomy,multiclass,classification,scikit-learn
13
+ Keywords: nested-dichotomy,nested dichotomies,multiclass,multiclass classification,hierarchical classification,tree embedding,classification,scikit-learn
14
14
  Classifier: Programming Language :: Python :: 3
15
15
  Classifier: Intended Audience :: Science/Research
16
16
  Classifier: Topic :: Scientific/Engineering
@@ -30,7 +30,7 @@ Dynamic: license-file
30
30
 
31
31
  # ndscape
32
32
 
33
- Fit, score, and embed nested-dichotomy (ND) trees for multiclass classification.
33
+ Nested dichotomies in Python: fit, score and map nested dichotomy (ND) trees for multiclass classification.
34
34
 
35
35
  A nested dichotomy reduces an M-class problem to a tree of binary splits
36
36
  (e.g. {0,1,2} vs {3,4}, then {0} vs {1,2}, ...). ndscape lets you fit one,
@@ -1,9 +1,11 @@
1
- # ndscape: Nested Dichotomy Tree-Space Embedding
1
+ # ndscape: nested dichotomies in Python
2
2
 
3
3
  [![PyPI](https://img.shields.io/pypi/v/ndscape.svg)](https://pypi.org/project/ndscape/)
4
4
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.20456943.svg)](https://doi.org/10.5281/zenodo.20456943)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
6
6
 
7
+ `ndscape` is a Python package for nested dichotomies in multiclass classification: it fits and scores nested dichotomy trees and maps the space of possible trees, so that structurally similar trees sit close together.
8
+
7
9
  A classification model assigns an observation to one of several classes, and when there are more than two, the task becomes a multiclass problem. A nested dichotomy (ND) gives that multiclass problem a visible structure: it arranges the classes in a binary tree and fits a classifier at each split, so the final prediction is built from a sequence of simpler binary decisions.
8
10
 
9
11
  Any binary classifier can be used at the nodes. With probabilistic classifiers, the probability of each class is the product of the branch probabilities along its path from root to leaf. And because the tree records which classes are grouped together, where they separate, and in what order, you can inspect the fitted model and compare its structure with what you already know about the problem.
@@ -1,6 +1,6 @@
1
1
  # ndscape
2
2
 
3
- Fit, score, and embed nested-dichotomy (ND) trees for multiclass classification.
3
+ Nested dichotomies in Python: fit, score and map nested dichotomy (ND) trees for multiclass classification.
4
4
 
5
5
  A nested dichotomy reduces an M-class problem to a tree of binary splits
6
6
  (e.g. {0,1,2} vs {3,4}, then {0} vs {1,2}, ...). ndscape lets you fit one,
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ndscape
3
- Version: 0.1.3
4
- Summary: Fit, score, and embed nested-dichotomy (ND) trees for multiclass classification.
3
+ Version: 0.1.4
4
+ Summary: Nested dichotomies in Python: fit, score and map nested dichotomy trees for multiclass classification.
5
5
  Author: Maxwell Dix-Matthews
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://github.com/res-lucid/ndscape
@@ -10,7 +10,7 @@ Project-URL: Paper, https://arxiv.org/abs/2610.18050
10
10
  Project-URL: Issues, https://github.com/res-lucid/ndscape/issues
11
11
  Project-URL: Interactive maps, https://res-lucid.github.io/ndscape-plots/
12
12
  Project-URL: Data archive, https://doi.org/10.5281/zenodo.20456943
13
- Keywords: nested-dichotomy,multiclass,classification,scikit-learn
13
+ Keywords: nested-dichotomy,nested dichotomies,multiclass,multiclass classification,hierarchical classification,tree embedding,classification,scikit-learn
14
14
  Classifier: Programming Language :: Python :: 3
15
15
  Classifier: Intended Audience :: Science/Research
16
16
  Classifier: Topic :: Scientific/Engineering
@@ -30,7 +30,7 @@ Dynamic: license-file
30
30
 
31
31
  # ndscape
32
32
 
33
- Fit, score, and embed nested-dichotomy (ND) trees for multiclass classification.
33
+ Nested dichotomies in Python: fit, score and map nested dichotomy (ND) trees for multiclass classification.
34
34
 
35
35
  A nested dichotomy reduces an M-class problem to a tree of binary splits
36
36
  (e.g. {0,1,2} vs {3,4}, then {0} vs {1,2}, ...). ndscape lets you fit one,
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.1.4",
3
+ "distance": 0,
4
+ "node": "g9b53bcb260f27bd4169072e7427d2210a577aa9f",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-26"
8
+ }
@@ -5,14 +5,14 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  name = "ndscape"
7
7
  dynamic = ["version"]
8
- description = "Fit, score, and embed nested-dichotomy (ND) trees for multiclass classification."
8
+ description = "Nested dichotomies in Python: fit, score and map nested dichotomy trees for multiclass classification."
9
9
  readme = "ndscape/README.md"
10
10
  license = "MIT"
11
11
  requires-python = ">=3.9"
12
12
  authors = [
13
13
  {name = "Maxwell Dix-Matthews"},
14
14
  ]
15
- keywords = ["nested-dichotomy", "multiclass", "classification", "scikit-learn"]
15
+ keywords = ["nested-dichotomy", "nested dichotomies", "multiclass", "multiclass classification", "hierarchical classification", "tree embedding", "classification", "scikit-learn"]
16
16
  classifiers = [
17
17
  "Programming Language :: Python :: 3",
18
18
  "Intended Audience :: Science/Research",
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.1.3",
3
- "distance": 0,
4
- "node": "gafebddd2548a057e9978e5461015872ae1b75052",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-10-14"
8
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes