algorhino-anemone 0.1.1__py3-none-any.whl
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.
- algorhino_anemone-0.1.1.dist-info/METADATA +151 -0
- algorhino_anemone-0.1.1.dist-info/RECORD +82 -0
- algorhino_anemone-0.1.1.dist-info/WHEEL +5 -0
- algorhino_anemone-0.1.1.dist-info/licenses/LICENSE +674 -0
- algorhino_anemone-0.1.1.dist-info/top_level.txt +1 -0
- anemone/__init__.py +27 -0
- anemone/basics.py +36 -0
- anemone/factory.py +161 -0
- anemone/indices/__init__.py +0 -0
- anemone/indices/index_manager/__init__.py +12 -0
- anemone/indices/index_manager/factory.py +50 -0
- anemone/indices/index_manager/node_exploration_manager.py +549 -0
- anemone/indices/node_indices/__init__.py +22 -0
- anemone/indices/node_indices/factory.py +121 -0
- anemone/indices/node_indices/index_data.py +166 -0
- anemone/indices/node_indices/index_types.py +20 -0
- anemone/nn/torch_evaluator.py +108 -0
- anemone/node_evaluation/__init__.py +0 -0
- anemone/node_evaluation/node_direct_evaluation/__init__.py +22 -0
- anemone/node_evaluation/node_direct_evaluation/factory.py +12 -0
- anemone/node_evaluation/node_direct_evaluation/node_direct_evaluator.py +192 -0
- anemone/node_evaluation/node_tree_evaluation/node_minmax_evaluation.py +885 -0
- anemone/node_evaluation/node_tree_evaluation/node_tree_evaluation.py +137 -0
- anemone/node_evaluation/node_tree_evaluation/node_tree_evaluation_factory.py +43 -0
- anemone/node_factory/__init__.py +14 -0
- anemone/node_factory/algorithm_node_factory.py +123 -0
- anemone/node_factory/base.py +76 -0
- anemone/node_selector/__init__.py +32 -0
- anemone/node_selector/branch_explorer.py +89 -0
- anemone/node_selector/factory.py +65 -0
- anemone/node_selector/node_selector.py +44 -0
- anemone/node_selector/node_selector_args.py +22 -0
- anemone/node_selector/node_selector_types.py +15 -0
- anemone/node_selector/notations_and_statics.py +88 -0
- anemone/node_selector/opening_instructions.py +249 -0
- anemone/node_selector/recurzipf/__init__.py +0 -0
- anemone/node_selector/recurzipf/recur_zipf_base.py +141 -0
- anemone/node_selector/sequool/__init__.py +19 -0
- anemone/node_selector/sequool/factory.py +102 -0
- anemone/node_selector/sequool/sequool.py +395 -0
- anemone/node_selector/uniform/__init__.py +16 -0
- anemone/node_selector/uniform/uniform.py +113 -0
- anemone/nodes/__init__.py +15 -0
- anemone/nodes/algorithm_node/__init__.py +7 -0
- anemone/nodes/algorithm_node/algorithm_node.py +204 -0
- anemone/nodes/itree_node.py +136 -0
- anemone/nodes/tree_node.py +240 -0
- anemone/nodes/tree_traversal.py +108 -0
- anemone/nodes/utils.py +146 -0
- anemone/progress_monitor/__init__.py +0 -0
- anemone/progress_monitor/progress_monitor.py +375 -0
- anemone/recommender_rule/__init__.py +12 -0
- anemone/recommender_rule/recommender_rule.py +140 -0
- anemone/search_factory/__init__.py +14 -0
- anemone/search_factory/search_factory.py +192 -0
- anemone/state_transition.py +47 -0
- anemone/tree_and_value_branch_selector.py +99 -0
- anemone/tree_exploration.py +274 -0
- anemone/tree_manager/__init__.py +29 -0
- anemone/tree_manager/algorithm_node_tree_manager.py +246 -0
- anemone/tree_manager/factory.py +77 -0
- anemone/tree_manager/tree_expander.py +122 -0
- anemone/tree_manager/tree_manager.py +254 -0
- anemone/trees/__init__.py +14 -0
- anemone/trees/descendants.py +765 -0
- anemone/trees/factory.py +80 -0
- anemone/trees/tree.py +70 -0
- anemone/trees/tree_visualization.py +143 -0
- anemone/updates/__init__.py +33 -0
- anemone/updates/algorithm_node_updater.py +157 -0
- anemone/updates/factory.py +36 -0
- anemone/updates/index_block.py +91 -0
- anemone/updates/index_updater.py +100 -0
- anemone/updates/minmax_evaluation_updater.py +108 -0
- anemone/updates/updates_file.py +248 -0
- anemone/updates/value_block.py +133 -0
- anemone/utils/comparable.py +32 -0
- anemone/utils/dataclass.py +64 -0
- anemone/utils/dict_of_numbered_dict_with_pointer_on_max.py +128 -0
- anemone/utils/logger.py +94 -0
- anemone/utils/my_value_sorted_dict.py +27 -0
- anemone/utils/small_tools.py +103 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: algorhino-anemone
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: anemone searches trees
|
|
5
|
+
Author-email: Victor Gabillon <victorgabillon@gmail.com>
|
|
6
|
+
License-Expression: GPL-3.0-only
|
|
7
|
+
Project-URL: Homepage, https://github.com/victorgabillon/anemone
|
|
8
|
+
Project-URL: Bug Tracker, https://github.com/victorgabillon/anemone/issues
|
|
9
|
+
Keywords: tree,search
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Requires-Python: >=3.13
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
License-File: LICENSE
|
|
15
|
+
Requires-Dist: valanga
|
|
16
|
+
Requires-Dist: atomheart
|
|
17
|
+
Requires-Dist: rich
|
|
18
|
+
Requires-Dist: sortedcollections>=2.1.0
|
|
19
|
+
Requires-Dist: graphviz
|
|
20
|
+
Provides-Extra: test
|
|
21
|
+
Requires-Dist: pytest>=8.4.1; extra == "test"
|
|
22
|
+
Requires-Dist: coverage; extra == "test"
|
|
23
|
+
Requires-Dist: pytest-cov>=6.0.0; extra == "test"
|
|
24
|
+
Provides-Extra: lint
|
|
25
|
+
Requires-Dist: ruff>=0.14.1; extra == "lint"
|
|
26
|
+
Requires-Dist: pylint>=3.3.8; extra == "lint"
|
|
27
|
+
Provides-Extra: typecheck
|
|
28
|
+
Requires-Dist: mypy>=1.18.2; extra == "typecheck"
|
|
29
|
+
Requires-Dist: pyright[nodejs]>=1.1.408; extra == "typecheck"
|
|
30
|
+
Requires-Dist: types-PyYAML>=6.0.12.12; extra == "typecheck"
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: tox>=4.32.0; extra == "dev"
|
|
33
|
+
Requires-Dist: black>=25.1.0; extra == "dev"
|
|
34
|
+
Requires-Dist: build; extra == "dev"
|
|
35
|
+
Requires-Dist: twine; extra == "dev"
|
|
36
|
+
Requires-Dist: sphinx; extra == "dev"
|
|
37
|
+
Requires-Dist: sphinx-rtd-theme; extra == "dev"
|
|
38
|
+
Requires-Dist: sphinx-autodoc-typehints; extra == "dev"
|
|
39
|
+
Requires-Dist: pre-commit; extra == "dev"
|
|
40
|
+
Provides-Extra: nn
|
|
41
|
+
Requires-Dist: algorhino-coral; extra == "nn"
|
|
42
|
+
Requires-Dist: torch; extra == "nn"
|
|
43
|
+
Dynamic: license-file
|
|
44
|
+
|
|
45
|
+
# anemone
|
|
46
|
+
|
|
47
|
+
`anemone` is a Python library for tree search over `valanga` game states. It builds a
|
|
48
|
+
shared tree graph and layers algorithm-specific wrappers on top so you can plug in
|
|
49
|
+
node evaluation, exploration indices, and selection policies for "tree and value"
|
|
50
|
+
searches.
|
|
51
|
+
|
|
52
|
+
## Highlights
|
|
53
|
+
|
|
54
|
+
- Tree-and-value exploration pipeline driven by `TreeAndValueBranchSelector`.
|
|
55
|
+
- Modular factories for node evaluation, selection, index computation, and tree
|
|
56
|
+
management.
|
|
57
|
+
- Pluggable stopping criteria and recommender rules for final branch selection.
|
|
58
|
+
- Optional torch-based evaluator for batched neural evaluations.
|
|
59
|
+
|
|
60
|
+
## Installation
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
pip install anemone
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Optional torch integration:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
pip install anemone[nn]
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Quick start
|
|
73
|
+
|
|
74
|
+
`anemone` exposes factory helpers to build a branch selector configured with your
|
|
75
|
+
node selector, evaluation, and stopping-criterion choices. At runtime you feed it a
|
|
76
|
+
`valanga` state and a seed to get back a branch recommendation.
|
|
77
|
+
|
|
78
|
+
```python
|
|
79
|
+
from random import Random
|
|
80
|
+
|
|
81
|
+
from anemone import TreeAndValuePlayerArgs, create_tree_and_value_branch_selector
|
|
82
|
+
from anemone.node_selector.factory import UniformArgs
|
|
83
|
+
from anemone.node_selector.node_selector_types import NodeSelectorType
|
|
84
|
+
from anemone.progress_monitor.progress_monitor import (
|
|
85
|
+
StoppingCriterionTypes,
|
|
86
|
+
TreeMoveLimitArgs,
|
|
87
|
+
)
|
|
88
|
+
from anemone.recommender_rule.recommender_rule import SoftmaxRule
|
|
89
|
+
|
|
90
|
+
# Populate the pieces specific to your game domain.
|
|
91
|
+
args = TreeAndValuePlayerArgs(
|
|
92
|
+
node_selector=UniformArgs(type=NodeSelectorType.UNIFORM),
|
|
93
|
+
opening_type=None,
|
|
94
|
+
stopping_criterion=TreeMoveLimitArgs(
|
|
95
|
+
type=StoppingCriterionTypes.TREE_MOVE_LIMIT,
|
|
96
|
+
tree_move_limit=100,
|
|
97
|
+
),
|
|
98
|
+
recommender_rule=SoftmaxRule(type="softmax", temperature=1.0),
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
selector = create_tree_and_value_branch_selector(
|
|
102
|
+
state_type=YourStateType,
|
|
103
|
+
args=args,
|
|
104
|
+
random_generator=Random(0),
|
|
105
|
+
master_state_evaluator=your_state_evaluator,
|
|
106
|
+
state_representation_factory=None,
|
|
107
|
+
queue_progress_player=None,
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
recommendation = selector.select_branch(state=current_state, selection_seed=0)
|
|
111
|
+
print(recommendation.branch_key)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Design
|
|
115
|
+
|
|
116
|
+
This codebase follows a “core node + wrappers” pattern.
|
|
117
|
+
|
|
118
|
+
- **`TreeNode` (core)**
|
|
119
|
+
- `TreeNode` is the canonical, shared data structure.
|
|
120
|
+
- It stores the graph structure: `branches_children` and `parent_nodes`.
|
|
121
|
+
- There is conceptually a single tree/graph of `TreeNode`s.
|
|
122
|
+
|
|
123
|
+
- **Wrappers implement `ITreeNode`**
|
|
124
|
+
- Higher-level nodes (e.g. `AlgorithmNode`) wrap a `TreeNode` and add algorithm-specific state:
|
|
125
|
+
evaluation, indices, representations, etc.
|
|
126
|
+
- Wrappers expose navigation by delegating to the underlying `TreeNode`.
|
|
127
|
+
|
|
128
|
+
- **Homogeneity at the wrapper level**
|
|
129
|
+
- Even though `TreeNode` is the core place where connections are stored, each wrapper is intended to be
|
|
130
|
+
*closed under parent/child links*:
|
|
131
|
+
- a wrapper’s `branches_children` and `parent_nodes` contain that same wrapper type.
|
|
132
|
+
- today this is typically either “all `TreeNode`” or “all `AlgorithmNode`”.
|
|
133
|
+
- in the future, another wrapper can exist (still implementing `ITreeNode`), and it should also be
|
|
134
|
+
homogeneous within itself.
|
|
135
|
+
|
|
136
|
+
The practical motivation is:
|
|
137
|
+
- algorithms can be written against `ITreeNode` (for navigation) and against wrappers like `AlgorithmNode`
|
|
138
|
+
(for algorithm-specific fields),
|
|
139
|
+
- while keeping a single shared underlying structure that can be accessed consistently from any wrapper.
|
|
140
|
+
|
|
141
|
+
## Repository layout
|
|
142
|
+
|
|
143
|
+
Each important package folder includes a local README with details. Start with:
|
|
144
|
+
|
|
145
|
+
- `src/anemone/` for the main search pipeline and public entry points.
|
|
146
|
+
- `src/anemone/node_selector/` for selection strategies (Uniform, RecurZipf, Sequool).
|
|
147
|
+
- `src/anemone/node_evaluation/` for direct evaluation and minmax tree evaluation.
|
|
148
|
+
- `src/anemone/tree_manager/`, `src/anemone/trees/`, and `src/anemone/updates/` for tree construction,
|
|
149
|
+
expansion, and backpropagation.
|
|
150
|
+
- `src/anemone/indices/` for exploration index computation and updates.
|
|
151
|
+
- `tests/` for index and tree-building fixtures.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
algorhino_anemone-0.1.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
2
|
+
anemone/__init__.py,sha256=iKX9OGJxbyIqe9Fy-xxZY6sdH7WcG4RFyPR0WBai7Ls,942
|
|
3
|
+
anemone/basics.py,sha256=jMKY9mFLbbMZ_xNvtBVlbZI_vP15rg2tUGUf9ZQ-9tw,1023
|
|
4
|
+
anemone/factory.py,sha256=xEE5Nx-I9rs-VyhPHQcGTMKSjbVYKYJCO75s5szLZIg,6544
|
|
5
|
+
anemone/state_transition.py,sha256=fxvHZOYRtWV5ExXRIoehdRg9qV6zhgiE5uiCeOc80Dc,1418
|
|
6
|
+
anemone/tree_and_value_branch_selector.py,sha256=AicjYcI1M_zrNZK4ZzYGcHjyCXGATkXGn6vn5bjdJ6s,4099
|
|
7
|
+
anemone/tree_exploration.py,sha256=718qW-mkHp2-LuMfRLHZoi8Oul_3Aq6kzTr31k_xBII,10881
|
|
8
|
+
anemone/indices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
anemone/indices/index_manager/__init__.py,sha256=P49ofGrnP_Nfmv63Rg_-Zvwn5NFvFFDQ3MD3GMeWNWw,515
|
|
10
|
+
anemone/indices/index_manager/factory.py,sha256=Fti6PTnLOEg0g5cqqRBMsmGGNZw6uVFiKpjv0B766qE,1783
|
|
11
|
+
anemone/indices/index_manager/node_exploration_manager.py,sha256=tcXDgaA7Kne62eOa-RCBTlLx-EYXT-2uTgo0IBNGEbM,21492
|
|
12
|
+
anemone/indices/node_indices/__init__.py,sha256=CHE89gUoI7pPtsnlg5WRUMEiFnFbnLQPy6apu06lVcU,774
|
|
13
|
+
anemone/indices/node_indices/factory.py,sha256=3jQA9Z4RNSD6oX9PlrMppGm7Q0v-CE2zQ2BGjp74Mc0,4045
|
|
14
|
+
anemone/indices/node_indices/index_data.py,sha256=EFa3gktB-EqCtGEPOH-4hDb8t0G6DrFGCJITr-Jlu20,5418
|
|
15
|
+
anemone/indices/node_indices/index_types.py,sha256=L5jaS0piNgwka1ptB6aKjGMIpToNm5Hd2wl0zDoThm8,569
|
|
16
|
+
anemone/nn/torch_evaluator.py,sha256=cXcaldEI5S8JE1Yy9aNUamVEK3DPsPmBmGeUi9611zU,3368
|
|
17
|
+
anemone/node_evaluation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
anemone/node_evaluation/node_direct_evaluation/__init__.py,sha256=2_YwJ3oe0KBfIc3Hs-FLz093RLZsTG-VaNmecLceoiY,898
|
|
19
|
+
anemone/node_evaluation/node_direct_evaluation/factory.py,sha256=lpFmBJkIGAnar5-pQ1vMze9jUFKFchp5Pg2S8eK-ABM,470
|
|
20
|
+
anemone/node_evaluation/node_direct_evaluation/node_direct_evaluator.py,sha256=eHrlyDpwOWpa-7eh8jpWb6-aVoLoDhOLcNJubf40obU,6390
|
|
21
|
+
anemone/node_evaluation/node_tree_evaluation/node_minmax_evaluation.py,sha256=npqy9r7ZKHGMJsDhSY7bZZbRvakwoTyABpwQOVTQ-ww,35126
|
|
22
|
+
anemone/node_evaluation/node_tree_evaluation/node_tree_evaluation.py,sha256=-fiuTO0nWKKiKWAdgFi-L8kKxIjH0A_0yeUKrp4fk34,4260
|
|
23
|
+
anemone/node_evaluation/node_tree_evaluation/node_tree_evaluation_factory.py,sha256=UY1glqflqMOqOPAHhtuzJ8QhGOp55Y9InqdhCMt9KJ8,1279
|
|
24
|
+
anemone/node_factory/__init__.py,sha256=1ijzc7oIpsEMdJQ1jkqfaonhyvPjeyKv0nDe8tCXRAQ,549
|
|
25
|
+
anemone/node_factory/algorithm_node_factory.py,sha256=COu6MiSyW-9M6pDZhJFAuWbp1E-HH9etm90VCoR5r0E,3919
|
|
26
|
+
anemone/node_factory/base.py,sha256=2utUE5s-KbMtzfyiW3BfzTBnH_Qg4H5Oeosw0ERYJRQ,2132
|
|
27
|
+
anemone/node_selector/__init__.py,sha256=DThR5UV-4WZG4PT5Lo0RPv9_P83ixFGfOSFoGihKtuA,1320
|
|
28
|
+
anemone/node_selector/branch_explorer.py,sha256=3ywYkJe2R1Dg5nhmDXCgyhex85bT39Ql7ifRY--9Z_A,2677
|
|
29
|
+
anemone/node_selector/factory.py,sha256=XfTU7M-XiUsxPV3NpGjeiat7Px7Atzk5EMj8D3iV48k,1829
|
|
30
|
+
anemone/node_selector/node_selector.py,sha256=olAyA1_at7VkepZ0hI5S-zfmJAJOVk32XnMKnvHMX7w,1182
|
|
31
|
+
anemone/node_selector/node_selector_args.py,sha256=G0mDPXEOF6oYXqt1176srKrRwDoy31wN8gu9Hzy_8ic,555
|
|
32
|
+
anemone/node_selector/node_selector_types.py,sha256=827M2u8D_yBSdufvV3ufjGtj8r1aw4Xcdb7NXYq_T7M,329
|
|
33
|
+
anemone/node_selector/notations_and_statics.py,sha256=leB0s6yVGeymMWcbbdO5ViDInChLAgGw59-9Ltc3Urw,2653
|
|
34
|
+
anemone/node_selector/opening_instructions.py,sha256=B3ayjIgBjiT-8ZAQVQyYIJH66SBm1DElQoJtwY5h6Xc,8187
|
|
35
|
+
anemone/node_selector/recurzipf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
+
anemone/node_selector/recurzipf/recur_zipf_base.py,sha256=hdOHAnYQVSlhvuQSGaqHd79j5X8qeJrnzVU_yo8OBCo,5193
|
|
37
|
+
anemone/node_selector/sequool/__init__.py,sha256=k_YXvShw64GNIAWjZqdNPkUsdCMwPI_RSAmv4I2xxuk,485
|
|
38
|
+
anemone/node_selector/sequool/factory.py,sha256=jZqgUs9AR1iU1RI4Jc2OiqYsr_kGnnTabk4WterrtNU,3416
|
|
39
|
+
anemone/node_selector/sequool/sequool.py,sha256=qLwGDTlgC8SgD5BrUvQTpQ5nkfxwop5ceKDcDoiOLPo,12649
|
|
40
|
+
anemone/node_selector/uniform/__init__.py,sha256=fRGC0FL_fnXXeNoj3QeMQmNoESrFfSDaiHp-zHpF_zw,366
|
|
41
|
+
anemone/node_selector/uniform/uniform.py,sha256=9nGsG8NRgAKwYH-VBywUEAO6lDsgPRX84HkFzyB49TU,3710
|
|
42
|
+
anemone/nodes/__init__.py,sha256=yciGi5-PTnXXyuAtf2WfOAkK3_FsFxskfGLjqzHF0zc,384
|
|
43
|
+
anemone/nodes/itree_node.py,sha256=tMmH6fQtXH01DRluyOpRM44n4_1-sndWBKMFsUf-Zt8,3564
|
|
44
|
+
anemone/nodes/tree_node.py,sha256=_n1dHgII40gtRBYiHvB5UDgQykSSsfLGSdb5IX-67Yc,8333
|
|
45
|
+
anemone/nodes/tree_traversal.py,sha256=du_NuWpRX2Qi-9w2WTeos4lEHHj-lrN3yUbdp9tEA2U,3955
|
|
46
|
+
anemone/nodes/utils.py,sha256=KvXQcUcTWx8GvWmhykimgt9m-8WTKoALrnG-3WgNx80,5067
|
|
47
|
+
anemone/nodes/algorithm_node/__init__.py,sha256=8cNk3PmDzd22K78YWiO29Mu5A1FCObzPwEfWE1ym6Jk,116
|
|
48
|
+
anemone/nodes/algorithm_node/algorithm_node.py,sha256=VgUzzouLWO4Pcx3yglAzngF6sJ5VAf3PyZmsm8-tqRU,6501
|
|
49
|
+
anemone/progress_monitor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
+
anemone/progress_monitor/progress_monitor.py,sha256=oK0gckMoFqQaOrOwybtW58tcBQz7PqkKV0Lu1V-gXpw,10821
|
|
51
|
+
anemone/recommender_rule/__init__.py,sha256=9K73T0bkpvHg0IsQc1OW8QgsUhCNYq9ceqPMkwdqE8c,347
|
|
52
|
+
anemone/recommender_rule/recommender_rule.py,sha256=w6Y83j_LlnBx0iz25_OGFRZ1VnjlUXKZjlQfIjCRu5s,4594
|
|
53
|
+
anemone/search_factory/__init__.py,sha256=ToU88Fa1lBBdf2AYTJ2PNVwWzi5Hzh-78-WOxClVkN4,619
|
|
54
|
+
anemone/search_factory/search_factory.py,sha256=vCkxJk4cs6i6jjrTrUAsRBtp38N84j_uhyvpYIODoG4,6757
|
|
55
|
+
anemone/tree_manager/__init__.py,sha256=D3j8emzRNF1fkPTpNUPsXbqAzMM9SyI3Ty_4Y_b2Tas,962
|
|
56
|
+
anemone/tree_manager/algorithm_node_tree_manager.py,sha256=s4Iojk9u1fsNso_wH5xMYxHmGIFneLmQN9As2bfViT4,8811
|
|
57
|
+
anemone/tree_manager/factory.py,sha256=d10uuf5DtHZ_jKT7Z688Wd3_a7TewwmUywlTeWdUQwc,2679
|
|
58
|
+
anemone/tree_manager/tree_expander.py,sha256=qq_8EvRaVpgzqI4W3jvI8VJyOnknYgxQuz8yv_pUVkE,4285
|
|
59
|
+
anemone/tree_manager/tree_manager.py,sha256=u-4DsgDxu_7uPUTbWYXYLr9_7NGyPJ25bSYXC2RUc-E,8312
|
|
60
|
+
anemone/trees/__init__.py,sha256=FtX6ZDfZI7JDjv6IAgKRVytJmafL3Vod3RF7L-bDTWc,269
|
|
61
|
+
anemone/trees/descendants.py,sha256=KaEyesB1D5Rxpfl-LrH6pcWM0HV5zkv-2_2GQx_bjX0,27429
|
|
62
|
+
anemone/trees/factory.py,sha256=GIZcojZzxl5VG6lEpxxF9PV8VZnS-c18xWxg0dza0r8,2180
|
|
63
|
+
anemone/trees/tree.py,sha256=90ElKy10ev0YRKwyWo0Ck49WA2iqrVQjM44CQdsm8Sg,2201
|
|
64
|
+
anemone/trees/tree_visualization.py,sha256=gLWoADmuy9MumNR4KLbeWvz3YBU2-bfYO8tvB_ih9FQ,4736
|
|
65
|
+
anemone/updates/__init__.py,sha256=YZsQ8c7RcjC8aHTmty5BiEWfo4_D2GDxZ2_BoyjLJnI,1111
|
|
66
|
+
anemone/updates/algorithm_node_updater.py,sha256=zIoqIRhQNcY5P2JoZ_EM_GB5TrCrWZyrGiMLqEuxStM,5865
|
|
67
|
+
anemone/updates/factory.py,sha256=OuN6cHp9KwSL9bbIEoaJgikp_gX4tU7AjWKasbgttGE,1207
|
|
68
|
+
anemone/updates/index_block.py,sha256=3aVUwcVhwHYm1y2FWGULgMqaw_2FhXDpLue_kbDsLxw,3104
|
|
69
|
+
anemone/updates/index_updater.py,sha256=aFxTtVwLfSwl089_4Sxsce8DDD8NERaUOdj_RqyJUSI,3638
|
|
70
|
+
anemone/updates/minmax_evaluation_updater.py,sha256=sABx1CzXArtxFXwN1Rkq042qKUDVBphpJ6oO3WUh1OQ,4058
|
|
71
|
+
anemone/updates/updates_file.py,sha256=QQRWbYmET2KyWyg_8Qq-WC4jR4FPclWPh7vc01kexdM,10092
|
|
72
|
+
anemone/updates/value_block.py,sha256=TSo7RNmlCxrQpjPIKHNRGU9IfzKE3FA5BCptwwOujAs,4667
|
|
73
|
+
anemone/utils/comparable.py,sha256=eTD81347Qv1dkGR4rD0ep2tbbBR2Mk_4JXZkkYTxiNw,945
|
|
74
|
+
anemone/utils/dataclass.py,sha256=X77ilEUTIVUudfISYlm7rq3tptqUwdLBOzLDy-gL6t8,1781
|
|
75
|
+
anemone/utils/dict_of_numbered_dict_with_pointer_on_max.py,sha256=vVbMWtQavI23zYJ4AuletvSaHrLDfOgvmNPTGolWjVk,4154
|
|
76
|
+
anemone/utils/logger.py,sha256=bJQ8COqdn5obtbi8TuokQHmdHpp57XRksTmfvCLLfyM,2973
|
|
77
|
+
anemone/utils/my_value_sorted_dict.py,sha256=LbqtpBSCS7VrUTUChWCsi18IKZj65FkTJREqbl-xSVA,619
|
|
78
|
+
anemone/utils/small_tools.py,sha256=l9dy5Oqvuvg8qQXqJUfyb3uwBHwVGVrKz6WeTHjyLTk,2766
|
|
79
|
+
algorhino_anemone-0.1.1.dist-info/METADATA,sha256=KTyN1GWK_byEBRVXThAN4PTgewAYl5Knu4HwZrMTap0,5669
|
|
80
|
+
algorhino_anemone-0.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
81
|
+
algorhino_anemone-0.1.1.dist-info/top_level.txt,sha256=G1vbB-vAevQVde3UZ5X1_Ysy1_6sJDEueHRi2qcDgrY,8
|
|
82
|
+
algorhino_anemone-0.1.1.dist-info/RECORD,,
|