overlay.language 0.2.0.post25.dev0__tar.gz → 0.2.0.post30.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.
- overlay_language-0.2.0.post30.dev0/.readthedocs.yaml +23 -0
- {overlay_language-0.2.0.post25.dev0 → overlay_language-0.2.0.post30.dev0}/PKG-INFO +3 -6
- {overlay_language-0.2.0.post25.dev0 → overlay_language-0.2.0.post30.dev0}/pyproject.toml +7 -8
- overlay_language-0.2.0.post30.dev0/src/overlay/language/__init__.py +3 -0
- overlay_language-0.2.0.post25.dev0/docs/Makefile +0 -24
- overlay_language-0.2.0.post25.dev0/docs/_static/favicon.svg +0 -189
- overlay_language-0.2.0.post25.dev0/docs/_static/logo.svg +0 -198
- overlay_language-0.2.0.post25.dev0/docs/conf.py +0 -74
- overlay_language-0.2.0.post25.dev0/docs/index.rst +0 -61
- overlay_language-0.2.0.post25.dev0/docs/installation.rst +0 -8
- overlay_language-0.2.0.post25.dev0/docs/overlay-language-tutorial.rst +0 -344
- overlay_language-0.2.0.post25.dev0/docs/specification.md +0 -1007
- overlay_language-0.2.0.post25.dev0/docs/tutorial.rst +0 -336
- overlay_language-0.2.0.post25.dev0/src/overlay/language/__init__.py +0 -100
- overlay_language-0.2.0.post25.dev0/src/overlay/language/_config.py +0 -56
- overlay_language-0.2.0.post25.dev0/src/overlay/language/_core.py +0 -2908
- overlay_language-0.2.0.post25.dev0/src/overlay/language/_interned_linked_list.py +0 -147
- overlay_language-0.2.0.post25.dev0/src/overlay/language/_mixin_directory.py +0 -150
- overlay_language-0.2.0.post25.dev0/src/overlay/language/_mixin_parser.py +0 -487
- overlay_language-0.2.0.post25.dev0/src/overlay/language/_runtime.py +0 -710
- {overlay_language-0.2.0.post25.dev0 → overlay_language-0.2.0.post30.dev0}/.gitignore +0 -0
- {overlay_language-0.2.0.post25.dev0 → overlay_language-0.2.0.post30.dev0}/README.md +0 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
|
|
3
|
+
build:
|
|
4
|
+
os: ubuntu-24.04
|
|
5
|
+
tools:
|
|
6
|
+
python: "3.13"
|
|
7
|
+
commands:
|
|
8
|
+
- mkdir -p $READTHEDOCS_OUTPUT/html
|
|
9
|
+
- |
|
|
10
|
+
cat > $READTHEDOCS_OUTPUT/html/index.html << 'HTMLEOF'
|
|
11
|
+
<!DOCTYPE html>
|
|
12
|
+
<html>
|
|
13
|
+
<head>
|
|
14
|
+
<meta charset="utf-8">
|
|
15
|
+
<title>Redirecting to mixinv2</title>
|
|
16
|
+
<meta http-equiv="refresh" content="0; url=https://mixinv2.readthedocs.io/">
|
|
17
|
+
<link rel="canonical" href="https://mixinv2.readthedocs.io/">
|
|
18
|
+
</head>
|
|
19
|
+
<body>
|
|
20
|
+
<p>This project has been renamed. Redirecting to <a href="https://mixinv2.readthedocs.io/">mixinv2.readthedocs.io</a>...</p>
|
|
21
|
+
</body>
|
|
22
|
+
</html>
|
|
23
|
+
HTMLEOF
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: overlay.language
|
|
3
|
-
Version: 0.2.0.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.2.0.post30.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:
|
|
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.post30.dev0
|
|
@@ -14,8 +14,8 @@ metadata = false
|
|
|
14
14
|
|
|
15
15
|
[project]
|
|
16
16
|
name = "overlay.language"
|
|
17
|
-
dynamic = ["version"]
|
|
18
|
-
description = "
|
|
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
|
-
"
|
|
33
|
+
"mixinv2=={{ version }}",
|
|
32
34
|
]
|
|
33
35
|
|
|
34
|
-
[
|
|
35
|
-
|
|
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"]
|
|
@@ -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&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 = 'MIXINv2'
|
|
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
|
-
MIXINv2
|
|
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
|
-
**MIXINv2** is a configuration language written in ``.mixin.yaml`` /
|
|
16
|
-
``.mixin.json`` / ``.mixin.toml`` files (also ``.oyaml`` / ``.ojson`` / ``.otoml``). SQL queries, format strings, URL patterns — all
|
|
17
|
-
the business decisions that clutter Python code — live in MIXINv2
|
|
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 — MIXINv2 can
|
|
25
|
-
help. Despite looking like a configuration format, it is also a statically typed
|
|
26
|
-
modern programming language based on
|
|
27
|
-
`inheritance-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 MIXINv2 and Python reduces
|
|
30
|
-
to thin I/O adapters that are trivial to mock or replace. The same MIXINv2 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 MIXINv2 — rewrite the same application
|
|
45
|
-
in ``.mixin.yaml``, 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 MIXINv2.
|
|
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>
|