overlay.language 0.2.0.post24.dev0__tar.gz → 0.2.0.post29.dev0__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 (21) hide show
  1. {overlay_language-0.2.0.post24.dev0 → overlay_language-0.2.0.post29.dev0}/.gitignore +1 -1
  2. {overlay_language-0.2.0.post24.dev0 → overlay_language-0.2.0.post29.dev0}/PKG-INFO +3 -6
  3. {overlay_language-0.2.0.post24.dev0 → overlay_language-0.2.0.post29.dev0}/README.md +1 -1
  4. {overlay_language-0.2.0.post24.dev0 → overlay_language-0.2.0.post29.dev0}/pyproject.toml +7 -8
  5. overlay_language-0.2.0.post29.dev0/src/overlay/language/__init__.py +3 -0
  6. overlay_language-0.2.0.post24.dev0/docs/Makefile +0 -24
  7. overlay_language-0.2.0.post24.dev0/docs/_static/favicon.svg +0 -189
  8. overlay_language-0.2.0.post24.dev0/docs/_static/logo.svg +0 -198
  9. overlay_language-0.2.0.post24.dev0/docs/conf.py +0 -74
  10. overlay_language-0.2.0.post24.dev0/docs/index.rst +0 -61
  11. overlay_language-0.2.0.post24.dev0/docs/installation.rst +0 -8
  12. overlay_language-0.2.0.post24.dev0/docs/overlay-language-tutorial.rst +0 -346
  13. overlay_language-0.2.0.post24.dev0/docs/specification.md +0 -1007
  14. overlay_language-0.2.0.post24.dev0/docs/tutorial.rst +0 -336
  15. overlay_language-0.2.0.post24.dev0/src/overlay/language/__init__.py +0 -100
  16. overlay_language-0.2.0.post24.dev0/src/overlay/language/_config.py +0 -56
  17. overlay_language-0.2.0.post24.dev0/src/overlay/language/_core.py +0 -2904
  18. overlay_language-0.2.0.post24.dev0/src/overlay/language/_interned_linked_list.py +0 -147
  19. overlay_language-0.2.0.post24.dev0/src/overlay/language/_mixin_directory.py +0 -141
  20. overlay_language-0.2.0.post24.dev0/src/overlay/language/_mixin_parser.py +0 -482
  21. overlay_language-0.2.0.post24.dev0/src/overlay/language/_runtime.py +0 -710
@@ -236,5 +236,5 @@ experiment_results.db
236
236
  # nixago: ignore-linked-files
237
237
  /.vscode/extensions.json
238
238
 
239
- /overlay-calculus/arxiv-submission.tar.gz
239
+ /inheritance-calculus/arxiv-submission.tar.gz
240
240
  node_modules/
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: overlay.language
3
- Version: 0.2.0.post24.dev0
4
- Summary: A dependency injection framework with pytest-fixture syntax, plus a configuration language for declarative programming
3
+ Version: 0.2.0.post29.dev0
4
+ Summary: Backward compatibility wrapper overlay.language is now mixinv2
5
5
  Project-URL: Repository, https://github.com/Atry/overlay
6
6
  Author-email: "Yang, Bo" <yang-bo@yang-bo.com>
7
7
  License-Expression: MIT
@@ -10,7 +10,4 @@ Classifier: License :: OSI Approved :: MIT License
10
10
  Classifier: Programming Language :: Python :: 3.13
11
11
  Classifier: Programming Language :: Python :: 3.14
12
12
  Requires-Python: >=3.13
13
- Requires-Dist: pyyaml>=6.0.3
14
- Provides-Extra: docs
15
- Requires-Dist: sphinx-mdinclude>=0.6.2; extra == 'docs'
16
- Requires-Dist: sphinx>=9.1.0; extra == 'docs'
13
+ Requires-Dist: mixinv2==0.2.0.post29.dev0
@@ -2,7 +2,7 @@
2
2
 
3
3
  A dependency injection framework with pytest-fixture syntax, plus a
4
4
  configuration language for declarative programming, based on
5
- [overlay-calculus](https://arxiv.org/abs/2602.16291).
5
+ [inheritance-calculus](https://arxiv.org/abs/2602.16291).
6
6
 
7
7
  ## Documentation
8
8
 
@@ -14,8 +14,8 @@ metadata = false
14
14
 
15
15
  [project]
16
16
  name = "overlay.language"
17
- dynamic = ["version"]
18
- description = "A dependency injection framework with pytest-fixture syntax, plus a configuration language for declarative programming"
17
+ dynamic = ["version", "dependencies"]
18
+ description = "Backward compatibility wrapper overlay.language is now mixinv2"
19
19
  license = "MIT"
20
20
  requires-python = ">=3.13"
21
21
  authors = [
@@ -27,15 +27,14 @@ classifiers = [
27
27
  "Programming Language :: Python :: 3.13",
28
28
  "Programming Language :: Python :: 3.14",
29
29
  ]
30
+
31
+ [tool.hatch.metadata.hooks.uv-dynamic-versioning]
30
32
  dependencies = [
31
- "pyyaml>=6.0.3",
33
+ "mixinv2=={{ version }}",
32
34
  ]
33
35
 
34
- [project.optional-dependencies]
35
- docs = [
36
- "sphinx>=9.1.0",
37
- "sphinx-mdinclude>=0.6.2",
38
- ]
36
+ [tool.uv]
37
+ sources = {mixinv2 = {workspace = true}}
39
38
 
40
39
  [tool.hatch.build.targets.wheel]
41
40
  packages = ["src/overlay"]
@@ -0,0 +1,3 @@
1
+ """Backward compatibility: overlay.language is now mixinv2."""
2
+
3
+ from mixinv2 import * # noqa: F401,F403
@@ -1,24 +0,0 @@
1
- # Minimal makefile for Sphinx documentation
2
- #
3
-
4
- # You can set these variables from the command line, and also
5
- # from the environment for the first two.
6
- SPHINXOPTS ?=
7
- SPHINXBUILD ?= sphinx-build
8
- SOURCEDIR = .
9
- BUILDDIR = _build
10
-
11
- # Put it first so that "make" without argument is like "make help".
12
- help:
13
- @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14
-
15
- .PHONY: help Makefile
16
-
17
- # Catch-all target: route all unknown targets to Sphinx using the new
18
- # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19
- %: Makefile api-docs
20
- @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
21
-
22
- .PHONY: api-docs
23
- api-docs:
24
- sphinx-apidoc --implicit-namespaces -o api ../src/overlay
@@ -1,189 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400">
2
- <defs>
3
- <!-- Lab-harmonized: RGB L*=50 max chroma, CMY L*=85 max chroma -->
4
- <!-- Main sectors: 56° each, interpolation sectors: 4° each (Lab 1/2 midpoint) -->
5
-
6
- <radialGradient id="gradient-0" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
7
- <stop offset="0%" stop-color="#F00000" stop-opacity="0"/>
8
- <stop offset="32%" stop-color="#F00000" stop-opacity="0"/>
9
- <stop offset="32%" stop-color="#F00000" stop-opacity="0.5"/>
10
- <stop offset="37%" stop-color="#F00000" stop-opacity="0.5"/>
11
- <stop offset="37%" stop-color="#F00000" stop-opacity="1"/>
12
- <stop offset="95%" stop-color="#F00000" stop-opacity="1"/>
13
- <stop offset="95%" stop-color="#F00000" stop-opacity="0.5"/>
14
- <stop offset="100%" stop-color="#F00000" stop-opacity="0.5"/>
15
- </radialGradient>
16
- <clipPath id="sector-0">
17
- <path d="M 200,200 L 115.495,41.069 A 180,180 0 0,1 284.505,41.069 Z"/>
18
- </clipPath>
19
-
20
- <radialGradient id="gradient-1" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
21
- <stop offset="0%" stop-color="#F59500" stop-opacity="0"/>
22
- <stop offset="32%" stop-color="#F59500" stop-opacity="0"/>
23
- <stop offset="32%" stop-color="#F59500" stop-opacity="0.5"/>
24
- <stop offset="37%" stop-color="#F59500" stop-opacity="0.5"/>
25
- <stop offset="37%" stop-color="#F59500" stop-opacity="1"/>
26
- <stop offset="95%" stop-color="#F59500" stop-opacity="1"/>
27
- <stop offset="95%" stop-color="#F59500" stop-opacity="0.5"/>
28
- <stop offset="100%" stop-color="#F59500" stop-opacity="0.5"/>
29
- </radialGradient>
30
- <clipPath id="sector-1">
31
- <path d="M 200,200 L 284.505,41.069 A 180,180 0 0,1 295.385,47.351 Z"/>
32
- </clipPath>
33
-
34
- <radialGradient id="gradient-2" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
35
- <stop offset="0%" stop-color="#ECE901" stop-opacity="0"/>
36
- <stop offset="32%" stop-color="#ECE901" stop-opacity="0"/>
37
- <stop offset="32%" stop-color="#ECE901" stop-opacity="0.5"/>
38
- <stop offset="37%" stop-color="#ECE901" stop-opacity="0.5"/>
39
- <stop offset="37%" stop-color="#ECE901" stop-opacity="1"/>
40
- <stop offset="95%" stop-color="#ECE901" stop-opacity="1"/>
41
- <stop offset="95%" stop-color="#ECE901" stop-opacity="0.5"/>
42
- <stop offset="100%" stop-color="#ECE901" stop-opacity="0.5"/>
43
- </radialGradient>
44
- <clipPath id="sector-2">
45
- <path d="M 200,200 L 295.385,47.351 A 180,180 0 0,1 379.890,193.718 Z"/>
46
- </clipPath>
47
-
48
- <radialGradient id="gradient-3" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
49
- <stop offset="0%" stop-color="#8BBA00" stop-opacity="0"/>
50
- <stop offset="32%" stop-color="#8BBA00" stop-opacity="0"/>
51
- <stop offset="32%" stop-color="#8BBA00" stop-opacity="0.5"/>
52
- <stop offset="37%" stop-color="#8BBA00" stop-opacity="0.5"/>
53
- <stop offset="37%" stop-color="#8BBA00" stop-opacity="1"/>
54
- <stop offset="95%" stop-color="#8BBA00" stop-opacity="1"/>
55
- <stop offset="95%" stop-color="#8BBA00" stop-opacity="0.5"/>
56
- <stop offset="100%" stop-color="#8BBA00" stop-opacity="0.5"/>
57
- </radialGradient>
58
- <clipPath id="sector-3">
59
- <path d="M 200,200 L 379.890,193.718 A 180,180 0 0,1 379.890,206.282 Z"/>
60
- </clipPath>
61
-
62
- <radialGradient id="gradient-4" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
63
- <stop offset="0%" stop-color="#008B00" stop-opacity="0"/>
64
- <stop offset="32%" stop-color="#008B00" stop-opacity="0"/>
65
- <stop offset="32%" stop-color="#008B00" stop-opacity="0.5"/>
66
- <stop offset="37%" stop-color="#008B00" stop-opacity="0.5"/>
67
- <stop offset="37%" stop-color="#008B00" stop-opacity="1"/>
68
- <stop offset="95%" stop-color="#008B00" stop-opacity="1"/>
69
- <stop offset="95%" stop-color="#008B00" stop-opacity="0.5"/>
70
- <stop offset="100%" stop-color="#008B00" stop-opacity="0.5"/>
71
- </radialGradient>
72
- <clipPath id="sector-4">
73
- <path d="M 200,200 L 379.890,206.282 A 180,180 0 0,1 295.385,352.649 Z"/>
74
- </clipPath>
75
-
76
- <radialGradient id="gradient-5" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
77
- <stop offset="0%" stop-color="#30BA7F" stop-opacity="0"/>
78
- <stop offset="32%" stop-color="#30BA7F" stop-opacity="0"/>
79
- <stop offset="32%" stop-color="#30BA7F" stop-opacity="0.5"/>
80
- <stop offset="37%" stop-color="#30BA7F" stop-opacity="0.5"/>
81
- <stop offset="37%" stop-color="#30BA7F" stop-opacity="1"/>
82
- <stop offset="95%" stop-color="#30BA7F" stop-opacity="1"/>
83
- <stop offset="95%" stop-color="#30BA7F" stop-opacity="0.5"/>
84
- <stop offset="100%" stop-color="#30BA7F" stop-opacity="0.5"/>
85
- </radialGradient>
86
- <clipPath id="sector-5">
87
- <path d="M 200,200 L 295.385,352.649 A 180,180 0 0,1 284.505,358.931 Z"/>
88
- </clipPath>
89
-
90
- <radialGradient id="gradient-6" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
91
- <stop offset="0%" stop-color="#04ECEB" stop-opacity="0"/>
92
- <stop offset="32%" stop-color="#04ECEB" stop-opacity="0"/>
93
- <stop offset="32%" stop-color="#04ECEB" stop-opacity="0.5"/>
94
- <stop offset="37%" stop-color="#04ECEB" stop-opacity="0.5"/>
95
- <stop offset="37%" stop-color="#04ECEB" stop-opacity="1"/>
96
- <stop offset="95%" stop-color="#04ECEB" stop-opacity="1"/>
97
- <stop offset="95%" stop-color="#04ECEB" stop-opacity="0.5"/>
98
- <stop offset="100%" stop-color="#04ECEB" stop-opacity="0.5"/>
99
- </radialGradient>
100
- <clipPath id="sector-6">
101
- <path d="M 200,200 L 284.505,358.931 A 180,180 0 0,1 115.495,358.931 Z"/>
102
- </clipPath>
103
-
104
- <radialGradient id="gradient-7" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
105
- <stop offset="0%" stop-color="#36ADF5" stop-opacity="0"/>
106
- <stop offset="32%" stop-color="#36ADF5" stop-opacity="0"/>
107
- <stop offset="32%" stop-color="#36ADF5" stop-opacity="0.5"/>
108
- <stop offset="37%" stop-color="#36ADF5" stop-opacity="0.5"/>
109
- <stop offset="37%" stop-color="#36ADF5" stop-opacity="1"/>
110
- <stop offset="95%" stop-color="#36ADF5" stop-opacity="1"/>
111
- <stop offset="95%" stop-color="#36ADF5" stop-opacity="0.5"/>
112
- <stop offset="100%" stop-color="#36ADF5" stop-opacity="0.5"/>
113
- </radialGradient>
114
- <clipPath id="sector-7">
115
- <path d="M 200,200 L 115.495,358.931 A 180,180 0 0,1 104.615,352.649 Z"/>
116
- </clipPath>
117
-
118
- <radialGradient id="gradient-8" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
119
- <stop offset="0%" stop-color="#006FFC" stop-opacity="0"/>
120
- <stop offset="32%" stop-color="#006FFC" stop-opacity="0"/>
121
- <stop offset="32%" stop-color="#006FFC" stop-opacity="0.5"/>
122
- <stop offset="37%" stop-color="#006FFC" stop-opacity="0.5"/>
123
- <stop offset="37%" stop-color="#006FFC" stop-opacity="1"/>
124
- <stop offset="95%" stop-color="#006FFC" stop-opacity="1"/>
125
- <stop offset="95%" stop-color="#006FFC" stop-opacity="0.5"/>
126
- <stop offset="100%" stop-color="#006FFC" stop-opacity="0.5"/>
127
- </radialGradient>
128
- <clipPath id="sector-8">
129
- <path d="M 200,200 L 104.615,352.649 A 180,180 0 0,1 20.110,206.282 Z"/>
130
- </clipPath>
131
-
132
- <radialGradient id="gradient-9" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
133
- <stop offset="0%" stop-color="#AA96FC" stop-opacity="0"/>
134
- <stop offset="32%" stop-color="#AA96FC" stop-opacity="0"/>
135
- <stop offset="32%" stop-color="#AA96FC" stop-opacity="0.5"/>
136
- <stop offset="37%" stop-color="#AA96FC" stop-opacity="0.5"/>
137
- <stop offset="37%" stop-color="#AA96FC" stop-opacity="1"/>
138
- <stop offset="95%" stop-color="#AA96FC" stop-opacity="1"/>
139
- <stop offset="95%" stop-color="#AA96FC" stop-opacity="0.5"/>
140
- <stop offset="100%" stop-color="#AA96FC" stop-opacity="0.5"/>
141
- </radialGradient>
142
- <clipPath id="sector-9">
143
- <path d="M 200,200 L 20.110,206.282 A 180,180 0 0,1 20.110,193.718 Z"/>
144
- </clipPath>
145
-
146
- <radialGradient id="gradient-10" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
147
- <stop offset="0%" stop-color="#FFC0FA" stop-opacity="0"/>
148
- <stop offset="32%" stop-color="#FFC0FA" stop-opacity="0"/>
149
- <stop offset="32%" stop-color="#FFC0FA" stop-opacity="0.5"/>
150
- <stop offset="37%" stop-color="#FFC0FA" stop-opacity="0.5"/>
151
- <stop offset="37%" stop-color="#FFC0FA" stop-opacity="1"/>
152
- <stop offset="95%" stop-color="#FFC0FA" stop-opacity="1"/>
153
- <stop offset="95%" stop-color="#FFC0FA" stop-opacity="0.5"/>
154
- <stop offset="100%" stop-color="#FFC0FA" stop-opacity="0.5"/>
155
- </radialGradient>
156
- <clipPath id="sector-10">
157
- <path d="M 200,200 L 20.110,193.718 A 180,180 0 0,1 104.615,47.351 Z"/>
158
- </clipPath>
159
-
160
- <radialGradient id="gradient-11" cx="200" cy="200" r="180" gradientUnits="userSpaceOnUse">
161
- <stop offset="0%" stop-color="#FF7C82" stop-opacity="0"/>
162
- <stop offset="32%" stop-color="#FF7C82" stop-opacity="0"/>
163
- <stop offset="32%" stop-color="#FF7C82" stop-opacity="0.5"/>
164
- <stop offset="37%" stop-color="#FF7C82" stop-opacity="0.5"/>
165
- <stop offset="37%" stop-color="#FF7C82" stop-opacity="1"/>
166
- <stop offset="95%" stop-color="#FF7C82" stop-opacity="1"/>
167
- <stop offset="95%" stop-color="#FF7C82" stop-opacity="0.5"/>
168
- <stop offset="100%" stop-color="#FF7C82" stop-opacity="0.5"/>
169
- </radialGradient>
170
- <clipPath id="sector-11">
171
- <path d="M 200,200 L 104.615,47.351 A 180,180 0 0,1 115.495,41.069 Z"/>
172
- </clipPath>
173
- </defs>
174
-
175
- <g>
176
- <circle cx="200" cy="200" r="180" fill="url(#gradient-0)" clip-path="url(#sector-0)"/>
177
- <circle cx="200" cy="200" r="180" fill="url(#gradient-1)" clip-path="url(#sector-1)"/>
178
- <circle cx="200" cy="200" r="180" fill="url(#gradient-2)" clip-path="url(#sector-2)"/>
179
- <circle cx="200" cy="200" r="180" fill="url(#gradient-3)" clip-path="url(#sector-3)"/>
180
- <circle cx="200" cy="200" r="180" fill="url(#gradient-4)" clip-path="url(#sector-4)"/>
181
- <circle cx="200" cy="200" r="180" fill="url(#gradient-5)" clip-path="url(#sector-5)"/>
182
- <circle cx="200" cy="200" r="180" fill="url(#gradient-6)" clip-path="url(#sector-6)"/>
183
- <circle cx="200" cy="200" r="180" fill="url(#gradient-7)" clip-path="url(#sector-7)"/>
184
- <circle cx="200" cy="200" r="180" fill="url(#gradient-8)" clip-path="url(#sector-8)"/>
185
- <circle cx="200" cy="200" r="180" fill="url(#gradient-9)" clip-path="url(#sector-9)"/>
186
- <circle cx="200" cy="200" r="180" fill="url(#gradient-10)" clip-path="url(#sector-10)"/>
187
- <circle cx="200" cy="200" r="180" fill="url(#gradient-11)" clip-path="url(#sector-11)"/>
188
- </g>
189
- </svg>
@@ -1,198 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 480">
2
- <defs>
3
- <style>
4
- @import url('https://fonts.googleapis.com/css2?family=Varela+Round&amp;display=swap');
5
- </style>
6
- <!-- Lab-harmonized: RGB L*=50 max chroma, CMY L*=85 max chroma -->
7
- <!-- Main sectors: 56° each, interpolation sectors: 4° each (Lab 1/2 midpoint) -->
8
-
9
- <radialGradient id="gradient-0" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
10
- <stop offset="0%" stop-color="#F00000" stop-opacity="0"/>
11
- <stop offset="32%" stop-color="#F00000" stop-opacity="0"/>
12
- <stop offset="32%" stop-color="#F00000" stop-opacity="0.5"/>
13
- <stop offset="37%" stop-color="#F00000" stop-opacity="0.5"/>
14
- <stop offset="37%" stop-color="#F00000" stop-opacity="1"/>
15
- <stop offset="95%" stop-color="#F00000" stop-opacity="1"/>
16
- <stop offset="95%" stop-color="#F00000" stop-opacity="0.5"/>
17
- <stop offset="100%" stop-color="#F00000" stop-opacity="0.5"/>
18
- </radialGradient>
19
- <clipPath id="sector-0">
20
- <path d="M 240,190 L 160.190,39.899 A 170,170 0 0,1 319.810,39.899 Z"/>
21
- </clipPath>
22
-
23
- <radialGradient id="gradient-1" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
24
- <stop offset="0%" stop-color="#F59500" stop-opacity="0"/>
25
- <stop offset="32%" stop-color="#F59500" stop-opacity="0"/>
26
- <stop offset="32%" stop-color="#F59500" stop-opacity="0.5"/>
27
- <stop offset="37%" stop-color="#F59500" stop-opacity="0.5"/>
28
- <stop offset="37%" stop-color="#F59500" stop-opacity="1"/>
29
- <stop offset="95%" stop-color="#F59500" stop-opacity="1"/>
30
- <stop offset="95%" stop-color="#F59500" stop-opacity="0.5"/>
31
- <stop offset="100%" stop-color="#F59500" stop-opacity="0.5"/>
32
- </radialGradient>
33
- <clipPath id="sector-1">
34
- <path d="M 240,190 L 319.810,39.899 A 170,170 0 0,1 330.086,45.832 Z"/>
35
- </clipPath>
36
-
37
- <radialGradient id="gradient-2" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
38
- <stop offset="0%" stop-color="#ECE901" stop-opacity="0"/>
39
- <stop offset="32%" stop-color="#ECE901" stop-opacity="0"/>
40
- <stop offset="32%" stop-color="#ECE901" stop-opacity="0.5"/>
41
- <stop offset="37%" stop-color="#ECE901" stop-opacity="0.5"/>
42
- <stop offset="37%" stop-color="#ECE901" stop-opacity="1"/>
43
- <stop offset="95%" stop-color="#ECE901" stop-opacity="1"/>
44
- <stop offset="95%" stop-color="#ECE901" stop-opacity="0.5"/>
45
- <stop offset="100%" stop-color="#ECE901" stop-opacity="0.5"/>
46
- </radialGradient>
47
- <clipPath id="sector-2">
48
- <path d="M 240,190 L 330.086,45.832 A 170,170 0 0,1 409.896,184.067 Z"/>
49
- </clipPath>
50
-
51
- <radialGradient id="gradient-3" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
52
- <stop offset="0%" stop-color="#8BBA00" stop-opacity="0"/>
53
- <stop offset="32%" stop-color="#8BBA00" stop-opacity="0"/>
54
- <stop offset="32%" stop-color="#8BBA00" stop-opacity="0.5"/>
55
- <stop offset="37%" stop-color="#8BBA00" stop-opacity="0.5"/>
56
- <stop offset="37%" stop-color="#8BBA00" stop-opacity="1"/>
57
- <stop offset="95%" stop-color="#8BBA00" stop-opacity="1"/>
58
- <stop offset="95%" stop-color="#8BBA00" stop-opacity="0.5"/>
59
- <stop offset="100%" stop-color="#8BBA00" stop-opacity="0.5"/>
60
- </radialGradient>
61
- <clipPath id="sector-3">
62
- <path d="M 240,190 L 409.896,184.067 A 170,170 0 0,1 409.896,195.933 Z"/>
63
- </clipPath>
64
-
65
- <radialGradient id="gradient-4" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
66
- <stop offset="0%" stop-color="#008B00" stop-opacity="0"/>
67
- <stop offset="32%" stop-color="#008B00" stop-opacity="0"/>
68
- <stop offset="32%" stop-color="#008B00" stop-opacity="0.5"/>
69
- <stop offset="37%" stop-color="#008B00" stop-opacity="0.5"/>
70
- <stop offset="37%" stop-color="#008B00" stop-opacity="1"/>
71
- <stop offset="95%" stop-color="#008B00" stop-opacity="1"/>
72
- <stop offset="95%" stop-color="#008B00" stop-opacity="0.5"/>
73
- <stop offset="100%" stop-color="#008B00" stop-opacity="0.5"/>
74
- </radialGradient>
75
- <clipPath id="sector-4">
76
- <path d="M 240,190 L 409.896,195.933 A 170,170 0 0,1 330.086,334.168 Z"/>
77
- </clipPath>
78
-
79
- <radialGradient id="gradient-5" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
80
- <stop offset="0%" stop-color="#30BA7F" stop-opacity="0"/>
81
- <stop offset="32%" stop-color="#30BA7F" stop-opacity="0"/>
82
- <stop offset="32%" stop-color="#30BA7F" stop-opacity="0.5"/>
83
- <stop offset="37%" stop-color="#30BA7F" stop-opacity="0.5"/>
84
- <stop offset="37%" stop-color="#30BA7F" stop-opacity="1"/>
85
- <stop offset="95%" stop-color="#30BA7F" stop-opacity="1"/>
86
- <stop offset="95%" stop-color="#30BA7F" stop-opacity="0.5"/>
87
- <stop offset="100%" stop-color="#30BA7F" stop-opacity="0.5"/>
88
- </radialGradient>
89
- <clipPath id="sector-5">
90
- <path d="M 240,190 L 330.086,334.168 A 170,170 0 0,1 319.810,340.101 Z"/>
91
- </clipPath>
92
-
93
- <radialGradient id="gradient-6" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
94
- <stop offset="0%" stop-color="#04ECEB" stop-opacity="0"/>
95
- <stop offset="32%" stop-color="#04ECEB" stop-opacity="0"/>
96
- <stop offset="32%" stop-color="#04ECEB" stop-opacity="0.5"/>
97
- <stop offset="37%" stop-color="#04ECEB" stop-opacity="0.5"/>
98
- <stop offset="37%" stop-color="#04ECEB" stop-opacity="1"/>
99
- <stop offset="95%" stop-color="#04ECEB" stop-opacity="1"/>
100
- <stop offset="95%" stop-color="#04ECEB" stop-opacity="0.5"/>
101
- <stop offset="100%" stop-color="#04ECEB" stop-opacity="0.5"/>
102
- </radialGradient>
103
- <clipPath id="sector-6">
104
- <path d="M 240,190 L 319.810,340.101 A 170,170 0 0,1 160.190,340.101 Z"/>
105
- </clipPath>
106
-
107
- <radialGradient id="gradient-7" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
108
- <stop offset="0%" stop-color="#36ADF5" stop-opacity="0"/>
109
- <stop offset="32%" stop-color="#36ADF5" stop-opacity="0"/>
110
- <stop offset="32%" stop-color="#36ADF5" stop-opacity="0.5"/>
111
- <stop offset="37%" stop-color="#36ADF5" stop-opacity="0.5"/>
112
- <stop offset="37%" stop-color="#36ADF5" stop-opacity="1"/>
113
- <stop offset="95%" stop-color="#36ADF5" stop-opacity="1"/>
114
- <stop offset="95%" stop-color="#36ADF5" stop-opacity="0.5"/>
115
- <stop offset="100%" stop-color="#36ADF5" stop-opacity="0.5"/>
116
- </radialGradient>
117
- <clipPath id="sector-7">
118
- <path d="M 240,190 L 160.190,340.101 A 170,170 0 0,1 149.914,334.168 Z"/>
119
- </clipPath>
120
-
121
- <radialGradient id="gradient-8" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
122
- <stop offset="0%" stop-color="#006FFC" stop-opacity="0"/>
123
- <stop offset="32%" stop-color="#006FFC" stop-opacity="0"/>
124
- <stop offset="32%" stop-color="#006FFC" stop-opacity="0.5"/>
125
- <stop offset="37%" stop-color="#006FFC" stop-opacity="0.5"/>
126
- <stop offset="37%" stop-color="#006FFC" stop-opacity="1"/>
127
- <stop offset="95%" stop-color="#006FFC" stop-opacity="1"/>
128
- <stop offset="95%" stop-color="#006FFC" stop-opacity="0.5"/>
129
- <stop offset="100%" stop-color="#006FFC" stop-opacity="0.5"/>
130
- </radialGradient>
131
- <clipPath id="sector-8">
132
- <path d="M 240,190 L 149.914,334.168 A 170,170 0 0,1 70.104,195.933 Z"/>
133
- </clipPath>
134
-
135
- <radialGradient id="gradient-9" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
136
- <stop offset="0%" stop-color="#AA96FC" stop-opacity="0"/>
137
- <stop offset="32%" stop-color="#AA96FC" stop-opacity="0"/>
138
- <stop offset="32%" stop-color="#AA96FC" stop-opacity="0.5"/>
139
- <stop offset="37%" stop-color="#AA96FC" stop-opacity="0.5"/>
140
- <stop offset="37%" stop-color="#AA96FC" stop-opacity="1"/>
141
- <stop offset="95%" stop-color="#AA96FC" stop-opacity="1"/>
142
- <stop offset="95%" stop-color="#AA96FC" stop-opacity="0.5"/>
143
- <stop offset="100%" stop-color="#AA96FC" stop-opacity="0.5"/>
144
- </radialGradient>
145
- <clipPath id="sector-9">
146
- <path d="M 240,190 L 70.104,195.933 A 170,170 0 0,1 70.104,184.067 Z"/>
147
- </clipPath>
148
-
149
- <radialGradient id="gradient-10" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
150
- <stop offset="0%" stop-color="#FFC0FA" stop-opacity="0"/>
151
- <stop offset="32%" stop-color="#FFC0FA" stop-opacity="0"/>
152
- <stop offset="32%" stop-color="#FFC0FA" stop-opacity="0.5"/>
153
- <stop offset="37%" stop-color="#FFC0FA" stop-opacity="0.5"/>
154
- <stop offset="37%" stop-color="#FFC0FA" stop-opacity="1"/>
155
- <stop offset="95%" stop-color="#FFC0FA" stop-opacity="1"/>
156
- <stop offset="95%" stop-color="#FFC0FA" stop-opacity="0.5"/>
157
- <stop offset="100%" stop-color="#FFC0FA" stop-opacity="0.5"/>
158
- </radialGradient>
159
- <clipPath id="sector-10">
160
- <path d="M 240,190 L 70.104,184.067 A 170,170 0 0,1 149.914,45.832 Z"/>
161
- </clipPath>
162
-
163
- <radialGradient id="gradient-11" cx="240" cy="190" r="170" gradientUnits="userSpaceOnUse">
164
- <stop offset="0%" stop-color="#FF7C82" stop-opacity="0"/>
165
- <stop offset="32%" stop-color="#FF7C82" stop-opacity="0"/>
166
- <stop offset="32%" stop-color="#FF7C82" stop-opacity="0.5"/>
167
- <stop offset="37%" stop-color="#FF7C82" stop-opacity="0.5"/>
168
- <stop offset="37%" stop-color="#FF7C82" stop-opacity="1"/>
169
- <stop offset="95%" stop-color="#FF7C82" stop-opacity="1"/>
170
- <stop offset="95%" stop-color="#FF7C82" stop-opacity="0.5"/>
171
- <stop offset="100%" stop-color="#FF7C82" stop-opacity="0.5"/>
172
- </radialGradient>
173
- <clipPath id="sector-11">
174
- <path d="M 240,190 L 149.914,45.832 A 170,170 0 0,1 160.190,39.899 Z"/>
175
- </clipPath>
176
- </defs>
177
-
178
- <g>
179
- <circle cx="240" cy="190" r="170" fill="url(#gradient-0)" clip-path="url(#sector-0)"/>
180
- <circle cx="240" cy="190" r="170" fill="url(#gradient-1)" clip-path="url(#sector-1)"/>
181
- <circle cx="240" cy="190" r="170" fill="url(#gradient-2)" clip-path="url(#sector-2)"/>
182
- <circle cx="240" cy="190" r="170" fill="url(#gradient-3)" clip-path="url(#sector-3)"/>
183
- <circle cx="240" cy="190" r="170" fill="url(#gradient-4)" clip-path="url(#sector-4)"/>
184
- <circle cx="240" cy="190" r="170" fill="url(#gradient-5)" clip-path="url(#sector-5)"/>
185
- <circle cx="240" cy="190" r="170" fill="url(#gradient-6)" clip-path="url(#sector-6)"/>
186
- <circle cx="240" cy="190" r="170" fill="url(#gradient-7)" clip-path="url(#sector-7)"/>
187
- <circle cx="240" cy="190" r="170" fill="url(#gradient-8)" clip-path="url(#sector-8)"/>
188
- <circle cx="240" cy="190" r="170" fill="url(#gradient-9)" clip-path="url(#sector-9)"/>
189
- <circle cx="240" cy="190" r="170" fill="url(#gradient-10)" clip-path="url(#sector-10)"/>
190
- <circle cx="240" cy="190" r="170" fill="url(#gradient-11)" clip-path="url(#sector-11)"/>
191
- </g>
192
-
193
- <!-- "Overlay" text: 6 colors cycling, O and y both red -->
194
- <!-- Stroke is 50% opacity of each letter's fill color, rendered behind fill via paint-order -->
195
- <text y="445" font-family="'Varela Round', sans-serif" font-size="100" font-weight="normal" text-anchor="middle" stroke-width="10" stroke-linejoin="round" paint-order="stroke fill">
196
- <tspan x="240"><tspan fill="#F00000" stroke="#F00000" stroke-opacity="0.5">O</tspan><tspan fill="#ECE901" stroke="#ECE901" stroke-opacity="0.5">v</tspan><tspan fill="#008B00" stroke="#008B00" stroke-opacity="0.5">e</tspan><tspan fill="#04ECEB" stroke="#04ECEB" stroke-opacity="0.5">r</tspan><tspan fill="#006FFC" stroke="#006FFC" stroke-opacity="0.5">l</tspan><tspan fill="#FFC0FA" stroke="#FFC0FA" stroke-opacity="0.5">a</tspan><tspan fill="#F00000" stroke="#F00000" stroke-opacity="0.5">y</tspan></tspan>
197
- </text>
198
- </svg>
@@ -1,74 +0,0 @@
1
- # Configuration file for the Sphinx documentation builder.
2
- #
3
- # For the full list of built-in configuration values, see the documentation:
4
- # https://www.sphinx-doc.org/en/master/usage/configuration.html
5
-
6
- import subprocess
7
- import sys
8
- from pathlib import Path
9
-
10
- # -- Path setup --------------------------------------------------------------
11
- # Add overlay-language/src to sys.path so autodoc can import the modules.
12
- sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "src"))
13
-
14
- # -- Project information -----------------------------------------------------
15
- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
16
-
17
- project = 'Overlay Language'
18
- copyright = '2025, Bo Yang'
19
- author = 'Bo Yang'
20
-
21
- # -- General configuration ---------------------------------------------------
22
- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
23
-
24
- extensions = [
25
- 'sphinx.ext.autodoc',
26
- 'sphinx.ext.extlinks',
27
- 'sphinx_mdinclude',
28
- ]
29
-
30
- source_suffix = {
31
- '.rst': 'restructuredtext',
32
- '.md': 'markdown',
33
- }
34
-
35
- autodoc_default_options = {
36
- 'imported-members': True,
37
- }
38
-
39
- templates_path = ['_templates']
40
- exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', 'api/modules.rst', 'api/overlay.rst']
41
-
42
-
43
-
44
- # -- Options for HTML output -------------------------------------------------
45
- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
46
-
47
- html_static_path = ['_static']
48
- html_theme = 'alabaster'
49
- html_favicon = '_static/favicon.svg'
50
- html_theme_options = {
51
- 'description': 'A dependency injection framework with pytest-fixture syntax, '
52
- 'plus a configuration language for declarative programming.',
53
- 'logo': 'logo.svg',
54
- 'fixed_sidebar': True,
55
- 'github_user': 'Atry',
56
- 'github_repo': 'overlay',
57
- 'github_banner': True,
58
- 'github_button': True,
59
- 'github_type': 'watch',
60
- 'github_count': True,
61
- }
62
-
63
- # -- GitHub source links (pinned to git commit) --------------------------------
64
-
65
- _git_commit = subprocess.check_output(
66
- ["git", "rev-parse", "HEAD"], text=True
67
- ).strip()
68
-
69
- extlinks = {
70
- 'github': (
71
- f'https://github.com/Atry/overlay/tree/{_git_commit}/%s',
72
- '%s',
73
- ),
74
- }
@@ -1,61 +0,0 @@
1
- Overlay Language
2
- ================
3
-
4
- ``overlay.language`` is a dependency injection framework with pytest-fixture
5
- syntax, plus a configuration language for declarative programming. The package
6
- has two parts:
7
-
8
- The **Python decorator API** (``@scope``, ``@extern``, ``@resource``) gives you
9
- dependency injection with pytest-fixture syntax — declare what a function needs
10
- and the framework wires it up. Each module owns only its own concern; cross-
11
- cutting behaviour layers on via ``@patch`` without touching the original code.
12
- App-scoped singletons and per-request resources coexist naturally.
13
- See :doc:`tutorial`.
14
-
15
- The **Overlay language** is a configuration language written in ``.oyaml`` /
16
- ``.ojson`` / ``.otoml`` files. SQL queries, format strings, URL patterns — all
17
- the business decisions that clutter Python code — live in the Overlay language
18
- instead, where independent modules deep-merge by name without glue code —
19
- dissolving the
20
- `Expression Problem <https://en.wikipedia.org/wiki/Expression_problem>`_.
21
-
22
- If you have ever struggled to mock a service that tangles I/O with business
23
- logic, or dreaded porting an application from sync to async, or needed to swap
24
- between providers without rewriting half your Python — the Overlay language can
25
- help. Despite looking like a configuration format, it is also a statically typed
26
- modern programming language based on
27
- `overlay-calculus <https://arxiv.org/abs/2602.16291>`_, which is provably more
28
- expressive than λ-calculus, so it can express your entire business logic — not
29
- just configuration. Move that logic into the Overlay language and Python reduces
30
- to thin I/O adapters that are trivial to mock or replace. The same Overlay code runs against any set of adapters and the business logic
31
- never changes, even when you
32
- port your synchronous program to async — the problem known as
33
- `function color <https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/>`_.
34
- See :doc:`overlay-language-tutorial`.
35
-
36
- :doc:`installation`
37
- Install the package from PyPI.
38
-
39
- :doc:`tutorial`
40
- Getting started with the Python decorator API — build a web application
41
- step by step using ``@scope``, ``@extern``, and ``@resource``.
42
-
43
- :doc:`overlay-language-tutorial`
44
- Getting started with the Overlay language — rewrite the same application
45
- in ``.oyaml``, separating business logic from I/O, then switch the
46
- underlying framework to asyncio without changing your code.
47
-
48
- :doc:`specification`
49
- Full language specification for the Overlay language.
50
-
51
- `API Reference <api/overlay.language.html>`__
52
- Python API reference (auto-generated).
53
-
54
- .. toctree::
55
- :hidden:
56
-
57
- installation
58
- tutorial
59
- overlay-language-tutorial
60
- specification
61
- API Reference <api/overlay.language>
@@ -1,8 +0,0 @@
1
- Installation
2
- ============
3
-
4
- Install from `PyPI <https://pypi.org/project/overlay.language/>`_:
5
-
6
- .. code-block:: bash
7
-
8
- pip install overlay.language