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.
Files changed (68) hide show
  1. circadian_workbench-0.5.0/LICENSE +21 -0
  2. circadian_workbench-0.5.0/MANIFEST.in +10 -0
  3. circadian_workbench-0.5.0/PKG-INFO +90 -0
  4. circadian_workbench-0.5.0/PYPI_README.md +50 -0
  5. circadian_workbench-0.5.0/pyproject.toml +85 -0
  6. circadian_workbench-0.5.0/setup.cfg +4 -0
  7. circadian_workbench-0.5.0/src/circadian_workbench/__init__.py +3 -0
  8. circadian_workbench-0.5.0/src/circadian_workbench/actions.py +2137 -0
  9. circadian_workbench-0.5.0/src/circadian_workbench/analysis.py +3747 -0
  10. circadian_workbench-0.5.0/src/circadian_workbench/api.py +2185 -0
  11. circadian_workbench-0.5.0/src/circadian_workbench/auth/__init__.py +30 -0
  12. circadian_workbench-0.5.0/src/circadian_workbench/auth/passwords.py +53 -0
  13. circadian_workbench-0.5.0/src/circadian_workbench/auth/service.py +501 -0
  14. circadian_workbench-0.5.0/src/circadian_workbench/auth/web.py +311 -0
  15. circadian_workbench-0.5.0/src/circadian_workbench/backup/__init__.py +28 -0
  16. circadian_workbench-0.5.0/src/circadian_workbench/backup/service.py +321 -0
  17. circadian_workbench-0.5.0/src/circadian_workbench/cli.py +282 -0
  18. circadian_workbench-0.5.0/src/circadian_workbench/config.py +362 -0
  19. circadian_workbench-0.5.0/src/circadian_workbench/demo.py +32 -0
  20. circadian_workbench-0.5.0/src/circadian_workbench/export_figures.py +2120 -0
  21. circadian_workbench-0.5.0/src/circadian_workbench/io.py +419 -0
  22. circadian_workbench-0.5.0/src/circadian_workbench/jobs/__init__.py +14 -0
  23. circadian_workbench-0.5.0/src/circadian_workbench/jobs/runner.py +319 -0
  24. circadian_workbench-0.5.0/src/circadian_workbench/launcher.py +186 -0
  25. circadian_workbench-0.5.0/src/circadian_workbench/methods_text.py +414 -0
  26. circadian_workbench-0.5.0/src/circadian_workbench/models.py +92 -0
  27. circadian_workbench-0.5.0/src/circadian_workbench/persistence/__init__.py +37 -0
  28. circadian_workbench-0.5.0/src/circadian_workbench/persistence/atomic.py +134 -0
  29. circadian_workbench-0.5.0/src/circadian_workbench/persistence/database.py +204 -0
  30. circadian_workbench-0.5.0/src/circadian_workbench/persistence/layout.py +95 -0
  31. circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/__init__.py +6 -0
  32. circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/env.py +54 -0
  33. circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/script.py.mako +24 -0
  34. circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/0001_initial_layout.py +30 -0
  35. circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/0002_accounts_auth.py +57 -0
  36. circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/0003_recordings.py +55 -0
  37. circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/0004_workspaces.py +67 -0
  38. circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/0005_sharing_audit.py +54 -0
  39. circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/0006_jobs.py +45 -0
  40. circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/0007_group_labels.py +33 -0
  41. circadian_workbench-0.5.0/src/circadian_workbench/persistence/migrations/versions/__init__.py +2 -0
  42. circadian_workbench-0.5.0/src/circadian_workbench/persistence/readiness.py +71 -0
  43. circadian_workbench-0.5.0/src/circadian_workbench/persistence/tables.py +298 -0
  44. circadian_workbench-0.5.0/src/circadian_workbench/persistence/writerlock.py +102 -0
  45. circadian_workbench-0.5.0/src/circadian_workbench/recordings/__init__.py +28 -0
  46. circadian_workbench-0.5.0/src/circadian_workbench/recordings/filestore.py +90 -0
  47. circadian_workbench-0.5.0/src/circadian_workbench/recordings/service.py +290 -0
  48. circadian_workbench-0.5.0/src/circadian_workbench/release/__init__.py +56 -0
  49. circadian_workbench-0.5.0/src/circadian_workbench/release/artifacts.py +134 -0
  50. circadian_workbench-0.5.0/src/circadian_workbench/release/build.py +364 -0
  51. circadian_workbench-0.5.0/src/circadian_workbench/release/distribute.py +261 -0
  52. circadian_workbench-0.5.0/src/circadian_workbench/release/host.py +465 -0
  53. circadian_workbench-0.5.0/src/circadian_workbench/release/manifest.py +175 -0
  54. circadian_workbench-0.5.0/src/circadian_workbench/script_export.py +149 -0
  55. circadian_workbench-0.5.0/src/circadian_workbench/security.py +153 -0
  56. circadian_workbench-0.5.0/src/circadian_workbench/static/app.js +6755 -0
  57. circadian_workbench-0.5.0/src/circadian_workbench/static/index.html +658 -0
  58. circadian_workbench-0.5.0/src/circadian_workbench/static/styles.css +554 -0
  59. circadian_workbench-0.5.0/src/circadian_workbench/workspaces/__init__.py +80 -0
  60. circadian_workbench-0.5.0/src/circadian_workbench/workspaces/project_codec.py +278 -0
  61. circadian_workbench-0.5.0/src/circadian_workbench/workspaces/service.py +501 -0
  62. circadian_workbench-0.5.0/src/circadian_workbench/workspaces/sharing.py +260 -0
  63. circadian_workbench-0.5.0/src/circadian_workbench.egg-info/PKG-INFO +90 -0
  64. circadian_workbench-0.5.0/src/circadian_workbench.egg-info/SOURCES.txt +66 -0
  65. circadian_workbench-0.5.0/src/circadian_workbench.egg-info/dependency_links.txt +1 -0
  66. circadian_workbench-0.5.0/src/circadian_workbench.egg-info/entry_points.txt +7 -0
  67. circadian_workbench-0.5.0/src/circadian_workbench.egg-info/requires.txt +20 -0
  68. 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,10 @@
1
+ prune deploy
2
+ prune docs
3
+ prune presets
4
+ prune scripts
5
+ prune scripted
6
+ prune tests
7
+ prune graphify-out
8
+ prune .circadian-agent
9
+ exclude README.md
10
+ global-exclude __pycache__ *.py[cod]
@@ -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"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,3 @@
1
+ """Circadian Workbench analysis package."""
2
+
3
+ __version__ = "0.5.0"