openscad-evaluator 1.0.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.
@@ -0,0 +1,116 @@
1
+ Metadata-Version: 2.4
2
+ Name: openscad_evaluator
3
+ Version: 1.0.0
4
+ Summary: An AST evaluator for the OpenSCAD language, producing Manifold CSG geometry from a parsed AST.
5
+ Keywords: openscad,openscad evaluator,csg,manifold
6
+ Author: Revar Desmera
7
+ Author-email: Revar Desmera <revarbat@gmail.com>
8
+ License-Expression: MIT
9
+ Classifier: Development Status :: 5 - Production/Stable
10
+ Classifier: Environment :: Console
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Manufacturing
13
+ Classifier: Operating System :: MacOS :: MacOS X
14
+ Classifier: Operating System :: Microsoft :: Windows
15
+ Classifier: Operating System :: POSIX
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Artistic Software
21
+ Classifier: Topic :: Multimedia :: Graphics :: 3D Modeling
22
+ Classifier: Topic :: Multimedia :: Graphics :: 3D Rendering
23
+ Classifier: Topic :: Software Development :: Libraries
24
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
+ Requires-Dist: manifold3d>=3.0
26
+ Requires-Dist: numpy>=1.24
27
+ Requires-Dist: fonttools>=4.0
28
+ Requires-Dist: shapely>=2.0
29
+ Requires-Dist: shapely-polyskel>=0.1.2
30
+ Requires-Dist: pillow>=10.0
31
+ Requires-Dist: openscad-lalr-parser>=1.1.0
32
+ Requires-Dist: pytest>=7.0.0 ; extra == 'dev'
33
+ Requires-Dist: pytest-cov>=7.1.0 ; extra == 'dev'
34
+ Requires-Dist: genbadge[coverage]>=1.1.0 ; extra == 'dev'
35
+ Requires-Dist: ezdxf>=1.0 ; extra == 'dev'
36
+ Requires-Dist: ezdxf>=1.0 ; extra == 'dxf'
37
+ Maintainer: Revar Desmera
38
+ Maintainer-email: Revar Desmera <revarbat@gmail.com>
39
+ Requires-Python: >=3.11
40
+ Project-URL: Bug Tracker, https://github.com/BelfrySCAD/openscad_evaluator/issues
41
+ Project-URL: Homepage, https://github.com/BelfrySCAD/openscad_evaluator
42
+ Project-URL: Releases, https://github.com/BelfrySCAD/openscad_evaluator/releases
43
+ Project-URL: Repository, https://github.com/BelfrySCAD/openscad_evaluator
44
+ Provides-Extra: dev
45
+ Provides-Extra: dxf
46
+ Description-Content-Type: text/markdown
47
+
48
+ # openscad_evaluator
49
+
50
+ An AST evaluator for the OpenSCAD language, producing [Manifold](https://github.com/elalish/manifold) CSG geometry from a parsed AST.
51
+
52
+ [![Tests](https://github.com/BelfrySCAD/openscad_evaluator/actions/workflows/pytest.yml/badge.svg)](https://github.com/BelfrySCAD/openscad_evaluator/actions/workflows/pytest.yml)
53
+ [![PyPI version](https://img.shields.io/pypi/v/openscad-evaluator)](https://pypi.org/project/openscad-evaluator/)
54
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
55
+
56
+ ## Overview
57
+
58
+ `openscad_evaluator` takes an OpenSCAD AST — as produced by
59
+ [`openscad_lalr_parser`](https://github.com/BelfrySCAD/openscad_lalr_parser) — and walks it to
60
+ produce [Manifold](https://github.com/elalish/manifold) meshes: a two-pass **resolve** (AST walk,
61
+ no CSG calls) then **generate** (bottom-up Manifold/CrossSection construction) pipeline, with
62
+ `$fn`/`$fa`/`$fs`, full built-in coverage (primitives, transforms, boolean ops, 2D geometry,
63
+ `text()`, `surface()`, DXF/3MF import, `roof()`), and a content-hash geometry cache
64
+ (`ManifoldCache`) so repeated renders/debugger pauses skip unchanged Manifold work.
65
+
66
+ It's GUI- and toolkit-agnostic: the only way it talks back to a caller is a handful of optional
67
+ callback parameters on `Evaluator.__init__` (`echo_fn`, `debug_hook`, `error_break_fn`,
68
+ `return_hook`) — no `QObject`, no signals, no direct rendering. This is the evaluator that powers
69
+ [BelfrySCAD](https://github.com/BelfrySCAD/BelfrySCAD).
70
+
71
+ See [`docs/evaluator.md`](docs/evaluator.md) for the full architecture reference: scope
72
+ processing, assignment order, the built-ins table, 2D/3D geometry handling, error format,
73
+ `$variables` scoping, `include`/`use`, and the Manifold provenance / AST-to-geometry-ID mapping
74
+ used for WYSIWYG picking.
75
+
76
+ ## Installation
77
+
78
+ ```bash
79
+ pip install openscad-evaluator
80
+ ```
81
+
82
+ For DXF import support:
83
+
84
+ ```bash
85
+ pip install openscad-evaluator[dxf]
86
+ ```
87
+
88
+ ### From Source
89
+
90
+ ```bash
91
+ git clone https://github.com/BelfrySCAD/openscad_evaluator.git
92
+ cd openscad_evaluator
93
+ pip install -e ".[dev]"
94
+ ```
95
+
96
+ ## Quick Start
97
+
98
+ ```python
99
+ from openscad_lalr_parser import getASTfromString, build_scopes
100
+ from openscad_evaluator import Evaluator
101
+
102
+ nodes = getASTfromString("cube([10, 10, 10]);")
103
+ root_scope = build_scopes(nodes)
104
+
105
+ ev = Evaluator()
106
+ bodies, id_to_node = ev.evaluate(nodes, root_scope)
107
+ for body in bodies:
108
+ print(body.body.num_tri(), "triangles")
109
+ ```
110
+
111
+ ## Development
112
+
113
+ ```bash
114
+ uv sync --all-extras
115
+ uv run pytest
116
+ ```
@@ -0,0 +1,69 @@
1
+ # openscad_evaluator
2
+
3
+ An AST evaluator for the OpenSCAD language, producing [Manifold](https://github.com/elalish/manifold) CSG geometry from a parsed AST.
4
+
5
+ [![Tests](https://github.com/BelfrySCAD/openscad_evaluator/actions/workflows/pytest.yml/badge.svg)](https://github.com/BelfrySCAD/openscad_evaluator/actions/workflows/pytest.yml)
6
+ [![PyPI version](https://img.shields.io/pypi/v/openscad-evaluator)](https://pypi.org/project/openscad-evaluator/)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
8
+
9
+ ## Overview
10
+
11
+ `openscad_evaluator` takes an OpenSCAD AST — as produced by
12
+ [`openscad_lalr_parser`](https://github.com/BelfrySCAD/openscad_lalr_parser) — and walks it to
13
+ produce [Manifold](https://github.com/elalish/manifold) meshes: a two-pass **resolve** (AST walk,
14
+ no CSG calls) then **generate** (bottom-up Manifold/CrossSection construction) pipeline, with
15
+ `$fn`/`$fa`/`$fs`, full built-in coverage (primitives, transforms, boolean ops, 2D geometry,
16
+ `text()`, `surface()`, DXF/3MF import, `roof()`), and a content-hash geometry cache
17
+ (`ManifoldCache`) so repeated renders/debugger pauses skip unchanged Manifold work.
18
+
19
+ It's GUI- and toolkit-agnostic: the only way it talks back to a caller is a handful of optional
20
+ callback parameters on `Evaluator.__init__` (`echo_fn`, `debug_hook`, `error_break_fn`,
21
+ `return_hook`) — no `QObject`, no signals, no direct rendering. This is the evaluator that powers
22
+ [BelfrySCAD](https://github.com/BelfrySCAD/BelfrySCAD).
23
+
24
+ See [`docs/evaluator.md`](docs/evaluator.md) for the full architecture reference: scope
25
+ processing, assignment order, the built-ins table, 2D/3D geometry handling, error format,
26
+ `$variables` scoping, `include`/`use`, and the Manifold provenance / AST-to-geometry-ID mapping
27
+ used for WYSIWYG picking.
28
+
29
+ ## Installation
30
+
31
+ ```bash
32
+ pip install openscad-evaluator
33
+ ```
34
+
35
+ For DXF import support:
36
+
37
+ ```bash
38
+ pip install openscad-evaluator[dxf]
39
+ ```
40
+
41
+ ### From Source
42
+
43
+ ```bash
44
+ git clone https://github.com/BelfrySCAD/openscad_evaluator.git
45
+ cd openscad_evaluator
46
+ pip install -e ".[dev]"
47
+ ```
48
+
49
+ ## Quick Start
50
+
51
+ ```python
52
+ from openscad_lalr_parser import getASTfromString, build_scopes
53
+ from openscad_evaluator import Evaluator
54
+
55
+ nodes = getASTfromString("cube([10, 10, 10]);")
56
+ root_scope = build_scopes(nodes)
57
+
58
+ ev = Evaluator()
59
+ bodies, id_to_node = ev.evaluate(nodes, root_scope)
60
+ for body in bodies:
61
+ print(body.body.num_tri(), "triangles")
62
+ ```
63
+
64
+ ## Development
65
+
66
+ ```bash
67
+ uv sync --all-extras
68
+ uv run pytest
69
+ ```
@@ -0,0 +1,69 @@
1
+ [build-system]
2
+ requires = ["uv_build>=0.8.22,<=0.9.20"]
3
+ build-backend = "uv_build"
4
+
5
+ [project]
6
+ name = "openscad_evaluator"
7
+ version = "1.0.0"
8
+ description = "An AST evaluator for the OpenSCAD language, producing Manifold CSG geometry from a parsed AST."
9
+ readme = "README.md"
10
+ authors = [
11
+ { name="Revar Desmera", email="revarbat@gmail.com" },
12
+ ]
13
+ maintainers = [
14
+ { name="Revar Desmera", email="revarbat@gmail.com" },
15
+ ]
16
+ license = "MIT"
17
+ requires-python = ">=3.11"
18
+ classifiers = [
19
+ "Development Status :: 5 - Production/Stable",
20
+ "Environment :: Console",
21
+ "Intended Audience :: Developers",
22
+ "Intended Audience :: Manufacturing",
23
+ "Operating System :: MacOS :: MacOS X",
24
+ "Operating System :: Microsoft :: Windows",
25
+ "Operating System :: POSIX",
26
+ "Programming Language :: Python :: 3",
27
+ "Programming Language :: Python :: 3.11",
28
+ "Programming Language :: Python :: 3.12",
29
+ "Programming Language :: Python :: 3.13",
30
+ "Topic :: Artistic Software",
31
+ "Topic :: Multimedia :: Graphics :: 3D Modeling",
32
+ "Topic :: Multimedia :: Graphics :: 3D Rendering",
33
+ "Topic :: Software Development :: Libraries",
34
+ "Topic :: Software Development :: Libraries :: Python Modules",
35
+ ]
36
+ keywords = ["openscad", "openscad evaluator", "csg", "manifold"]
37
+ dependencies = [
38
+ "manifold3d>=3.0",
39
+ "numpy>=1.24",
40
+ "fonttools>=4.0",
41
+ "shapely>=2.0",
42
+ "shapely-polyskel>=0.1.2",
43
+ "Pillow>=10.0",
44
+ "openscad_lalr_parser>=1.1.0",
45
+ ]
46
+
47
+ [project.optional-dependencies]
48
+ dxf = [
49
+ "ezdxf>=1.0",
50
+ ]
51
+ dev = [
52
+ "pytest>=7.0.0",
53
+ "pytest-cov>=7.1.0",
54
+ "genbadge[coverage]>=1.1.0",
55
+ "ezdxf>=1.0",
56
+ ]
57
+
58
+ [project.urls]
59
+ "Homepage" = "https://github.com/BelfrySCAD/openscad_evaluator"
60
+ "Repository" = "https://github.com/BelfrySCAD/openscad_evaluator"
61
+ "Bug Tracker" = "https://github.com/BelfrySCAD/openscad_evaluator/issues"
62
+ "Releases" = "https://github.com/BelfrySCAD/openscad_evaluator/releases"
63
+
64
+ [tool.pytest.ini_options]
65
+ testpaths = ["tests"]
66
+ python_files = ["test_*.py"]
67
+ python_classes = ["Test*"]
68
+ python_functions = ["test_*"]
69
+ addopts = "-v"
@@ -0,0 +1,36 @@
1
+ """openscad_evaluator: an AST evaluator for the OpenSCAD language, producing
2
+ Manifold CSG geometry from a parsed AST (see `openscad_lalr_parser`)."""
3
+
4
+ from openscad_evaluator.evaluator import (
5
+ Evaluator,
6
+ EvalContext,
7
+ EvalError,
8
+ CSGNode,
9
+ ColoredBody,
10
+ ManifoldCache,
11
+ OscObject,
12
+ OscRange,
13
+ CallSiteProfile,
14
+ ProfileResult,
15
+ to_renderable_bodies,
16
+ flatten_csg_tree,
17
+ format_csg_tree,
18
+ resolve_use_scopes,
19
+ )
20
+
21
+ __all__ = [
22
+ "Evaluator",
23
+ "EvalContext",
24
+ "EvalError",
25
+ "CSGNode",
26
+ "ColoredBody",
27
+ "ManifoldCache",
28
+ "OscObject",
29
+ "OscRange",
30
+ "CallSiteProfile",
31
+ "ProfileResult",
32
+ "to_renderable_bodies",
33
+ "flatten_csg_tree",
34
+ "format_csg_tree",
35
+ "resolve_use_scopes",
36
+ ]
@@ -0,0 +1,173 @@
1
+ """Static CSS/SVG named-color table, replacing a runtime QColor(name) lookup
2
+ so this package has no GUI-toolkit dependency.
3
+
4
+ Generated (not hand-transcribed) from a live PySide6 install:
5
+
6
+ from PySide6.QtGui import QColor
7
+ names = sorted(QColor.colorNames())
8
+ table = {n: QColor(n).getRgbF()[:3] for n in names}
9
+
10
+ Qt's list is 148 names, not the "standard" 147-entry CSS3/SVG set -- it
11
+ includes British-spelling aliases (`grey`, `darkgrey`, `lightgrey`, etc.)
12
+ alongside their American-spelling equivalents (`gray`, `darkgray`,
13
+ `lightgray`, ...) at identical RGB values, and it does *not* include
14
+ `rebeccapurple` (a CSS Color Module Level 4 addition Qt never adopted).
15
+ Generating this table programmatically rather than transcribing an external
16
+ "CSS3 color list" reference guarantees exact behavioral parity with the
17
+ QColor-based lookup this replaces, including those two edge cases.
18
+
19
+ To regenerate (e.g. after a PySide6 upgrade that might change the list):
20
+ run the snippet above in a Python environment with PySide6 installed and
21
+ replace CSS_COLORS below with the result.
22
+ """
23
+
24
+ CSS_COLORS: dict[str, tuple[float, float, float]] = {
25
+ "aliceblue": (0.9411764740943909, 0.9725490212440491, 1.0),
26
+ "antiquewhite": (0.9803921580314636, 0.9215686321258545, 0.843137264251709),
27
+ "aqua": (0.0, 1.0, 1.0),
28
+ "aquamarine": (0.49803921580314636, 1.0, 0.8313725590705872),
29
+ "azure": (0.9411764740943909, 1.0, 1.0),
30
+ "beige": (0.9607843160629272, 0.9607843160629272, 0.8627451062202454),
31
+ "bisque": (1.0, 0.8941176533699036, 0.7686274647712708),
32
+ "black": (0.0, 0.0, 0.0),
33
+ "blanchedalmond": (1.0, 0.9215686321258545, 0.8039215803146362),
34
+ "blue": (0.0, 0.0, 1.0),
35
+ "blueviolet": (0.5411764979362488, 0.16862745583057404, 0.886274516582489),
36
+ "brown": (0.6470588445663452, 0.16470588743686676, 0.16470588743686676),
37
+ "burlywood": (0.8705882430076599, 0.7215686440467834, 0.529411792755127),
38
+ "cadetblue": (0.37254902720451355, 0.6196078658103943, 0.6274510025978088),
39
+ "chartreuse": (0.49803921580314636, 1.0, 0.0),
40
+ "chocolate": (0.8235294222831726, 0.4117647111415863, 0.11764705926179886),
41
+ "coral": (1.0, 0.49803921580314636, 0.3137255012989044),
42
+ "cornflowerblue": (0.3921568691730499, 0.5843137502670288, 0.929411768913269),
43
+ "cornsilk": (1.0, 0.9725490212440491, 0.8627451062202454),
44
+ "crimson": (0.8627451062202454, 0.0784313753247261, 0.23529411852359772),
45
+ "cyan": (0.0, 1.0, 1.0),
46
+ "darkblue": (0.0, 0.0, 0.545098066329956),
47
+ "darkcyan": (0.0, 0.545098066329956, 0.545098066329956),
48
+ "darkgoldenrod": (0.7215686440467834, 0.5254902243614197, 0.04313725605607033),
49
+ "darkgray": (0.6627451181411743, 0.6627451181411743, 0.6627451181411743),
50
+ "darkgreen": (0.0, 0.3921568691730499, 0.0),
51
+ "darkgrey": (0.6627451181411743, 0.6627451181411743, 0.6627451181411743),
52
+ "darkkhaki": (0.7411764860153198, 0.7176470756530762, 0.41960784792900085),
53
+ "darkmagenta": (0.545098066329956, 0.0, 0.545098066329956),
54
+ "darkolivegreen": (0.3333333432674408, 0.41960784792900085, 0.18431372940540314),
55
+ "darkorange": (1.0, 0.5490196347236633, 0.0),
56
+ "darkorchid": (0.6000000238418579, 0.19607843458652496, 0.800000011920929),
57
+ "darkred": (0.545098066329956, 0.0, 0.0),
58
+ "darksalmon": (0.9137254953384399, 0.5882353186607361, 0.47843137383461),
59
+ "darkseagreen": (0.5607843399047852, 0.7372549176216125, 0.5607843399047852),
60
+ "darkslateblue": (0.2823529541492462, 0.239215686917305, 0.545098066329956),
61
+ "darkslategray": (0.18431372940540314, 0.30980393290519714, 0.30980393290519714),
62
+ "darkslategrey": (0.18431372940540314, 0.30980393290519714, 0.30980393290519714),
63
+ "darkturquoise": (0.0, 0.8078431487083435, 0.8196078538894653),
64
+ "darkviolet": (0.5803921818733215, 0.0, 0.8274509906768799),
65
+ "deeppink": (1.0, 0.0784313753247261, 0.5764706134796143),
66
+ "deepskyblue": (0.0, 0.7490196228027344, 1.0),
67
+ "dimgray": (0.4117647111415863, 0.4117647111415863, 0.4117647111415863),
68
+ "dimgrey": (0.4117647111415863, 0.4117647111415863, 0.4117647111415863),
69
+ "dodgerblue": (0.11764705926179886, 0.5647059082984924, 1.0),
70
+ "firebrick": (0.6980392336845398, 0.13333334028720856, 0.13333334028720856),
71
+ "floralwhite": (1.0, 0.9803921580314636, 0.9411764740943909),
72
+ "forestgreen": (0.13333334028720856, 0.545098066329956, 0.13333334028720856),
73
+ "fuchsia": (1.0, 0.0, 1.0),
74
+ "gainsboro": (0.8627451062202454, 0.8627451062202454, 0.8627451062202454),
75
+ "ghostwhite": (0.9725490212440491, 0.9725490212440491, 1.0),
76
+ "gold": (1.0, 0.843137264251709, 0.0),
77
+ "goldenrod": (0.8549019694328308, 0.6470588445663452, 0.125490203499794),
78
+ "gray": (0.501960813999176, 0.501960813999176, 0.501960813999176),
79
+ "green": (0.0, 0.501960813999176, 0.0),
80
+ "greenyellow": (0.6784313917160034, 1.0, 0.18431372940540314),
81
+ "grey": (0.501960813999176, 0.501960813999176, 0.501960813999176),
82
+ "honeydew": (0.9411764740943909, 1.0, 0.9411764740943909),
83
+ "hotpink": (1.0, 0.4117647111415863, 0.7058823704719543),
84
+ "indianred": (0.8039215803146362, 0.3607843220233917, 0.3607843220233917),
85
+ "indigo": (0.29411765933036804, 0.0, 0.5098039507865906),
86
+ "ivory": (1.0, 1.0, 0.9411764740943909),
87
+ "khaki": (0.9411764740943909, 0.9019607901573181, 0.5490196347236633),
88
+ "lavender": (0.9019607901573181, 0.9019607901573181, 0.9803921580314636),
89
+ "lavenderblush": (1.0, 0.9411764740943909, 0.9607843160629272),
90
+ "lawngreen": (0.48627451062202454, 0.9882352948188782, 0.0),
91
+ "lemonchiffon": (1.0, 0.9803921580314636, 0.8039215803146362),
92
+ "lightblue": (0.6784313917160034, 0.8470588326454163, 0.9019607901573181),
93
+ "lightcoral": (0.9411764740943909, 0.501960813999176, 0.501960813999176),
94
+ "lightcyan": (0.8784313797950745, 1.0, 1.0),
95
+ "lightgoldenrodyellow": (0.9803921580314636, 0.9803921580314636, 0.8235294222831726),
96
+ "lightgray": (0.8274509906768799, 0.8274509906768799, 0.8274509906768799),
97
+ "lightgreen": (0.5647059082984924, 0.9333333373069763, 0.5647059082984924),
98
+ "lightgrey": (0.8274509906768799, 0.8274509906768799, 0.8274509906768799),
99
+ "lightpink": (1.0, 0.7137255072593689, 0.7568627595901489),
100
+ "lightsalmon": (1.0, 0.6274510025978088, 0.47843137383461),
101
+ "lightseagreen": (0.125490203499794, 0.6980392336845398, 0.6666666865348816),
102
+ "lightskyblue": (0.529411792755127, 0.8078431487083435, 0.9803921580314636),
103
+ "lightslategray": (0.46666666865348816, 0.5333333611488342, 0.6000000238418579),
104
+ "lightslategrey": (0.46666666865348816, 0.5333333611488342, 0.6000000238418579),
105
+ "lightsteelblue": (0.6901960968971252, 0.7686274647712708, 0.8705882430076599),
106
+ "lightyellow": (1.0, 1.0, 0.8784313797950745),
107
+ "lime": (0.0, 1.0, 0.0),
108
+ "limegreen": (0.19607843458652496, 0.8039215803146362, 0.19607843458652496),
109
+ "linen": (0.9803921580314636, 0.9411764740943909, 0.9019607901573181),
110
+ "magenta": (1.0, 0.0, 1.0),
111
+ "maroon": (0.501960813999176, 0.0, 0.0),
112
+ "mediumaquamarine": (0.4000000059604645, 0.8039215803146362, 0.6666666865348816),
113
+ "mediumblue": (0.0, 0.0, 0.8039215803146362),
114
+ "mediumorchid": (0.729411780834198, 0.3333333432674408, 0.8274509906768799),
115
+ "mediumpurple": (0.5764706134796143, 0.43921568989753723, 0.8588235378265381),
116
+ "mediumseagreen": (0.23529411852359772, 0.7019608020782471, 0.4431372582912445),
117
+ "mediumslateblue": (0.48235294222831726, 0.40784314274787903, 0.9333333373069763),
118
+ "mediumspringgreen": (0.0, 0.9803921580314636, 0.6039215922355652),
119
+ "mediumturquoise": (0.2823529541492462, 0.8196078538894653, 0.800000011920929),
120
+ "mediumvioletred": (0.7803921699523926, 0.08235294371843338, 0.5215686559677124),
121
+ "midnightblue": (0.09803921729326248, 0.09803921729326248, 0.43921568989753723),
122
+ "mintcream": (0.9607843160629272, 1.0, 0.9803921580314636),
123
+ "mistyrose": (1.0, 0.8941176533699036, 0.8823529481887817),
124
+ "moccasin": (1.0, 0.8941176533699036, 0.7098039388656616),
125
+ "navajowhite": (1.0, 0.8705882430076599, 0.6784313917160034),
126
+ "navy": (0.0, 0.0, 0.501960813999176),
127
+ "oldlace": (0.9921568632125854, 0.9607843160629272, 0.9019607901573181),
128
+ "olive": (0.501960813999176, 0.501960813999176, 0.0),
129
+ "olivedrab": (0.41960784792900085, 0.5568627715110779, 0.13725490868091583),
130
+ "orange": (1.0, 0.6470588445663452, 0.0),
131
+ "orangered": (1.0, 0.2705882489681244, 0.0),
132
+ "orchid": (0.8549019694328308, 0.43921568989753723, 0.8392156958580017),
133
+ "palegoldenrod": (0.9333333373069763, 0.9098039269447327, 0.6666666865348816),
134
+ "palegreen": (0.5960784554481506, 0.9843137264251709, 0.5960784554481506),
135
+ "paleturquoise": (0.686274528503418, 0.9333333373069763, 0.9333333373069763),
136
+ "palevioletred": (0.8588235378265381, 0.43921568989753723, 0.5764706134796143),
137
+ "papayawhip": (1.0, 0.9372549057006836, 0.8352941274642944),
138
+ "peachpuff": (1.0, 0.8549019694328308, 0.7254902124404907),
139
+ "peru": (0.8039215803146362, 0.5215686559677124, 0.24705882370471954),
140
+ "pink": (1.0, 0.7529411911964417, 0.7960784435272217),
141
+ "plum": (0.8666666746139526, 0.6274510025978088, 0.8666666746139526),
142
+ "powderblue": (0.6901960968971252, 0.8784313797950745, 0.9019607901573181),
143
+ "purple": (0.501960813999176, 0.0, 0.501960813999176),
144
+ "red": (1.0, 0.0, 0.0),
145
+ "rosybrown": (0.7372549176216125, 0.5607843399047852, 0.5607843399047852),
146
+ "royalblue": (0.2549019753932953, 0.4117647111415863, 0.8823529481887817),
147
+ "saddlebrown": (0.545098066329956, 0.2705882489681244, 0.07450980693101883),
148
+ "salmon": (0.9803921580314636, 0.501960813999176, 0.4470588266849518),
149
+ "sandybrown": (0.95686274766922, 0.6431372761726379, 0.3764705955982208),
150
+ "seagreen": (0.18039216101169586, 0.545098066329956, 0.34117648005485535),
151
+ "seashell": (1.0, 0.9607843160629272, 0.9333333373069763),
152
+ "sienna": (0.6274510025978088, 0.32156863808631897, 0.1764705926179886),
153
+ "silver": (0.7529411911964417, 0.7529411911964417, 0.7529411911964417),
154
+ "skyblue": (0.529411792755127, 0.8078431487083435, 0.9215686321258545),
155
+ "slateblue": (0.4156862795352936, 0.3529411852359772, 0.8039215803146362),
156
+ "slategray": (0.43921568989753723, 0.501960813999176, 0.5647059082984924),
157
+ "slategrey": (0.43921568989753723, 0.501960813999176, 0.5647059082984924),
158
+ "snow": (1.0, 0.9803921580314636, 0.9803921580314636),
159
+ "springgreen": (0.0, 1.0, 0.49803921580314636),
160
+ "steelblue": (0.27450981736183167, 0.5098039507865906, 0.7058823704719543),
161
+ "tan": (0.8235294222831726, 0.7058823704719543, 0.5490196347236633),
162
+ "teal": (0.0, 0.501960813999176, 0.501960813999176),
163
+ "thistle": (0.8470588326454163, 0.7490196228027344, 0.8470588326454163),
164
+ "tomato": (1.0, 0.38823530077934265, 0.27843138575553894),
165
+ "transparent": (0.0, 0.0, 0.0),
166
+ "turquoise": (0.250980406999588, 0.8784313797950745, 0.8156862854957581),
167
+ "violet": (0.9333333373069763, 0.5098039507865906, 0.9333333373069763),
168
+ "wheat": (0.9607843160629272, 0.8705882430076599, 0.7019608020782471),
169
+ "white": (1.0, 1.0, 1.0),
170
+ "whitesmoke": (0.9607843160629272, 0.9607843160629272, 0.9607843160629272),
171
+ "yellow": (1.0, 1.0, 0.0),
172
+ "yellowgreen": (0.6039215922355652, 0.8039215803146362, 0.19607843458652496),
173
+ }