circadian-workbench 0.5.0__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.
- circadian_workbench-0.5.0/LICENSE +21 -0
- circadian_workbench-0.5.0/MANIFEST.in +10 -0
- circadian_workbench-0.5.0/PKG-INFO +90 -0
- circadian_workbench-0.5.0/PYPI_README.md +50 -0
- circadian_workbench-0.5.0/pyproject.toml +85 -0
- circadian_workbench-0.5.0/setup.cfg +4 -0
- circadian_workbench-0.5.0/src/circadian_workbench/__init__.py +3 -0
- circadian_workbench-0.5.0/src/circadian_workbench/actions.py +2137 -0
- circadian_workbench-0.5.0/src/circadian_workbench/analysis.py +3747 -0
- circadian_workbench-0.5.0/src/circadian_workbench/api.py +2185 -0
- circadian_workbench-0.5.0/src/circadian_workbench/auth/__init__.py +30 -0
- circadian_workbench-0.5.0/src/circadian_workbench/auth/passwords.py +53 -0
- circadian_workbench-0.5.0/src/circadian_workbench/auth/service.py +501 -0
- circadian_workbench-0.5.0/src/circadian_workbench/auth/web.py +311 -0
- circadian_workbench-0.5.0/src/circadian_workbench/backup/__init__.py +28 -0
- circadian_workbench-0.5.0/src/circadian_workbench/backup/service.py +321 -0
- circadian_workbench-0.5.0/src/circadian_workbench/cli.py +282 -0
- circadian_workbench-0.5.0/src/circadian_workbench/config.py +362 -0
- circadian_workbench-0.5.0/src/circadian_workbench/demo.py +32 -0
- circadian_workbench-0.5.0/src/circadian_workbench/export_figures.py +2120 -0
- circadian_workbench-0.5.0/src/circadian_workbench/io.py +419 -0
- circadian_workbench-0.5.0/src/circadian_workbench/jobs/__init__.py +14 -0
- circadian_workbench-0.5.0/src/circadian_workbench/jobs/runner.py +319 -0
- circadian_workbench-0.5.0/src/circadian_workbench/launcher.py +186 -0
- circadian_workbench-0.5.0/src/circadian_workbench/methods_text.py +414 -0
- circadian_workbench-0.5.0/src/circadian_workbench/models.py +92 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/__init__.py +37 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/atomic.py +134 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/database.py +204 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/layout.py +95 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/__init__.py +6 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/env.py +54 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/script.py.mako +24 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/0001_initial_layout.py +30 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/0002_accounts_auth.py +57 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/0003_recordings.py +55 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/0004_workspaces.py +67 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/0005_sharing_audit.py +54 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/0006_jobs.py +45 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/0007_group_labels.py +33 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/__init__.py +2 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/readiness.py +71 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/tables.py +298 -0
- circadian_workbench-0.5.0/src/circadian_workbench/persistence/writerlock.py +102 -0
- circadian_workbench-0.5.0/src/circadian_workbench/recordings/__init__.py +28 -0
- circadian_workbench-0.5.0/src/circadian_workbench/recordings/filestore.py +90 -0
- circadian_workbench-0.5.0/src/circadian_workbench/recordings/service.py +290 -0
- circadian_workbench-0.5.0/src/circadian_workbench/release/__init__.py +56 -0
- circadian_workbench-0.5.0/src/circadian_workbench/release/artifacts.py +134 -0
- circadian_workbench-0.5.0/src/circadian_workbench/release/build.py +364 -0
- circadian_workbench-0.5.0/src/circadian_workbench/release/distribute.py +261 -0
- circadian_workbench-0.5.0/src/circadian_workbench/release/host.py +465 -0
- circadian_workbench-0.5.0/src/circadian_workbench/release/manifest.py +175 -0
- circadian_workbench-0.5.0/src/circadian_workbench/script_export.py +149 -0
- circadian_workbench-0.5.0/src/circadian_workbench/security.py +153 -0
- circadian_workbench-0.5.0/src/circadian_workbench/static/app.js +6755 -0
- circadian_workbench-0.5.0/src/circadian_workbench/static/index.html +658 -0
- circadian_workbench-0.5.0/src/circadian_workbench/static/styles.css +554 -0
- circadian_workbench-0.5.0/src/circadian_workbench/workspaces/__init__.py +80 -0
- circadian_workbench-0.5.0/src/circadian_workbench/workspaces/project_codec.py +278 -0
- circadian_workbench-0.5.0/src/circadian_workbench/workspaces/service.py +501 -0
- circadian_workbench-0.5.0/src/circadian_workbench/workspaces/sharing.py +260 -0
- circadian_workbench-0.5.0/src/circadian_workbench.egg-info/PKG-INFO +90 -0
- circadian_workbench-0.5.0/src/circadian_workbench.egg-info/SOURCES.txt +66 -0
- circadian_workbench-0.5.0/src/circadian_workbench.egg-info/dependency_links.txt +1 -0
- circadian_workbench-0.5.0/src/circadian_workbench.egg-info/entry_points.txt +7 -0
- circadian_workbench-0.5.0/src/circadian_workbench.egg-info/requires.txt +20 -0
- circadian_workbench-0.5.0/src/circadian_workbench.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Brancaccio Lab
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: circadian-workbench
|
|
3
|
+
Version: 0.5.0
|
|
4
|
+
Summary: Local-first, reproducible circadian activity analysis
|
|
5
|
+
Author: Brancaccio Lab
|
|
6
|
+
Maintainer: Jay2owe
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Project-URL: Homepage, https://pypi.org/project/circadian-workbench/
|
|
9
|
+
Keywords: circadian rhythms,actogram,activity analysis,chronobiology
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Intended Audience :: Science/Research
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering
|
|
18
|
+
Requires-Python: >=3.10
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
License-File: LICENSE
|
|
21
|
+
Requires-Dist: analysis-kit>=0.1.0
|
|
22
|
+
Requires-Dist: fastapi>=0.115
|
|
23
|
+
Requires-Dist: uvicorn>=0.34
|
|
24
|
+
Requires-Dist: python-multipart>=0.0.20
|
|
25
|
+
Requires-Dist: numpy>=2.0
|
|
26
|
+
Requires-Dist: pandas>=2.2
|
|
27
|
+
Requires-Dist: scipy>=1.14
|
|
28
|
+
Requires-Dist: statsmodels>=0.14
|
|
29
|
+
Requires-Dist: PyWavelets>=1.6
|
|
30
|
+
Requires-Dist: plotly>=6.0
|
|
31
|
+
Requires-Dist: SQLAlchemy>=2.0
|
|
32
|
+
Requires-Dist: alembic>=1.13
|
|
33
|
+
Requires-Dist: argon2-cffi>=23.1
|
|
34
|
+
Provides-Extra: test
|
|
35
|
+
Requires-Dist: pytest>=8.0; extra == "test"
|
|
36
|
+
Requires-Dist: httpx>=0.27; extra == "test"
|
|
37
|
+
Provides-Extra: release
|
|
38
|
+
Requires-Dist: build>=1.0; extra == "release"
|
|
39
|
+
Dynamic: license-file
|
|
40
|
+
|
|
41
|
+
# Circadian Workbench
|
|
42
|
+
|
|
43
|
+
Circadian Workbench is a local-first application for transparent analysis of
|
|
44
|
+
activity rhythms. It imports ClockLab `.AWD` files and timestamped CSV files,
|
|
45
|
+
including metadata-prefixed MotionWatch exports, and provides actograms,
|
|
46
|
+
activity profiles, period analysis, cosinor fitting, bout analysis,
|
|
47
|
+
non-parametric measures, group statistics and reproducible exports.
|
|
48
|
+
|
|
49
|
+
The web interface and analysis service run on the same host. Uploaded data are
|
|
50
|
+
stored under a configurable local data root and are not sent to an external
|
|
51
|
+
service.
|
|
52
|
+
|
|
53
|
+
## Install and run
|
|
54
|
+
|
|
55
|
+
Circadian Workbench requires Python 3.10 or newer.
|
|
56
|
+
|
|
57
|
+
```powershell
|
|
58
|
+
pip install circadian-workbench
|
|
59
|
+
circadian-workbench
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The interface opens at <http://127.0.0.1:8765>. Choose **Load demo** to explore
|
|
63
|
+
the workflow without an input file.
|
|
64
|
+
|
|
65
|
+
The default data root is home-relative at `~/.circadian-workbench`. Set the
|
|
66
|
+
application's documented environment variables before launch when a different
|
|
67
|
+
durable location is required.
|
|
68
|
+
|
|
69
|
+
## Command-line entry points
|
|
70
|
+
|
|
71
|
+
- `circadian-workbench` starts the local application.
|
|
72
|
+
- `circadian-workbench-service` runs the service without opening a browser.
|
|
73
|
+
- `circadian-workbench-admin` exposes administrative maintenance commands.
|
|
74
|
+
|
|
75
|
+
## Reproducibility
|
|
76
|
+
|
|
77
|
+
Imports retain source checksums and original bytes. Analysis actions record
|
|
78
|
+
their parameters and software version, and figure exports retain the values
|
|
79
|
+
used to draw them. Invalid or incomplete time series are reported rather than
|
|
80
|
+
silently regularised.
|
|
81
|
+
|
|
82
|
+
## Support status
|
|
83
|
+
|
|
84
|
+
Circadian Workbench is pre-1.0 research software. Validate exported results for
|
|
85
|
+
the intended scientific use and retain the original activity records.
|
|
86
|
+
|
|
87
|
+
## License
|
|
88
|
+
|
|
89
|
+
Released under the MIT License; the license text is included in every source
|
|
90
|
+
and wheel distribution.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Circadian Workbench
|
|
2
|
+
|
|
3
|
+
Circadian Workbench is a local-first application for transparent analysis of
|
|
4
|
+
activity rhythms. It imports ClockLab `.AWD` files and timestamped CSV files,
|
|
5
|
+
including metadata-prefixed MotionWatch exports, and provides actograms,
|
|
6
|
+
activity profiles, period analysis, cosinor fitting, bout analysis,
|
|
7
|
+
non-parametric measures, group statistics and reproducible exports.
|
|
8
|
+
|
|
9
|
+
The web interface and analysis service run on the same host. Uploaded data are
|
|
10
|
+
stored under a configurable local data root and are not sent to an external
|
|
11
|
+
service.
|
|
12
|
+
|
|
13
|
+
## Install and run
|
|
14
|
+
|
|
15
|
+
Circadian Workbench requires Python 3.10 or newer.
|
|
16
|
+
|
|
17
|
+
```powershell
|
|
18
|
+
pip install circadian-workbench
|
|
19
|
+
circadian-workbench
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The interface opens at <http://127.0.0.1:8765>. Choose **Load demo** to explore
|
|
23
|
+
the workflow without an input file.
|
|
24
|
+
|
|
25
|
+
The default data root is home-relative at `~/.circadian-workbench`. Set the
|
|
26
|
+
application's documented environment variables before launch when a different
|
|
27
|
+
durable location is required.
|
|
28
|
+
|
|
29
|
+
## Command-line entry points
|
|
30
|
+
|
|
31
|
+
- `circadian-workbench` starts the local application.
|
|
32
|
+
- `circadian-workbench-service` runs the service without opening a browser.
|
|
33
|
+
- `circadian-workbench-admin` exposes administrative maintenance commands.
|
|
34
|
+
|
|
35
|
+
## Reproducibility
|
|
36
|
+
|
|
37
|
+
Imports retain source checksums and original bytes. Analysis actions record
|
|
38
|
+
their parameters and software version, and figure exports retain the values
|
|
39
|
+
used to draw them. Invalid or incomplete time series are reported rather than
|
|
40
|
+
silently regularised.
|
|
41
|
+
|
|
42
|
+
## Support status
|
|
43
|
+
|
|
44
|
+
Circadian Workbench is pre-1.0 research software. Validate exported results for
|
|
45
|
+
the intended scientific use and retain the original activity records.
|
|
46
|
+
|
|
47
|
+
## License
|
|
48
|
+
|
|
49
|
+
Released under the MIT License; the license text is included in every source
|
|
50
|
+
and wheel distribution.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "circadian-workbench"
|
|
7
|
+
version = "0.5.0"
|
|
8
|
+
description = "Local-first, reproducible circadian activity analysis"
|
|
9
|
+
readme = "PYPI_README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
license-files = ["LICENSE"]
|
|
13
|
+
authors = [{name = "Brancaccio Lab"}]
|
|
14
|
+
maintainers = [{name = "Jay2owe"}]
|
|
15
|
+
keywords = ["circadian rhythms", "actogram", "activity analysis", "chronobiology"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 3 - Alpha",
|
|
18
|
+
"Intended Audience :: Science/Research",
|
|
19
|
+
"Programming Language :: Python :: 3",
|
|
20
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
21
|
+
"Programming Language :: Python :: 3.10",
|
|
22
|
+
"Programming Language :: Python :: 3.11",
|
|
23
|
+
"Programming Language :: Python :: 3.12",
|
|
24
|
+
"Topic :: Scientific/Engineering",
|
|
25
|
+
]
|
|
26
|
+
dependencies = [
|
|
27
|
+
# The shared house style and agent chassis. export_figures.py draws from its
|
|
28
|
+
# themes and palette, so the figures are wrong without it — this is what
|
|
29
|
+
# replaced the hand-kept plot_style.py mirror of PyFLASH/aesthetics.py.
|
|
30
|
+
"analysis-kit>=0.1.0",
|
|
31
|
+
"fastapi>=0.115",
|
|
32
|
+
"uvicorn>=0.34",
|
|
33
|
+
"python-multipart>=0.0.20",
|
|
34
|
+
"numpy>=2.0",
|
|
35
|
+
"pandas>=2.2",
|
|
36
|
+
"scipy>=1.14",
|
|
37
|
+
# Stage 04 group statistics: MixedLM REML fallback for missing bins in the
|
|
38
|
+
# two-way mixed RM ANOVA. Declared here because the RM ANOVA, GG and HF are
|
|
39
|
+
# hand-rolled in numpy — statsmodels is used ONLY for the variance-component
|
|
40
|
+
# optimiser (no closed-form check exists for a REML fit, so it is delegated).
|
|
41
|
+
# statsmodels.stats.anova.AnovaRM cannot express a between factor and has no
|
|
42
|
+
# sphericity correction; pingouin implements GG but is GPL-3.0, which would
|
|
43
|
+
# force a relicense of this MIT project. See docs/group-analysis/04.
|
|
44
|
+
"statsmodels>=0.14",
|
|
45
|
+
"PyWavelets>=1.6",
|
|
46
|
+
"plotly>=6.0",
|
|
47
|
+
# Persistence foundation (Stage 01): database-neutral access + versioned
|
|
48
|
+
# migrations. Both SQLAlchemy and Alembic support SQLite now and PostgreSQL
|
|
49
|
+
# later, keeping the promised database migration route open.
|
|
50
|
+
"SQLAlchemy>=2.0",
|
|
51
|
+
"alembic>=1.13",
|
|
52
|
+
# Authentication (Stage 02): Argon2id password hashing. argon2-cffi's
|
|
53
|
+
# PasswordHasher uses the Argon2id variant by default.
|
|
54
|
+
"argon2-cffi>=23.1",
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
[project.optional-dependencies]
|
|
58
|
+
test = ["pytest>=8.0", "httpx>=0.27"]
|
|
59
|
+
# Tooling to BUILD a release set (not needed to run the service).
|
|
60
|
+
release = ["build>=1.0"]
|
|
61
|
+
|
|
62
|
+
[project.urls]
|
|
63
|
+
Homepage = "https://pypi.org/project/circadian-workbench/"
|
|
64
|
+
|
|
65
|
+
[project.scripts]
|
|
66
|
+
circadian-workbench = "circadian_workbench.launcher:main"
|
|
67
|
+
circadian-workbench-service = "circadian_workbench.launcher:serve"
|
|
68
|
+
circadian-workbench-admin = "circadian_workbench.cli:main"
|
|
69
|
+
circadian-workbench-release = "circadian_workbench.release.build:main"
|
|
70
|
+
circadian-workbench-host = "circadian_workbench.release.host:main"
|
|
71
|
+
circadian-workbench-distribute = "circadian_workbench.release.distribute:main"
|
|
72
|
+
|
|
73
|
+
[tool.setuptools]
|
|
74
|
+
package-dir = {"" = "src"}
|
|
75
|
+
include-package-data = true
|
|
76
|
+
|
|
77
|
+
[tool.setuptools.packages.find]
|
|
78
|
+
where = ["src"]
|
|
79
|
+
|
|
80
|
+
[tool.setuptools.package-data]
|
|
81
|
+
circadian_workbench = ["static/*", "persistence/migrations/*.mako"]
|
|
82
|
+
|
|
83
|
+
[tool.pytest.ini_options]
|
|
84
|
+
testpaths = ["tests"]
|
|
85
|
+
pythonpath = ["src"]
|