Algomancy 0.3.12__py3-none-any.whl → 0.3.17__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.
- algomancy/__init__.py +1 -1
- algomancy-0.3.17.dist-info/METADATA +128 -0
- algomancy-0.3.17.dist-info/RECORD +6 -0
- algomancy/gui_launcher.py +0 -162
- algomancy-0.3.12.dist-info/METADATA +0 -178
- algomancy-0.3.12.dist-info/RECORD +0 -7
- {algomancy-0.3.12.dist-info → algomancy-0.3.17.dist-info}/WHEEL +0 -0
- {algomancy-0.3.12.dist-info → algomancy-0.3.17.dist-info}/entry_points.txt +0 -0
- {algomancy-0.3.12.dist-info → algomancy-0.3.17.dist-info}/licenses/LICENSE +0 -0
algomancy/__init__.py
CHANGED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: Algomancy
|
|
3
|
+
Version: 0.3.17
|
|
4
|
+
Summary: A dashboarding framework for visualizing performances of algorithms or simulations in various scenarios.
|
|
5
|
+
Keywords: visualization,algorithm,simulation,scenario
|
|
6
|
+
Author: Pepijn Wissing
|
|
7
|
+
Author-email: Pepijn Wissing <pepijn.wissing@cqm.nl>
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Programming Language :: Python
|
|
11
|
+
Requires-Dist: algomancy-cli>=0.3.17
|
|
12
|
+
Requires-Dist: algomancy-content>=0.3.17
|
|
13
|
+
Requires-Dist: algomancy-data>=0.3.17
|
|
14
|
+
Requires-Dist: algomancy-gui>=0.3.17
|
|
15
|
+
Requires-Dist: algomancy-scenario>=0.3.17
|
|
16
|
+
Requires-Dist: algomancy-utils>=0.3.17
|
|
17
|
+
Requires-Dist: furo>=2025.12.19
|
|
18
|
+
Requires-Dist: myst-parser>=5.0.0
|
|
19
|
+
Requires-Dist: pydata-sphinx-theme>=0.16.1
|
|
20
|
+
Requires-Dist: sphinx>=9.1.0
|
|
21
|
+
Requires-Dist: sphinx-autobuild>=2025.8.25
|
|
22
|
+
Requires-Dist: sphinx-autodoc2>=0.5.0
|
|
23
|
+
Requires-Dist: sphinx-copybutton>=0.5.2
|
|
24
|
+
Requires-Dist: sphinx-design>=0.7.0
|
|
25
|
+
Requires-Dist: sphinx-rtd-theme>=3.1.0
|
|
26
|
+
Maintainer: Pepijn Wissing, Bart Post
|
|
27
|
+
Maintainer-email: Pepijn Wissing <pepijn.wissing@cqm.nl>, Bart Post <bart.post@cqm.nl>
|
|
28
|
+
Requires-Python: >=3.14
|
|
29
|
+
Description-Content-Type: text/markdown
|
|
30
|
+
|
|
31
|
+
# Algomancy
|
|
32
|
+
|
|
33
|
+
Algomancy is a lightweight framework for building interactive dashboards that visualize the performance of algorithms and/or simulations across scenarios. It brings together ETL, scenario orchestration, KPI computation, and a Dash-based UI with modular pages.
|
|
34
|
+
|
|
35
|
+
## Highlights
|
|
36
|
+
- Python 3.14+
|
|
37
|
+
- Dash UI with modular pages and a production-ready server
|
|
38
|
+
- Batteries-included packages: content, data, scenario, GUI, CLI
|
|
39
|
+
|
|
40
|
+
## Installation
|
|
41
|
+
- Using uv (recommended):
|
|
42
|
+
```
|
|
43
|
+
uv add algomancy
|
|
44
|
+
```
|
|
45
|
+
- Using pip:
|
|
46
|
+
```
|
|
47
|
+
pip install algomancy
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Minimal example
|
|
51
|
+
The following example launches a small placeholder dashboard using the default building blocks from the Algomancy ecosystem. Copy this into a file called `main.py` and run it.
|
|
52
|
+
|
|
53
|
+
## Set up folder structure
|
|
54
|
+
1. Create the following directory structure:
|
|
55
|
+
```text
|
|
56
|
+
root/
|
|
57
|
+
|── assets/ (*)
|
|
58
|
+
├── data/ (*)
|
|
59
|
+
├── src/
|
|
60
|
+
│ ├── data_handling/
|
|
61
|
+
│ ├── pages/
|
|
62
|
+
│ └── templates/
|
|
63
|
+
│ ├── kpi/
|
|
64
|
+
│ └── algorithm/
|
|
65
|
+
├── main.py (*)
|
|
66
|
+
├── README.md
|
|
67
|
+
└── pyproject.toml
|
|
68
|
+
```
|
|
69
|
+
> Only the items marked (*) are required.
|
|
70
|
+
|
|
71
|
+
2. create `main.py`
|
|
72
|
+
|
|
73
|
+
```python
|
|
74
|
+
from algomancy_gui.gui_launcher import GuiLauncher
|
|
75
|
+
from algomancy_gui.appconfiguration import AppConfiguration
|
|
76
|
+
from algomancy_content import (
|
|
77
|
+
PlaceholderETLFactory,
|
|
78
|
+
PlaceholderAlgorithm,
|
|
79
|
+
PlaceholderKPI,
|
|
80
|
+
placeholder_input_config,
|
|
81
|
+
)
|
|
82
|
+
from algomancy_data import DataSource
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def main() -> None:
|
|
86
|
+
host = "127.0.0.1"
|
|
87
|
+
port = 8050
|
|
88
|
+
|
|
89
|
+
app_cfg = AppConfiguration(
|
|
90
|
+
etl_factory = PlaceholderETLFactory,
|
|
91
|
+
kpi_templates = {"placeholder": PlaceholderKPI},
|
|
92
|
+
algo_templates = {"placeholder": PlaceholderAlgorithm},
|
|
93
|
+
input_configs = [placeholder_input_config],
|
|
94
|
+
host = host,
|
|
95
|
+
port = port,
|
|
96
|
+
title = "My Algomancy Dashboard",
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
app = GuiLauncher.build(app_cfg)
|
|
100
|
+
GuiLauncher.run(app=app, host=app_cfg.host, port=app_cfg.port)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
if __name__ == "__main__":
|
|
104
|
+
main()
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Run
|
|
108
|
+
- Save the file as `main.py` and start the app:
|
|
109
|
+
```
|
|
110
|
+
uv run main.py
|
|
111
|
+
```
|
|
112
|
+
- Open your browser at http://127.0.0.1:8050
|
|
113
|
+
|
|
114
|
+
Examples
|
|
115
|
+
- A more complete example (including assets and templates) is available in the algomancy repository under `example/`. The entry point is `example/main.py`.
|
|
116
|
+
|
|
117
|
+
Requirements
|
|
118
|
+
- Python 3.14+
|
|
119
|
+
- Windows, macOS, or Linux
|
|
120
|
+
|
|
121
|
+
CLI
|
|
122
|
+
- This package also exposes a CLI entry point `algomancy-cli`. Run `algomancy-cli --help` for usage.
|
|
123
|
+
|
|
124
|
+
License
|
|
125
|
+
- See the `LICENSE` file included with this distribution.
|
|
126
|
+
|
|
127
|
+
Changelog
|
|
128
|
+
- See `changelog.md` for notable changes.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
algomancy/__init__.py,sha256=dkvrhwjSiiD7AjvGU4fGtb3cLEmaEuWzxkO8lSnIgIY,410
|
|
2
|
+
algomancy-0.3.17.dist-info/licenses/LICENSE,sha256=pAZXnNE2dxxwXFIduGyn1gpvPefJtUYOYZOi3yeGG94,1068
|
|
3
|
+
algomancy-0.3.17.dist-info/WHEEL,sha256=fAguSjoiATBe7TNBkJwOjyL1Tt4wwiaQGtNtjRPNMQA,80
|
|
4
|
+
algomancy-0.3.17.dist-info/entry_points.txt,sha256=GjvkaIZyYVjM-PUQOiReMb_8MUJ944VU6LV0WqXSD9M,59
|
|
5
|
+
algomancy-0.3.17.dist-info/METADATA,sha256=pfGLimSd7LBxwa8FdfNuT9DbCLMyO-_MUAnARKXLvTo,3889
|
|
6
|
+
algomancy-0.3.17.dist-info/RECORD,,
|
algomancy/gui_launcher.py
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
from typing import Dict, Any, Union
|
|
2
|
-
import importlib.metadata
|
|
3
|
-
import os
|
|
4
|
-
|
|
5
|
-
from waitress import serve
|
|
6
|
-
import dash_auth
|
|
7
|
-
from dash import get_app, Dash, html, dcc
|
|
8
|
-
from dash_bootstrap_components.themes import BOOTSTRAP
|
|
9
|
-
|
|
10
|
-
from algomancy_gui.layout import LayoutCreator
|
|
11
|
-
from algomancy_gui.contentregistry import ContentRegistry
|
|
12
|
-
from algomancy_gui.settingsmanager import SettingsManager
|
|
13
|
-
from algomancy_gui.sessionmanager import SessionManager
|
|
14
|
-
from algomancy_gui.componentids import ACTIVE_SESSION
|
|
15
|
-
from algomancy_gui.appconfiguration import AppConfiguration
|
|
16
|
-
from algomancy_content.librarymanager import LibraryManager as lm
|
|
17
|
-
from algomancy_utils.logger import MessageStatus
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class GuiLauncher:
|
|
21
|
-
@staticmethod
|
|
22
|
-
def build(cfg: Union[AppConfiguration, Dict[str, Any]]) -> Dash:
|
|
23
|
-
# Normalize configuration to AppConfiguration for a single source of truth
|
|
24
|
-
if isinstance(cfg, dict):
|
|
25
|
-
cfg_obj = AppConfiguration(**cfg)
|
|
26
|
-
elif isinstance(cfg, AppConfiguration):
|
|
27
|
-
cfg_obj = cfg
|
|
28
|
-
else:
|
|
29
|
-
raise TypeError("DashLauncher.build expects AppConfiguration or dict")
|
|
30
|
-
|
|
31
|
-
session_manager: SessionManager = SessionManager.from_config(cfg_obj)
|
|
32
|
-
|
|
33
|
-
# Create the app
|
|
34
|
-
app = GuiLauncher._construct(
|
|
35
|
-
cfg=cfg_obj,
|
|
36
|
-
session_manager=session_manager,
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
# register authentication if enabled
|
|
40
|
-
if cfg_obj.use_authentication:
|
|
41
|
-
if not os.getenv("APP_USERNAME") or not os.getenv("APP_PASSWORD"):
|
|
42
|
-
raise ValueError(
|
|
43
|
-
"Environment variables 'APP_USERNAME' and 'APP_PASSWORD' must be set"
|
|
44
|
-
) # todo document where to set username and password
|
|
45
|
-
|
|
46
|
-
# add authentication to the app
|
|
47
|
-
dash_auth.BasicAuth(
|
|
48
|
-
app,
|
|
49
|
-
[[os.getenv("APP_USERNAME"), os.getenv("APP_PASSWORD")]],
|
|
50
|
-
secret_key="secret-key",
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
return app
|
|
54
|
-
|
|
55
|
-
@staticmethod
|
|
56
|
-
def _construct(
|
|
57
|
-
cfg: AppConfiguration,
|
|
58
|
-
session_manager: SessionManager,
|
|
59
|
-
) -> Dash:
|
|
60
|
-
# Initialize the app
|
|
61
|
-
external_stylesheets = [
|
|
62
|
-
BOOTSTRAP,
|
|
63
|
-
"https://use.fontawesome.com/releases/v5.15.4/css/all.css",
|
|
64
|
-
]
|
|
65
|
-
|
|
66
|
-
from pathlib import Path
|
|
67
|
-
|
|
68
|
-
assets_path = Path(os.getcwd()) / Path(cfg.assets_path)
|
|
69
|
-
|
|
70
|
-
app = Dash(
|
|
71
|
-
external_stylesheets=external_stylesheets,
|
|
72
|
-
suppress_callback_exceptions=True,
|
|
73
|
-
assets_folder=str(assets_path),
|
|
74
|
-
)
|
|
75
|
-
app.title = cfg.title
|
|
76
|
-
|
|
77
|
-
# register the scenario manager on the app object
|
|
78
|
-
app.server.session_manager = session_manager
|
|
79
|
-
|
|
80
|
-
# register the styling configuration on the app object
|
|
81
|
-
app.server.styling_config = cfg.styling_config
|
|
82
|
-
|
|
83
|
-
# register the settings manager on the app object for access in callbacks
|
|
84
|
-
app.server.settings = SettingsManager(cfg.as_dict())
|
|
85
|
-
|
|
86
|
-
# fetch standard pages
|
|
87
|
-
home_page, data_page, scenario_page, compare_page, overview_page = lm.get_pages(
|
|
88
|
-
cfg.as_dict()
|
|
89
|
-
)
|
|
90
|
-
|
|
91
|
-
# register the content register functions
|
|
92
|
-
content_registry = ContentRegistry()
|
|
93
|
-
app.server.content_registry = content_registry
|
|
94
|
-
|
|
95
|
-
# register pages
|
|
96
|
-
content_registry.register_pages(
|
|
97
|
-
home_page, data_page, scenario_page, compare_page, overview_page
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
# fill and run the app
|
|
101
|
-
app.layout = html.Div(
|
|
102
|
-
[
|
|
103
|
-
LayoutCreator.create_layout(cfg.styling_config),
|
|
104
|
-
dcc.Store(
|
|
105
|
-
id=ACTIVE_SESSION,
|
|
106
|
-
storage_type="session",
|
|
107
|
-
data=session_manager.start_session_name,
|
|
108
|
-
),
|
|
109
|
-
]
|
|
110
|
-
)
|
|
111
|
-
|
|
112
|
-
return app
|
|
113
|
-
|
|
114
|
-
@staticmethod
|
|
115
|
-
def run(
|
|
116
|
-
app: Dash,
|
|
117
|
-
host: str,
|
|
118
|
-
port: int,
|
|
119
|
-
threads: int = 8,
|
|
120
|
-
connection_limit: int = 100,
|
|
121
|
-
debug: bool = False,
|
|
122
|
-
) -> None:
|
|
123
|
-
sm = get_app().server.session_manager
|
|
124
|
-
|
|
125
|
-
algomancy_version = importlib.metadata.version("algomancy")
|
|
126
|
-
sm.log(f"Algomancy version: {algomancy_version}", MessageStatus.INFO)
|
|
127
|
-
|
|
128
|
-
if not debug:
|
|
129
|
-
sm.log(
|
|
130
|
-
"--------------------------------------------------------------------",
|
|
131
|
-
MessageStatus.SUCCESS,
|
|
132
|
-
)
|
|
133
|
-
sm.log(
|
|
134
|
-
f"Starting Dashboard server with Waitress on {host}:{port}...",
|
|
135
|
-
MessageStatus.SUCCESS,
|
|
136
|
-
)
|
|
137
|
-
sm.log(
|
|
138
|
-
f" threads:{threads}, connection limit: {connection_limit}",
|
|
139
|
-
MessageStatus.SUCCESS,
|
|
140
|
-
)
|
|
141
|
-
sm.log(
|
|
142
|
-
"--------------------------------------------------------------------",
|
|
143
|
-
MessageStatus.SUCCESS,
|
|
144
|
-
)
|
|
145
|
-
serve(
|
|
146
|
-
app.server,
|
|
147
|
-
host=host,
|
|
148
|
-
port=port,
|
|
149
|
-
threads=threads,
|
|
150
|
-
connection_limit=connection_limit,
|
|
151
|
-
)
|
|
152
|
-
else:
|
|
153
|
-
sm.log(
|
|
154
|
-
f"Starting Dashboard server in debug mode on {host}:{port}...",
|
|
155
|
-
MessageStatus.SUCCESS,
|
|
156
|
-
)
|
|
157
|
-
app.run(
|
|
158
|
-
debug=debug,
|
|
159
|
-
host=host,
|
|
160
|
-
port=port,
|
|
161
|
-
dev_tools_silence_routes_logging=False,
|
|
162
|
-
)
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: Algomancy
|
|
3
|
-
Version: 0.3.12
|
|
4
|
-
Summary: A dashboarding framework for visualizing performances of algorithms or simulations in various scenarios.
|
|
5
|
-
Keywords: visualization,algorithm,simulation,scenario
|
|
6
|
-
Author: Pepijn Wissing
|
|
7
|
-
Author-email: Pepijn Wissing <pepijn.wissing@cqm.nl>
|
|
8
|
-
License-File: LICENSE
|
|
9
|
-
Classifier: Development Status :: 4 - Beta
|
|
10
|
-
Classifier: Programming Language :: Python
|
|
11
|
-
Requires-Dist: algomancy-cli>=0.3.12
|
|
12
|
-
Requires-Dist: algomancy-content>=0.3.12
|
|
13
|
-
Requires-Dist: algomancy-data>=0.3.12
|
|
14
|
-
Requires-Dist: algomancy-gui>=0.3.12
|
|
15
|
-
Requires-Dist: algomancy-scenario>=0.3.12
|
|
16
|
-
Requires-Dist: algomancy-utils>=0.3.12
|
|
17
|
-
Requires-Dist: pytest>=8.4.2
|
|
18
|
-
Requires-Dist: ruff>=0.13.1
|
|
19
|
-
Requires-Dist: strenum>=0.4.15
|
|
20
|
-
Maintainer: Pepijn Wissing, Bart Post
|
|
21
|
-
Maintainer-email: Pepijn Wissing <pepijn.wissing@cqm.nl>, Bart Post <bart.post@cqm.nl>
|
|
22
|
-
Requires-Python: >=3.14
|
|
23
|
-
Description-Content-Type: text/markdown
|
|
24
|
-
|
|
25
|
-
# Algomancy
|
|
26
|
-
|
|
27
|
-
A lightweight framework for building interactive dashboards to visualize the performance of algorithms and/or simulations across scenarios. It provides data ingestion (ETL), scenario orchestration, KPI computation, and a Dash-based UI with modular pages.
|
|
28
|
-
|
|
29
|
-
### Overview
|
|
30
|
-
- Language/stack: Python 3.14+, Dash (frontend/server), Waitress (production WSGI), PyTest (tests), Ruff (lint). Optional: uv as package manager (uv.lock present).
|
|
31
|
-
- Package layout: Installable Python package (setuptools/pyproject). Library entry points are in algomancy/, with an example executable script main-example.py.
|
|
32
|
-
- Use cases: Rapid prototyping of algorithm scenario experiments and visual inspection of results.
|
|
33
|
-
|
|
34
|
-
### Requirements
|
|
35
|
-
- Python: 3.14+
|
|
36
|
-
- OS: Windows, macOS, or Linux
|
|
37
|
-
- Dependencies (core): dash, dash-bootstrap-components, dash-auth (optional), dash-extensions, dash-iconify, pandas, fastparquet, openpyxl, diskcache, strenum, tabulate, waitress, python-dotenv
|
|
38
|
-
- Dev/test tools: pytest, ruff, wheel
|
|
39
|
-
- Optional tools: uv (if you prefer uv over pip)
|
|
40
|
-
|
|
41
|
-
## Installation
|
|
42
|
-
You can install the published package from the private Azure Artifacts feed (keep this section) or install locally in editable/development mode.
|
|
43
|
-
|
|
44
|
-
### From PyPI
|
|
45
|
-
- Install Algomancy:
|
|
46
|
-
```
|
|
47
|
-
uv add algomancy
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Running the Example App
|
|
51
|
-
This repo includes an example application that exercises the framework components.
|
|
52
|
-
- CLI
|
|
53
|
-
python main-example.py --host 127.0.0.1 --port 8050 --threads 8 --connections 100 --debug False
|
|
54
|
-
- Defaults
|
|
55
|
-
If flags are omitted, sensible defaults are applied inside main() (e.g., host differs by OS, port=8050).
|
|
56
|
-
- After starting, open http://127.0.0.1:8050 (or the host/port you chose) in your browser.
|
|
57
|
-
|
|
58
|
-
### Programmatic Usage (library)
|
|
59
|
-
You can embed Algomancy into your own app using the DashLauncher helper.
|
|
60
|
-
- Minimal sketch:
|
|
61
|
-
|
|
62
|
-
```python
|
|
63
|
-
from src.algomancy import BaseDataSource
|
|
64
|
-
from src.algomancy.gui_launcher import GuiLauncher
|
|
65
|
-
from algomancy_gui.appconfiguration import AppConfiguration
|
|
66
|
-
|
|
67
|
-
configuration = {
|
|
68
|
-
"assets_path": "assets",
|
|
69
|
-
"data_path": "tests/data",
|
|
70
|
-
"has_persistent_state": True,
|
|
71
|
-
"save_type": "json",
|
|
72
|
-
"data_object_type": BaseDataSource,
|
|
73
|
-
"etl_factory": YourETLFactory,
|
|
74
|
-
"kpi_templates": your_kpi_templates,
|
|
75
|
-
"algo_templates": your_algorithm_templates,
|
|
76
|
-
"input_configs": your_input_configs,
|
|
77
|
-
"autorun": False,
|
|
78
|
-
"home_content": "placeholder",
|
|
79
|
-
"data_content": "placeholder",
|
|
80
|
-
"scenario_content": "placeholder",
|
|
81
|
-
"compare_content": "placeholder",
|
|
82
|
-
"compare_compare": "placeholder",
|
|
83
|
-
"compare_details": "placeholder",
|
|
84
|
-
"overview_content": "placeholder",
|
|
85
|
-
"home_callbacks": None,
|
|
86
|
-
"data_callbacks": None,
|
|
87
|
-
"scenario_callbacks": None,
|
|
88
|
-
"compare_callbacks": None,
|
|
89
|
-
"overview_callbacks": None,
|
|
90
|
-
"styling_config": None, # see StylingConfigurator for options
|
|
91
|
-
"title": "My Algomancy Dashboard",
|
|
92
|
-
"use_authentication": False,
|
|
93
|
-
}
|
|
94
|
-
app_cfg = AppConfiguration.from_dict(configuration) # or AppConfiguration(asset_path=...)
|
|
95
|
-
|
|
96
|
-
app = GuiLauncher.build(app_cfg)
|
|
97
|
-
GuiLauncher.run(app, host=app_cfg.host, port=app_cfg.port)
|
|
98
|
-
```
|
|
99
|
-
### Environment Variables
|
|
100
|
-
- Authentication (optional): If configuration["use_authentication"] is True, set these before launching:
|
|
101
|
-
APP_USERNAME=<username>
|
|
102
|
-
APP_PASSWORD=<password>
|
|
103
|
-
If either is missing, DashLauncher.build will raise a ValueError.
|
|
104
|
-
- Other env vars: Not required by default. You may use a .env file with python-dotenv if you extend the app. TODO: Document any project-specific environment variables if/when they are introduced.
|
|
105
|
-
|
|
106
|
-
### Scripts and Common Commands
|
|
107
|
-
- Run example app:
|
|
108
|
-
python main-example.py
|
|
109
|
-
- Run tests:
|
|
110
|
-
pytest -q
|
|
111
|
-
- Run tests with verbose output:
|
|
112
|
-
pytest -vv
|
|
113
|
-
- Lint with Ruff:
|
|
114
|
-
ruff check .
|
|
115
|
-
- Format with Ruff (if you choose to enable it):
|
|
116
|
-
ruff format .
|
|
117
|
-
|
|
118
|
-
### Testing
|
|
119
|
-
- Framework uses pytest; tests are under tests/.
|
|
120
|
-
- Example dataset is in tests/data and tests/data/example_data.
|
|
121
|
-
- Some tests are marked xfail intentionally (e.g., missing setters) to capture current behavior. You can run them as-is to verify baseline expectations.
|
|
122
|
-
|
|
123
|
-
### Project Structure
|
|
124
|
-
High-level layout (non-exhaustive):
|
|
125
|
-
- algomancy/ Core package
|
|
126
|
-
- launcher.py Build and run Dash app (DashLauncher)
|
|
127
|
-
- dataengine/ Data loading, ETL, schema, validation
|
|
128
|
-
- scenarioengine/ Scenario orchestration, algorithms, KPIs
|
|
129
|
-
- components/ Dash UI components and pages
|
|
130
|
-
- contentcreatorlibrary/ Ready-made content creators (examples/standard/placeholder)
|
|
131
|
-
- dashboardlogger/ Logging utilities
|
|
132
|
-
- settingsmanager.py Shared runtime settings access
|
|
133
|
-
- stylingconfigurator.py Theme, colors, layout selection
|
|
134
|
-
- example_implementation/ Example ETL, pages, and templates
|
|
135
|
-
- assets/ Static assets (images/styles)
|
|
136
|
-
- tests/ PyTest suites and data files
|
|
137
|
-
- main-example.py Example app entry point
|
|
138
|
-
- pyproject.toml Build configuration (setuptools)
|
|
139
|
-
- uv.lock Lock file for uv (optional)
|
|
140
|
-
|
|
141
|
-
### Entry Points
|
|
142
|
-
- Example executable: main-example.py (CLI and default run)
|
|
143
|
-
- Library: DashLauncher in algomancy/launcher.py
|
|
144
|
-
- There are no console_scripts defined in pyproject.toml.
|
|
145
|
-
|
|
146
|
-
### Configuration Notes
|
|
147
|
-
- Styling: See algomancy/stylingconfigurator.py for layout and color options.
|
|
148
|
-
- Content registration: algomancy/contentcreatorlibrary and algomancy/contentregistry.py provide standard/example/placeholder content.
|
|
149
|
-
- Server: DashLauncher.run uses Waitress in non-debug mode; Dash’s built-in server is used for debug.
|
|
150
|
-
|
|
151
|
-
### Package Management
|
|
152
|
-
- The project is defined via pyproject.toml with setuptools. Use pip for installs by default.
|
|
153
|
-
- A uv.lock file is present; you may use uv if preferred. This repository does not mandate uv.
|
|
154
|
-
|
|
155
|
-
### CI/CD
|
|
156
|
-
- Pipelines configuration files are present under Pipelines/ (Azure DevOps YAML). TODO: Document pipeline triggers, variables, and publishing steps if relevant.
|
|
157
|
-
|
|
158
|
-
### License
|
|
159
|
-
- License: Restricted (as declared in pyproject.toml). Distribution and usage may be limited. Consult the project owners for permissions.
|
|
160
|
-
|
|
161
|
-
### Changelog
|
|
162
|
-
- See changelog.md for notable changes.
|
|
163
|
-
|
|
164
|
-
### Contributing
|
|
165
|
-
- Open issues and pull requests as needed. Run ruff and pytest locally before pushing.
|
|
166
|
-
- TODO: Add contributor guidelines and code style policy if required.
|
|
167
|
-
|
|
168
|
-
### Support
|
|
169
|
-
- Maintainers: See pyproject.toml authors/maintainers fields.
|
|
170
|
-
- For private package feed access or deployment, contact project maintainers.
|
|
171
|
-
|
|
172
|
-
# Update version
|
|
173
|
-
Option A: Update Pipfile to point to the existing wheel (preferred)
|
|
174
|
-
In Pipfile, replace the algomancy source pointing to 0.2.5 with the local 0.2.6 wheel path:
|
|
175
|
-
Example: algomancy = {path = "dist/algomancy-0.2.6-py3-none-any.whl"}
|
|
176
|
-
Then regenerate lockfile and install:
|
|
177
|
-
pipenv lock --clear
|
|
178
|
-
pipenv install
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
algomancy/__init__.py,sha256=g3AqZHGkN5Ap2EHhnBnnAV9u2OhXy3MlAWTJOLp478s,409
|
|
2
|
-
algomancy/gui_launcher.py,sha256=TL-PkZgKCjMO9K0v1uekR3mYNsaqhPlOSe70_TQ_B_s,5324
|
|
3
|
-
algomancy-0.3.12.dist-info/licenses/LICENSE,sha256=pAZXnNE2dxxwXFIduGyn1gpvPefJtUYOYZOi3yeGG94,1068
|
|
4
|
-
algomancy-0.3.12.dist-info/WHEEL,sha256=fAguSjoiATBe7TNBkJwOjyL1Tt4wwiaQGtNtjRPNMQA,80
|
|
5
|
-
algomancy-0.3.12.dist-info/entry_points.txt,sha256=GjvkaIZyYVjM-PUQOiReMb_8MUJ944VU6LV0WqXSD9M,59
|
|
6
|
-
algomancy-0.3.12.dist-info/METADATA,sha256=J5zuWguYFs0PmGh1rRkahLDCjChRjL0IMuRbrsjQ1kY,7810
|
|
7
|
-
algomancy-0.3.12.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|